<?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>177229</bug_id>
          
          <creation_ts>2017-09-20 07:13:19 -0700</creation_ts>
          <short_desc>Remove RenderNamedFlowThread and FlowThreadController</short_desc>
          <delta_ts>2017-09-20 12:53:05 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>174978</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1350727</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-20 07:13:19 -0700</bug_when>
    <thetext>Get rid of a portion of the rendering code to support CSS Regions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350728</commentid>
    <comment_count>1</comment_count>
      <attachid>321313</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-20 07:19:24 -0700</bug_when>
    <thetext>Created attachment 321313
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350747</commentid>
    <comment_count>2</comment_count>
      <attachid>321318</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-20 08:07:19 -0700</bug_when>
    <thetext>Created attachment 321318
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350749</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-20 08:20:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/34548750&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350756</commentid>
    <comment_count>4</comment_count>
      <attachid>321318</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-20 08:37:27 -0700</bug_when>
    <thetext>Comment on attachment 321318
patch

Clearing flags on attachment: 321318

Committed r222263: &lt;http://trac.webkit.org/changeset/222263&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350757</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-20 08:37:29 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350765</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-09-20 08:52:36 -0700</bug_when>
    <thetext>Hyatt was also working on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350907</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-09-20 12:53:05 -0700</bug_when>
    <thetext>I&apos;ll finish the mechanical cleanup, Hyatt takes over to refactor things.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321313</attachid>
            <date>2017-09-20 07:19:24 -0700</date>
            <delta_ts>2017-09-20 08:07:19 -0700</delta_ts>
            <desc>patch</desc>
            <filename>named-flow-removal-rendernamedflowthread.patch</filename>
            <type>text/plain</type>
            <size>148079</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNy0wOS0yMCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCBhbmQgRmxvd1RocmVhZENvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIyOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdldCByaWQgb2YgYSBwb3J0aW9uIG9mIHRoZSBy
ZW5kZXJpbmcgY29kZSB0aGF0IHN1cHBvcnRzIENTUyBSZWdpb25zLgorCisgICAgICAgIFRoZSBm
ZWF0dXJlIGlzIGRpc2FibGVkLCBubyBmdW5jdGlvbmFsIGNoYW5nZXMuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcmVuZGVyaW5nL0Zs
b3dUaHJlYWRDb250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvRmxv
d1RocmVhZENvbnRyb2xsZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OmNhbkNvbXB1dGVSZWdpb25SYW5nZUZvckJveCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2hpbGRCb3hJc1Vuc3BsaXR0YWJsZUZvckZyYWdtZW50
YXRpb24gY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpkZXRlcm1pbmVMb2dpY2FsTGVmdFBv
c2l0aW9uRm9yQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphcHBs
eUJlZm9yZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6YXBwbHlB
ZnRlckJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bG9naWNhbEhl
aWdodEZvckNoaWxkRm9yRnJhZ21lbnRhdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrTGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
a0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdHNJblJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Ym9yZGVyQm94UmVj
dEluUmVnaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6c2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cmVuZGVyQm94UmVnaW9uSW5mbyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZ2ljYWxIZWln
aHRVc2luZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEZvclBvc2l0aW9uZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2dpY2FsSGVpZ2h0Rm9yUG9zaXRpb25lZCBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjphZGp1c3RlZFBvc2l0aW9uUmVsYXRp
dmVUb09mZnNldFBhcmVudCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6d2lsbEJlRGVzdHJveWVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OmhvdmVyQW5jZXN0b3IgY29uc3Qp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0
UGFyZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmluY3Jl
bWVudEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bG93VGhyZWFkOjpkZWNyZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6YWRkUmVnaW9uc092ZXJmbG93RnJvbUNoaWxkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGluZUJveGVzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6
OnBhaW50TGF5ZXJDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0
VGVzdExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxhdGVDbGlw
UmVjdHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50Rml4ZWRM
YXllcnNJbk5hbWVkRmxvd3MpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXI6OmhpdFRlc3RGaXhlZExheWVyc0luTmFtZWRGbG93cyk6IERlbGV0ZWQuCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVy
Q29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBv
c2l0aW5nUmVxdWlyZW1lbnRzRm9yTmFtZWRGbG93Rml4ZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRy
ZWVGb3JOYW1lZEZsb3dGaXhlZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dG
cmFnbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6
Y2hlY2tSZWdpb25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDo6bmFtZWRGbG93VGhyZWFkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93VGhyZWFkLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93VGhyZWFkLmg6IFJlbW92ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblJvb3Qg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpvZmZzZXRQYXJlbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNSZW5kZXJHcmlkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpSZW5kZXJSZWdpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyUmVnaW9uOjphdHRhY2hSZWdpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJSZWdpb24uaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlZ2lvbjo6cGFyZW50TmFt
ZWRGbG93VGhyZWFkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0ZUxheWVycyk6CisgICAgICAg
IChXZWJDb3JlOjp3cml0ZVJlbmRlclJlZ2lvbkxpc3QpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6d3JpdGVSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojps
YXlvdXRDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmxheW91dENvbnRl
bnRJbkF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJW
aWV3OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2VsZWN0aW9uQm91
bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnJlcGFpbnRTZWxlY3Rp
b24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnVwZGF0ZVNlbGVjdGlvbkZvclN1YnRyZWVz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnN0eWxlRGlkQ2hhbmdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmNoZWNrVHdvUGFzc0xheW91dEZvckF1dG9IZWlnaHRS
ZWdpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnB1c2hMYXlvdXRT
dGF0ZUZvckN1cnJlbnRGbG93VGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6
OnBvcExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVmlldzo6bGF5b3V0Q29udGVudFRvQ29tcHV0ZU92ZXJmbG93SW5SZWdpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OnNwbGl0U2VsZWN0aW9uQmV0d2Vl
blN1YnRyZWVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6Omhhc1Jl
bmRlck5hbWVkRmxvd1RocmVhZHMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVmlldzo6Zmxvd1RocmVhZENvbnRyb2xsZXIpOiBEZWxldGVkLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRy
ZWVSb290LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVSb290OjphZGp1
c3RGb3JWaXNpYmxlU2VsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvU2Vs
ZWN0aW9uU3VidHJlZVJvb3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvblN1YnRyZWVS
b290OjpzZXRTZWxlY3Rpb25EYXRhKToKKwogMjAxNy0wOS0yMCAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIERPTSBhbmQgc3R5bGluZyBzdXBwb3J0
IGZvciBDU1MgUmVnaW9ucwpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIyMjI1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0y
NjQ1LDcgKzI2NDUsNiBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL0ZsZXhp
YmxlQm94QWxnb3JpdGhtLmNwcAogICAgIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAog
ICAgIHJlbmRlcmluZy9GbG9hdGluZ09iamVjdHMuY3BwCi0gICAgcmVuZGVyaW5nL0Zsb3dUaHJl
YWRDb250cm9sbGVyLmNwcAogICAgIHJlbmRlcmluZy9HcmlkLmNwcAogICAgIHJlbmRlcmluZy9H
cmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RMb2NhdGlv
bi5jcHAKQEAgLTI3MTAsNyArMjcwOSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5k
ZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlck11bHRp
Q29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5jcHAKLSAgICByZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAog
ICAgIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlclByb2dy
ZXNzLmNwcAogICAgIHJlbmRlcmluZy9SZW5kZXJRdW90ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIy
MjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkod29ya2luZyBjb3B5KQpAQCAtNzExLDcgKzcxMSw2IEBACiAJCTFBMzU4NkUxMTUyNjRGOTUw
MDIyQTY1OSAvKiBTVkdBbmltYXRlZEludGVnZXJPcHRpb25hbEludGVnZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFNjIzQ0UxNTFGNzJBNjAw
MzZFMkY0IC8qIFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAgKi87IH07CiAJ
CTFBMzc2MzZCMUEyRTY4QkIwMDlBN0VFMiAvKiBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzNzYzNjkx
QTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAgKi87IH07CiAJ
CTFBMzc2MzZDMUEyRTY4QkIwMDlBN0VFMiAvKiBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMzc2MzZBMUEy
RTY4QkIwMDlBN0VFMiAvKiBTdG9yYWdlTmFtZXNwYWNlUHJvdmlkZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkxQTNGRjlDMzE1MjY1MzU5MDAy
Mjg4QTEgLyogUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODVGMjNFMTUxOTE4NzMwMEJDMTdCRSAvKiBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuY3BwICovOyB9OwogCQkxQTQ4MzJCMzFBOTUzQkE2MDA4QjRERkUg
LyogTG9jYWxpemVkU3RyaW5nc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUE0ODMyQjIxQTk1M0JBNjAwOEI0REZFIC8qIExvY2FsaXplZFN0
cmluZ3NDb2NvYS5tbSAqLzsgfTsKIAkJMUE0OTRCRkEwQTEyMkY0NDAwRkRBRkMxIC8qIEpTSFRN
TEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMUE0OTRCRjgwQTEyMkY0NDAwRkRBRkMxIC8qIEpTSFRNTEVsZW1lbnQuY3BwICovOyB9Owog
CQkxQTQ5NEJGQjBBMTIyRjQ0MDBGREFGQzEgLyogSlNIVE1MRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0OTRCRjkwQTEyMkY0NDAwRkRB
RkMxIC8qIEpTSFRNTEVsZW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNTkxOCw3ICs1OTE3LDYgQEAKIAkJQkM4MjQzMkEwRDBDRThBMjAw
NDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDODI0MzI2MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTFRyYW5z
YWN0aW9uLmggKi87IH07CiAJCUJDODI0M0U4MEQwQ0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0
dXJlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBC
QzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuY3BwICovOyB9OwogCQlC
QzgyNDNFOTBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODI0M0U3MEQwQ0ZENzUwMDQ2MEM4
RiAvKiBXaW5kb3dGZWF0dXJlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCUJDODVGMjNEMTUxOTE1RTAwMEJDMTdCRSAvKiBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDODVGMjNDMTUxOTE1RTAwMEJDMTdCRSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCAqLzsg
fTsKIAkJQkM4QUUzNEUxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVBcmVhLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEFFMzRDMTJFQTA5
NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5jcHAgKi87IH07CiAJCUJDOEFFMzRGMTJFQTA5
NkEwMEVCM0FFNiAvKiBTY3JvbGxhYmxlQXJlYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4QUUzNEQxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFi
bGVBcmVhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkM4Qjg1M0UwRTdDN0YxMTAwQUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzhCODUzQzBFN0M3RjEx
MDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjU4OCw4ICs2NTg2LDYgQEAKIAkJRDZGNzk2MEQx
NjZGRkVDRTAwNzZERDE4IC8qIEpTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENkY3OTYwQzE2NkZGRUNF
MDA3NkREMTggLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCAqLzsgfTsKIAkJRDcw
QUQ2NTcxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzBBRDY1NTEzRTEzNDJCMDA1QjUwQjQg
LyogUmVuZGVyUmVnaW9uLmNwcCAqLzsgfTsKIAkJRDcwQUQ2NTgxM0UxMzQyQjAwNUI1MEI0IC8q
IFJlbmRlclJlZ2lvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDcwQUQ2NTYxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oICovOyB9Owot
CQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDcyRjZENzcxNTMx
NTlBMzAwMUVFNDRFIC8qIEZsb3dUaHJlYWRDb250cm9sbGVyLmNwcCAqLzsgfTsKLQkJRDcyRjZE
N0ExNTMxNTlBMzAwMUVFNDRFIC8qIEZsb3dUaHJlYWRDb250cm9sbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzJGNkQ3ODE1MzE1OUEzMDAxRUU0
NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuaCAqLzsgfTsKIAkJRDhCNjE1MkYxMDMyNDk1MTAw
Qzg1NTRBIC8qIENvb2tpZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDhCNjE1MkUxMDMyNDk1MTAwQzg1NTRBIC8qIENvb2tpZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCURBRUQyMDMwMTZGMjQ0MkIw
MDcwRUMwRiAvKiBQYWdlQ29uc29sZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQUFDQjNEOTE2RjI0MTY0MDA2NjYxMzUgLyogUGFnZUNv
bnNvbGVDbGllbnQuY3BwICovOyB9OwogCQlEQUVEMjAzMTE2RjI0NDQ4MDA3MEVDMEYgLyogUGFn
ZUNvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IERBQUNCM0RBMTZGMjQxNjQwMDY2NjEzNSAvKiBQYWdlQ29uc29sZUNsaWVudC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNDYxMyw4
ICsxNDYwOSw2IEBACiAJCUJDODI0MzI2MEQwQ0U4QTIwMDQ2MEM4RiAvKiBKU1NRTFRyYW5zYWN0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMVHJhbnNhY3Rpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4MjQzRTYwRDBDRkQ3NTAwNDYwQzhG
IC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdpbmRvd0ZlYXR1cmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4
MjQzRTcwRDBDRkQ3NTAwNDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdpbmRvd0ZlYXR1cmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCUJDODVGMjNDMTUxOTE1RTAwMEJDMTdCRSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDODVGMjNFMTUxOTE4NzMwMEJD
MTdCRSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkM4QUUzNEMxMkVBMDk2QTAwRUIzQUU2IC8qIFNjcm9sbGFibGVBcmVh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNjcm9sbGFibGVBcmVh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4QUUzNEQxMkVBMDk2QTAwRUIz
QUU2IC8qIFNjcm9sbGFibGVBcmVhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcm9sbGFibGVBcmVhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOEI4NTND
MEU3QzdGMTEwMEFCNjk4NCAvKiBTY3JvbGxiYXJUaGVtZU1hYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTY3JvbGxiYXJUaGVtZU1hYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTUzNzcsOCArMTUzNzEsNiBAQAogCQlENkY3OTYwQzE2NkZGRUNFMDA3NkRE
MTggLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTFRlbXBsYXRlRWxlbWVudEN1c3RvbS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5k
ZXJSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVy
UmVnaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDcwQUQ2NTYxM0UxMzQy
QjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJSZWdpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDcyRjZE
NzcxNTMxNTlBMzAwMUVFNDRFIC8qIEZsb3dUaHJlYWRDb250cm9sbGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZsb3dUaHJlYWRDb250cm9sbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRDcyRjZENzgxNTMxNTlBMzAwMUVFNDRFIC8qIEZs
b3dUaHJlYWRDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZs
b3dUaHJlYWRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ4QjYx
NTJFMTAzMjQ5NTEwMEM4NTU0QSAvKiBDb29raWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29va2llLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURBQUNCM0Q5
MTZGMjQxNjQwMDY2NjEzNSAvKiBQYWdlQ29uc29sZUNsaWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlQ29uc29sZUNsaWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCURBQUNCM0RBMTZGMjQxNjQwMDY2NjEzNSAvKiBQYWdlQ29uc29s
ZUNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdlQ29uc29sZUNs
aWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU4NzIsOCArMjU4NjQsNiBA
QAogCQkJCTk0REQ3OTczMUU1NEUzQTIwMDU4RkI4MCAvKiBGbGV4aWJsZUJveEFsZ29yaXRobS5o
ICovLAogCQkJCTlBNTI4RTgxMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuY3Bw
ICovLAogCQkJCTlBNTI4RTgyMTdEN0Y1MkYwMEFBOTUxOCAvKiBGbG9hdGluZ09iamVjdHMuaCAq
LywKLQkJCQlENzJGNkQ3NzE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIu
Y3BwICovLAotCQkJCUQ3MkY2RDc4MTUzMTU5QTMwMDFFRTQ0RSAvKiBGbG93VGhyZWFkQ29udHJv
bGxlci5oICovLAogCQkJCTkzNUM0Nzc0MDlBQzREOEQwMEE2QUFCNCAvKiBHYXBSZWN0cy5oICov
LAogCQkJCUUxMTJGNDcwMUUzQTg1RjIwMEQ2Q0RGRCAvKiBHcmlkLmNwcCAqLywKIAkJCQlFMTEy
RjQ2RjFFM0E4NUQ4MDBENkNERkQgLyogR3JpZC5oICovLApAQCAtMjYwMTQsOCArMjYwMDQsNiBA
QAogCQkJCUJDMUE3RDk2MThGQ0I1QjAwMDQyMTg3OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5u
ZXJQbGFjZWhvbGRlci5oICovLAogCQkJCThBQzgyMkZBMTgwRkMwMzMwMEZCNjRENSAvKiBSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAgKi8sCiAJCQkJOEFDODIyRkIxODBGQzAzMzAwRkI2NEQ1
IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmggKi8sCi0JCQkJQkM4NUYyM0UxNTE5MTg3MzAw
QkMxN0JFIC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAgKi8sCi0JCQkJQkM4NUYyM0MxNTE5
MTVFMDAwQkMxN0JFIC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5oICovLAogCQkJCUJDRUE0ODQw
MDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuY3BwICovLAogCQkJCUJDRUE0ODQxMDk3
RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJPYmplY3QuaCAqLywKIAkJCQk4Mzg4NjczNDFEMTNCQTU5
MDAzNjk3RDAgLyogUmVuZGVyT2JqZWN0RW51bXMuaCAqLywKQEAgLTI3OTA4LDcgKzI3ODk2LDYg
QEAKIAkJCQk2RTBFNTY5QzE4M0JGRkU2MDBFMEU4RDUgLyogRmxvYXRSb3VuZGVkUmVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQjI3NTM1NkQwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNThDRDM1Q0IxOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6
ZUhhc2guaCBpbiBIZWFkZXJzICovLAotCQkJCUQ3MkY2RDdBMTUzMTU5QTMwMDFFRTQ0RSAvKiBG
bG93VGhyZWFkQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ5OTNCRTYwQjJGMkIx
QzAwNTA0OTdGIC8qIEZvY3VzQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDYyMjg3
ODQwQjREQjMyMjAwMEMzNERGIC8qIEZvY3VzRGlyZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCNkQ5RDIzNTE0RUFCRDI2MDA5MEQ3NUUgLyogRm9jdXNFdmVudC5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTc1Nyw3ICsyOTc0NCw2IEBACiAJCQkJQkNFMzJCOUMxNTE3QzBCMjAwRjU0MkVDIC8q
IFJlbmRlck11bHRpQ29sdW1uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzFBN0Q5ODE4RkNC
NUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCThBQzgyMkZEMTgwRkMwMzMwMEZCNjRENSAvKiBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkM4NUYyM0QxNTE5MTVFMDAwQkMxN0JF
IC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ4ODAw
OTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM4
ODY3MzUxRDEzQkE1RjAwMzY5N0QwIC8qIFJlbmRlck9iamVjdEVudW1zLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQ0ZBOTMwODEwMzMzMTkzMDA3QjI1RDEgLyogUmVuZGVyT3ZlcmZsb3cuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzE5NTMsNyArMzE5MzksNiBAQAogCQkJCUIyNzUzNTZDMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFNpemUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1NUIwQjA1
MzgxNDAwMkNFNjRGIC8qIEZsb2F0U2l6ZUNHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyNzUz
NTdBMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFNpemVNYWMubW0gaW4gU291cmNlcyAqLywKLQkJ
CQlENzJGNkQ3OTE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ5OTNCRTUwQjJGMkIxQzAwNTA0OTdGIC8qIEZvY3VzQ29udHJv
bGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCNkQ5RDIzNjE0RUFCRDI2MDA5MEQ3NUUgLyog
Rm9jdXNFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREE2NDBEMDA2Q0Q2MDBFRjZG
MjYgLyogRm9udC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTMzNzMwLDcgKzMzNzE1LDYgQEAKIAkJ
CQlCQ0UzMkI5RTE1MTdDMjI3MDBGNTQyRUMgLyogUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkMxQTdEOTcxOEZDQjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRp
Q29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCThBQzgyMkZD
MTgwRkMwMzMwMEZCNjRENSAvKiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkxQTNGRjlDMzE1MjY1MzU5MDAyMjg4QTEgLyogUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRUE0ODdGMDk3RDkzMDIwMDk0QzlFNCAvKiBS
ZW5kZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTQzQkY1OUMxMTQ5MjkyODAwQzY0
M0NBIC8qIFJlbmRlclByb2dyZXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVBNTc0RjI0MTMx
REI5MzkwMDQ3MUI4OCAvKiBSZW5kZXJRdW90ZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAko
cmV2aXNpb24gMjIyMjU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRD
b250cm9sbGVyLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI4MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRp
c2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICog
ICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGbG93VGhy
ZWFkQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgotI2luY2x1
ZGUgIlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgiCi0j
aW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCi0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWlj
U3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRmxvd1RocmVhZENvbnRyb2xsZXI6
OkZsb3dUaHJlYWRDb250cm9sbGVyKFJlbmRlclZpZXcqIHZpZXcpCi0gICAgOiBtX3ZpZXcodmll
dykKLSAgICAsIG1faXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRPcmRlckRpcnR5KGZhbHNlKQotICAg
ICwgbV9mbG93VGhyZWFkc1dpdGhBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoMCkKLXsKLX0KLQot
Rmxvd1RocmVhZENvbnRyb2xsZXI6On5GbG93VGhyZWFkQ29udHJvbGxlcigpCi17Ci19Ci0KLXZv
aWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OnN0eWxlRGlkQ2hhbmdlKCkKLXsKLSAgICBhdXRvJiB2
aWV3U3R5bGUgPSBtX3ZpZXctPnN0eWxlKCk7Ci0gICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIg
OiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KQotICAgICAgICBmbG93UmVuZGVyZXItPnNl
dFN0eWxlKFJlbmRlckZsb3dUaHJlYWQ6OmNyZWF0ZUZsb3dUaHJlYWRTdHlsZSgmdmlld1N0eWxl
KSk7Ci19Ci0KLXZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OmxheW91dFJlbmRlck5hbWVkRmxv
d1RocmVhZHMoKQotewotICAgIHVwZGF0ZUZsb3dUaHJlYWRzQ2hhaW5JZk5lY2Vzc2FyeSgpOwot
ICAgIGZvciAoYXV0byYgZmxvd1JlbmRlcmVyIDogKm1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlz
dCkKLSAgICAgICAgZmxvd1JlbmRlcmVyLT5sYXlvdXRJZk5lZWRlZCgpOwotfQotCi12b2lkIEZs
b3dUaHJlYWRDb250cm9sbGVyOjpyZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KEVsZW1l
bnQmIGNvbnRlbnRFbGVtZW50LCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQmIG5hbWVkRmxvdykKLXsK
LSAgICBBU1NFUlQoIW1fbWFwTmFtZWRGbG93Q29udGVudEVsZW1lbnQuY29udGFpbnMoJmNvbnRl
bnRFbGVtZW50KSk7Ci0gICAgQVNTRVJUKCFuYW1lZEZsb3cuaGFzQ29udGVudEVsZW1lbnQoY29u
dGVudEVsZW1lbnQpKTsKLSAgICBtX21hcE5hbWVkRmxvd0NvbnRlbnRFbGVtZW50LmFkZCgmY29u
dGVudEVsZW1lbnQsICZuYW1lZEZsb3cpOwotICAgIG5hbWVkRmxvdy5yZWdpc3Rlck5hbWVkRmxv
d0NvbnRlbnRFbGVtZW50KGNvbnRlbnRFbGVtZW50KTsKLX0KLQotdm9pZCBGbG93VGhyZWFkQ29u
dHJvbGxlcjo6dW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KEVsZW1lbnQmIGNvbnRl
bnRFbGVtZW50KQotewotICAgIGF1dG8gaXQgPSBtX21hcE5hbWVkRmxvd0NvbnRlbnRFbGVtZW50
LmZpbmQoJmNvbnRlbnRFbGVtZW50KTsKLSAgICBBU1NFUlQoaXQgIT0gbV9tYXBOYW1lZEZsb3dD
b250ZW50RWxlbWVudC5lbmQoKSk7Ci0gICAgQVNTRVJUKGl0LT52YWx1ZSk7Ci0gICAgQVNTRVJU
KGl0LT52YWx1ZS0+aGFzQ29udGVudEVsZW1lbnQoY29udGVudEVsZW1lbnQpKTsKLSAgICBpdC0+
dmFsdWUtPnVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudChjb250ZW50RWxlbWVudCk7
Ci0gICAgbV9tYXBOYW1lZEZsb3dDb250ZW50RWxlbWVudC5yZW1vdmUoJmNvbnRlbnRFbGVtZW50
KTsKLX0KLQotdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNDaGFp
bklmTmVjZXNzYXJ5KCkKLXsKLSAgICBBU1NFUlQobV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0
KTsKLSAgICBBU1NFUlQoaXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENvbnNpc3RlbnQo
KSk7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIGxlZnQtb3ZlciBmbG93IHRocmVhZHMuCi0gICAgUmVu
ZGVyTmFtZWRGbG93VGhyZWFkTGlzdCB0b1JlbW92ZUxpc3Q7Ci0gICAgZm9yIChhdXRvJiBmbG93
UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KSB7Ci0gICAgICAgIGlmIChm
bG93UmVuZGVyZXItPmlzTWFya2VkRm9yRGVzdHJ1Y3Rpb24oKSkKLSAgICAgICAgICAgIHRvUmVt
b3ZlTGlzdC5hZGQoZmxvd1JlbmRlcmVyKTsKLSAgICB9Ci0KLSAgICBpZiAodG9SZW1vdmVMaXN0
LnNpemUoKSA+IDApCi0gICAgICAgIHNldElzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0
eSh0cnVlKTsKLQotICAgIGZvciAoYXV0byYgZmxvd1JlbmRlcmVyIDogdG9SZW1vdmVMaXN0KSB7
Ci0gICAgICAgIG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+cmVtb3ZlKGZsb3dSZW5kZXJl
cik7Ci0gICAgICAgIGZsb3dSZW5kZXJlci0+ZGVzdHJveSgpOwotICAgIH0KLQotICAgIGlmIChp
c1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGlydHkoKSkgewotICAgICAgICAvLyBBcnJhbmdl
IHRoZSB0aHJlYWQgbGlzdCBhY2NvcmRpbmcgdG8gZGVwZW5kZW5jaWVzLgotICAgICAgICBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWRMaXN0IHNvcnRlZExpc3Q7Ci0gICAgICAgIGZvciAoYXV0byYgZmxv
d1JlbmRlcmVyIDogKm1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCkgewotICAgICAgICAgICAg
aWYgKHNvcnRlZExpc3QuY29udGFpbnMoZmxvd1JlbmRlcmVyKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIGZsb3dSZW5kZXJlci0+cHVzaERlcGVuZGVuY2llcyhzb3J0
ZWRMaXN0KTsKLSAgICAgICAgICAgIHNvcnRlZExpc3QuYWRkKGZsb3dSZW5kZXJlcik7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5zd2FwKHNvcnRlZExp
c3QpOwotICAgICAgICBzZXRJc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGlydHkoZmFsc2Up
OwotICAgIH0KLX0KLQotYm9vbCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVh
ZHNOZWVkaW5nTGF5b3V0KCkKLXsKLSAgICBib29sIG5lZWRzVHdvUGFzc0xheW91dCA9IGZhbHNl
OwotCi0gICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJl
YWRMaXN0KSB7Ci0gICAgICAgIEFTU0VSVCghZmxvd1JlbmRlcmVyLT5uZWVkc1R3b1BoYXNlc0xh
eW91dCgpKTsKLSAgICAgICAgQVNTRVJUKGZsb3dSZW5kZXJlci0+aW5NZWFzdXJlQ29udGVudExh
eW91dFBoYXNlKCkpOwotICAgICAgICBpZiAoZmxvd1JlbmRlcmVyLT5uZWVkc0xheW91dCgpICYm
IGZsb3dSZW5kZXJlci0+aGFzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkpCi0gICAgICAgICAg
ICBuZWVkc1R3b1Bhc3NMYXlvdXQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChuZWVkc1R3b1Bh
c3NMYXlvdXQpCi0gICAgICAgIHJlc2V0Rmxvd1RocmVhZHNXaXRoQXV0b0hlaWdodFJlZ2lvbnMo
KTsKLQotICAgIHJldHVybiBuZWVkc1R3b1Bhc3NMYXlvdXQ7Ci19Ci0KLWJvb2wgRmxvd1RocmVh
ZENvbnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzTmVlZGluZ1R3b1N0ZXBMYXlvdXQoKQotewot
ICAgIGJvb2wgbmVlZHNUd29QYXNzTGF5b3V0ID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIGZs
b3dSZW5kZXJlciA6ICptX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QpIHsKLSAgICAgICAgaWYg
KGZsb3dSZW5kZXJlci0+bmVlZHNUd29QaGFzZXNMYXlvdXQoKSkgewotICAgICAgICAgICAgbmVl
ZHNUd29QYXNzTGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgaWYgKG5lZWRzVHdvUGFzc0xheW91dCkKLSAgICAgICAgcmVzZXRGbG93VGhy
ZWFkc1dpdGhBdXRvSGVpZ2h0UmVnaW9ucygpOwotCi0gICAgcmV0dXJuIG5lZWRzVHdvUGFzc0xh
eW91dDsKLX0KLQotdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6cmVzZXRGbG93VGhyZWFkc1dp
dGhBdXRvSGVpZ2h0UmVnaW9ucygpCi17Ci0gICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIgOiAq
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KSB7Ci0gICAgICAgIGlmIChmbG93UmVuZGVyZXIt
Pmhhc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpKSB7Ci0gICAgICAgICAgICBmbG93UmVuZGVy
ZXItPm1hcmtBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNGb3JMYXlvdXQoKTsKLSAgICAgICAgICAg
IGZsb3dSZW5kZXJlci0+aW52YWxpZGF0ZVJlZ2lvbnMoKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxvd1RocmVhZHNJbnRvQ29uc3Ry
YWluZWRQaGFzZSgpCi17Ci0gICAgLy8gV2FsayB0aGUgZmxvdyBjaGFpbiBpbiByZXZlcnNlIG9y
ZGVyIHRvIHVwZGF0ZSB0aGUgYXV0by1oZWlnaHQgcmVnaW9ucyBhbmQgY29tcHV0ZSBjb3JyZWN0
IHNpemVzIGZvciB0aGUgY29udGFpbmluZyByZWdpb25zLiBPbmx5IGFmdGVyIHRoaXMgd2UgY2Fu
Ci0gICAgLy8gc2V0IHRoZSBmbG93IGluIHRoZSBjb25zdHJhaW5lZCBsYXlvdXQgcGhhc2UuCi0g
ICAgZm9yIChhdXRvIGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPnJiZWdpbigp
LCBlbmQgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPnJlbmQoKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgewotICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dSZW5kZXJlciA9
ICppdGVyOwotICAgICAgICBBU1NFUlQoIWZsb3dSZW5kZXJlci0+aGFzUmVnaW9ucygpIHx8IGZs
b3dSZW5kZXJlci0+aGFzVmFsaWRSZWdpb25JbmZvKCkpOwotICAgICAgICBmbG93UmVuZGVyZXIt
PmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChmbG93UmVuZGVyZXItPmhhc0F1dG9Mb2dp
Y2FsSGVpZ2h0UmVnaW9ucygpKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZmxvd1JlbmRlcmVyLT5u
ZWVkc1R3b1BoYXNlc0xheW91dCgpKTsKLSAgICAgICAgICAgIGZsb3dSZW5kZXJlci0+bWFya0F1
dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0ZvckxheW91dCgpOwotICAgICAgICB9Ci0gICAgICAgIGZs
b3dSZW5kZXJlci0+c2V0TGF5b3V0UGhhc2UoUmVuZGVyRmxvd1RocmVhZDo6TGF5b3V0UGhhc2VD
b25zdHJhaW5lZCk7Ci0gICAgICAgIGZsb3dSZW5kZXJlci0+Y2xlYXJOZWVkc1R3b1BoYXNlc0xh
eW91dCgpOwotICAgIH0KLX0KLQotdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlRmxv
d1RocmVhZHNJbnRvT3ZlcmZsb3dQaGFzZSgpCi17Ci0gICAgZm9yIChhdXRvIGl0ZXIgPSBtX3Jl
bmRlck5hbWVkRmxvd1RocmVhZExpc3QtPnJiZWdpbigpLCBlbmQgPSBtX3JlbmRlck5hbWVkRmxv
d1RocmVhZExpc3QtPnJlbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dSZW5kZXJlciA9ICppdGVyOwotICAgICAgICBBU1NFUlQo
IWZsb3dSZW5kZXJlci0+aGFzUmVnaW9ucygpIHx8IGZsb3dSZW5kZXJlci0+aGFzVmFsaWRSZWdp
b25JbmZvKCkpOwotICAgICAgICBBU1NFUlQoIWZsb3dSZW5kZXJlci0+bmVlZHNUd29QaGFzZXNM
YXlvdXQoKSk7Ci0KLSAgICAgICAgLy8gSW4gdGhlIG92ZXJmbG93IGNvbXB1dGF0aW9uIHBoYXNl
IHRoZSBmbG93IHRocmVhZHMgc3RhcnQgaW4gdGhlIGNvbnN0cmFpbmVkIHBoYXNlIGV2ZW4gdGhv
dWdoIG9wdGltaXphdGlvbnMgZGlkbid0IHNldCB0aGUgc3RhdGUgYmVmb3JlLgotICAgICAgICBm
bG93UmVuZGVyZXItPnNldExheW91dFBoYXNlKFJlbmRlckZsb3dUaHJlYWQ6OkxheW91dFBoYXNl
Q29uc3RyYWluZWQpOwotCi0gICAgICAgIGZsb3dSZW5kZXJlci0+bGF5b3V0SWZOZWVkZWQoKTsK
LSAgICAgICAgZmxvd1JlbmRlcmVyLT5tYXJrUmVnaW9uc0Zvck92ZXJmbG93TGF5b3V0SWZOZWVk
ZWQoKTsKLSAgICAgICAgZmxvd1JlbmRlcmVyLT5zZXRMYXlvdXRQaGFzZShSZW5kZXJGbG93VGhy
ZWFkOjpMYXlvdXRQaGFzZU92ZXJmbG93KTsKLSAgICB9Ci19Ci0KLXZvaWQgRmxvd1RocmVhZENv
bnRyb2xsZXI6OnVwZGF0ZUZsb3dUaHJlYWRzSW50b01lYXN1cmVDb250ZW50UGhhc2UoKQotewot
ICAgIGZvciAoYXV0byYgZmxvd1JlbmRlcmVyIDogKm1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlz
dCkgewotICAgICAgICBBU1NFUlQoZmxvd1JlbmRlcmVyLT5pbkZpbmFsTGF5b3V0UGhhc2UoKSk7
Ci0KLSAgICAgICAgZmxvd1JlbmRlcmVyLT5kaXNwYXRjaE5hbWVkRmxvd0V2ZW50cygpOwotICAg
ICAgICBmbG93UmVuZGVyZXItPnNldExheW91dFBoYXNlKFJlbmRlckZsb3dUaHJlYWQ6OkxheW91
dFBoYXNlTWVhc3VyZUNvbnRlbnQpOwotICAgIH0KLX0KLQotdm9pZCBGbG93VGhyZWFkQ29udHJv
bGxlcjo6dXBkYXRlRmxvd1RocmVhZHNJbnRvRmluYWxQaGFzZSgpCi17Ci0gICAgZm9yIChhdXRv
IGl0ZXIgPSBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPnJiZWdpbigpLCBlbmQgPSBtX3Jl
bmRlck5hbWVkRmxvd1RocmVhZExpc3QtPnJlbmQoKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewot
ICAgICAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIGZsb3dSZW5kZXJlciA9ICppdGVyOwotICAg
ICAgICBmbG93UmVuZGVyZXItPmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIGlmIChmbG93UmVu
ZGVyZXItPm5lZWRzVHdvUGhhc2VzTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGZsb3dSZW5kZXJl
ci0+bWFya1JlZ2lvbnNGb3JPdmVyZmxvd0xheW91dElmTmVlZGVkKCk7Ci0gICAgICAgICAgICBm
bG93UmVuZGVyZXItPmNsZWFyTmVlZHNUd29QaGFzZXNMYXlvdXQoKTsKLSAgICAgICAgfQotICAg
ICAgICBmbG93UmVuZGVyZXItPnNldExheW91dFBoYXNlKFJlbmRlckZsb3dUaHJlYWQ6OkxheW91
dFBoYXNlRmluYWwpOwotICAgIH0KLX0KLQotdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBk
YXRlRmxvd1RocmVhZHNMYXllclRvUmVnaW9uTWFwcGluZ3NJZk5lZWRlZCgpCi17Ci0gICAgZm9y
IChhdXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KQotICAg
ICAgICBmbG93UmVuZGVyZXItPnVwZGF0ZUFsbExheWVyVG9SZWdpb25NYXBwaW5nc0lmTmVlZGVk
KCk7Ci19Ci0KLXZvaWQgRmxvd1RocmVhZENvbnRyb2xsZXI6OnVwZGF0ZU5hbWVkRmxvd3NMYXll
ckxpc3RzSWZOZWVkZWQoKQotewotICAgIGZvciAoYXV0byYgZmxvd1JlbmRlcmVyIDogKm1fcmVu
ZGVyTmFtZWRGbG93VGhyZWFkTGlzdCkKLSAgICAgICAgZmxvd1JlbmRlcmVyLT5sYXllcigpLT51
cGRhdGVMYXllckxpc3RzSWZOZWVkZWQoKTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGNvbXBh
cmVaSW5kZXhGbG93VGhyZWFkQ29udHJvbGxlcihSZW5kZXJMYXllciogZmlyc3QsIFJlbmRlckxh
eWVyKiBzZWNvbmQpCi17Ci0gICAgcmV0dXJuIGZpcnN0LT56SW5kZXgoKSA8IHNlY29uZC0+eklu
ZGV4KCk7Ci19Ci0KLS8vIENvbGxlY3QgdGhlIGZpeGVkIHBvc2l0aW9uZWQgbGF5ZXJzIHRoYXQg
aGF2ZSB0aGUgbmFtZWQgZmxvd3MgYXMgY29udGFpbmluZyBibG9jawotLy8gVGhlc2UgbGF5ZXJz
IGFyZSBwYWludGVkIGFuZCBoaXQtdGVzdGVkIHN0YXJ0aW5nIGZyb20gUmVuZGVyVmlldyBub3Qg
ZnJvbSByZWdpb25zLgotdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6Y29sbGVjdEZpeGVkUG9z
aXRpb25lZExheWVycyhWZWN0b3I8UmVuZGVyTGF5ZXIqPiYgZml4ZWRQb3NMYXllcnMpIGNvbnN0
Ci17Ci0gICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJl
YWRMaXN0KSB7Ci0gICAgICAgIC8vIElmIHRoZSBuYW1lZCBmbG93IGRvZXMgbm90IGhhdmUgYW55
IHJlZ2lvbnMgYXR0YWNoZWQsIGEgZml4ZWQgZWxlbWVudCBzaG91bGQgbm90IGJlCi0gICAgICAg
IC8vIGRpc3BsYXllZCBldmVuIGlmIHRoZSBmaXhlZCBlbGVtZW50IGlzIHBvc2l0aW9uZWQvc2l6
ZWQgYnkgdGhlIHZpZXdwb3J0LgotICAgICAgICBpZiAoIWZsb3dSZW5kZXJlci0+aGFzUmVnaW9u
cygpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgUmVuZGVyTGF5ZXIqIGZsb3dU
aHJlYWRMYXllciA9IGZsb3dSZW5kZXJlci0+bGF5ZXIoKTsKLSAgICAgICAgaWYgKFZlY3RvcjxS
ZW5kZXJMYXllcio+KiBuZWdaT3JkZXJMaXN0ID0gZmxvd1RocmVhZExheWVyLT5uZWdaT3JkZXJM
aXN0KCkpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwLCBzaXplID0gbmVnWk9yZGVy
TGlzdC0+c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgUmVuZGVyTGF5
ZXIqIGN1cnJMYXllciA9IG5lZ1pPcmRlckxpc3QtPmF0KGkpOwotICAgICAgICAgICAgICAgIGlm
IChjdXJyTGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRp
b24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGZpeGVk
UG9zTGF5ZXJzLmFwcGVuZChjdXJyTGF5ZXIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKFZlY3RvcjxSZW5kZXJMYXllcio+KiBwb3NaT3JkZXJMaXN0ID0gZmxvd1Ro
cmVhZExheWVyLT5wb3NaT3JkZXJMaXN0KCkpIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwLCBzaXplID0gcG9zWk9yZGVyTGlzdC0+c2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgICAgICAgICAgUmVuZGVyTGF5ZXIqIGN1cnJMYXllciA9IHBvc1pPcmRlckxpc3QtPmF0KGkp
OwotICAgICAgICAgICAgICAgIGlmIChjdXJyTGF5ZXItPnJlbmRlcmVyKCkuc3R5bGUoKS5wb3Np
dGlvbigpICE9IEZpeGVkUG9zaXRpb24pCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIGZpeGVkUG9zTGF5ZXJzLmFwcGVuZChjdXJyTGF5ZXIpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgc3RkOjpzdGFibGVfc29ydChmaXhlZFBv
c0xheWVycy5iZWdpbigpLCBmaXhlZFBvc0xheWVycy5lbmQoKSwgY29tcGFyZVpJbmRleEZsb3dU
aHJlYWRDb250cm9sbGVyKTsKLX0KLQotI2lmbmRlZiBOREVCVUcKLWJvb2wgRmxvd1RocmVhZENv
bnRyb2xsZXI6OmlzQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnRDb25zaXN0ZW50KCkgY29u
c3QKLXsKLSAgICBpZiAoIWhhc1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSkKLSAgICAgICAgcmV0
dXJuICFoYXNGbG93VGhyZWFkc1dpdGhBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKLQotICAg
IGZvciAoYXV0byYgZmxvd1JlbmRlcmVyIDogKm1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCkg
ewotICAgICAgICBpZiAoIWZsb3dSZW5kZXJlci0+aXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnND
b3VudENvbnNpc3RlbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuaAko
cmV2aXNpb24gMjIyMjU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRD
b250cm9sbGVyLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMDAgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
Ci0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAg
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
LSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKLWNsYXNzIFJlbmRlckxh
eWVyOwotY2xhc3MgUmVuZGVyTmFtZWRGbG93VGhyZWFkOwotCi10eXBlZGVmIExpc3RIYXNoU2V0
PFJlbmRlck5hbWVkRmxvd1RocmVhZCo+IFJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q7Ci0KLWNs
YXNzIEZsb3dUaHJlYWRDb250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBleHBsaWNpdCBGbG93VGhyZWFkQ29udHJvbGxlcihSZW5kZXJWaWV3Kik7
Ci0gICAgfkZsb3dUaHJlYWRDb250cm9sbGVyKCk7Ci0KLSAgICBib29sIGlzUmVuZGVyTmFtZWRG
bG93VGhyZWFkT3JkZXJEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWRPcmRlckRpcnR5OyB9Ci0gICAgdm9pZCBzZXRJc1JlbmRlck5hbWVkRmxvd1RocmVhZE9y
ZGVyRGlydHkoYm9vbCBkaXJ0eSkKLSAgICB7Ci0gICAgICAgIG1faXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWRPcmRlckRpcnR5ID0gZGlydHk7Ci0gICAgICAgIGlmIChkaXJ0eSkKLSAgICAgICAgICAg
IG1fdmlldy0+c2V0TmVlZHNMYXlvdXQoKTsKLSAgICB9Ci0KLSAgICBjb25zdCBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0KiByZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KCkgY29uc3QgeyByZXR1
cm4gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LmdldCgpOyB9Ci0gICAgYm9vbCBoYXNSZW5k
ZXJOYW1lZEZsb3dUaHJlYWRzKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJOYW1lZEZsb3dUaHJl
YWRMaXN0ICYmICFtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPmlzRW1wdHkoKTsgfQotICAg
IHZvaWQgbGF5b3V0UmVuZGVyTmFtZWRGbG93VGhyZWFkcygpOwotICAgIHZvaWQgc3R5bGVEaWRD
aGFuZ2UoKTsKLQotICAgIHZvaWQgcmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudChFbGVt
ZW50JiwgUmVuZGVyTmFtZWRGbG93VGhyZWFkJik7Ci0gICAgdm9pZCB1bnJlZ2lzdGVyTmFtZWRG
bG93Q29udGVudEVsZW1lbnQoRWxlbWVudCYpOwotCi0gICAgYm9vbCBoYXNGbG93VGhyZWFkc1dp
dGhBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKSBjb25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWRz
V2l0aEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uczsgfQotICAgIHZvaWQgaW5jcmVtZW50Rmxvd1Ro
cmVhZHNXaXRoQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCkgeyArK21fZmxvd1RocmVhZHNXaXRo
QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zOyB9Ci0gICAgdm9pZCBkZWNyZW1lbnRGbG93VGhyZWFk
c1dpdGhBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKSB7IEFTU0VSVChtX2Zsb3dUaHJlYWRzV2l0
aEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucyA+IDApOyAtLW1fZmxvd1RocmVhZHNXaXRoQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zOyB9Ci0KLSAgICBib29sIHVwZGF0ZUZsb3dUaHJlYWRzTmVlZGlu
Z0xheW91dCgpOwotICAgIGJvb2wgdXBkYXRlRmxvd1RocmVhZHNOZWVkaW5nVHdvU3RlcExheW91
dCgpOwotICAgIHZvaWQgdXBkYXRlRmxvd1RocmVhZHNJbnRvQ29uc3RyYWluZWRQaGFzZSgpOwot
ICAgIHZvaWQgdXBkYXRlRmxvd1RocmVhZHNJbnRvT3ZlcmZsb3dQaGFzZSgpOwotICAgIHZvaWQg
dXBkYXRlRmxvd1RocmVhZHNJbnRvTWVhc3VyZUNvbnRlbnRQaGFzZSgpOwotICAgIHZvaWQgdXBk
YXRlRmxvd1RocmVhZHNJbnRvRmluYWxQaGFzZSgpOwotCi0gICAgdm9pZCB1cGRhdGVOYW1lZEZs
b3dzTGF5ZXJMaXN0c0lmTmVlZGVkKCk7Ci0gICAgLy8gQ29sbGVjdCB0aGUgZml4ZWQgcG9zaXRp
b25lZCBsYXllcnMgdGhhdCBoYXZlIHRoZSBuYW1lZCBmbG93cyBhcyBjb250YWluaW5nIGJsb2Nr
Ci0gICAgLy8gVGhlc2UgbGF5ZXJzIGFyZSBwYWludGVkIGFuZCBoaXQtdGVzdGVkIGJ5IFJlbmRl
clZpZXcKLSAgICB2b2lkIGNvbGxlY3RGaXhlZFBvc2l0aW9uZWRMYXllcnMoVmVjdG9yPFJlbmRl
ckxheWVyKj4mIGZpeGVkUG9zTGF5ZXJzKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlRmxvd1Ro
cmVhZHNMYXllclRvUmVnaW9uTWFwcGluZ3NJZk5lZWRlZCgpOwotCi0jaWZuZGVmIE5ERUJVRwot
ICAgIGJvb2wgaXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENvbnNpc3RlbnQoKSBjb25z
dDsKLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB1cGRhdGVGbG93VGhyZWFkc0NoYWlu
SWZOZWNlc3NhcnkoKTsKLSAgICB2b2lkIHJlc2V0Rmxvd1RocmVhZHNXaXRoQXV0b0hlaWdodFJl
Z2lvbnMoKTsKLQotcHJpdmF0ZToKLSAgICBSZW5kZXJWaWV3KiBtX3ZpZXc7Ci0gICAgYm9vbCBt
X2lzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eTsKLSAgICB1bnNpZ25lZCBtX2Zsb3dU
aHJlYWRzV2l0aEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdD4gbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0Owot
ICAgIEhhc2hNYXA8Y29uc3QgRWxlbWVudCosIFJlbmRlck5hbWVkRmxvd1RocmVhZCo+IG1fbWFw
TmFtZWRGbG93Q29udGVudEVsZW1lbnQ7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDIy
MjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTU3LDcgKzU3LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUg
IlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMTY4MSwyNyArMTY4MCw4IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OnBhaW50T2JqZWN0KFBhaW50SW5mbyYKIAogICAgIC8vIDEuIHBhaW50IGJh
Y2tncm91bmQsIGJvcmRlcnMgZXRjCiAgICAgaWYgKChwYWludFBoYXNlID09IFBhaW50UGhhc2VC
bG9ja0JhY2tncm91bmQgfHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tn
cm91bmQpICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKLSAgICAgICAgaWYg
KGhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpKSB7Ci0gICAgICAgICAgICBib29sIGRpZENsaXBU
b1JlZ2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBSZW5kZXJOYW1lZEZs
b3dGcmFnbWVudCogbmFtZWRGbG93RnJhZ21lbnQgPSBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQoKTsKLSAgICAgICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudCAmJiBpczxSZW5kZXJO
YW1lZEZsb3dUaHJlYWQ+KHBhaW50SW5mby5wYWludENvbnRhaW5lcikpIHsKLSAgICAgICAgICAg
ICAgICAvLyBJZiB0aGlzIGJveCBnb2VzIGJleW9uZCB0aGUgY3VycmVudCByZWdpb24sIHRoZW4g
bWFrZSBzdXJlIG5vdCB0byBvdmVyZmxvdyB0aGUgcmVnaW9uLgotICAgICAgICAgICAgICAgIC8v
IFRoaXMgKG92ZXJmbG93aW5nIHJlZ2lvbiBYIGFsdG91Z2ggYWxzbyBmcmFnbWVudGVkIHRvIHJl
Z2lvbiBYKzEpIGNvdWxkIGhhcHBlbiB3aGVuIG9uZSBvZiB0aGlzIGJveCdzIGNoaWxkcmVuCi0g
ICAgICAgICAgICAgICAgLy8gb3ZlcmZsb3dzIHJlZ2lvbiBYIGFuZCBpcyBhbiB1bnNwbGl0dGFi
bGUgZWxlbWVudCAobGlrZSBhbiBpbWFnZSkuCi0gICAgICAgICAgICAgICAgLy8gVGhlIHNhbWUg
YXBwbGllcyBmb3IgYSBib3ggb3ZlcmZsb3dpbmcgdGhlIHRvcCBvZiByZWdpb24gWCB3aGVuIHRo
YXQgYm94IGlzIGFsc28gZnJhZ21lbnRlZCBpbiByZWdpb24gWC0xLgotCi0gICAgICAgICAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQoKS5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgZGlkQ2xpcFRv
UmVnaW9uID0gdHJ1ZTsKLQotICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkuY2xp
cChkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpwYWludEluZm8ucGFpbnRDb250YWlu
ZXIpLmRlY29yYXRpb25zQ2xpcFJlY3RGb3JCb3hJbk5hbWVkRmxvd0ZyYWdtZW50KCp0aGlzLCAq
bmFtZWRGbG93RnJhZ21lbnQpKTsKLSAgICAgICAgICAgIH0KLQorICAgICAgICBpZiAoaGFzVmlz
aWJsZUJveERlY29yYXRpb25zKCkpCiAgICAgICAgICAgICBwYWludEJveERlY29yYXRpb25zKHBh
aW50SW5mbywgcGFpbnRPZmZzZXQpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZGlk
Q2xpcFRvUmVnaW9uKQotICAgICAgICAgICAgICAgIHBhaW50SW5mby5jb250ZXh0KCkucmVzdG9y
ZSgpOwotICAgICAgICB9CiAgICAgfQogICAgIAogICAgIC8vIFBhaW50IGxlZ2VuZHMganVzdCBh
Ym92ZSB0aGUgYm9yZGVyIGJlZm9yZSB3ZSBzY3JvbGwgb3IgY2xpcC4KQEAgLTM0MjksOCArMzQw
OSw2IEBAIFJlbmRlclJlZ2lvbiogUmVuZGVyQmxvY2s6OnJlZ2lvbkF0QmxvY2sKIAogc3RhdGlj
IGJvb2wgY2FuQ29tcHV0ZVJlZ2lvblJhbmdlRm9yQm94KGNvbnN0IFJlbmRlckJsb2NrJiBwYXJl
bnRCbG9jaywgY29uc3QgUmVuZGVyQm94JiBjaGlsZEJveCwgY29uc3QgUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaykKIHsKLSAgICBBU1NFUlQoIWNoaWxkQm94Lmlz
UmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpOwotCiAgICAgaWYgKCFmbG93VGhyZWFkQ29udGFpbmlu
Z0Jsb2NrKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTM0NDgsMTEgKzM0MjYsOSBAQCBi
b29sIFJlbmRlckJsb2NrOjpjaGlsZEJveElzVW5zcGxpdHRhYmxlCiAgICAgUmVuZGVyRmxvd1Ro
cmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAgICBib29s
IGNoZWNrQ29sdW1uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5zaG91bGRDaGVj
a0NvbHVtbkJyZWFrcygpOwogICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gIWNoZWNrQ29sdW1u
QnJlYWtzICYmIHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0OwotICAg
IGJvb2wgY2hlY2tSZWdpb25CcmVha3MgPSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPmlzUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKCk7CiAgICAgcmV0dXJuIGNoaWxkLmlzVW5zcGxpdHRhYmxlRm9y
UGFnaW5hdGlvbigpIHx8IGNoaWxkLnN0eWxlKCkuYnJlYWtJbnNpZGUoKSA9PSBBdm9pZEJyZWFr
SW5zaWRlCiAgICAgICAgIHx8IChjaGVja0NvbHVtbkJyZWFrcyAmJiBjaGlsZC5zdHlsZSgpLmJy
ZWFrSW5zaWRlKCkgPT0gQXZvaWRDb2x1bW5CcmVha0luc2lkZSkKLSAgICAgICAgfHwgKGNoZWNr
UGFnZUJyZWFrcyAmJiBjaGlsZC5zdHlsZSgpLmJyZWFrSW5zaWRlKCkgPT0gQXZvaWRQYWdlQnJl
YWtJbnNpZGUpCi0gICAgICAgIHx8IChjaGVja1JlZ2lvbkJyZWFrcyAmJiBjaGlsZC5zdHlsZSgp
LmJyZWFrSW5zaWRlKCkgPT0gQXZvaWRSZWdpb25CcmVha0luc2lkZSk7CisgICAgICAgIHx8IChj
aGVja1BhZ2VCcmVha3MgJiYgY2hpbGQuc3R5bGUoKS5icmVha0luc2lkZSgpID09IEF2b2lkUGFn
ZUJyZWFrSW5zaWRlKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVJlZ2lvblJhbmdl
Rm9yQm94Q2hpbGQoY29uc3QgUmVuZGVyQm94JiBib3gpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkocmV2aXNpb24gMjIyMjU5KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dU
aHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtblNldC5oIgogI2luY2x1ZGUgIlJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFk
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGV4dC5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTg4Myw3ICs4ODIsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrRmxvdzo6ZGV0ZXJtaW5lTG9naWNhbExlCiAgICAgICAgIAogICAgIC8vIFNvbWUgb2Jq
ZWN0cyAoZS5nLiwgdGFibGVzLCBob3Jpem9udGFsIHJ1bGVzLCBvdmVyZmxvdzphdXRvIGJsb2Nr
cykgYXZvaWQgZmxvYXRzLiBUaGV5IG5lZWQKICAgICAvLyB0byBzaGlmdCBvdmVyIGFzIG5lY2Vz
c2FyeSB0byBkb2RnZSBhbnkgZmxvYXRzIHRoYXQgbWlnaHQgZ2V0IGluIHRoZSB3YXkuCi0gICAg
aWYgKGNoaWxkLmF2b2lkc0Zsb2F0cygpICYmIGNvbnRhaW5zRmxvYXRzKCkgJiYgIWlzPFJlbmRl
ck5hbWVkRmxvd1RocmVhZD4oZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpKSkKKyAgICBpZiAo
Y2hpbGQuYXZvaWRzRmxvYXRzKCkgJiYgY29udGFpbnNGbG9hdHMoKSkKICAgICAgICAgbmV3UG9z
aXRpb24gKz0gY29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHMo
Y2hpbGQsIG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGQpKTsKIAogICAgIHNldExvZ2ljYWxMZWZ0
Rm9yQ2hpbGQoY2hpbGQsIHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbmV3UG9z
aXRpb24gOiB0b3RhbEF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAtIG5ld1Bvc2l0aW9uIC0gbG9naWNh
bFdpZHRoRm9yQ2hpbGQoY2hpbGQpLCBhcHBseURlbHRhKTsKQEAgLTE1MTYsMTAgKzE1MTUsMTAg
QEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QmVmb3JlQgogewogICAgIC8vIEZJ
WE1FOiBBZGQgcGFnZSBicmVhayBjaGVja2luZyBoZXJlIHdoZW4gd2Ugc3VwcG9ydCBwcmludGlu
Zy4KICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5p
bmdCbG9jaygpOwotICAgIGJvb2wgaXNJbnNpZGVNdWx0aWNvbEZsb3dUaHJlYWQgPSBmbG93VGhy
ZWFkICYmICFmbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpOworICAgIGJvb2wg
aXNJbnNpZGVNdWx0aWNvbEZsb3dUaHJlYWQgPSBmbG93VGhyZWFkOwogICAgIGJvb2wgY2hlY2tD
b2x1bW5CcmVha3MgPSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPnNob3VsZENoZWNrQ29sdW1u
QnJlYWtzKCk7CiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSAhY2hlY2tDb2x1bW5CcmVha3Mg
JiYgdmlldygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7IC8vIEZJWE1FOiBP
bmNlIGNvbHVtbnMgY2FuIHByaW50IHdlIGhhdmUgdG8gY2hlY2sgdGhpcy4KLSAgICBib29sIGNo
ZWNrUmVnaW9uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5pc1JlbmRlck5hbWVk
Rmxvd1RocmVhZCgpOworICAgIGJvb2wgY2hlY2tSZWdpb25CcmVha3MgPSBmYWxzZTsKICAgICBi
b29sIGNoZWNrQmVmb3JlQWx3YXlzID0gKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLnN0eWxl
KCkuYnJlYWtCZWZvcmUoKSA9PSBDb2x1bW5CcmVha0JldHdlZW4pCiAgICAgICAgIHx8IChjaGVj
a1BhZ2VCcmVha3MgJiYgYWx3YXlzUGFnZUJyZWFrKGNoaWxkLnN0eWxlKCkuYnJlYWtCZWZvcmUo
KSkpOwogICAgIGlmIChjaGVja0JlZm9yZUFsd2F5cyAmJiBpbk5vcm1hbEZsb3coY2hpbGQpICYm
IGhhc05leHRQYWdlKGxvZ2ljYWxPZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRhcnkpKSB7CkBAIC0x
NTQxLDEwICsxNTQwLDEwIEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93OjphcHBseUFmdGVy
QnIKIHsKICAgICAvLyBGSVhNRTogQWRkIHBhZ2UgYnJlYWsgY2hlY2tpbmcgaGVyZSB3aGVuIHdl
IHN1cHBvcnQgcHJpbnRpbmcuCiAgICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZs
b3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBib29sIGlzSW5zaWRlTXVsdGljb2xGbG93
VGhyZWFkID0gZmxvd1RocmVhZCAmJiAhZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJl
YWQoKTsKKyAgICBib29sIGlzSW5zaWRlTXVsdGljb2xGbG93VGhyZWFkID0gZmxvd1RocmVhZDsK
ICAgICBib29sIGNoZWNrQ29sdW1uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5z
aG91bGRDaGVja0NvbHVtbkJyZWFrcygpOwogICAgIGJvb2wgY2hlY2tQYWdlQnJlYWtzID0gIWNo
ZWNrQ29sdW1uQnJlYWtzICYmIHZpZXcoKS5sYXlvdXRTdGF0ZSgpLT5tX3BhZ2VMb2dpY2FsSGVp
Z2h0OyAvLyBGSVhNRTogT25jZSBjb2x1bW5zIGNhbiBwcmludCB3ZSBoYXZlIHRvIGNoZWNrIHRo
aXMuCi0gICAgYm9vbCBjaGVja1JlZ2lvbkJyZWFrcyA9IGZsb3dUaHJlYWQgJiYgZmxvd1RocmVh
ZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKTsKKyAgICBib29sIGNoZWNrUmVnaW9uQnJlYWtz
ID0gZmFsc2U7CiAgICAgYm9vbCBjaGVja0FmdGVyQWx3YXlzID0gKGNoZWNrQ29sdW1uQnJlYWtz
ICYmIGNoaWxkLnN0eWxlKCkuYnJlYWtBZnRlcigpID09IENvbHVtbkJyZWFrQmV0d2VlbikKICAg
ICAgICAgfHwgKGNoZWNrUGFnZUJyZWFrcyAmJiBhbHdheXNQYWdlQnJlYWsoY2hpbGQuc3R5bGUo
KS5icmVha0FmdGVyKCkpKTsKICAgICBpZiAoY2hlY2tBZnRlckFsd2F5cyAmJiBpbk5vcm1hbEZs
b3coY2hpbGQpICYmIGhhc05leHRQYWdlKGxvZ2ljYWxPZmZzZXQsIEluY2x1ZGVQYWdlQm91bmRh
cnkpKSB7CkBAIC0xOTgwLDMyICsxOTc5LDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6
OnBhZ2VSZW1haW5pbgogCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6bG9naWNhbEhlaWdo
dEZvckNoaWxkRm9yRnJhZ21lbnRhdGlvbihjb25zdCBSZW5kZXJCb3gmIGNoaWxkKSBjb25zdAog
ewotICAgIC8vIFRoaXMgbWV0aG9kIGlzIHJlcXVpcmVkIGJlY2F1c2UgcmVnaW9ucyBkbyBub3Qg
ZnJhZ21lbnQgbW9ub2xpdGhpYyBlbGVtZW50cyBidXQgaW5zdGVhZAotICAgIC8vIHRoZXkgbGV0
IHRoZW0gb3ZlcmZsb3cgdGhlIHJlZ2lvbiB0aGV5IGZsb3cgaW4uIFRoaXMgYmVoYXZpb3VyIGlz
IGRpZmZlcmVudCBmcm9tIHRoZSAKLSAgICAvLyBtdWx0aWNvbC9wcmludGluZyBpbXBsZW1lbnRh
dGlvbnMsIHdoaWNoIGhhdmUgbm90IHlldCBiZWVuIHVwZGF0ZWQgdG8gY29ycmVjdGx5IGhhbmRs
ZQotICAgIC8vIG1vbm9saXRoaWMgZWxlbWVudHMuCi0gICAgLy8gQXMgYSByZXN1bHQsIGZvciB0
aGUgbW9tZW50LCB0aGlzIG1ldGhvZCB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgcmVnaW9ucywgdGhl
IG11bHRpY29sIGFuZAotICAgIC8vIHByaW50aW5nIGltcGxlbWVudGF0aW9ucyB3aWxsIHN0aWNr
IHRvIHRoZSBleGlzdGluZyBiZWhhdmlvdXIgdW50aWwgdGhlaXIgZnJhZ21lbnRhdGlvbgotICAg
IC8vIGltcGxlbWVudGF0aW9uIGlzIHVwZGF0ZWQgdG8gbWF0Y2ggdGhlIHJlZ2lvbnMgaW1wbGVt
ZW50YXRpb24uCi0gICAgaWYgKCFmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkgfHwgIWZsb3dU
aHJlYWRDb250YWluaW5nQmxvY2soKS0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKLSAgICAg
ICAgcmV0dXJuIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCk7Ci0KLSAgICAvLyBGb3IgdW5z
cGxpdHRhYmxlIGVsZW1lbnRzLCB0aGlzIG1ldGhvZCB3aWxsIGp1c3QgcmV0dXJuIHRoZSBoZWln
aHQgb2YgdGhlIGVsZW1lbnQgdGhhdAotICAgIC8vIGZpdHMgaW50byB0aGUgY3VycmVudCByZWdp
b24sIHdpdGhvdXQgdGhlIGhlaWdodCBvZiB0aGUgcGFydCB0aGF0IG92ZXJmbG93cyB0aGUgcmVn
aW9uLgotICAgIC8vIFRoaXMgaXMgZG9uZSBmb3IgYWxsIHJlZ2lvbnMsIGV4Y2VwdCB0aGUgbGFz
dCBvbmUgYmVjYXVzZSBpbiB0aGF0IGNhc2UsIHRoZSBsb2dpY2FsCi0gICAgLy8gaGVpZ2h0IG9m
IHRoZSBmbG93IHRocmVhZCBuZWVkcyB0byBhbHNvCi0gICAgaWYgKCFjaGlsZEJveElzVW5zcGxp
dHRhYmxlRm9yRnJhZ21lbnRhdGlvbihjaGlsZCkgfHwgIXBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zm
c2V0KGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCkpKQotICAgICAgICByZXR1cm4gbG9naWNhbEhl
aWdodEZvckNoaWxkKGNoaWxkKTsKLQotICAgIC8vIElmIHdlJ3JlIG9uIHRoZSBsYXN0IHBhZ2Ug
dGhpcyBibG9jayBmcmFnbWVudHMgdG8sIHRoZSBsb2dpY2FsIGhlaWdodCBvZiB0aGUgZmxvdyB0
aHJlYWQgbXVzdCBpbmNsdWRlCi0gICAgLy8gdGhlIGVudGlyZSB1bnNwbGl0dGFibGUgY2hpbGQg
YmVjYXVzZSBhbnkgZm9sbG93aW5nIGNoaWxkcmVuIHdpbGwgbm90IGJlIG1vdmVkIHRvIHRoZSBu
ZXh0IHBhZ2UKLSAgICAvLyBzbyB0aGV5IHdpbGwgbmVlZCB0byBiZSBsYWlkIG91dCBiZWxvdyB0
aGUgY3VycmVudCB1bnNwbGl0dGFibGUgY2hpbGQuCi0gICAgTGF5b3V0VW5pdCBjaGlsZExvZ2lj
YWxUb3AgPSBsb2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGQpOwotICAgIGlmICghaGFzTmV4dFBhZ2Uo
Y2hpbGRMb2dpY2FsVG9wKSkKLSAgICAgICAgcmV0dXJuIGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChj
aGlsZCk7Ci0gICAgCi0gICAgTGF5b3V0VW5pdCByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gcGFn
ZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQoY2hpbGRMb2dpY2FsVG9wLCBFeGNsdWRl
UGFnZUJvdW5kYXJ5KTsKLSAgICByZXR1cm4gc3RkOjptaW4oY2hpbGQubG9naWNhbEhlaWdodCgp
LCByZW1haW5pbmdMb2dpY2FsSGVpZ2h0KTsKKyAgICByZXR1cm4gbG9naWNhbEhlaWdodEZvckNo
aWxkKGNoaWxkKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dExpbmVHcmlkQm94
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xp
bmVMYXlvdXQuY3BwCShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ0MSwxNiAr
MTQ0MSw2IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXRSdW5zQW5kRmxvYXQKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChw
YWdpbmF0ZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFJlbmRlckZsb3dUaHJlYWQqIGZs
b3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChmbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpICYmIG92
ZXJmbG93c1JlZ2lvbiAmJiBoYXNOZXh0UGFnZShsaW5lQm94LT5saW5lVG9wKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGltaXQgdGhlIGhlaWdodCBvZiB0aGlzIGJsb2Nr
IHRvIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgcmVnaW9uIGJlY2F1c2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBpdCBpcyBhbHNvIGZyYWdtZW50ZWQgaW50byB0aGUgbmV4dCByZWdp
b24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByZW1haW5pbmdMb2dp
Y2FsSGVpZ2h0ID0gcGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobG9naWNhbFRv
cCgpLCBFeGNsdWRlUGFnZUJvdW5kYXJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAobG9naWNhbEhlaWdodCgpID4gcmVtYWluaW5nTG9naWNhbEhlaWdodCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChyZW1haW5pbmdMb2dpY2FsSGVp
Z2h0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQot
CiAgICAgICAgICAgICAgICAgICAgIGlmIChsYXlvdXRTdGF0ZS5mbG93VGhyZWFkKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICB1cGRhdGVSZWdpb25Gb3JMaW5lKGxpbmVCb3gpOwogICAgICAg
ICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShy
ZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVy
Q29tcG9zaXRvci5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgog
I2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0yMTEsNjAgKzIxMCw5
IEBAIExheW91dFJlY3QgUmVuZGVyQm94OjpjbGllbnRCb3hSZWN0SW5SZWcKICAgICByZXR1cm4g
Y2xpZW50Qm94OwogfQogCi1MYXlvdXRSZWN0IFJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVn
aW9uKFJlbmRlclJlZ2lvbiogcmVnaW9uLCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MgY2FjaGVG
bGFnKSBjb25zdAorTGF5b3V0UmVjdCBSZW5kZXJCb3g6OmJvcmRlckJveFJlY3RJblJlZ2lvbihS
ZW5kZXJSZWdpb24qLCBSZW5kZXJCb3hSZWdpb25JbmZvRmxhZ3MpIGNvbnN0CiB7Ci0gICAgaWYg
KCFyZWdpb24pCi0gICAgICAgIHJldHVybiBib3JkZXJCb3hSZWN0KCk7Ci0KLSAgICBhdXRvKiBm
bG93VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwotICAgIGlmICghaXM8UmVu
ZGVyTmFtZWRGbG93VGhyZWFkPihmbG93VGhyZWFkKSkKLSAgICAgICAgcmV0dXJuIGJvcmRlckJv
eFJlY3QoKTsKLQotICAgIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAg
IFJlbmRlclJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWZsb3dUaHJlYWQt
PmdldFJlZ2lvblJhbmdlRm9yQm94KHRoaXMsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBJbiBhIHBlcmZlY3Qgd29ybGQgdGhpcyBjb25kaXRpb24gc2hvdWxk
IG5ldmVyIGhhcHBlbi4KLSAgICAgICAgcmV0dXJuIGJvcmRlckJveFJlY3QoKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQoZmxvd1RocmVhZC0+cmVnaW9uSW5SYW5nZShyZWdpb24sIHN0YXJ0UmVnaW9u
LCBlbmRSZWdpb24pKTsKLQotICAgIC8vIENvbXB1dGUgdGhlIGxvZ2ljYWwgd2lkdGggYW5kIHBs
YWNlbWVudCBpbiB0aGlzIHJlZ2lvbi4KLSAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBib3hJbmZv
ID0gcmVuZGVyQm94UmVnaW9uSW5mbyhyZWdpb24sIGNhY2hlRmxhZyk7Ci0gICAgaWYgKCFib3hJ
bmZvKQotICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwotCi0gICAgLy8gV2UgaGF2ZSBj
YWNoZWQgaW5zZXRzLgotICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gYm94SW5mby0+bG9n
aWNhbFdpZHRoKCk7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCA9IGJveEluZm8tPmxvZ2lj
YWxMZWZ0KCk7Ci0KLSAgICAvLyBOb3cgYXBwbHkgdGhlIHBhcmVudCBpbnNldCBzaW5jZSBpdCBp
cyBjdW11bGF0aXZlIHdoZW5ldmVyIGFueXRoaW5nIGluIHRoZSBjb250YWluaW5nIGJsb2NrIGNo
YWluIHNoaWZ0cy4KLSAgICAvLyBGSVhNRTogRG9lc24ndCB3b3JrIHJpZ2h0IHdpdGggcGVycGVu
ZGljdWxhciB3cml0aW5nIG1vZGVzLgotICAgIGNvbnN0IFJlbmRlckJsb2NrKiBjdXJyZW50Qm94
ID0gY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5mbyogY3VycmVudEJv
eEluZm8gPSBpc1JlbmRlckZsb3dUaHJlYWQoKSA/IG51bGxwdHIgOiBjdXJyZW50Qm94LT5yZW5k
ZXJCb3hSZWdpb25JbmZvKHJlZ2lvbik7Ci0gICAgd2hpbGUgKGN1cnJlbnRCb3hJbmZvICYmIGN1
cnJlbnRCb3hJbmZvLT5pc1NoaWZ0ZWQoKSkgewotICAgICAgICBpZiAoY3VycmVudEJveC0+c3R5
bGUoKS5kaXJlY3Rpb24oKSA9PSBMVFIpCi0gICAgICAgICAgICBsb2dpY2FsTGVmdCArPSBjdXJy
ZW50Qm94SW5mby0+bG9naWNhbExlZnQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9n
aWNhbExlZnQgLT0gKGN1cnJlbnRCb3gtPmxvZ2ljYWxXaWR0aCgpIC0gY3VycmVudEJveEluZm8t
PmxvZ2ljYWxXaWR0aCgpKSAtIGN1cnJlbnRCb3hJbmZvLT5sb2dpY2FsTGVmdCgpOwotCi0gICAg
ICAgIC8vIE9uY2Ugd2UgcmVhY2ggdGhlIGZyYWdtZW50YXRpb24gY29udGFpbmVyIHdlIHNob3Vs
ZCBzdG9wLgotICAgICAgICBpZiAoY3VycmVudEJveC0+aXNSZW5kZXJGbG93VGhyZWFkKCkpCi0g
ICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjdXJyZW50Qm94ID0gY3VycmVudEJveC0+Y29u
dGFpbmluZ0Jsb2NrKCk7Ci0gICAgICAgIGlmICghY3VycmVudEJveCkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICByZWdpb24gPSBjdXJyZW50Qm94LT5jbGFtcFRvU3RhcnRBbmRFbmRSZWdp
b25zKHJlZ2lvbik7Ci0gICAgICAgIGN1cnJlbnRCb3hJbmZvID0gY3VycmVudEJveC0+cmVuZGVy
Qm94UmVnaW9uSW5mbyhyZWdpb24pOwotICAgIH0KLQotICAgIGlmIChjYWNoZUZsYWcgPT0gRG9O
b3RDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pCi0gICAgICAgIGRlbGV0ZSBib3hJbmZvOwotCi0g
ICAgaWYgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgIHJldHVybiBMYXlvdXRS
ZWN0KGxvZ2ljYWxMZWZ0LCAwLCBsb2dpY2FsV2lkdGgsIGhlaWdodCgpKTsKLSAgICByZXR1cm4g
TGF5b3V0UmVjdCgwLCBsb2dpY2FsTGVmdCwgd2lkdGgoKSwgbG9naWNhbFdpZHRoKTsKKyAgICBy
ZXR1cm4gYm9yZGVyQm94UmVjdCgpOwogfQogCiBzdGF0aWMgUmVuZGVyQmxvY2tGbG93KiBvdXRl
cm1vc3RCbG9ja0NvbnRhaW5pbmdGbG9hdGluZ09iamVjdChSZW5kZXJCb3gmIGJveCkKQEAgLTg2
OSwxMCArODE3LDYgQEAgYm9vbCBSZW5kZXJCb3g6OnNjcm9sbChTY3JvbGxEaXJlY3Rpb24gZAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIFJlbmRlckJsb2NrKiBuZXh0U2Nyb2xsQmxvY2sg
PSBjb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPihu
ZXh0U2Nyb2xsQmxvY2spKSB7Ci0gICAgICAgIEFTU0VSVChzdGFydEJveCk7Ci0gICAgICAgIG5l
eHRTY3JvbGxCbG9jayA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKm5leHRTY3Jv
bGxCbG9jaykuZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveCh3aGVlbEV2ZW50QWJzb2x1
dGVQb2ludCwgKnN0YXJ0Qm94KTsKLSAgICB9CiAKICAgICBpZiAobmV4dFNjcm9sbEJsb2NrICYm
ICFuZXh0U2Nyb2xsQmxvY2stPmlzUmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm4gbmV4dFNj
cm9sbEJsb2NrLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFudWxhcml0eSwgbXVsdGlwbGllciwgc3Rv
cEVsZW1lbnQsIHN0YXJ0Qm94LCB3aGVlbEV2ZW50QWJzb2x1dGVQb2ludCk7CkBAIC0yNjkzLDU3
ICsyNjM3LDcgQEAgUmVuZGVyQm94UmVnaW9uSW5mbyogUmVuZGVyQm94OjpyZW5kZXJCbwogICAg
IGlmIChib3hJbmZvICYmIGNhY2hlRmxhZyA9PSBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pCiAg
ICAgICAgIHJldHVybiBib3hJbmZvOwogCi0gICAgLy8gTm8gY2FjaGVkIHZhbHVlIHdhcyBmb3Vu
ZCwgc28gd2UgaGF2ZSB0byBjb21wdXRlIG91ciBpbnNldHMgaW4gdGhpcyByZWdpb24uCi0gICAg
Ly8gRklYTUU6IEZvciBub3cgd2UgbGltaXQgdGhpcyBjb21wdXRhdGlvbiB0byBub3JtYWwgUmVu
ZGVyQmxvY2tzLiBGdXR1cmUgcGF0Y2hlcyB3aWxsIGV4cGFuZAotICAgIC8vIHN1cHBvcnQgdG8g
Y292ZXIgYWxsIGJveGVzLgotICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93
VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKGlzUmVuZGVyRmxvd1RocmVhZCgpIHx8
ICFpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KGZsb3dUaHJlYWQpIHx8ICFjYW5IYXZlQm94SW5m
b0luUmVnaW9uKCkgfHwgZmxvd1RocmVhZC0+c3R5bGUoKS53cml0aW5nTW9kZSgpICE9IHN0eWxl
KCkud3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBMb2dpY2Fs
RXh0ZW50Q29tcHV0ZWRWYWx1ZXMgY29tcHV0ZWRWYWx1ZXM7Ci0gICAgY29tcHV0ZUxvZ2ljYWxX
aWR0aEluUmVnaW9uKGNvbXB1dGVkVmFsdWVzLCByZWdpb24pOwotCi0gICAgLy8gTm93IGRldGVy
bWluZSB0aGUgaW5zZXRzIGJhc2VkIG9mZiB3aGVyZSB0aGlzIG9iamVjdCBpcyBzdXBwb3NlZCB0
byBiZSBwb3NpdGlvbmVkLgotICAgIFJlbmRlckJsb2NrJiBjYiA9ICpjb250YWluaW5nQmxvY2so
KTsKLSAgICBSZW5kZXJSZWdpb24qIGNsYW1wZWRDb250YWluaW5nQmxvY2tSZWdpb24gPSBjYi5j
bGFtcFRvU3RhcnRBbmRFbmRSZWdpb25zKHJlZ2lvbik7Ci0gICAgUmVuZGVyQm94UmVnaW9uSW5m
byogY29udGFpbmluZ0Jsb2NrSW5mbyA9IGNiLnJlbmRlckJveFJlZ2lvbkluZm8oY2xhbXBlZENv
bnRhaW5pbmdCbG9ja1JlZ2lvbik7Ci0gICAgTGF5b3V0VW5pdCBjb250YWluaW5nQmxvY2tMb2dp
Y2FsV2lkdGggPSBjYi5sb2dpY2FsV2lkdGgoKTsKLSAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdC
bG9ja0xvZ2ljYWxXaWR0aEluUmVnaW9uID0gY29udGFpbmluZ0Jsb2NrSW5mbyA/IGNvbnRhaW5p
bmdCbG9ja0luZm8tPmxvZ2ljYWxXaWR0aCgpIDogY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRo
OwotICAgIAotICAgIExheW91dFVuaXQgbWFyZ2luU3RhcnRJblJlZ2lvbiA9IGNvbXB1dGVkVmFs
dWVzLm1fbWFyZ2lucy5tX3N0YXJ0OwotICAgIExheW91dFVuaXQgc3RhcnRNYXJnaW5EZWx0YSA9
IG1hcmdpblN0YXJ0SW5SZWdpb24gLSBtYXJnaW5TdGFydCgpOwotICAgIExheW91dFVuaXQgbG9n
aWNhbFdpZHRoSW5SZWdpb24gPSBjb21wdXRlZFZhbHVlcy5tX2V4dGVudDsKLSAgICBMYXlvdXRV
bml0IGxvZ2ljYWxMZWZ0SW5SZWdpb24gPSBjb21wdXRlZFZhbHVlcy5tX3Bvc2l0aW9uOwotICAg
IExheW91dFVuaXQgd2lkdGhEZWx0YSA9IGxvZ2ljYWxXaWR0aEluUmVnaW9uIC0gbG9naWNhbFdp
ZHRoKCk7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdERlbHRhID0gaXNPdXRPZkZsb3dQb3Np
dGlvbmVkKCkgPyBsb2dpY2FsTGVmdEluUmVnaW9uIC0gbG9naWNhbExlZnQoKSA6IHN0YXJ0TWFy
Z2luRGVsdGE7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRJblJlZ2lvbiA9IGNvbnRhaW5p
bmdCbG9ja0xvZ2ljYWxXaWR0aEluUmVnaW9uIC0gKGxvZ2ljYWxMZWZ0SW5SZWdpb24gKyBsb2dp
Y2FsV2lkdGhJblJlZ2lvbik7Ci0gICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsUmlnaHQgPSBjb250
YWluaW5nQmxvY2tMb2dpY2FsV2lkdGggLSAobG9naWNhbExlZnQoKSArIGxvZ2ljYWxXaWR0aCgp
KTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodERlbHRhID0gaXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkgPyBsb2dpY2FsUmlnaHRJblJlZ2lvbiAtIG9sZExvZ2ljYWxSaWdodCA6IHN0YXJ0TWFy
Z2luRGVsdGE7Ci0KLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0ID0gMDsKLSAgICAK
LSAgICBpZiAoIWlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIGF2b2lkc0Zsb2F0cygpICYmIGNi
LmNvbnRhaW5zRmxvYXRzKCkpIHsKLSAgICAgICAgTGF5b3V0VW5pdCBzdGFydFBvc2l0aW9uRGVs
dGEgPSBjYi5jb21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cygq
dGhpcywgbWFyZ2luU3RhcnRJblJlZ2lvbiwgcmVnaW9uKTsKLSAgICAgICAgaWYgKGNiLnN0eWxl
KCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKQotICAgICAgICAgICAgbG9naWNhbExlZnREZWx0
YSArPSBzdGFydFBvc2l0aW9uRGVsdGE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvZ2lj
YWxSaWdodERlbHRhICs9IHN0YXJ0UG9zaXRpb25EZWx0YTsKLSAgICB9Ci0KLSAgICBpZiAoY2Iu
c3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIGxvZ2ljYWxMZWZ0T2Zm
c2V0ICs9IGxvZ2ljYWxMZWZ0RGVsdGE7Ci0gICAgZWxzZQotICAgICAgICBsb2dpY2FsTGVmdE9m
ZnNldCAtPSAod2lkdGhEZWx0YSArIGxvZ2ljYWxSaWdodERlbHRhKTsKLSAgICAKLSAgICBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldCA9IGxvZ2ljYWxXaWR0aCgpIC0gKGxvZ2ljYWxMZWZ0
T2Zmc2V0ICsgbG9naWNhbFdpZHRoSW5SZWdpb24pOwotICAgIGJvb2wgaXNTaGlmdGVkID0gKGNv
bnRhaW5pbmdCbG9ja0luZm8gJiYgY29udGFpbmluZ0Jsb2NrSW5mby0+aXNTaGlmdGVkKCkpCi0g
ICAgICAgICAgICB8fCAoc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYgbG9naWNh
bExlZnRPZmZzZXQpCi0gICAgICAgICAgICB8fCAoIXN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVj
dGlvbigpICYmIGxvZ2ljYWxSaWdodE9mZnNldCk7Ci0KLSAgICAvLyBGSVhNRTogQWx0aG91Z2gg
aXQncyB1bmxpa2VseSwgdGhlc2UgYm94ZXMgY2FuIGdvIG91dHNpZGUgb3VyIGJvdW5kcywgYW5k
IHNvIHdlIHdpbGwgbmVlZCB0byBpbmNvcnBvcmF0ZSB0aGVtIGludG8gb3ZlcmZsb3cuCi0gICAg
aWYgKGNhY2hlRmxhZyA9PSBDYWNoZVJlbmRlckJveFJlZ2lvbkluZm8pCi0gICAgICAgIHJldHVy
biByZWdpb24tPnNldFJlbmRlckJveFJlZ2lvbkluZm8odGhpcywgbG9naWNhbExlZnRPZmZzZXQs
IGxvZ2ljYWxXaWR0aEluUmVnaW9uLCBpc1NoaWZ0ZWQpOwotICAgIHJldHVybiBuZXcgUmVuZGVy
Qm94UmVnaW9uSW5mbyhsb2dpY2FsTGVmdE9mZnNldCwgbG9naWNhbFdpZHRoSW5SZWdpb24sIGlz
U2hpZnRlZCk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIHN0YXRpYyBib29sIHNob3VsZEZs
aXBCZWZvcmVBZnRlck1hcmdpbnMoY29uc3QgUmVuZGVyU3R5bGUmIGNvbnRhaW5pbmdCbG9ja1N0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogY2hpbGRTdHlsZSkKQEAgLTMxNzgsNyArMzA3Miw3IEBA
IExheW91dFVuaXQgUmVuZGVyQm94Ojpjb21wdXRlUmVwbGFjZWRMb2cKICAgICAgICAgICAgIGF1
dG8qIGNvbnRhaW5lciA9IGlzT3V0T2ZGbG93UG9zaXRpb25lZCgpID8gdGhpcy0+Y29udGFpbmVy
KCkgOiBjb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIHdoaWxlIChjb250YWluZXIgJiYg
Y29udGFpbmVyLT5pc0Fub255bW91cygpKSB7CiAgICAgICAgICAgICAgICAgLy8gU3RvcCBhdCBy
ZW5kZXJpbmcgY29udGV4dCByb290LgotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJWaWV3
PigqY29udGFpbmVyKSB8fCBpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpjb250YWluZXIpKQor
ICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJWaWV3PigqY29udGFpbmVyKSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVy
LT5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgICAgIH0KQEAgLTMzNDIsOSArMzIzNiw2IEBA
IExheW91dFVuaXQgUmVuZGVyQm94Ojpjb250YWluaW5nQmxvY2tMb2cKICAgICAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJCb3g+KGNvbnRhaW5pbmdCbG9jaykuY2xpZW50TG9naWNhbFdp
ZHRoKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaXNGaXhlZFBvc2l0aW9uICYmIGlzPFJl
bmRlck5hbWVkRmxvd1RocmVhZD4oY29udGFpbmluZ0Jsb2NrKSkKLSAgICAgICAgICAgIHJldHVy
biBjb250YWluaW5nQmxvY2sudmlldygpLmNsaWVudExvZ2ljYWxXaWR0aCgpOwotCiAgICAgICAg
IGlmICghaXM8UmVuZGVyQmxvY2s+KGNvbnRhaW5pbmdCbG9jaykpCiAgICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyQm94Pihjb250YWluaW5nQmxvY2spLmNsaWVudExvZ2ljYWxXaWR0
aCgpOwogCkBAIC0zNDA4LDExICszMjk5LDggQEAgTGF5b3V0VW5pdCBSZW5kZXJCb3g6OmNvbnRh
aW5pbmdCbG9ja0xvZwogICAgICAgICBjb25zdCBSZW5kZXJCbG9jayYgY2IgPSBpczxSZW5kZXJC
bG9jaz4oY29udGFpbmluZ0Jsb2NrKSA/IGRvd25jYXN0PFJlbmRlckJsb2NrPihjb250YWluaW5n
QmxvY2spIDogKmNvbnRhaW5pbmdCbG9jay5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgTGF5
b3V0VW5pdCByZXN1bHQgPSBjYi5jbGllbnRMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAgIFJlbmRl
ckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgICAgIGlmIChmbG93VGhyZWFkICYmIGlzPFJlbmRlckZsb3dUaHJlYWQ+KGNvbnRhaW5pbmdC
bG9jaykgJiYgZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9PSBjb250YWlu
aW5nQmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgaWYgKGlz
PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oY29udGFpbmluZ0Jsb2NrKSAmJiBpc0ZpeGVkUG9zaXRp
b24pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5pbmdCbG9jay52aWV3KCkuY2xpZW50
TG9naWNhbEhlaWdodCgpOworICAgICAgICBpZiAoZmxvd1RocmVhZCAmJiBpczxSZW5kZXJGbG93
VGhyZWFkPihjb250YWluaW5nQmxvY2spICYmIGZsb3dUaHJlYWQtPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPT0gY29udGFpbmluZ0Jsb2NrLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAg
ICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyRmxvd1RocmVhZD4oY29udGFpbmluZ0Js
b2NrKS5jb250ZW50TG9naWNhbEhlaWdodE9mRmlyc3RSZWdpb24oKTsKLSAgICAgICAgfQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDIy
MjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXll
ckNvbXBvc2l0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIK
ICNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlck5h
bWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJl
bmRlclRhYmxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVSb3cuaCIKQEAgLTQxMSw3ICs0MTAs
NyBAQCBMYXlvdXRQb2ludCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6YWRqdXN0CiAgICAgICAgICAg
ICAvLyBTaW5jZSB3ZSB3aWxsIGJ5cGFzcyB0aGUgYm9keeKAmXMgcmVuZGVyZXIgYW55d2F5LCBq
dXN0IGVuZCB0aGUgbG9vcCBpZiB3ZSBlbmNvdW50ZXIgYSByZWdpb24gZmxvdyAobmFtZWQgZmxv
dyB0aHJlYWQpLgogICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nz
cy1yZWdpb25zLyNjc3NvbXZpZXctb2Zmc2V0LWF0dHJpYnV0ZXMKICAgICAgICAgICAgIGF1dG8q
IGFuY2VzdG9yID0gcGFyZW50KCk7Ci0gICAgICAgICAgICB3aGlsZSAoYW5jZXN0b3IgIT0gb2Zm
c2V0UGFyZW50ICYmICFpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCphbmNlc3RvcikpIHsKKyAg
ICAgICAgICAgIHdoaWxlIChhbmNlc3RvciAhPSBvZmZzZXRQYXJlbnQpIHsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2hhdCBhcmUgd2Ugc3VwcG9zZWQgdG8gZG8gaW5zaWRlIFNWRyBjb250
ZW50PwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ+KCphbmNlc3RvcikpIHsKQEAgLTQyNywxMSArNDI2LDcgQEAgTGF5
b3V0UG9pbnQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmFkanVzdAogICAgICAgICAgICAgICAgIGFu
Y2VzdG9yID0gYW5jZXN0b3ItPnBhcmVudCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBDb21wdXRlIHRoZSBvZmZzZXQgcG9zaXRpb24gZm9yIGVsZW1lbnRz
IGluc2lkZSBuYW1lZCBmbG93IHRocmVhZHMgZm9yIHdoaWNoIHRoZSBvZmZzZXRQYXJlbnQgd2Fz
IHRoZSBib2R5LgotICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTU4OTkKLSAgICAgICAgICAgIGlmIChpczxSZW5kZXJOYW1lZEZsb3dU
aHJlYWQ+KCphbmNlc3RvcikpCi0gICAgICAgICAgICAgICAgcmVmZXJlbmNlUG9pbnQgPSBkb3du
Y2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCphbmNlc3RvcikuYWRqdXN0ZWRQb3NpdGlvblJl
bGF0aXZlVG9PZmZzZXRQYXJlbnQoKnRoaXMsIHJlZmVyZW5jZVBvaW50KTsKLSAgICAgICAgICAg
IGVsc2UgaWYgKGlzPFJlbmRlckJveD4oKm9mZnNldFBhcmVudCkgJiYgb2Zmc2V0UGFyZW50LT5p
c0JvZHkoKSAmJiAhb2Zmc2V0UGFyZW50LT5pc1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgICAgIGlm
IChpczxSZW5kZXJCb3g+KCpvZmZzZXRQYXJlbnQpICYmIG9mZnNldFBhcmVudC0+aXNCb2R5KCkg
JiYgIW9mZnNldFBhcmVudC0+aXNQb3NpdGlvbmVkKCkpCiAgICAgICAgICAgICAgICAgcmVmZXJl
bmNlUG9pbnQubW92ZUJ5KGRvd25jYXN0PFJlbmRlckJveD4oKm9mZnNldFBhcmVudCkudG9wTGVm
dExvY2F0aW9uKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMjIyMjU5KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3
ICszMCw2IEBACiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgogI2luY2x1ZGUgIkVsZW1lbnRDaGls
ZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCi0jaW5jbHVkZSAiRmxvd1Ro
cmVhZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCkBAIC00OCw2ICs0Nyw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyRGVzY2VuZGFudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIK
KyNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5oIgogI2luY2x1ZGUgIlJl
bmRlcklubGluZS5oIgpAQCAtNTksNyArNTksNiBAQAogI2lmICFBU1NFUlRfRElTQUJMRUQKICNp
bmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjZW5kaWYKLSNpbmNsdWRlICJSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5k
ZXJUYWJsZUNhcHRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKQEAgLTExMTEs
MTUgKzExMTAsNiBAQCB2b2lkIFJlbmRlckVsZW1lbnQ6OndpbGxCZURlc3Ryb3llZCgpCiAKICAg
ICBSZW5kZXJPYmplY3Q6OndpbGxCZURlc3Ryb3llZCgpOwogCi0jaWYgIUFTU0VSVF9ESVNBQkxF
RAotICAgIGlmICghcmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkgJiYgdmlldygpLmhhc1JlbmRl
ck5hbWVkRmxvd1RocmVhZHMoKSkgewotICAgICAgICAvLyBBZnRlciByZW1vdmUsIHRoZSBvYmpl
Y3QgYW5kIHRoZSBhc3NvY2lhdGVkIGluZm9ybWF0aW9uIHNob3VsZCBub3QgYmUgaW4gYW55IGZs
b3cgdGhyZWFkLgotICAgICAgICBmb3IgKGF1dG8mIGZsb3dUaHJlYWQgOiAqdmlldygpLmZsb3dU
aHJlYWRDb250cm9sbGVyKCkucmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCgpKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIWZsb3dUaHJlYWQtPmhhc0NoaWxkSW5mbyh0aGlzKSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0jZW5kaWYKLQogICAgIGNsZWFyTGF5b3V0Um9vdElmTmVlZGVkKCk7CiAKICAgICBp
ZiAoaGFzSW5pdGlhbGl6ZWRTdHlsZSgpKSB7CkBAIC0xMTgxLDI2ICsxMTcxLDcgQEAgdm9pZCBS
ZW5kZXJFbGVtZW50OjpzZXROZWVkc1NpbXBsaWZpZWRObwogCiBSZW5kZXJFbGVtZW50KiBSZW5k
ZXJFbGVtZW50Ojpob3ZlckFuY2VzdG9yKCkgY29uc3QKIHsKLSAgICAvLyBXaGVuIHNlYXJjaGlu
ZyBmb3IgdGhlIGhvdmVyIGFuY2VzdG9yIGFuZCBlbmNvdW50ZXJpbmcgYSBuYW1lZCBmbG93IHRo
cmVhZCwKLSAgICAvLyB0aGUgc2VhcmNoIHdpbGwgY29udGludWUgd2l0aCB0aGUgRE9NIGFuY2Vz
dG9yIG9mIHRoZSB0b3AtbW9zdCBlbGVtZW50Ci0gICAgLy8gaW4gdGhlIG5hbWVkIGZsb3cgdGhy
ZWFkLgotICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTExNzQ5Ci0gICAgUmVuZGVyRWxlbWVudCogaG92ZXJBbmNlc3RvciA9IHBhcmVudCgpOwotCi0g
ICAgLy8gU2tpcCBhbm9ueW1vdXMgYmxvY2tzIGRpcmVjdGx5IGZsb3dlZCBpbnRvIGZsb3cgdGhy
ZWFkcyBhcyBpdCB3b3VsZAotICAgIC8vIHByZXZlbnQgdXMgZnJvbSBjb250aW51aW5nIHRoZSBz
ZWFyY2ggb24gdGhlIERPTSB0cmVlIHdoZW4gcmVhY2hpbmcgdGhlIG5hbWVkIGZsb3cgdGhyZWFk
LgotICAgIGlmIChob3ZlckFuY2VzdG9yICYmIGhvdmVyQW5jZXN0b3ItPmlzQW5vbnltb3VzQmxv
Y2soKSAmJiBob3ZlckFuY2VzdG9yLT5wYXJlbnQoKSAmJiBob3ZlckFuY2VzdG9yLT5wYXJlbnQo
KS0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKLSAgICAgICAgaG92ZXJBbmNlc3RvciA9IGhv
dmVyQW5jZXN0b3ItPnBhcmVudCgpOwotCi0gICAgaWYgKGhvdmVyQW5jZXN0b3IgJiYgaG92ZXJB
bmNlc3Rvci0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkgewotICAgICAgICBob3ZlckFuY2Vz
dG9yID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzLT5lbGVt
ZW50KCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIHBhcmVudCA9IGVsZW1lbnQtPnBhcmVudE5v
ZGUoKSkKLSAgICAgICAgICAgICAgICBob3ZlckFuY2VzdG9yID0gcGFyZW50LT5yZW5kZXJlcigp
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGhvdmVyQW5jZXN0b3I7CisgICAgcmV0
dXJuIHBhcmVudCgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGFpbnRQaGFzZShSZW5kZXJF
bGVtZW50JiBlbGVtZW50LCBQYWludFBoYXNlIHBoYXNlLCBQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIGNoaWxkUG9pbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJG
bG93VGhyZWFkLmgiCiAKLSNpbmNsdWRlICJGbG93VGhyZWFkQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1
ZGUgIklubGluZUVsZW1lbnRCb3guaCIKQEAgLTQxLDcgKzQwLDYgQEAKICNpbmNsdWRlICJSZW5k
ZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogI2luY2x1ZGUg
IlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVD
ZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCkBAIC00NDUsNyArNDQzLDcg
QEAgTGF5b3V0UG9pbnQgUmVuZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQbwogICAgICAgICAvLyBh
bmQgaWYgc28sIGRyb3AgdGhlIG9iamVjdCdzIHRvcCBwb3NpdGlvbiAod2hpY2ggd2FzIGNvbXB1
dGVkIHJlbGF0aXZlIHRvIGl0cyBjb250YWluaW5nIGJsb2NrCiAgICAgICAgIC8vIGFuZCBpcyBu
byBsb25nZXIgdmFsaWQpIGFuZCByZWNvbXB1dGUgaXQgdXNpbmcgdGhlIHJlZ2lvbiBpbiB3aGlj
aCBpdCBmbG93cyBhcyByZWZlcmVuY2UuCiAgICAgICAgIGJvb2wgd2FzQ29tcHV0ZWRSZWxhdGl2
ZVRvT3RoZXJSZWdpb24gPSBmYWxzZTsKLSAgICAgICAgd2hpbGUgKG9iakNvbnRhaW5pbmdCbG9j
ayAmJiAhaXM8UmVuZGVyVmlldz4oKm9iakNvbnRhaW5pbmdCbG9jaykgJiYgIW9iakNvbnRhaW5p
bmdCbG9jay0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkgeworICAgICAgICB3aGlsZSAob2Jq
Q29udGFpbmluZ0Jsb2NrICYmICFpczxSZW5kZXJWaWV3Pigqb2JqQ29udGFpbmluZ0Jsb2NrKSkg
ewogICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvYmplY3QgaXMgaW4gYSBkaWZmZXJlbnQg
cmVnaW9uLgogICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiBwYXJlbnRTdGFydFJlZ2lvbiA9IG51
bGxwdHI7CiAgICAgICAgICAgICBSZW5kZXJSZWdpb24qIHBhcmVudEVuZFJlZ2lvbiA9IG51bGxw
dHI7CkBAIC0xMTE3LDggKzExMTUsNiBAQCBib29sIFJlbmRlckZsb3dUaHJlYWQ6OmFkZEZvcmNl
ZFJlZ2lvbkJyCiAKIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6aW5jcmVtZW50QXV0b0xvZ2ljYWxI
ZWlnaHRSZWdpb25zKCkKIHsKLSAgICBpZiAoIW1fYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291
bnQpCi0gICAgICAgIHZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpLmluY3JlbWVudEZsb3dU
aHJlYWRzV2l0aEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpOwogICAgICsrbV9hdXRvTG9naWNh
bEhlaWdodFJlZ2lvbnNDb3VudDsKIH0KIApAQCAtMTEyNiw4ICsxMTIyLDYgQEAgdm9pZCBSZW5k
ZXJGbG93VGhyZWFkOjpkZWNyZW1lbnRBdXRvTG9naQogewogICAgIEFTU0VSVChtX2F1dG9Mb2dp
Y2FsSGVpZ2h0UmVnaW9uc0NvdW50ID4gMCk7CiAgICAgLS1tX2F1dG9Mb2dpY2FsSGVpZ2h0UmVn
aW9uc0NvdW50OwotICAgIGlmICghbV9hdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudCkKLSAg
ICAgICAgdmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuZGVjcmVtZW50Rmxvd1RocmVhZHNX
aXRoQXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCk7CiB9CiAKIHZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6Y29sbGVjdExheWVyRnJhZ21lbnRzKExheWVyRnJhZ21lbnRzJiBsYXllckZyYWdtZW50cywg
Y29uc3QgTGF5b3V0UmVjdCYgbGF5ZXJCb3VuZGluZ0JveCwgY29uc3QgTGF5b3V0UmVjdCYgZGly
dHlSZWN0KQpAQCAtMTQwNSwzMiArMTM5OSw2IEBAIHZvaWQgUmVuZGVyRmxvd1RocmVhZDo6YWRk
UmVnaW9uc092ZXJmbG8KICAgICAgICAgTGF5b3V0UmVjdCBjaGlsZExheW91dE92ZXJmbG93UmVj
dCA9IHJlZ2lvbi0+bGF5b3V0T3ZlcmZsb3dSZWN0Rm9yQm94Rm9yUHJvcGFnYXRpb24oY2hpbGQp
OwogICAgICAgICBjaGlsZExheW91dE92ZXJmbG93UmVjdC5tb3ZlKGRlbHRhKTsKICAgICAgICAg
Ci0gICAgICAgIC8vIFdoZW4gcHJvcGFnYXRpbmcgdGhlIGxheW91dCBvdmVyZmxvdyB0byB0aGUg
ZmxvdyB0aHJlYWQgb2JqZWN0LCBtYWtlIHN1cmUgdG8gaW5jbHVkZQotICAgICAgICAvLyB0aGUg
bG9naWNhbCBib3R0b20gcGFkZGluZyBvZiB0aGUgc2Nyb2xsYWJsZSByZWdpb24gYW5kIHRoZSBi
b3R0b20gbWFyZ2luIG9mIHRoZSBmbG93ZWQgZWxlbWVudC4KLSAgICAgICAgLy8gSW4gb3JkZXIg
dG8gYmVoYXZlIGluIGEgc2ltaWxhciBtYW5uZXIgdG8gdGhlIG5vbi1yZWdpb25zIGNhc2UsIGNv
bnRlbnQgb3ZlcmZsb3dpbmcgdGhlIGJveAotICAgICAgICAvLyBmbG93ZWQgaW50byB0aGUgcmVn
aW9uIG11c3QgYmUgcGFpbnRlZCBvbiB0b3Agb2YgdGhlIHJlZ2lvbidzIHBhZGRpbmcgYW5kIHRo
ZSBib3gncyBtYXJnaW4uCi0gICAgICAgIC8vIFNlZSBodHRwOi8vbGlzdHMudzMub3JnL0FyY2hp
dmVzL1B1YmxpYy93d3ctc3R5bGUvMjAxNEphbi8wMDg5Lmh0bWwKLSAgICAgICAgaWYgKGlzPFJl
bmRlck5hbWVkRmxvd1RocmVhZD4oKmJveCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChib3ggPT0g
dGhpcyk7Ci0gICAgICAgICAgICBSZW5kZXJCbG9ja0Zsb3cmIGZyYWdtZW50Q29udGFpbmVyID0g
ZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pLmZyYWdtZW50Q29udGFp
bmVyKCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHNwYWNpbmdBZnRlckxheW91dCA9IGZyYWdt
ZW50Q29udGFpbmVyLnBhZGRpbmdBZnRlcigpICsgY2hpbGQtPm1hcmdpbkFmdGVyKCk7Ci0gICAg
ICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgICAg
IGlmIChmcmFnbWVudENvbnRhaW5lci5zY3JvbGxzT3ZlcmZsb3dZKCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCBsYXlvdXRNYXhMb2dpY2FsWSA9IHJlZ2lvbi0+cmVjdEZsb3dQ
b3J0aW9uRm9yQm94KGNoaWxkLCBjaGlsZC0+ZnJhbWVSZWN0KCkpLm1heFkoKSArIHNwYWNpbmdB
ZnRlckxheW91dDsKLSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhZRGlmZiA9IGxh
eW91dE1heExvZ2ljYWxZIC0gY2hpbGRMYXlvdXRPdmVyZmxvd1JlY3QubWF4WSgpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAobWF4WURpZmYgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGRMYXlvdXRPdmVyZmxvd1JlY3QuZXhwYW5kKDAsIG1heFlEaWZmKTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChmcmFnbWVu
dENvbnRhaW5lci5zY3JvbGxzT3ZlcmZsb3dYKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBsYXlvdXRNYXhMb2dpY2FsWSA9IHJlZ2lvbi0+cmVjdEZsb3dQb3J0aW9uRm9yQm94
KGNoaWxkLCBjaGlsZC0+ZnJhbWVSZWN0KCkpLm1heFgoKSArIHNwYWNpbmdBZnRlckxheW91dDsK
LSAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBtYXhZRGlmZiA9IGxheW91dE1heExvZ2lj
YWxZIC0gY2hpbGRMYXlvdXRPdmVyZmxvd1JlY3QubWF4WCgpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobWF4WURpZmYgPiAwKQotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRMYXlvdXRP
dmVyZmxvd1JlY3QuZXhwYW5kKG1heFlEaWZmLCAwKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCiAgICAgICAgIHJlZ2lvbi0+YWRkTGF5b3V0
T3ZlcmZsb3dGb3JCb3goYm94LCBjaGlsZExheW91dE92ZXJmbG93UmVjdCk7CiAKICAgICAgICAg
aWYgKGNoaWxkLT5oYXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGJveC0+aGFzT3ZlcmZsb3dDbGlw
KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShy
ZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDEzIEBACiAjaW5jbHVkZSAiSW5saW5l
VGV4dEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyQ2hp
bGRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJS
ZW5kZXJGdWxsU2NyZWVuLmgiCiAjaW5jbHVkZSAiUmVuZGVyR2VvbWV0cnlNYXAuaCIKICNpbmNs
dWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgotI2lu
Y2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC0y
MjMsMTQgKzIyMywxMiBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlQWx3YXlzQ3JlYXRlTGlu
CiAgICAgYXV0byogcGFyZW50U3R5bGUgPSAmcGFyZW50KCktPnN0eWxlKCk7CiAgICAgUmVuZGVy
SW5saW5lKiBwYXJlbnRSZW5kZXJJbmxpbmUgPSBpczxSZW5kZXJJbmxpbmU+KCpwYXJlbnQoKSkg
PyBkb3duY2FzdDxSZW5kZXJJbmxpbmU+KHBhcmVudCgpKSA6IG51bGxwdHI7CiAgICAgYm9vbCBj
aGVja0ZvbnRzID0gZG9jdW1lbnQoKS5pbk5vUXVpcmtzTW9kZSgpOwotICAgIFJlbmRlckZsb3dU
aHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7CiAgICAgYm9v
bCBhbHdheXNDcmVhdGVMaW5lQm94ZXMgPSAocGFyZW50UmVuZGVySW5saW5lICYmIHBhcmVudFJl
bmRlcklubGluZS0+YWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCiAgICAgICAgIHx8IChwYXJlbnRS
ZW5kZXJJbmxpbmUgJiYgcGFyZW50U3R5bGUtPnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORSkK
ICAgICAgICAgfHwgc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkgIT0gQkFTRUxJTkUKICAgICAgICAg
fHwgc3R5bGUoKS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUKICAg
ICAgICAgfHwgKGNoZWNrRm9udHMgJiYgKCFwYXJlbnRTdHlsZS0+Zm9udENhc2NhZGUoKS5mb250
TWV0cmljcygpLmhhc0lkZW50aWNhbEFzY2VudERlc2NlbnRBbmRMaW5lR2FwKHN0eWxlKCkuZm9u
dENhc2NhZGUoKS5mb250TWV0cmljcygpKQotICAgICAgICB8fCBwYXJlbnRTdHlsZS0+bGluZUhl
aWdodCgpICE9IHN0eWxlKCkubGluZUhlaWdodCgpKSkKLSAgICAgICAgfHwgKGZsb3dUaHJlYWQg
JiYgZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSk7IC8vIEZJWE1FOiBFbmFi
bGUgdGhlIG9wdGltaXphdGlvbiBvbmNlIHdlIG1ha2Ugb3ZlcmZsb3cgY29tcHV0YXRpb24gZm9y
IGN1bGxlZCBpbmxpbmVzIGluIHJlZ2lvbnMuCisgICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5l
SGVpZ2h0KCkgIT0gc3R5bGUoKS5saW5lSGVpZ2h0KCkpKTsKIAogICAgIGlmICghYWx3YXlzQ3Jl
YXRlTGluZUJveGVzICYmIGNoZWNrRm9udHMgJiYgdmlldygpLnVzZXNGaXJzdExpbmVSdWxlcygp
KSB7CiAgICAgICAgIC8vIEhhdmUgdG8gY2hlY2sgdGhlIGZpcnN0IGxpbmUgc3R5bGUgYXMgd2Vs
bC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkocmV2aXNp
b24gMjIyMjU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNiBAQAogI2luY2x1ZGUgIkZsb2F0UG9pbnQzRC5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkZsb2F0Um91bmRlZFJlY3QuaCIK
LSNpbmNsdWRlICJGbG93VGhyZWFkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAg
LTk4LDcgKzk3LDYgQEAKICNpbmNsdWRlICJSZW5kZXJNYXJxdWVlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJS
ZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJSZXBsaWNhLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCkBAIC00MjUxLDMxICs0MjQ5LDYgQEAgc3RhdGljIGlu
bGluZSBib29sIGNvbXBhcmVaSW5kZXgoUmVuZGVyTAogICAgIHJldHVybiBmaXJzdC0+ekluZGV4
KCkgPCBzZWNvbmQtPnpJbmRleCgpOwogfQogCi0vLyBQYWludCB0aGUgbGF5ZXJzIGFzc29jaWF0
ZWQgd2l0aCB0aGUgZml4ZWQgcG9zaXRpb25lZCBlbGVtZW50cyBpbiBuYW1lZCBmbG93cy4KLS8v
IFRoZXNlIGxheWVycyBzaG91bGQgbm90IGJlIHBhaW50ZWQgaW4gYSBzaW1pbGFyIHdheSBhcyB0
aGUgb3RoZXIgZWxlbWVudHMgY29sbGVjdGVkIGluCi0vLyBuYW1lZCBmbG93cyAtIHJlZ2lvbnMg
LT4gbmFtZWQgZmxvd3MgLSBzaW5jZSB3ZSBkbyBub3Qgd2FudCB0aGVtIHRvIGJlIGNsaXBwZWQg
dG8gdGhlCi0vLyByZWdpb25zIHZpZXdwb3J0Lgotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRGaXhl
ZExheWVyc0luTmFtZWRGbG93cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJiBwYWludGluZ0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQot
ewotICAgIGlmICghaXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Ly8gR2V0IHRoZSBuYW1lZCBmbG93cyBmb3IgdGhlIHZpZXcKLSAgICBpZiAoIXJlbmRlcmVyKCku
dmlldygpLmhhc1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gRW5zdXJlIHRoZSBmbG93IHRocmVhZHMgaGllcmFyY2h5IGlzIHVwLXRvLWRhdGUgYmVm
b3JlIHVzaW5nIGl0LgotICAgIHJlbmRlcmVyKCkudmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVy
KCkudXBkYXRlTmFtZWRGbG93c0xheWVyTGlzdHNJZk5lZWRlZCgpOwotCi0gICAgLy8gQ29sbGVj
dCB0aGUgZml4ZWQgbGF5ZXJzIGluIGEgbGlzdCB0byBiZSBwYWludGVkCi0gICAgVmVjdG9yPFJl
bmRlckxheWVyKj4gZml4ZWRMYXllcnM7Ci0gICAgcmVuZGVyZXIoKS52aWV3KCkuZmxvd1RocmVh
ZENvbnRyb2xsZXIoKS5jb2xsZWN0Rml4ZWRQb3NpdGlvbmVkTGF5ZXJzKGZpeGVkTGF5ZXJzKTsK
LQotICAgIC8vIFBhaW50IHRoZSBsYXllcnMKLSAgICBmb3IgKGF1dG8qIGZpeGVkTGF5ZXIgOiBm
aXhlZExheWVycykKLSAgICAgICAgZml4ZWRMYXllci0+cGFpbnRMYXllcihjb250ZXh0LCBwYWlu
dGluZ0luZm8sIHBhaW50RmxhZ3MpOwotfQotCiB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVy
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5m
byYgcGFpbnRpbmdJbmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKIHsKICAgICBBU1NF
UlQoaXNTZWxmUGFpbnRpbmdMYXllcigpIHx8IGhhc1NlbGZQYWludGluZ0xheWVyRGVzY2VuZGFu
dCgpKTsKQEAgLTQ0MTgsMTMgKzQzOTEsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludExheWVy
Q29udGVudHMoR3JhCiAgICAgICAgIAogICAgICAgICAgICAgLy8gTm93IHdhbGsgdGhlIHNvcnRl
ZCBsaXN0IG9mIGNoaWxkcmVuIHdpdGggcG9zaXRpdmUgei1pbmRpY2VzLgogICAgICAgICAgICAg
cGFpbnRMaXN0KHBvc1pPcmRlckxpc3QoKSwgY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJ
bmZvLCBsb2NhbFBhaW50RmxhZ3MpOwotCi0gICAgICAgICAgICAvLyBQYWludCB0aGUgZml4ZWQg
ZWxlbWVudHMgZnJvbSBmbG93IHRocmVhZHMuCi0gICAgICAgICAgICBwYWludEZpeGVkTGF5ZXJz
SW5OYW1lZEZsb3dzKGN1cnJlbnRDb250ZXh0LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWlu
dEZsYWdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHJlZ2lv
biwgcGFpbnQgaXRzIGNvbnRlbnRzIHZpYSB0aGUgZmxvdyB0aHJlYWQncyBsYXllci4KLSAgICAg
ICAgICAgIGlmIChzaG91bGRQYWludENvbnRlbnQpCi0gICAgICAgICAgICAgICAgcGFpbnRGbG93
VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMobGF5ZXJGcmFnbWVudHMsIGN1cnJlbnRDb250ZXh0
LCBsb2NhbFBhaW50aW5nSW5mbywgbG9jYWxQYWludEZsYWdzKTsKICAgICAgICAgfQogCiAgICAg
ICAgIGlmIChpc1BhaW50aW5nT3ZlcmxheVNjcm9sbGJhcnMgJiYgaGFzU2Nyb2xsYmFycygpKQpA
QCAtNTA1MSw1MSArNTAxNyw2IEBAIHN0YXRpYyBib29sIGlzSGl0Q2FuZGlkYXRlKGNvbnN0IFJl
bmRlckwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpo
aXRUZXN0Rml4ZWRMYXllcnNJbk5hbWVkRmxvd3MoUmVuZGVyTGF5ZXIqIC8qcm9vdExheWVyKi8s
Ci0gICAgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwKLSAgICBjb25zdCBMYXlvdXRSZWN0JiBoaXRUZXN0UmVjdCwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBoaXRUZXN0TG9jYXRpb24sCi0gICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRl
KiB0cmFuc2Zvcm1TdGF0ZSwgCi0gICAgZG91YmxlKiB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMsIGRv
dWJsZSogek9mZnNldCwKLSAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHVuZmxh
dHRlbmVkVHJhbnNmb3JtU3RhdGUsCi0gICAgYm9vbCBkZXB0aFNvcnREZXNjZW5kYW50cykKLXsK
LSAgICBpZiAoIWlzUmVuZGVyVmlld0xheWVyKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgLy8gR2V0IHRoZSBuYW1lZCBmbG93cyBmb3IgdGhlIHZpZXcKLSAgICBpZiAoIXJlbmRl
cmVyKCkudmlldygpLmhhc1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiBmaXhlZExheWVyczsKLSAgICBy
ZW5kZXJlcigpLnZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpLmNvbGxlY3RGaXhlZFBvc2l0
aW9uZWRMYXllcnMoZml4ZWRMYXllcnMpOwotCi0gICAgLy8gSGl0IHRlc3QgdGhlIGxheWVycwot
ICAgIFJlbmRlckxheWVyKiByZXN1bHRMYXllciA9IG51bGxwdHI7Ci0gICAgZm9yIChpbnQgaSA9
IGZpeGVkTGF5ZXJzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIFJlbmRlckxh
eWVyKiBmaXhlZExheWVyID0gZml4ZWRMYXllcnMuYXQoaSk7Ci0KLSAgICAgICAgSGl0VGVzdFJl
c3VsdCB0ZW1wUmVzdWx0KHJlc3VsdC5oaXRUZXN0TG9jYXRpb24oKSk7Ci0gICAgICAgIFJlbmRl
ckxheWVyKiBoaXRMYXllciA9IGZpeGVkTGF5ZXItPmhpdFRlc3RMYXllcihmaXhlZExheWVyLT5y
ZW5kZXJlcigpLmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKS0+bGF5ZXIoKSwgbnVsbHB0ciwg
cmVxdWVzdCwgdGVtcFJlc3VsdCwKLSAgICAgICAgICAgIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9j
YXRpb24sIGZhbHNlLCB0cmFuc2Zvcm1TdGF0ZSwgek9mZnNldEZvckRlc2NlbmRhbnRzKTsKLQot
ICAgICAgICAvLyBJZiBpdCBhIGxpc3QtYmFzZWQgdGVzdCwgd2UgY2FuIHNhZmVseSBhcHBlbmQg
dGhlIHRlbXBvcmFyeSByZXN1bHQgc2luY2UgaXQgbWlnaHQgaGFkIGhpdAotICAgICAgICAvLyBu
b2RlcyBidXQgbm90IG5lY2Vzc2VyaWx5IGhhZCBoaXRMYXllciBzZXQuCi0gICAgICAgIEFTU0VS
VCghcmVzdWx0LmlzUmVjdEJhc2VkVGVzdCgpIHx8IHJlcXVlc3QucmVzdWx0SXNFbGVtZW50TGlz
dCgpKTsKLSAgICAgICAgaWYgKHJlcXVlc3QucmVzdWx0SXNFbGVtZW50TGlzdCgpKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCh0ZW1wUmVzdWx0LCByZXF1ZXN0KTsKLQotICAgICAgICBpZiAo
aXNIaXRDYW5kaWRhdGUoaGl0TGF5ZXIsIGRlcHRoU29ydERlc2NlbmRhbnRzLCB6T2Zmc2V0LCB1
bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlKSkgewotICAgICAgICAgICAgcmVzdWx0TGF5ZXIgPSBo
aXRMYXllcjsKLSAgICAgICAgICAgIGlmICghcmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gdGVtcFJlc3VsdDsKLSAgICAgICAgICAgIGlmICgh
ZGVwdGhTb3J0RGVzY2VuZGFudHMpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICByZXR1cm4gcmVzdWx0TGF5ZXI7Ci19Ci0KIC8vIGhpdFRlc3RMb2NhdGlv
biBhbmQgaGl0VGVzdFJlY3QgYXJlIHJlbGF0aXZlIHRvIHJvb3RMYXllci4KIC8vIEEgJ2ZsYXR0
ZW5pbmcnIGxheWVyIGlzIG9uZSBwcmVzZXJ2ZXMzRCgpID09IGZhbHNlLgogLy8gdHJhbnNmb3Jt
U3RhdGUubV9hY2N1bXVsYXRlZFRyYW5zZm9ybSBob2xkcyB0aGUgdHJhbnNmb3JtIGZyb20gdGhl
IGNvbnRhaW5pbmcgZmxhdHRlbmluZyBsYXllci4KQEAgLTUyMDAsMTcgKzUxMjEsOCBAQCBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcihSCiAgICAgTGF5ZXJMaXN0TXV0YXRp
b25EZXRlY3RvciBtdXRhdGlvbkNoZWNrZXIodGhpcyk7CiAjZW5kaWYKIAotICAgIC8vIENoZWNr
IHRoZSBmaXhlZCBwb3NpdGlvbmVkIGxheWVycyB3aXRoaW4gZmxvdyB0aHJlYWRzIHRoYXQgYXJl
IHBvc2l0aW9uZWQgYnkgdGhlIHZpZXcuCi0gICAgUmVuZGVyTGF5ZXIqIGhpdExheWVyID0gaGl0
VGVzdEZpeGVkTGF5ZXJzSW5OYW1lZEZsb3dzKHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0LCBo
aXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLAotICAgICAgICBsb2NhbFRyYW5zZm9ybVN0YXRl
LmdldCgpLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHNQdHIsIHpPZmZzZXQsIHVuZmxhdHRlbmVkVHJh
bnNmb3JtU3RhdGUuZ2V0KCksIGRlcHRoU29ydERlc2NlbmRhbnRzKTsKLSAgICBpZiAoaGl0TGF5
ZXIpIHsKLSAgICAgICAgaWYgKCFkZXB0aFNvcnREZXNjZW5kYW50cykKLSAgICAgICAgICAgIHJl
dHVybiBoaXRMYXllcjsKLSAgICAgICAgY2FuZGlkYXRlTGF5ZXIgPSBoaXRMYXllcjsKLSAgICB9
Ci0KICAgICAvLyBCZWdpbiBieSB3YWxraW5nIG91ciBsaXN0IG9mIHBvc2l0aXZlIGxheWVycyBm
cm9tIGhpZ2hlc3Qgei1pbmRleCBkb3duIHRvIHRoZSBsb3dlc3Qgei1pbmRleC4KLSAgICBoaXRM
YXllciA9IGhpdFRlc3RMaXN0KHBvc1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCBy
ZXN1bHQsIGhpdFRlc3RSZWN0LCBoaXRUZXN0TG9jYXRpb24sCisgICAgYXV0byogaGl0TGF5ZXIg
PSBoaXRUZXN0TGlzdChwb3NaT3JkZXJMaXN0KCksIHJvb3RMYXllciwgcmVxdWVzdCwgcmVzdWx0
LCBoaXRUZXN0UmVjdCwgaGl0VGVzdExvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpPZmZzZXRGb3JEZXNj
ZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgZGVw
dGhTb3J0RGVzY2VuZGFudHMpOwogICAgIGlmIChoaXRMYXllcikgewogICAgICAgICBpZiAoIWRl
cHRoU29ydERlc2NlbmRhbnRzKQpAQCAtNTU2OCw5ICs1NDgwLDYgQEAgdm9pZCBSZW5kZXJMYXll
cjo6Y2FsY3VsYXRlQ2xpcFJlY3RzKGNvbgogICAgIENsaXBSZWN0c1R5cGUgY2xpcFJlY3RzVHlw
ZSA9IGNsaXBSZWN0c0NvbnRleHQuY2xpcFJlY3RzVHlwZTsKICAgICBib29sIHVzZUNhY2hlZCA9
IGNsaXBSZWN0c1R5cGUgIT0gVGVtcG9yYXJ5Q2xpcFJlY3RzOwogCi0gICAgaWYgKHJlbmRlcmVy
KCkuaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSAmJiBtYXBMYXllckNsaXBSZWN0c1RvRnJhZ21l
bnRhdGlvbkxheWVyKGNsaXBSZWN0cykpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8vIEZvciB0
cmFuc2Zvcm1lZCBsYXllcnMsIHRoZSByb290IGxheWVyIHdhcyBzaGlmdGVkIHRvIGJlIHVzLCBz
byB0aGVyZSBpcyBubyBuZWVkIHRvCiAgICAgLy8gZXhhbWluZSB0aGUgcGFyZW50LiBXZSB3YW50
IHRvIGNhY2hlIGNsaXAgcmVjdHMgd2l0aCB1cyBhcyB0aGUgcm9vdC4KICAgICBSZW5kZXJMYXll
ciogcGFyZW50TGF5ZXIgPSBjbGlwUmVjdHNDb250ZXh0LnJvb3RMYXllciAhPSB0aGlzID8gcGFy
ZW50KCkgOiBudWxscHRyOwpAQCAtNTYzMiwxMSArNTU0MSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6
OmNhbGN1bGF0ZUNsaXBSZWN0cyhjb24KIFJlZjxDbGlwUmVjdHM+IFJlbmRlckxheWVyOjpwYXJl
bnRDbGlwUmVjdHMoY29uc3QgQ2xpcFJlY3RzQ29udGV4dCYgY2xpcFJlY3RzQ29udGV4dCkgY29u
c3QKIHsKICAgICBBU1NFUlQocGFyZW50KCkpOwotICAgIGlmIChyZW5kZXJlcigpLmlzUmVuZGVy
TmFtZWRGbG93VGhyZWFkKCkpIHsKLSAgICAgICAgYXV0byBwYXJlbnRDbGlwUmVjdHMgPSBDbGlw
UmVjdHM6OmNyZWF0ZSgpOwotICAgICAgICBpZiAobWFwTGF5ZXJDbGlwUmVjdHNUb0ZyYWdtZW50
YXRpb25MYXllcihwYXJlbnRDbGlwUmVjdHMpKQotICAgICAgICAgICAgcmV0dXJuIHBhcmVudENs
aXBSZWN0czsKLSAgICB9CiAKICAgICBpZiAoY2xpcFJlY3RzQ29udGV4dC5jbGlwUmVjdHNUeXBl
ID09IFRlbXBvcmFyeUNsaXBSZWN0cykgewogICAgICAgICBhdXRvIHBhcmVudENsaXBSZWN0cyA9
IENsaXBSZWN0czo6Y3JlYXRlKCk7CkBAIC01NzYzLDE3ICs1NjY3LDYgQEAgdm9pZCBSZW5kZXJM
YXllcjo6Y2FsY3VsYXRlUmVjdHMoY29uc3QgQwogICAgICAgICAgICAgYm91bmRzLm1vdmUob2Zm
c2V0RnJvbVJvb3RMb2NhbCk7CiAgICAgICAgICAgICBpZiAodGhpcyAhPSBjbGlwUmVjdHNDb250
ZXh0LnJvb3RMYXllciB8fCBjbGlwUmVjdHNDb250ZXh0LnJlc3BlY3RPdmVyZmxvd0NsaXAgPT0g
UmVzcGVjdE92ZXJmbG93Q2xpcCkKICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kUmVjdC5pbnRl
cnNlY3QoYm91bmRzKTsKLSAgICAgICAgICAgIC8vIEJveGVzIGluc2lkZSBmbG93IHRocmVhZHMg
ZG9uJ3QgaGF2ZSB0aGVpciBsb2dpY2FsIGxlZnQgY29tcHV0ZWQgdG8gYXZvaWQKLSAgICAgICAg
ICAgIC8vIGZsb2F0cy4gSW5zdGVhZCwgdGhhdCBpbmZvcm1hdGlvbiBpcyBrZXB0IGluIHRoZWly
IFJlbmRlckJveFJlZ2lvbkluZm8gc3RydWN0dXJlLgotICAgICAgICAgICAgLy8gQXMgc3VjaCwg
dGhlIGxheWVyIGJvdW5kcyBtdXN0IGJlIGVubGFyZ2VkIHRvIGVuY29tcGFzcyB0aGVpciBiYWNr
Z3JvdW5kIHJlY3QKLSAgICAgICAgICAgIC8vIHRvIGVuc3VyZSBpbnRlcnNlY3RpbmcgdGhlbSB3
b24ndCByZXN1bHQgaW4gYW4gZW1wdHkgcmVjdCwgd2hpY2ggd291bGQgZXZlbnR1YWxseQotICAg
ICAgICAgICAgLy8gY2F1c2UgcGFpbnQgcmVqZWN0aW9uLgotICAgICAgICAgICAgaWYgKGZsb3dU
aHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkgewotICAgICAg
ICAgICAgICAgIGlmIChmbG93VGhyZWFkLT5zdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkpCi0gICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnNoaWZ0TWF4WEVkZ2VUbyhzdGQ6
Om1heChsYXllckJvdW5kcy5tYXhYKCksIGJhY2tncm91bmRSZWN0LnJlY3QoKS5tYXhYKCkpKTsK
LSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnNo
aWZ0TWF4WUVkZ2VUbyhzdGQ6Om1heChsYXllckJvdW5kcy5tYXhZKCksIGJhY2tncm91bmRSZWN0
LnJlY3QoKS5tYXhZKCkpKTsKLSAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTcwOTksNTAgKzY5OTIsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpwYWludE5hbWVkRmxvd1RocmVh
ZEluCiAgICAgY29udGV4dC5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50
Rmxvd1RocmVhZElmUmVnaW9uRm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBmcmFn
bWVudHMsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
IHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCi17Ci0gICAgaWYgKCFy
ZW5kZXJlcigpLmlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRDb250YWluZXIoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFJlbmRlckJsb2NrRmxvdyYgcmVuZGVyTmFtZWRGbG93RnJhZ21l
bnRDb250YWluZXIgPSBkb3duY2FzdDxSZW5kZXJCbG9ja0Zsb3c+KHJlbmRlcmVyKCkpOwotICAg
IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBmbG93RnJhZ21lbnQgPSByZW5kZXJOYW1lZEZsb3dG
cmFnbWVudENvbnRhaW5lci5yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwotICAgIGlmICghZmxv
d0ZyYWdtZW50LT5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dGcmFnbWVudC0+bmFtZWRGbG93VGhyZWFkKCk7
Ci0gICAgUmVuZGVyTGF5ZXIqIGZsb3dUaHJlYWRMYXllciA9IGZsb3dUaHJlYWQtPmxheWVyKCk7
Ci0KLSAgICBMYXlvdXRSZWN0IHJlZ2lvbkNsaXBSZWN0ID0gTGF5b3V0UmVjdDo6aW5maW5pdGVS
ZWN0KCk7Ci0gICAgaWYgKGZsb3dGcmFnbWVudC0+c2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50
KCkpIHsKLSAgICAgICAgcmVnaW9uQ2xpcFJlY3QgPSByZW5kZXJOYW1lZEZsb3dGcmFnbWVudENv
bnRhaW5lci5wYWRkaW5nQm94UmVjdCgpOwotCi0gICAgICAgIC8vIFdoZW4gdGhlIGxheWVyIG9m
IHRoZSBmbG93IGZyYWdtZW50J3MgY29udGFpbmVyIGlzIGNvbXBvc2l0ZWQsIHRoZSBmbG93IGZy
YWdtZW50IGNvbnRhaW5lciByZWNlaXZlcyBhCi0gICAgICAgIC8vIEdyYXBoaWNzTGF5ZXIgb2Yg
aXRzIG93biBzbyB0aGUgY2xpcHBpbmcgY29vcmRpbmF0ZXMgKGNhdXNlZCBieSBvdmVyZmxvdzpo
aWRkZW4pIG11c3QgYmUgcmVsYXRpdmUgdG8gdGhlCi0gICAgICAgIC8vIEdyYXBoaWNzTGF5ZXIg
Y29vcmRpbmF0ZXMgaW4gd2hpY2ggdGhlIGZyYWdtZW50IGdldHMgcGFpbnRlZC4gU28gd2hhdCBp
cyBjb21wdXRlZCBzbyBmYXIgaXMgZW5vdWdoLgotICAgICAgICAvLyBJZiB0aGUgbGF5ZXIgb2Yg
dGhlIGZsb3dGcmFnbWVudCBpcyBub3QgY29tcG9zaXRlZCwgdGhlbiB3ZSBjaGFuZ2UgdGhlIGNv
b3JkaW5hdGVzIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBmbG93Ci0gICAgICAgIC8vIHRocmVhZCdz
IGxheWVyLgotICAgICAgICBpZiAoIWlzQ29tcG9zaXRlZCgpKQotICAgICAgICAgICAgcmVnaW9u
Q2xpcFJlY3QubW92ZShvZmZzZXRGcm9tQW5jZXN0b3IocGFpbnRpbmdJbmZvLnJvb3RMYXllcikp
OwotICAgIH0KLSAgICAKLSAgICBmb3IgKGNvbnN0IGF1dG8mIGZyYWdtZW50IDogZnJhZ21lbnRz
KSB7Ci0gICAgICAgIENsaXBSZWN0IGNsaXBSZWN0ID0gZnJhZ21lbnQuZm9yZWdyb3VuZFJlY3Q7
Ci0gICAgICAgIGlmIChmbG93RnJhZ21lbnQtPnNob3VsZENsaXBGbG93VGhyZWFkQ29udGVudCgp
KQotICAgICAgICAgICAgY2xpcFJlY3QuaW50ZXJzZWN0KHJlZ2lvbkNsaXBSZWN0KTsKLQotICAg
ICAgICBib29sIHNob3VsZENsaXAgPSAhY2xpcFJlY3QuaXNJbmZpbml0ZSgpOwotICAgICAgICAv
LyBPcHRpbWl6ZSBjbGlwcGluZyBmb3IgdGhlIHNpbmdsZSBmcmFnbWVudCBjYXNlLgotICAgICAg
ICBpZiAoc2hvdWxkQ2xpcCkKLSAgICAgICAgICAgIGNsaXBUb1JlY3QoY29udGV4dCwgcGFpbnRp
bmdJbmZvLCBjbGlwUmVjdCk7Ci0KLSAgICAgICAgZmxvd1RocmVhZExheWVyLT5wYWludE5hbWVk
Rmxvd1RocmVhZEluc2lkZVJlZ2lvbihjb250ZXh0LCBmbG93RnJhZ21lbnQsIHBhaW50aW5nSW5m
by5wYWludERpcnR5UmVjdCwgZnJhZ21lbnQubGF5ZXJCb3VuZHMubG9jYXRpb24oKSArIHBhaW50
aW5nSW5mby5zdWJwaXhlbE9mZnNldCwKLSAgICAgICAgICAgIHBhaW50aW5nSW5mby5wYWludEJl
aGF2aW9yLCBwYWludEZsYWdzKTsKLQotICAgICAgICBpZiAoc2hvdWxkQ2xpcCkKLSAgICAgICAg
ICAgIHJlc3RvcmVDbGlwKGNvbnRleHQsIHBhaW50aW5nSW5mbywgY2xpcFJlY3QpOwotICAgIH0K
LX0KLQogUmVuZGVyTGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0Rmxvd1RocmVhZElmUmVnaW9u
Rm9yRnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiBmcmFnbWVudHMsIFJlbmRlckxheWVy
KiwgY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgTGF5b3V0UmVjdCYgaGl0VGVzdFJlY3QsCiAgICAgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBoaXRUZXN0TG9jYXRpb24sCiAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB0
cmFuc2Zvcm1TdGF0ZSwgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIu
aAkocmV2aXNpb24gMjIyMjU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgzNCw3ICs4MzQsNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgYXBwbHlGaWx0ZXJzKEZpbHRlckVmZmVjdFJlbmRlcmVySGVscGVyKiwgR3JhcGhpY3NDb250
ZXh0JiBvcmlnaW5hbENvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiwgY29uc3QgTGF5
ZXJGcmFnbWVudHMmKTsKIAogICAgIHZvaWQgcGFpbnRMYXllcihHcmFwaGljc0NvbnRleHQmLCBj
b25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7Ci0gICAgdm9pZCBwYWlu
dEZpeGVkTGF5ZXJzSW5OYW1lZEZsb3dzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFp
bnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50
c0FuZFJlZmxlY3Rpb24oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRMYXllckJ5QXBwbHlpbmdUcmFuc2Zv
cm0oR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVy
RmxhZ3MsIGNvbnN0IExheW91dFNpemUmIHRyYW5zbGF0aW9uT2Zmc2V0ID0gTGF5b3V0U2l6ZSgp
KTsKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBM
YXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CkBAIC0xMDM1LDcgKzEwMzQsNiBA
QCBwcml2YXRlOgogICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiwKICAgICAgICAgY29uc3QgSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiwgZG91YmxlKiB6
T2Zmc2V0Rm9yRGVzY2VuZGFudHMsCiAgICAgICAgIGRvdWJsZSogek9mZnNldCwgY29uc3QgSGl0
VGVzdGluZ1RyYW5zZm9ybVN0YXRlKiB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLCBib29sIGRl
cHRoU29ydERlc2NlbmRhbnRzKTsKLSAgICB2b2lkIHBhaW50Rmxvd1RocmVhZElmUmVnaW9uRm9y
RnJhZ21lbnRzKGNvbnN0IExheWVyRnJhZ21lbnRzJiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
TGF5ZXJQYWludGluZ0luZm8mLCBQYWludExheWVyRmxhZ3MpOwogICAgIGJvb2wgbWFwTGF5ZXJD
bGlwUmVjdHNUb0ZyYWdtZW50YXRpb25MYXllcihDbGlwUmVjdHMmKSBjb25zdDsKIAogICAgIFJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50KiBjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBj
b25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyAr
MzIsNiBAQAogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJD
aHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKLSNpbmNsdWRlICJGbG93VGhyZWFk
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgpAQCAtNzAyLDggKzcwMSw2IEBAIGJvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3MKICNlbmRpZgogCiAgICAgaWYgKGNoZWNr
Rm9ySGllcmFyY2h5VXBkYXRlKSB7Ci0gICAgICAgIGlmIChtX3JlbmRlclZpZXcuaGFzUmVuZGVy
TmFtZWRGbG93VGhyZWFkcygpICYmIGlzRnVsbFVwZGF0ZSkKLSAgICAgICAgICAgIG1fcmVuZGVy
Vmlldy5mbG93VGhyZWFkQ29udHJvbGxlcigpLnVwZGF0ZUZsb3dUaHJlYWRzTGF5ZXJUb1JlZ2lv
bk1hcHBpbmdzSWZOZWVkZWQoKTsKICAgICAgICAgLy8gR28gdGhyb3VnaCB0aGUgbGF5ZXJzIGlu
IHByZXNlbnRhdGlvbiBvcmRlciwgc28gdGhhdCB3ZSBjYW4gY29tcHV0ZSB3aGljaCBSZW5kZXJM
YXllcnMgbmVlZCBjb21wb3NpdGluZyBsYXllcnMuCiAgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3Vs
ZCBtYXliZSBkbyB0aGlzIGFuZCB0aGUgaGllcmFyY2h5IHVkcGF0ZSBpbiBvbmUgcGFzcywgYnV0
IHRoZSBwYXJlbnRpbmcgbG9naWMgd291bGQgYmUgbW9yZSBjb21wbGV4LgogICAgICAgICBDb21w
b3NpdGluZ1N0YXRlIGNvbXBTdGF0ZSh1cGRhdGVSb290KTsKQEAgLTEyNTksMjEgKzEyNTYsNiBA
QCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YWRkVG9PdmVybGFwCiAgICAgICAgIG92ZXJs
YXBNYXAuZ2VvbWV0cnlNYXAoKS5wb3BNYXBwaW5nc1RvQW5jZXN0b3IoYW5jZXN0b3JMYXllcik7
CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHNGb3JOYW1lZEZsb3dGaXhlZChSZW5kZXJMYXllciYgbGF5ZXIsIE92ZXJsYXBNYXAm
IG92ZXJsYXBNYXAsIENvbXBvc2l0aW5nU3RhdGUmIGNoaWxkU3RhdGUsIGJvb2wmIGxheWVyc0No
YW5nZWQsIGJvb2wmIGFueURlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSkKLXsKLSAgICBpZiAoIWxh
eWVyLmlzUmVuZGVyVmlld0xheWVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbGF5
ZXIucmVuZGVyZXIoKS52aWV3KCkuaGFzUmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiBmaXhlZExheWVyczsKLSAgICBs
YXllci5yZW5kZXJlcigpLnZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpLmNvbGxlY3RGaXhl
ZFBvc2l0aW9uZWRMYXllcnMoZml4ZWRMYXllcnMpOwotCi0gICAgZm9yIChhdXRvKiBmaXhlZExh
eWVyIDogZml4ZWRMYXllcnMpCi0gICAgICAgIGNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50
cygmbGF5ZXIsICpmaXhlZExheWVyLCBvdmVybGFwTWFwLCBjaGlsZFN0YXRlLCBsYXllcnNDaGFu
Z2VkLCBhbnlEZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOwotfQotCiAvLyAgUmVjdXJzZSB0aHJv
dWdoIHRoZSBsYXllcnMgaW4gei1pbmRleCBhbmQgb3ZlcmZsb3cgb3JkZXIgKHdoaWNoIGlzIGVx
dWl2YWxlbnQgdG8gcGFpbnRpbmcgb3JkZXIpCiAvLyAgRm9yIHRoZSB6LW9yZGVyIGNoaWxkcmVu
IG9mIGEgY29tcG9zaXRpbmcgbGF5ZXI6CiAvLyAgICAgIElmIGEgY2hpbGQgbGF5ZXJzIGhhcyBh
IGNvbXBvc2l0aW5nIGxheWVyLCB0aGVuIGFsbCBzdWJzZXF1ZW50IGxheWVycyBtdXN0CkBAIC0x
NDE0LDkgKzEzOTYsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Y29tcHV0ZUNvbXBv
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobGF5ZXIuaXNSZW5kZXJWaWV3TGF5ZXIoKSkK
LSAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzRm9yTmFtZWRGbG93Rml4ZWQo
bGF5ZXIsIG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQsIGFueURlc2NlbmRh
bnRIYXMzRFRyYW5zZm9ybSk7Ci0KICAgICAvLyBJZiB3ZSBqdXN0IGVudGVyZWQgY29tcG9zaXRp
bmcgbW9kZSwgdGhlIHJvb3Qgd2lsbCBoYXZlIGJlY29tZSBjb21wb3NpdGVkIChhcyBsb25nIGFz
IGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nIGlzIGVuYWJsZWQpLgogICAgIGlmIChsYXllci5pc1Jl
bmRlclZpZXdMYXllcigpKSB7CiAgICAgICAgIGlmIChpbkNvbXBvc2l0aW5nTW9kZSgpICYmIG1f
aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZykKQEAgLTE1NjksMjEgKzE1NDgsNiBAQCBib29sIFJl
bmRlckxheWVyQ29tcG9zaXRvcjo6Y2FuQWNjZWxlcmF0CiB9CiAjZW5kaWYKIAotdm9pZCBSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZUZvck5hbWVkRmxv
d0ZpeGVkKFJlbmRlckxheWVyJiBsYXllciwgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRH
cmFwaGljc0xheWVyc09mRW5jbG9zaW5nTGF5ZXIsIGludCBkZXB0aCkKLXsKLSAgICBpZiAoIWxh
eWVyLmlzUmVuZGVyVmlld0xheWVyKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbGF5
ZXIucmVuZGVyZXIoKS52aWV3KCkuaGFzUmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UmVuZGVyTGF5ZXIqPiBmaXhlZExheWVyczsKLSAgICBs
YXllci5yZW5kZXJlcigpLnZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxlcigpLmNvbGxlY3RGaXhl
ZFBvc2l0aW9uZWRMYXllcnMoZml4ZWRMYXllcnMpOwotCi0gICAgZm9yIChhdXRvKiBmaXhlZExh
eWVyIDogZml4ZWRMYXllcnMpCi0gICAgICAgIHJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZSgq
Zml4ZWRMYXllciwgY2hpbGRHcmFwaGljc0xheWVyc09mRW5jbG9zaW5nTGF5ZXIsIGRlcHRoKTsK
LX0KLQogdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVy
VHJlZShSZW5kZXJMYXllciYgbGF5ZXIsIFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGF5
ZXJzT2ZFbmNsb3NpbmdMYXllciwgaW50IGRlcHRoKQogewogICAgIC8vIE1ha2UgdGhlIGxheWVy
IGNvbXBvc2l0aW5nIGlmIG5lY2Vzc2FyeSwgYW5kIHNldCB1cCBjbGlwcGluZyBhbmQgY29udGVu
dCBsYXllcnMuCkBAIC0xNjU3LDkgKzE2MjEsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6cmVidWlsZENvbXBvCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobGF5ZXIuaXNSZW5k
ZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlRm9yTmFt
ZWRGbG93Rml4ZWQobGF5ZXIsIGNoaWxkTGlzdCwgZGVwdGggKyAxKTsKLQogICAgIGlmIChsYXll
ckJhY2tpbmcpIHsKICAgICAgICAgYm9vbCBwYXJlbnRlZCA9IGZhbHNlOwogICAgICAgICBpZiAo
aXM8UmVuZGVyV2lkZ2V0PihsYXllci5yZW5kZXJlcigpKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgJKHJldmlzaW9uIDIyMjI1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcxLDggKzM3MSw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNv
bXB1dGVSZWdpb25Db21wb3NpdGluZ1JlcXVpcmVtZW50cyhSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCosIE92ZXJsYXBNYXAmLCBDb21wb3NpdGluZ1N0YXRlJiwgYm9vbCYgbGF5ZXJzQ2hhbmdlZCwg
Ym9vbCYgYW55RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtKTsKIAotICAgIHZvaWQgY29tcHV0ZUNv
bXBvc2l0aW5nUmVxdWlyZW1lbnRzRm9yTmFtZWRGbG93Rml4ZWQoUmVuZGVyTGF5ZXImLCBPdmVy
bGFwTWFwJiwgQ29tcG9zaXRpbmdTdGF0ZSYsIGJvb2wmIGxheWVyc0NoYW5nZWQsIGJvb2wmIGFu
eURlc2NlbmRhbnRIYXMzRFRyYW5zZm9ybSk7Ci0KICAgICAvLyBSZWN1cnNlcyBkb3duIHRoZSB0
cmVlLCBwYXJlbnRpbmcgZGVzY2VuZGFudCBjb21wb3NpdGluZyBsYXllcnMgYW5kIGNvbGxlY3Rp
bmcgYW4gYXJyYXkgb2YgY2hpbGQgbGF5ZXJzIGZvciB0aGUgY3VycmVudCBjb21wb3NpdGluZyBs
YXllci4KICAgICB2b2lkIHJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZShSZW5kZXJMYXllciYs
IFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkR3JhcGhpY3NMYXllcnNPZkVuY2xvc2luZ0xh
eWVyLCBpbnQgZGVwdGgpOwogCkBAIC0zODAsOCArMzc4LDYgQEAgcHJpdmF0ZToKICAgICAvLyBs
YXllcnMgZm9yIHRoZSBjdXJyZW50IGNvbXBvc2l0aW5nIGxheWVyIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIGFub255bW91cyByZWdpb24gKHRoYXQgYmVsb25ncyB0byB0aGUgcmVnaW9uJ3MgcGFyZW50
KS4KICAgICB2b2lkIHJlYnVpbGRSZWdpb25Db21wb3NpdGluZ0xheWVyVHJlZShSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCosIFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCwgaW50IGRl
cHRoKTsKIAotICAgIHZvaWQgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlRm9yTmFtZWRGbG93
Rml4ZWQoUmVuZGVyTGF5ZXImLCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZExpc3QsIGlu
dCBkZXB0aCk7Ci0KICAgICAvLyBSZWN1cnNlcyBkb3duIHRoZSB0cmVlLCB1cGRhdGluZyBsYXll
ciBnZW9tZXRyeSBvbmx5LgogICAgIHZvaWQgdXBkYXRlTGF5ZXJUcmVlR2VvbWV0cnkoUmVuZGVy
TGF5ZXImLCBpbnQgZGVwdGgpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3BwCShyZXZpc2lvbiAyMjIyNTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgogCi0jaW5jbHVkZSAiRmxvd1Ro
cmVhZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5k
ZXJCb3hSZWdpb25JbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgogI2luY2x1
ZGUgIlJlbmRlckl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgog
I2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKQEAgLTI5Myw3ICsyOTEsNiBAQCB2b2lkIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OjpjaGVja1JlZ2lvCiAgICAgYm9vbCBjdXN0b21SZWdpb25TdHls
ZSA9IGZhbHNlOwogCiAgICAgc2V0SGFzQ3VzdG9tUmVnaW9uU3R5bGUoY3VzdG9tUmVnaW9uU3R5
bGUpOwotICAgIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKm1fZmxvd1RocmVhZCku
Y2hlY2tSZWdpb25zV2l0aFN0eWxpbmcoKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZVN0eWxlSW5SZWdpb24oUmVuZGVy
RWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJikgY29uc3QKQEAgLTM4OSwxMSArMzg2LDYgQEAg
dm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6cmVzdG9yZVJlZwogICAgIG1fcmVuZGVyZXJS
ZWdpb25TdHlsZS5zd2FwKHRlbXApOwogfQogCi1SZW5kZXJOYW1lZEZsb3dUaHJlYWQqIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OjpuYW1lZEZsb3dUaHJlYWQoKSBjb25zdAotewotICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KGZsb3dUaHJlYWQoKSk7Ci19Ci0KIExh
eW91dFJlY3QgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ6OnZpc3VhbE92ZXJmbG93UmVjdCgpIGNv
bnN0CiB7CiAgICAgaWYgKGlzVmFsaWQoKSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgJKHJldmlzaW9uIDIyMjI1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw4ICs4NSw2IEBAIHB1YmxpYzoKICAgICAKICAgICBMYXlvdXRS
ZWN0IHZpc3VhbE92ZXJmbG93UmVjdCgpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkKiBuYW1lZEZsb3dUaHJlYWQoKSBjb25zdDsKLQogICAgIGJvb2wgaGFzQXV0
b0xvZ2ljYWxIZWlnaHQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc0F1dG9Mb2dpY2Fs
SGVpZ2h0OyB9CiAKICAgICBMYXlvdXRVbml0IGNvbXB1dGVkQXV0b0hlaWdodCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29tcHV0ZWRBdXRvSGVpZ2h0OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMjIyMjU5
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5jcHAJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw3NjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTi4uMFRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiAgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgotCi0jaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0
b3JJdGVyYXRvci5oIgotI2luY2x1ZGUgIkZsb3dUaHJlYWRDb250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiSW5saW5lVGV4dEJveC5oIgotI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5o
IgotI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJQb3NpdGlvbi5oIgotI2lu
Y2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJMaW5lQnJlYWsuaCIKLSNpbmNsdWRlICJSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU2hhZG93Um9vdC5oIgotI2luY2x1ZGUgIlRleHQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OlJlbmRl
ck5hbWVkRmxvd1RocmVhZChEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUp
Ci0gICAgOiBSZW5kZXJGbG93VGhyZWFkKGRvY3VtZW50LCBXVEZNb3ZlKHN0eWxlKSkKLSAgICAs
IG1faGFzUmVnaW9uc1dpdGhTdHlsaW5nKGZhbHNlKQotICAgICwgbV9kaXNwYXRjaFJlZ2lvbk92
ZXJzZXRDaGFuZ2VFdmVudChmYWxzZSkKLSAgICAsIG1fcmVnaW9uT3ZlcnNldENoYW5nZUV2ZW50
VGltZXIoKnRoaXMsICZSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlZ2lvbk92ZXJzZXRDaGFuZ2VF
dmVudFRpbWVyRmlyZWQpCi17Ci19Ci0KLVJlbmRlck5hbWVkRmxvd1RocmVhZDo6flJlbmRlck5h
bWVkRmxvd1RocmVhZCgpCi17Ci0gICAgLy8gRG8gbm90IGFkZCBhbnkgY29kZSBoZXJlLiBBZGQg
aXQgdG8gd2lsbEJlRGVzdHJveWVkKCkgaW5zdGVhZC4KLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ6OndpbGxCZURlc3Ryb3llZCgpCi17Ci0gICAgLy8gVGhlIGZsb3cgdGhyZWFkIGNh
biBiZSBkZXN0cm95ZWQgd2l0aG91dCB1bnJlZ2lzdGVyaW5nIHRoZSBjb250ZW50IG5vZGVzIGlm
IHRoZSBkb2N1bWVudCBpcyBkZXN0cm95ZWQuCi0gICAgLy8gVGhpcyBjYW4gbGVhZCB0byBwcm9i
bGVtcyBiZWNhdXNlIHRoZSBub2RlcyBhcmUgc3RpbGwgbWFya2VkIGFzIGJlbG9uZ2luZyB0byBh
IGZsb3cgdGhyZWFkLgotICAgIGNsZWFyQ29udGVudEVsZW1lbnRzKCk7Ci0KLSAgICAvLyBBbHNv
IGxlYXZlIHRoZSBOYW1lZEZsb3cgb2JqZWN0IGluIGEgY29uc2lzdGVudCBzdGF0ZSBieSBjYWxs
aW5nIG1hcmsgZm9yIGRlc3RydWN0aW9uLgotICAgIHNldE1hcmtGb3JEZXN0cnVjdGlvbigpOwot
Ci0gICAgUmVuZGVyRmxvd1RocmVhZDo6d2lsbEJlRGVzdHJveWVkKCk7Ci19Ci0KLWNvbnN0IGNo
YXIqIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVuZGVyTmFtZSgpIGNvbnN0Ci17ICAgIAotICAg
IHJldHVybiAiUmVuZGVyTmFtZWRGbG93VGhyZWFkIjsKLX0KLSAgICAKLXZvaWQgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkOjpjbGVhckNvbnRlbnRFbGVtZW50cygpCi17Ci19Ci0KLXZvaWQgUmVuZGVy
TmFtZWRGbG93VGhyZWFkOjp1cGRhdGVXcml0aW5nTW9kZSgpCi17Ci0gICAgYXV0byogZmlyc3RG
cmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PihtX3JlZ2lvbkxpc3Qu
Zmlyc3QoKSk7Ci0gICAgaWYgKCFmaXJzdEZyYWdtZW50KQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKHN0eWxlKCkud3JpdGluZ01vZGUoKSA9PSBmaXJzdEZyYWdtZW50LT5zdHlsZSgpLndyaXRp
bmdNb2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSBmaXJzdCByZWdpb24gZGVm
aW5lcyB0aGUgcHJpbmNpcGFsIHdyaXRpbmcgbW9kZSBmb3IgdGhlIGVudGlyZSBmbG93LgotICAg
IGF1dG8gbmV3U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmUoc3R5bGUoKSk7Ci0gICAgbmV3U3R5
bGUuc2V0V3JpdGluZ01vZGUoZmlyc3RGcmFnbWVudC0+c3R5bGUoKS53cml0aW5nTW9kZSgpKTsK
LSAgICBzZXRTdHlsZShXVEZNb3ZlKG5ld1N0eWxlKSk7Ci19Ci0KLWJvb2wgUmVuZGVyTmFtZWRG
bG93VGhyZWFkOjpkZXBlbmRzT24oUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBvdGhlclJlbmRlckZs
b3dUaHJlYWQpIGNvbnN0Ci17Ci0gICAgaWYgKG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC5jb250
YWlucyhvdGhlclJlbmRlckZsb3dUaHJlYWQpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IC8vIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIHRoZSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuCi0g
ICAgZm9yIChjb25zdCBhdXRvJiBiZWZvcmVGbG93VGhyZWFkUGFpciA6IG1fbGF5b3V0QmVmb3Jl
VGhyZWFkc1NldCkgewotICAgICAgICBjb25zdCBhdXRvJiBiZWZvcmVGbG93VGhyZWFkID0gYmVm
b3JlRmxvd1RocmVhZFBhaXIua2V5OwotICAgICAgICBpZiAoYmVmb3JlRmxvd1RocmVhZC0+ZGVw
ZW5kc09uKG90aGVyUmVuZGVyRmxvd1RocmVhZCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLS8vIENvbXBhcmUgdHdvIHJlZ2lvbnMg
dG8gZGV0ZXJtaW5lIGluIHdoaWNoIG9uZSB0aGUgY29udGVudCBzaG91bGQgZmxvdyBmaXJzdC4K
LS8vIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIGZpcnN0IHBhc3NlZCByZWdpb24g
aXMgImxlc3MiIHRoYW4gdGhlIHNlY29uZCBwYXNzZWQgcmVnaW9uLgotLy8gSWYgdGhlIGZpcnN0
IHJlZ2lvbiBhcHBlYXJzIGJlZm9yZSBzZWNvbmQgcmVnaW9uIGluIERPTSwKLS8vIHRoZSBmaXJz
dCByZWdpb24gaXMgImxlc3MiIHRoYW4gdGhlIHNlY29uZCByZWdpb24uCi0vLyBJZiB0aGUgZmly
c3QgcmVnaW9uIGlzICJsZXNzIiB0aGFuIHRoZSBzZWNvbmQgcmVnaW9uLCB0aGUgZmlyc3QgcmVn
aW9uIHJlY2VpdmVzIGNvbnRlbnQgYmVmb3JlIHNlY29uZCByZWdpb24uCi1zdGF0aWMgYm9vbCBj
b21wYXJlUmVuZGVyTmFtZWRGbG93RnJhZ21lbnRzKGNvbnN0IFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KiBmaXJzdEZyYWdtZW50LCBjb25zdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogc2Vjb25k
RnJhZ21lbnQpCi17Ci0gICAgQVNTRVJUKGZpcnN0RnJhZ21lbnQpOwotICAgIEFTU0VSVChzZWNv
bmRGcmFnbWVudCk7Ci0KLSAgICBBU1NFUlQoZmlyc3RGcmFnbWVudC0+Z2VuZXJhdGluZ0VsZW1l
bnQoKSk7Ci0gICAgQVNTRVJUKHNlY29uZEZyYWdtZW50LT5nZW5lcmF0aW5nRWxlbWVudCgpKTsK
LQotICAgIC8vIElmIHRoZSByZWdpb25zIGJlbG9uZyB0byBkaWZmZXJlbnQgbm9kZXMsIGNvbXBh
cmUgdGhlaXIgcG9zaXRpb24gaW4gdGhlIERPTS4KLSAgICBpZiAoZmlyc3RGcmFnbWVudC0+Z2Vu
ZXJhdGluZ0VsZW1lbnQoKSAhPSBzZWNvbmRGcmFnbWVudC0+Z2VuZXJhdGluZ0VsZW1lbnQoKSkg
ewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3NpdGlvbiA9IGZpcnN0RnJhZ21lbnQtPmdlbmVy
YXRpbmdFbGVtZW50KCktPmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCpzZWNvbmRGcmFnbWVudC0+
Z2VuZXJhdGluZ0VsZW1lbnQoKSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHNlY29uZCByZWdpb24g
aXMgY29udGFpbmVkIGluIHRoZSBmaXJzdCBvbmUsIHRoZSBmaXJzdCByZWdpb24gaXMgImxlc3Mi
IGlmIGl0J3MgOmJlZm9yZS4KLSAgICAgICAgaWYgKHBvc2l0aW9uICYgTm9kZTo6RE9DVU1FTlRf
UE9TSVRJT05fQ09OVEFJTkVEX0JZKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc2Vjb25kRnJhZ21l
bnQtPnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gTk9QU0VVRE8pOwotICAgICAgICAgICAgcmV0dXJu
IGZpcnN0RnJhZ21lbnQtPnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gQkVGT1JFOwotICAgICAgICB9
Ci0KLSAgICAgICAgLy8gSWYgdGhlIHNlY29uZCByZWdpb24gY29udGFpbnMgdGhlIGZpcnN0IHJl
Z2lvbiwgdGhlIGZpcnN0IHJlZ2lvbiBpcyAibGVzcyIgaWYgdGhlIHNlY29uZCBpcyA6YWZ0ZXIu
Ci0gICAgICAgIGlmIChwb3NpdGlvbiAmIE5vZGU6OkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5T
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoZmlyc3RGcmFnbWVudC0+c3R5bGUoKS5zdHlsZVR5cGUo
KSA9PSBOT1BTRVVETyk7Ci0gICAgICAgICAgICByZXR1cm4gc2Vjb25kRnJhZ21lbnQtPnN0eWxl
KCkuc3R5bGVUeXBlKCkgPT0gQUZURVI7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKHBv
c2l0aW9uICYgTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKTsKLSAgICB9Ci0KLSAg
ICAvLyBGSVhNRTogQ3VycmVudGx5IGl0J3Mgbm90IHBvc3NpYmxlIGZvciBhbiBlbGVtZW50IHRv
IGJlIGJvdGggYSByZWdpb24gYW5kIGhhdmUgcHNldWRvLWNoaWxkcmVuLiBUaGUgY2FzZSBpcyBj
b3ZlcmVkIGFueXdheS4KLSAgICBzd2l0Y2ggKGZpcnN0RnJhZ21lbnQtPnN0eWxlKCkuc3R5bGVU
eXBlKCkpIHsKLSAgICBjYXNlIEJFRk9SRToKLSAgICAgICAgLy8gVGhlIHNlY29uZCByZWdpb24g
Y2FuIGJlIHRoZSBub2RlIG9yIHRoZSBhZnRlciBwc2V1ZG8tZWxlbWVudCAoYmVmb3JlIGlzIHNt
YWxsZXIgdGhhbiBhbnkgb2YgdGhvc2UpLgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNl
IEFGVEVSOgotICAgICAgICAvLyBUaGUgc2Vjb25kIHJlZ2lvbiBjYW4gYmUgdGhlIG5vZGUgb3Ig
dGhlIGJlZm9yZSBwc2V1ZG8tZWxlbWVudCAoYWZ0ZXIgaXMgZ3JlYXRlciB0aGFuIGFueSBvZiB0
aG9zZSkuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIE5PUFNFVURPOgotICAgICAg
ICAvLyBUaGUgc2Vjb25kIHJlZ2lvbiBjYW4gZWl0aGVyIGJlIHRoZSBiZWZvcmUgb3IgdGhlIGFm
dGVyIHBzZXVkby1lbGVtZW50ICh0aGUgbm9kZSBpcyBvbmx5IHNtYWxsZXIgdGhhbiB0aGUgYWZ0
ZXIgcHNldWRvLWVsZW1lbnQpLgotICAgICAgICByZXR1cm4gZmlyc3RGcmFnbWVudC0+c3R5bGUo
KS5zdHlsZVR5cGUoKSA9PSBBRlRFUjsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ly8gVGhpcyBoZWxwZXIgZnVuY3Rpb24gYWRkcyBhIHJlZ2lvbiB0byBhIGxpc3QgcHJlc2Vydmlu
ZyB0aGUgb3JkZXIgcHJvcGVydHkgb2YgdGhlIGxpc3QuCi1zdGF0aWMgdm9pZCBhZGRGcmFnbWVu
dFRvTGlzdChSZW5kZXJSZWdpb25MaXN0JiByZWdpb25MaXN0LCBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCogcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpCi17Ci0gICAgaWYgKHJlZ2lvbkxpc3QuaXNF
bXB0eSgpKQotICAgICAgICByZWdpb25MaXN0LmFkZChyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlZ2lvbiAiZ3JlYXRlciIg
dGhhbiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudC4KLSAgICAgICAgYXV0byBpdCA9IHJlZ2lvbkxp
c3QuYmVnaW4oKTsKLSAgICAgICAgd2hpbGUgKGl0ICE9IHJlZ2lvbkxpc3QuZW5kKCkgJiYgIWNv
bXBhcmVSZW5kZXJOYW1lZEZsb3dGcmFnbWVudHMocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQsIGRv
d25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqaXQpKSkKLSAgICAgICAgICAgICsraXQ7
Ci0gICAgICAgIHJlZ2lvbkxpc3QuaW5zZXJ0QmVmb3JlKGl0LCByZW5kZXJOYW1lZEZsb3dGcmFn
bWVudCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6YWRkRnJhZ21l
bnRUb05hbWVkRmxvd1RocmVhZChSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQpCi17Ci0gICAgQVNTRVJUKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKLSAg
ICBBU1NFUlQoIXJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5pc1ZhbGlkKCkpOwotCi0gICAgaWYg
KHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKSkKLSAgICAg
ICAgYWRkRGVwZW5kZW5jeU9uRmxvd1RocmVhZChyZW5kZXJOYW1lZEZsb3dGcmFnbWVudC0+cGFy
ZW50TmFtZWRGbG93VGhyZWFkKCkpOwotCi0gICAgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPnNl
dElzVmFsaWQodHJ1ZSk7Ci0gICAgcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPnVwZGF0ZVJlZ2lv
bkZsYWdzKCk7Ci0gICAgYWRkRnJhZ21lbnRUb0xpc3QobV9yZWdpb25MaXN0LCByZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCk7Ci0KLSAgICBpZiAobV9yZWdpb25MaXN0LmZpcnN0KCkgPT0gcmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQpCi0gICAgICAgIHVwZGF0ZVdyaXRpbmdNb2RlKCk7Ci19Ci0KLXZv
aWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZChSZW5kZXJSZWdpb24q
IHJlbmRlclJlZ2lvbikKLXsKLSAgICBBU1NFUlQocmVuZGVyUmVnaW9uKTsKLSAgICBBU1NFUlQo
IXJlbmRlclJlZ2lvbi0+aXNWYWxpZCgpKTsKLQotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
JiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50PigqcmVuZGVyUmVnaW9uKTsKLSAgICByZXNldE1hcmtGb3JEZXN0cnVjdGlvbigpOwotCi0g
ICAgaWYgKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpICYm
IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5kZXBlbmRz
T24odGhpcykpIHsKLSAgICAgICAgLy8gVGhlIG9yZGVyIG9mIGludmFsaWQgcmVnaW9ucyBpcyBp
cnJlbGV2YW50LgotICAgICAgICBtX2ludmFsaWRSZWdpb25MaXN0LmFkZCgmcmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQpOwotICAgICAgICAvLyBSZWdpc3RlciBvdXJzZWxmIHRvIGdldCBhIG5vdGlm
aWNhdGlvbiB3aGVuIHRoZSBzdGF0ZSBjaGFuZ2VzLgotICAgICAgICByZW5kZXJOYW1lZEZsb3dG
cmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKS0+bV9vYnNlcnZlclRocmVhZHNTZXQuYWRk
KHRoaXMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYWRkRnJhZ21lbnRUb05hbWVk
Rmxvd1RocmVhZCgmcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOwotCi0gICAgaW52YWxpZGF0ZVJl
Z2lvbnMoKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlbW92ZVJlZ2lvbkZy
b21UaHJlYWQoUmVuZGVyUmVnaW9uKiByZW5kZXJSZWdpb24pCi17Ci0gICAgQVNTRVJUKHJlbmRl
clJlZ2lvbik7Ci0KLSAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCYgcmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlbmRlclJlZ2lv
bik7Ci0gICAgaWYgKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVh
ZCgpKSB7Ci0gICAgICAgIGlmICghcmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9pbnZhbGlkUmVnaW9uTGlzdC5jb250YWlucygmcmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQpKTsKLSAgICAgICAgICAgIG1faW52YWxpZFJlZ2lvbkxpc3QucmVt
b3ZlKCZyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7Ci0gICAgICAgICAgICByZW5kZXJOYW1lZEZs
b3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKS0+bV9vYnNlcnZlclRocmVhZHNTZXQu
cmVtb3ZlKHRoaXMpOwotICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBpbnZhbGlkYXRlIHRoZSBy
ZWdpb25zIHJlY3RhbmdsZXMuIFRoZSByZW1vdmVkIHJlZ2lvbgotICAgICAgICAgICAgLy8gd2Fz
IG5vdCB0YWtlbiBpbnRvIGFjY291bnQuIEp1c3QgcmV0dXJuIGhlcmUuCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgcmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChy
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKSk7Ci0gICAgfQot
Ci0gICAgQVNTRVJUKG1fcmVnaW9uTGlzdC5jb250YWlucygmcmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQpKTsKLSAgICBib29sIHdhc0ZpcnN0ID0gbV9yZWdpb25MaXN0LmZpcnN0KCkgPT0gJnJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OwotICAgIG1fcmVnaW9uTGlzdC5yZW1vdmUoJnJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KTsKLQotICAgIGlmIChjYW5CZURlc3Ryb3llZCgpKQotICAgICAgICBzZXRN
YXJrRm9yRGVzdHJ1Y3Rpb24oKTsKLQotICAgIGlmICghbV9yZWdpb25MaXN0LmlzRW1wdHkoKSAm
JiB3YXNGaXJzdCkKLSAgICAgICAgdXBkYXRlV3JpdGluZ01vZGUoKTsKLQotICAgIGludmFsaWRh
dGVSZWdpb25zKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZWdpb25DaGFu
Z2VkV3JpdGluZ01vZGUoUmVuZGVyUmVnaW9uKiByZWdpb24pCi17Ci0gICAgaWYgKG1fcmVnaW9u
TGlzdC5maXJzdCgpID09IHJlZ2lvbikKLSAgICAgICAgdXBkYXRlV3JpdGluZ01vZGUoKTsKLX0K
LQotTGF5b3V0UmVjdCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmRlY29yYXRpb25zQ2xpcFJlY3RG
b3JCb3hJbk5hbWVkRmxvd0ZyYWdtZW50KGNvbnN0IFJlbmRlckJveCYgYm94LCBSZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0Ci17Ci0gICAgTGF5b3V0UmVjdCB2aXN1YWxP
dmVyZmxvd1JlY3QgPSBmcmFnbWVudC52aXN1YWxPdmVyZmxvd1JlY3RGb3JCb3goYm94KTsKLSAg
ICBMYXlvdXRVbml0IGluaXRpYWxMb2dpY2FsWCA9IHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IHZpc3VhbE92ZXJmbG93UmVjdC54KCkgOiB2aXN1YWxPdmVyZmxvd1JlY3QueSgp
OwotCi0gICAgLy8gVGhlIHZpc3VhbCBvdmVyZmxvdyByZWN0IHJldHVybmVkIGJ5IHZpc3VhbE92
ZXJmbG93UmVjdEZvckJveCBpcyBhbHJlYWR5IGZsaXBwZWQgYnV0IHRoZQotICAgIC8vIFJlbmRl
clJlZ2lvbjo6cmVjdEZsb3dQb3J0aW9uRm9yQm94IG1ldGhvZCBleHBlY3RzIGl0IHVuZmxpcHBl
ZC4KLSAgICBmbGlwRm9yV3JpdGluZ01vZGVMb2NhbENvb3JkaW5hdGVzKHZpc3VhbE92ZXJmbG93
UmVjdCk7Ci0gICAgdmlzdWFsT3ZlcmZsb3dSZWN0ID0gZnJhZ21lbnQucmVjdEZsb3dQb3J0aW9u
Rm9yQm94KCZib3gsIHZpc3VhbE92ZXJmbG93UmVjdCk7Ci0gICAgCi0gICAgLy8gTm93IGZsaXAg
aXQgYWdhaW4uCi0gICAgZmxpcEZvcldyaXRpbmdNb2RlTG9jYWxDb29yZGluYXRlcyh2aXN1YWxP
dmVyZmxvd1JlY3QpOwotCi0gICAgLy8gVGFrZSB0aGUgc2Nyb2xsZWQgb2Zmc2V0IG9mIHRoaXMg
b2JqZWN0J3MgcGFyZW50cyBpbnRvIGNvbnNpZGVyYXRpb24uCi0gICAgU2Nyb2xsUG9zaXRpb24g
c2Nyb2xsUG9zaXRpb247Ci0gICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IGJveC5j
b250YWluaW5nQmxvY2soKTsKLSAgICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrICYmICFpczxSZW5k
ZXJWaWV3PigqY29udGFpbmluZ0Jsb2NrKSkgewotICAgICAgICBpZiAoY29udGFpbmluZ0Jsb2Nr
LT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgICAgICAvLyBXZSd2ZSByZWFj
aGVkIHRoZSBmbG93IHRocmVhZCwgdGFrZSB0aGUgc2Nyb2xsZWQgb2Zmc2V0IG9mIHRoZSByZWdp
b24gaW50byBjb25zaWRlcmF0aW9uLgotICAgICAgICAgICAgQVNTRVJUKGNvbnRhaW5pbmdCbG9j
ayA9PSB0aGlzKTsKLSAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uICs9IHRvSW50U2l6ZShmcmFn
bWVudC5mcmFnbWVudENvbnRhaW5lcigpLnNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNjcm9sbFBvc2l0aW9uICs9IHRv
SW50U2l6ZShjb250YWluaW5nQmxvY2stPnNjcm9sbFBvc2l0aW9uKCkpOwotICAgICAgICBjb250
YWluaW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOwotICAgIH0K
LQotICAgIGlmICghc2Nyb2xsUG9zaXRpb24uaXNaZXJvKCkpIHsKLSAgICAgICAgaWYgKHN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHNjcm9sbFBvc2l0
aW9uID0gLXNjcm9sbFBvc2l0aW9uOwotICAgICAgICAKLSAgICAgICAgdmlzdWFsT3ZlcmZsb3dS
ZWN0LmluZmxhdGVYKHNjcm9sbFBvc2l0aW9uLngoKSk7Ci0gICAgICAgIHZpc3VhbE92ZXJmbG93
UmVjdC5pbmZsYXRlWShzY3JvbGxQb3NpdGlvbi55KCkpOwotICAgIH0KLSAgICAKLSAgICAvLyBM
YXllcnMgYXJlIGluIHBoeXNpY2FsIGNvb3JkaW5hdGVzIHNvIHRoZSBvcmlnaW4gbXVzdCBiZSBt
b3ZlZCB0byB0aGUgcGh5c2ljYWwgdG9wLWxlZnQgb2YgdGhlIGZsb3d0aHJlYWQuCi0gICAgaWYg
KHN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICBpZiAoc3R5
bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgdmlzdWFsT3ZlcmZs
b3dSZWN0Lm1vdmVCeShMYXlvdXRQb2ludCgwLCBoZWlnaHQoKSkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KExheW91dFBvaW50KHdpZHRoKCks
IDApKTsKLSAgICB9Ci0KLSAgICBjb25zdCBSZW5kZXJCb3gqIGl0ZXJCb3ggPSAmYm94OwotICAg
IHdoaWxlIChpdGVyQm94ICYmIGl0ZXJCb3ggIT0gdGhpcykgewotICAgICAgICBSZW5kZXJCbG9j
ayogY29udGFpbmVyQmxvY2sgPSBpdGVyQm94LT5jb250YWluaW5nQmxvY2soKTsKLQotICAgICAg
ICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsgcHJvcGVybHkgd2l0aCBmbGlwcGVkIHdyaXRp
bmcgbW9kZXMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjUxNDkKLSAgICAgICAgaWYgKGl0ZXJCb3gtPmlzUG9zaXRpb25lZCgpKSB7Ci0gICAg
ICAgICAgICAvLyBGb3IgcG9zaXRpb25lZCBlbGVtZW50cywganVzdCB1c2UgdGhlIGxheWVyJ3Mg
YWJzb2x1dGUgYm91bmRpbmcgYm94LgotICAgICAgICAgICAgdmlzdWFsT3ZlcmZsb3dSZWN0Lm1v
dmVCeShpdGVyQm94LT5sYXllcigpLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCkubG9jYXRpb24oKSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIExheW91dFJlY3QgY3Vy
cmVudEJveFJlY3QgPSBpdGVyQm94LT5mcmFtZVJlY3QoKTsKLSAgICAgICAgaWYgKGl0ZXJCb3gt
PnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkgewotICAgICAgICAgICAgaWYg
KGl0ZXJCb3gtPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAg
ICAgICBjdXJyZW50Qm94UmVjdC5zZXRZKGN1cnJlbnRCb3hSZWN0LmhlaWdodCgpIC0gY3VycmVu
dEJveFJlY3QubWF4WSgpKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjdXJy
ZW50Qm94UmVjdC5zZXRYKGN1cnJlbnRCb3hSZWN0LndpZHRoKCkgLSBjdXJyZW50Qm94UmVjdC5t
YXhYKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNvbnRhaW5lckJsb2NrLT5zdHlsZSgp
LndyaXRpbmdNb2RlKCkgIT0gaXRlckJveC0+c3R5bGUoKS53cml0aW5nTW9kZSgpKQotICAgICAg
ICAgICAgaXRlckJveC0+ZmxpcEZvcldyaXRpbmdNb2RlKGN1cnJlbnRCb3hSZWN0KTsKLQotICAg
ICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KGN1cnJlbnRCb3hSZWN0LmxvY2F0aW9uKCkp
OwotICAgICAgICBpdGVyQm94ID0gY29udGFpbmVyQmxvY2s7Ci0gICAgfQotCi0gICAgLy8gU2lu
Y2UgdGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gbWFrZSBzdXJlIHRoZSBib3JkZXJz
IG9mIGEgZnJhZ21lbnRlZAotICAgIC8vIGVsZW1lbnQgZG9uJ3Qgb3ZlcmZsb3cgdGhlIHJlZ2lv
biBpbiB0aGUgZnJhZ21lbnRhdGlvbiBkaXJlY3Rpb24sIHRoZXJlJ3Mgbm8KLSAgICAvLyBwb2lu
dCBpbiByZXN0cmljdGluZyB0aGUgY2xpcHBpbmcgcmVjdCBvbiB0aGUgbG9naWNhbCBYIGF4aXMu
IAotICAgIC8vIFRoaXMgYWxzbyBzYXZlcyB1cyB0aGUgdHJvdWJsZSBvZiBoYW5kbGluZyBwZXJj
ZW50LWJhc2VkIHdpZHRocyBhbmQgbWFyZ2lucwotICAgIC8vIHNpbmNlIHRoZSBhYnNvbHV0ZSBi
b3VuZGluZyBib3ggb2YgYSBwb3NpdGlvbmVkIGVsZW1lbnQgd291bGQgbm90IGNvbnRhaW4KLSAg
ICAvLyB0aGUgY29ycmVjdCBjb29yZGluYXRlcyByZWxhdGl2ZSB0byB0aGUgcmVnaW9uIHdlJ3Jl
IGludGVyZXN0ZWQgaW4sIGJ1dCByYXRoZXIKLSAgICAvLyByZWxhdGl2ZSB0byB0aGUgYWN0dWFs
IGZsb3cgdGhyZWFkLgotICAgIGlmIChzdHlsZSgpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkp
IHsKLSAgICAgICAgaWYgKGluaXRpYWxMb2dpY2FsWCA8IHZpc3VhbE92ZXJmbG93UmVjdC54KCkp
Ci0gICAgICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3Quc2hpZnRYRWRnZVRvKGluaXRpYWxMb2dp
Y2FsWCk7Ci0gICAgICAgIGlmICh2aXN1YWxPdmVyZmxvd1JlY3Qud2lkdGgoKSA8IGZyYW1lUmVj
dCgpLndpZHRoKCkpCi0gICAgICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3Quc2V0V2lkdGgoZnJh
bWVSZWN0KCkud2lkdGgoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGluaXRpYWxMb2dp
Y2FsWCA8IHZpc3VhbE92ZXJmbG93UmVjdC55KCkpCi0gICAgICAgICAgICB2aXN1YWxPdmVyZmxv
d1JlY3Quc2hpZnRZRWRnZVRvKGluaXRpYWxMb2dpY2FsWCk7Ci0gICAgICAgIGlmICh2aXN1YWxP
dmVyZmxvd1JlY3QuaGVpZ2h0KCkgPCBmcmFtZVJlY3QoKS5oZWlnaHQoKSkKLSAgICAgICAgICAg
IHZpc3VhbE92ZXJmbG93UmVjdC5zZXRIZWlnaHQoZnJhbWVSZWN0KCkuaGVpZ2h0KCkpOwotICAg
IH0KLQotICAgIHJldHVybiB2aXN1YWxPdmVyZmxvd1JlY3Q7Ci19Ci0KLVJlbmRlckJsb2NrKiBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmZyYWdtZW50RnJvbVJlbmRlckJveEFzUmVuZGVyQmxvY2so
UmVuZGVyQm94KiByZW5kZXJCb3gsIGNvbnN0IEludFBvaW50JiBhYnNvbHV0ZVBvaW50LCBjb25z
dCBSZW5kZXJCb3gmIGZsb3dlZEJveCkKLXsKLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTmFt
ZWRGbG93VGhyZWFkPigqcmVuZGVyQm94KS5mcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5kQm94
KGFic29sdXRlUG9pbnQsIGZsb3dlZEJveCk7Ci19Ci0KLVJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmZyYWdtZW50RnJvbUFic29sdXRlUG9pbnRBbmRCb3go
Y29uc3QgSW50UG9pbnQmIGFic29sdXRlUG9pbnQsIGNvbnN0IFJlbmRlckJveCYgZmxvd2VkQm94
KQotewotICAgIFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgIFJlbmRl
clJlZ2lvbiogZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICBpZiAoIWdldFJlZ2lvblJhbmdlRm9y
Qm94KCZmbG93ZWRCb3gsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0
YXJ0UmVnaW9uKSwgZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgIGF1dG8mIGZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQ+KCoqaXRlcik7Ci0gICAgICAgIFJlbmRlckJsb2NrRmxvdyYgZnJhZ21lbnRDb250YWlu
ZXIgPSBmcmFnbWVudC5mcmFnbWVudENvbnRhaW5lcigpOwotICAgICAgICBJbnRSZWN0IGZyYWdt
ZW50QWJzb2x1dGVSZWN0KHJvdW5kZWRJbnRQb2ludChmcmFnbWVudENvbnRhaW5lci5sb2NhbFRv
QWJzb2x1dGUoKSksIHJvdW5kZWRJbnRTaXplKGZyYWdtZW50Q29udGFpbmVyLnBhZGRpbmdCb3hS
ZWN0KCkuc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFnbWVudEFic29sdXRlUmVjdC5jb250YWlu
cyhhYnNvbHV0ZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiAmZnJhZ21lbnQ7Ci0gICAgICAg
IAotICAgICAgICBpZiAoJmZyYWdtZW50ID09IGVuZFJlZ2lvbikKLSAgICAgICAgICAgIGJyZWFr
OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ6OmNvbXB1dGVPdmVyZmxvdyhMYXlvdXRVbml0IG9sZENsaWVudEFmdGVyRWRn
ZSwgYm9vbCByZWNvbXB1dGVGbG9hdHMpCi17Ci0gICAgUmVuZGVyRmxvd1RocmVhZDo6Y29tcHV0
ZU92ZXJmbG93KG9sZENsaWVudEFmdGVyRWRnZSwgcmVjb21wdXRlRmxvYXRzKTsKLQotICAgIG1f
Zmxvd0NvbnRlbnRCb3R0b20gPSBvbGRDbGllbnRBZnRlckVkZ2U7Ci19Ci0KLXZvaWQgUmVuZGVy
TmFtZWRGbG93VGhyZWFkOjpsYXlvdXQoKQotewotICAgIFJlbmRlckZsb3dUaHJlYWQ6OmxheW91
dCgpOwotCi0gICAgLy8gSWYgdGhlIG51bWJlciBvZiByZWdpb25zIGhhcyBjaGFuZ2VkIHNpbmNl
IHdlIGxhc3QgY29tcHV0ZWQgdGhlIG92ZXJzZXQgcHJvcGVydHksIHNjaGVkdWxlIHRoZSByZWdp
b25PdmVyc2V0Q2hhbmdlIGV2ZW50LgotICAgIGlmIChwcmV2aW91c1JlZ2lvbkNvdW50Q2hhbmdl
ZCgpKSB7Ci0gICAgICAgIHNldERpc3BhdGNoUmVnaW9uT3ZlcnNldENoYW5nZUV2ZW50KHRydWUp
OwotICAgICAgICB1cGRhdGVQcmV2aW91c1JlZ2lvbkNvdW50KCk7Ci0gICAgfQotfQotCi12b2lk
IFJlbmRlck5hbWVkRmxvd1RocmVhZDo6ZGlzcGF0Y2hOYW1lZEZsb3dFdmVudHMoKQotewotICAg
IEFTU0VSVChpbkZpbmFsTGF5b3V0UGhhc2UoKSk7Ci0KLSAgICBkaXNwYXRjaFJlZ2lvbk92ZXJz
ZXRDaGFuZ2VFdmVudElmTmVlZGVkKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFk
OjpjaGVja0ludmFsaWRSZWdpb25zKCkKLXsKLSAgICBWZWN0b3I8UmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQqPiBuZXdWYWxpZEZyYWdtZW50czsKLSAgICBmb3IgKGF1dG8mIHJlZ2lvbiA6IG1faW52
YWxpZFJlZ2lvbkxpc3QpIHsKLSAgICAgICAgYXV0byYgbmFtZWRGbG93RnJhZ21lbnQgPSBkb3du
Y2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbik7Ci0gICAgICAgIC8vIFRoZSBv
bmx5IHJlYXNvbiBhIHJlZ2lvbiB3b3VsZCBiZSBpbnZhbGlkIGlzIGJlY2F1c2UgaXQgaGFzIGEg
cGFyZW50IGZsb3cgdGhyZWFkLgotICAgICAgICBBU1NFUlQoIW5hbWVkRmxvd0ZyYWdtZW50Lmlz
VmFsaWQoKSAmJiBuYW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKSk7Ci0g
ICAgICAgIGlmIChuYW1lZEZsb3dGcmFnbWVudC5wYXJlbnROYW1lZEZsb3dUaHJlYWQoKS0+ZGVw
ZW5kc09uKHRoaXMpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbmV3VmFsaWRG
cmFnbWVudHMuYXBwZW5kKCZuYW1lZEZsb3dGcmFnbWVudCk7Ci0gICAgfQotCi0gICAgZm9yIChh
dXRvJiBuYW1lZEZsb3dGcmFnbWVudCA6IG5ld1ZhbGlkRnJhZ21lbnRzKSB7Ci0gICAgICAgIG1f
aW52YWxpZFJlZ2lvbkxpc3QucmVtb3ZlKG5hbWVkRmxvd0ZyYWdtZW50KTsKLSAgICAgICAgbmFt
ZWRGbG93RnJhZ21lbnQtPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5tX29ic2VydmVyVGhyZWFk
c1NldC5yZW1vdmUodGhpcyk7Ci0gICAgICAgIGFkZEZyYWdtZW50VG9OYW1lZEZsb3dUaHJlYWQo
bmFtZWRGbG93RnJhZ21lbnQpOwotICAgIH0KLQotICAgIGlmICghbmV3VmFsaWRGcmFnbWVudHMu
aXNFbXB0eSgpKQotICAgICAgICBpbnZhbGlkYXRlUmVnaW9ucygpOwotCi0gICAgaWYgKG1fb2Jz
ZXJ2ZXJUaHJlYWRzU2V0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTm90
aWZ5IGFsbCB0aGUgZmxvdyB0aHJlYWRzIHRoYXQgd2VyZSBkZXBlbmRlbnQgb24gdGhpcyBmbG93
LgotCi0gICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgbGlzdCBmaXJzdC4gVGhhdCdzIGJlY2F1
c2Ugb2JzZXJ2ZXJzIG1pZ2h0IGNoYW5nZSB0aGUgbGlzdCB3aGVuIGNhbGxpbmcgY2hlY2tJbnZh
bGlkUmVnaW9ucy4KLSAgICBWZWN0b3I8UmVuZGVyTmFtZWRGbG93VGhyZWFkKj4gb2JzZXJ2ZXJz
OwotICAgIGNvcHlUb1ZlY3RvcihtX29ic2VydmVyVGhyZWFkc1NldCwgb2JzZXJ2ZXJzKTsKLQot
ICAgIGZvciAoYXV0byYgZmxvd1RocmVhZCA6IG9ic2VydmVycykKLSAgICAgICAgZmxvd1RocmVh
ZC0+Y2hlY2tJbnZhbGlkUmVnaW9ucygpOwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVh
ZDo6YWRkRGVwZW5kZW5jeU9uRmxvd1RocmVhZChSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG90aGVy
Rmxvd1RocmVhZCkKLXsKLSAgICBSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0OjpBZGRS
ZXN1bHQgcmVzdWx0ID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmFkZChvdGhlckZsb3dUaHJl
YWQpOwotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICAvLyBUaGlzIGlzIHRo
ZSBmaXJzdCB0aW1lIHdlIHNlZSB0aGlzIGRlcGVuZGVuY3kuIE1ha2Ugc3VyZSB3ZSByZWNhbGN1
bGF0ZSBhbGwgdGhlIGRlcGVuZGVuY2llcy4KLSAgICAgICAgdmlldygpLmZsb3dUaHJlYWRDb250
cm9sbGVyKCkuc2V0SXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRPcmRlckRpcnR5KHRydWUpOwotICAg
IH0KLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlbW92ZURlcGVuZGVuY3lPbkZs
b3dUaHJlYWQoUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBvdGhlckZsb3dUaHJlYWQpCi17Ci0gICAg
Ym9vbCByZW1vdmVkID0gbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LnJlbW92ZShvdGhlckZsb3dU
aHJlYWQpOwotICAgIGlmIChyZW1vdmVkKSB7Ci0gICAgICAgIGNoZWNrSW52YWxpZFJlZ2lvbnMo
KTsKLSAgICAgICAgdmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuc2V0SXNSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRPcmRlckRpcnR5KHRydWUpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQ6OnB1c2hEZXBlbmRlbmNpZXMoUmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCYg
bGlzdCkKLXsKLSAgICBmb3IgKGF1dG8mIGZsb3dUaHJlYWRQYWlyIDogbV9sYXlvdXRCZWZvcmVU
aHJlYWRzU2V0KSB7Ci0gICAgICAgIGF1dG8mIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkUGFpci5r
ZXk7Ci0gICAgICAgIGlmIChsaXN0LmNvbnRhaW5zKGZsb3dUaHJlYWQpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGZsb3dUaHJlYWQtPnB1c2hEZXBlbmRlbmNpZXMobGlzdCk7Ci0g
ICAgICAgIGxpc3QuYWRkKGZsb3dUaHJlYWQpOwotICAgIH0KLX0KLQotLy8gVGhlIGNvbnRlbnQg
bm9kZXMgbGlzdCBjb250YWlucyB0aG9zZSBub2RlcyB3aXRoIC13ZWJraXQtZmxvdy1pbnRvOiBm
bG93LgotLy8gQW4gZWxlbWVudCB3aXRoIGRpc3BsYXk6bm9uZSBzaG91bGQgYWxzbyBiZSBsaXN0
ZWQgYW1vbmcgdGhvc2Ugbm9kZXMuCi0vLyBUaGUgbGlzdCBvZiBub2RlcyBpcyBvcmRlcmVkLgot
dm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1l
bnQoRWxlbWVudCYpCi17Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjp1bnJlZ2lz
dGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQoRWxlbWVudCYpCi17Ci19Ci0KLWJvb2wgUmVuZGVy
TmFtZWRGbG93VGhyZWFkOjpoYXNDb250ZW50RWxlbWVudChFbGVtZW50JikgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmFsc2U7Ci19Ci0gICAgCi1jb25zdCBBdG9taWNTdHJpbmcmIFJlbmRlck5hbWVk
Rmxvd1RocmVhZDo6Zmxvd1RocmVhZE5hbWUoKSBjb25zdAotewotICAgIHJldHVybiBudWxsQXRv
bSgpOwotfQotCi1ib29sIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6aXNDaGlsZEFsbG93ZWQoY29u
c3QgUmVuZGVyT2JqZWN0JiBjaGlsZCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSBjb25zdAot
ewotICAgIGlmICghY2hpbGQubm9kZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIEFT
U0VSVChpczxFbGVtZW50PigqY2hpbGQubm9kZSgpKSk7Ci0KLSAgICBhdXRvKiBvcmlnaW5hbFBh
cmVudCA9IGNvbXBvc2VkVHJlZUFuY2VzdG9ycygqY2hpbGQubm9kZSgpKS5maXJzdCgpOwotICAg
IGlmICghb3JpZ2luYWxQYXJlbnQgfHwgIW9yaWdpbmFsUGFyZW50LT5yZW5kZXJlcigpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBvcmlnaW5hbFBhcmVudC0+cmVuZGVyZXIo
KS0+aXNDaGlsZEFsbG93ZWQoY2hpbGQsIHN0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ6OmRpc3BhdGNoUmVnaW9uT3ZlcnNldENoYW5nZUV2ZW50SWZOZWVkZWQoKQotewot
fQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVnaW9uT3ZlcnNldENoYW5nZUV2ZW50
VGltZXJGaXJlZCgpCi17Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpzZXRNYXJr
Rm9yRGVzdHJ1Y3Rpb24oKQotewotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVz
ZXRNYXJrRm9yRGVzdHJ1Y3Rpb24oKQotewotfQotCi1ib29sIFJlbmRlck5hbWVkRmxvd1RocmVh
ZDo6aXNNYXJrZWRGb3JEZXN0cnVjdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1zdGF0aWMgYm9vbCBpc0NvbnRhaW5lZEluRWxlbWVudHMoY29uc3QgVmVjdG9yPEVsZW1l
bnQqPiYgb3RoZXJzLCBFbGVtZW50KiBlbGVtZW50KQotewotICAgIGZvciAoYXV0byYgb3RoZXIg
OiBvdGhlcnMpIHsKLSAgICAgICAgaWYgKG90aGVyLT5jb250YWlucyhlbGVtZW50KSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRp
YyBib29sIGJveEludGVyc2VjdHNSZWdpb24oTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yQm94LCBM
YXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JCb3gsIExheW91dFVuaXQgbG9naWNhbFRvcEZvclJl
Z2lvbiwgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tRm9yUmVnaW9uKQotewotICAgIGJvb2wgcmVn
aW9uSXNFbXB0eSA9IGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24gIT0gTGF5b3V0VW5pdDo6bWF4KCkg
JiYgbG9naWNhbFRvcEZvclJlZ2lvbiAhPSBMYXlvdXRVbml0OjptaW4oKQotICAgICAgICAmJiAo
bG9naWNhbEJvdHRvbUZvclJlZ2lvbiAtIGxvZ2ljYWxUb3BGb3JSZWdpb24pIDw9IDA7Ci0gICAg
cmV0dXJuICAobG9naWNhbEJvdHRvbUZvckJveCAtIGxvZ2ljYWxUb3BGb3JCb3gpID4gMAotICAg
ICAgICAmJiAhcmVnaW9uSXNFbXB0eQotICAgICAgICAmJiBsb2dpY2FsVG9wRm9yQm94IDwgbG9n
aWNhbEJvdHRvbUZvclJlZ2lvbiAmJiBsb2dpY2FsVG9wRm9yUmVnaW9uIDwgbG9naWNhbEJvdHRv
bUZvckJveDsKLX0KLQotLy8gUmV0cmlldmUgdGhlIG5leHQgbm9kZSB0byBiZSB2aXNpdGVkIHdo
aWxlIGNvbXB1dGluZyB0aGUgcmFuZ2VzIGluc2lkZSBhIHJlZ2lvbi4KLXN0YXRpYyBOb2RlKiBu
ZXh0Tm9kZUluc2lkZUNvbnRlbnRFbGVtZW50KGNvbnN0IE5vZGUmIGN1cnJOb2RlLCBjb25zdCBF
bGVtZW50KiBjb250ZW50RWxlbWVudCkKLXsKLSAgICBpZiAoY3Vyck5vZGUucmVuZGVyZXIoKSAm
JiBjdXJyTm9kZS5yZW5kZXJlcigpLT5pc1NWR1Jvb3QoKSkKLSAgICAgICAgcmV0dXJuIE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKGN1cnJOb2RlLCBjb250ZW50RWxlbWVudCk7
Ci0KLSAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dChjdXJyTm9kZSwgY29udGVudEVsZW1l
bnQpOwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Z2V0UmFuZ2VzKFZlY3RvcjxS
ZWZQdHI8UmFuZ2U+PiYgcmFuZ2VPYmplY3RzLCBjb25zdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCogbmFtZWRGbG93RnJhZ21lbnQpIGNvbnN0Ci17Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
Rm9yUmVnaW9uOwotICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbUZvclJlZ2lvbjsKLQotICAg
IC8vIGV4dGVuZCB0aGUgZmlyc3QgcmVnaW9uIHRvcCB0byBjb250YWluIGV2ZXJ5dGhpbmcgdXAg
dG8gaXRzIGxvZ2ljYWwgaGVpZ2h0Ci0gICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50LT5pc0ZpcnN0
UmVnaW9uKCkpCi0gICAgICAgIGxvZ2ljYWxUb3BGb3JSZWdpb24gPSBMYXlvdXRVbml0OjptaW4o
KTsKLSAgICBlbHNlCi0gICAgICAgIGxvZ2ljYWxUb3BGb3JSZWdpb24gPSAgbmFtZWRGbG93RnJh
Z21lbnQtPmxvZ2ljYWxUb3BGb3JGbG93VGhyZWFkQ29udGVudCgpOwotCi0gICAgLy8gZXh0ZW5k
IHRoZSBsYXN0IHJlZ2lvbiB0byBjb250YWluIGV2ZXJ5dGhpbmcgYWJvdmUgaXRzIHkoKQotICAg
IGlmIChuYW1lZEZsb3dGcmFnbWVudC0+aXNMYXN0UmVnaW9uKCkpCi0gICAgICAgIGxvZ2ljYWxC
b3R0b21Gb3JSZWdpb24gPSBMYXlvdXRVbml0OjptYXgoKTsKLSAgICBlbHNlCi0gICAgICAgIGxv
Z2ljYWxCb3R0b21Gb3JSZWdpb24gPSBuYW1lZEZsb3dGcmFnbWVudC0+bG9naWNhbEJvdHRvbUZv
ckZsb3dUaHJlYWRDb250ZW50KCk7Ci0KLSAgICBWZWN0b3I8RWxlbWVudCo+IGVsZW1lbnRzOwot
ICAgIC8vIGVsaW1pbmF0ZSB0aGUgY29udGVudEVsZW1lbnRzIHRoYXQgYXJlIGRlc2NlbmRhbnRz
IG9mIG90aGVyIGNvbnRlbnRFbGVtZW50cwotICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNvbnRl
bnRFbGVtZW50cygpKSB7Ci0gICAgICAgIGlmICghaXNDb250YWluZWRJbkVsZW1lbnRzKGVsZW1l
bnRzLCBlbGVtZW50KSkKLSAgICAgICAgICAgIGVsZW1lbnRzLmFwcGVuZChlbGVtZW50KTsKLSAg
ICB9Ci0KLSAgICBmb3IgKGF1dG8mIGNvbnRlbnRFbGVtZW50IDogZWxlbWVudHMpIHsKLSAgICAg
ICAgaWYgKCFjb250ZW50RWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGNvbnRlbnRF
bGVtZW50LT5kb2N1bWVudCgpKTsKLSAgICAgICAgYm9vbCBmb3VuZFN0YXJ0UG9zaXRpb24gPSBm
YWxzZTsKLSAgICAgICAgYm9vbCBzdGFydHNBYm92ZVJlZ2lvbiA9IHRydWU7Ci0gICAgICAgIGJv
b2wgZW5kc0JlbG93UmVnaW9uID0gdHJ1ZTsKLSAgICAgICAgYm9vbCBza2lwT3Zlck91dHNpZGVO
b2RlcyA9IGZhbHNlOwotICAgICAgICBOb2RlKiBsYXN0RW5kTm9kZSA9IG51bGxwdHI7Ci0KLSAg
ICAgICAgZm9yIChOb2RlKiBub2RlID0gY29udGVudEVsZW1lbnQ7IG5vZGU7IG5vZGUgPSBuZXh0
Tm9kZUluc2lkZUNvbnRlbnRFbGVtZW50KCpub2RlLCBjb250ZW50RWxlbWVudCkpIHsKLSAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgICAg
ICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgTGF5b3V0UmVjdCBib3VuZGluZ0JveDsKLSAgICAgICAgICAgIGlmIChpczxSZW5kZXJJ
bmxpbmU+KCpyZW5kZXJlcikpCi0gICAgICAgICAgICAgICAgYm91bmRpbmdCb3ggPSBkb3duY2Fz
dDxSZW5kZXJJbmxpbmU+KCpyZW5kZXJlcikubGluZXNCb3VuZGluZ0JveCgpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSkKLSAgICAgICAgICAgICAgICBi
b3VuZGluZ0JveCA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikubGluZXNCb3VuZGlu
Z0JveCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyTGluZUJyZWFrPigqcmVuZGVy
ZXIpKQotICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94ID0gZG93bmNhc3Q8UmVuZGVyTGluZUJy
ZWFrPigqcmVuZGVyZXIpLmxpbmVzQm91bmRpbmdCb3goKTsKLSAgICAgICAgICAgIGVsc2UgaWYg
KGlzPFJlbmRlckJveD4oKnJlbmRlcmVyKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIHJlbmRl
ckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKTsKLSAgICAgICAgICAgICAgICBi
b3VuZGluZ0JveCA9IHJlbmRlckJveC5mcmFtZVJlY3QoKTsKLSAgICAgICAgICAgICAgICBpZiAo
cmVuZGVyQm94LmlzUmVsUG9zaXRpb25lZCgpKQotICAgICAgICAgICAgICAgICAgICBib3VuZGlu
Z0JveC5tb3ZlKHJlbmRlckJveC5yZWxhdGl2ZVBvc2l0aW9uTG9naWNhbE9mZnNldCgpKTsKLSAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBMYXlvdXRVbml0IG9mZnNldFRvcCA9IHJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKS0+b2Zm
c2V0RnJvbUxvZ2ljYWxUb3BPZkZpcnN0UGFnZSgpOwotICAgICAgICAgICAgY29uc3QgTGF5b3V0
UG9pbnQgbG9naWNhbE9mZnNldEZyb21Ub3AoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IExh
eW91dFVuaXQoKSA6ICBvZmZzZXRUb3AsCi0gICAgICAgICAgICAgICAgaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IG9mZnNldFRvcCA6IExheW91dFVuaXQoKSk7Ci0KLSAgICAgICAgICAgIGJv
dW5kaW5nQm94Lm1vdmVCeShsb2dpY2FsT2Zmc2V0RnJvbVRvcCk7Ci0KLSAgICAgICAgICAgIExh
eW91dFVuaXQgbG9naWNhbFRvcEZvclJlbmRlcmVyID0gbmFtZWRGbG93RnJhZ21lbnQtPmxvZ2lj
YWxUb3BPZkZsb3dUaHJlYWRDb250ZW50UmVjdChib3VuZGluZ0JveCk7Ci0gICAgICAgICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JSZW5kZXJlciA9IG5hbWVkRmxvd0ZyYWdtZW50LT5s
b2dpY2FsQm90dG9tT2ZGbG93VGhyZWFkQ29udGVudFJlY3QoYm91bmRpbmdCb3gpOwotCi0gICAg
ICAgICAgICAvLyBpZiB0aGUgYm91bmRpbmcgYm94IG9mIHRoZSBjdXJyZW50IGVsZW1lbnQgZG9l
c24ndCBpbnRlcnNlY3QgdGhlIHJlZ2lvbiBib3gKLSAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBj
dXJyZW50IHJhbmdlIG9ubHkgaWYgdGhlIHN0YXJ0IGVsZW1lbnQgYmVnYW4gaW5zaWRlIHRoZSBy
ZWdpb24sCi0gICAgICAgICAgICAvLyBvdGhlcndpc2UganVzdCBtb3ZlIHRoZSBzdGFydCBwb3Np
dGlvbiBhZnRlciB0aGlzIG5vZGUgYW5kIGtlZXAgc2tpcHBpbmcgdGhlbSB1bnRpbCB3ZSBmb3Vu
ZCBhIHByb3BlciBzdGFydCBwb3NpdGlvbi4KLSAgICAgICAgICAgIGlmICghYm94SW50ZXJzZWN0
c1JlZ2lvbihsb2dpY2FsVG9wRm9yUmVuZGVyZXIsIGxvZ2ljYWxCb3R0b21Gb3JSZW5kZXJlciwg
bG9naWNhbFRvcEZvclJlZ2lvbiwgbG9naWNhbEJvdHRvbUZvclJlZ2lvbikpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZm91bmRTdGFydFBvc2l0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICghc3RhcnRzQWJvdmVSZWdpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW50
ZXJzZWN0c1Jlc3VsdCA9IHJhbmdlLT5pbnRlcnNlY3RzTm9kZSgqbm9kZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIWludGVyc2VjdHNSZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgaW50
ZXJzZWN0c1Jlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByYW5nZS0+c2V0RW5kQmVmb3JlKCpub2RlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJhbmdlT2JqZWN0cy5hcHBlbmQocmFuZ2UtPmNsb25lUmFuZ2UoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoY29udGVudEVsZW1lbnQtPmRvY3Vt
ZW50KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRzQWJvdmVSZWdpb24gPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHNr
aXBPdmVyT3V0c2lkZU5vZGVzID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgaWYgKHNraXBPdmVyT3V0c2lkZU5vZGVzKQotICAgICAgICAgICAgICAgICAgICByYW5n
ZS0+c2V0U3RhcnRBZnRlcigqbm9kZSk7Ci0gICAgICAgICAgICAgICAgZm91bmRTdGFydFBvc2l0
aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIC8vIHN0YXJ0IHBvc2l0aW9uCi0gICAgICAgICAgICBpZiAobG9naWNhbFRv
cEZvclJlbmRlcmVyIDwgbG9naWNhbFRvcEZvclJlZ2lvbiAmJiBzdGFydHNBYm92ZVJlZ2lvbikg
ewotICAgICAgICAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFRleHQgY3Jvc3NlcyByZWdpb24gdG9wCi0gICAgICAgICAgICAg
ICAgICAgIC8vIGZvciBUZXh0IGVsZW1lbnRzLCBqdXN0IGZpbmQgdGhlIGxhc3QgdGV4dGJveCB0
aGF0IGlzIGNvbnRhaW5lZCBpbnNpZGUgdGhlIHJlZ2lvbiBhbmQgdXNlIGl0cyBzdGFydCgpIG9m
ZnNldCBhcyBzdGFydCBwb3NpdGlvbgotICAgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0JiB0
ZXh0UmVuZGVyZXIgPSBkb3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpOwotICAgICAgICAg
ICAgICAgICAgICBmb3IgKElubGluZVRleHRCb3gqIGJveCA9IHRleHRSZW5kZXJlci5maXJzdFRl
eHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvZmZzZXRUb3AgKyBib3gtPmxvZ2ljYWxCb3R0b20oKSA8IGxvZ2ljYWxU
b3BGb3JSZWdpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3RhcnQoUG9zaXRpb24oZG93bmNhc3Q8VGV4
dD4obm9kZSksIGJveC0+c3RhcnQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRz
QWJvdmVSZWdpb24gPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gbm9kZSBjcm9zc2VzIHJlZ2lvbiB0b3AKLSAgICAgICAgICAgICAgICAgICAg
Ly8gZm9yIGFsbCBlbGVtZW50cywgZXhjZXB0IFRleHQsIGp1c3Qgc2V0IHRoZSBzdGFydCBwb3Np
dGlvbiB0byBiZSBiZWZvcmUgdGhlaXIgY2hpbGRyZW4KLSAgICAgICAgICAgICAgICAgICAgc3Rh
cnRzQWJvdmVSZWdpb24gPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICByYW5nZS0+c2V0U3Rh
cnQoUG9zaXRpb24obm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVDaGlsZHJlbikpOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gbm9kZSBzdGFydHMgaW5zaWRlIHJlZ2lvbgotICAgICAgICAgICAgICAgIC8vIGZvciBlbGVt
ZW50cyB0aGF0IHN0YXJ0IGluc2lkZSB0aGUgcmVnaW9uLCBzZXQgdGhlIHN0YXJ0IHBvc2l0aW9u
IHRvIGJlIGJlZm9yZSB0aGVtLiBJZiB3ZSBmb3VuZCBvbmUsIHdlIHdpbGwganVzdCBza2lwIHRo
ZSBvdGhlcnMgdW50aWwKLSAgICAgICAgICAgICAgICAvLyB0aGUgcmFuZ2UgaXMgY2xvc2VkLgot
ICAgICAgICAgICAgICAgIGlmIChzdGFydHNBYm92ZVJlZ2lvbikgewotICAgICAgICAgICAgICAg
ICAgICBzdGFydHNBYm92ZVJlZ2lvbiA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICByYW5n
ZS0+c2V0U3RhcnRCZWZvcmUoKm5vZGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHNraXBPdmVyT3V0c2lkZU5vZGVzICA9IGZhbHNlOwotICAgICAgICAg
ICAgZm91bmRTdGFydFBvc2l0aW9uID0gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gZW5kIHBvc2l0
aW9uCi0gICAgICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvclJlZ2lvbiA8IGxvZ2ljYWxCb3R0
b21Gb3JSZW5kZXJlciAmJiAoZW5kc0JlbG93UmVnaW9uIHx8ICghZW5kc0JlbG93UmVnaW9uICYm
ICFub2RlLT5pc0Rlc2NlbmRhbnRPZihsYXN0RW5kTm9kZSkpKSkgewotICAgICAgICAgICAgICAg
IC8vIGZvciBUZXh0IGVsZW1lbnRzLCBqdXN0IGZpbmQganVzdCBmaW5kIHRoZSBsYXN0IHRleHRi
b3ggdGhhdCBpcyBjb250YWluZWQgaW5zaWRlIHRoZSByZWdpb24gYW5kIHVzZSBpdHMgc3RhcnQo
KStsZW4oKSBvZmZzZXQgYXMgZW5kIHBvc2l0aW9uCi0gICAgICAgICAgICAgICAgaWYgKGlzPFJl
bmRlclRleHQ+KCpyZW5kZXJlcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCBjcm9z
c2VzIHJlZ2lvbiBib3R0b20KLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCYgdGV4dFJl
bmRlcmVyID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKTsKLSAgICAgICAgICAgICAg
ICAgICAgSW5saW5lVGV4dEJveCogbGFzdEJveCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLmZpcnN0VGV4dEJveCgp
OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKChvZmZzZXRUb3AgKyBib3gtPmxvZ2ljYWxUb3AoKSkgPCBsb2dpY2FsQm90dG9tRm9y
UmVnaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEJveCA9IGJveDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChsYXN0Qm94KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChsYXN0Qm94KQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJhbmdlLT5zZXRFbmQoUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4obm9kZSksIGxhc3RCb3gtPnN0
YXJ0KCkgKyBsYXN0Qm94LT5sZW4oKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZW5kc0JlbG93UmVn
aW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RFbmROb2RlID0gbm9kZTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBub2RlIGNyb3Nz
ZXMgcmVnaW9uIGJvdHRvbQotICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYWxsIGVsZW1lbnRz
LCBleGNlcHQgVGV4dCwganVzdCBzZXQgdGhlIHN0YXJ0IHBvc2l0aW9uIHRvIGJlIGFmdGVyIHRo
ZWlyIGNoaWxkcmVuCi0gICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRFbmQoUG9zaXRpb24o
bm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckNoaWxkcmVuKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGVuZHNCZWxvd1JlZ2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RF
bmROb2RlID0gbm9kZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgIC8vIG5vZGUgZW5kcyBpbnNpZGUgcmVnaW9uCi0gICAgICAgICAgICAg
ICAgLy8gZm9yIGVsZW1lbnRzIHRoYXQgZW5kcyBpbnNpZGUgdGhlIHJlZ2lvbiwgc2V0IHRoZSBl
bmQgcG9zaXRpb24gdG8gYmUgYWZ0ZXIgdGhlbQotICAgICAgICAgICAgICAgIC8vIGFsbG93IHRo
aXMgZW5kIHBvc2l0aW9uIHRvIGJlIGNoYW5nZWQgb25seSBieSBvdGhlciBlbGVtZW50cyB0aGF0
IGFyZSBub3QgZGVzY2VuZGFudHMgb2YgdGhlIGN1cnJlbnQgZW5kIG5vZGUKLSAgICAgICAgICAg
ICAgICBpZiAoZW5kc0JlbG93UmVnaW9uIHx8ICghZW5kc0JlbG93UmVnaW9uICYmICFub2RlLT5p
c0Rlc2NlbmRhbnRPZihsYXN0RW5kTm9kZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdl
LT5zZXRFbmRBZnRlcigqbm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVuZHNCZWxvd1JlZ2lv
biA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBsYXN0RW5kTm9kZSA9IG5vZGU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmb3Vu
ZFN0YXJ0UG9zaXRpb24gfHwgc2tpcE92ZXJPdXRzaWRlTm9kZXMpCi0gICAgICAgICAgICByYW5n
ZU9iamVjdHMuYXBwZW5kKHJhbmdlKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93
VGhyZWFkOjphcHBseUJyZWFrQWZ0ZXJDb250ZW50KExheW91dFVuaXQgY2xpZW50SGVpZ2h0KQot
ewotICAgIC8vIFNpbXVsYXRlIGEgcmVnaW9uIGJyZWFrIGF0IGhlaWdodC4gSWYgaXQgcG9pbnRz
IGluc2lkZSBhbiBhdXRvIGxvZ2ljYWwgaGVpZ2h0IHJlZ2lvbiwKLSAgICAvLyB0aGVuIGl0IG1h
eSBkZXRlcm1pbmUgdGhlIHJlZ2lvbiBjb21wdXRlZCBhdXRvaGVpZ2h0LgotICAgIGFkZEZvcmNl
ZFJlZ2lvbkJyZWFrKHRoaXMsIGNsaWVudEhlaWdodCwgdGhpcywgZmFsc2UpOwotfQotCi1ib29s
IFJlbmRlck5hbWVkRmxvd1RocmVhZDo6Y29sbGVjdHNHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9u
cygpIGNvbnN0Ci17Ci0gICAgLy8gV2Ugb25seSBuZWVkIHRvIG1hcCBsYXllcnMgdG8gcmVnaW9u
cyBmb3IgbmFtZWQgZmxvdyB0aHJlYWRzLgotICAgIC8vIE11bHRpLWNvbHVtbiB0aHJlYWRzIGFy
ZSBkaXNwbGF5ZWQgb24gdG9wIG9mIHRoZSByZWdpb25zIGFuZCBkbyBub3QgcmVxdWlyZQotICAg
IC8vIGRpc3RyaWJ1dGluZyB0aGUgbGF5ZXJzLgotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8v
IENoZWNrIGlmIHRoZSBjb250ZW50IGlzIGZsb3duIGludG8gYXQgbGVhc3QgYSByZWdpb24gd2l0
aCByZWdpb24gc3R5bGluZyBydWxlcy4KLXZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpjaGVj
a1JlZ2lvbnNXaXRoU3R5bGluZygpCi17Ci0gICAgYm9vbCBoYXNSZWdpb25zV2l0aFN0eWxpbmcg
PSBmYWxzZTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkgewot
ICAgICAgICBpZiAoZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZWdpb24pLmhh
c0N1c3RvbVJlZ2lvblN0eWxlKCkpIHsKLSAgICAgICAgICAgIGhhc1JlZ2lvbnNXaXRoU3R5bGlu
ZyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX2hh
c1JlZ2lvbnNXaXRoU3R5bGluZyA9IGhhc1JlZ2lvbnNXaXRoU3R5bGluZzsKLX0KLQotdm9pZCBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5bGUoY29uc3Qg
UmVuZGVyRWxlbWVudCYgb2JqZWN0KQotewotICAgIC8vIENsZWFyIHRoZSBzdHlsZXMgZm9yIHRo
ZSBvYmplY3QgaW4gdGhlIHJlZ2lvbnMuCi0gICAgLy8gRklYTUU6IFJlZ2lvbiBzdHlsaW5nIGlz
IG5vdCBjb21wdXRlZCBvbmx5IGZvciB0aGUgcmVnaW9uIHJhbmdlIG9mIHRoZSBvYmplY3Qgc28g
dGhpcyBpcyB3aHkgd2UgbmVlZCB0byB3YWxrIHRoZSB3aG9sZSBjaGFpbi4KLSAgICBmb3IgKGF1
dG8mIHJlZ2lvbiA6IG1fcmVnaW9uTGlzdCkKLSAgICAgICAgZG93bmNhc3Q8UmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ+KCpyZWdpb24pLmNsZWFyT2JqZWN0U3R5bGVJblJlZ2lvbihvYmplY3QpOwot
fQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVtb3ZlRmxvd0NoaWxkSW5mbyhSZW5k
ZXJFbGVtZW50JiBjaGlsZCkKLXsKLSAgICBSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVGbG93Q2hp
bGRJbmZvKGNoaWxkKTsKLSAgICBjbGVhclJlbmRlck9iamVjdEN1c3RvbVN0eWxlKGNoaWxkKTsK
LX0KLQotYm9vbCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmFic29sdXRlUXVhZHNGb3JCb3goVmVj
dG9yPEZsb2F0UXVhZD4mIHF1YWRzLCBib29sKiB3YXNGaXhlZCwgY29uc3QgUmVuZGVyQm94KiBy
ZW5kZXJlciwgZmxvYXQgbG9jYWxUb3AsIGZsb2F0IGxvY2FsQm90dG9tKSBjb25zdAotewotICAg
IFJlbmRlclJlZ2lvbiogc3RhcnRSZWdpb24gPSBudWxscHRyOwotICAgIFJlbmRlclJlZ2lvbiog
ZW5kUmVnaW9uID0gbnVsbHB0cjsKLSAgICAvLyBJZiB0aGUgYm94IGRvZXNuJ3QgaGF2ZSBhIHJh
bmdlLCB3ZSBkb24ndCBrbm93IGhvdyBpdCBpcyBmcmFnbWVudGVkIHNvIGZhbGxiYWNrIHRvIHRo
ZSBkZWZhdWx0IGJlaGF2aW91ci4KLSAgICBpZiAoIWNvbXB1dGVkUmVnaW9uUmFuZ2VGb3JCb3go
cmVuZGVyZXIsIHN0YXJ0UmVnaW9uLCBlbmRSZWdpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVnaW9uTGlzdC5maW5kKHN0YXJ0UmVnaW9uKSwg
ZW5kID0gbV9yZWdpb25MaXN0LmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAg
IFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7Ci0KLSAgICAgICAgcmVnaW9uLT5hYnNvbHV0
ZVF1YWRzRm9yQm94SW5SZWdpb24ocXVhZHMsIHdhc0ZpeGVkLCByZW5kZXJlciwgbG9jYWxUb3As
IGxvY2FsQm90dG9tKTsKLQotICAgICAgICBpZiAocmVnaW9uID09IGVuZFJlZ2lvbikKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi19CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd1RocmVhZC5oCShy
ZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNDQgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1
ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25TdWJ0cmVlUm9vdC5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+Ci0j
aW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3Ry
aW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgTm9kZTsKLWNsYXNzIFJlbmRl
ck5hbWVkRmxvd1RocmVhZDsKLQotdHlwZWRlZiBMaXN0SGFzaFNldDxSZW5kZXJOYW1lZEZsb3dU
aHJlYWQqPiBSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0OwotdHlwZWRlZiBIYXNoQ291bnRlZFNl
dDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQqPiBSZW5kZXJOYW1lZEZsb3dUaHJlYWRDb3VudGVkU2V0
OwotdHlwZWRlZiBMaXN0SGFzaFNldDxFbGVtZW50Kj4gTmFtZWRGbG93Q29udGVudEVsZW1lbnRz
OwotCi1jbGFzcyBSZW5kZXJOYW1lZEZsb3dUaHJlYWQgZmluYWwgOiBwdWJsaWMgUmVuZGVyRmxv
d1RocmVhZCwgcHVibGljIFNlbGVjdGlvblN1YnRyZWVSb290IHsKLXB1YmxpYzoKLSAgICBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQoRG9jdW1lbnQmLCBSZW5kZXJTdHlsZSYmKTsKLSAgICB2aXJ0dWFs
IH5SZW5kZXJOYW1lZEZsb3dUaHJlYWQoKTsKLQotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZmxv
d1RocmVhZE5hbWUoKSBjb25zdDsKLQotICAgIGNvbnN0IFJlbmRlclJlZ2lvbkxpc3QmIGludmFs
aWRSZW5kZXJSZWdpb25MaXN0KCkgY29uc3QgeyByZXR1cm4gbV9pbnZhbGlkUmVnaW9uTGlzdDsg
fQotCi0gICAgc3RhdGljIFJlbmRlckJsb2NrKiBmcmFnbWVudEZyb21SZW5kZXJCb3hBc1JlbmRl
ckJsb2NrKFJlbmRlckJveCosIGNvbnN0IEludFBvaW50JiBhYnNvbHV0ZVBvaW50LCBjb25zdCBS
ZW5kZXJCb3gmIGZsb3dlZEJveCk7Ci0KLSAgICB2b2lkIHB1c2hEZXBlbmRlbmNpZXMoUmVuZGVy
TmFtZWRGbG93VGhyZWFkTGlzdCYpOwotCi0gICAgdm9pZCBhZGRSZWdpb25Ub1RocmVhZChSZW5k
ZXJSZWdpb24qKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlbW92ZVJlZ2lvbkZyb21UaHJlYWQoUmVu
ZGVyUmVnaW9uKikgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIHJlZ2lvbkNoYW5nZWRXcml0aW5nTW9k
ZShSZW5kZXJSZWdpb24qKSBvdmVycmlkZTsKLQotICAgIExheW91dFJlY3QgZGVjb3JhdGlvbnND
bGlwUmVjdEZvckJveEluTmFtZWRGbG93RnJhZ21lbnQoY29uc3QgUmVuZGVyQm94JiwgUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQmKSBjb25zdDsKLQotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBmcmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5kQm94KGNvbnN0IEludFBvaW50JiwgY29uc3Qg
UmVuZGVyQm94JiBmbG93ZWRCb3gpOwotCi0gICAgdm9pZCByZWdpc3Rlck5hbWVkRmxvd0NvbnRl
bnRFbGVtZW50KEVsZW1lbnQmKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50
RWxlbWVudChFbGVtZW50Jik7Ci0gICAgY29uc3QgTmFtZWRGbG93Q29udGVudEVsZW1lbnRzJiBj
b250ZW50RWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRFbGVtZW50czsgfQotICAg
IGJvb2wgaGFzQ29udGVudEVsZW1lbnQoRWxlbWVudCYpIGNvbnN0OwotCi0gICAgYm9vbCBpc01h
cmtlZEZvckRlc3RydWN0aW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRSYW5nZXMoVmVjdG9yPFJl
ZlB0cjxSYW5nZT4+JiwgY29uc3QgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqKSBjb25zdDsKLQot
ICAgIHZvaWQgYXBwbHlCcmVha0FmdGVyQ29udGVudChMYXlvdXRVbml0KSBvdmVycmlkZTsKLQot
ICAgIGJvb2wgY29sbGVjdHNHcmFwaGljc0xheWVyc1VuZGVyUmVnaW9ucygpIGNvbnN0IG92ZXJy
aWRlOwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRlbnQgaXMgZmxvd24gaW50byBhdCBsZWFz
dCBhIHJlZ2lvbiB3aXRoIHJlZ2lvbiBzdHlsaW5nIHJ1bGVzLgotICAgIGJvb2wgaGFzUmVnaW9u
c1dpdGhTdHlsaW5nKCkgY29uc3QgeyByZXR1cm4gbV9oYXNSZWdpb25zV2l0aFN0eWxpbmc7IH0K
LSAgICB2b2lkIGNoZWNrUmVnaW9uc1dpdGhTdHlsaW5nKCk7Ci0KLSAgICB2b2lkIGNsZWFyUmVu
ZGVyT2JqZWN0Q3VzdG9tU3R5bGUoY29uc3QgUmVuZGVyRWxlbWVudCYpOwotCi0gICAgdm9pZCBy
ZW1vdmVGbG93Q2hpbGRJbmZvKFJlbmRlckVsZW1lbnQmKSBvdmVycmlkZTsKLQotICAgIExheW91
dFVuaXQgZmxvd0NvbnRlbnRCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2Zsb3dDb250ZW50Qm90
dG9tOyB9Ci0gICAgdm9pZCBkaXNwYXRjaE5hbWVkRmxvd0V2ZW50cygpOwotCi0gICAgdm9pZCBz
ZXREaXNwYXRjaFJlZ2lvbk92ZXJzZXRDaGFuZ2VFdmVudChib29sIHZhbHVlKSB7IG1fZGlzcGF0
Y2hSZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnQgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBhYnNvbHV0
ZVF1YWRzRm9yQm94KFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCosIGNvbnN0IFJlbmRlckJveCos
IGZsb2F0LCBmbG9hdCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHNl
dE1hcmtGb3JEZXN0cnVjdGlvbigpOwotICAgIHZvaWQgcmVzZXRNYXJrRm9yRGVzdHJ1Y3Rpb24o
KTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIHdpbGxCZURlc3Ryb3llZCgpIG92ZXJyaWRlOwotICAg
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotICAg
IGJvb2wgaXNDaGlsZEFsbG93ZWQoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUmVuZGVyU3R5
bGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGNvbXB1dGVPdmVyZmxvdyhMYXlvdXRVbml0
LCBib29sID0gZmFsc2UpIG92ZXJyaWRlOwotICAgIHZvaWQgbGF5b3V0KCkgb3ZlcnJpZGU7Ci0K
LSAgICB2b2lkIGRpc3BhdGNoUmVnaW9uT3ZlcnNldENoYW5nZUV2ZW50SWZOZWVkZWQoKTsKLQot
ICAgIGJvb2wgZGVwZW5kc09uKFJlbmRlck5hbWVkRmxvd1RocmVhZCogb3RoZXJSZW5kZXJGbG93
VGhyZWFkKSBjb25zdDsKLSAgICB2b2lkIGFkZERlcGVuZGVuY3lPbkZsb3dUaHJlYWQoUmVuZGVy
TmFtZWRGbG93VGhyZWFkKik7Ci0gICAgdm9pZCByZW1vdmVEZXBlbmRlbmN5T25GbG93VGhyZWFk
KFJlbmRlck5hbWVkRmxvd1RocmVhZCopOwotCi0gICAgdm9pZCBhZGRGcmFnbWVudFRvTmFtZWRG
bG93VGhyZWFkKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Kik7Ci0KLSAgICB2b2lkIGNoZWNrSW52
YWxpZFJlZ2lvbnMoKTsKLQotICAgIGJvb2wgY2FuQmVEZXN0cm95ZWQoKSBjb25zdCB7IHJldHVy
biBtX2ludmFsaWRSZWdpb25MaXN0LmlzRW1wdHkoKSAmJiBtX3JlZ2lvbkxpc3QuaXNFbXB0eSgp
ICYmIG1fY29udGVudEVsZW1lbnRzLmlzRW1wdHkoKTsgfQotICAgIHZvaWQgcmVnaW9uT3ZlcnNl
dENoYW5nZUV2ZW50VGltZXJGaXJlZCgpOwotICAgIHZvaWQgY2xlYXJDb250ZW50RWxlbWVudHMo
KTsKLSAgICB2b2lkIHVwZGF0ZVdyaXRpbmdNb2RlKCk7Ci0KLSAgICAvLyBPYnNlcnZlciBmbG93
IHRocmVhZHMgaGF2ZSBpbnZhbGlkIHJlZ2lvbnMgdGhhdCBkZXBlbmQgb24gdGhlIHN0YXRlIG9m
IHRoaXMgdGhyZWFkCi0gICAgLy8gdG8gcmUtdmFsaWRhdGUgdGhlaXIgcmVnaW9ucy4gS2VlcGlu
ZyBhIHNldCBvZiBvYnNlcnZlciB0aHJlYWRzIG1ha2UgaXQgZWFzeQotICAgIC8vIHRvIG5vdGlm
eSB0aGVtIHdoZW4gYSByZWdpb24gd2FzIHJlbW92ZWQgZnJvbSB0aGlzIGZsb3cuCi0gICAgUmVu
ZGVyTmFtZWRGbG93VGhyZWFkQ291bnRlZFNldCBtX29ic2VydmVyVGhyZWFkc1NldDsKLQotICAg
IC8vIFNvbWUgdGhyZWFkcyBuZWVkIHRvIGhhdmUgYSBjb21wbGV0ZSBsYXlvdXQgYmVmb3JlIHdl
IGxheW91dCB0aGlzIGZsb3cuCi0gICAgLy8gVGhhdCdzIGJlY2F1c2UgdGhleSBjb250YWluIGEg
UmVuZGVyUmVnaW9uIHRoYXQgc2hvdWxkIGRpc3BsYXkgdGhpcyB0aHJlYWQuIFRoZSBzZXQgbWFr
ZXMgaXQKLSAgICAvLyBlYXN5IHRvIHNvcnQgdGhlIG9yZGVyIG9mIHRocmVhZHMgbGF5b3V0Lgot
ICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQgbV9sYXlvdXRCZWZvcmVUaHJlYWRz
U2V0OwotCi0gICAgTmFtZWRGbG93Q29udGVudEVsZW1lbnRzIG1fY29udGVudEVsZW1lbnRzOwot
Ci0gICAgUmVuZGVyUmVnaW9uTGlzdCBtX2ludmFsaWRSZWdpb25MaXN0OwotCi0gICAgYm9vbCBt
X2hhc1JlZ2lvbnNXaXRoU3R5bGluZyA6IDE7Ci0gICAgYm9vbCBtX2Rpc3BhdGNoUmVnaW9uT3Zl
cnNldENoYW5nZUV2ZW50IDogMTsKLQotICAgIFRpbWVyIG1fcmVnaW9uT3ZlcnNldENoYW5nZUV2
ZW50VGltZXI7Ci0KLSAgICBMYXlvdXRVbml0IG1fZmxvd0NvbnRlbnRCb3R0b207Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfUkVOREVSX09C
SkVDVChSZW5kZXJOYW1lZEZsb3dUaHJlYWQsIGlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24g
MjIyMjU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJDU1NBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRWRpdGluZy5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgot
I2luY2x1ZGUgIkZsb3dUaHJlYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rp
b24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGll
cy5oIgpAQCAtNTUsNyArNTQsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUnVieS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0Jsb2NrLmgiCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lLmgiCkBAIC0xMjM2LDggKzEyMzQsNiBAQCBTZWxlY3Rp
b25TdWJ0cmVlUm9vdCYgUmVuZGVyT2JqZWN0OjpzZWxlCiAgICAgaWYgKCFmbG93VGhyZWFkKQog
ICAgICAgICByZXR1cm4gdmlldygpOwogCi0gICAgaWYgKGlzPFJlbmRlck5hbWVkRmxvd1RocmVh
ZD4oKmZsb3dUaHJlYWQpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93
VGhyZWFkPigqZmxvd1RocmVhZCk7CiAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZD4oKmZsb3dUaHJlYWQpKSB7CiAgICAgICAgIGlmICghZmxvd1RocmVhZC0+Y29udGFpbmlu
Z0Jsb2NrKCkpCiAgICAgICAgICAgICByZXR1cm4gdmlldygpOwpAQCAtMTc2Nyw3ICsxNzYzLDcg
QEAgUmVuZGVyQm94TW9kZWxPYmplY3QqIFJlbmRlck9iamVjdDo6b2ZmcwogICAgIGJvb2wgc2tp
cFRhYmxlcyA9IGlzUG9zaXRpb25lZCgpOwogICAgIGZsb2F0IGN1cnJab29tID0gc3R5bGUoKS5l
ZmZlY3RpdmVab29tKCk7CiAgICAgYXV0byBjdXJyZW50ID0gcGFyZW50KCk7Ci0gICAgd2hpbGUg
KGN1cnJlbnQgJiYgKCFjdXJyZW50LT5lbGVtZW50KCkgfHwgKCFjdXJyZW50LT5pc1Bvc2l0aW9u
ZWQoKSAmJiAhY3VycmVudC0+aXNCb2R5KCkpKSAmJiAhaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFk
PigqY3VycmVudCkpIHsKKyAgICB3aGlsZSAoY3VycmVudCAmJiAoIWN1cnJlbnQtPmVsZW1lbnQo
KSB8fCAoIWN1cnJlbnQtPmlzUG9zaXRpb25lZCgpICYmICFjdXJyZW50LT5pc0JvZHkoKSkpKSB7
CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBjdXJyZW50LT5lbGVtZW50KCk7CiAgICAgICAg
IGlmICghc2tpcFRhYmxlcyAmJiBlbGVtZW50ICYmIChpczxIVE1MVGFibGVFbGVtZW50PigqZWxl
bWVudCkgfHwgaXM8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+KCplbGVtZW50KSkpCiAgICAgICAgICAg
ICBicmVhazsKQEAgLTE3NzgsMTMgKzE3NzQsNyBAQCBSZW5kZXJCb3hNb2RlbE9iamVjdCogUmVu
ZGVyT2JqZWN0OjpvZmZzCiAgICAgICAgIGN1cnJab29tID0gbmV3Wm9vbTsKICAgICAgICAgY3Vy
cmVudCA9IGN1cnJlbnQtPnBhcmVudCgpOwogICAgIH0KLSAgICAKLSAgICAvLyBDU1MgcmVnaW9u
cyBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCByZWdpb24gZmxvd3Mgc2hvdWxkIHJldHVybiB0aGUg
Ym9keSBlbGVtZW50IGFzIHRoZWlyIG9mZnNldFBhcmVudC4KLSAgICBpZiAoaXM8UmVuZGVyTmFt
ZWRGbG93VGhyZWFkPihjdXJyZW50KSkgewotICAgICAgICBhdXRvKiBib2R5ID0gZG9jdW1lbnQo
KS5ib2R5T3JGcmFtZXNldCgpOwotICAgICAgICBjdXJyZW50ID0gYm9keSA/IGJvZHktPnJlbmRl
cmVyKCkgOiBudWxscHRyOwotICAgIH0KLSAgICAKKwogICAgIHJldHVybiBpczxSZW5kZXJCb3hN
b2RlbE9iamVjdD4oY3VycmVudCkgPyBkb3duY2FzdDxSZW5kZXJCb3hNb2RlbE9iamVjdD4oY3Vy
cmVudCkgOiBudWxscHRyOwogfQogCkBAIC0xOTI1LDE2ICsxOTE1LDcgQEAgYm9vbCBSZW5kZXJP
YmplY3Q6Om5vZGVBdEZsb2F0UG9pbnQoY29ucwogCiBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCog
UmVuZGVyT2JqZWN0OjpjdXJyZW50UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoKSBjb25zdAogewot
ICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgaWYgKCFpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KGZsb3dUaHJlYWQpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIC8vIEZJWE1FOiBPbmNlIHJlZ2lvbnMgYXJl
IGZ1bGx5IGludGVncmF0ZWQgd2l0aCB0aGUgY29tcG9zaXRpbmcgc3lzdGVtIHdlIHNob3VsZCB1
bmNvbW1lbnQgdGhpcyBhc3NlcnQuCi0gICAgLy8gVGhpcyBhc3NlcnQgbmVlZHMgdG8gYmUgZGlz
YWJsZWQgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIHRvIGFzayBmb3IgdGhlIGFuY2VzdG9yIGNsaXBw
aW5nIHJlY3RhbmdsZSBvZgotICAgIC8vIGEgbGF5ZXIgd2l0aG91dCBrbm93aW5nIHRoZSBjb250
YWluaW5nIHJlZ2lvbiBpbiBhZHZhbmNlLgotICAgIC8vIEFTU0VSVChmbG93VGhyZWFkLT5jdXJy
ZW50UmVnaW9uKCkgJiYgZmxvd1RocmVhZC0+Y3VycmVudFJlZ2lvbigpLT5pc1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KCkpOwotCi0gICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0Zy
YWdtZW50PihmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCkpOworICAgIHJldHVybiBudWxscHRy
OwogfQogCiBSZW5kZXJGbG93VGhyZWFkKiBSZW5kZXJPYmplY3Q6OmxvY2F0ZUZsb3dUaHJlYWRD
b250YWluaW5nQmxvY2soKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAkocmV2aXNpb24gMjIyMjU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw2IEBAIGNsYXNzIFJl
bmRlckdlb21ldHJ5TWFwOwogY2xhc3MgUmVuZGVyTGF5ZXI7CiBjbGFzcyBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0OwogY2xhc3MgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7Ci1jbGFzcyBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQ7CiBjbGFzcyBSZW5kZXJSZWdpb247CiBjbGFzcyBSZW5kZXJUaGVtZTsK
IGNsYXNzIFNlbGVjdGlvblN1YnRyZWVSb290OwpAQCAtMjc4LDcgKzI3Nyw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXIoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyR3JpZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlzUmVuZGVyTmFtZWRG
bG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlzSW5GbG93UmVu
ZGVyRmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIGlzUmVuZGVyRmxvd1RocmVhZCgpICYmICFp
c091dE9mRmxvd1Bvc2l0aW9uZWQoKTsgfQogICAgIGJvb2wgaXNPdXRPZkZsb3dSZW5kZXJGbG93
VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gaXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCk7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlZ2lvbi5jcHAJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxOCArMzAsMTcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJSZWdpb24uaCIKIAotI2luY2x1ZGUg
IkZsb3dUaHJlYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRl
ICJMYXlvdXRSZXBhaW50ZXIuaCIKICNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRl
ckJveFJlZ2lvbkluZm8uaCIKKyNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCiAjaW5jbHVk
ZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCi0j
aW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIApAQCAtNTAsNyArNDksNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lvbihFbGVtZW50JiBlbGVtZW50
LCBSZW5kZXJTdHlsZSYmIHN0eWxlLCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkKQogICAg
IDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQsIFdURk1vdmUoc3R5bGUpKQogICAgICwgbV9mbG93
VGhyZWFkKGZsb3dUaHJlYWQpCi0gICAgLCBtX3BhcmVudE5hbWVkRmxvd1RocmVhZChudWxscHRy
KQogICAgICwgbV9pc1ZhbGlkKGZhbHNlKQogewogfQpAQCAtNTgsNyArNTYsNiBAQCBSZW5kZXJS
ZWdpb246OlJlbmRlclJlZ2lvbihFbGVtZW50JiBlbGVtCiBSZW5kZXJSZWdpb246OlJlbmRlclJl
Z2lvbihEb2N1bWVudCYgZG9jdW1lbnQsIFJlbmRlclN0eWxlJiYgc3R5bGUsIFJlbmRlckZsb3dU
aHJlYWQqIGZsb3dUaHJlYWQpCiAgICAgOiBSZW5kZXJCbG9ja0Zsb3coZG9jdW1lbnQsIFdURk1v
dmUoc3R5bGUpKQogICAgICwgbV9mbG93VGhyZWFkKGZsb3dUaHJlYWQpCi0gICAgLCBtX3BhcmVu
dE5hbWVkRmxvd1RocmVhZChudWxscHRyKQogICAgICwgbV9pc1ZhbGlkKGZhbHNlKQogewogfQpA
QCAtMjc4LDcgKzI3NSw3IEBAIHZvaWQgUmVuZGVyUmVnaW9uOjphdHRhY2hSZWdpb24oKQogICAg
IC8vIGFuZCB3ZSBhcmUgYXR0YWNoaW5nIHRoZSByZWdpb24gdG8gdGhlIGZsb3cgdGhyZWFkLgog
ICAgIGluc3RhbGxGbG93VGhyZWFkKCk7CiAgICAgCi0gICAgaWYgKG1fZmxvd1RocmVhZCA9PSBt
X3BhcmVudE5hbWVkRmxvd1RocmVhZCkKKyAgICBpZiAoIW1fZmxvd1RocmVhZCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgLy8gT25seSBhZnRlciBhZGRpbmcgdGhlIHJlZ2lvbiB0byB0aGUgdGhy
ZWFkLCB0aGUgcmVnaW9uIGlzIG1hcmtlZCB0byBiZSB2YWxpZC4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmgJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZWdpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyAr
NDAsNiBAQCBjbGFzcyBFbGVtZW50OwogY2xhc3MgUmVuZGVyQm94OwogY2xhc3MgUmVuZGVyQm94
UmVnaW9uSW5mbzsKIGNsYXNzIFJlbmRlckZsb3dUaHJlYWQ7Ci1jbGFzcyBSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ7CiAKIGNsYXNzIFJlbmRlclJlZ2lvbiA6IHB1YmxpYyBSZW5kZXJCbG9ja0Zsb3cg
ewogcHVibGljOgpAQCAtNTUsNyArNTQsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGF0
dGFjaFJlZ2lvbigpOwogICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hSZWdpb24oKTsKIAotICAgIFJl
bmRlck5hbWVkRmxvd1RocmVhZCogcGFyZW50TmFtZWRGbG93VGhyZWFkKCkgY29uc3QgeyByZXR1
cm4gbV9wYXJlbnROYW1lZEZsb3dUaHJlYWQ7IH0KICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93
VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gbV9mbG93VGhyZWFkOyB9CiAKICAgICAvLyBWYWxpZCBy
ZWdpb25zIGRvIG5vdCBjcmVhdGUgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHdpdGggb3RoZXIgZmxv
d3MuCkBAIC0xNTgsMTAgKzE1Niw2IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJGbG93VGhyZWFk
KiBtX2Zsb3dUaHJlYWQ7CiAKIHByaXZhdGU6Ci0gICAgLy8gSWYgdGhpcyBSZW5kZXJSZWdpb24g
aXMgZGlzcGxheWVkIGFzIHBhcnQgb2YgYW5vdGhlciBuYW1lZCBmbG93LAotICAgIC8vIHdlIG5l
ZWQgdG8gY3JlYXRlIGEgZGVwZW5kZW5jeSB0cmVlLCBzbyB0aGF0IGxheW91dCBvZiB0aGUKLSAg
ICAvLyByZWdpb25zIGlzIGFsd2F5cyBkb25lIGJlZm9yZSB0aGUgcmVnaW9ucyB0aGVtc2VsdmVz
LgotICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogbV9wYXJlbnROYW1lZEZsb3dUaHJlYWQ7CiAg
ICAgTGF5b3V0UmVjdCBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdDsKIAogICAgIC8vIFRoaXMgbWFw
IGhvbGRzIHVuaXF1ZSBpbmZvcm1hdGlvbiBhYm91dCBhIGJsb2NrIHRoYXQgaXMgc3BsaXQgYWNy
b3NzIHJlZ2lvbnMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRy
ZWVBc1RleHQuY3BwCShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAK
IAogI2luY2x1ZGUgIkNsaXBSZWN0LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJGbG93VGhyZWFkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
RnJhbWVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTUxLDcgKzUwLDYg
QEAKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJr
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgotI2luY2x1ZGUgIlJl
bmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1
ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0dyYWRpZW50U3Rv
cC5oIgpAQCAtNjgwLDc5ICs2NzgsNiBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVyUmVuZGVyZXJz
KFRleHRTdHJlCiAgICAgICAgIHdyaXRlKHRzLCBsYXllci5yZW5kZXJlcigpLCBpbmRlbnQgKyAx
LCBiZWhhdmlvcik7CiB9CiAKLXN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyUmVnaW9uTGlzdChjb25z
dCBSZW5kZXJSZWdpb25MaXN0JiBmbG93VGhyZWFkUmVnaW9uTGlzdCwgVGV4dFN0cmVhbSYgdHMs
IGludCBpbmRlbnQpCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiByZW5kZXJSZWdpb24gOiBmbG93
VGhyZWFkUmVnaW9uTGlzdCkgewotICAgICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKLSAg
ICAgICAgdHMgPDwgc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyT2JqZWN0Kj4ocmVuZGVyUmVnaW9u
KS0+cmVuZGVyTmFtZSgpOwotCi0gICAgICAgIEVsZW1lbnQqIGdlbmVyYXRpbmdFbGVtZW50ID0g
cmVuZGVyUmVnaW9uLT5nZW5lcmF0aW5nRWxlbWVudCgpOwotICAgICAgICBpZiAoZ2VuZXJhdGlu
Z0VsZW1lbnQpIHsKLSAgICAgICAgICAgIGJvb2wgaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9
IGlzPFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKTsKLSAgICAgICAgICAg
IGlmIChpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50ICYmIGRvd25jYXN0PFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKS5oYXNDdXN0b21SZWdpb25TdHlsZSgpKQotICAgICAg
ICAgICAgICAgIHRzIDw8ICIgcmVnaW9uIHN0eWxlOiAxIjsKLSAgICAgICAgICAgIGlmIChyZW5k
ZXJSZWdpb24tPmhhc0F1dG9Mb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgdHMgPDwg
IiBoYXNBdXRvTG9naWNhbEhlaWdodCI7Ci0KLSAgICAgICAgICAgIGlmIChpc1JlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50KQotICAgICAgICAgICAgICAgIHRzIDw8ICIgKGFub255bW91cyBjaGlsZCBv
ZiI7Ci0KLSAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgdGFnTmFtZTsKLSAgICAgICAgICAgIHRh
Z05hbWUuYXBwZW5kKGdlbmVyYXRpbmdFbGVtZW50LT5ub2RlTmFtZSgpKTsKLQotICAgICAgICAg
ICAgUmVuZGVyRWxlbWVudCogcmVuZGVyRWxlbWVudEZvclJlZ2lvbiA9IGlzUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQgPyByZW5kZXJSZWdpb24tPnBhcmVudCgpIDogcmVuZGVyUmVnaW9uOwotICAg
ICAgICAgICAgaWYgKHJlbmRlckVsZW1lbnRGb3JSZWdpb24tPmlzUHNldWRvRWxlbWVudCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKHJlbmRlckVsZW1lbnRGb3JSZWdpb24tPmVsZW1lbnQoKS0+
aXNCZWZvcmVQc2V1ZG9FbGVtZW50KCkpCi0gICAgICAgICAgICAgICAgICAgIHRhZ05hbWUuYXBw
ZW5kTGl0ZXJhbCgiOjpiZWZvcmUiKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChyZW5kZXJF
bGVtZW50Rm9yUmVnaW9uLT5lbGVtZW50KCktPmlzQWZ0ZXJQc2V1ZG9FbGVtZW50KCkpCi0gICAg
ICAgICAgICAgICAgICAgIHRhZ05hbWUuYXBwZW5kTGl0ZXJhbCgiOjphZnRlciIpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICB0cyA8PCAiIHsiIDw8IHRhZ05hbWUudG9TdHJpbmcoKSA8
PCAifSI7Ci0KLSAgICAgICAgICAgIGF1dG8mIGdlbmVyYXRpbmdFbGVtZW50SWQgPSBnZW5lcmF0
aW5nRWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKTsKLSAgICAgICAgICAgIGlmICghZ2Vu
ZXJhdGluZ0VsZW1lbnRJZC5pc051bGwoKSkKLSAgICAgICAgICAgICAgICB0cyA8PCAiICMiIDw8
IGdlbmVyYXRpbmdFbGVtZW50SWQ7Ci0KLSAgICAgICAgICAgIGlmIChpc1JlbmRlck5hbWVkRmxv
d0ZyYWdtZW50KQotICAgICAgICAgICAgICAgIHRzIDw8ICIpIjsKLSAgICAgICAgfQotCi0gICAg
ICAgIHRzIDw8ICJcbiI7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCB3cml0ZVJlbmRlck5hbWVk
Rmxvd1RocmVhZHMoVGV4dFN0cmVhbSYgdHMsIFJlbmRlclZpZXcmIHJlbmRlclZpZXcsIGNvbnN0
IFJlbmRlckxheWVyJiByb290TGF5ZXIsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCwgaW50
IGluZGVudCwgUmVuZGVyQXNUZXh0QmVoYXZpb3IgYmVoYXZpb3IpCi17Ci0gICAgaWYgKCFyZW5k
ZXJWaWV3Lmhhc1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCk7Ci0gICAgdHMgPDwgIk5hbWVkIGZsb3dzXG4iOwot
Ci0gICAgZm9yIChjb25zdCBhdXRvKiByZW5kZXJGbG93VGhyZWFkIDogKnJlbmRlclZpZXcuZmxv
d1RocmVhZENvbnRyb2xsZXIoKS5yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KCkpIHsKLSAgICAg
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDEpOwotICAgICAgICB0cyA8PCAiTmFtZWQgZmxv
dyAnIiA8PCByZW5kZXJGbG93VGhyZWFkLT5mbG93VGhyZWFkTmFtZSgpIDw8ICInXG4iOwotCi0g
ICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IHJlbmRlckZsb3dUaHJlYWQtPmxheWVyKCk7Ci0g
ICAgICAgIHdyaXRlTGF5ZXJzKHRzLCByb290TGF5ZXIsICpsYXllciwgcGFpbnRSZWN0LCBpbmRl
bnQgKyAyLCBiZWhhdmlvcik7Ci0KLSAgICAgICAgLy8gRGlzcGxheSB0aGUgdmFsaWQgYW5kIGlu
dmFsaWQgcmVuZGVyIHJlZ2lvbnMgYXR0YWNoZWQgdG8gdGhpcyBmbG93IHRocmVhZC4KLSAgICAg
ICAgY29uc3QgUmVuZGVyUmVnaW9uTGlzdCYgdmFsaWRSZWdpb25zTGlzdCA9IHJlbmRlckZsb3dU
aHJlYWQtPnJlbmRlclJlZ2lvbkxpc3QoKTsKLSAgICAgICAgY29uc3QgUmVuZGVyUmVnaW9uTGlz
dCYgaW52YWxpZFJlZ2lvbnNMaXN0ID0gcmVuZGVyRmxvd1RocmVhZC0+aW52YWxpZFJlbmRlclJl
Z2lvbkxpc3QoKTsKLSAgICAgICAgaWYgKCF2YWxpZFJlZ2lvbnNMaXN0LmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCArIDIpOwotICAgICAgICAgICAgdHMg
PDwgIlJlZ2lvbnMgZm9yIG5hbWVkIGZsb3cgJyIgPDwgcmVuZGVyRmxvd1RocmVhZC0+Zmxvd1Ro
cmVhZE5hbWUoKSA8PCAiJ1xuIjsKLSAgICAgICAgICAgIHdyaXRlUmVuZGVyUmVnaW9uTGlzdCh2
YWxpZFJlZ2lvbnNMaXN0LCB0cywgaW5kZW50ICsgMyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCFpbnZhbGlkUmVnaW9uc0xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICB3cml0ZUluZGVu
dCh0cywgaW5kZW50ICsgMik7Ci0gICAgICAgICAgICB0cyA8PCAiSW52YWxpZCByZWdpb25zIGZv
ciBuYW1lZCBmbG93ICciIDw8IHJlbmRlckZsb3dUaHJlYWQtPmZsb3dUaHJlYWROYW1lKCkgPDwg
IidcbiI7Ci0gICAgICAgICAgICB3cml0ZVJlbmRlclJlZ2lvbkxpc3QoaW52YWxpZFJlZ2lvbnNM
aXN0LCB0cywgaW5kZW50ICsgMyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHN0YXRpYyBMYXlv
dXRTaXplIG1heExheW91dE92ZXJmbG93KGNvbnN0IFJlbmRlckJveCogYm94KQogewogICAgIExh
eW91dFJlY3Qgb3ZlcmZsb3dSZWN0ID0gYm94LT5sYXlvdXRPdmVyZmxvd1JlY3QoKTsKQEAgLTgz
OSw3ICs3NjQsNiBAQCBzdGF0aWMgdm9pZCB3cml0ZUxheWVycyhUZXh0U3RyZWFtJiB0cywgCiAg
ICAgICAgIAogICAgICAgICBpZiAobGF5ZXJDb3VudCkgewogICAgICAgICAgICAgaW50IGN1cnJJ
bmRlbnQgPSBpbmRlbnQ7Ci0gICAgICAgICAgICAvLyBXZSBvbmx5IHByaW50IHRoZSBoZWFkZXIg
aWYgdGhlcmUncyBhdCBsaXN0IGEgbm9uLVJlbmRlck5hbWVkRmxvd1RocmVhZCBwYXJ0IG9mIHRo
ZSBsaXN0LgogICAgICAgICAgICAgaWYgKCFwb3NpdGl2ZVpPcmRlckxpc3QtPnNpemUoKSB8fCAh
cG9zaXRpdmVaT3JkZXJMaXN0LT5hdCgwKS0+aXNGbG93VGhyZWFkQ29sbGVjdGluZ0dyYXBoaWNz
TGF5ZXJzVW5kZXJSZWdpb25zKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoYmVoYXZpb3IgJiBS
ZW5kZXJBc1RleHRTaG93TGF5ZXJOZXN0aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIHdyaXRl
SW5kZW50KHRzLCBpbmRlbnQpOwpAQCAtODU1LDExICs3NzksNiBAQCBzdGF0aWMgdm9pZCB3cml0
ZUxheWVycyhUZXh0U3RyZWFtJiB0cywgCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgCi0gICAgLy8gQWx0b3VnaCB0aGUgUmVuZGVyRmxvd1RocmVhZCByZXF1aXJlcyBhIGxh
eWVyLCBpdCBpcyBub3QgY29sbGVjdGVkIGJ5IGl0cyBwYXJlbnQsCi0gICAgLy8gc28gd2UgaGF2
ZSB0byB0cmVhdCBpdCBhcyBhIHNwZWNpYWwgY2FzZS4KLSAgICBpZiAoaXM8UmVuZGVyVmlldz4o
bGF5ZXIucmVuZGVyZXIoKSkpCi0gICAgICAgIHdyaXRlUmVuZGVyTmFtZWRGbG93VGhyZWFkcyh0
cywgZG93bmNhc3Q8UmVuZGVyVmlldz4obGF5ZXIucmVuZGVyZXIoKSksIHJvb3RMYXllciwgcGFp
bnREaXJ0eVJlY3QsIGluZGVudCwgYmVoYXZpb3IpOwogfQogCiBzdGF0aWMgU3RyaW5nIG5vZGVQ
b3NpdGlvbihOb2RlKiBub2RlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmNwcAkocmV2aXNpb24gMjIyMjU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkZsb2F0aW5nT2Jq
ZWN0cy5oIgotI2luY2x1ZGUgIkZsb3dUaHJlYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5o
IgpAQCAtNDcsNyArNDYsNiBAQAogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZC5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU2V0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
TXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZs
b3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJRdW90ZS5oIgogI2luY2x1ZGUgIlJlbmRlclNl
bGVjdGlvbkluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKQEAgLTI0OCw4ICsyNDYs
NiBAQCB2b2lkIFJlbmRlclZpZXc6OmxheW91dENvbnRlbnQoY29uc3QgTGF5CiAgICAgQVNTRVJU
KG5lZWRzTGF5b3V0KCkpOwogCiAgICAgUmVuZGVyQmxvY2tGbG93OjpsYXlvdXQoKTsKLSAgICBp
ZiAoaGFzUmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQotICAgICAgICBmbG93VGhyZWFkQ29udHJv
bGxlcigpLmxheW91dFJlbmRlck5hbWVkRmxvd1RocmVhZHMoKTsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgY2hlY2tMYXlvdXRTdGF0ZShzdGF0ZSk7CiAjZW5kaWYKQEAgLTI3NSw2NSArMjcxLDggQEAg
dm9pZCBSZW5kZXJWaWV3Ojppbml0aWFsaXplTGF5b3V0U3RhdGUoTAogICAgIHN0YXRlLm1faXNQ
YWdpbmF0ZWQgPSBzdGF0ZS5tX3BhZ2VMb2dpY2FsSGVpZ2h0ID4gMDsKIH0KIAotLy8gVGhlIGFs
Z29yaXRobSBiZWxvdyBhc3N1bWVzIHRoaXMgaXMgYSBmdWxsIGxheW91dC4gSW4gY2FzZSB0aGVy
ZSBhcmUgcHJldmlvdXNseSBjb21wdXRlZCB2YWx1ZXMgZm9yIHJlZ2lvbnMsIHN1cHBsZW1lbnRh
bCBzdGVwcyBhcmUgdGFrZW4KLS8vIHRvIGVuc3VyZSB0aGUgcmVzdWx0cyBhcmUgdGhlIHNhbWUg
YXMgdGhvc2Ugb2J0YWluZWQgZnJvbSBhIGZ1bGwgbGF5b3V0IChpLmUuIHRoZSBhdXRvLWhlaWdo
dCByZWdpb25zIGZyb20gYWxsIHRoZSBmbG93cyBhcmUgbWFya2VkIGFzIG5lZWRpbmcKLS8vIGxh
eW91dCkuCi0vLyAxLiBUaGUgZmxvd3MgYXJlIGxhaWQgb3V0IGZyb20gdGhlIG91dGVyIGZsb3cg
dG8gdGhlIGlubmVyIGZsb3cuIFRoaXMgc3VjY2Vzc2Z1bGx5IGNvbXB1dGVzIHRoZSBvdXRlciBu
b24tYXV0by1oZWlnaHQgcmVnaW9ucyBzaXplIHNvIHRoZSAKLS8vIGlubmVyIGZsb3dzIGhhdmUg
dGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBjb3JyZWN0bHkgZnJhZ21lbnQgdGhlIGNvbnRl
bnQuCi0vLyAyLiBUaGUgZmxvd3MgYXJlIGxhaWQgb3V0IGZyb20gdGhlIGlubmVyIGZsb3cgdG8g
dGhlIG91dGVyIGZsb3cuIEFmdGVyIGFuIGlubmVyIGZsb3cgaXMgbGFpZCBvdXQgaXQgZ29lcyBp
bnRvIHRoZSBjb25zdHJhaW5lZCBsYXlvdXQgcGhhc2UKLS8vIGFuZCBtYXJrcyB0aGUgYXV0by1o
ZWlnaHQgcmVnaW9ucyB0aGV5IG5lZWQgbGF5b3V0LiBUaGlzIG1lYW5zIHRoZSBvdXRlciBmbG93
cyB3aWxsIHJlbGF5b3V0IGlmIHRoZXkgZGVwZW5kIG9uIHJlZ2lvbnMgd2l0aCBhdXRvLWhlaWdo
dCByZWdpb25zCi0vLyBiZWxvbmdpbmcgdG8gaW5uZXIgZmxvd3MuIFRoaXMgc3RlcCB3aWxsIGNv
cnJlY3RseSBzZXQgdGhlIGNvbXB1dGVkQXV0b0hlaWdodCBmb3IgdGhlIGF1dG8taGVpZ2h0IHJl
Z2lvbnMuIEl0J3MgcG9zc2libGUgZm9yIG5vbi1hdXRvLWhlaWdodAotLy8gcmVnaW9ucyB0byBy
ZWxheW91dCBpZiB0aGV5IGRlcGVuZCBvbiBhdXRvLWhlaWdodCByZWdpb25zLiBUaGlzIHdpbGwg
aW52YWxpZGF0ZSB0aGUgaW5uZXIgZmxvdyB0aHJlYWRzIGFuZCBtYXJrIHRoZW0gYXMgbmVlZGlu
ZyBsYXlvdXQuCi0vLyAzLiBUaGUgbGFzdCBzdGVwIGlzIHRvIGRvIG9uZSBsYXN0IGxheW91dCBp
ZiB0aGVyZSBhcmUgcGF0aG9sb2dpY2FsIGRlcGVuZGVuY2llcyBiZXR3ZWVuIG5vbi1hdXRvLWhl
aWdodCByZWdpb25zIGFuZCBhdXRvLWhlaWdodCByZWdpb25zCi0vLyBhcyBkZXRlY3RlZCBpbiB0
aGUgcHJldmlvdXMgc3RlcC4KLXZvaWQgUmVuZGVyVmlldzo6bGF5b3V0Q29udGVudEluQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zKGNvbnN0IExheW91dFN0YXRlJiBzdGF0ZSkKLXsKLSAgICAvLyBX
ZSBuZWVkIHRvIGludmFsaWRhdGUgYWxsIHRoZSBmbG93cyB3aXRoIGF1dG8taGVpZ2h0IHJlZ2lv
bnMgaWYgb25lIHN1Y2ggZmxvdyBuZWVkcyBsYXlvdXQuCi0gICAgLy8gSWYgbm9uZSBpcyBmb3Vu
ZCB3ZSBkbyBhIGxheW91dCBhIGNoZWNrIGJhY2sgYWdhaW4gYWZ0ZXJ3YXJkcy4KLSAgICBpZiAo
IWZsb3dUaHJlYWRDb250cm9sbGVyKCkudXBkYXRlRmxvd1RocmVhZHNOZWVkaW5nTGF5b3V0KCkp
IHsKLSAgICAgICAgLy8gRG8gYSBmaXJzdCBsYXlvdXQgb2YgdGhlIGNvbnRlbnQuIEluIHNvbWUg
Y2FzZXMgbW9yZSBsYXlvdXRzIGFyZSBub3QgbmVlZGVkIChlLmcuIG9ubHkgZmxvd3Mgd2l0aCBu
b24tYXV0by1oZWlnaHQgcmVnaW9ucyBoYXZlIGNoYW5nZWQpLgotICAgICAgICBsYXlvdXRDb250
ZW50KHN0YXRlKTsKLQotICAgICAgICAvLyBJZiB3ZSBmaW5kIG5vIG5hbWVkIGZsb3cgbmVlZGlu
ZyBhIHR3byBzdGVwIGxheW91dCBhZnRlciB0aGUgZmlyc3QgbGF5b3V0LCBleGl0IGVhcmx5Lgot
ICAgICAgICAvLyBPdGhlcndpc2UsIGluaXRpYXRlIHRoZSB0d28gc3RlcCBsYXlvdXQgYWxnb3Jp
dGhtIGFuZCByZWNvbXB1dGUgYWxsIHRoZSBmbG93cy4KLSAgICAgICAgaWYgKCFmbG93VGhyZWFk
Q29udHJvbGxlcigpLnVwZGF0ZUZsb3dUaHJlYWRzTmVlZGluZ1R3b1N0ZXBMYXlvdXQoKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBMYXlvdXQgdG8gcmVjb21wdXRlIGFs
bCB0aGUgbmFtZWQgZmxvd3Mgd2l0aCBhdXRvLWhlaWdodCByZWdpb25zLgotICAgIGxheW91dENv
bnRlbnQoc3RhdGUpOwotCi0gICAgLy8gUHJvcGFnYXRlIHRoZSBjb21wdXRlZCBhdXRvLWhlaWdo
dCB2YWx1ZXMgdXB3YXJkcy4KLSAgICAvLyBOb24tYXV0by1oZWlnaHQgcmVnaW9ucyBtYXkgaW52
YWxpZGF0ZSB0aGUgZmxvdyB0aHJlYWQgYmVjYXVzZSB0aGV5IGRlcGVuZGVkIG9uIGF1dG8taGVp
Z2h0IHJlZ2lvbnMsIGJ1dCB0aGF0J3Mgb2suCi0gICAgZmxvd1RocmVhZENvbnRyb2xsZXIoKS51
cGRhdGVGbG93VGhyZWFkc0ludG9Db25zdHJhaW5lZFBoYXNlKCk7Ci0KLSAgICAvLyBEbyBvbmUg
bGFzdCBsYXlvdXQgdGhhdCBzaG91bGQgdXBkYXRlIHRoZSBhdXRvLWhlaWdodCByZWdpb25zIGZv
dW5kIGluIHRoZSBtYWluIGZsb3cKLSAgICAvLyBhbmQgc29sdmUgcGF0aG9sb2dpY2FsIGRlcGVu
ZGVuY2llcyBiZXR3ZWVuIHJlZ2lvbnMgKGUuZy4gYSBub24tYXV0by1oZWlnaHQgcmVnaW9uIGRl
cGVuZGluZwotICAgIC8vIG9uIGFuIGF1dG8taGVpZ2h0IG9uZSkuCi0gICAgaWYgKG5lZWRzTGF5
b3V0KCkpCi0gICAgICAgIGxheW91dENvbnRlbnQoc3RhdGUpOwotfQotCi12b2lkIFJlbmRlclZp
ZXc6OmxheW91dENvbnRlbnRUb0NvbXB1dGVPdmVyZmxvd0luUmVnaW9ucyhjb25zdCBMYXlvdXRT
dGF0ZSYgc3RhdGUpCit2b2lkIFJlbmRlclZpZXc6OmxheW91dENvbnRlbnRJbkF1dG9Mb2dpY2Fs
SGVpZ2h0UmVnaW9ucyhjb25zdCBMYXlvdXRTdGF0ZSYpCiB7Ci0gICAgaWYgKCFoYXNSZW5kZXJO
YW1lZEZsb3dUaHJlYWRzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZpcnN0IHBhc3Mg
dGhyb3VnaCB0aGUgZmxvdyB0aHJlYWRzIGFuZCBtYXJrIHRoZSByZWdpb25zIGFzIG5lZWRpbmcg
YSBzaW1wbGUgbGF5b3V0LgotICAgIC8vIFRoZSByZWdpb25zIGV4dHJhY3QgdGhlIG92ZXJmbG93
IGZyb20gdGhlIGZsb3cgdGhyZWFkIGFuZCBwYXNzIGl0IHRvIHRoZWlyIGNvbnRhaW5nCi0gICAg
Ly8gYmxvY2sgY2hhaW4uCi0gICAgZmxvd1RocmVhZENvbnRyb2xsZXIoKS51cGRhdGVGbG93VGhy
ZWFkc0ludG9PdmVyZmxvd1BoYXNlKCk7Ci0gICAgaWYgKG5lZWRzTGF5b3V0KCkpCi0gICAgICAg
IGxheW91dENvbnRlbnQoc3RhdGUpOwotCi0gICAgLy8gSW4gY2FzZSBzY3JvbGxiYXJzIHJlc2l6
ZWQgdGhlIHJlZ2lvbnMgYSBuZXcgcGFzcyBpcyBuZWNlc3NhcnkgdG8gdXBkYXRlIHRoZSBmbG93
IHRocmVhZHMKLSAgICAvLyBhbmQgcmVjb21wdXRlIHRoZSBvdmVyZmxvdyBvbiByZWdpb25zLiBU
aGlzIGlzIHRoZSBmaW5hbCBzdGF0ZSBvZiB0aGUgZmxvdyB0aHJlYWRzLgotICAgIGZsb3dUaHJl
YWRDb250cm9sbGVyKCkudXBkYXRlRmxvd1RocmVhZHNJbnRvRmluYWxQaGFzZSgpOwotICAgIGlm
IChuZWVkc0xheW91dCgpKQotICAgICAgICBsYXlvdXRDb250ZW50KHN0YXRlKTsKLQotICAgIC8v
IEZpbmFsbHkgcmVzZXQgdGhlIGxheW91dCBzdGF0ZSBvZiB0aGUgZmxvdyB0aHJlYWRzLgotICAg
IGZsb3dUaHJlYWRDb250cm9sbGVyKCkudXBkYXRlRmxvd1RocmVhZHNJbnRvTWVhc3VyZUNvbnRl
bnRQaGFzZSgpOwogfQogCiB2b2lkIFJlbmRlclZpZXc6OmxheW91dCgpCkBAIC0zNzksOCArMzE4
LDYgQEAgdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogICAgIGVsc2UKICAgICAgICAgbGF5b3V0
Q29udGVudCgqbV9sYXlvdXRTdGF0ZSk7CiAKLSAgICBsYXlvdXRDb250ZW50VG9Db21wdXRlT3Zl
cmZsb3dJblJlZ2lvbnMoKm1fbGF5b3V0U3RhdGUpOwotCiAjaWZuZGVmIE5ERUJVRwogICAgIGNo
ZWNrTGF5b3V0U3RhdGUoKm1fbGF5b3V0U3RhdGUpOwogI2VuZGlmCkBAIC03ODAsMTQgKzcxNyw2
IEBAIHN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRlcmVyQWZ0ZXJQb3NpdGkKIEludFJlY3QgUmVu
ZGVyVmlldzo6c2VsZWN0aW9uQm91bmRzKGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0
CiB7CiAgICAgTGF5b3V0UmVjdCBzZWxSZWN0ID0gc3VidHJlZVNlbGVjdGlvbkJvdW5kcygqdGhp
cywgY2xpcFRvVmlzaWJsZUNvbnRlbnQpOwotCi0gICAgaWYgKGhhc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZHMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIG5hbWVkRmxvd1RocmVhZCA6ICptX2Zsb3dU
aHJlYWRDb250cm9sbGVyLT5yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KCkpIHsKLSAgICAgICAg
ICAgIExheW91dFJlY3QgY3VyclJlY3QgPSBzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKCpuYW1lZEZs
b3dUaHJlYWQsIGNsaXBUb1Zpc2libGVDb250ZW50KTsKLSAgICAgICAgICAgIHNlbFJlY3QudW5p
dGUoY3VyclJlY3QpOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgcmV0dXJuIHNuYXBwZWRJbnRS
ZWN0KHNlbFJlY3QpOwogfQogCkBAIC04MzgsMTEgKzc2Nyw2IEBAIExheW91dFJlY3QgUmVuZGVy
Vmlldzo6c3VidHJlZVNlbGVjdGlvbkIKIHZvaWQgUmVuZGVyVmlldzo6cmVwYWludFNlbGVjdGlv
bigpIGNvbnN0CiB7CiAgICAgcmVwYWludFN1YnRyZWVTZWxlY3Rpb24oKnRoaXMpOwotCi0gICAg
aWYgKGhhc1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSkgewotICAgICAgICBmb3IgKGF1dG8qIG5h
bWVkRmxvd1RocmVhZCA6ICptX2Zsb3dUaHJlYWRDb250cm9sbGVyLT5yZW5kZXJOYW1lZEZsb3dU
aHJlYWRMaXN0KCkpCi0gICAgICAgICAgICByZXBhaW50U3VidHJlZVNlbGVjdGlvbigqbmFtZWRG
bG93VGhyZWFkKTsKLSAgICB9CiB9CiAKIHZvaWQgUmVuZGVyVmlldzo6cmVwYWludFN1YnRyZWVT
ZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QpIGNvbnN0CkBAIC04OTcs
NTggKzgyMSw5IEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0U2VsZWN0aW9uKFJlbmRlck9iamUKICAg
ICBtX3NlbGVjdGlvblVuc3BsaXRFbmQgPSBlbmQ7CiAgICAgbV9zZWxlY3Rpb25VbnNwbGl0RW5k
UG9zID0gZW5kUG9zOwogCi0gICAgLy8gSWYgdGhlcmUgaXMgbm8gUmVuZGVyTmFtZWRGbG93VGhy
ZWFkcyB3ZSBmb2xsb3cgdGhlIHJlZ3VsYXIgc2VsZWN0aW9uLgotICAgIGlmICghaGFzUmVuZGVy
TmFtZWRGbG93VGhyZWFkcygpKSB7Ci0gICAgICAgIFJlbmRlclN1YnRyZWVzTWFwIHNpbmdsZVN1
YnRyZWVNYXA7Ci0gICAgICAgIHNpbmdsZVN1YnRyZWVNYXAuc2V0KHRoaXMsIFNlbGVjdGlvblN1
YnRyZWVEYXRhKHN0YXJ0LCBzdGFydFBvcywgZW5kLCBlbmRQb3MpKTsKLSAgICAgICAgdXBkYXRl
U2VsZWN0aW9uRm9yU3VidHJlZXMoc2luZ2xlU3VidHJlZU1hcCwgYmxvY2tSZXBhaW50TW9kZSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0
cmVlcyhzdGFydCwgc3RhcnRQb3MsIGVuZCwgZW5kUG9zLCBibG9ja1JlcGFpbnRNb2RlKTsKLX0K
LQotdm9pZCBSZW5kZXJWaWV3OjpzcGxpdFNlbGVjdGlvbkJldHdlZW5TdWJ0cmVlcyhjb25zdCBS
ZW5kZXJPYmplY3QqIHN0YXJ0LCBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydFBvcywgY29u
c3QgUmVuZGVyT2JqZWN0KiBlbmQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2Vs
ZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKLXsKLSAgICAvLyBDb21wdXRlIHRo
ZSB2aXNpYmxlIHNlbGVjdGlvbiBlbmQgcG9pbnRzIGZvciBlYWNoIG9mIHRoZSBzdWJ0cmVlcy4K
LSAgICBSZW5kZXJTdWJ0cmVlc01hcCByZW5kZXJTdWJ0cmVlc01hcDsKLQotICAgIFNlbGVjdGlv
blN1YnRyZWVEYXRhIGluaXRpYWxTZWxlY3Rpb247Ci0gICAgcmVuZGVyU3VidHJlZXNNYXAuc2V0
KHRoaXMsIGluaXRpYWxTZWxlY3Rpb24pOwotICAgIGZvciAoYXV0byogbmFtZWRGbG93VGhyZWFk
IDogKmZsb3dUaHJlYWRDb250cm9sbGVyKCkucmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCgpKQot
ICAgICAgICByZW5kZXJTdWJ0cmVlc01hcC5zZXQobmFtZWRGbG93VGhyZWFkLCBpbml0aWFsU2Vs
ZWN0aW9uKTsKLQotICAgIGlmIChzdGFydCAmJiBlbmQpIHsKLSAgICAgICAgTm9kZSogc3RhcnRO
b2RlID0gc3RhcnQtPm5vZGUoKTsKLSAgICAgICAgTm9kZSogZW5kTm9kZSA9IGVuZC0+bm9kZSgp
OwotICAgICAgICBBU1NFUlQoZW5kTm9kZSk7Ci0gICAgICAgIE5vZGUqIHN0b3BOb2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4oKmVuZE5vZGUpOwotCi0gICAgICAgIGZv
ciAoTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsgbm9kZSAhPSBzdG9wTm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFNlbGVjdGlvblN1YnRyZWVSb290
JiByb290ID0gcmVuZGVyZXItPnNlbGVjdGlvblJvb3QoKTsKLSAgICAgICAgICAgIFNlbGVjdGlv
blN1YnRyZWVEYXRhIHNlbGVjdGlvbkRhdGEgPSByZW5kZXJTdWJ0cmVlc01hcC5nZXQoJnJvb3Qp
OwotICAgICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEuc2VsZWN0aW9uQ2xlYXIoKSkgewotICAg
ICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uU3RhcnQobm9kZS0+cmVuZGVy
ZXIoKSk7Ci0gICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25TdGFydFBv
cyhub2RlID09IHN0YXJ0Tm9kZSA/IHN0YXJ0UG9zIDogc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4o
MCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVj
dGlvbkVuZChub2RlLT5yZW5kZXJlcigpKTsKLSAgICAgICAgICAgIGlmIChub2RlID09IGVuZE5v
ZGUpCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3MoZW5k
UG9zKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG5ld0Vu
ZFBvcyA9IG5vZGUtPm9mZnNldEluQ2hhcmFjdGVycygpID8gbm9kZS0+bWF4Q2hhcmFjdGVyT2Zm
c2V0KCkgOiBub2RlLT5jb3VudENoaWxkTm9kZXMoKTsKLSAgICAgICAgICAgICAgICBzZWxlY3Rp
b25EYXRhLnNldFNlbGVjdGlvbkVuZFBvcyhuZXdFbmRQb3MpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICByZW5kZXJTdWJ0cmVlc01hcC5zZXQoJnJvb3QsIHNlbGVjdGlvbkRhdGEpOwot
ICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHVwZGF0ZVNlbGVjdGlvbkZvclN1YnRyZWVzKHJl
bmRlclN1YnRyZWVzTWFwLCBibG9ja1JlcGFpbnRNb2RlKTsKKyAgICBSZW5kZXJTdWJ0cmVlc01h
cCBzaW5nbGVTdWJ0cmVlTWFwOworICAgIHNpbmdsZVN1YnRyZWVNYXAuc2V0KHRoaXMsIFNlbGVj
dGlvblN1YnRyZWVEYXRhKHN0YXJ0LCBzdGFydFBvcywgZW5kLCBlbmRQb3MpKTsKKyAgICB1cGRh
dGVTZWxlY3Rpb25Gb3JTdWJ0cmVlcyhzaW5nbGVTdWJ0cmVlTWFwLCBibG9ja1JlcGFpbnRNb2Rl
KTsKIH0KIAogdm9pZCBSZW5kZXJWaWV3Ojp1cGRhdGVTZWxlY3Rpb25Gb3JTdWJ0cmVlcyhSZW5k
ZXJTdWJ0cmVlc01hcCYgcmVuZGVyU3VidHJlZXNNYXAsIFNlbGVjdGlvblJlcGFpbnRNb2RlIGJs
b2NrUmVwYWludE1vZGUpCkBAIC05NjIsOCArODM3LDYgQEAgdm9pZCBSZW5kZXJWaWV3Ojp1cGRh
dGVTZWxlY3Rpb25Gb3JTdWJ0cgogICAgICAgICBvbGRTZWxlY3Rpb25EYXRhTWFwLnNldCgmcm9v
dCwgV1RGTW92ZShvbGRTZWxlY3Rpb25EYXRhKSk7CiAKICAgICAgICAgcm9vdC5zZXRTZWxlY3Rp
b25EYXRhKHN1YnRyZWVTZWxlY3Rpb25JbmZvLnZhbHVlKTsKLSAgICAgICAgaWYgKGhhc1JlbmRl
ck5hbWVkRmxvd1RocmVhZHMoKSkKLSAgICAgICAgICAgIHJvb3QuYWRqdXN0Rm9yVmlzaWJsZVNl
bGVjdGlvbihkb2N1bWVudCgpKTsKICAgICB9CiAKICAgICAvLyBVcGRhdGUgc2VsZWN0aW9uIHN0
YXR1cyBmb3IgdGhlIG9iamVjdHMgaW5zaWRlIHRoZSBzZWxlY3Rpb24gc3VidHJlZXMuCkBAIC0x
MzMxLDU0ICsxMjA0LDIxIEBAIHZvaWQgUmVuZGVyVmlldzo6c2V0SXNJbldpbmRvdyhib29sIGlz
SW4KIHZvaWQgUmVuZGVyVmlldzo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OnN0
eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKLSAgICBpZiAoaGFzUmVuZGVyTmFtZWRGbG93
VGhyZWFkcygpKQotICAgICAgICBmbG93VGhyZWFkQ29udHJvbGxlcigpLnN0eWxlRGlkQ2hhbmdl
KCk7CiAKICAgICBmcmFtZVZpZXcoKS5zdHlsZURpZENoYW5nZSgpOwogfQogCi1ib29sIFJlbmRl
clZpZXc6Omhhc1JlbmRlck5hbWVkRmxvd1RocmVhZHMoKSBjb25zdAotewotICAgIHJldHVybiBt
X2Zsb3dUaHJlYWRDb250cm9sbGVyICYmIG1fZmxvd1RocmVhZENvbnRyb2xsZXItPmhhc1JlbmRl
ck5hbWVkRmxvd1RocmVhZHMoKTsKLX0KLQogYm9vbCBSZW5kZXJWaWV3OjpjaGVja1R3b1Bhc3NM
YXlvdXRGb3JBdXRvSGVpZ2h0UmVnaW9ucygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc1JlbmRl
ck5hbWVkRmxvd1RocmVhZHMoKSAmJiBtX2Zsb3dUaHJlYWRDb250cm9sbGVyLT5oYXNGbG93VGhy
ZWFkc1dpdGhBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKTsKLX0KLQotRmxvd1RocmVhZENvbnRy
b2xsZXImIFJlbmRlclZpZXc6OmZsb3dUaHJlYWRDb250cm9sbGVyKCkKLXsKLSAgICBpZiAoIW1f
Zmxvd1RocmVhZENvbnRyb2xsZXIpCi0gICAgICAgIG1fZmxvd1RocmVhZENvbnRyb2xsZXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPEZsb3dUaHJlYWRDb250cm9sbGVyPih0aGlzKTsKLQotICAgIHJldHVy
biAqbV9mbG93VGhyZWFkQ29udHJvbGxlcjsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQoY29uc3QgUmVu
ZGVyT2JqZWN0JiBvYmplY3QpCit2b2lkIFJlbmRlclZpZXc6OnB1c2hMYXlvdXRTdGF0ZUZvckN1
cnJlbnRGbG93VGhyZWFkKGNvbnN0IFJlbmRlck9iamVjdCYpCiB7Ci0gICAgaWYgKCFtX2Zsb3dU
aHJlYWRDb250cm9sbGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZW5kZXJGbG93VGhyZWFk
KiBjdXJyZW50Rmxvd1RocmVhZCA9IG9iamVjdC5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgaWYgKCFjdXJyZW50Rmxvd1RocmVhZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9s
YXlvdXRTdGF0ZS0+c2V0Q3VycmVudFJlbmRlckZsb3dUaHJlYWQoY3VycmVudEZsb3dUaHJlYWQp
OwotCi0gICAgY3VycmVudEZsb3dUaHJlYWQtPnB1c2hGbG93VGhyZWFkTGF5b3V0U3RhdGUob2Jq
ZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJWaWV3Ojpwb3BMYXlvdXRTdGF0ZUZvckN1cnJlbnRGbG93
VGhyZWFkKCkKIHsKLSAgICBpZiAoIW1fZmxvd1RocmVhZENvbnRyb2xsZXIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRGbG93VGhyZWFkID0gbV9sYXlv
dXRTdGF0ZS0+Y3VycmVudFJlbmRlckZsb3dUaHJlYWQoKTsKLSAgICBpZiAoIWN1cnJlbnRGbG93
VGhyZWFkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjdXJyZW50Rmxvd1RocmVhZC0+cG9wRmxv
d1RocmVhZExheW91dFN0YXRlKCk7CiB9CiAKIEltYWdlUXVhbGl0eUNvbnRyb2xsZXImIFJlbmRl
clZpZXc6OmltYWdlUXVhbGl0eUNvbnRyb2xsZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVmlldy5oCShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmxvd1RocmVhZENvbnRyb2xsZXI7CiBjbGFzcyBJ
bWFnZVF1YWxpdHlDb250cm9sbGVyOwogY2xhc3MgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOwogY2xh
c3MgUmVuZGVyUXVvdGU7CkBAIC0xODgsOSArMTg3LDcgQEAgcHVibGljOgogICAgIC8vIFJlbmRl
cmVyIHRoYXQgcGFpbnRzIHRoZSByb290IGJhY2tncm91bmQgaGFzIGJhY2tncm91bmQtaW1hZ2Vz
IHdoaWNoIGFsbCBoYXZlIGJhY2tncm91bmQtYXR0YWNobWVudDogZml4ZWQuCiAgICAgYm9vbCBy
b290QmFja2dyb3VuZElzRW50aXJlbHlGaXhlZCgpIGNvbnN0OwogICAgIAotICAgIGJvb2wgaGFz
UmVuZGVyTmFtZWRGbG93VGhyZWFkcygpIGNvbnN0OwogICAgIGJvb2wgY2hlY2tUd29QYXNzTGF5
b3V0Rm9yQXV0b0hlaWdodFJlZ2lvbnMoKSBjb25zdDsKLSAgICBGbG93VGhyZWFkQ29udHJvbGxl
ciYgZmxvd1RocmVhZENvbnRyb2xsZXIoKTsKIAogICAgIHZvaWQgc3R5bGVEaWRDaGFuZ2UoU3R5
bGVEaWZmZXJlbmNlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpIG92ZXJyaWRlOwogCkBA
IC0zMTAsNyArMzA3LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbGF5b3V0Q29udGVudChjb25z
dCBMYXlvdXRTdGF0ZSYpOwogICAgIHZvaWQgbGF5b3V0Q29udGVudEluQXV0b0xvZ2ljYWxIZWln
aHRSZWdpb25zKGNvbnN0IExheW91dFN0YXRlJik7Ci0gICAgdm9pZCBsYXlvdXRDb250ZW50VG9D
b21wdXRlT3ZlcmZsb3dJblJlZ2lvbnMoY29uc3QgTGF5b3V0U3RhdGUmKTsKICNpZm5kZWYgTkRF
QlVHCiAgICAgdm9pZCBjaGVja0xheW91dFN0YXRlKGNvbnN0IExheW91dFN0YXRlJik7CiAjZW5k
aWYKQEAgLTMyNSw3ICszMjEsNiBAQCBwcml2YXRlOgogCiAgICAgYm9vbCBpc1Njcm9sbGFibGVP
clJ1YmJlcmJhbmRhYmxlQm94KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNwbGl0U2Vs
ZWN0aW9uQmV0d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRlck9iamVjdCogc3RhcnRSZW5kZXJlciwg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRQb3MsIGNvbnN0IFJlbmRlck9iamVjdCogZW5k
UmVuZGVyZXIsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IGVuZFBvcywgU2VsZWN0aW9uUmVwYWlu
dE1vZGUgYmxvY2tSZXBhaW50TW9kZSk7CiAgICAgdm9pZCBjbGVhclN1YnRyZWVTZWxlY3Rpb24o
Y29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSwgT2xkU2Vs
ZWN0aW9uRGF0YSYpIGNvbnN0OwogICAgIHZvaWQgdXBkYXRlU2VsZWN0aW9uRm9yU3VidHJlZXMo
UmVuZGVyU3VidHJlZXNNYXAmLCBTZWxlY3Rpb25SZXBhaW50TW9kZSk7CiAgICAgdm9pZCBhcHBs
eVN1YnRyZWVTZWxlY3Rpb24oY29uc3QgU2VsZWN0aW9uU3VidHJlZVJvb3QmLCBTZWxlY3Rpb25S
ZXBhaW50TW9kZSwgY29uc3QgT2xkU2VsZWN0aW9uRGF0YSYpOwpAQCAtMzcwLDcgKzM2NSw2IEBA
IHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPExheW91dFN0YXRlPiBtX2xheW91dFN0YXRl
OwogICAgIHVuc2lnbmVkIG1fbGF5b3V0U3RhdGVEaXNhYmxlQ291bnQgeyAwIH07CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlckxheWVyQ29tcG9zaXRvcj4gbV9jb21wb3NpdG9yOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxGbG93VGhyZWFkQ29udHJvbGxlcj4gbV9mbG93VGhyZWFkQ29udHJvbGxl
cjsKIAogICAgIGJvb2wgbV9oYXNRdW90ZXNOZWVkaW5nVXBkYXRlIHsgZmFsc2UgfTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3Qu
Y3BwCShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0
aW9uU3VidHJlZVJvb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw1MCArNDIsNCBAQCBTZWxl
Y3Rpb25TdWJ0cmVlUm9vdDo6U2VsZWN0aW9uU3VidHJlZVJvCiB7CiB9CiAKLXZvaWQgU2VsZWN0
aW9uU3VidHJlZVJvb3Q6OmFkanVzdEZvclZpc2libGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3Vt
ZW50KQotewotICAgIGlmIChtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkNsZWFyKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENyZWF0ZSBhIHJhbmdlIGJhc2VkIG9uIHRoZSBj
YWNoZWQgZW5kIHBvaW50cwotICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtX3NlbGVjdGlvblN1
YnRyZWVEYXRhLnNlbGVjdGlvblN0YXJ0UG9zKCkudmFsdWUoKTsKLSAgICBhdXRvIHNlbGVjdGlv
bkVuZCA9IG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKTsK
LSAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KG1fc2VsZWN0aW9uU3VidHJlZURhdGEuc2VsZWN0aW9uU3RhcnQoKS0+bm9kZSgpLCBzZWxlY3Rp
b25TdGFydCk7Ci0gICAgUG9zaXRpb24gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24obV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmQoKS0+bm9kZSgpLCBz
ZWxlY3Rpb25FbmQpOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
ZG9jdW1lbnQsIHN0YXJ0UG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIGVuZFBv
c2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbigqcmFuZ2UpOwotICAgIFBvc2l0aW9uIHN0YXJ0UG9zID0gc2VsZWN0aW9uLnN0
YXJ0KCk7Ci0gICAgUG9zaXRpb24gY2FuZGlkYXRlID0gc3RhcnRQb3MuZG93bnN0cmVhbSgpOwot
ICAgIGlmIChjYW5kaWRhdGUuaXNDYW5kaWRhdGUoKSkKLSAgICAgICAgc3RhcnRQb3MgPSBjYW5k
aWRhdGU7Ci0KLSAgICBQb3NpdGlvbiBlbmRQb3MgPSBzZWxlY3Rpb24uZW5kKCk7Ci0gICAgY2Fu
ZGlkYXRlID0gZW5kUG9zLnVwc3RyZWFtKCk7Ci0gICAgaWYgKGNhbmRpZGF0ZS5pc0NhbmRpZGF0
ZSgpKQotICAgICAgICBlbmRQb3MgPSBjYW5kaWRhdGU7Ci0KLSAgICBtX3NlbGVjdGlvblN1YnRy
ZWVEYXRhLmNsZWFyU2VsZWN0aW9uKCk7Ci0KLSAgICBpZiAoc3RhcnRQb3MuaXNOdWxsKCkgfHwg
ZW5kUG9zLmlzTnVsbCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpID09IHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5mbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKCkgIT0gZW5kUG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVy
KCktPmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCZzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zZWxlY3Rpb25Sb290
KCkgIT0gdGhpcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBuZXdTdGFydFBvcyA9IHN0
YXJ0UG9zLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgYXV0byBuZXdFbmRQb3MgPSBl
bmRQb3MuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICBBU1NFUlQobmV3U3RhcnRQb3Mg
Pj0gMCAmJiBuZXdFbmRQb3MgPj0gMCk7Ci0gICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRT
ZWxlY3Rpb25TdGFydChzdGFydFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKTsKLSAg
ICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlvblN0YXJ0UG9zKG5ld1N0YXJ0UG9z
KTsKLSAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNldFNlbGVjdGlvbkVuZChlbmRQb3MuZGVw
cmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSk7Ci0gICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5z
ZXRTZWxlY3Rpb25FbmRQb3MobmV3RW5kUG9zKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVS
b290LmgJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxl
Y3Rpb25TdWJ0cmVlUm9vdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDYgQEAgcHVi
bGljOgogICAgIGNvbnN0IFNlbGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25EYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YTsgfQogCiAgICAgdm9pZCBzZXRTZWxl
Y3Rpb25EYXRhKGNvbnN0IFNlbGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25TdWJ0cmVlRGF0
YSkgeyBtX3NlbGVjdGlvblN1YnRyZWVEYXRhID0gc2VsZWN0aW9uU3VidHJlZURhdGE7IH0KLSAg
ICB2b2lkIGFkanVzdEZvclZpc2libGVTZWxlY3Rpb24oRG9jdW1lbnQmKTsKIAogcHJpdmF0ZToK
ICAgICBTZWxlY3Rpb25TdWJ0cmVlRGF0YSBtX3NlbGVjdGlvblN1YnRyZWVEYXRhOwo=
</data>
<flag name="review"
          id="341310"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321318</attachid>
            <date>2017-09-20 08:07:19 -0700</date>
            <delta_ts>2017-09-20 08:37:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>named-flow-removal-rendernamedflowthread-2.patch</filename>
            <type>text/plain</type>
            <size>148859</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNy0wOS0yMCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFJlbmRlck5hbWVk
Rmxvd1RocmVhZCBhbmQgRmxvd1RocmVhZENvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzIyOQorCisgICAgICAgIFJldmlld2VkIGJ5
IEFuZHJlYXMgS2xpbmcuCisKKyAgICAgICAgR2V0IHJpZCBvZiBzb21lIHBhcnRzIG9mIHRoZSBy
ZW5kZXJpbmcgY29kZSBmb3IgQ1NTIFJlZ2lvbnMuCisKKyAgICAgICAgVGhlIGZlYXR1cmUgaXMg
ZGlzYWJsZWQsIG5vIGZ1bmN0aW9uYWwgY2hhbmdlcy4KKworICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiByZW5kZXJpbmcvRmxvd1RocmVhZENv
bnRyb2xsZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9GbG93VGhyZWFkQ29u
dHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6Y2FuQ29tcHV0ZVJlZ2lvblJhbmdlRm9yQm94KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpjaGlsZEJveElzVW5zcGxpdHRhYmxlRm9yRnJhZ21lbnRhdGlvbiBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JD
aGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QmVmb3JlQnJl
YWspOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjphcHBseUFmdGVyQnJlYWsp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsSGVpZ2h0Rm9yQ2hp
bGRGb3JGcmFnbWVudGF0aW9uIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6bGF5
b3V0UnVuc0FuZEZsb2F0c0luUmFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3gu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpib3JkZXJCb3hSZWN0SW5SZWdpb24g
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpzY3JvbGwpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpyZW5kZXJCb3hSZWdpb25JbmZvIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJveDo6Y29tcHV0ZVJlcGxhY2VkTG9naWNhbEhlaWdodFVzaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoRm9yUG9zaXRpb25lZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6
OmNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxIZWlnaHRGb3JQb3NpdGlvbmVkIGNvbnN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQm94TW9kZWxPYmplY3Q6OmFkanVzdGVkUG9zaXRpb25SZWxhdGl2ZVRvT2Zmc2V0
UGFyZW50IGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50Ojp3aWxsQmVEZXN0cm95ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6aG92ZXJBbmNlc3RvciBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyRmxvd1RocmVhZDo6YWRqdXN0ZWRQb3NpdGlvblJlbGF0aXZlVG9PZmZzZXRQYXJlbnQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6aW5jcmVtZW50QXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6
OmRlY3JlbWVudEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zT3ZlcmZsb3dGcm9tQ2hpbGQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5s
aW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW5lQm94ZXMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRMYXll
ckNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6cGFpbnRGaXhlZExheWVyc0luTmFt
ZWRGbG93cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6aGl0VGVz
dEZpeGVkTGF5ZXJzSW5OYW1lZEZsb3dzKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29t
cG9zaXRpbmdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9y
Ojpjb21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG9zaXRpbmdSZXF1
aXJlbWVudHNGb3JOYW1lZEZsb3dGaXhlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlYnVpbGRDb21wb3NpdGluZ0xheWVyVHJlZUZvck5hbWVk
Rmxvd0ZpeGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpjaGVja1JlZ2lv
blN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OjpuYW1l
ZEZsb3dUaHJlYWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJO
YW1lZEZsb3dGcmFnbWVudC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dU
aHJlYWQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2VsZWN0aW9uUm9vdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om9mZnNldFBhcmVudCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1JlbmRlckdyaWQgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0Ojppc1JlbmRlck5hbWVkRmxvd1RocmVhZCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSZWdpb246OlJlbmRlclJlZ2lvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJSZWdpb246OmF0dGFjaFJlZ2lvbik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lv
bi5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpwYXJlbnROYW1lZEZsb3dUaHJl
YWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OndyaXRlUmVuZGVyUmVnaW9uTGlzdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjp3cml0
ZVJlbmRlck5hbWVkRmxvd1RocmVhZHMpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmxheW91dENvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6bGF5b3V0Q29udGVudEluQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6OmxheW91
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZWxlY3Rpb25Cb3VuZHMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cmVwYWludFNlbGVjdGlvbiBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVmlldzo6dXBkYXRlU2VsZWN0aW9uRm9yU3VidHJlZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVmlldzo6Y2hlY2tUd29QYXNzTGF5b3V0Rm9yQXV0b0hlaWdodFJlZ2lvbnMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9yQ3Vy
cmVudEZsb3dUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6cG9wTGF5b3V0
U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpsYXlvdXRDb250ZW50VG9Db21wdXRlT3ZlcmZsb3dJblJlZ2lvbnMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6c3BsaXRTZWxlY3Rpb25CZXR3ZWVuU3VidHJlZXMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6aGFzUmVuZGVyTmFtZWRG
bG93VGhyZWFkcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3
OjpmbG93VGhyZWFkQ29udHJvbGxlcik6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OmFkanVzdEZvclZpc2li
bGVTZWxlY3Rpb24pOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9TZWxlY3Rpb25TdWJ0
cmVlUm9vdC5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uU3VidHJlZVJvb3Q6OnNldFNl
bGVjdGlvbkRhdGEpOgorCiAyMDE3LTA5LTIwICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW1vdmUgRE9NIGFuZCBzdHlsaW5nIHN1cHBvcnQgZm9yIENTUyBS
ZWdpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjIyMjU5KQorKysgU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTI2NDUsNyArMjY0
NSw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJpbmcvRmxleGlibGVCb3hBbGdv
cml0aG0uY3BwCiAgICAgcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCiAgICAgcmVuZGVy
aW5nL0Zsb2F0aW5nT2JqZWN0cy5jcHAKLSAgICByZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xs
ZXIuY3BwCiAgICAgcmVuZGVyaW5nL0dyaWQuY3BwCiAgICAgcmVuZGVyaW5nL0dyaWRUcmFja1Np
emluZ0FsZ29yaXRobS5jcHAKICAgICByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmNwcApAQCAt
MjcxMCw3ICsyNzA5LDYgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHJlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNldC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIuY3BwCiAgICAgcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmNwcAotICAgIHJlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCiAgICAgcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAKICAgICByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCiAg
ICAgcmVuZGVyaW5nL1JlbmRlclF1b3RlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjIyMjU5KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC03MTEsNyArNzExLDYgQEAKIAkJMUEzNTg2RTExNTI2NEY5NTAwMjJBNjU5IC8q
IFNWR0FuaW1hdGVkSW50ZWdlck9wdGlvbmFsSW50ZWdlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUU2MjNDRTE1MUY3MkE2MDAzNkUyRjQgLyog
U1ZHQW5pbWF0ZWRJbnRlZ2VyT3B0aW9uYWxJbnRlZ2VyLmNwcCAqLzsgfTsKIAkJMUEzNzYzNkIx
QTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTM3NjM2OTFBMkU2OEJCMDA5
QTdFRTIgLyogU3RvcmFnZU5hbWVzcGFjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMUEzNzYzNkMx
QTJFNjhCQjAwOUE3RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEzNzYzNkExQTJFNjhCQjAwOUE3
RUUyIC8qIFN0b3JhZ2VOYW1lc3BhY2VQcm92aWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTFBM0ZGOUMzMTUyNjUzNTkwMDIyODhBMSAvKiBS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQkM4NUYyM0UxNTE5MTg3MzAwQkMxN0JFIC8qIFJlbmRlck5hbWVkRmxv
d1RocmVhZC5jcHAgKi87IH07CiAJCTFBNDgzMkIzMUE5NTNCQTYwMDhCNERGRSAvKiBMb2NhbGl6
ZWRTdHJpbmdzQ29jb2EubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxQTQ4MzJCMjFBOTUzQkE2MDA4QjRERkUgLyogTG9jYWxpemVkU3RyaW5nc0NvY29h
Lm1tICovOyB9OwogCQkxQTQ5NEJGQTBBMTIyRjQ0MDBGREFGQzEgLyogSlNIVE1MRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTQ5NEJG
ODBBMTIyRjQ0MDBGREFGQzEgLyogSlNIVE1MRWxlbWVudC5jcHAgKi87IH07CiAJCTFBNDk0QkZC
MEExMjJGNDQwMEZEQUZDMSAvKiBKU0hUTUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTQ5NEJGOTBBMTIyRjQ0MDBGREFGQzEgLyogSlNI
VE1MRWxlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01OTE4LDcgKzU5MTcsNiBAQAogCQlCQzgyNDMyQTBEMENFOEEyMDA0NjBDOEYgLyog
SlNTUUxUcmFuc2FjdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkM4MjQzMjYwRDBDRThBMjAwNDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCAq
LzsgfTsKIAkJQkM4MjQzRTgwRDBDRkQ3NTAwNDYwQzhGIC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDODI0M0U2MEQw
Q0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5jcHAgKi87IH07CiAJCUJDODI0M0U5MEQw
Q0ZENzUwMDQ2MEM4RiAvKiBXaW5kb3dGZWF0dXJlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4MjQzRTcwRDBDRkQ3NTAwNDYwQzhGIC8qIFdpbmRv
d0ZlYXR1cmVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJQkM4NUYyM0QxNTE5MTVFMDAwQkMxN0JFIC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4NUYyM0Mx
NTE5MTVFMDAwQkMxN0JFIC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5oICovOyB9OwogCQlCQzhB
RTM0RTEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM4QUUzNEMxMkVBMDk2QTAwRUIzQUU2
IC8qIFNjcm9sbGFibGVBcmVhLmNwcCAqLzsgfTsKIAkJQkM4QUUzNEYxMkVBMDk2QTAwRUIzQUU2
IC8qIFNjcm9sbGFibGVBcmVhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzhBRTM0RDEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzhCODUz
RTBFN0M3RjExMDBBQjY5ODQgLyogU2Nyb2xsYmFyVGhlbWVNYWMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOEI4NTNDMEU3QzdGMTEwMEFCNjk4NCAv
KiBTY3JvbGxiYXJUaGVtZU1hYy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC02NTg4LDggKzY1ODYsNiBAQAogCQlENkY3OTYwRDE2NkZGRUNFMDA3
NkREMTggLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2Rjc5NjBDMTY2RkZFQ0UwMDc2REQxOCAv
KiBKU0hUTUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwICovOyB9OwogCQlENzBBRDY1NzEzRTEz
NDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3MEFENjU1MTNFMTM0MkIwMDVCNTBCNCAvKiBSZW5kZXJS
ZWdpb24uY3BwICovOyB9OwogCQlENzBBRDY1ODEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVn
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzBB
RDY1NjEzRTEzNDJCMDA1QjUwQjQgLyogUmVuZGVyUmVnaW9uLmggKi87IH07Ci0JCUQ3MkY2RDc5
MTUzMTU5QTMwMDFFRTQ0RSAvKiBGbG93VGhyZWFkQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENzJGNkQ3NzE1MzE1OUEzMDAxRUU0
NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwICovOyB9OwotCQlENzJGNkQ3QTE1MzE1OUEz
MDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ3MkY2RDc4MTUzMTU5QTMwMDFFRTQ0RSAvKiBGbG93
VGhyZWFkQ29udHJvbGxlci5oICovOyB9OwogCQlEOEI2MTUyRjEwMzI0OTUxMDBDODU1NEEgLyog
Q29va2llLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
OEI2MTUyRTEwMzI0OTUxMDBDODU1NEEgLyogQ29va2llLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJREFFRDIwMzAxNkYyNDQyQjAwNzBFQzBGIC8q
IFBhZ2VDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IERBQUNCM0Q5MTZGMjQxNjQwMDY2NjEzNSAvKiBQYWdlQ29uc29sZUNsaWVu
dC5jcHAgKi87IH07CiAJCURBRUQyMDMxMTZGMjQ0NDgwMDcwRUMwRiAvKiBQYWdlQ29uc29sZUNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREFB
Q0IzREExNkYyNDE2NDAwNjY2MTM1IC8qIFBhZ2VDb25zb2xlQ2xpZW50LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NjEzLDggKzE0NjA5LDYg
QEAKIAkJQkM4MjQzMjYwRDBDRThBMjAwNDYwQzhGIC8qIEpTU1FMVHJhbnNhY3Rpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTUUxUcmFuc2FjdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNjBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93
RmVhdHVyZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2luZG93
RmVhdHVyZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzgyNDNFNzBEMENG
RDc1MDA0NjBDOEYgLyogV2luZG93RmVhdHVyZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2luZG93RmVhdHVyZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QkM4NUYyM0MxNTE5MTVFMDAwQkMxN0JFIC8qIFJlbmRlck5hbWVkRmxvd1RocmVhZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM4NUYyM0UxNTE5MTg3MzAwQkMxN0JFIC8qIFJl
bmRlck5hbWVkRmxvd1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzhBRTM0QzEyRUEwOTZBMDBFQjNBRTYgLyogU2Nyb2xsYWJsZUFyZWEuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2Nyb2xsYWJsZUFyZWEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzhBRTM0RDEyRUEwOTZBMDBFQjNBRTYgLyogU2Ny
b2xsYWJsZUFyZWEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Nyb2xsYWJs
ZUFyZWEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4Qjg1M0MwRTdDN0YxMTAw
QUI2OTg0IC8qIFNjcm9sbGJhclRoZW1lTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcm9sbGJhclRoZW1lTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xNTM3Nyw4ICsxNTM3MSw2IEBACiAJCUQ2Rjc5NjBDMTY2RkZFQ0UwMDc2REQxOCAvKiBKU0hU
TUxUZW1wbGF0ZUVsZW1lbnRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNIVE1MVGVtcGxhdGVFbGVtZW50Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRDcwQUQ2NTUxM0UxMzQyQjAwNUI1MEI0IC8qIFJlbmRlclJlZ2lvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJSZWdpb24uY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENzBBRDY1NjEzRTEzNDJCMDA1QjUwQjQg
LyogUmVuZGVyUmVnaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
clJlZ2lvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlENzJGNkQ3NzE1MzE1OUEz
MDAxRUU0NEUgLyogRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQlENzJGNkQ3ODE1MzE1OUEzMDAxRUU0NEUgLyogRmxvd1RocmVhZENv
bnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRmxvd1RocmVhZENv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDhCNjE1MkUxMDMyNDk1
MTAwQzg1NTRBIC8qIENvb2tpZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b29raWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREFBQ0IzRDkxNkYyNDE2NDAw
NjY2MTM1IC8qIFBhZ2VDb25zb2xlQ2xpZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBhZ2VDb25zb2xlQ2xpZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJREFBQ0IzREExNkYyNDE2NDAwNjY2MTM1IC8qIFBhZ2VDb25zb2xlQ2xpZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VDb25zb2xlQ2xpZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTg3Miw4ICsyNTg2NCw2IEBACiAJCQkJOTRE
RDc5NzMxRTU0RTNBMjAwNThGQjgwIC8qIEZsZXhpYmxlQm94QWxnb3JpdGhtLmggKi8sCiAJCQkJ
OUE1MjhFODExN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5jcHAgKi8sCiAJCQkJ
OUE1MjhFODIxN0Q3RjUyRjAwQUE5NTE4IC8qIEZsb2F0aW5nT2JqZWN0cy5oICovLAotCQkJCUQ3
MkY2RDc3MTUzMTU5QTMwMDFFRTQ0RSAvKiBGbG93VGhyZWFkQ29udHJvbGxlci5jcHAgKi8sCi0J
CQkJRDcyRjZENzgxNTMxNTlBMzAwMUVFNDRFIC8qIEZsb3dUaHJlYWRDb250cm9sbGVyLmggKi8s
CiAJCQkJOTM1QzQ3NzQwOUFDNEQ4RDAwQTZBQUI0IC8qIEdhcFJlY3RzLmggKi8sCiAJCQkJRTEx
MkY0NzAxRTNBODVGMjAwRDZDREZEIC8qIEdyaWQuY3BwICovLAogCQkJCUUxMTJGNDZGMUUzQTg1
RDgwMEQ2Q0RGRCAvKiBHcmlkLmggKi8sCkBAIC0yNjAxNCw4ICsyNjAwNCw2IEBACiAJCQkJQkMx
QTdEOTYxOEZDQjVCMDAwNDIxODc5IC8qIFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9s
ZGVyLmggKi8sCiAJCQkJOEFDODIyRkExODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50LmNwcCAqLywKIAkJCQk4QUM4MjJGQjE4MEZDMDMzMDBGQjY0RDUgLyogUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuaCAqLywKLQkJCQlCQzg1RjIzRTE1MTkxODczMDBCQzE3QkUgLyog
UmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcCAqLywKLQkJCQlCQzg1RjIzQzE1MTkxNUUwMDBCQzE3
QkUgLyogUmVuZGVyTmFtZWRGbG93VGhyZWFkLmggKi8sCiAJCQkJQkNFQTQ4NDAwOTdEOTMwMjAw
OTRDOUU0IC8qIFJlbmRlck9iamVjdC5jcHAgKi8sCiAJCQkJQkNFQTQ4NDEwOTdEOTMwMjAwOTRD
OUU0IC8qIFJlbmRlck9iamVjdC5oICovLAogCQkJCTgzODg2NzM0MUQxM0JBNTkwMDM2OTdEMCAv
KiBSZW5kZXJPYmplY3RFbnVtcy5oICovLApAQCAtMjc5MDgsNyArMjc4OTYsNiBAQAogCQkJCTZF
MEU1NjlDMTgzQkZGRTYwMEUwRThENSAvKiBGbG9hdFJvdW5kZWRSZWN0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCMjc1MzU2RDBCMDUzODE0MDAyQ0U2NEYgLyogRmxvYXRTaXplLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1OENEMzVDQjE4RUI0QzM5MDBCOUYzQUMgLyogRmxvYXRTaXplSGFzaC5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJRDcyRjZEN0ExNTMxNTlBMzAwMUVFNDRFIC8qIEZsb3dUaHJlYWRD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDk5M0JFNjBCMkYyQjFDMDA1MDQ5N0Yg
LyogRm9jdXNDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNjIyODc4NDBCNERCMzIy
MDAwQzM0REYgLyogRm9jdXNEaXJlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUI2RDlEMjM1
MTRFQUJEMjYwMDkwRDc1RSAvKiBGb2N1c0V2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI5NzU3
LDcgKzI5NzQ0LDYgQEAKIAkJCQlCQ0UzMkI5QzE1MTdDMEIyMDBGNTQyRUMgLyogUmVuZGVyTXVs
dGlDb2x1bW5TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMUE3RDk4MThGQ0I1QjAwMDQyMTg3
OSAvKiBSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOEFDODIyRkQxODBGQzAzMzAwRkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LmggaW4gSGVhZGVycyAqLywKLQkJCQlCQzg1RjIzRDE1MTkxNUUwMDBCQzE3QkUgLyogUmVuZGVy
TmFtZWRGbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VBNDg4MDA5N0Q5MzAyMDA5
NEM5RTQgLyogUmVuZGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Mzg4NjczNTFEMTNC
QTVGMDAzNjk3RDAgLyogUmVuZGVyT2JqZWN0RW51bXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
RkE5MzA4MTAzMzMxOTMwMDdCMjVEMSAvKiBSZW5kZXJPdmVyZmxvdy5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMTk1Myw3ICszMTkzOSw2IEBACiAJCQkJQjI3NTM1NkMwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0U2l6ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjc1MzU1QjBCMDUzODE0MDAyQ0U2
NEYgLyogRmxvYXRTaXplQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjI3NTM1N0EwQjA1Mzgx
NDAwMkNFNjRGIC8qIEZsb2F0U2l6ZU1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCUQ3MkY2RDc5
MTUzMTU5QTMwMDFFRTQ0RSAvKiBGbG93VGhyZWFkQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDk5M0JFNTBCMkYyQjFDMDA1MDQ5N0YgLyogRm9jdXNDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUI2RDlEMjM2MTRFQUJEMjYwMDkwRDc1RSAvKiBGb2N1c0V2ZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQzNEQTY0MEQwMDZDRDYwMEVGNkYyNiAvKiBGb250
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzM3MzAsNyArMzM3MTUsNiBAQAogCQkJCUJDRTMyQjlF
MTUxN0MyMjcwMEY1NDJFQyAvKiBSZW5kZXJNdWx0aUNvbHVtblNldC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCQzFBN0Q5NzE4RkNCNUIwMDA0MjE4NzkgLyogUmVuZGVyTXVsdGlDb2x1bW5TcGFu
bmVyUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOEFDODIyRkMxODBGQzAzMzAw
RkI2NEQ1IC8qIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTFBM0ZGOUMzMTUyNjUzNTkwMDIyODhBMSAvKiBSZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNFQTQ4N0YwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlck9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNDNCRjU5QzExNDkyOTI4MDBDNjQzQ0EgLyogUmVu
ZGVyUHJvZ3Jlc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUE1NzRGMjQxMzFEQjkzOTAwNDcx
Qjg4IC8qIFJlbmRlclF1b3RlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0Zsb3dUaHJlYWRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAy
MjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIu
Y3BwCShub25leGlzdGVudCkKQEAgLTEsMjgzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAg
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lciBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZsb3dUaHJlYWRDb250cm9s
bGVyLmgiCi0KLSNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCi0jaW5jbHVkZSAiUmVuZGVy
TGF5ZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKLSNpbmNsdWRlICJT
dHlsZUluaGVyaXRlZERhdGEuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GbG93VGhyZWFkQ29udHJvbGxlcjo6Rmxvd1RocmVh
ZENvbnRyb2xsZXIoUmVuZGVyVmlldyogdmlldykKLSAgICA6IG1fdmlldyh2aWV3KQotICAgICwg
bV9pc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGlydHkoZmFsc2UpCi0gICAgLCBtX2Zsb3dU
aHJlYWRzV2l0aEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygwKQotewotfQotCi1GbG93VGhyZWFk
Q29udHJvbGxlcjo6fkZsb3dUaHJlYWRDb250cm9sbGVyKCkKLXsKLX0KLQotdm9pZCBGbG93VGhy
ZWFkQ29udHJvbGxlcjo6c3R5bGVEaWRDaGFuZ2UoKQotewotICAgIGF1dG8mIHZpZXdTdHlsZSA9
IG1fdmlldy0+c3R5bGUoKTsKLSAgICBmb3IgKGF1dG8mIGZsb3dSZW5kZXJlciA6ICptX3JlbmRl
ck5hbWVkRmxvd1RocmVhZExpc3QpCi0gICAgICAgIGZsb3dSZW5kZXJlci0+c2V0U3R5bGUoUmVu
ZGVyRmxvd1RocmVhZDo6Y3JlYXRlRmxvd1RocmVhZFN0eWxlKCZ2aWV3U3R5bGUpKTsKLX0KLQot
dm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6bGF5b3V0UmVuZGVyTmFtZWRGbG93VGhyZWFkcygp
Ci17Ci0gICAgdXBkYXRlRmxvd1RocmVhZHNDaGFpbklmTmVjZXNzYXJ5KCk7Ci0gICAgZm9yIChh
dXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KQotICAgICAg
ICBmbG93UmVuZGVyZXItPmxheW91dElmTmVlZGVkKCk7Ci19Ci0KLXZvaWQgRmxvd1RocmVhZENv
bnRyb2xsZXI6OnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQoRWxlbWVudCYgY29udGVu
dEVsZW1lbnQsIFJlbmRlck5hbWVkRmxvd1RocmVhZCYgbmFtZWRGbG93KQotewotICAgIEFTU0VS
VCghbV9tYXBOYW1lZEZsb3dDb250ZW50RWxlbWVudC5jb250YWlucygmY29udGVudEVsZW1lbnQp
KTsKLSAgICBBU1NFUlQoIW5hbWVkRmxvdy5oYXNDb250ZW50RWxlbWVudChjb250ZW50RWxlbWVu
dCkpOwotICAgIG1fbWFwTmFtZWRGbG93Q29udGVudEVsZW1lbnQuYWRkKCZjb250ZW50RWxlbWVu
dCwgJm5hbWVkRmxvdyk7Ci0gICAgbmFtZWRGbG93LnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVs
ZW1lbnQoY29udGVudEVsZW1lbnQpOwotfQotCi12b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1
bnJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQoRWxlbWVudCYgY29udGVudEVsZW1lbnQp
Ci17Ci0gICAgYXV0byBpdCA9IG1fbWFwTmFtZWRGbG93Q29udGVudEVsZW1lbnQuZmluZCgmY29u
dGVudEVsZW1lbnQpOwotICAgIEFTU0VSVChpdCAhPSBtX21hcE5hbWVkRmxvd0NvbnRlbnRFbGVt
ZW50LmVuZCgpKTsKLSAgICBBU1NFUlQoaXQtPnZhbHVlKTsKLSAgICBBU1NFUlQoaXQtPnZhbHVl
LT5oYXNDb250ZW50RWxlbWVudChjb250ZW50RWxlbWVudCkpOwotICAgIGl0LT52YWx1ZS0+dW5y
ZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KGNvbnRlbnRFbGVtZW50KTsKLSAgICBtX21h
cE5hbWVkRmxvd0NvbnRlbnRFbGVtZW50LnJlbW92ZSgmY29udGVudEVsZW1lbnQpOwotfQotCi12
b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc0NoYWluSWZOZWNlc3Nh
cnkoKQotewotICAgIEFTU0VSVChtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QpOwotICAgIEFT
U0VSVChpc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCgpKTsKLQotICAg
IC8vIFJlbW92ZSB0aGUgbGVmdC1vdmVyIGZsb3cgdGhyZWFkcy4KLSAgICBSZW5kZXJOYW1lZEZs
b3dUaHJlYWRMaXN0IHRvUmVtb3ZlTGlzdDsKLSAgICBmb3IgKGF1dG8mIGZsb3dSZW5kZXJlciA6
ICptX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QpIHsKLSAgICAgICAgaWYgKGZsb3dSZW5kZXJl
ci0+aXNNYXJrZWRGb3JEZXN0cnVjdGlvbigpKQotICAgICAgICAgICAgdG9SZW1vdmVMaXN0LmFk
ZChmbG93UmVuZGVyZXIpOwotICAgIH0KLQotICAgIGlmICh0b1JlbW92ZUxpc3Quc2l6ZSgpID4g
MCkKLSAgICAgICAgc2V0SXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRPcmRlckRpcnR5KHRydWUpOwot
Ci0gICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIgOiB0b1JlbW92ZUxpc3QpIHsKLSAgICAgICAg
bV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0LT5yZW1vdmUoZmxvd1JlbmRlcmVyKTsKLSAgICAg
ICAgZmxvd1JlbmRlcmVyLT5kZXN0cm95KCk7Ci0gICAgfQotCi0gICAgaWYgKGlzUmVuZGVyTmFt
ZWRGbG93VGhyZWFkT3JkZXJEaXJ0eSgpKSB7Ci0gICAgICAgIC8vIEFycmFuZ2UgdGhlIHRocmVh
ZCBsaXN0IGFjY29yZGluZyB0byBkZXBlbmRlbmNpZXMuCi0gICAgICAgIFJlbmRlck5hbWVkRmxv
d1RocmVhZExpc3Qgc29ydGVkTGlzdDsKLSAgICAgICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIg
OiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KSB7Ci0gICAgICAgICAgICBpZiAoc29ydGVk
TGlzdC5jb250YWlucyhmbG93UmVuZGVyZXIpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgZmxvd1JlbmRlcmVyLT5wdXNoRGVwZW5kZW5jaWVzKHNvcnRlZExpc3QpOwot
ICAgICAgICAgICAgc29ydGVkTGlzdC5hZGQoZmxvd1JlbmRlcmVyKTsKLSAgICAgICAgfQotICAg
ICAgICBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QtPnN3YXAoc29ydGVkTGlzdCk7Ci0gICAg
ICAgIHNldElzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eShmYWxzZSk7Ci0gICAgfQot
fQotCi1ib29sIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc05lZWRpbmdM
YXlvdXQoKQotewotICAgIGJvb2wgbmVlZHNUd29QYXNzTGF5b3V0ID0gZmFsc2U7Ci0KLSAgICBm
b3IgKGF1dG8mIGZsb3dSZW5kZXJlciA6ICptX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QpIHsK
LSAgICAgICAgQVNTRVJUKCFmbG93UmVuZGVyZXItPm5lZWRzVHdvUGhhc2VzTGF5b3V0KCkpOwot
ICAgICAgICBBU1NFUlQoZmxvd1JlbmRlcmVyLT5pbk1lYXN1cmVDb250ZW50TGF5b3V0UGhhc2Uo
KSk7Ci0gICAgICAgIGlmIChmbG93UmVuZGVyZXItPm5lZWRzTGF5b3V0KCkgJiYgZmxvd1JlbmRl
cmVyLT5oYXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKSkKLSAgICAgICAgICAgIG5lZWRzVHdv
UGFzc0xheW91dCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKG5lZWRzVHdvUGFzc0xheW91dCkK
LSAgICAgICAgcmVzZXRGbG93VGhyZWFkc1dpdGhBdXRvSGVpZ2h0UmVnaW9ucygpOwotCi0gICAg
cmV0dXJuIG5lZWRzVHdvUGFzc0xheW91dDsKLX0KLQotYm9vbCBGbG93VGhyZWFkQ29udHJvbGxl
cjo6dXBkYXRlRmxvd1RocmVhZHNOZWVkaW5nVHdvU3RlcExheW91dCgpCi17Ci0gICAgYm9vbCBu
ZWVkc1R3b1Bhc3NMYXlvdXQgPSBmYWxzZTsKLQotICAgIGZvciAoYXV0byYgZmxvd1JlbmRlcmVy
IDogKm1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdCkgewotICAgICAgICBpZiAoZmxvd1JlbmRl
cmVyLT5uZWVkc1R3b1BoYXNlc0xheW91dCgpKSB7Ci0gICAgICAgICAgICBuZWVkc1R3b1Bhc3NM
YXlvdXQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAobmVlZHNUd29QYXNzTGF5b3V0KQotICAgICAgICByZXNldEZsb3dUaHJlYWRzV2l0aEF1
dG9IZWlnaHRSZWdpb25zKCk7Ci0KLSAgICByZXR1cm4gbmVlZHNUd29QYXNzTGF5b3V0OwotfQot
Ci12b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjpyZXNldEZsb3dUaHJlYWRzV2l0aEF1dG9IZWln
aHRSZWdpb25zKCkKLXsKLSAgICBmb3IgKGF1dG8mIGZsb3dSZW5kZXJlciA6ICptX3JlbmRlck5h
bWVkRmxvd1RocmVhZExpc3QpIHsKLSAgICAgICAgaWYgKGZsb3dSZW5kZXJlci0+aGFzQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zKCkpIHsKLSAgICAgICAgICAgIGZsb3dSZW5kZXJlci0+bWFya0F1
dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0ZvckxheW91dCgpOwotICAgICAgICAgICAgZmxvd1JlbmRl
cmVyLT5pbnZhbGlkYXRlUmVnaW9ucygpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEZs
b3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc0ludG9Db25zdHJhaW5lZFBoYXNl
KCkKLXsKLSAgICAvLyBXYWxrIHRoZSBmbG93IGNoYWluIGluIHJldmVyc2Ugb3JkZXIgdG8gdXBk
YXRlIHRoZSBhdXRvLWhlaWdodCByZWdpb25zIGFuZCBjb21wdXRlIGNvcnJlY3Qgc2l6ZXMgZm9y
IHRoZSBjb250YWluaW5nIHJlZ2lvbnMuIE9ubHkgYWZ0ZXIgdGhpcyB3ZSBjYW4KLSAgICAvLyBz
ZXQgdGhlIGZsb3cgaW4gdGhlIGNvbnN0cmFpbmVkIGxheW91dCBwaGFzZS4KLSAgICBmb3IgKGF1
dG8gaXRlciA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+cmJlZ2luKCksIGVuZCA9IG1f
cmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+cmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
Ci0gICAgICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7Ci0g
ICAgICAgIEFTU0VSVCghZmxvd1JlbmRlcmVyLT5oYXNSZWdpb25zKCkgfHwgZmxvd1JlbmRlcmVy
LT5oYXNWYWxpZFJlZ2lvbkluZm8oKSk7Ci0gICAgICAgIGZsb3dSZW5kZXJlci0+bGF5b3V0SWZO
ZWVkZWQoKTsKLSAgICAgICAgaWYgKGZsb3dSZW5kZXJlci0+aGFzQXV0b0xvZ2ljYWxIZWlnaHRS
ZWdpb25zKCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChmbG93UmVuZGVyZXItPm5lZWRzVHdvUGhh
c2VzTGF5b3V0KCkpOwotICAgICAgICAgICAgZmxvd1JlbmRlcmVyLT5tYXJrQXV0b0xvZ2ljYWxI
ZWlnaHRSZWdpb25zRm9yTGF5b3V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgZmxvd1JlbmRlcmVy
LT5zZXRMYXlvdXRQaGFzZShSZW5kZXJGbG93VGhyZWFkOjpMYXlvdXRQaGFzZUNvbnN0cmFpbmVk
KTsKLSAgICAgICAgZmxvd1JlbmRlcmVyLT5jbGVhck5lZWRzVHdvUGhhc2VzTGF5b3V0KCk7Ci0g
ICAgfQotfQotCi12b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhyZWFkc0lu
dG9PdmVyZmxvd1BoYXNlKCkKLXsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1fcmVuZGVyTmFtZWRG
bG93VGhyZWFkTGlzdC0+cmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlz
dC0+cmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFJlbmRlck5hbWVkRmxv
d1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7Ci0gICAgICAgIEFTU0VSVCghZmxvd1JlbmRl
cmVyLT5oYXNSZWdpb25zKCkgfHwgZmxvd1JlbmRlcmVyLT5oYXNWYWxpZFJlZ2lvbkluZm8oKSk7
Ci0gICAgICAgIEFTU0VSVCghZmxvd1JlbmRlcmVyLT5uZWVkc1R3b1BoYXNlc0xheW91dCgpKTsK
LQotICAgICAgICAvLyBJbiB0aGUgb3ZlcmZsb3cgY29tcHV0YXRpb24gcGhhc2UgdGhlIGZsb3cg
dGhyZWFkcyBzdGFydCBpbiB0aGUgY29uc3RyYWluZWQgcGhhc2UgZXZlbiB0aG91Z2ggb3B0aW1p
emF0aW9ucyBkaWRuJ3Qgc2V0IHRoZSBzdGF0ZSBiZWZvcmUuCi0gICAgICAgIGZsb3dSZW5kZXJl
ci0+c2V0TGF5b3V0UGhhc2UoUmVuZGVyRmxvd1RocmVhZDo6TGF5b3V0UGhhc2VDb25zdHJhaW5l
ZCk7Ci0KLSAgICAgICAgZmxvd1JlbmRlcmVyLT5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICBm
bG93UmVuZGVyZXItPm1hcmtSZWdpb25zRm9yT3ZlcmZsb3dMYXlvdXRJZk5lZWRlZCgpOwotICAg
ICAgICBmbG93UmVuZGVyZXItPnNldExheW91dFBoYXNlKFJlbmRlckZsb3dUaHJlYWQ6OkxheW91
dFBoYXNlT3ZlcmZsb3cpOwotICAgIH0KLX0KLQotdm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6
dXBkYXRlRmxvd1RocmVhZHNJbnRvTWVhc3VyZUNvbnRlbnRQaGFzZSgpCi17Ci0gICAgZm9yIChh
dXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KSB7Ci0gICAg
ICAgIEFTU0VSVChmbG93UmVuZGVyZXItPmluRmluYWxMYXlvdXRQaGFzZSgpKTsKLQotICAgICAg
ICBmbG93UmVuZGVyZXItPmRpc3BhdGNoTmFtZWRGbG93RXZlbnRzKCk7Ci0gICAgICAgIGZsb3dS
ZW5kZXJlci0+c2V0TGF5b3V0UGhhc2UoUmVuZGVyRmxvd1RocmVhZDo6TGF5b3V0UGhhc2VNZWFz
dXJlQ29udGVudCk7Ci0gICAgfQotfQotCi12b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRh
dGVGbG93VGhyZWFkc0ludG9GaW5hbFBoYXNlKCkKLXsKLSAgICBmb3IgKGF1dG8gaXRlciA9IG1f
cmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+cmJlZ2luKCksIGVuZCA9IG1fcmVuZGVyTmFtZWRG
bG93VGhyZWFkTGlzdC0+cmVuZCgpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIFJl
bmRlck5hbWVkRmxvd1RocmVhZCogZmxvd1JlbmRlcmVyID0gKml0ZXI7Ci0gICAgICAgIGZsb3dS
ZW5kZXJlci0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKGZsb3dSZW5kZXJlci0+bmVl
ZHNUd29QaGFzZXNMYXlvdXQoKSkgewotICAgICAgICAgICAgZmxvd1JlbmRlcmVyLT5tYXJrUmVn
aW9uc0Zvck92ZXJmbG93TGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIGZsb3dSZW5kZXJl
ci0+Y2xlYXJOZWVkc1R3b1BoYXNlc0xheW91dCgpOwotICAgICAgICB9Ci0gICAgICAgIGZsb3dS
ZW5kZXJlci0+c2V0TGF5b3V0UGhhc2UoUmVuZGVyRmxvd1RocmVhZDo6TGF5b3V0UGhhc2VGaW5h
bCk7Ci0gICAgfQotfQotCi12b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjp1cGRhdGVGbG93VGhy
ZWFkc0xheWVyVG9SZWdpb25NYXBwaW5nc0lmTmVlZGVkKCkKLXsKLSAgICBmb3IgKGF1dG8mIGZs
b3dSZW5kZXJlciA6ICptX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QpCi0gICAgICAgIGZsb3dS
ZW5kZXJlci0+dXBkYXRlQWxsTGF5ZXJUb1JlZ2lvbk1hcHBpbmdzSWZOZWVkZWQoKTsKLX0KLQot
dm9pZCBGbG93VGhyZWFkQ29udHJvbGxlcjo6dXBkYXRlTmFtZWRGbG93c0xheWVyTGlzdHNJZk5l
ZWRlZCgpCi17Ci0gICAgZm9yIChhdXRvJiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZs
b3dUaHJlYWRMaXN0KQotICAgICAgICBmbG93UmVuZGVyZXItPmxheWVyKCktPnVwZGF0ZUxheWVy
TGlzdHNJZk5lZWRlZCgpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVpJbmRleEZs
b3dUaHJlYWRDb250cm9sbGVyKFJlbmRlckxheWVyKiBmaXJzdCwgUmVuZGVyTGF5ZXIqIHNlY29u
ZCkKLXsKLSAgICByZXR1cm4gZmlyc3QtPnpJbmRleCgpIDwgc2Vjb25kLT56SW5kZXgoKTsKLX0K
LQotLy8gQ29sbGVjdCB0aGUgZml4ZWQgcG9zaXRpb25lZCBsYXllcnMgdGhhdCBoYXZlIHRoZSBu
YW1lZCBmbG93cyBhcyBjb250YWluaW5nIGJsb2NrCi0vLyBUaGVzZSBsYXllcnMgYXJlIHBhaW50
ZWQgYW5kIGhpdC10ZXN0ZWQgc3RhcnRpbmcgZnJvbSBSZW5kZXJWaWV3IG5vdCBmcm9tIHJlZ2lv
bnMuCi12b2lkIEZsb3dUaHJlYWRDb250cm9sbGVyOjpjb2xsZWN0Rml4ZWRQb3NpdGlvbmVkTGF5
ZXJzKFZlY3RvcjxSZW5kZXJMYXllcio+JiBmaXhlZFBvc0xheWVycykgY29uc3QKLXsKLSAgICBm
b3IgKGF1dG8mIGZsb3dSZW5kZXJlciA6ICptX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QpIHsK
LSAgICAgICAgLy8gSWYgdGhlIG5hbWVkIGZsb3cgZG9lcyBub3QgaGF2ZSBhbnkgcmVnaW9ucyBh
dHRhY2hlZCwgYSBmaXhlZCBlbGVtZW50IHNob3VsZCBub3QgYmUKLSAgICAgICAgLy8gZGlzcGxh
eWVkIGV2ZW4gaWYgdGhlIGZpeGVkIGVsZW1lbnQgaXMgcG9zaXRpb25lZC9zaXplZCBieSB0aGUg
dmlld3BvcnQuCi0gICAgICAgIGlmICghZmxvd1JlbmRlcmVyLT5oYXNSZWdpb25zKCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBSZW5kZXJMYXllciogZmxvd1RocmVhZExheWVy
ID0gZmxvd1JlbmRlcmVyLT5sYXllcigpOwotICAgICAgICBpZiAoVmVjdG9yPFJlbmRlckxheWVy
Kj4qIG5lZ1pPcmRlckxpc3QgPSBmbG93VGhyZWFkTGF5ZXItPm5lZ1pPcmRlckxpc3QoKSkgewot
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUgPSBuZWdaT3JkZXJMaXN0LT5zaXpl
KCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAgICBSZW5kZXJMYXllciogY3Vyckxh
eWVyID0gbmVnWk9yZGVyTGlzdC0+YXQoaSk7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJMYXll
ci0+cmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgZml4ZWRQb3NMYXllcnMu
YXBwZW5kKGN1cnJMYXllcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoVmVjdG9yPFJlbmRlckxheWVyKj4qIHBvc1pPcmRlckxpc3QgPSBmbG93VGhyZWFkTGF5ZXIt
PnBvc1pPcmRlckxpc3QoKSkgewotICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDAsIHNpemUg
PSBwb3NaT3JkZXJMaXN0LT5zaXplKCk7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBSZW5kZXJMYXllciogY3VyckxheWVyID0gcG9zWk9yZGVyTGlzdC0+YXQoaSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGN1cnJMYXllci0+cmVuZGVyZXIoKS5zdHlsZSgpLnBvc2l0aW9uKCkgIT0g
Rml4ZWRQb3NpdGlvbikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAgICAgZml4ZWRQb3NMYXllcnMuYXBwZW5kKGN1cnJMYXllcik7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGQ6OnN0YWJsZV9zb3J0KGZpeGVkUG9zTGF5ZXJzLmJl
Z2luKCksIGZpeGVkUG9zTGF5ZXJzLmVuZCgpLCBjb21wYXJlWkluZGV4Rmxvd1RocmVhZENvbnRy
b2xsZXIpOwotfQotCi0jaWZuZGVmIE5ERUJVRwotYm9vbCBGbG93VGhyZWFkQ29udHJvbGxlcjo6
aXNBdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudENvbnNpc3RlbnQoKSBjb25zdAotewotICAg
IGlmICghaGFzUmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQotICAgICAgICByZXR1cm4gIWhhc0Zs
b3dUaHJlYWRzV2l0aEF1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpOwotCi0gICAgZm9yIChhdXRv
JiBmbG93UmVuZGVyZXIgOiAqbV9yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KSB7Ci0gICAgICAg
IGlmICghZmxvd1JlbmRlcmVyLT5pc0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lz
dGVudCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotI2VuZGlmCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GbG93VGhyZWFkQ29udHJvbGxlci5oCShyZXZpc2lvbiAy
MjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmxvd1RocmVhZENvbnRyb2xsZXIu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
Ci0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVIgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUg
PG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBSZW5kZXJGbG93VGhyZWFkOwotY2xhc3MgUmVuZGVyTGF5ZXI7Ci1jbGFz
cyBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ7Ci0KLXR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVuZGVyTmFt
ZWRGbG93VGhyZWFkKj4gUmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdDsKLQotY2xhc3MgRmxvd1Ro
cmVhZENvbnRyb2xsZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIGV4cGxpY2l0IEZsb3dUaHJlYWRDb250cm9sbGVyKFJlbmRlclZpZXcqKTsKLSAgICB+Rmxv
d1RocmVhZENvbnRyb2xsZXIoKTsKLQotICAgIGJvb2wgaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRP
cmRlckRpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVy
RGlydHk7IH0KLSAgICB2b2lkIHNldElzUmVuZGVyTmFtZWRGbG93VGhyZWFkT3JkZXJEaXJ0eShi
b29sIGRpcnR5KQotICAgIHsKLSAgICAgICAgbV9pc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVy
RGlydHkgPSBkaXJ0eTsKLSAgICAgICAgaWYgKGRpcnR5KQotICAgICAgICAgICAgbV92aWV3LT5z
ZXROZWVkc0xheW91dCgpOwotICAgIH0KLQotICAgIGNvbnN0IFJlbmRlck5hbWVkRmxvd1RocmVh
ZExpc3QqIHJlbmRlck5hbWVkRmxvd1RocmVhZExpc3QoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
ck5hbWVkRmxvd1RocmVhZExpc3QuZ2V0KCk7IH0KLSAgICBib29sIGhhc1JlbmRlck5hbWVkRmxv
d1RocmVhZHMoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3QgJiYg
IW1fcmVuZGVyTmFtZWRGbG93VGhyZWFkTGlzdC0+aXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBsYXlv
dXRSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKCk7Ci0gICAgdm9pZCBzdHlsZURpZENoYW5nZSgpOwot
Ci0gICAgdm9pZCByZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KEVsZW1lbnQmLCBSZW5k
ZXJOYW1lZEZsb3dUaHJlYWQmKTsKLSAgICB2b2lkIHVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50
RWxlbWVudChFbGVtZW50Jik7Ci0KLSAgICBib29sIGhhc0Zsb3dUaHJlYWRzV2l0aEF1dG9Mb2dp
Y2FsSGVpZ2h0UmVnaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVhZHNXaXRoQXV0b0xv
Z2ljYWxIZWlnaHRSZWdpb25zOyB9Ci0gICAgdm9pZCBpbmNyZW1lbnRGbG93VGhyZWFkc1dpdGhB
dXRvTG9naWNhbEhlaWdodFJlZ2lvbnMoKSB7ICsrbV9mbG93VGhyZWFkc1dpdGhBdXRvTG9naWNh
bEhlaWdodFJlZ2lvbnM7IH0KLSAgICB2b2lkIGRlY3JlbWVudEZsb3dUaHJlYWRzV2l0aEF1dG9M
b2dpY2FsSGVpZ2h0UmVnaW9ucygpIHsgQVNTRVJUKG1fZmxvd1RocmVhZHNXaXRoQXV0b0xvZ2lj
YWxIZWlnaHRSZWdpb25zID4gMCk7IC0tbV9mbG93VGhyZWFkc1dpdGhBdXRvTG9naWNhbEhlaWdo
dFJlZ2lvbnM7IH0KLQotICAgIGJvb2wgdXBkYXRlRmxvd1RocmVhZHNOZWVkaW5nTGF5b3V0KCk7
Ci0gICAgYm9vbCB1cGRhdGVGbG93VGhyZWFkc05lZWRpbmdUd29TdGVwTGF5b3V0KCk7Ci0gICAg
dm9pZCB1cGRhdGVGbG93VGhyZWFkc0ludG9Db25zdHJhaW5lZFBoYXNlKCk7Ci0gICAgdm9pZCB1
cGRhdGVGbG93VGhyZWFkc0ludG9PdmVyZmxvd1BoYXNlKCk7Ci0gICAgdm9pZCB1cGRhdGVGbG93
VGhyZWFkc0ludG9NZWFzdXJlQ29udGVudFBoYXNlKCk7Ci0gICAgdm9pZCB1cGRhdGVGbG93VGhy
ZWFkc0ludG9GaW5hbFBoYXNlKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZU5hbWVkRmxvd3NMYXllckxp
c3RzSWZOZWVkZWQoKTsKLSAgICAvLyBDb2xsZWN0IHRoZSBmaXhlZCBwb3NpdGlvbmVkIGxheWVy
cyB0aGF0IGhhdmUgdGhlIG5hbWVkIGZsb3dzIGFzIGNvbnRhaW5pbmcgYmxvY2sKLSAgICAvLyBU
aGVzZSBsYXllcnMgYXJlIHBhaW50ZWQgYW5kIGhpdC10ZXN0ZWQgYnkgUmVuZGVyVmlldwotICAg
IHZvaWQgY29sbGVjdEZpeGVkUG9zaXRpb25lZExheWVycyhWZWN0b3I8UmVuZGVyTGF5ZXIqPiYg
Zml4ZWRQb3NMYXllcnMpIGNvbnN0OwotCi0gICAgdm9pZCB1cGRhdGVGbG93VGhyZWFkc0xheWVy
VG9SZWdpb25NYXBwaW5nc0lmTmVlZGVkKCk7Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgYm9vbCBp
c0F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50Q29uc2lzdGVudCgpIGNvbnN0OwotI2VuZGlm
Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHVwZGF0ZUZsb3dUaHJlYWRzQ2hhaW5JZk5lY2Vzc2Fy
eSgpOwotICAgIHZvaWQgcmVzZXRGbG93VGhyZWFkc1dpdGhBdXRvSGVpZ2h0UmVnaW9ucygpOwot
Ci1wcml2YXRlOgotICAgIFJlbmRlclZpZXcqIG1fdmlldzsKLSAgICBib29sIG1faXNSZW5kZXJO
YW1lZEZsb3dUaHJlYWRPcmRlckRpcnR5OwotICAgIHVuc2lnbmVkIG1fZmxvd1RocmVhZHNXaXRo
QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRMaXN0PiBtX3JlbmRlck5hbWVkRmxvd1RocmVhZExpc3Q7Ci0gICAgSGFzaE1h
cDxjb25zdCBFbGVtZW50KiwgUmVuZGVyTmFtZWRGbG93VGhyZWFkKj4gbV9tYXBOYW1lZEZsb3dD
b250ZW50RWxlbWVudDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMjIyMjU5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRl
ICJSZW5kZXJNZW51TGlzdC5oIgogI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVn
aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGFibGVDZWxsLmgiCkBAIC0xNjgxLDI3ICsxNjgwLDggQEAgdm9pZCBSZW5kZXJCbG9j
azo6cGFpbnRPYmplY3QoUGFpbnRJbmZvJgogCiAgICAgLy8gMS4gcGFpbnQgYmFja2dyb3VuZCwg
Ym9yZGVycyBldGMKICAgICBpZiAoKHBhaW50UGhhc2UgPT0gUGFpbnRQaGFzZUJsb2NrQmFja2dy
b3VuZCB8fCBwYWludFBoYXNlID09IFBhaW50UGhhc2VDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYg
c3R5bGUoKS52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSkgewotICAgICAgICBpZiAoaGFzVmlzaWJs
ZUJveERlY29yYXRpb25zKCkpIHsKLSAgICAgICAgICAgIGJvb2wgZGlkQ2xpcFRvUmVnaW9uID0g
ZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
KiBuYW1lZEZsb3dGcmFnbWVudCA9IGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpOwot
ICAgICAgICAgICAgaWYgKG5hbWVkRmxvd0ZyYWdtZW50ICYmIGlzPFJlbmRlck5hbWVkRmxvd1Ro
cmVhZD4ocGFpbnRJbmZvLnBhaW50Q29udGFpbmVyKSkgewotICAgICAgICAgICAgICAgIC8vIElm
IHRoaXMgYm94IGdvZXMgYmV5b25kIHRoZSBjdXJyZW50IHJlZ2lvbiwgdGhlbiBtYWtlIHN1cmUg
bm90IHRvIG92ZXJmbG93IHRoZSByZWdpb24uCi0gICAgICAgICAgICAgICAgLy8gVGhpcyAob3Zl
cmZsb3dpbmcgcmVnaW9uIFggYWx0b3VnaCBhbHNvIGZyYWdtZW50ZWQgdG8gcmVnaW9uIFgrMSkg
Y291bGQgaGFwcGVuIHdoZW4gb25lIG9mIHRoaXMgYm94J3MgY2hpbGRyZW4KLSAgICAgICAgICAg
ICAgICAvLyBvdmVyZmxvd3MgcmVnaW9uIFggYW5kIGlzIGFuIHVuc3BsaXR0YWJsZSBlbGVtZW50
IChsaWtlIGFuIGltYWdlKS4KLSAgICAgICAgICAgICAgICAvLyBUaGUgc2FtZSBhcHBsaWVzIGZv
ciBhIGJveCBvdmVyZmxvd2luZyB0aGUgdG9wIG9mIHJlZ2lvbiBYIHdoZW4gdGhhdCBib3ggaXMg
YWxzbyBmcmFnbWVudGVkIGluIHJlZ2lvbiBYLTEuCi0KLSAgICAgICAgICAgICAgICBwYWludElu
Zm8uY29udGV4dCgpLnNhdmUoKTsKLSAgICAgICAgICAgICAgICBkaWRDbGlwVG9SZWdpb24gPSB0
cnVlOwotCi0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5jbGlwKGRvd25jYXN0
PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKnBhaW50SW5mby5wYWludENvbnRhaW5lcikuZGVjb3Jh
dGlvbnNDbGlwUmVjdEZvckJveEluTmFtZWRGbG93RnJhZ21lbnQoKnRoaXMsICpuYW1lZEZsb3dG
cmFnbWVudCkpOwotICAgICAgICAgICAgfQotCisgICAgICAgIGlmIChoYXNWaXNpYmxlQm94RGVj
b3JhdGlvbnMoKSkKICAgICAgICAgICAgIHBhaW50Qm94RGVjb3JhdGlvbnMocGFpbnRJbmZvLCBw
YWludE9mZnNldCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChkaWRDbGlwVG9SZWdp
b24pCi0gICAgICAgICAgICAgICAgcGFpbnRJbmZvLmNvbnRleHQoKS5yZXN0b3JlKCk7Ci0gICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgLy8gUGFpbnQgbGVnZW5kcyBqdXN0IGFib3ZlIHRoZSBi
b3JkZXIgYmVmb3JlIHdlIHNjcm9sbCBvciBjbGlwLgpAQCAtMzQyOSw4ICszNDA5LDYgQEAgUmVu
ZGVyUmVnaW9uKiBSZW5kZXJCbG9jazo6cmVnaW9uQXRCbG9jawogCiBzdGF0aWMgYm9vbCBjYW5D
b21wdXRlUmVnaW9uUmFuZ2VGb3JCb3goY29uc3QgUmVuZGVyQmxvY2smIHBhcmVudEJsb2NrLCBj
b25zdCBSZW5kZXJCb3gmIGNoaWxkQm94LCBjb25zdCBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhy
ZWFkQ29udGFpbmluZ0Jsb2NrKQogewotICAgIEFTU0VSVCghY2hpbGRCb3guaXNSZW5kZXJOYW1l
ZEZsb3dUaHJlYWQoKSk7Ci0KICAgICBpZiAoIWZsb3dUaHJlYWRDb250YWluaW5nQmxvY2spCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzQ0OCwxMSArMzQyNiw5IEBAIGJvb2wgUmVuZGVy
QmxvY2s6OmNoaWxkQm94SXNVbnNwbGl0dGFibGUKICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93
VGhyZWFkID0gZmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpOwogICAgIGJvb2wgY2hlY2tDb2x1
bW5CcmVha3MgPSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPnNob3VsZENoZWNrQ29sdW1uQnJl
YWtzKCk7CiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSAhY2hlY2tDb2x1bW5CcmVha3MgJiYg
dmlldygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgYm9vbCBjaGVj
a1JlZ2lvbkJyZWFrcyA9IGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+aXNSZW5kZXJOYW1lZEZs
b3dUaHJlYWQoKTsKICAgICByZXR1cm4gY2hpbGQuaXNVbnNwbGl0dGFibGVGb3JQYWdpbmF0aW9u
KCkgfHwgY2hpbGQuc3R5bGUoKS5icmVha0luc2lkZSgpID09IEF2b2lkQnJlYWtJbnNpZGUKICAg
ICAgICAgfHwgKGNoZWNrQ29sdW1uQnJlYWtzICYmIGNoaWxkLnN0eWxlKCkuYnJlYWtJbnNpZGUo
KSA9PSBBdm9pZENvbHVtbkJyZWFrSW5zaWRlKQotICAgICAgICB8fCAoY2hlY2tQYWdlQnJlYWtz
ICYmIGNoaWxkLnN0eWxlKCkuYnJlYWtJbnNpZGUoKSA9PSBBdm9pZFBhZ2VCcmVha0luc2lkZSkK
LSAgICAgICAgfHwgKGNoZWNrUmVnaW9uQnJlYWtzICYmIGNoaWxkLnN0eWxlKCkuYnJlYWtJbnNp
ZGUoKSA9PSBBdm9pZFJlZ2lvbkJyZWFrSW5zaWRlKTsKKyAgICAgICAgfHwgKGNoZWNrUGFnZUJy
ZWFrcyAmJiBjaGlsZC5zdHlsZSgpLmJyZWFrSW5zaWRlKCkgPT0gQXZvaWRQYWdlQnJlYWtJbnNp
ZGUpOwogfQogCiB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlUmVnaW9uUmFuZ2VGb3JCb3hDaGls
ZChjb25zdCBSZW5kZXJCb3gmIGJveCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNiBAQAogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU2V0LmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgpAQCAtODgzLDcgKzg4Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93
OjpkZXRlcm1pbmVMb2dpY2FsTGUKICAgICAgICAgCiAgICAgLy8gU29tZSBvYmplY3RzIChlLmcu
LCB0YWJsZXMsIGhvcml6b250YWwgcnVsZXMsIG92ZXJmbG93OmF1dG8gYmxvY2tzKSBhdm9pZCBm
bG9hdHMuIFRoZXkgbmVlZAogICAgIC8vIHRvIHNoaWZ0IG92ZXIgYXMgbmVjZXNzYXJ5IHRvIGRv
ZGdlIGFueSBmbG9hdHMgdGhhdCBtaWdodCBnZXQgaW4gdGhlIHdheS4KLSAgICBpZiAoY2hpbGQu
YXZvaWRzRmxvYXRzKCkgJiYgY29udGFpbnNGbG9hdHMoKSAmJiAhaXM8UmVuZGVyTmFtZWRGbG93
VGhyZWFkPihmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCkpKQorICAgIGlmIChjaGlsZC5hdm9p
ZHNGbG9hdHMoKSAmJiBjb250YWluc0Zsb2F0cygpKQogICAgICAgICBuZXdQb3NpdGlvbiArPSBj
b21wdXRlU3RhcnRQb3NpdGlvbkRlbHRhRm9yQ2hpbGRBdm9pZGluZ0Zsb2F0cyhjaGlsZCwgbWFy
Z2luU3RhcnRGb3JDaGlsZChjaGlsZCkpOwogCiAgICAgc2V0TG9naWNhbExlZnRGb3JDaGlsZChj
aGlsZCwgc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBuZXdQb3NpdGlvbiA6IHRv
dGFsQXZhaWxhYmxlTG9naWNhbFdpZHRoIC0gbmV3UG9zaXRpb24gLSBsb2dpY2FsV2lkdGhGb3JD
aGlsZChjaGlsZCksIGFwcGx5RGVsdGEpOwpAQCAtMTUxNiwxMCArMTUxNSwxMCBAQCBMYXlvdXRV
bml0IFJlbmRlckJsb2NrRmxvdzo6YXBwbHlCZWZvcmVCCiB7CiAgICAgLy8gRklYTUU6IEFkZCBw
YWdlIGJyZWFrIGNoZWNraW5nIGhlcmUgd2hlbiB3ZSBzdXBwb3J0IHByaW50aW5nLgogICAgIFJl
bmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQgPSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgYm9vbCBpc0luc2lkZU11bHRpY29sRmxvd1RocmVhZCA9IGZsb3dUaHJlYWQgJiYgIWZs
b3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCk7CisgICAgYm9vbCBpc0luc2lkZU11
bHRpY29sRmxvd1RocmVhZCA9IGZsb3dUaHJlYWQ7CiAgICAgYm9vbCBjaGVja0NvbHVtbkJyZWFr
cyA9IGZsb3dUaHJlYWQgJiYgZmxvd1RocmVhZC0+c2hvdWxkQ2hlY2tDb2x1bW5CcmVha3MoKTsK
ICAgICBib29sIGNoZWNrUGFnZUJyZWFrcyA9ICFjaGVja0NvbHVtbkJyZWFrcyAmJiB2aWV3KCku
bGF5b3V0U3RhdGUoKS0+bV9wYWdlTG9naWNhbEhlaWdodDsgLy8gRklYTUU6IE9uY2UgY29sdW1u
cyBjYW4gcHJpbnQgd2UgaGF2ZSB0byBjaGVjayB0aGlzLgotICAgIGJvb2wgY2hlY2tSZWdpb25C
cmVha3MgPSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFk
KCk7CisgICAgYm9vbCBjaGVja1JlZ2lvbkJyZWFrcyA9IGZhbHNlOwogICAgIGJvb2wgY2hlY2tC
ZWZvcmVBbHdheXMgPSAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQuc3R5bGUoKS5icmVha0Jl
Zm9yZSgpID09IENvbHVtbkJyZWFrQmV0d2VlbikKICAgICAgICAgfHwgKGNoZWNrUGFnZUJyZWFr
cyAmJiBhbHdheXNQYWdlQnJlYWsoY2hpbGQuc3R5bGUoKS5icmVha0JlZm9yZSgpKSk7CiAgICAg
aWYgKGNoZWNrQmVmb3JlQWx3YXlzICYmIGluTm9ybWFsRmxvdyhjaGlsZCkgJiYgaGFzTmV4dFBh
Z2UobG9naWNhbE9mZnNldCwgSW5jbHVkZVBhZ2VCb3VuZGFyeSkpIHsKQEAgLTE1NDEsMTAgKzE1
NDAsMTAgQEAgTGF5b3V0VW5pdCBSZW5kZXJCbG9ja0Zsb3c6OmFwcGx5QWZ0ZXJCcgogewogICAg
IC8vIEZJWE1FOiBBZGQgcGFnZSBicmVhayBjaGVja2luZyBoZXJlIHdoZW4gd2Ugc3VwcG9ydCBw
cmludGluZy4KICAgICBSZW5kZXJGbG93VGhyZWFkKiBmbG93VGhyZWFkID0gZmxvd1RocmVhZENv
bnRhaW5pbmdCbG9jaygpOwotICAgIGJvb2wgaXNJbnNpZGVNdWx0aWNvbEZsb3dUaHJlYWQgPSBm
bG93VGhyZWFkICYmICFmbG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpOworICAg
IGJvb2wgaXNJbnNpZGVNdWx0aWNvbEZsb3dUaHJlYWQgPSBmbG93VGhyZWFkOwogICAgIGJvb2wg
Y2hlY2tDb2x1bW5CcmVha3MgPSBmbG93VGhyZWFkICYmIGZsb3dUaHJlYWQtPnNob3VsZENoZWNr
Q29sdW1uQnJlYWtzKCk7CiAgICAgYm9vbCBjaGVja1BhZ2VCcmVha3MgPSAhY2hlY2tDb2x1bW5C
cmVha3MgJiYgdmlldygpLmxheW91dFN0YXRlKCktPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7IC8vIEZJ
WE1FOiBPbmNlIGNvbHVtbnMgY2FuIHByaW50IHdlIGhhdmUgdG8gY2hlY2sgdGhpcy4KLSAgICBi
b29sIGNoZWNrUmVnaW9uQnJlYWtzID0gZmxvd1RocmVhZCAmJiBmbG93VGhyZWFkLT5pc1JlbmRl
ck5hbWVkRmxvd1RocmVhZCgpOworICAgIGJvb2wgY2hlY2tSZWdpb25CcmVha3MgPSBmYWxzZTsK
ICAgICBib29sIGNoZWNrQWZ0ZXJBbHdheXMgPSAoY2hlY2tDb2x1bW5CcmVha3MgJiYgY2hpbGQu
c3R5bGUoKS5icmVha0FmdGVyKCkgPT0gQ29sdW1uQnJlYWtCZXR3ZWVuKQogICAgICAgICB8fCAo
Y2hlY2tQYWdlQnJlYWtzICYmIGFsd2F5c1BhZ2VCcmVhayhjaGlsZC5zdHlsZSgpLmJyZWFrQWZ0
ZXIoKSkpOwogICAgIGlmIChjaGVja0FmdGVyQWx3YXlzICYmIGluTm9ybWFsRmxvdyhjaGlsZCkg
JiYgaGFzTmV4dFBhZ2UobG9naWNhbE9mZnNldCwgSW5jbHVkZVBhZ2VCb3VuZGFyeSkpIHsKQEAg
LTE5ODAsMzIgKzE5NzksNyBAQCBMYXlvdXRVbml0IFJlbmRlckJsb2NrRmxvdzo6cGFnZVJlbWFp
bmluCiAKIExheW91dFVuaXQgUmVuZGVyQmxvY2tGbG93Ojpsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGRG
b3JGcmFnbWVudGF0aW9uKGNvbnN0IFJlbmRlckJveCYgY2hpbGQpIGNvbnN0CiB7Ci0gICAgLy8g
VGhpcyBtZXRob2QgaXMgcmVxdWlyZWQgYmVjYXVzZSByZWdpb25zIGRvIG5vdCBmcmFnbWVudCBt
b25vbGl0aGljIGVsZW1lbnRzIGJ1dCBpbnN0ZWFkCi0gICAgLy8gdGhleSBsZXQgdGhlbSBvdmVy
ZmxvdyB0aGUgcmVnaW9uIHRoZXkgZmxvdyBpbi4gVGhpcyBiZWhhdmlvdXIgaXMgZGlmZmVyZW50
IGZyb20gdGhlIAotICAgIC8vIG11bHRpY29sL3ByaW50aW5nIGltcGxlbWVudGF0aW9ucywgd2hp
Y2ggaGF2ZSBub3QgeWV0IGJlZW4gdXBkYXRlZCB0byBjb3JyZWN0bHkgaGFuZGxlCi0gICAgLy8g
bW9ub2xpdGhpYyBlbGVtZW50cy4KLSAgICAvLyBBcyBhIHJlc3VsdCwgZm9yIHRoZSBtb21lbnQs
IHRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSB1c2VkIGZvciByZWdpb25zLCB0aGUgbXVsdGljb2wg
YW5kCi0gICAgLy8gcHJpbnRpbmcgaW1wbGVtZW50YXRpb25zIHdpbGwgc3RpY2sgdG8gdGhlIGV4
aXN0aW5nIGJlaGF2aW91ciB1bnRpbCB0aGVpciBmcmFnbWVudGF0aW9uCi0gICAgLy8gaW1wbGVt
ZW50YXRpb24gaXMgdXBkYXRlZCB0byBtYXRjaCB0aGUgcmVnaW9ucyBpbXBsZW1lbnRhdGlvbi4K
LSAgICBpZiAoIWZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSB8fCAhZmxvd1RocmVhZENvbnRh
aW5pbmdCbG9jaygpLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKQotICAgICAgICByZXR1cm4g
bG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKTsKLQotICAgIC8vIEZvciB1bnNwbGl0dGFibGUg
ZWxlbWVudHMsIHRoaXMgbWV0aG9kIHdpbGwganVzdCByZXR1cm4gdGhlIGhlaWdodCBvZiB0aGUg
ZWxlbWVudCB0aGF0Ci0gICAgLy8gZml0cyBpbnRvIHRoZSBjdXJyZW50IHJlZ2lvbiwgd2l0aG91
dCB0aGUgaGVpZ2h0IG9mIHRoZSBwYXJ0IHRoYXQgb3ZlcmZsb3dzIHRoZSByZWdpb24uCi0gICAg
Ly8gVGhpcyBpcyBkb25lIGZvciBhbGwgcmVnaW9ucywgZXhjZXB0IHRoZSBsYXN0IG9uZSBiZWNh
dXNlIGluIHRoYXQgY2FzZSwgdGhlIGxvZ2ljYWwKLSAgICAvLyBoZWlnaHQgb2YgdGhlIGZsb3cg
dGhyZWFkIG5lZWRzIHRvIGFsc28KLSAgICBpZiAoIWNoaWxkQm94SXNVbnNwbGl0dGFibGVGb3JG
cmFnbWVudGF0aW9uKGNoaWxkKSB8fCAhcGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQobG9naWNh
bFRvcEZvckNoaWxkKGNoaWxkKSkpCi0gICAgICAgIHJldHVybiBsb2dpY2FsSGVpZ2h0Rm9yQ2hp
bGQoY2hpbGQpOwotCi0gICAgLy8gSWYgd2UncmUgb24gdGhlIGxhc3QgcGFnZSB0aGlzIGJsb2Nr
IGZyYWdtZW50cyB0bywgdGhlIGxvZ2ljYWwgaGVpZ2h0IG9mIHRoZSBmbG93IHRocmVhZCBtdXN0
IGluY2x1ZGUKLSAgICAvLyB0aGUgZW50aXJlIHVuc3BsaXR0YWJsZSBjaGlsZCBiZWNhdXNlIGFu
eSBmb2xsb3dpbmcgY2hpbGRyZW4gd2lsbCBub3QgYmUgbW92ZWQgdG8gdGhlIG5leHQgcGFnZQot
ICAgIC8vIHNvIHRoZXkgd2lsbCBuZWVkIHRvIGJlIGxhaWQgb3V0IGJlbG93IHRoZSBjdXJyZW50
IHVuc3BsaXR0YWJsZSBjaGlsZC4KLSAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbFRvcCA9IGxv
Z2ljYWxUb3BGb3JDaGlsZChjaGlsZCk7Ci0gICAgaWYgKCFoYXNOZXh0UGFnZShjaGlsZExvZ2lj
YWxUb3ApKQotICAgICAgICByZXR1cm4gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKTsKLSAg
ICAKLSAgICBMYXlvdXRVbml0IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPSBwYWdlUmVtYWluaW5n
TG9naWNhbEhlaWdodEZvck9mZnNldChjaGlsZExvZ2ljYWxUb3AsIEV4Y2x1ZGVQYWdlQm91bmRh
cnkpOwotICAgIHJldHVybiBzdGQ6Om1pbihjaGlsZC5sb2dpY2FsSGVpZ2h0KCksIHJlbWFpbmlu
Z0xvZ2ljYWxIZWlnaHQpOworICAgIHJldHVybiBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoY2hpbGQp
OwogfQogCiB2b2lkIFJlbmRlckJsb2NrRmxvdzo6bGF5b3V0TGluZUdyaWRCb3goKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDQxLDE2ICsxNDQxLDYgQEAg
dm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dFJ1bnNBbmRGbG9hdAogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKHBhZ2luYXRlZCkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9
IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKGZsb3dUaHJlYWQtPmlzUmVuZGVyTmFtZWRGbG93VGhyZWFkKCkgJiYgb3ZlcmZsb3dzUmVn
aW9uICYmIGhhc05leHRQYWdlKGxpbmVCb3gtPmxpbmVUb3AoKSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBMaW1pdCB0aGUgaGVpZ2h0IG9mIHRoaXMgYmxvY2sgdG8gdGhlIGVu
ZCBvZiB0aGUgY3VycmVudCByZWdpb24gYmVjYXVzZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGl0IGlzIGFsc28gZnJhZ21lbnRlZCBpbnRvIHRoZSBuZXh0IHJlZ2lvbi4KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQg
PSBwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldChsb2dpY2FsVG9wKCksIEV4Y2x1
ZGVQYWdlQm91bmRhcnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2dpY2Fs
SGVpZ2h0KCkgPiByZW1haW5pbmdMb2dpY2FsSGVpZ2h0KQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0KICAgICAgICAg
ICAgICAgICAgICAgaWYgKGxheW91dFN0YXRlLmZsb3dUaHJlYWQoKSkKICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwZGF0ZVJlZ2lvbkZvckxpbmUobGluZUJveCk7CiAgICAgICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDIy
MjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MSw3ICs2MSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJl
YWQuaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTIxMSw2MCArMjEwLDkgQEAgTGF5b3V0
UmVjdCBSZW5kZXJCb3g6OmNsaWVudEJveFJlY3RJblJlZwogICAgIHJldHVybiBjbGllbnRCb3g7
CiB9CiAKLUxheW91dFJlY3QgUmVuZGVyQm94Ojpib3JkZXJCb3hSZWN0SW5SZWdpb24oUmVuZGVy
UmVnaW9uKiByZWdpb24sIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncyBjYWNoZUZsYWcpIGNvbnN0
CitMYXlvdXRSZWN0IFJlbmRlckJveDo6Ym9yZGVyQm94UmVjdEluUmVnaW9uKFJlbmRlclJlZ2lv
biosIFJlbmRlckJveFJlZ2lvbkluZm9GbGFncykgY29uc3QKIHsKLSAgICBpZiAoIXJlZ2lvbikK
LSAgICAgICAgcmV0dXJuIGJvcmRlckJveFJlY3QoKTsKLQotICAgIGF1dG8qIGZsb3dUaHJlYWQg
PSBmbG93VGhyZWFkQ29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgaWYgKCFpczxSZW5kZXJOYW1lZEZs
b3dUaHJlYWQ+KGZsb3dUaHJlYWQpKQotICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwot
Ci0gICAgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVn
aW9uKiBlbmRSZWdpb24gPSBudWxscHRyOwotICAgIGlmICghZmxvd1RocmVhZC0+Z2V0UmVnaW9u
UmFuZ2VGb3JCb3godGhpcywgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpIHsKLSAgICAgICAgLy8g
RklYTUU6IEluIGEgcGVyZmVjdCB3b3JsZCB0aGlzIGNvbmRpdGlvbiBzaG91bGQgbmV2ZXIgaGFw
cGVuLgotICAgICAgICByZXR1cm4gYm9yZGVyQm94UmVjdCgpOwotICAgIH0KLQotICAgIEFTU0VS
VChmbG93VGhyZWFkLT5yZWdpb25JblJhbmdlKHJlZ2lvbiwgc3RhcnRSZWdpb24sIGVuZFJlZ2lv
bikpOwotCi0gICAgLy8gQ29tcHV0ZSB0aGUgbG9naWNhbCB3aWR0aCBhbmQgcGxhY2VtZW50IGlu
IHRoaXMgcmVnaW9uLgotICAgIFJlbmRlckJveFJlZ2lvbkluZm8qIGJveEluZm8gPSByZW5kZXJC
b3hSZWdpb25JbmZvKHJlZ2lvbiwgY2FjaGVGbGFnKTsKLSAgICBpZiAoIWJveEluZm8pCi0gICAg
ICAgIHJldHVybiBib3JkZXJCb3hSZWN0KCk7Ci0KLSAgICAvLyBXZSBoYXZlIGNhY2hlZCBpbnNl
dHMuCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggPSBib3hJbmZvLT5sb2dpY2FsV2lkdGgo
KTsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0ID0gYm94SW5mby0+bG9naWNhbExlZnQoKTsK
LQotICAgIC8vIE5vdyBhcHBseSB0aGUgcGFyZW50IGluc2V0IHNpbmNlIGl0IGlzIGN1bXVsYXRp
dmUgd2hlbmV2ZXIgYW55dGhpbmcgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4gc2hpZnRz
LgotICAgIC8vIEZJWE1FOiBEb2Vzbid0IHdvcmsgcmlnaHQgd2l0aCBwZXJwZW5kaWN1bGFyIHdy
aXRpbmcgbW9kZXMuCi0gICAgY29uc3QgUmVuZGVyQmxvY2sqIGN1cnJlbnRCb3ggPSBjb250YWlu
aW5nQmxvY2soKTsKLSAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBjdXJyZW50Qm94SW5mbyA9IGlz
UmVuZGVyRmxvd1RocmVhZCgpID8gbnVsbHB0ciA6IGN1cnJlbnRCb3gtPnJlbmRlckJveFJlZ2lv
bkluZm8ocmVnaW9uKTsKLSAgICB3aGlsZSAoY3VycmVudEJveEluZm8gJiYgY3VycmVudEJveElu
Zm8tPmlzU2hpZnRlZCgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50Qm94LT5zdHlsZSgpLmRpcmVj
dGlvbigpID09IExUUikKLSAgICAgICAgICAgIGxvZ2ljYWxMZWZ0ICs9IGN1cnJlbnRCb3hJbmZv
LT5sb2dpY2FsTGVmdCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb2dpY2FsTGVmdCAt
PSAoY3VycmVudEJveC0+bG9naWNhbFdpZHRoKCkgLSBjdXJyZW50Qm94SW5mby0+bG9naWNhbFdp
ZHRoKCkpIC0gY3VycmVudEJveEluZm8tPmxvZ2ljYWxMZWZ0KCk7Ci0KLSAgICAgICAgLy8gT25j
ZSB3ZSByZWFjaCB0aGUgZnJhZ21lbnRhdGlvbiBjb250YWluZXIgd2Ugc2hvdWxkIHN0b3AuCi0g
ICAgICAgIGlmIChjdXJyZW50Qm94LT5pc1JlbmRlckZsb3dUaHJlYWQoKSkKLSAgICAgICAgICAg
IGJyZWFrOwotCi0gICAgICAgIGN1cnJlbnRCb3ggPSBjdXJyZW50Qm94LT5jb250YWluaW5nQmxv
Y2soKTsKLSAgICAgICAgaWYgKCFjdXJyZW50Qm94KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIHJlZ2lvbiA9IGN1cnJlbnRCb3gtPmNsYW1wVG9TdGFydEFuZEVuZFJlZ2lvbnMocmVnaW9u
KTsKLSAgICAgICAgY3VycmVudEJveEluZm8gPSBjdXJyZW50Qm94LT5yZW5kZXJCb3hSZWdpb25J
bmZvKHJlZ2lvbik7Ci0gICAgfQotCi0gICAgaWYgKGNhY2hlRmxhZyA9PSBEb05vdENhY2hlUmVu
ZGVyQm94UmVnaW9uSW5mbykKLSAgICAgICAgZGVsZXRlIGJveEluZm87Ci0KLSAgICBpZiAoaXNI
b3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIExheW91dFJlY3QobG9naWNh
bExlZnQsIDAsIGxvZ2ljYWxXaWR0aCwgaGVpZ2h0KCkpOwotICAgIHJldHVybiBMYXlvdXRSZWN0
KDAsIGxvZ2ljYWxMZWZ0LCB3aWR0aCgpLCBsb2dpY2FsV2lkdGgpOworICAgIHJldHVybiBib3Jk
ZXJCb3hSZWN0KCk7CiB9CiAKIHN0YXRpYyBSZW5kZXJCbG9ja0Zsb3cqIG91dGVybW9zdEJsb2Nr
Q29udGFpbmluZ0Zsb2F0aW5nT2JqZWN0KFJlbmRlckJveCYgYm94KQpAQCAtODY5LDEwICs4MTcs
NiBAQCBib29sIFJlbmRlckJveDo6c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCiAgICAgUmVuZGVyQmxvY2sqIG5leHRTY3JvbGxCbG9jayA9IGNvbnRhaW5p
bmdCbG9jaygpOwotICAgIGlmIChpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KG5leHRTY3JvbGxC
bG9jaykpIHsKLSAgICAgICAgQVNTRVJUKHN0YXJ0Qm94KTsKLSAgICAgICAgbmV4dFNjcm9sbEJs
b2NrID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqbmV4dFNjcm9sbEJsb2NrKS5m
cmFnbWVudEZyb21BYnNvbHV0ZVBvaW50QW5kQm94KHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50LCAq
c3RhcnRCb3gpOwotICAgIH0KIAogICAgIGlmIChuZXh0U2Nyb2xsQmxvY2sgJiYgIW5leHRTY3Jv
bGxCbG9jay0+aXNSZW5kZXJWaWV3KCkpCiAgICAgICAgIHJldHVybiBuZXh0U2Nyb2xsQmxvY2st
PnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5LCBtdWx0aXBsaWVyLCBzdG9wRWxlbWVudCwg
c3RhcnRCb3gsIHdoZWVsRXZlbnRBYnNvbHV0ZVBvaW50KTsKQEAgLTI2OTMsNTcgKzI2MzcsNyBA
QCBSZW5kZXJCb3hSZWdpb25JbmZvKiBSZW5kZXJCb3g6OnJlbmRlckJvCiAgICAgaWYgKGJveElu
Zm8gJiYgY2FjaGVGbGFnID09IENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbykKICAgICAgICAgcmV0
dXJuIGJveEluZm87CiAKLSAgICAvLyBObyBjYWNoZWQgdmFsdWUgd2FzIGZvdW5kLCBzbyB3ZSBo
YXZlIHRvIGNvbXB1dGUgb3VyIGluc2V0cyBpbiB0aGlzIHJlZ2lvbi4KLSAgICAvLyBGSVhNRTog
Rm9yIG5vdyB3ZSBsaW1pdCB0aGlzIGNvbXB1dGF0aW9uIHRvIG5vcm1hbCBSZW5kZXJCbG9ja3Mu
IEZ1dHVyZSBwYXRjaGVzIHdpbGwgZXhwYW5kCi0gICAgLy8gc3VwcG9ydCB0byBjb3ZlciBhbGwg
Ym94ZXMuCi0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKTsKLSAgICBpZiAoaXNSZW5kZXJGbG93VGhyZWFkKCkgfHwgIWlzPFJlbmRl
ck5hbWVkRmxvd1RocmVhZD4oZmxvd1RocmVhZCkgfHwgIWNhbkhhdmVCb3hJbmZvSW5SZWdpb24o
KSB8fCBmbG93VGhyZWFkLT5zdHlsZSgpLndyaXRpbmdNb2RlKCkgIT0gc3R5bGUoKS53cml0aW5n
TW9kZSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIExvZ2ljYWxFeHRlbnRDb21w
dXRlZFZhbHVlcyBjb21wdXRlZFZhbHVlczsKLSAgICBjb21wdXRlTG9naWNhbFdpZHRoSW5SZWdp
b24oY29tcHV0ZWRWYWx1ZXMsIHJlZ2lvbik7Ci0KLSAgICAvLyBOb3cgZGV0ZXJtaW5lIHRoZSBp
bnNldHMgYmFzZWQgb2ZmIHdoZXJlIHRoaXMgb2JqZWN0IGlzIHN1cHBvc2VkIHRvIGJlIHBvc2l0
aW9uZWQuCi0gICAgUmVuZGVyQmxvY2smIGNiID0gKmNvbnRhaW5pbmdCbG9jaygpOwotICAgIFJl
bmRlclJlZ2lvbiogY2xhbXBlZENvbnRhaW5pbmdCbG9ja1JlZ2lvbiA9IGNiLmNsYW1wVG9TdGFy
dEFuZEVuZFJlZ2lvbnMocmVnaW9uKTsKLSAgICBSZW5kZXJCb3hSZWdpb25JbmZvKiBjb250YWlu
aW5nQmxvY2tJbmZvID0gY2IucmVuZGVyQm94UmVnaW9uSW5mbyhjbGFtcGVkQ29udGFpbmluZ0Js
b2NrUmVnaW9uKTsKLSAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aCA9
IGNiLmxvZ2ljYWxXaWR0aCgpOwotICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoSW5SZWdpb24gPSBjb250YWluaW5nQmxvY2tJbmZvID8gY29udGFpbmluZ0Jsb2NrSW5m
by0+bG9naWNhbFdpZHRoKCkgOiBjb250YWluaW5nQmxvY2tMb2dpY2FsV2lkdGg7Ci0gICAgCi0g
ICAgTGF5b3V0VW5pdCBtYXJnaW5TdGFydEluUmVnaW9uID0gY29tcHV0ZWRWYWx1ZXMubV9tYXJn
aW5zLm1fc3RhcnQ7Ci0gICAgTGF5b3V0VW5pdCBzdGFydE1hcmdpbkRlbHRhID0gbWFyZ2luU3Rh
cnRJblJlZ2lvbiAtIG1hcmdpblN0YXJ0KCk7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGhJ
blJlZ2lvbiA9IGNvbXB1dGVkVmFsdWVzLm1fZXh0ZW50OwotICAgIExheW91dFVuaXQgbG9naWNh
bExlZnRJblJlZ2lvbiA9IGNvbXB1dGVkVmFsdWVzLm1fcG9zaXRpb247Ci0gICAgTGF5b3V0VW5p
dCB3aWR0aERlbHRhID0gbG9naWNhbFdpZHRoSW5SZWdpb24gLSBsb2dpY2FsV2lkdGgoKTsKLSAg
ICBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0RGVsdGEgPSBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSA/
IGxvZ2ljYWxMZWZ0SW5SZWdpb24gLSBsb2dpY2FsTGVmdCgpIDogc3RhcnRNYXJnaW5EZWx0YTsK
LSAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodEluUmVnaW9uID0gY29udGFpbmluZ0Jsb2NrTG9n
aWNhbFdpZHRoSW5SZWdpb24gLSAobG9naWNhbExlZnRJblJlZ2lvbiArIGxvZ2ljYWxXaWR0aElu
UmVnaW9uKTsKLSAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxSaWdodCA9IGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aCAtIChsb2dpY2FsTGVmdCgpICsgbG9naWNhbFdpZHRoKCkpOwotICAgIExh
eW91dFVuaXQgbG9naWNhbFJpZ2h0RGVsdGEgPSBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSA/IGxv
Z2ljYWxSaWdodEluUmVnaW9uIC0gb2xkTG9naWNhbFJpZ2h0IDogc3RhcnRNYXJnaW5EZWx0YTsK
LQotICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAwOwotICAgIAotICAgIGlmICgh
aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgYXZvaWRzRmxvYXRzKCkgJiYgY2IuY29udGFpbnNG
bG9hdHMoKSkgewotICAgICAgICBMYXlvdXRVbml0IHN0YXJ0UG9zaXRpb25EZWx0YSA9IGNiLmNv
bXB1dGVTdGFydFBvc2l0aW9uRGVsdGFGb3JDaGlsZEF2b2lkaW5nRmxvYXRzKCp0aGlzLCBtYXJn
aW5TdGFydEluUmVnaW9uLCByZWdpb24pOwotICAgICAgICBpZiAoY2Iuc3R5bGUoKS5pc0xlZnRU
b1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgICAgICBsb2dpY2FsTGVmdERlbHRhICs9IHN0YXJ0
UG9zaXRpb25EZWx0YTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9naWNhbFJpZ2h0RGVs
dGEgKz0gc3RhcnRQb3NpdGlvbkRlbHRhOwotICAgIH0KLQotICAgIGlmIChjYi5zdHlsZSgpLmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgbG9naWNhbExlZnRPZmZzZXQgKz0gbG9n
aWNhbExlZnREZWx0YTsKLSAgICBlbHNlCi0gICAgICAgIGxvZ2ljYWxMZWZ0T2Zmc2V0IC09ICh3
aWR0aERlbHRhICsgbG9naWNhbFJpZ2h0RGVsdGEpOwotICAgIAotICAgIExheW91dFVuaXQgbG9n
aWNhbFJpZ2h0T2Zmc2V0ID0gbG9naWNhbFdpZHRoKCkgLSAobG9naWNhbExlZnRPZmZzZXQgKyBs
b2dpY2FsV2lkdGhJblJlZ2lvbik7Ci0gICAgYm9vbCBpc1NoaWZ0ZWQgPSAoY29udGFpbmluZ0Js
b2NrSW5mbyAmJiBjb250YWluaW5nQmxvY2tJbmZvLT5pc1NoaWZ0ZWQoKSkKLSAgICAgICAgICAg
IHx8IChzdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSAmJiBsb2dpY2FsTGVmdE9mZnNl
dCkKLSAgICAgICAgICAgIHx8ICghc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgJiYg
bG9naWNhbFJpZ2h0T2Zmc2V0KTsKLQotICAgIC8vIEZJWE1FOiBBbHRob3VnaCBpdCdzIHVubGlr
ZWx5LCB0aGVzZSBib3hlcyBjYW4gZ28gb3V0c2lkZSBvdXIgYm91bmRzLCBhbmQgc28gd2Ugd2ls
bCBuZWVkIHRvIGluY29ycG9yYXRlIHRoZW0gaW50byBvdmVyZmxvdy4KLSAgICBpZiAoY2FjaGVG
bGFnID09IENhY2hlUmVuZGVyQm94UmVnaW9uSW5mbykKLSAgICAgICAgcmV0dXJuIHJlZ2lvbi0+
c2V0UmVuZGVyQm94UmVnaW9uSW5mbyh0aGlzLCBsb2dpY2FsTGVmdE9mZnNldCwgbG9naWNhbFdp
ZHRoSW5SZWdpb24sIGlzU2hpZnRlZCk7Ci0gICAgcmV0dXJuIG5ldyBSZW5kZXJCb3hSZWdpb25J
bmZvKGxvZ2ljYWxMZWZ0T2Zmc2V0LCBsb2dpY2FsV2lkdGhJblJlZ2lvbiwgaXNTaGlmdGVkKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAogc3RhdGljIGJvb2wgc2hvdWxkRmxpcEJlZm9yZUFm
dGVyTWFyZ2lucyhjb25zdCBSZW5kZXJTdHlsZSYgY29udGFpbmluZ0Jsb2NrU3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiBjaGlsZFN0eWxlKQpAQCAtMzE3OCw3ICszMDcyLDcgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCb3g6OmNvbXB1dGVSZXBsYWNlZExvZwogICAgICAgICAgICAgYXV0byogY29udGFp
bmVyID0gaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgPyB0aGlzLT5jb250YWluZXIoKSA6IGNvbnRh
aW5pbmdCbG9jaygpOwogICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5lciAmJiBjb250YWluZXIt
PmlzQW5vbnltb3VzKCkpIHsKICAgICAgICAgICAgICAgICAvLyBTdG9wIGF0IHJlbmRlcmluZyBj
b250ZXh0IHJvb3QuCi0gICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlclZpZXc+KCpjb250YWlu
ZXIpIHx8IGlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKmNvbnRhaW5lcikpCisgICAgICAgICAg
ICAgICAgaWYgKGlzPFJlbmRlclZpZXc+KCpjb250YWluZXIpKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5p
bmdCbG9jaygpOwogICAgICAgICAgICAgfQpAQCAtMzM0Miw5ICszMjM2LDYgQEAgTGF5b3V0VW5p
dCBSZW5kZXJCb3g6OmNvbnRhaW5pbmdCbG9ja0xvZwogICAgICAgICAgICAgcmV0dXJuIGRvd25j
YXN0PFJlbmRlckJveD4oY29udGFpbmluZ0Jsb2NrKS5jbGllbnRMb2dpY2FsV2lkdGgoKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChpc0ZpeGVkUG9zaXRpb24gJiYgaXM8UmVuZGVyTmFtZWRG
bG93VGhyZWFkPihjb250YWluaW5nQmxvY2spKQotICAgICAgICAgICAgcmV0dXJuIGNvbnRhaW5p
bmdCbG9jay52aWV3KCkuY2xpZW50TG9naWNhbFdpZHRoKCk7Ci0KICAgICAgICAgaWYgKCFpczxS
ZW5kZXJCbG9jaz4oY29udGFpbmluZ0Jsb2NrKSkKICAgICAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJCb3g+KGNvbnRhaW5pbmdCbG9jaykuY2xpZW50TG9naWNhbFdpZHRoKCk7CiAKQEAg
LTM0MDgsMTEgKzMyOTksOCBAQCBMYXlvdXRVbml0IFJlbmRlckJveDo6Y29udGFpbmluZ0Jsb2Nr
TG9nCiAgICAgICAgIGNvbnN0IFJlbmRlckJsb2NrJiBjYiA9IGlzPFJlbmRlckJsb2NrPihjb250
YWluaW5nQmxvY2spID8gZG93bmNhc3Q8UmVuZGVyQmxvY2s+KGNvbnRhaW5pbmdCbG9jaykgOiAq
Y29udGFpbmluZ0Jsb2NrLmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICBMYXlvdXRVbml0IHJl
c3VsdCA9IGNiLmNsaWVudExvZ2ljYWxIZWlnaHQoKTsKICAgICAgICAgUmVuZGVyRmxvd1RocmVh
ZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgaWYg
KGZsb3dUaHJlYWQgJiYgaXM8UmVuZGVyRmxvd1RocmVhZD4oY29udGFpbmluZ0Jsb2NrKSAmJiBm
bG93VGhyZWFkLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID09IGNvbnRhaW5pbmdCbG9jay5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoaXM8UmVuZGVyTmFt
ZWRGbG93VGhyZWFkPihjb250YWluaW5nQmxvY2spICYmIGlzRml4ZWRQb3NpdGlvbikKLSAgICAg
ICAgICAgICAgICByZXR1cm4gY29udGFpbmluZ0Jsb2NrLnZpZXcoKS5jbGllbnRMb2dpY2FsSGVp
Z2h0KCk7CisgICAgICAgIGlmIChmbG93VGhyZWFkICYmIGlzPFJlbmRlckZsb3dUaHJlYWQ+KGNv
bnRhaW5pbmdCbG9jaykgJiYgZmxvd1RocmVhZC0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA9
PSBjb250YWluaW5nQmxvY2suaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAg
IHJldHVybiBkb3duY2FzdDxSZW5kZXJGbG93VGhyZWFkPihjb250YWluaW5nQmxvY2spLmNvbnRl
bnRMb2dpY2FsSGVpZ2h0T2ZGaXJzdFJlZ2lvbigpOwotICAgICAgICB9CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gMjIyMjU5KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRv
ci5oIgogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oIgogI2luY2x1ZGUg
IlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93VGhy
ZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZVJvdy5oIgpAQCAtNDExLDcgKzQxMCw3IEBAIExheW91
dFBvaW50IFJlbmRlckJveE1vZGVsT2JqZWN0OjphZGp1c3QKICAgICAgICAgICAgIC8vIFNpbmNl
IHdlIHdpbGwgYnlwYXNzIHRoZSBib2R54oCZcyByZW5kZXJlciBhbnl3YXksIGp1c3QgZW5kIHRo
ZSBsb29wIGlmIHdlIGVuY291bnRlciBhIHJlZ2lvbiBmbG93IChuYW1lZCBmbG93IHRocmVhZCku
CiAgICAgICAgICAgICAvLyBTZWUgaHR0cDovL2Rldi53My5vcmcvY3Nzd2cvY3NzLXJlZ2lvbnMv
I2Nzc29tdmlldy1vZmZzZXQtYXR0cmlidXRlcwogICAgICAgICAgICAgYXV0byogYW5jZXN0b3Ig
PSBwYXJlbnQoKTsKLSAgICAgICAgICAgIHdoaWxlIChhbmNlc3RvciAhPSBvZmZzZXRQYXJlbnQg
JiYgIWlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKmFuY2VzdG9yKSkgeworICAgICAgICAgICAg
d2hpbGUgKGFuY2VzdG9yICE9IG9mZnNldFBhcmVudCkgewogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXaGF0IGFyZSB3ZSBzdXBwb3NlZCB0byBkbyBpbnNpZGUgU1ZHIGNvbnRlbnQ/CiAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzPFJlbmRlck11bHRpQ29sdW1uRmxv
d1RocmVhZD4oKmFuY2VzdG9yKSkgewpAQCAtNDI3LDExICs0MjYsNyBAQCBMYXlvdXRQb2ludCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6YWRqdXN0CiAgICAgICAgICAgICAgICAgYW5jZXN0b3IgPSBh
bmNlc3Rvci0+cGFyZW50KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIENvbXB1dGUgdGhlIG9mZnNldCBwb3NpdGlvbiBmb3IgZWxlbWVudHMgaW5zaWRlIG5h
bWVkIGZsb3cgdGhyZWFkcyBmb3Igd2hpY2ggdGhlIG9mZnNldFBhcmVudCB3YXMgdGhlIGJvZHku
Ci0gICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExNTg5OQotICAgICAgICAgICAgaWYgKGlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oKmFu
Y2VzdG9yKSkKLSAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludCA9IGRvd25jYXN0PFJlbmRl
ck5hbWVkRmxvd1RocmVhZD4oKmFuY2VzdG9yKS5hZGp1c3RlZFBvc2l0aW9uUmVsYXRpdmVUb09m
ZnNldFBhcmVudCgqdGhpcywgcmVmZXJlbmNlUG9pbnQpOwotICAgICAgICAgICAgZWxzZSBpZiAo
aXM8UmVuZGVyQm94Pigqb2Zmc2V0UGFyZW50KSAmJiBvZmZzZXRQYXJlbnQtPmlzQm9keSgpICYm
ICFvZmZzZXRQYXJlbnQtPmlzUG9zaXRpb25lZCgpKQorICAgICAgICAgICAgaWYgKGlzPFJlbmRl
ckJveD4oKm9mZnNldFBhcmVudCkgJiYgb2Zmc2V0UGFyZW50LT5pc0JvZHkoKSAmJiAhb2Zmc2V0
UGFyZW50LT5pc1Bvc2l0aW9uZWQoKSkKICAgICAgICAgICAgICAgICByZWZlcmVuY2VQb2ludC5t
b3ZlQnkoZG93bmNhc3Q8UmVuZGVyQm94Pigqb2Zmc2V0UGFyZW50KS50b3BMZWZ0TG9jYXRpb24o
KSk7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDYgQEAK
ICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCiAjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKLSNpbmNsdWRlICJGbG93VGhyZWFkQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKQEAgLTQ4LDYgKzQ3LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJEZXNjZW5k
YW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgorI2luY2x1ZGUg
IlJlbmRlckZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUg
IlJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5l
LmgiCkBAIC01OSw3ICs1OSw2IEBACiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogI2luY2x1ZGUgIlJl
bmRlckxpc3RNYXJrZXIuaCIKICNlbmRpZgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVh
ZC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2Fw
dGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgpAQCAtMTExMSwxNSArMTExMCw2
IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6d2lsbEJlRGVzdHJveWVkKCkKIAogICAgIFJlbmRlck9i
amVjdDo6d2lsbEJlRGVzdHJveWVkKCk7CiAKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgaWYg
KCFyZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSAmJiB2aWV3KCkuaGFzUmVuZGVyTmFtZWRGbG93
VGhyZWFkcygpKSB7Ci0gICAgICAgIC8vIEFmdGVyIHJlbW92ZSwgdGhlIG9iamVjdCBhbmQgdGhl
IGFzc29jaWF0ZWQgaW5mb3JtYXRpb24gc2hvdWxkIG5vdCBiZSBpbiBhbnkgZmxvdyB0aHJlYWQu
Ci0gICAgICAgIGZvciAoYXV0byYgZmxvd1RocmVhZCA6ICp2aWV3KCkuZmxvd1RocmVhZENvbnRy
b2xsZXIoKS5yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VCghZmxvd1RocmVhZC0+aGFzQ2hpbGRJbmZvKHRoaXMpKTsKLSAgICAgICAgfQotICAgIH0KLSNl
bmRpZgotCiAgICAgY2xlYXJMYXlvdXRSb290SWZOZWVkZWQoKTsKIAogICAgIGlmIChoYXNJbml0
aWFsaXplZFN0eWxlKCkpIHsKQEAgLTExODEsMjYgKzExNzEsNyBAQCB2b2lkIFJlbmRlckVsZW1l
bnQ6OnNldE5lZWRzU2ltcGxpZmllZE5vCiAKIFJlbmRlckVsZW1lbnQqIFJlbmRlckVsZW1lbnQ6
OmhvdmVyQW5jZXN0b3IoKSBjb25zdAogewotICAgIC8vIFdoZW4gc2VhcmNoaW5nIGZvciB0aGUg
aG92ZXIgYW5jZXN0b3IgYW5kIGVuY291bnRlcmluZyBhIG5hbWVkIGZsb3cgdGhyZWFkLAotICAg
IC8vIHRoZSBzZWFyY2ggd2lsbCBjb250aW51ZSB3aXRoIHRoZSBET00gYW5jZXN0b3Igb2YgdGhl
IHRvcC1tb3N0IGVsZW1lbnQKLSAgICAvLyBpbiB0aGUgbmFtZWQgZmxvdyB0aHJlYWQuCi0gICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTE3NDkKLSAg
ICBSZW5kZXJFbGVtZW50KiBob3ZlckFuY2VzdG9yID0gcGFyZW50KCk7Ci0KLSAgICAvLyBTa2lw
IGFub255bW91cyBibG9ja3MgZGlyZWN0bHkgZmxvd2VkIGludG8gZmxvdyB0aHJlYWRzIGFzIGl0
IHdvdWxkCi0gICAgLy8gcHJldmVudCB1cyBmcm9tIGNvbnRpbnVpbmcgdGhlIHNlYXJjaCBvbiB0
aGUgRE9NIHRyZWUgd2hlbiByZWFjaGluZyB0aGUgbmFtZWQgZmxvdyB0aHJlYWQuCi0gICAgaWYg
KGhvdmVyQW5jZXN0b3IgJiYgaG92ZXJBbmNlc3Rvci0+aXNBbm9ueW1vdXNCbG9jaygpICYmIGhv
dmVyQW5jZXN0b3ItPnBhcmVudCgpICYmIGhvdmVyQW5jZXN0b3ItPnBhcmVudCgpLT5pc1JlbmRl
ck5hbWVkRmxvd1RocmVhZCgpKQotICAgICAgICBob3ZlckFuY2VzdG9yID0gaG92ZXJBbmNlc3Rv
ci0+cGFyZW50KCk7Ci0KLSAgICBpZiAoaG92ZXJBbmNlc3RvciAmJiBob3ZlckFuY2VzdG9yLT5p
c1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgIGhvdmVyQW5jZXN0b3IgPSBudWxs
cHRyOwotICAgICAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkgewot
ICAgICAgICAgICAgaWYgKGF1dG8gcGFyZW50ID0gZWxlbWVudC0+cGFyZW50Tm9kZSgpKQotICAg
ICAgICAgICAgICAgIGhvdmVyQW5jZXN0b3IgPSBwYXJlbnQtPnJlbmRlcmVyKCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICByZXR1cm4gaG92ZXJBbmNlc3RvcjsKKyAgICByZXR1cm4gcGFyZW50
KCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwYWludFBoYXNlKFJlbmRlckVsZW1lbnQmIGVs
ZW1lbnQsIFBhaW50UGhhc2UgcGhhc2UsIFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgY2hpbGRQb2ludCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJGbG93VGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRmxvd1RocmVhZC5jcHAJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQu
aCIKIAotI2luY2x1ZGUgIkZsb3dUaHJlYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlcXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5saW5l
RWxlbWVudEJveC5oIgpAQCAtNDEsNyArNDAsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNp
bmNsdWRlICJSZW5kZXJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKQEAgLTQ0NSw3ICs0NDMsNyBAQCBMYXlvdXRQ
b2ludCBSZW5kZXJGbG93VGhyZWFkOjphZGp1c3RlZFBvCiAgICAgICAgIC8vIGFuZCBpZiBzbywg
ZHJvcCB0aGUgb2JqZWN0J3MgdG9wIHBvc2l0aW9uICh3aGljaCB3YXMgY29tcHV0ZWQgcmVsYXRp
dmUgdG8gaXRzIGNvbnRhaW5pbmcgYmxvY2sKICAgICAgICAgLy8gYW5kIGlzIG5vIGxvbmdlciB2
YWxpZCkgYW5kIHJlY29tcHV0ZSBpdCB1c2luZyB0aGUgcmVnaW9uIGluIHdoaWNoIGl0IGZsb3dz
IGFzIHJlZmVyZW5jZS4KICAgICAgICAgYm9vbCB3YXNDb21wdXRlZFJlbGF0aXZlVG9PdGhlclJl
Z2lvbiA9IGZhbHNlOwotICAgICAgICB3aGlsZSAob2JqQ29udGFpbmluZ0Jsb2NrICYmICFpczxS
ZW5kZXJWaWV3Pigqb2JqQ29udGFpbmluZ0Jsb2NrKSAmJiAhb2JqQ29udGFpbmluZ0Jsb2NrLT5p
c1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7CisgICAgICAgIHdoaWxlIChvYmpDb250YWluaW5n
QmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpvYmpDb250YWluaW5nQmxvY2spKSB7CiAgICAgICAg
ICAgICAvLyBDaGVjayBpZiB0aGlzIG9iamVjdCBpcyBpbiBhIGRpZmZlcmVudCByZWdpb24uCiAg
ICAgICAgICAgICBSZW5kZXJSZWdpb24qIHBhcmVudFN0YXJ0UmVnaW9uID0gbnVsbHB0cjsKICAg
ICAgICAgICAgIFJlbmRlclJlZ2lvbiogcGFyZW50RW5kUmVnaW9uID0gbnVsbHB0cjsKQEAgLTEx
MTcsOCArMTExNSw2IEBAIGJvb2wgUmVuZGVyRmxvd1RocmVhZDo6YWRkRm9yY2VkUmVnaW9uQnIK
IAogdm9pZCBSZW5kZXJGbG93VGhyZWFkOjppbmNyZW1lbnRBdXRvTG9naWNhbEhlaWdodFJlZ2lv
bnMoKQogewotICAgIGlmICghbV9hdXRvTG9naWNhbEhlaWdodFJlZ2lvbnNDb3VudCkKLSAgICAg
ICAgdmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuaW5jcmVtZW50Rmxvd1RocmVhZHNXaXRo
QXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zKCk7CiAgICAgKyttX2F1dG9Mb2dpY2FsSGVpZ2h0UmVn
aW9uc0NvdW50OwogfQogCkBAIC0xMTI2LDggKzExMjIsNiBAQCB2b2lkIFJlbmRlckZsb3dUaHJl
YWQ6OmRlY3JlbWVudEF1dG9Mb2dpCiB7CiAgICAgQVNTRVJUKG1fYXV0b0xvZ2ljYWxIZWlnaHRS
ZWdpb25zQ291bnQgPiAwKTsKICAgICAtLW1fYXV0b0xvZ2ljYWxIZWlnaHRSZWdpb25zQ291bnQ7
Ci0gICAgaWYgKCFtX2F1dG9Mb2dpY2FsSGVpZ2h0UmVnaW9uc0NvdW50KQotICAgICAgICB2aWV3
KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5kZWNyZW1lbnRGbG93VGhyZWFkc1dpdGhBdXRvTG9n
aWNhbEhlaWdodFJlZ2lvbnMoKTsKIH0KIAogdm9pZCBSZW5kZXJGbG93VGhyZWFkOjpjb2xsZWN0
TGF5ZXJGcmFnbWVudHMoTGF5ZXJGcmFnbWVudHMmIGxheWVyRnJhZ21lbnRzLCBjb25zdCBMYXlv
dXRSZWN0JiBsYXllckJvdW5kaW5nQm94LCBjb25zdCBMYXlvdXRSZWN0JiBkaXJ0eVJlY3QpCkBA
IC0xNDA1LDMyICsxMzk5LDYgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25zT3Zl
cmZsbwogICAgICAgICBMYXlvdXRSZWN0IGNoaWxkTGF5b3V0T3ZlcmZsb3dSZWN0ID0gcmVnaW9u
LT5sYXlvdXRPdmVyZmxvd1JlY3RGb3JCb3hGb3JQcm9wYWdhdGlvbihjaGlsZCk7CiAgICAgICAg
IGNoaWxkTGF5b3V0T3ZlcmZsb3dSZWN0Lm1vdmUoZGVsdGEpOwogICAgICAgICAKLSAgICAgICAg
Ly8gV2hlbiBwcm9wYWdhdGluZyB0aGUgbGF5b3V0IG92ZXJmbG93IHRvIHRoZSBmbG93IHRocmVh
ZCBvYmplY3QsIG1ha2Ugc3VyZSB0byBpbmNsdWRlCi0gICAgICAgIC8vIHRoZSBsb2dpY2FsIGJv
dHRvbSBwYWRkaW5nIG9mIHRoZSBzY3JvbGxhYmxlIHJlZ2lvbiBhbmQgdGhlIGJvdHRvbSBtYXJn
aW4gb2YgdGhlIGZsb3dlZCBlbGVtZW50LgotICAgICAgICAvLyBJbiBvcmRlciB0byBiZWhhdmUg
aW4gYSBzaW1pbGFyIG1hbm5lciB0byB0aGUgbm9uLXJlZ2lvbnMgY2FzZSwgY29udGVudCBvdmVy
Zmxvd2luZyB0aGUgYm94Ci0gICAgICAgIC8vIGZsb3dlZCBpbnRvIHRoZSByZWdpb24gbXVzdCBi
ZSBwYWludGVkIG9uIHRvcCBvZiB0aGUgcmVnaW9uJ3MgcGFkZGluZyBhbmQgdGhlIGJveCdzIG1h
cmdpbi4KLSAgICAgICAgLy8gU2VlIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGlj
L3d3dy1zdHlsZS8yMDE0SmFuLzAwODkuaHRtbAotICAgICAgICBpZiAoaXM8UmVuZGVyTmFtZWRG
bG93VGhyZWFkPigqYm94KSkgewotICAgICAgICAgICAgQVNTRVJUKGJveCA9PSB0aGlzKTsKLSAg
ICAgICAgICAgIFJlbmRlckJsb2NrRmxvdyYgZnJhZ21lbnRDb250YWluZXIgPSBkb3duY2FzdDxS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbikuZnJhZ21lbnRDb250YWluZXIoKTsKLSAg
ICAgICAgICAgIExheW91dFVuaXQgc3BhY2luZ0FmdGVyTGF5b3V0ID0gZnJhZ21lbnRDb250YWlu
ZXIucGFkZGluZ0FmdGVyKCkgKyBjaGlsZC0+bWFyZ2luQWZ0ZXIoKTsKLSAgICAgICAgICAgIGlm
IChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdt
ZW50Q29udGFpbmVyLnNjcm9sbHNPdmVyZmxvd1koKSkgewotICAgICAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IGxheW91dE1heExvZ2ljYWxZID0gcmVnaW9uLT5yZWN0Rmxvd1BvcnRpb25Gb3JC
b3goY2hpbGQsIGNoaWxkLT5mcmFtZVJlY3QoKSkubWF4WSgpICsgc3BhY2luZ0FmdGVyTGF5b3V0
OwotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG1heFlEaWZmID0gbGF5b3V0TWF4TG9n
aWNhbFkgLSBjaGlsZExheW91dE92ZXJmbG93UmVjdC5tYXhZKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtYXhZRGlmZiA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExheW91
dE92ZXJmbG93UmVjdC5leHBhbmQoMCwgbWF4WURpZmYpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50Q29udGFpbmVy
LnNjcm9sbHNPdmVyZmxvd1goKSkgewotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxh
eW91dE1heExvZ2ljYWxZID0gcmVnaW9uLT5yZWN0Rmxvd1BvcnRpb25Gb3JCb3goY2hpbGQsIGNo
aWxkLT5mcmFtZVJlY3QoKSkubWF4WCgpICsgc3BhY2luZ0FmdGVyTGF5b3V0OwotICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IG1heFlEaWZmID0gbGF5b3V0TWF4TG9naWNhbFkgLSBjaGls
ZExheW91dE92ZXJmbG93UmVjdC5tYXhYKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtYXhZ
RGlmZiA+IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZExheW91dE92ZXJmbG93UmVj
dC5leHBhbmQobWF4WURpZmYsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICAKICAgICAgICAgcmVnaW9uLT5hZGRMYXlvdXRPdmVyZmxvd0Zv
ckJveChib3gsIGNoaWxkTGF5b3V0T3ZlcmZsb3dSZWN0KTsKIAogICAgICAgICBpZiAoY2hpbGQt
Pmhhc1NlbGZQYWludGluZ0xheWVyKCkgfHwgYm94LT5oYXNPdmVyZmxvd0NsaXAoKSkgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDIy
MjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxMyArMzIsMTMgQEAKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKICNpbmNsdWRlICJSZW5kZXJDaGlsZEl0ZXJhdG9y
LmgiCisjaW5jbHVkZSAiUmVuZGVyRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlckZ1bGxT
Y3JlZW4uaCIKICNpbmNsdWRlICJSZW5kZXJHZW9tZXRyeU1hcC5oIgogI2luY2x1ZGUgIlJlbmRl
ckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJM
aW5lQnJlYWsuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyTmFtZWRGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKICNpbmNsdWRl
ICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTIyMywxNCArMjIz
LDEyIEBAIHZvaWQgUmVuZGVySW5saW5lOjp1cGRhdGVBbHdheXNDcmVhdGVMaW4KICAgICBhdXRv
KiBwYXJlbnRTdHlsZSA9ICZwYXJlbnQoKS0+c3R5bGUoKTsKICAgICBSZW5kZXJJbmxpbmUqIHBh
cmVudFJlbmRlcklubGluZSA9IGlzPFJlbmRlcklubGluZT4oKnBhcmVudCgpKSA/IGRvd25jYXN0
PFJlbmRlcklubGluZT4ocGFyZW50KCkpIDogbnVsbHB0cjsKICAgICBib29sIGNoZWNrRm9udHMg
PSBkb2N1bWVudCgpLmluTm9RdWlya3NNb2RlKCk7Ci0gICAgUmVuZGVyRmxvd1RocmVhZCogZmxv
d1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKICAgICBib29sIGFsd2F5c0Ny
ZWF0ZUxpbmVCb3hlcyA9IChwYXJlbnRSZW5kZXJJbmxpbmUgJiYgcGFyZW50UmVuZGVySW5saW5l
LT5hbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKICAgICAgICAgfHwgKHBhcmVudFJlbmRlcklubGlu
ZSAmJiBwYXJlbnRTdHlsZS0+dmVydGljYWxBbGlnbigpICE9IEJBU0VMSU5FKQogICAgICAgICB8
fCBzdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSAhPSBCQVNFTElORQogICAgICAgICB8fCBzdHlsZSgp
LnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZQogICAgICAgICB8fCAo
Y2hlY2tGb250cyAmJiAoIXBhcmVudFN0eWxlLT5mb250Q2FzY2FkZSgpLmZvbnRNZXRyaWNzKCku
aGFzSWRlbnRpY2FsQXNjZW50RGVzY2VudEFuZExpbmVHYXAoc3R5bGUoKS5mb250Q2FzY2FkZSgp
LmZvbnRNZXRyaWNzKCkpCi0gICAgICAgIHx8IHBhcmVudFN0eWxlLT5saW5lSGVpZ2h0KCkgIT0g
c3R5bGUoKS5saW5lSGVpZ2h0KCkpKQotICAgICAgICB8fCAoZmxvd1RocmVhZCAmJiBmbG93VGhy
ZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKTsgLy8gRklYTUU6IEVuYWJsZSB0aGUgb3B0
aW1pemF0aW9uIG9uY2Ugd2UgbWFrZSBvdmVyZmxvdyBjb21wdXRhdGlvbiBmb3IgY3VsbGVkIGlu
bGluZXMgaW4gcmVnaW9ucy4KKyAgICAgICAgfHwgcGFyZW50U3R5bGUtPmxpbmVIZWlnaHQoKSAh
PSBzdHlsZSgpLmxpbmVIZWlnaHQoKSkpOwogCiAgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94
ZXMgJiYgY2hlY2tGb250cyAmJiB2aWV3KCkudXNlc0ZpcnN0TGluZVJ1bGVzKCkpIHsKICAgICAg
ICAgLy8gSGF2ZSB0byBjaGVjayB0aGUgZmlyc3QgbGluZSBzdHlsZSBhcyB3ZWxsLgpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAyMjIyNTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw2IEBACiAjaW5jbHVkZSAiRmxvYXRQb2ludDNELmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiRmxvYXRSb3VuZGVkUmVjdC5oIgotI2luY2x1ZGUg
IkZsb3dUaHJlYWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgpAQCAtOTgsNyArOTcs
NiBAQAogI2luY2x1ZGUgIlJlbmRlck1hcnF1ZWUuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5oIgot
I2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lv
bi5oIgogI2luY2x1ZGUgIlJlbmRlclJlcGxpY2EuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNv
dXJjZUNsaXBwZXIuaCIKQEAgLTQyNTEsMzEgKzQyNDksNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wg
Y29tcGFyZVpJbmRleChSZW5kZXJMCiAgICAgcmV0dXJuIGZpcnN0LT56SW5kZXgoKSA8IHNlY29u
ZC0+ekluZGV4KCk7CiB9CiAKLS8vIFBhaW50IHRoZSBsYXllcnMgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBmaXhlZCBwb3NpdGlvbmVkIGVsZW1lbnRzIGluIG5hbWVkIGZsb3dzLgotLy8gVGhlc2UgbGF5
ZXJzIHNob3VsZCBub3QgYmUgcGFpbnRlZCBpbiBhIHNpbWlsYXIgd2F5IGFzIHRoZSBvdGhlciBl
bGVtZW50cyBjb2xsZWN0ZWQgaW4KLS8vIG5hbWVkIGZsb3dzIC0gcmVnaW9ucyAtPiBuYW1lZCBm
bG93cyAtIHNpbmNlIHdlIGRvIG5vdCB3YW50IHRoZW0gdG8gYmUgY2xpcHBlZCB0byB0aGUKLS8v
IHJlZ2lvbnMgdmlld3BvcnQuCi12b2lkIFJlbmRlckxheWVyOjpwYWludEZpeGVkTGF5ZXJzSW5O
YW1lZEZsb3dzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0lu
Zm8mIHBhaW50aW5nSW5mbywgUGFpbnRMYXllckZsYWdzIHBhaW50RmxhZ3MpCi17Ci0gICAgaWYg
KCFpc1JlbmRlclZpZXdMYXllcigpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhl
IG5hbWVkIGZsb3dzIGZvciB0aGUgdmlldwotICAgIGlmICghcmVuZGVyZXIoKS52aWV3KCkuaGFz
UmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbnN1
cmUgdGhlIGZsb3cgdGhyZWFkcyBoaWVyYXJjaHkgaXMgdXAtdG8tZGF0ZSBiZWZvcmUgdXNpbmcg
aXQuCi0gICAgcmVuZGVyZXIoKS52aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS51cGRhdGVO
YW1lZEZsb3dzTGF5ZXJMaXN0c0lmTmVlZGVkKCk7Ci0KLSAgICAvLyBDb2xsZWN0IHRoZSBmaXhl
ZCBsYXllcnMgaW4gYSBsaXN0IHRvIGJlIHBhaW50ZWQKLSAgICBWZWN0b3I8UmVuZGVyTGF5ZXIq
PiBmaXhlZExheWVyczsKLSAgICByZW5kZXJlcigpLnZpZXcoKS5mbG93VGhyZWFkQ29udHJvbGxl
cigpLmNvbGxlY3RGaXhlZFBvc2l0aW9uZWRMYXllcnMoZml4ZWRMYXllcnMpOwotCi0gICAgLy8g
UGFpbnQgdGhlIGxheWVycwotICAgIGZvciAoYXV0byogZml4ZWRMYXllciA6IGZpeGVkTGF5ZXJz
KQotICAgICAgICBmaXhlZExheWVyLT5wYWludExheWVyKGNvbnRleHQsIHBhaW50aW5nSW5mbywg
cGFpbnRGbGFncyk7Ci19Ci0KIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IExheWVyUGFpbnRpbmdJbmZvJiBwYWludGlu
Z0luZm8sIFBhaW50TGF5ZXJGbGFncyBwYWludEZsYWdzKQogewogICAgIEFTU0VSVChpc1NlbGZQ
YWludGluZ0xheWVyKCkgfHwgaGFzU2VsZlBhaW50aW5nTGF5ZXJEZXNjZW5kYW50KCkpOwpAQCAt
NDQxOCwxMyArNDM5MSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXJDb250ZW50cyhH
cmEKICAgICAgICAgCiAgICAgICAgICAgICAvLyBOb3cgd2FsayB0aGUgc29ydGVkIGxpc3Qgb2Yg
Y2hpbGRyZW4gd2l0aCBwb3NpdGl2ZSB6LWluZGljZXMuCiAgICAgICAgICAgICBwYWludExpc3Qo
cG9zWk9yZGVyTGlzdCgpLCBjdXJyZW50Q29udGV4dCwgbG9jYWxQYWludGluZ0luZm8sIGxvY2Fs
UGFpbnRGbGFncyk7Ci0KLSAgICAgICAgICAgIC8vIFBhaW50IHRoZSBmaXhlZCBlbGVtZW50cyBm
cm9tIGZsb3cgdGhyZWFkcy4KLSAgICAgICAgICAgIHBhaW50Rml4ZWRMYXllcnNJbk5hbWVkRmxv
d3MoY3VycmVudENvbnRleHQsIGxvY2FsUGFpbnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcmVnaW9uLCBwYWludCBp
dHMgY29udGVudHMgdmlhIHRoZSBmbG93IHRocmVhZCdzIGxheWVyLgotICAgICAgICAgICAgaWYg
KHNob3VsZFBhaW50Q29udGVudCkKLSAgICAgICAgICAgICAgICBwYWludEZsb3dUaHJlYWRJZlJl
Z2lvbkZvckZyYWdtZW50cyhsYXllckZyYWdtZW50cywgY3VycmVudENvbnRleHQsIGxvY2FsUGFp
bnRpbmdJbmZvLCBsb2NhbFBhaW50RmxhZ3MpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlz
UGFpbnRpbmdPdmVybGF5U2Nyb2xsYmFycyAmJiBoYXNTY3JvbGxiYXJzKCkpCkBAIC01MDUxLDUx
ICs1MDE3LDYgQEAgc3RhdGljIGJvb2wgaXNIaXRDYW5kaWRhdGUoY29uc3QgUmVuZGVyTAogICAg
IHJldHVybiB0cnVlOwogfQogCi1SZW5kZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RGaXhl
ZExheWVyc0luTmFtZWRGbG93cyhSZW5kZXJMYXllciogLypyb290TGF5ZXIqLywKLSAgICBjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAotICAgIGNv
bnN0IExheW91dFJlY3QmIGhpdFRlc3RSZWN0LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRl
c3RMb2NhdGlvbiwKLSAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9y
bVN0YXRlLCAKLSAgICBkb3VibGUqIHpPZmZzZXRGb3JEZXNjZW5kYW50cywgZG91YmxlKiB6T2Zm
c2V0LAotICAgIGNvbnN0IEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZSogdW5mbGF0dGVuZWRUcmFu
c2Zvcm1TdGF0ZSwKLSAgICBib29sIGRlcHRoU29ydERlc2NlbmRhbnRzKQotewotICAgIGlmICgh
aXNSZW5kZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAvLyBH
ZXQgdGhlIG5hbWVkIGZsb3dzIGZvciB0aGUgdmlldwotICAgIGlmICghcmVuZGVyZXIoKS52aWV3
KCkuaGFzUmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIFZlY3RvcjxSZW5kZXJMYXllcio+IGZpeGVkTGF5ZXJzOwotICAgIHJlbmRlcmVyKCku
dmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuY29sbGVjdEZpeGVkUG9zaXRpb25lZExheWVy
cyhmaXhlZExheWVycyk7Ci0KLSAgICAvLyBIaXQgdGVzdCB0aGUgbGF5ZXJzCi0gICAgUmVuZGVy
TGF5ZXIqIHJlc3VsdExheWVyID0gbnVsbHB0cjsKLSAgICBmb3IgKGludCBpID0gZml4ZWRMYXll
cnMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGZpeGVk
TGF5ZXIgPSBmaXhlZExheWVycy5hdChpKTsKLQotICAgICAgICBIaXRUZXN0UmVzdWx0IHRlbXBS
ZXN1bHQocmVzdWx0LmhpdFRlc3RMb2NhdGlvbigpKTsKLSAgICAgICAgUmVuZGVyTGF5ZXIqIGhp
dExheWVyID0gZml4ZWRMYXllci0+aGl0VGVzdExheWVyKGZpeGVkTGF5ZXItPnJlbmRlcmVyKCku
Zmxvd1RocmVhZENvbnRhaW5pbmdCbG9jaygpLT5sYXllcigpLCBudWxscHRyLCByZXF1ZXN0LCB0
ZW1wUmVzdWx0LAotICAgICAgICAgICAgaGl0VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwgZmFs
c2UsIHRyYW5zZm9ybVN0YXRlLCB6T2Zmc2V0Rm9yRGVzY2VuZGFudHMpOwotCi0gICAgICAgIC8v
IElmIGl0IGEgbGlzdC1iYXNlZCB0ZXN0LCB3ZSBjYW4gc2FmZWx5IGFwcGVuZCB0aGUgdGVtcG9y
YXJ5IHJlc3VsdCBzaW5jZSBpdCBtaWdodCBoYWQgaGl0Ci0gICAgICAgIC8vIG5vZGVzIGJ1dCBu
b3QgbmVjZXNzZXJpbHkgaGFkIGhpdExheWVyIHNldC4KLSAgICAgICAgQVNTRVJUKCFyZXN1bHQu
aXNSZWN0QmFzZWRUZXN0KCkgfHwgcmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkpOwotICAg
ICAgICBpZiAocmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkpCi0gICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHRlbXBSZXN1bHQsIHJlcXVlc3QpOwotCi0gICAgICAgIGlmIChpc0hpdENhbmRp
ZGF0ZShoaXRMYXllciwgZGVwdGhTb3J0RGVzY2VuZGFudHMsIHpPZmZzZXQsIHVuZmxhdHRlbmVk
VHJhbnNmb3JtU3RhdGUpKSB7Ci0gICAgICAgICAgICByZXN1bHRMYXllciA9IGhpdExheWVyOwot
ICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc3VsdElzRWxlbWVudExpc3QoKSkKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSB0ZW1wUmVzdWx0OwotICAgICAgICAgICAgaWYgKCFkZXB0aFNvcnRE
ZXNjZW5kYW50cykKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHRMYXllcjsKLX0KLQogLy8gaGl0VGVzdExvY2F0aW9uIGFuZCBoaXRU
ZXN0UmVjdCBhcmUgcmVsYXRpdmUgdG8gcm9vdExheWVyLgogLy8gQSAnZmxhdHRlbmluZycgbGF5
ZXIgaXMgb25lIHByZXNlcnZlczNEKCkgPT0gZmFsc2UuCiAvLyB0cmFuc2Zvcm1TdGF0ZS5tX2Fj
Y3VtdWxhdGVkVHJhbnNmb3JtIGhvbGRzIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgY29udGFpbmlu
ZyBmbGF0dGVuaW5nIGxheWVyLgpAQCAtNTIwMCwxNyArNTEyMSw4IEBAIFJlbmRlckxheWVyKiBS
ZW5kZXJMYXllcjo6aGl0VGVzdExheWVyKFIKICAgICBMYXllckxpc3RNdXRhdGlvbkRldGVjdG9y
IG11dGF0aW9uQ2hlY2tlcih0aGlzKTsKICNlbmRpZgogCi0gICAgLy8gQ2hlY2sgdGhlIGZpeGVk
IHBvc2l0aW9uZWQgbGF5ZXJzIHdpdGhpbiBmbG93IHRocmVhZHMgdGhhdCBhcmUgcG9zaXRpb25l
ZCBieSB0aGUgdmlldy4KLSAgICBSZW5kZXJMYXllciogaGl0TGF5ZXIgPSBoaXRUZXN0Rml4ZWRM
YXllcnNJbk5hbWVkRmxvd3Mocm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RSZWN0
LCBoaXRUZXN0TG9jYXRpb24sCi0gICAgICAgIGxvY2FsVHJhbnNmb3JtU3RhdGUuZ2V0KCksIHpP
ZmZzZXRGb3JEZXNjZW5kYW50c1B0ciwgek9mZnNldCwgdW5mbGF0dGVuZWRUcmFuc2Zvcm1TdGF0
ZS5nZXQoKSwgZGVwdGhTb3J0RGVzY2VuZGFudHMpOwotICAgIGlmIChoaXRMYXllcikgewotICAg
ICAgICBpZiAoIWRlcHRoU29ydERlc2NlbmRhbnRzKQotICAgICAgICAgICAgcmV0dXJuIGhpdExh
eWVyOwotICAgICAgICBjYW5kaWRhdGVMYXllciA9IGhpdExheWVyOwotICAgIH0KLQogICAgIC8v
IEJlZ2luIGJ5IHdhbGtpbmcgb3VyIGxpc3Qgb2YgcG9zaXRpdmUgbGF5ZXJzIGZyb20gaGlnaGVz
dCB6LWluZGV4IGRvd24gdG8gdGhlIGxvd2VzdCB6LWluZGV4LgotICAgIGhpdExheWVyID0gaGl0
VGVzdExpc3QocG9zWk9yZGVyTGlzdCgpLCByb290TGF5ZXIsIHJlcXVlc3QsIHJlc3VsdCwgaGl0
VGVzdFJlY3QsIGhpdFRlc3RMb2NhdGlvbiwKKyAgICBhdXRvKiBoaXRMYXllciA9IGhpdFRlc3RM
aXN0KHBvc1pPcmRlckxpc3QoKSwgcm9vdExheWVyLCByZXF1ZXN0LCByZXN1bHQsIGhpdFRlc3RS
ZWN0LCBoaXRUZXN0TG9jYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbG9jYWxUcmFuc2Zvcm1TdGF0ZS5nZXQoKSwgek9mZnNldEZvckRlc2NlbmRhbnRzUHRy
LCB6T2Zmc2V0LCB1bmZsYXR0ZW5lZFRyYW5zZm9ybVN0YXRlLmdldCgpLCBkZXB0aFNvcnREZXNj
ZW5kYW50cyk7CiAgICAgaWYgKGhpdExheWVyKSB7CiAgICAgICAgIGlmICghZGVwdGhTb3J0RGVz
Y2VuZGFudHMpCkBAIC01NTY4LDkgKzU0ODAsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxjdWxh
dGVDbGlwUmVjdHMoY29uCiAgICAgQ2xpcFJlY3RzVHlwZSBjbGlwUmVjdHNUeXBlID0gY2xpcFJl
Y3RzQ29udGV4dC5jbGlwUmVjdHNUeXBlOwogICAgIGJvb2wgdXNlQ2FjaGVkID0gY2xpcFJlY3Rz
VHlwZSAhPSBUZW1wb3JhcnlDbGlwUmVjdHM7CiAKLSAgICBpZiAocmVuZGVyZXIoKS5pc1JlbmRl
ck5hbWVkRmxvd1RocmVhZCgpICYmIG1hcExheWVyQ2xpcFJlY3RzVG9GcmFnbWVudGF0aW9uTGF5
ZXIoY2xpcFJlY3RzKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLy8gRm9yIHRyYW5zZm9ybWVk
IGxheWVycywgdGhlIHJvb3QgbGF5ZXIgd2FzIHNoaWZ0ZWQgdG8gYmUgdXMsIHNvIHRoZXJlIGlz
IG5vIG5lZWQgdG8KICAgICAvLyBleGFtaW5lIHRoZSBwYXJlbnQuIFdlIHdhbnQgdG8gY2FjaGUg
Y2xpcCByZWN0cyB3aXRoIHVzIGFzIHRoZSByb290LgogICAgIFJlbmRlckxheWVyKiBwYXJlbnRM
YXllciA9IGNsaXBSZWN0c0NvbnRleHQucm9vdExheWVyICE9IHRoaXMgPyBwYXJlbnQoKSA6IG51
bGxwdHI7CkBAIC01NjMyLDExICs1NTQxLDYgQEAgdm9pZCBSZW5kZXJMYXllcjo6Y2FsY3VsYXRl
Q2xpcFJlY3RzKGNvbgogUmVmPENsaXBSZWN0cz4gUmVuZGVyTGF5ZXI6OnBhcmVudENsaXBSZWN0
cyhjb25zdCBDbGlwUmVjdHNDb250ZXh0JiBjbGlwUmVjdHNDb250ZXh0KSBjb25zdAogewogICAg
IEFTU0VSVChwYXJlbnQoKSk7Ci0gICAgaWYgKHJlbmRlcmVyKCkuaXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWQoKSkgewotICAgICAgICBhdXRvIHBhcmVudENsaXBSZWN0cyA9IENsaXBSZWN0czo6Y3Jl
YXRlKCk7Ci0gICAgICAgIGlmIChtYXBMYXllckNsaXBSZWN0c1RvRnJhZ21lbnRhdGlvbkxheWVy
KHBhcmVudENsaXBSZWN0cykpCi0gICAgICAgICAgICByZXR1cm4gcGFyZW50Q2xpcFJlY3RzOwot
ICAgIH0KIAogICAgIGlmIChjbGlwUmVjdHNDb250ZXh0LmNsaXBSZWN0c1R5cGUgPT0gVGVtcG9y
YXJ5Q2xpcFJlY3RzKSB7CiAgICAgICAgIGF1dG8gcGFyZW50Q2xpcFJlY3RzID0gQ2xpcFJlY3Rz
OjpjcmVhdGUoKTsKQEAgLTU3NjMsMTcgKzU2NjcsNiBAQCB2b2lkIFJlbmRlckxheWVyOjpjYWxj
dWxhdGVSZWN0cyhjb25zdCBDCiAgICAgICAgICAgICBib3VuZHMubW92ZShvZmZzZXRGcm9tUm9v
dExvY2FsKTsKICAgICAgICAgICAgIGlmICh0aGlzICE9IGNsaXBSZWN0c0NvbnRleHQucm9vdExh
eWVyIHx8IGNsaXBSZWN0c0NvbnRleHQucmVzcGVjdE92ZXJmbG93Q2xpcCA9PSBSZXNwZWN0T3Zl
cmZsb3dDbGlwKQogICAgICAgICAgICAgICAgIGJhY2tncm91bmRSZWN0LmludGVyc2VjdChib3Vu
ZHMpOwotICAgICAgICAgICAgLy8gQm94ZXMgaW5zaWRlIGZsb3cgdGhyZWFkcyBkb24ndCBoYXZl
IHRoZWlyIGxvZ2ljYWwgbGVmdCBjb21wdXRlZCB0byBhdm9pZAotICAgICAgICAgICAgLy8gZmxv
YXRzLiBJbnN0ZWFkLCB0aGF0IGluZm9ybWF0aW9uIGlzIGtlcHQgaW4gdGhlaXIgUmVuZGVyQm94
UmVnaW9uSW5mbyBzdHJ1Y3R1cmUuCi0gICAgICAgICAgICAvLyBBcyBzdWNoLCB0aGUgbGF5ZXIg
Ym91bmRzIG11c3QgYmUgZW5sYXJnZWQgdG8gZW5jb21wYXNzIHRoZWlyIGJhY2tncm91bmQgcmVj
dAotICAgICAgICAgICAgLy8gdG8gZW5zdXJlIGludGVyc2VjdGluZyB0aGVtIHdvbid0IHJlc3Vs
dCBpbiBhbiBlbXB0eSByZWN0LCB3aGljaCB3b3VsZCBldmVudHVhbGx5Ci0gICAgICAgICAgICAv
LyBjYXVzZSBwYWludCByZWplY3Rpb24uCi0gICAgICAgICAgICBpZiAoZmxvd1RocmVhZCAmJiBm
bG93VGhyZWFkLT5pc1JlbmRlck5hbWVkRmxvd1RocmVhZCgpKSB7Ci0gICAgICAgICAgICAgICAg
aWYgKGZsb3dUaHJlYWQtPnN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAg
ICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMuc2hpZnRNYXhYRWRnZVRvKHN0ZDo6bWF4KGxheWVy
Qm91bmRzLm1heFgoKSwgYmFja2dyb3VuZFJlY3QucmVjdCgpLm1heFgoKSkpOwotICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMuc2hpZnRNYXhZRWRn
ZVRvKHN0ZDo6bWF4KGxheWVyQm91bmRzLm1heFkoKSwgYmFja2dyb3VuZFJlY3QucmVjdCgpLm1h
eFkoKSkpOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQpAQCAtNzA5OSw1MCAr
Njk5Miw2IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnBhaW50TmFtZWRGbG93VGhyZWFkSW4KICAgICBj
b250ZXh0LnJlc3RvcmUoKTsKIH0KIAotdm9pZCBSZW5kZXJMYXllcjo6cGFpbnRGbG93VGhyZWFk
SWZSZWdpb25Gb3JGcmFnbWVudHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYgcGFpbnRpbmdJ
bmZvLCBQYWludExheWVyRmxhZ3MgcGFpbnRGbGFncykKLXsKLSAgICBpZiAoIXJlbmRlcmVyKCku
aXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5lcigpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgUmVuZGVyQmxvY2tGbG93JiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudENvbnRhaW5l
ciA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4ocmVuZGVyZXIoKSk7Ci0gICAgUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQqIGZsb3dGcmFnbWVudCA9IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29u
dGFpbmVyLnJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KCk7Ci0gICAgaWYgKCFmbG93RnJhZ21lbnQt
PmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVuZGVyTmFtZWRGbG93VGhyZWFk
KiBmbG93VGhyZWFkID0gZmxvd0ZyYWdtZW50LT5uYW1lZEZsb3dUaHJlYWQoKTsKLSAgICBSZW5k
ZXJMYXllciogZmxvd1RocmVhZExheWVyID0gZmxvd1RocmVhZC0+bGF5ZXIoKTsKLQotICAgIExh
eW91dFJlY3QgcmVnaW9uQ2xpcFJlY3QgPSBMYXlvdXRSZWN0OjppbmZpbml0ZVJlY3QoKTsKLSAg
ICBpZiAoZmxvd0ZyYWdtZW50LT5zaG91bGRDbGlwRmxvd1RocmVhZENvbnRlbnQoKSkgewotICAg
ICAgICByZWdpb25DbGlwUmVjdCA9IHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Q29udGFpbmVyLnBh
ZGRpbmdCb3hSZWN0KCk7Ci0KLSAgICAgICAgLy8gV2hlbiB0aGUgbGF5ZXIgb2YgdGhlIGZsb3cg
ZnJhZ21lbnQncyBjb250YWluZXIgaXMgY29tcG9zaXRlZCwgdGhlIGZsb3cgZnJhZ21lbnQgY29u
dGFpbmVyIHJlY2VpdmVzIGEKLSAgICAgICAgLy8gR3JhcGhpY3NMYXllciBvZiBpdHMgb3duIHNv
IHRoZSBjbGlwcGluZyBjb29yZGluYXRlcyAoY2F1c2VkIGJ5IG92ZXJmbG93OmhpZGRlbikgbXVz
dCBiZSByZWxhdGl2ZSB0byB0aGUKLSAgICAgICAgLy8gR3JhcGhpY3NMYXllciBjb29yZGluYXRl
cyBpbiB3aGljaCB0aGUgZnJhZ21lbnQgZ2V0cyBwYWludGVkLiBTbyB3aGF0IGlzIGNvbXB1dGVk
IHNvIGZhciBpcyBlbm91Z2guCi0gICAgICAgIC8vIElmIHRoZSBsYXllciBvZiB0aGUgZmxvd0Zy
YWdtZW50IGlzIG5vdCBjb21wb3NpdGVkLCB0aGVuIHdlIGNoYW5nZSB0aGUgY29vcmRpbmF0ZXMg
dG8gYmUgcmVsYXRpdmUgdG8gdGhlIGZsb3cKLSAgICAgICAgLy8gdGhyZWFkJ3MgbGF5ZXIuCi0g
ICAgICAgIGlmICghaXNDb21wb3NpdGVkKCkpCi0gICAgICAgICAgICByZWdpb25DbGlwUmVjdC5t
b3ZlKG9mZnNldEZyb21BbmNlc3RvcihwYWludGluZ0luZm8ucm9vdExheWVyKSk7Ci0gICAgfQot
ICAgIAotICAgIGZvciAoY29uc3QgYXV0byYgZnJhZ21lbnQgOiBmcmFnbWVudHMpIHsKLSAgICAg
ICAgQ2xpcFJlY3QgY2xpcFJlY3QgPSBmcmFnbWVudC5mb3JlZ3JvdW5kUmVjdDsKLSAgICAgICAg
aWYgKGZsb3dGcmFnbWVudC0+c2hvdWxkQ2xpcEZsb3dUaHJlYWRDb250ZW50KCkpCi0gICAgICAg
ICAgICBjbGlwUmVjdC5pbnRlcnNlY3QocmVnaW9uQ2xpcFJlY3QpOwotCi0gICAgICAgIGJvb2wg
c2hvdWxkQ2xpcCA9ICFjbGlwUmVjdC5pc0luZmluaXRlKCk7Ci0gICAgICAgIC8vIE9wdGltaXpl
IGNsaXBwaW5nIGZvciB0aGUgc2luZ2xlIGZyYWdtZW50IGNhc2UuCi0gICAgICAgIGlmIChzaG91
bGRDbGlwKQotICAgICAgICAgICAgY2xpcFRvUmVjdChjb250ZXh0LCBwYWludGluZ0luZm8sIGNs
aXBSZWN0KTsKLQotICAgICAgICBmbG93VGhyZWFkTGF5ZXItPnBhaW50TmFtZWRGbG93VGhyZWFk
SW5zaWRlUmVnaW9uKGNvbnRleHQsIGZsb3dGcmFnbWVudCwgcGFpbnRpbmdJbmZvLnBhaW50RGly
dHlSZWN0LCBmcmFnbWVudC5sYXllckJvdW5kcy5sb2NhdGlvbigpICsgcGFpbnRpbmdJbmZvLnN1
YnBpeGVsT2Zmc2V0LAotICAgICAgICAgICAgcGFpbnRpbmdJbmZvLnBhaW50QmVoYXZpb3IsIHBh
aW50RmxhZ3MpOwotCi0gICAgICAgIGlmIChzaG91bGRDbGlwKQotICAgICAgICAgICAgcmVzdG9y
ZUNsaXAoY29udGV4dCwgcGFpbnRpbmdJbmZvLCBjbGlwUmVjdCk7Ci0gICAgfQotfQotCiBSZW5k
ZXJMYXllciogUmVuZGVyTGF5ZXI6OmhpdFRlc3RGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVu
dHMoY29uc3QgTGF5ZXJGcmFnbWVudHMmIGZyYWdtZW50cywgUmVuZGVyTGF5ZXIqLCBjb25zdCBI
aXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBMYXlv
dXRSZWN0JiBoaXRUZXN0UmVjdCwKICAgICBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGhpdFRlc3RM
b2NhdGlvbiwKICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqIHRyYW5zZm9ybVN0
YXRlLCAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCShyZXZpc2lv
biAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtODM0LDcgKzgzNCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBhcHBseUZp
bHRlcnMoRmlsdGVyRWZmZWN0UmVuZGVyZXJIZWxwZXIqLCBHcmFwaGljc0NvbnRleHQmIG9yaWdp
bmFsQ29udGV4dCwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8mLCBjb25zdCBMYXllckZyYWdtZW50
cyYpOwogCiAgICAgdm9pZCBwYWludExheWVyKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVy
UGFpbnRpbmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKLSAgICB2b2lkIHBhaW50Rml4ZWRMYXll
cnNJbk5hbWVkRmxvd3MoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgTGF5ZXJQYWludGluZ0luZm8m
LCBQYWludExheWVyRmxhZ3MpOwogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzQW5kUmVmbGVj
dGlvbihHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5
ZXJGbGFncyk7CiAgICAgdm9pZCBwYWludExheWVyQnlBcHBseWluZ1RyYW5zZm9ybShHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncywgY29u
c3QgTGF5b3V0U2l6ZSYgdHJhbnNsYXRpb25PZmZzZXQgPSBMYXlvdXRTaXplKCkpOwogICAgIHZv
aWQgcGFpbnRMYXllckNvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheWVyUGFpbnRp
bmdJbmZvJiwgUGFpbnRMYXllckZsYWdzKTsKQEAgLTEwMzUsNyArMTAzNCw2IEBAIHByaXZhdGU6
CiAgICAgICAgIGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mLAogICAg
ICAgICBjb25zdCBIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUqLCBkb3VibGUqIHpPZmZzZXRGb3JE
ZXNjZW5kYW50cywKICAgICAgICAgZG91YmxlKiB6T2Zmc2V0LCBjb25zdCBIaXRUZXN0aW5nVHJh
bnNmb3JtU3RhdGUqIHVuZmxhdHRlbmVkVHJhbnNmb3JtU3RhdGUsIGJvb2wgZGVwdGhTb3J0RGVz
Y2VuZGFudHMpOwotICAgIHZvaWQgcGFpbnRGbG93VGhyZWFkSWZSZWdpb25Gb3JGcmFnbWVudHMo
Y29uc3QgTGF5ZXJGcmFnbWVudHMmLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBMYXllclBhaW50
aW5nSW5mbyYsIFBhaW50TGF5ZXJGbGFncyk7CiAgICAgYm9vbCBtYXBMYXllckNsaXBSZWN0c1Rv
RnJhZ21lbnRhdGlvbkxheWVyKENsaXBSZWN0cyYpIGNvbnN0OwogCiAgICAgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQqIGN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkZsb3dUaHJlYWRDb250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCkBAIC03MDIsOCArNzAxLDYgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUNvbXBvcwogI2VuZGlmCiAKICAgICBpZiAoY2hlY2tGb3JIaWVyYXJj
aHlVcGRhdGUpIHsKLSAgICAgICAgaWYgKG1fcmVuZGVyVmlldy5oYXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWRzKCkgJiYgaXNGdWxsVXBkYXRlKQotICAgICAgICAgICAgbV9yZW5kZXJWaWV3LmZsb3dU
aHJlYWRDb250cm9sbGVyKCkudXBkYXRlRmxvd1RocmVhZHNMYXllclRvUmVnaW9uTWFwcGluZ3NJ
Zk5lZWRlZCgpOwogICAgICAgICAvLyBHbyB0aHJvdWdoIHRoZSBsYXllcnMgaW4gcHJlc2VudGF0
aW9uIG9yZGVyLCBzbyB0aGF0IHdlIGNhbiBjb21wdXRlIHdoaWNoIFJlbmRlckxheWVycyBuZWVk
IGNvbXBvc2l0aW5nIGxheWVycy4KICAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIG1heWJlIGRv
IHRoaXMgYW5kIHRoZSBoaWVyYXJjaHkgdWRwYXRlIGluIG9uZSBwYXNzLCBidXQgdGhlIHBhcmVu
dGluZyBsb2dpYyB3b3VsZCBiZSBtb3JlIGNvbXBsZXguCiAgICAgICAgIENvbXBvc2l0aW5nU3Rh
dGUgY29tcFN0YXRlKHVwZGF0ZVJvb3QpOwpAQCAtMTI1OSwyMSArMTI1Niw2IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjphZGRUb092ZXJsYXAKICAgICAgICAgb3ZlcmxhcE1hcC5nZW9t
ZXRyeU1hcCgpLnBvcE1hcHBpbmdzVG9BbmNlc3RvcihhbmNlc3RvckxheWVyKTsKIH0KIAotdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmNvbXB1dGVDb21wb3NpdGluZ1JlcXVpcmVtZW50c0Zv
ck5hbWVkRmxvd0ZpeGVkKFJlbmRlckxheWVyJiBsYXllciwgT3ZlcmxhcE1hcCYgb3ZlcmxhcE1h
cCwgQ29tcG9zaXRpbmdTdGF0ZSYgY2hpbGRTdGF0ZSwgYm9vbCYgbGF5ZXJzQ2hhbmdlZCwgYm9v
bCYgYW55RGVzY2VuZGFudEhhczNEVHJhbnNmb3JtKQotewotICAgIGlmICghbGF5ZXIuaXNSZW5k
ZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFsYXllci5yZW5kZXJl
cigpLnZpZXcoKS5oYXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFZlY3RvcjxSZW5kZXJMYXllcio+IGZpeGVkTGF5ZXJzOwotICAgIGxheWVyLnJlbmRl
cmVyKCkudmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuY29sbGVjdEZpeGVkUG9zaXRpb25l
ZExheWVycyhmaXhlZExheWVycyk7Ci0KLSAgICBmb3IgKGF1dG8qIGZpeGVkTGF5ZXIgOiBmaXhl
ZExheWVycykKLSAgICAgICAgY29tcHV0ZUNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKCZsYXllciwg
KmZpeGVkTGF5ZXIsIG92ZXJsYXBNYXAsIGNoaWxkU3RhdGUsIGxheWVyc0NoYW5nZWQsIGFueURl
c2NlbmRhbnRIYXMzRFRyYW5zZm9ybSk7Ci19Ci0KIC8vICBSZWN1cnNlIHRocm91Z2ggdGhlIGxh
eWVycyBpbiB6LWluZGV4IGFuZCBvdmVyZmxvdyBvcmRlciAod2hpY2ggaXMgZXF1aXZhbGVudCB0
byBwYWludGluZyBvcmRlcikKIC8vICBGb3IgdGhlIHotb3JkZXIgY2hpbGRyZW4gb2YgYSBjb21w
b3NpdGluZyBsYXllcjoKIC8vICAgICAgSWYgYSBjaGlsZCBsYXllcnMgaGFzIGEgY29tcG9zaXRp
bmcgbGF5ZXIsIHRoZW4gYWxsIHN1YnNlcXVlbnQgbGF5ZXJzIG11c3QKQEAgLTE0MTQsOSArMTM5
Niw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpjb21wdXRlQ29tcG8KICAgICAgICAg
fQogICAgIH0KIAotICAgIGlmIChsYXllci5pc1JlbmRlclZpZXdMYXllcigpKQotICAgICAgICBj
b21wdXRlQ29tcG9zaXRpbmdSZXF1aXJlbWVudHNGb3JOYW1lZEZsb3dGaXhlZChsYXllciwgb3Zl
cmxhcE1hcCwgY2hpbGRTdGF0ZSwgbGF5ZXJzQ2hhbmdlZCwgYW55RGVzY2VuZGFudEhhczNEVHJh
bnNmb3JtKTsKLQogICAgIC8vIElmIHdlIGp1c3QgZW50ZXJlZCBjb21wb3NpdGluZyBtb2RlLCB0
aGUgcm9vdCB3aWxsIGhhdmUgYmVjb21lIGNvbXBvc2l0ZWQgKGFzIGxvbmcgYXMgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcgaXMgZW5hYmxlZCkuCiAgICAgaWYgKGxheWVyLmlzUmVuZGVyVmlld0xh
eWVyKCkpIHsKICAgICAgICAgaWYgKGluQ29tcG9zaXRpbmdNb2RlKCkgJiYgbV9oYXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKQpAQCAtMTU2OSwyMSArMTU0OCw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpjYW5BY2NlbGVyYXQKIH0KICNlbmRpZgogCi12b2lkIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlRm9yTmFtZWRGbG93Rml4ZWQoUmVu
ZGVyTGF5ZXImIGxheWVyLCBWZWN0b3I8R3JhcGhpY3NMYXllcio+JiBjaGlsZEdyYXBoaWNzTGF5
ZXJzT2ZFbmNsb3NpbmdMYXllciwgaW50IGRlcHRoKQotewotICAgIGlmICghbGF5ZXIuaXNSZW5k
ZXJWaWV3TGF5ZXIoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFsYXllci5yZW5kZXJl
cigpLnZpZXcoKS5oYXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIFZlY3RvcjxSZW5kZXJMYXllcio+IGZpeGVkTGF5ZXJzOwotICAgIGxheWVyLnJlbmRl
cmVyKCkudmlldygpLmZsb3dUaHJlYWRDb250cm9sbGVyKCkuY29sbGVjdEZpeGVkUG9zaXRpb25l
ZExheWVycyhmaXhlZExheWVycyk7Ci0KLSAgICBmb3IgKGF1dG8qIGZpeGVkTGF5ZXIgOiBmaXhl
ZExheWVycykKLSAgICAgICAgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKCpmaXhlZExheWVy
LCBjaGlsZEdyYXBoaWNzTGF5ZXJzT2ZFbmNsb3NpbmdMYXllciwgZGVwdGgpOwotfQotCiB2b2lk
IFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRl
ckxheWVyJiBsYXllciwgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRMYXllcnNPZkVuY2xv
c2luZ0xheWVyLCBpbnQgZGVwdGgpCiB7CiAgICAgLy8gTWFrZSB0aGUgbGF5ZXIgY29tcG9zaXRp
bmcgaWYgbmVjZXNzYXJ5LCBhbmQgc2V0IHVwIGNsaXBwaW5nIGFuZCBjb250ZW50IGxheWVycy4K
QEAgLTE2NTcsOSArMTYyMSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZWJ1aWxk
Q29tcG8KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChsYXllci5pc1JlbmRlclZpZXdMYXll
cigpKQotICAgICAgICByZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWVGb3JOYW1lZEZsb3dGaXhl
ZChsYXllciwgY2hpbGRMaXN0LCBkZXB0aCArIDEpOwotCiAgICAgaWYgKGxheWVyQmFja2luZykg
ewogICAgICAgICBib29sIHBhcmVudGVkID0gZmFsc2U7CiAgICAgICAgIGlmIChpczxSZW5kZXJX
aWRnZXQ+KGxheWVyLnJlbmRlcmVyKCkpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuaAkocmV2aXNpb24gMjIyMjU5KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzEsOCArMzcxLDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcHV0ZVJlZ2lv
bkNvbXBvc2l0aW5nUmVxdWlyZW1lbnRzKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiwgT3Zlcmxh
cE1hcCYsIENvbXBvc2l0aW5nU3RhdGUmLCBib29sJiBsYXllcnNDaGFuZ2VkLCBib29sJiBhbnlE
ZXNjZW5kYW50SGFzM0RUcmFuc2Zvcm0pOwogCi0gICAgdm9pZCBjb21wdXRlQ29tcG9zaXRpbmdS
ZXF1aXJlbWVudHNGb3JOYW1lZEZsb3dGaXhlZChSZW5kZXJMYXllciYsIE92ZXJsYXBNYXAmLCBD
b21wb3NpdGluZ1N0YXRlJiwgYm9vbCYgbGF5ZXJzQ2hhbmdlZCwgYm9vbCYgYW55RGVzY2VuZGFu
dEhhczNEVHJhbnNmb3JtKTsKLQogICAgIC8vIFJlY3Vyc2VzIGRvd24gdGhlIHRyZWUsIHBhcmVu
dGluZyBkZXNjZW5kYW50IGNvbXBvc2l0aW5nIGxheWVycyBhbmQgY29sbGVjdGluZyBhbiBhcnJh
eSBvZiBjaGlsZCBsYXllcnMgZm9yIHRoZSBjdXJyZW50IGNvbXBvc2l0aW5nIGxheWVyLgogICAg
IHZvaWQgcmVidWlsZENvbXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlckxheWVyJiwgVmVjdG9yPEdy
YXBoaWNzTGF5ZXIqPiYgY2hpbGRHcmFwaGljc0xheWVyc09mRW5jbG9zaW5nTGF5ZXIsIGludCBk
ZXB0aCk7CiAKQEAgLTM4MCw4ICszNzgsNiBAQCBwcml2YXRlOgogICAgIC8vIGxheWVycyBmb3Ig
dGhlIGN1cnJlbnQgY29tcG9zaXRpbmcgbGF5ZXIgY29ycmVzcG9uZGluZyB0byB0aGUgYW5vbnlt
b3VzIHJlZ2lvbiAodGhhdCBiZWxvbmdzIHRvIHRoZSByZWdpb24ncyBwYXJlbnQpLgogICAgIHZv
aWQgcmVidWlsZFJlZ2lvbkNvbXBvc2l0aW5nTGF5ZXJUcmVlKFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KiwgVmVjdG9yPEdyYXBoaWNzTGF5ZXIqPiYgY2hpbGRMaXN0LCBpbnQgZGVwdGgpOwogCi0g
ICAgdm9pZCByZWJ1aWxkQ29tcG9zaXRpbmdMYXllclRyZWVGb3JOYW1lZEZsb3dGaXhlZChSZW5k
ZXJMYXllciYsIFZlY3RvcjxHcmFwaGljc0xheWVyKj4mIGNoaWxkTGlzdCwgaW50IGRlcHRoKTsK
LQogICAgIC8vIFJlY3Vyc2VzIGRvd24gdGhlIHRyZWUsIHVwZGF0aW5nIGxheWVyIGdlb21ldHJ5
IG9ubHkuCiAgICAgdm9pZCB1cGRhdGVMYXllclRyZWVHZW9tZXRyeShSZW5kZXJMYXllciYsIGlu
dCBkZXB0aCk7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDEyICszMCwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCiAKLSNpbmNsdWRlICJGbG93VGhyZWFkQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgogI2luY2x1ZGUgIlJlbmRlckJveFJlZ2lv
bkluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVy
SXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNpbmNsdWRl
ICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAi
U3R5bGVSZXNvbHZlci5oIgpAQCAtMjkzLDcgKzI5MSw2IEBAIHZvaWQgUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ6OmNoZWNrUmVnaW8KICAgICBib29sIGN1c3RvbVJlZ2lvblN0eWxlID0gZmFsc2U7
CiAKICAgICBzZXRIYXNDdXN0b21SZWdpb25TdHlsZShjdXN0b21SZWdpb25TdHlsZSk7Ci0gICAg
ZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqbV9mbG93VGhyZWFkKS5jaGVja1JlZ2lv
bnNXaXRoU3R5bGluZygpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVtZW50Jiwg
Y29uc3QgUmVuZGVyU3R5bGUmKSBjb25zdApAQCAtMzg5LDExICszODYsNiBAQCB2b2lkIFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50OjpyZXN0b3JlUmVnCiAgICAgbV9yZW5kZXJlclJlZ2lvblN0eWxl
LnN3YXAodGVtcCk7CiB9CiAKLVJlbmRlck5hbWVkRmxvd1RocmVhZCogUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ6Om5hbWVkRmxvd1RocmVhZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlck5hbWVkRmxvd1RocmVhZD4oZmxvd1RocmVhZCgpKTsKLX0KLQogTGF5b3V0UmVjdCBS
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6dmlzdWFsT3ZlcmZsb3dSZWN0KCkgY29uc3QKIHsKICAg
ICBpZiAoaXNWYWxpZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaAkocmV2aXNpb24gMjIyMjU5KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg1LDggKzg1LDYgQEAgcHVibGljOgogICAgIAogICAgIExheW91dFJlY3QgdmlzdWFs
T3ZlcmZsb3dSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQqIG5hbWVkRmxvd1RocmVhZCgpIGNvbnN0OwotCiAgICAgYm9vbCBoYXNBdXRvTG9naWNhbEhl
aWdodCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzQXV0b0xvZ2ljYWxIZWlnaHQ7IH0K
IAogICAgIExheW91dFVuaXQgY29tcHV0ZWRBdXRvSGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9j
b21wdXRlZEF1dG9IZWlnaHQ7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJOYW1lZEZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmNwcAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDc2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOLi4wVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGICBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFt
ZWRGbG93VGhyZWFkLmgiCi0KLSNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9y
LmgiCi0jaW5jbHVkZSAiRmxvd1RocmVhZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJJbmxpbmVU
ZXh0Qm94LmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCi0jaW5jbHVk
ZSAiTm9kZVRyYXZlcnNhbC5oIgotI2luY2x1ZGUgIlBvc2l0aW9uLmgiCi0jaW5jbHVkZSAiUmFu
Z2UuaCIKLSNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgotI2luY2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxv
d0ZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclZp
ZXcuaCIKLSNpbmNsdWRlICJTaGFkb3dSb290LmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLVJlbmRlck5hbWVkRmxvd1RocmVhZDo6UmVuZGVyTmFtZWRGbG93
VGhyZWFkKERvY3VtZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSkKLSAgICA6IFJl
bmRlckZsb3dUaHJlYWQoZG9jdW1lbnQsIFdURk1vdmUoc3R5bGUpKQotICAgICwgbV9oYXNSZWdp
b25zV2l0aFN0eWxpbmcoZmFsc2UpCi0gICAgLCBtX2Rpc3BhdGNoUmVnaW9uT3ZlcnNldENoYW5n
ZUV2ZW50KGZhbHNlKQotICAgICwgbV9yZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnRUaW1lcigqdGhp
cywgJlJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVnaW9uT3ZlcnNldENoYW5nZUV2ZW50VGltZXJG
aXJlZCkKLXsKLX0KLQotUmVuZGVyTmFtZWRGbG93VGhyZWFkOjp+UmVuZGVyTmFtZWRGbG93VGhy
ZWFkKCkKLXsKLSAgICAvLyBEbyBub3QgYWRkIGFueSBjb2RlIGhlcmUuIEFkZCBpdCB0byB3aWxs
QmVEZXN0cm95ZWQoKSBpbnN0ZWFkLgotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6
d2lsbEJlRGVzdHJveWVkKCkKLXsKLSAgICAvLyBUaGUgZmxvdyB0aHJlYWQgY2FuIGJlIGRlc3Ry
b3llZCB3aXRob3V0IHVucmVnaXN0ZXJpbmcgdGhlIGNvbnRlbnQgbm9kZXMgaWYgdGhlIGRvY3Vt
ZW50IGlzIGRlc3Ryb3llZC4KLSAgICAvLyBUaGlzIGNhbiBsZWFkIHRvIHByb2JsZW1zIGJlY2F1
c2UgdGhlIG5vZGVzIGFyZSBzdGlsbCBtYXJrZWQgYXMgYmVsb25naW5nIHRvIGEgZmxvdyB0aHJl
YWQuCi0gICAgY2xlYXJDb250ZW50RWxlbWVudHMoKTsKLQotICAgIC8vIEFsc28gbGVhdmUgdGhl
IE5hbWVkRmxvdyBvYmplY3QgaW4gYSBjb25zaXN0ZW50IHN0YXRlIGJ5IGNhbGxpbmcgbWFyayBm
b3IgZGVzdHJ1Y3Rpb24uCi0gICAgc2V0TWFya0ZvckRlc3RydWN0aW9uKCk7Ci0KLSAgICBSZW5k
ZXJGbG93VGhyZWFkOjp3aWxsQmVEZXN0cm95ZWQoKTsKLX0KLQotY29uc3QgY2hhciogUmVuZGVy
TmFtZWRGbG93VGhyZWFkOjpyZW5kZXJOYW1lKCkgY29uc3QKLXsgICAgCi0gICAgcmV0dXJuICJS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQiOwotfQotICAgIAotdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJl
YWQ6OmNsZWFyQ29udGVudEVsZW1lbnRzKCkKLXsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dU
aHJlYWQ6OnVwZGF0ZVdyaXRpbmdNb2RlKCkKLXsKLSAgICBhdXRvKiBmaXJzdEZyYWdtZW50ID0g
ZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KG1fcmVnaW9uTGlzdC5maXJzdCgpKTsK
LSAgICBpZiAoIWZpcnN0RnJhZ21lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc3R5bGUo
KS53cml0aW5nTW9kZSgpID09IGZpcnN0RnJhZ21lbnQtPnN0eWxlKCkud3JpdGluZ01vZGUoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGZpcnN0IHJlZ2lvbiBkZWZpbmVzIHRoZSBw
cmluY2lwYWwgd3JpdGluZyBtb2RlIGZvciB0aGUgZW50aXJlIGZsb3cuCi0gICAgYXV0byBuZXdT
dHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZShzdHlsZSgpKTsKLSAgICBuZXdTdHlsZS5zZXRXcml0
aW5nTW9kZShmaXJzdEZyYWdtZW50LT5zdHlsZSgpLndyaXRpbmdNb2RlKCkpOwotICAgIHNldFN0
eWxlKFdURk1vdmUobmV3U3R5bGUpKTsKLX0KLQotYm9vbCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6
OmRlcGVuZHNPbihSZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG90aGVyUmVuZGVyRmxvd1RocmVhZCkg
Y29uc3QKLXsKLSAgICBpZiAobV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0LmNvbnRhaW5zKG90aGVy
UmVuZGVyRmxvd1RocmVhZCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gUmVjdXJz
aXZlbHkgdHJhdmVyc2UgdGhlIG1fbGF5b3V0QmVmb3JlVGhyZWFkc1NldC4KLSAgICBmb3IgKGNv
bnN0IGF1dG8mIGJlZm9yZUZsb3dUaHJlYWRQYWlyIDogbV9sYXlvdXRCZWZvcmVUaHJlYWRzU2V0
KSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGJlZm9yZUZsb3dUaHJlYWQgPSBiZWZvcmVGbG93VGhy
ZWFkUGFpci5rZXk7Ci0gICAgICAgIGlmIChiZWZvcmVGbG93VGhyZWFkLT5kZXBlbmRzT24ob3Ro
ZXJSZW5kZXJGbG93VGhyZWFkKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQot
ICAgIHJldHVybiBmYWxzZTsKLX0KLQotLy8gQ29tcGFyZSB0d28gcmVnaW9ucyB0byBkZXRlcm1p
bmUgaW4gd2hpY2ggb25lIHRoZSBjb250ZW50IHNob3VsZCBmbG93IGZpcnN0LgotLy8gVGhlIGZ1
bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgZmlyc3QgcGFzc2VkIHJlZ2lvbiBpcyAibGVzcyIg
dGhhbiB0aGUgc2Vjb25kIHBhc3NlZCByZWdpb24uCi0vLyBJZiB0aGUgZmlyc3QgcmVnaW9uIGFw
cGVhcnMgYmVmb3JlIHNlY29uZCByZWdpb24gaW4gRE9NLAotLy8gdGhlIGZpcnN0IHJlZ2lvbiBp
cyAibGVzcyIgdGhhbiB0aGUgc2Vjb25kIHJlZ2lvbi4KLS8vIElmIHRoZSBmaXJzdCByZWdpb24g
aXMgImxlc3MiIHRoYW4gdGhlIHNlY29uZCByZWdpb24sIHRoZSBmaXJzdCByZWdpb24gcmVjZWl2
ZXMgY29udGVudCBiZWZvcmUgc2Vjb25kIHJlZ2lvbi4KLXN0YXRpYyBib29sIGNvbXBhcmVSZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudHMoY29uc3QgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGZpcnN0
RnJhZ21lbnQsIGNvbnN0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBzZWNvbmRGcmFnbWVudCkK
LXsKLSAgICBBU1NFUlQoZmlyc3RGcmFnbWVudCk7Ci0gICAgQVNTRVJUKHNlY29uZEZyYWdtZW50
KTsKLQotICAgIEFTU0VSVChmaXJzdEZyYWdtZW50LT5nZW5lcmF0aW5nRWxlbWVudCgpKTsKLSAg
ICBBU1NFUlQoc2Vjb25kRnJhZ21lbnQtPmdlbmVyYXRpbmdFbGVtZW50KCkpOwotCi0gICAgLy8g
SWYgdGhlIHJlZ2lvbnMgYmVsb25nIHRvIGRpZmZlcmVudCBub2RlcywgY29tcGFyZSB0aGVpciBw
b3NpdGlvbiBpbiB0aGUgRE9NLgotICAgIGlmIChmaXJzdEZyYWdtZW50LT5nZW5lcmF0aW5nRWxl
bWVudCgpICE9IHNlY29uZEZyYWdtZW50LT5nZW5lcmF0aW5nRWxlbWVudCgpKSB7Ci0gICAgICAg
IHVuc2lnbmVkIHNob3J0IHBvc2l0aW9uID0gZmlyc3RGcmFnbWVudC0+Z2VuZXJhdGluZ0VsZW1l
bnQoKS0+Y29tcGFyZURvY3VtZW50UG9zaXRpb24oKnNlY29uZEZyYWdtZW50LT5nZW5lcmF0aW5n
RWxlbWVudCgpKTsKLQotICAgICAgICAvLyBJZiB0aGUgc2Vjb25kIHJlZ2lvbiBpcyBjb250YWlu
ZWQgaW4gdGhlIGZpcnN0IG9uZSwgdGhlIGZpcnN0IHJlZ2lvbiBpcyAibGVzcyIgaWYgaXQncyA6
YmVmb3JlLgotICAgICAgICBpZiAocG9zaXRpb24gJiBOb2RlOjpET0NVTUVOVF9QT1NJVElPTl9D
T05UQUlORURfQlkpIHsKLSAgICAgICAgICAgIEFTU0VSVChzZWNvbmRGcmFnbWVudC0+c3R5bGUo
KS5zdHlsZVR5cGUoKSA9PSBOT1BTRVVETyk7Ci0gICAgICAgICAgICByZXR1cm4gZmlyc3RGcmFn
bWVudC0+c3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBCRUZPUkU7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBJZiB0aGUgc2Vjb25kIHJlZ2lvbiBjb250YWlucyB0aGUgZmlyc3QgcmVnaW9uLCB0aGUg
Zmlyc3QgcmVnaW9uIGlzICJsZXNzIiBpZiB0aGUgc2Vjb25kIGlzIDphZnRlci4KLSAgICAgICAg
aWYgKHBvc2l0aW9uICYgTm9kZTo6RE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpIHsKLSAgICAg
ICAgICAgIEFTU0VSVChmaXJzdEZyYWdtZW50LT5zdHlsZSgpLnN0eWxlVHlwZSgpID09IE5PUFNF
VURPKTsKLSAgICAgICAgICAgIHJldHVybiBzZWNvbmRGcmFnbWVudC0+c3R5bGUoKS5zdHlsZVR5
cGUoKSA9PSBBRlRFUjsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiAocG9zaXRpb24gJiBO
b2RlOjpET0NVTUVOVF9QT1NJVElPTl9GT0xMT1dJTkcpOwotICAgIH0KLQotICAgIC8vIEZJWE1F
OiBDdXJyZW50bHkgaXQncyBub3QgcG9zc2libGUgZm9yIGFuIGVsZW1lbnQgdG8gYmUgYm90aCBh
IHJlZ2lvbiBhbmQgaGF2ZSBwc2V1ZG8tY2hpbGRyZW4uIFRoZSBjYXNlIGlzIGNvdmVyZWQgYW55
d2F5LgotICAgIHN3aXRjaCAoZmlyc3RGcmFnbWVudC0+c3R5bGUoKS5zdHlsZVR5cGUoKSkgewot
ICAgIGNhc2UgQkVGT1JFOgotICAgICAgICAvLyBUaGUgc2Vjb25kIHJlZ2lvbiBjYW4gYmUgdGhl
IG5vZGUgb3IgdGhlIGFmdGVyIHBzZXVkby1lbGVtZW50IChiZWZvcmUgaXMgc21hbGxlciB0aGFu
IGFueSBvZiB0aG9zZSkuCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGNhc2UgQUZURVI6Ci0g
ICAgICAgIC8vIFRoZSBzZWNvbmQgcmVnaW9uIGNhbiBiZSB0aGUgbm9kZSBvciB0aGUgYmVmb3Jl
IHBzZXVkby1lbGVtZW50IChhZnRlciBpcyBncmVhdGVyIHRoYW4gYW55IG9mIHRob3NlKS4KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgTk9QU0VVRE86Ci0gICAgICAgIC8vIFRoZSBz
ZWNvbmQgcmVnaW9uIGNhbiBlaXRoZXIgYmUgdGhlIGJlZm9yZSBvciB0aGUgYWZ0ZXIgcHNldWRv
LWVsZW1lbnQgKHRoZSBub2RlIGlzIG9ubHkgc21hbGxlciB0aGFuIHRoZSBhZnRlciBwc2V1ZG8t
ZWxlbWVudCkuCi0gICAgICAgIHJldHVybiBmaXJzdEZyYWdtZW50LT5zdHlsZSgpLnN0eWxlVHlw
ZSgpID09IEFGVEVSOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiB0cnVlOwotfQotCi0vLyBUaGlzIGhl
bHBlciBmdW5jdGlvbiBhZGRzIGEgcmVnaW9uIHRvIGEgbGlzdCBwcmVzZXJ2aW5nIHRoZSBvcmRl
ciBwcm9wZXJ0eSBvZiB0aGUgbGlzdC4KLXN0YXRpYyB2b2lkIGFkZEZyYWdtZW50VG9MaXN0KFJl
bmRlclJlZ2lvbkxpc3QmIHJlZ2lvbkxpc3QsIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZW5k
ZXJOYW1lZEZsb3dGcmFnbWVudCkKLXsKLSAgICBpZiAocmVnaW9uTGlzdC5pc0VtcHR5KCkpCi0g
ICAgICAgIHJlZ2lvbkxpc3QuYWRkKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKLSAgICBlbHNl
IHsKLSAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgcmVnaW9uICJncmVhdGVyIiB0aGFuIHJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50LgotICAgICAgICBhdXRvIGl0ID0gcmVnaW9uTGlzdC5iZWdpbigp
OwotICAgICAgICB3aGlsZSAoaXQgIT0gcmVnaW9uTGlzdC5lbmQoKSAmJiAhY29tcGFyZVJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50cyhyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCwgZG93bmNhc3Q8UmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCppdCkpKQotICAgICAgICAgICAgKytpdDsKLSAgICAgICAg
cmVnaW9uTGlzdC5pbnNlcnRCZWZvcmUoaXQsIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KTsKLSAg
ICB9Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjphZGRGcmFnbWVudFRvTmFtZWRG
bG93VGhyZWFkKFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiByZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCkKLXsKLSAgICBBU1NFUlQocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQpOwotICAgIEFTU0VSVCgh
cmVuZGVyTmFtZWRGbG93RnJhZ21lbnQtPmlzVmFsaWQoKSk7Ci0KLSAgICBpZiAocmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQtPnBhcmVudE5hbWVkRmxvd1RocmVhZCgpKQotICAgICAgICBhZGREZXBl
bmRlbmN5T25GbG93VGhyZWFkKHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LT5wYXJlbnROYW1lZEZs
b3dUaHJlYWQoKSk7Ci0KLSAgICByZW5kZXJOYW1lZEZsb3dGcmFnbWVudC0+c2V0SXNWYWxpZCh0
cnVlKTsKLSAgICByZW5kZXJOYW1lZEZsb3dGcmFnbWVudC0+dXBkYXRlUmVnaW9uRmxhZ3MoKTsK
LSAgICBhZGRGcmFnbWVudFRvTGlzdChtX3JlZ2lvbkxpc3QsIHJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50KTsKLQotICAgIGlmIChtX3JlZ2lvbkxpc3QuZmlyc3QoKSA9PSByZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCkKLSAgICAgICAgdXBkYXRlV3JpdGluZ01vZGUoKTsKLX0KLQotdm9pZCBSZW5kZXJO
YW1lZEZsb3dUaHJlYWQ6OmFkZFJlZ2lvblRvVGhyZWFkKFJlbmRlclJlZ2lvbiogcmVuZGVyUmVn
aW9uKQotewotICAgIEFTU0VSVChyZW5kZXJSZWdpb24pOwotICAgIEFTU0VSVCghcmVuZGVyUmVn
aW9uLT5pc1ZhbGlkKCkpOwotCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQmIHJlbmRlck5h
bWVkRmxvd0ZyYWdtZW50ID0gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KCpyZW5k
ZXJSZWdpb24pOwotICAgIHJlc2V0TWFya0ZvckRlc3RydWN0aW9uKCk7Ci0KLSAgICBpZiAocmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQucGFyZW50TmFtZWRGbG93VGhyZWFkKCkgJiYgcmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQucGFyZW50TmFtZWRGbG93VGhyZWFkKCktPmRlcGVuZHNPbih0aGlzKSkg
ewotICAgICAgICAvLyBUaGUgb3JkZXIgb2YgaW52YWxpZCByZWdpb25zIGlzIGlycmVsZXZhbnQu
Ci0gICAgICAgIG1faW52YWxpZFJlZ2lvbkxpc3QuYWRkKCZyZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCk7Ci0gICAgICAgIC8vIFJlZ2lzdGVyIG91cnNlbGYgdG8gZ2V0IGEgbm90aWZpY2F0aW9uIHdo
ZW4gdGhlIHN0YXRlIGNoYW5nZXMuCi0gICAgICAgIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LnBh
cmVudE5hbWVkRmxvd1RocmVhZCgpLT5tX29ic2VydmVyVGhyZWFkc1NldC5hZGQodGhpcyk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhZGRGcmFnbWVudFRvTmFtZWRGbG93VGhyZWFk
KCZyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCk7Ci0KLSAgICBpbnZhbGlkYXRlUmVnaW9ucygpOwot
fQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVtb3ZlUmVnaW9uRnJvbVRocmVhZChS
ZW5kZXJSZWdpb24qIHJlbmRlclJlZ2lvbikKLXsKLSAgICBBU1NFUlQocmVuZGVyUmVnaW9uKTsK
LQotICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50JiByZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA9
IGRvd25jYXN0PFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50PigqcmVuZGVyUmVnaW9uKTsKLSAgICBp
ZiAocmVuZGVyTmFtZWRGbG93RnJhZ21lbnQucGFyZW50TmFtZWRGbG93VGhyZWFkKCkpIHsKLSAg
ICAgICAgaWYgKCFyZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX2ludmFsaWRSZWdpb25MaXN0LmNvbnRhaW5zKCZyZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCkpOwotICAgICAgICAgICAgbV9pbnZhbGlkUmVnaW9uTGlzdC5yZW1vdmUoJnJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50KTsKLSAgICAgICAgICAgIHJlbmRlck5hbWVkRmxvd0ZyYWdtZW50
LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5tX29ic2VydmVyVGhyZWFkc1NldC5yZW1vdmUodGhp
cyk7Ci0gICAgICAgICAgICAvLyBObyBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHJlZ2lvbnMgcmVj
dGFuZ2xlcy4gVGhlIHJlbW92ZWQgcmVnaW9uCi0gICAgICAgICAgICAvLyB3YXMgbm90IHRha2Vu
IGludG8gYWNjb3VudC4gSnVzdCByZXR1cm4gaGVyZS4KLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICByZW1vdmVEZXBlbmRlbmN5T25GbG93VGhyZWFkKHJlbmRlck5hbWVk
Rmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQobV9yZWdpb25MaXN0LmNvbnRhaW5zKCZyZW5kZXJOYW1lZEZsb3dGcmFnbWVudCkpOwotICAg
IGJvb2wgd2FzRmlyc3QgPSBtX3JlZ2lvbkxpc3QuZmlyc3QoKSA9PSAmcmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQ7Ci0gICAgbV9yZWdpb25MaXN0LnJlbW92ZSgmcmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQpOwotCi0gICAgaWYgKGNhbkJlRGVzdHJveWVkKCkpCi0gICAgICAgIHNldE1hcmtGb3JEZXN0
cnVjdGlvbigpOwotCi0gICAgaWYgKCFtX3JlZ2lvbkxpc3QuaXNFbXB0eSgpICYmIHdhc0ZpcnN0
KQotICAgICAgICB1cGRhdGVXcml0aW5nTW9kZSgpOwotCi0gICAgaW52YWxpZGF0ZVJlZ2lvbnMo
KTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnJlZ2lvbkNoYW5nZWRXcml0aW5n
TW9kZShSZW5kZXJSZWdpb24qIHJlZ2lvbikKLXsKLSAgICBpZiAobV9yZWdpb25MaXN0LmZpcnN0
KCkgPT0gcmVnaW9uKQotICAgICAgICB1cGRhdGVXcml0aW5nTW9kZSgpOwotfQotCi1MYXlvdXRS
ZWN0IFJlbmRlck5hbWVkRmxvd1RocmVhZDo6ZGVjb3JhdGlvbnNDbGlwUmVjdEZvckJveEluTmFt
ZWRGbG93RnJhZ21lbnQoY29uc3QgUmVuZGVyQm94JiBib3gsIFJlbmRlck5hbWVkRmxvd0ZyYWdt
ZW50JiBmcmFnbWVudCkgY29uc3QKLXsKLSAgICBMYXlvdXRSZWN0IHZpc3VhbE92ZXJmbG93UmVj
dCA9IGZyYWdtZW50LnZpc3VhbE92ZXJmbG93UmVjdEZvckJveChib3gpOwotICAgIExheW91dFVu
aXQgaW5pdGlhbExvZ2ljYWxYID0gc3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
dmlzdWFsT3ZlcmZsb3dSZWN0LngoKSA6IHZpc3VhbE92ZXJmbG93UmVjdC55KCk7Ci0KLSAgICAv
LyBUaGUgdmlzdWFsIG92ZXJmbG93IHJlY3QgcmV0dXJuZWQgYnkgdmlzdWFsT3ZlcmZsb3dSZWN0
Rm9yQm94IGlzIGFscmVhZHkgZmxpcHBlZCBidXQgdGhlCi0gICAgLy8gUmVuZGVyUmVnaW9uOjpy
ZWN0Rmxvd1BvcnRpb25Gb3JCb3ggbWV0aG9kIGV4cGVjdHMgaXQgdW5mbGlwcGVkLgotICAgIGZs
aXBGb3JXcml0aW5nTW9kZUxvY2FsQ29vcmRpbmF0ZXModmlzdWFsT3ZlcmZsb3dSZWN0KTsKLSAg
ICB2aXN1YWxPdmVyZmxvd1JlY3QgPSBmcmFnbWVudC5yZWN0Rmxvd1BvcnRpb25Gb3JCb3goJmJv
eCwgdmlzdWFsT3ZlcmZsb3dSZWN0KTsKLSAgICAKLSAgICAvLyBOb3cgZmxpcCBpdCBhZ2Fpbi4K
LSAgICBmbGlwRm9yV3JpdGluZ01vZGVMb2NhbENvb3JkaW5hdGVzKHZpc3VhbE92ZXJmbG93UmVj
dCk7Ci0KLSAgICAvLyBUYWtlIHRoZSBzY3JvbGxlZCBvZmZzZXQgb2YgdGhpcyBvYmplY3QncyBw
YXJlbnRzIGludG8gY29uc2lkZXJhdGlvbi4KLSAgICBTY3JvbGxQb3NpdGlvbiBzY3JvbGxQb3Np
dGlvbjsKLSAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrID0gYm94LmNvbnRhaW5pbmdC
bG9jaygpOwotICAgIHdoaWxlIChjb250YWluaW5nQmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpj
b250YWluaW5nQmxvY2spKSB7Ci0gICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzUmVuZGVy
TmFtZWRGbG93VGhyZWFkKCkpIHsKLSAgICAgICAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGZs
b3cgdGhyZWFkLCB0YWtlIHRoZSBzY3JvbGxlZCBvZmZzZXQgb2YgdGhlIHJlZ2lvbiBpbnRvIGNv
bnNpZGVyYXRpb24uCi0gICAgICAgICAgICBBU1NFUlQoY29udGFpbmluZ0Jsb2NrID09IHRoaXMp
OwotICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24gKz0gdG9JbnRTaXplKGZyYWdtZW50LmZyYWdt
ZW50Q29udGFpbmVyKCkuc2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2Nyb2xsUG9zaXRpb24gKz0gdG9JbnRTaXplKGNv
bnRhaW5pbmdCbG9jay0+c2Nyb2xsUG9zaXRpb24oKSk7Ci0gICAgICAgIGNvbnRhaW5pbmdCbG9j
ayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgfQotCi0gICAgaWYg
KCFzY3JvbGxQb3NpdGlvbi5pc1plcm8oKSkgewotICAgICAgICBpZiAoc3R5bGUoKS5pc0ZsaXBw
ZWRCbG9ja3NXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSAtc2Ny
b2xsUG9zaXRpb247Ci0gICAgICAgIAotICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3QuaW5mbGF0
ZVgoc2Nyb2xsUG9zaXRpb24ueCgpKTsKLSAgICAgICAgdmlzdWFsT3ZlcmZsb3dSZWN0LmluZmxh
dGVZKHNjcm9sbFBvc2l0aW9uLnkoKSk7Ci0gICAgfQotICAgIAotICAgIC8vIExheWVycyBhcmUg
aW4gcGh5c2ljYWwgY29vcmRpbmF0ZXMgc28gdGhlIG9yaWdpbiBtdXN0IGJlIG1vdmVkIHRvIHRo
ZSBwaHlzaWNhbCB0b3AtbGVmdCBvZiB0aGUgZmxvd3RocmVhZC4KLSAgICBpZiAoc3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgIGlmIChzdHlsZSgpLmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92
ZUJ5KExheW91dFBvaW50KDAsIGhlaWdodCgpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHZpc3VhbE92ZXJmbG93UmVjdC5tb3ZlQnkoTGF5b3V0UG9pbnQod2lkdGgoKSwgMCkpOwotICAg
IH0KLQotICAgIGNvbnN0IFJlbmRlckJveCogaXRlckJveCA9ICZib3g7Ci0gICAgd2hpbGUgKGl0
ZXJCb3ggJiYgaXRlckJveCAhPSB0aGlzKSB7Ci0gICAgICAgIFJlbmRlckJsb2NrKiBjb250YWlu
ZXJCbG9jayA9IGl0ZXJCb3gtPmNvbnRhaW5pbmdCbG9jaygpOwotCi0gICAgICAgIC8vIEZJWE1F
OiBUaGlzIGRvZXNuJ3Qgd29yayBwcm9wZXJseSB3aXRoIGZsaXBwZWQgd3JpdGluZyBtb2Rlcy4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTE0
OQotICAgICAgICBpZiAoaXRlckJveC0+aXNQb3NpdGlvbmVkKCkpIHsKLSAgICAgICAgICAgIC8v
IEZvciBwb3NpdGlvbmVkIGVsZW1lbnRzLCBqdXN0IHVzZSB0aGUgbGF5ZXIncyBhYnNvbHV0ZSBi
b3VuZGluZyBib3guCi0gICAgICAgICAgICB2aXN1YWxPdmVyZmxvd1JlY3QubW92ZUJ5KGl0ZXJC
b3gtPmxheWVyKCktPmFic29sdXRlQm91bmRpbmdCb3goKS5sb2NhdGlvbigpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgTGF5b3V0UmVjdCBjdXJyZW50Qm94UmVj
dCA9IGl0ZXJCb3gtPmZyYW1lUmVjdCgpOwotICAgICAgICBpZiAoaXRlckJveC0+c3R5bGUoKS5p
c0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoaXRlckJveC0+
c3R5bGUoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICAgICAgICAgIGN1cnJl
bnRCb3hSZWN0LnNldFkoY3VycmVudEJveFJlY3QuaGVpZ2h0KCkgLSBjdXJyZW50Qm94UmVjdC5t
YXhZKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGN1cnJlbnRCb3hSZWN0
LnNldFgoY3VycmVudEJveFJlY3Qud2lkdGgoKSAtIGN1cnJlbnRCb3hSZWN0Lm1heFgoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoY29udGFpbmVyQmxvY2stPnN0eWxlKCkud3JpdGluZ01v
ZGUoKSAhPSBpdGVyQm94LT5zdHlsZSgpLndyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICBpdGVy
Qm94LT5mbGlwRm9yV3JpdGluZ01vZGUoY3VycmVudEJveFJlY3QpOwotCi0gICAgICAgIHZpc3Vh
bE92ZXJmbG93UmVjdC5tb3ZlQnkoY3VycmVudEJveFJlY3QubG9jYXRpb24oKSk7Ci0gICAgICAg
IGl0ZXJCb3ggPSBjb250YWluZXJCbG9jazsKLSAgICB9Ci0KLSAgICAvLyBTaW5jZSB0aGUgcHVy
cG9zZSBvZiB0aGlzIG1ldGhvZCBpcyB0byBtYWtlIHN1cmUgdGhlIGJvcmRlcnMgb2YgYSBmcmFn
bWVudGVkCi0gICAgLy8gZWxlbWVudCBkb24ndCBvdmVyZmxvdyB0aGUgcmVnaW9uIGluIHRoZSBm
cmFnbWVudGF0aW9uIGRpcmVjdGlvbiwgdGhlcmUncyBubwotICAgIC8vIHBvaW50IGluIHJlc3Ry
aWN0aW5nIHRoZSBjbGlwcGluZyByZWN0IG9uIHRoZSBsb2dpY2FsIFggYXhpcy4gCi0gICAgLy8g
VGhpcyBhbHNvIHNhdmVzIHVzIHRoZSB0cm91YmxlIG9mIGhhbmRsaW5nIHBlcmNlbnQtYmFzZWQg
d2lkdGhzIGFuZCBtYXJnaW5zCi0gICAgLy8gc2luY2UgdGhlIGFic29sdXRlIGJvdW5kaW5nIGJv
eCBvZiBhIHBvc2l0aW9uZWQgZWxlbWVudCB3b3VsZCBub3QgY29udGFpbgotICAgIC8vIHRoZSBj
b3JyZWN0IGNvb3JkaW5hdGVzIHJlbGF0aXZlIHRvIHRoZSByZWdpb24gd2UncmUgaW50ZXJlc3Rl
ZCBpbiwgYnV0IHJhdGhlcgotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBhY3R1YWwgZmxvdyB0aHJl
YWQuCi0gICAgaWYgKHN0eWxlKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewotICAgICAg
ICBpZiAoaW5pdGlhbExvZ2ljYWxYIDwgdmlzdWFsT3ZlcmZsb3dSZWN0LngoKSkKLSAgICAgICAg
ICAgIHZpc3VhbE92ZXJmbG93UmVjdC5zaGlmdFhFZGdlVG8oaW5pdGlhbExvZ2ljYWxYKTsKLSAg
ICAgICAgaWYgKHZpc3VhbE92ZXJmbG93UmVjdC53aWR0aCgpIDwgZnJhbWVSZWN0KCkud2lkdGgo
KSkKLSAgICAgICAgICAgIHZpc3VhbE92ZXJmbG93UmVjdC5zZXRXaWR0aChmcmFtZVJlY3QoKS53
aWR0aCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoaW5pdGlhbExvZ2ljYWxYIDwgdmlz
dWFsT3ZlcmZsb3dSZWN0LnkoKSkKLSAgICAgICAgICAgIHZpc3VhbE92ZXJmbG93UmVjdC5zaGlm
dFlFZGdlVG8oaW5pdGlhbExvZ2ljYWxYKTsKLSAgICAgICAgaWYgKHZpc3VhbE92ZXJmbG93UmVj
dC5oZWlnaHQoKSA8IGZyYW1lUmVjdCgpLmhlaWdodCgpKQotICAgICAgICAgICAgdmlzdWFsT3Zl
cmZsb3dSZWN0LnNldEhlaWdodChmcmFtZVJlY3QoKS5oZWlnaHQoKSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHZpc3VhbE92ZXJmbG93UmVjdDsKLX0KLQotUmVuZGVyQmxvY2sqIFJlbmRlck5hbWVk
Rmxvd1RocmVhZDo6ZnJhZ21lbnRGcm9tUmVuZGVyQm94QXNSZW5kZXJCbG9jayhSZW5kZXJCb3gq
IHJlbmRlckJveCwgY29uc3QgSW50UG9pbnQmIGFic29sdXRlUG9pbnQsIGNvbnN0IFJlbmRlckJv
eCYgZmxvd2VkQm94KQotewotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJl
YWQ+KCpyZW5kZXJCb3gpLmZyYWdtZW50RnJvbUFic29sdXRlUG9pbnRBbmRCb3goYWJzb2x1dGVQ
b2ludCwgZmxvd2VkQm94KTsKLX0KLQotUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIFJlbmRlck5h
bWVkRmxvd1RocmVhZDo6ZnJhZ21lbnRGcm9tQWJzb2x1dGVQb2ludEFuZEJveChjb25zdCBJbnRQ
b2ludCYgYWJzb2x1dGVQb2ludCwgY29uc3QgUmVuZGVyQm94JiBmbG93ZWRCb3gpCi17Ci0gICAg
UmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBl
bmRSZWdpb24gPSBudWxscHRyOwotICAgIGlmICghZ2V0UmVnaW9uUmFuZ2VGb3JCb3goJmZsb3dl
ZEJveCwgc3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIAotICAgIGZvciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRSZWdpb24p
LCBlbmQgPSBtX3JlZ2lvbkxpc3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAg
ICAgYXV0byYgZnJhZ21lbnQgPSBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKipp
dGVyKTsKLSAgICAgICAgUmVuZGVyQmxvY2tGbG93JiBmcmFnbWVudENvbnRhaW5lciA9IGZyYWdt
ZW50LmZyYWdtZW50Q29udGFpbmVyKCk7Ci0gICAgICAgIEludFJlY3QgZnJhZ21lbnRBYnNvbHV0
ZVJlY3Qocm91bmRlZEludFBvaW50KGZyYWdtZW50Q29udGFpbmVyLmxvY2FsVG9BYnNvbHV0ZSgp
KSwgcm91bmRlZEludFNpemUoZnJhZ21lbnRDb250YWluZXIucGFkZGluZ0JveFJlY3QoKS5zaXpl
KCkpKTsKLSAgICAgICAgaWYgKGZyYWdtZW50QWJzb2x1dGVSZWN0LmNvbnRhaW5zKGFic29sdXRl
UG9pbnQpKQotICAgICAgICAgICAgcmV0dXJuICZmcmFnbWVudDsKLSAgICAgICAgCi0gICAgICAg
IGlmICgmZnJhZ21lbnQgPT0gZW5kUmVnaW9uKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVh
ZDo6Y29tcHV0ZU92ZXJmbG93KExheW91dFVuaXQgb2xkQ2xpZW50QWZ0ZXJFZGdlLCBib29sIHJl
Y29tcHV0ZUZsb2F0cykKLXsKLSAgICBSZW5kZXJGbG93VGhyZWFkOjpjb21wdXRlT3ZlcmZsb3co
b2xkQ2xpZW50QWZ0ZXJFZGdlLCByZWNvbXB1dGVGbG9hdHMpOwotCi0gICAgbV9mbG93Q29udGVu
dEJvdHRvbSA9IG9sZENsaWVudEFmdGVyRWRnZTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dU
aHJlYWQ6OmxheW91dCgpCi17Ci0gICAgUmVuZGVyRmxvd1RocmVhZDo6bGF5b3V0KCk7Ci0KLSAg
ICAvLyBJZiB0aGUgbnVtYmVyIG9mIHJlZ2lvbnMgaGFzIGNoYW5nZWQgc2luY2Ugd2UgbGFzdCBj
b21wdXRlZCB0aGUgb3ZlcnNldCBwcm9wZXJ0eSwgc2NoZWR1bGUgdGhlIHJlZ2lvbk92ZXJzZXRD
aGFuZ2UgZXZlbnQuCi0gICAgaWYgKHByZXZpb3VzUmVnaW9uQ291bnRDaGFuZ2VkKCkpIHsKLSAg
ICAgICAgc2V0RGlzcGF0Y2hSZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnQodHJ1ZSk7Ci0gICAgICAg
IHVwZGF0ZVByZXZpb3VzUmVnaW9uQ291bnQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkOjpkaXNwYXRjaE5hbWVkRmxvd0V2ZW50cygpCi17Ci0gICAgQVNTRVJUKGlu
RmluYWxMYXlvdXRQaGFzZSgpKTsKLQotICAgIGRpc3BhdGNoUmVnaW9uT3ZlcnNldENoYW5nZUV2
ZW50SWZOZWVkZWQoKTsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrSW52
YWxpZFJlZ2lvbnMoKQotewotICAgIFZlY3RvcjxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCo+IG5l
d1ZhbGlkRnJhZ21lbnRzOwotICAgIGZvciAoYXV0byYgcmVnaW9uIDogbV9pbnZhbGlkUmVnaW9u
TGlzdCkgewotICAgICAgICBhdXRvJiBuYW1lZEZsb3dGcmFnbWVudCA9IGRvd25jYXN0PFJlbmRl
ck5hbWVkRmxvd0ZyYWdtZW50PigqcmVnaW9uKTsKLSAgICAgICAgLy8gVGhlIG9ubHkgcmVhc29u
IGEgcmVnaW9uIHdvdWxkIGJlIGludmFsaWQgaXMgYmVjYXVzZSBpdCBoYXMgYSBwYXJlbnQgZmxv
dyB0aHJlYWQuCi0gICAgICAgIEFTU0VSVCghbmFtZWRGbG93RnJhZ21lbnQuaXNWYWxpZCgpICYm
IG5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpKTsKLSAgICAgICAgaWYg
KG5hbWVkRmxvd0ZyYWdtZW50LnBhcmVudE5hbWVkRmxvd1RocmVhZCgpLT5kZXBlbmRzT24odGhp
cykpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBuZXdWYWxpZEZyYWdtZW50cy5h
cHBlbmQoJm5hbWVkRmxvd0ZyYWdtZW50KTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIG5hbWVk
Rmxvd0ZyYWdtZW50IDogbmV3VmFsaWRGcmFnbWVudHMpIHsKLSAgICAgICAgbV9pbnZhbGlkUmVn
aW9uTGlzdC5yZW1vdmUobmFtZWRGbG93RnJhZ21lbnQpOwotICAgICAgICBuYW1lZEZsb3dGcmFn
bWVudC0+cGFyZW50TmFtZWRGbG93VGhyZWFkKCktPm1fb2JzZXJ2ZXJUaHJlYWRzU2V0LnJlbW92
ZSh0aGlzKTsKLSAgICAgICAgYWRkRnJhZ21lbnRUb05hbWVkRmxvd1RocmVhZChuYW1lZEZsb3dG
cmFnbWVudCk7Ci0gICAgfQotCi0gICAgaWYgKCFuZXdWYWxpZEZyYWdtZW50cy5pc0VtcHR5KCkp
Ci0gICAgICAgIGludmFsaWRhdGVSZWdpb25zKCk7Ci0KLSAgICBpZiAobV9vYnNlcnZlclRocmVh
ZHNTZXQuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBOb3RpZnkgYWxsIHRo
ZSBmbG93IHRocmVhZHMgdGhhdCB3ZXJlIGRlcGVuZGVudCBvbiB0aGlzIGZsb3cuCi0KLSAgICAv
LyBDcmVhdGUgYSBjb3B5IG9mIHRoZSBsaXN0IGZpcnN0LiBUaGF0J3MgYmVjYXVzZSBvYnNlcnZl
cnMgbWlnaHQgY2hhbmdlIHRoZSBsaXN0IHdoZW4gY2FsbGluZyBjaGVja0ludmFsaWRSZWdpb25z
LgotICAgIFZlY3RvcjxSZW5kZXJOYW1lZEZsb3dUaHJlYWQqPiBvYnNlcnZlcnM7Ci0gICAgY29w
eVRvVmVjdG9yKG1fb2JzZXJ2ZXJUaHJlYWRzU2V0LCBvYnNlcnZlcnMpOwotCi0gICAgZm9yIChh
dXRvJiBmbG93VGhyZWFkIDogb2JzZXJ2ZXJzKQotICAgICAgICBmbG93VGhyZWFkLT5jaGVja0lu
dmFsaWRSZWdpb25zKCk7Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjphZGREZXBl
bmRlbmN5T25GbG93VGhyZWFkKFJlbmRlck5hbWVkRmxvd1RocmVhZCogb3RoZXJGbG93VGhyZWFk
KQotewotICAgIFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ6OkFkZFJlc3VsdCByZXN1
bHQgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQuYWRkKG90aGVyRmxvd1RocmVhZCk7Ci0gICAg
aWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHRp
bWUgd2Ugc2VlIHRoaXMgZGVwZW5kZW5jeS4gTWFrZSBzdXJlIHdlIHJlY2FsY3VsYXRlIGFsbCB0
aGUgZGVwZW5kZW5jaWVzLgotICAgICAgICB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5z
ZXRJc1JlbmRlck5hbWVkRmxvd1RocmVhZE9yZGVyRGlydHkodHJ1ZSk7Ci0gICAgfQotfQotCi12
b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6cmVtb3ZlRGVwZW5kZW5jeU9uRmxvd1RocmVhZChS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQqIG90aGVyRmxvd1RocmVhZCkKLXsKLSAgICBib29sIHJlbW92
ZWQgPSBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQucmVtb3ZlKG90aGVyRmxvd1RocmVhZCk7Ci0g
ICAgaWYgKHJlbW92ZWQpIHsKLSAgICAgICAgY2hlY2tJbnZhbGlkUmVnaW9ucygpOwotICAgICAg
ICB2aWV3KCkuZmxvd1RocmVhZENvbnRyb2xsZXIoKS5zZXRJc1JlbmRlck5hbWVkRmxvd1RocmVh
ZE9yZGVyRGlydHkodHJ1ZSk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVh
ZDo6cHVzaERlcGVuZGVuY2llcyhSZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0JiBsaXN0KQotewot
ICAgIGZvciAoYXV0byYgZmxvd1RocmVhZFBhaXIgOiBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQp
IHsKLSAgICAgICAgYXV0byYgZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRQYWlyLmtleTsKLSAgICAg
ICAgaWYgKGxpc3QuY29udGFpbnMoZmxvd1RocmVhZCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgZmxvd1RocmVhZC0+cHVzaERlcGVuZGVuY2llcyhsaXN0KTsKLSAgICAgICAgbGlz
dC5hZGQoZmxvd1RocmVhZCk7Ci0gICAgfQotfQotCi0vLyBUaGUgY29udGVudCBub2RlcyBsaXN0
IGNvbnRhaW5zIHRob3NlIG5vZGVzIHdpdGggLXdlYmtpdC1mbG93LWludG86IGZsb3cuCi0vLyBB
biBlbGVtZW50IHdpdGggZGlzcGxheTpub25lIHNob3VsZCBhbHNvIGJlIGxpc3RlZCBhbW9uZyB0
aG9zZSBub2Rlcy4KLS8vIFRoZSBsaXN0IG9mIG5vZGVzIGlzIG9yZGVyZWQuCi12b2lkIFJlbmRl
ck5hbWVkRmxvd1RocmVhZDo6cmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50RWxlbWVudChFbGVtZW50
JikKLXsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnVucmVnaXN0ZXJOYW1lZEZs
b3dDb250ZW50RWxlbWVudChFbGVtZW50JikKLXsKLX0KLQotYm9vbCBSZW5kZXJOYW1lZEZsb3dU
aHJlYWQ6Omhhc0NvbnRlbnRFbGVtZW50KEVsZW1lbnQmKSBjb25zdAotewotICAgIHJldHVybiBm
YWxzZTsKLX0KLSAgICAKLWNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyTmFtZWRGbG93VGhyZWFk
OjpmbG93VGhyZWFkTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG51bGxBdG9tKCk7Ci19Ci0K
LWJvb2wgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc0NoaWxkQWxsb3dlZChjb25zdCBSZW5kZXJP
YmplY3QmIGNoaWxkLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0Ci17Ci0gICAgaWYg
KCFjaGlsZC5ub2RlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgQVNTRVJUKGlzPEVs
ZW1lbnQ+KCpjaGlsZC5ub2RlKCkpKTsKLQotICAgIGF1dG8qIG9yaWdpbmFsUGFyZW50ID0gY29t
cG9zZWRUcmVlQW5jZXN0b3JzKCpjaGlsZC5ub2RlKCkpLmZpcnN0KCk7Ci0gICAgaWYgKCFvcmln
aW5hbFBhcmVudCB8fCAhb3JpZ2luYWxQYXJlbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgcmV0dXJuIG9yaWdpbmFsUGFyZW50LT5yZW5kZXJlcigpLT5pc0NoaWxk
QWxsb3dlZChjaGlsZCwgc3R5bGUpOwotfQotCi12b2lkIFJlbmRlck5hbWVkRmxvd1RocmVhZDo6
ZGlzcGF0Y2hSZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnRJZk5lZWRlZCgpCi17Ci19Ci0KLXZvaWQg
UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnRUaW1lckZpcmVk
KCkKLXsKLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OnNldE1hcmtGb3JEZXN0cnVj
dGlvbigpCi17Ci19Ci0KLXZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZXNldE1hcmtGb3JE
ZXN0cnVjdGlvbigpCi17Ci19Ci0KLWJvb2wgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjppc01hcmtl
ZEZvckRlc3RydWN0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRp
YyBib29sIGlzQ29udGFpbmVkSW5FbGVtZW50cyhjb25zdCBWZWN0b3I8RWxlbWVudCo+JiBvdGhl
cnMsIEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgZm9yIChhdXRvJiBvdGhlciA6IG90aGVycykg
ewotICAgICAgICBpZiAob3RoZXItPmNvbnRhaW5zKGVsZW1lbnQpKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIGJvb2wgYm94
SW50ZXJzZWN0c1JlZ2lvbihMYXlvdXRVbml0IGxvZ2ljYWxUb3BGb3JCb3gsIExheW91dFVuaXQg
bG9naWNhbEJvdHRvbUZvckJveCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yUmVnaW9uLCBMYXlv
dXRVbml0IGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24pCi17Ci0gICAgYm9vbCByZWdpb25Jc0VtcHR5
ID0gbG9naWNhbEJvdHRvbUZvclJlZ2lvbiAhPSBMYXlvdXRVbml0OjptYXgoKSAmJiBsb2dpY2Fs
VG9wRm9yUmVnaW9uICE9IExheW91dFVuaXQ6Om1pbigpCi0gICAgICAgICYmIChsb2dpY2FsQm90
dG9tRm9yUmVnaW9uIC0gbG9naWNhbFRvcEZvclJlZ2lvbikgPD0gMDsKLSAgICByZXR1cm4gIChs
b2dpY2FsQm90dG9tRm9yQm94IC0gbG9naWNhbFRvcEZvckJveCkgPiAwCi0gICAgICAgICYmICFy
ZWdpb25Jc0VtcHR5Ci0gICAgICAgICYmIGxvZ2ljYWxUb3BGb3JCb3ggPCBsb2dpY2FsQm90dG9t
Rm9yUmVnaW9uICYmIGxvZ2ljYWxUb3BGb3JSZWdpb24gPCBsb2dpY2FsQm90dG9tRm9yQm94Owot
fQotCi0vLyBSZXRyaWV2ZSB0aGUgbmV4dCBub2RlIHRvIGJlIHZpc2l0ZWQgd2hpbGUgY29tcHV0
aW5nIHRoZSByYW5nZXMgaW5zaWRlIGEgcmVnaW9uLgotc3RhdGljIE5vZGUqIG5leHROb2RlSW5z
aWRlQ29udGVudEVsZW1lbnQoY29uc3QgTm9kZSYgY3Vyck5vZGUsIGNvbnN0IEVsZW1lbnQqIGNv
bnRlbnRFbGVtZW50KQotewotICAgIGlmIChjdXJyTm9kZS5yZW5kZXJlcigpICYmIGN1cnJOb2Rl
LnJlbmRlcmVyKCktPmlzU1ZHUm9vdCgpKQotICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6
bmV4dFNraXBwaW5nQ2hpbGRyZW4oY3Vyck5vZGUsIGNvbnRlbnRFbGVtZW50KTsKLQotICAgIHJl
dHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0KGN1cnJOb2RlLCBjb250ZW50RWxlbWVudCk7Ci19Ci0K
LXZvaWQgUmVuZGVyTmFtZWRGbG93VGhyZWFkOjpnZXRSYW5nZXMoVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+JiByYW5nZU9iamVjdHMsIGNvbnN0IFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBuYW1lZEZs
b3dGcmFnbWVudCkgY29uc3QKLXsKLSAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3BGb3JSZWdpb247
Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tRm9yUmVnaW9uOwotCi0gICAgLy8gZXh0ZW5k
IHRoZSBmaXJzdCByZWdpb24gdG9wIHRvIGNvbnRhaW4gZXZlcnl0aGluZyB1cCB0byBpdHMgbG9n
aWNhbCBoZWlnaHQKLSAgICBpZiAobmFtZWRGbG93RnJhZ21lbnQtPmlzRmlyc3RSZWdpb24oKSkK
LSAgICAgICAgbG9naWNhbFRvcEZvclJlZ2lvbiA9IExheW91dFVuaXQ6Om1pbigpOwotICAgIGVs
c2UKLSAgICAgICAgbG9naWNhbFRvcEZvclJlZ2lvbiA9ICBuYW1lZEZsb3dGcmFnbWVudC0+bG9n
aWNhbFRvcEZvckZsb3dUaHJlYWRDb250ZW50KCk7Ci0KLSAgICAvLyBleHRlbmQgdGhlIGxhc3Qg
cmVnaW9uIHRvIGNvbnRhaW4gZXZlcnl0aGluZyBhYm92ZSBpdHMgeSgpCi0gICAgaWYgKG5hbWVk
Rmxvd0ZyYWdtZW50LT5pc0xhc3RSZWdpb24oKSkKLSAgICAgICAgbG9naWNhbEJvdHRvbUZvclJl
Z2lvbiA9IExheW91dFVuaXQ6Om1heCgpOwotICAgIGVsc2UKLSAgICAgICAgbG9naWNhbEJvdHRv
bUZvclJlZ2lvbiA9IG5hbWVkRmxvd0ZyYWdtZW50LT5sb2dpY2FsQm90dG9tRm9yRmxvd1RocmVh
ZENvbnRlbnQoKTsKLQotICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbWVudHM7Ci0gICAgLy8gZWxp
bWluYXRlIHRoZSBjb250ZW50RWxlbWVudHMgdGhhdCBhcmUgZGVzY2VuZGFudHMgb2Ygb3RoZXIg
Y29udGVudEVsZW1lbnRzCi0gICAgZm9yIChhdXRvJiBlbGVtZW50IDogY29udGVudEVsZW1lbnRz
KCkpIHsKLSAgICAgICAgaWYgKCFpc0NvbnRhaW5lZEluRWxlbWVudHMoZWxlbWVudHMsIGVsZW1l
bnQpKQotICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKGVsZW1lbnQpOwotICAgIH0KLQotICAg
IGZvciAoYXV0byYgY29udGVudEVsZW1lbnQgOiBlbGVtZW50cykgewotICAgICAgICBpZiAoIWNv
bnRlbnRFbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoY29udGVudEVsZW1lbnQtPmRv
Y3VtZW50KCkpOwotICAgICAgICBib29sIGZvdW5kU3RhcnRQb3NpdGlvbiA9IGZhbHNlOwotICAg
ICAgICBib29sIHN0YXJ0c0Fib3ZlUmVnaW9uID0gdHJ1ZTsKLSAgICAgICAgYm9vbCBlbmRzQmVs
b3dSZWdpb24gPSB0cnVlOwotICAgICAgICBib29sIHNraXBPdmVyT3V0c2lkZU5vZGVzID0gZmFs
c2U7Ci0gICAgICAgIE5vZGUqIGxhc3RFbmROb2RlID0gbnVsbHB0cjsKLQotICAgICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSBjb250ZW50RWxlbWVudDsgbm9kZTsgbm9kZSA9IG5leHROb2RlSW5zaWRl
Q29udGVudEVsZW1lbnQoKm5vZGUsIGNvbnRlbnRFbGVtZW50KSkgewotICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgICAgICBpZiAo
IXJlbmRlcmVyKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBMYXlv
dXRSZWN0IGJvdW5kaW5nQm94OwotICAgICAgICAgICAgaWYgKGlzPFJlbmRlcklubGluZT4oKnJl
bmRlcmVyKSkKLSAgICAgICAgICAgICAgICBib3VuZGluZ0JveCA9IGRvd25jYXN0PFJlbmRlcklu
bGluZT4oKnJlbmRlcmVyKS5saW5lc0JvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICBlbHNlIGlm
IChpczxSZW5kZXJUZXh0PigqcmVuZGVyZXIpKQotICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94
ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5saW5lc0JvdW5kaW5nQm94KCk7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJMaW5lQnJlYWs+KCpyZW5kZXJlcikpCi0gICAg
ICAgICAgICAgICAgYm91bmRpbmdCb3ggPSBkb3duY2FzdDxSZW5kZXJMaW5lQnJlYWs+KCpyZW5k
ZXJlcikubGluZXNCb3VuZGluZ0JveCgpOwotICAgICAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVy
Qm94PigqcmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIpOwotICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94
ID0gcmVuZGVyQm94LmZyYW1lUmVjdCgpOwotICAgICAgICAgICAgICAgIGlmIChyZW5kZXJCb3gu
aXNSZWxQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGJvdW5kaW5nQm94Lm1vdmUo
cmVuZGVyQm94LnJlbGF0aXZlUG9zaXRpb25Mb2dpY2FsT2Zmc2V0KCkpOwotICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIExheW91dFVu
aXQgb2Zmc2V0VG9wID0gcmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpLT5vZmZzZXRGcm9tTG9n
aWNhbFRvcE9mRmlyc3RQYWdlKCk7Ci0gICAgICAgICAgICBjb25zdCBMYXlvdXRQb2ludCBsb2dp
Y2FsT2Zmc2V0RnJvbVRvcChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gTGF5b3V0VW5pdCgp
IDogIG9mZnNldFRvcCwKLSAgICAgICAgICAgICAgICBpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gb2Zmc2V0VG9wIDogTGF5b3V0VW5pdCgpKTsKLQotICAgICAgICAgICAgYm91bmRpbmdCb3gu
bW92ZUJ5KGxvZ2ljYWxPZmZzZXRGcm9tVG9wKTsKLQotICAgICAgICAgICAgTGF5b3V0VW5pdCBs
b2dpY2FsVG9wRm9yUmVuZGVyZXIgPSBuYW1lZEZsb3dGcmFnbWVudC0+bG9naWNhbFRvcE9mRmxv
d1RocmVhZENvbnRlbnRSZWN0KGJvdW5kaW5nQm94KTsKLSAgICAgICAgICAgIExheW91dFVuaXQg
bG9naWNhbEJvdHRvbUZvclJlbmRlcmVyID0gbmFtZWRGbG93RnJhZ21lbnQtPmxvZ2ljYWxCb3R0
b21PZkZsb3dUaHJlYWRDb250ZW50UmVjdChib3VuZGluZ0JveCk7Ci0KLSAgICAgICAgICAgIC8v
IGlmIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBkb2Vzbid0IGludGVy
c2VjdCB0aGUgcmVnaW9uIGJveAotICAgICAgICAgICAgLy8gY2xvc2UgdGhlIGN1cnJlbnQgcmFu
Z2Ugb25seSBpZiB0aGUgc3RhcnQgZWxlbWVudCBiZWdhbiBpbnNpZGUgdGhlIHJlZ2lvbiwKLSAg
ICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IG1vdmUgdGhlIHN0YXJ0IHBvc2l0aW9uIGFmdGVy
IHRoaXMgbm9kZSBhbmQga2VlcCBza2lwcGluZyB0aGVtIHVudGlsIHdlIGZvdW5kIGEgcHJvcGVy
IHN0YXJ0IHBvc2l0aW9uLgotICAgICAgICAgICAgaWYgKCFib3hJbnRlcnNlY3RzUmVnaW9uKGxv
Z2ljYWxUb3BGb3JSZW5kZXJlciwgbG9naWNhbEJvdHRvbUZvclJlbmRlcmVyLCBsb2dpY2FsVG9w
Rm9yUmVnaW9uLCBsb2dpY2FsQm90dG9tRm9yUmVnaW9uKSkgewotICAgICAgICAgICAgICAgIGlm
IChmb3VuZFN0YXJ0UG9zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdGFydHNB
Ym92ZVJlZ2lvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBpbnRlcnNlY3RzUmVz
dWx0ID0gcmFuZ2UtPmludGVyc2VjdHNOb2RlKCpub2RlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghaW50ZXJzZWN0c1Jlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBpbnRlcnNlY3RzUmVz
dWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh
bmdlLT5zZXRFbmRCZWZvcmUoKm5vZGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VP
YmplY3RzLmFwcGVuZChyYW5nZS0+Y2xvbmVSYW5nZSgpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShjb250ZW50RWxlbWVudC0+ZG9jdW1lbnQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzdGFydHNBYm92ZVJlZ2lvbiA9IHRydWU7Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2tpcE92ZXJPdXRz
aWRlTm9kZXMgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
c2tpcE92ZXJPdXRzaWRlTm9kZXMpCi0gICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFy
dEFmdGVyKCpub2RlKTsKLSAgICAgICAgICAgICAgICBmb3VuZFN0YXJ0UG9zaXRpb24gPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gc3RhcnQgcG9zaXRpb24KLSAgICAgICAgICAgIGlmIChsb2dpY2FsVG9wRm9yUmVuZGVy
ZXIgPCBsb2dpY2FsVG9wRm9yUmVnaW9uICYmIHN0YXJ0c0Fib3ZlUmVnaW9uKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpyZW5kZXJlcikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gVGV4dCBjcm9zc2VzIHJlZ2lvbiB0b3AKLSAgICAgICAgICAgICAgICAgICAgLy8g
Zm9yIFRleHQgZWxlbWVudHMsIGp1c3QgZmluZCB0aGUgbGFzdCB0ZXh0Ym94IHRoYXQgaXMgY29u
dGFpbmVkIGluc2lkZSB0aGUgcmVnaW9uIGFuZCB1c2UgaXRzIHN0YXJ0KCkgb2Zmc2V0IGFzIHN0
YXJ0IHBvc2l0aW9uCi0gICAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQmIHRleHRSZW5kZXJl
ciA9IGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcik7Ci0gICAgICAgICAgICAgICAgICAg
IGZvciAoSW5saW5lVGV4dEJveCogYm94ID0gdGV4dFJlbmRlcmVyLmZpcnN0VGV4dEJveCgpOyBi
b3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKG9mZnNldFRvcCArIGJveC0+bG9naWNhbEJvdHRvbSgpIDwgbG9naWNhbFRvcEZvclJlZ2lv
bikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJhbmdlLT5zZXRTdGFydChQb3NpdGlvbihkb3duY2FzdDxUZXh0Pihub2RlKSwg
Ym94LT5zdGFydCgpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydHNBYm92ZVJlZ2lv
biA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAv
LyBub2RlIGNyb3NzZXMgcmVnaW9uIHRvcAotICAgICAgICAgICAgICAgICAgICAvLyBmb3IgYWxs
IGVsZW1lbnRzLCBleGNlcHQgVGV4dCwganVzdCBzZXQgdGhlIHN0YXJ0IHBvc2l0aW9uIHRvIGJl
IGJlZm9yZSB0aGVpciBjaGlsZHJlbgotICAgICAgICAgICAgICAgICAgICBzdGFydHNBYm92ZVJl
Z2lvbiA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFydChQb3NpdGlv
bihub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVuKSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBub2RlIHN0
YXJ0cyBpbnNpZGUgcmVnaW9uCi0gICAgICAgICAgICAgICAgLy8gZm9yIGVsZW1lbnRzIHRoYXQg
c3RhcnQgaW5zaWRlIHRoZSByZWdpb24sIHNldCB0aGUgc3RhcnQgcG9zaXRpb24gdG8gYmUgYmVm
b3JlIHRoZW0uIElmIHdlIGZvdW5kIG9uZSwgd2Ugd2lsbCBqdXN0IHNraXAgdGhlIG90aGVycyB1
bnRpbAotICAgICAgICAgICAgICAgIC8vIHRoZSByYW5nZSBpcyBjbG9zZWQuCi0gICAgICAgICAg
ICAgICAgaWYgKHN0YXJ0c0Fib3ZlUmVnaW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXJ0
c0Fib3ZlUmVnaW9uID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHJhbmdlLT5zZXRTdGFy
dEJlZm9yZSgqbm9kZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgc2tpcE92ZXJPdXRzaWRlTm9kZXMgID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3VuZFN0
YXJ0UG9zaXRpb24gPSB0cnVlOwotCi0gICAgICAgICAgICAvLyBlbmQgcG9zaXRpb24KLSAgICAg
ICAgICAgIGlmIChsb2dpY2FsQm90dG9tRm9yUmVnaW9uIDwgbG9naWNhbEJvdHRvbUZvclJlbmRl
cmVyICYmIChlbmRzQmVsb3dSZWdpb24gfHwgKCFlbmRzQmVsb3dSZWdpb24gJiYgIW5vZGUtPmlz
RGVzY2VuZGFudE9mKGxhc3RFbmROb2RlKSkpKSB7Ci0gICAgICAgICAgICAgICAgLy8gZm9yIFRl
eHQgZWxlbWVudHMsIGp1c3QgZmluZCBqdXN0IGZpbmQgdGhlIGxhc3QgdGV4dGJveCB0aGF0IGlz
IGNvbnRhaW5lZCBpbnNpZGUgdGhlIHJlZ2lvbiBhbmQgdXNlIGl0cyBzdGFydCgpK2xlbigpIG9m
ZnNldCBhcyBlbmQgcG9zaXRpb24KLSAgICAgICAgICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4o
KnJlbmRlcmVyKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBUZXh0IGNyb3NzZXMgcmVnaW9u
IGJvdHRvbQotICAgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIgPSBk
b3duY2FzdDxSZW5kZXJUZXh0PigqcmVuZGVyZXIpOwotICAgICAgICAgICAgICAgICAgICBJbmxp
bmVUZXh0Qm94KiBsYXN0Qm94ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChJ
bmxpbmVUZXh0Qm94KiBib3ggPSB0ZXh0UmVuZGVyZXIuZmlyc3RUZXh0Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0VGV4dEJveCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG9m
ZnNldFRvcCArIGJveC0+bG9naWNhbFRvcCgpKSA8IGxvZ2ljYWxCb3R0b21Gb3JSZWdpb24pIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0Qm94ID0gYm94OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGxhc3RCb3gpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGxhc3RCb3gpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNl
dEVuZChQb3NpdGlvbihkb3duY2FzdDxUZXh0Pihub2RlKSwgbGFzdEJveC0+c3RhcnQoKSArIGxh
c3RCb3gtPmxlbigpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbmRzQmVsb3dSZWdpb24gPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgbGFzdEVuZE5vZGUgPSBub2RlOwotICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIG5vZGUgY3Jvc3NlcyByZWdpb24g
Ym90dG9tCi0gICAgICAgICAgICAgICAgICAgIC8vIGZvciBhbGwgZWxlbWVudHMsIGV4Y2VwdCBU
ZXh0LCBqdXN0IHNldCB0aGUgc3RhcnQgcG9zaXRpb24gdG8gYmUgYWZ0ZXIgdGhlaXIgY2hpbGRy
ZW4KLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZChQb3NpdGlvbihub2RlLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc0FmdGVyQ2hpbGRyZW4pKTsKLSAgICAgICAgICAgICAgICAgICAgZW5k
c0JlbG93UmVnaW9uID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgbGFzdEVuZE5vZGUgPSBu
b2RlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgLy8gbm9kZSBlbmRzIGluc2lkZSByZWdpb24KLSAgICAgICAgICAgICAgICAvLyBmb3Ig
ZWxlbWVudHMgdGhhdCBlbmRzIGluc2lkZSB0aGUgcmVnaW9uLCBzZXQgdGhlIGVuZCBwb3NpdGlv
biB0byBiZSBhZnRlciB0aGVtCi0gICAgICAgICAgICAgICAgLy8gYWxsb3cgdGhpcyBlbmQgcG9z
aXRpb24gdG8gYmUgY2hhbmdlZCBvbmx5IGJ5IG90aGVyIGVsZW1lbnRzIHRoYXQgYXJlIG5vdCBk
ZXNjZW5kYW50cyBvZiB0aGUgY3VycmVudCBlbmQgbm9kZQotICAgICAgICAgICAgICAgIGlmIChl
bmRzQmVsb3dSZWdpb24gfHwgKCFlbmRzQmVsb3dSZWdpb24gJiYgIW5vZGUtPmlzRGVzY2VuZGFu
dE9mKGxhc3RFbmROb2RlKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2UtPnNldEVuZEFm
dGVyKCpub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgZW5kc0JlbG93UmVnaW9uID0gZmFsc2U7
Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RFbmROb2RlID0gbm9kZTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGZvdW5kU3RhcnRQb3Np
dGlvbiB8fCBza2lwT3Zlck91dHNpZGVOb2RlcykKLSAgICAgICAgICAgIHJhbmdlT2JqZWN0cy5h
cHBlbmQocmFuZ2UpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmFw
cGx5QnJlYWtBZnRlckNvbnRlbnQoTGF5b3V0VW5pdCBjbGllbnRIZWlnaHQpCi17Ci0gICAgLy8g
U2ltdWxhdGUgYSByZWdpb24gYnJlYWsgYXQgaGVpZ2h0LiBJZiBpdCBwb2ludHMgaW5zaWRlIGFu
IGF1dG8gbG9naWNhbCBoZWlnaHQgcmVnaW9uLAotICAgIC8vIHRoZW4gaXQgbWF5IGRldGVybWlu
ZSB0aGUgcmVnaW9uIGNvbXB1dGVkIGF1dG9oZWlnaHQuCi0gICAgYWRkRm9yY2VkUmVnaW9uQnJl
YWsodGhpcywgY2xpZW50SGVpZ2h0LCB0aGlzLCBmYWxzZSk7Ci19Ci0KLWJvb2wgUmVuZGVyTmFt
ZWRGbG93VGhyZWFkOjpjb2xsZWN0c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkgY29uc3QK
LXsKLSAgICAvLyBXZSBvbmx5IG5lZWQgdG8gbWFwIGxheWVycyB0byByZWdpb25zIGZvciBuYW1l
ZCBmbG93IHRocmVhZHMuCi0gICAgLy8gTXVsdGktY29sdW1uIHRocmVhZHMgYXJlIGRpc3BsYXll
ZCBvbiB0b3Agb2YgdGhlIHJlZ2lvbnMgYW5kIGRvIG5vdCByZXF1aXJlCi0gICAgLy8gZGlzdHJp
YnV0aW5nIHRoZSBsYXllcnMuCi0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gQ2hlY2sgaWYg
dGhlIGNvbnRlbnQgaXMgZmxvd24gaW50byBhdCBsZWFzdCBhIHJlZ2lvbiB3aXRoIHJlZ2lvbiBz
dHlsaW5nIHJ1bGVzLgotdm9pZCBSZW5kZXJOYW1lZEZsb3dUaHJlYWQ6OmNoZWNrUmVnaW9uc1dp
dGhTdHlsaW5nKCkKLXsKLSAgICBib29sIGhhc1JlZ2lvbnNXaXRoU3R5bGluZyA9IGZhbHNlOwot
ICAgIGZvciAoY29uc3QgYXV0byYgcmVnaW9uIDogbV9yZWdpb25MaXN0KSB7Ci0gICAgICAgIGlm
IChkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVudD4oKnJlZ2lvbikuaGFzQ3VzdG9tUmVn
aW9uU3R5bGUoKSkgewotICAgICAgICAgICAgaGFzUmVnaW9uc1dpdGhTdHlsaW5nID0gdHJ1ZTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIG1faGFzUmVnaW9uc1dp
dGhTdHlsaW5nID0gaGFzUmVnaW9uc1dpdGhTdHlsaW5nOwotfQotCi12b2lkIFJlbmRlck5hbWVk
Rmxvd1RocmVhZDo6Y2xlYXJSZW5kZXJPYmplY3RDdXN0b21TdHlsZShjb25zdCBSZW5kZXJFbGVt
ZW50JiBvYmplY3QpCi17Ci0gICAgLy8gQ2xlYXIgdGhlIHN0eWxlcyBmb3IgdGhlIG9iamVjdCBp
biB0aGUgcmVnaW9ucy4KLSAgICAvLyBGSVhNRTogUmVnaW9uIHN0eWxpbmcgaXMgbm90IGNvbXB1
dGVkIG9ubHkgZm9yIHRoZSByZWdpb24gcmFuZ2Ugb2YgdGhlIG9iamVjdCBzbyB0aGlzIGlzIHdo
eSB3ZSBuZWVkIHRvIHdhbGsgdGhlIHdob2xlIGNoYWluLgotICAgIGZvciAoYXV0byYgcmVnaW9u
IDogbV9yZWdpb25MaXN0KQotICAgICAgICBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dD4oKnJlZ2lvbikuY2xlYXJPYmplY3RTdHlsZUluUmVnaW9uKG9iamVjdCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTmFtZWRGbG93VGhyZWFkOjpyZW1vdmVGbG93Q2hpbGRJbmZvKFJlbmRlckVsZW1lbnQm
IGNoaWxkKQotewotICAgIFJlbmRlckZsb3dUaHJlYWQ6OnJlbW92ZUZsb3dDaGlsZEluZm8oY2hp
bGQpOwotICAgIGNsZWFyUmVuZGVyT2JqZWN0Q3VzdG9tU3R5bGUoY2hpbGQpOwotfQotCi1ib29s
IFJlbmRlck5hbWVkRmxvd1RocmVhZDo6YWJzb2x1dGVRdWFkc0ZvckJveChWZWN0b3I8RmxvYXRR
dWFkPiYgcXVhZHMsIGJvb2wqIHdhc0ZpeGVkLCBjb25zdCBSZW5kZXJCb3gqIHJlbmRlcmVyLCBm
bG9hdCBsb2NhbFRvcCwgZmxvYXQgbG9jYWxCb3R0b20pIGNvbnN0Ci17Ci0gICAgUmVuZGVyUmVn
aW9uKiBzdGFydFJlZ2lvbiA9IG51bGxwdHI7Ci0gICAgUmVuZGVyUmVnaW9uKiBlbmRSZWdpb24g
PSBudWxscHRyOwotICAgIC8vIElmIHRoZSBib3ggZG9lc24ndCBoYXZlIGEgcmFuZ2UsIHdlIGRv
bid0IGtub3cgaG93IGl0IGlzIGZyYWdtZW50ZWQgc28gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQg
YmVoYXZpb3VyLgotICAgIGlmICghY29tcHV0ZWRSZWdpb25SYW5nZUZvckJveChyZW5kZXJlciwg
c3RhcnRSZWdpb24sIGVuZFJlZ2lvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZv
ciAoYXV0byBpdGVyID0gbV9yZWdpb25MaXN0LmZpbmQoc3RhcnRSZWdpb24pLCBlbmQgPSBtX3Jl
Z2lvbkxpc3QuZW5kKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgUmVuZGVyUmVn
aW9uKiByZWdpb24gPSAqaXRlcjsKLQotICAgICAgICByZWdpb24tPmFic29sdXRlUXVhZHNGb3JC
b3hJblJlZ2lvbihxdWFkcywgd2FzRml4ZWQsIHJlbmRlcmVyLCBsb2NhbFRvcCwgbG9jYWxCb3R0
b20pOwotCi0gICAgICAgIGlmIChyZWdpb24gPT0gZW5kUmVnaW9uKQotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93VGhyZWFkLmgJKHJldmlzaW9uIDIy
MjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dUaHJlYWQu
aAkobm9uZXhpc3RlbnQpCkBAIC0xLDE0NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVuZGVy
Rmxvd1RocmVhZC5oIgotI2luY2x1ZGUgIlNlbGVjdGlvblN1YnRyZWVSb290LmgiCi0jaW5jbHVk
ZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KLSNpbmNsdWRlIDx3
dGYvTGlzdEhhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBOb2RlOwotY2xhc3MgUmVuZGVyTmFtZWRGbG93
VGhyZWFkOwotCi10eXBlZGVmIExpc3RIYXNoU2V0PFJlbmRlck5hbWVkRmxvd1RocmVhZCo+IFJl
bmRlck5hbWVkRmxvd1RocmVhZExpc3Q7Ci10eXBlZGVmIEhhc2hDb3VudGVkU2V0PFJlbmRlck5h
bWVkRmxvd1RocmVhZCo+IFJlbmRlck5hbWVkRmxvd1RocmVhZENvdW50ZWRTZXQ7Ci10eXBlZGVm
IExpc3RIYXNoU2V0PEVsZW1lbnQqPiBOYW1lZEZsb3dDb250ZW50RWxlbWVudHM7Ci0KLWNsYXNz
IFJlbmRlck5hbWVkRmxvd1RocmVhZCBmaW5hbCA6IHB1YmxpYyBSZW5kZXJGbG93VGhyZWFkLCBw
dWJsaWMgU2VsZWN0aW9uU3VidHJlZVJvb3QgewotcHVibGljOgotICAgIFJlbmRlck5hbWVkRmxv
d1RocmVhZChEb2N1bWVudCYsIFJlbmRlclN0eWxlJiYpOwotICAgIHZpcnR1YWwgflJlbmRlck5h
bWVkRmxvd1RocmVhZCgpOwotCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBmbG93VGhyZWFkTmFt
ZSgpIGNvbnN0OwotCi0gICAgY29uc3QgUmVuZGVyUmVnaW9uTGlzdCYgaW52YWxpZFJlbmRlclJl
Z2lvbkxpc3QoKSBjb25zdCB7IHJldHVybiBtX2ludmFsaWRSZWdpb25MaXN0OyB9Ci0KLSAgICBz
dGF0aWMgUmVuZGVyQmxvY2sqIGZyYWdtZW50RnJvbVJlbmRlckJveEFzUmVuZGVyQmxvY2soUmVu
ZGVyQm94KiwgY29uc3QgSW50UG9pbnQmIGFic29sdXRlUG9pbnQsIGNvbnN0IFJlbmRlckJveCYg
Zmxvd2VkQm94KTsKLQotICAgIHZvaWQgcHVzaERlcGVuZGVuY2llcyhSZW5kZXJOYW1lZEZsb3dU
aHJlYWRMaXN0Jik7Ci0KLSAgICB2b2lkIGFkZFJlZ2lvblRvVGhyZWFkKFJlbmRlclJlZ2lvbiop
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVtb3ZlUmVnaW9uRnJvbVRocmVhZChSZW5kZXJSZWdpb24q
KSBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVnaW9uQ2hhbmdlZFdyaXRpbmdNb2RlKFJlbmRlclJl
Z2lvbiopIG92ZXJyaWRlOwotCi0gICAgTGF5b3V0UmVjdCBkZWNvcmF0aW9uc0NsaXBSZWN0Rm9y
Qm94SW5OYW1lZEZsb3dGcmFnbWVudChjb25zdCBSZW5kZXJCb3gmLCBSZW5kZXJOYW1lZEZsb3dG
cmFnbWVudCYpIGNvbnN0OwotCi0gICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIGZyYWdtZW50
RnJvbUFic29sdXRlUG9pbnRBbmRCb3goY29uc3QgSW50UG9pbnQmLCBjb25zdCBSZW5kZXJCb3gm
IGZsb3dlZEJveCk7Ci0KLSAgICB2b2lkIHJlZ2lzdGVyTmFtZWRGbG93Q29udGVudEVsZW1lbnQo
RWxlbWVudCYpOwotICAgIHZvaWQgdW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnRFbGVtZW50KEVs
ZW1lbnQmKTsKLSAgICBjb25zdCBOYW1lZEZsb3dDb250ZW50RWxlbWVudHMmIGNvbnRlbnRFbGVt
ZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudEVsZW1lbnRzOyB9Ci0gICAgYm9vbCBoYXND
b250ZW50RWxlbWVudChFbGVtZW50JikgY29uc3Q7Ci0KLSAgICBib29sIGlzTWFya2VkRm9yRGVz
dHJ1Y3Rpb24oKSBjb25zdDsKLSAgICB2b2lkIGdldFJhbmdlcyhWZWN0b3I8UmVmUHRyPFJhbmdl
Pj4mLCBjb25zdCBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCopIGNvbnN0OwotCi0gICAgdm9pZCBh
cHBseUJyZWFrQWZ0ZXJDb250ZW50KExheW91dFVuaXQpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBj
b2xsZWN0c0dyYXBoaWNzTGF5ZXJzVW5kZXJSZWdpb25zKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICAvLyBDaGVjayBpZiB0aGUgY29udGVudCBpcyBmbG93biBpbnRvIGF0IGxlYXN0IGEgcmVnaW9u
IHdpdGggcmVnaW9uIHN0eWxpbmcgcnVsZXMuCi0gICAgYm9vbCBoYXNSZWdpb25zV2l0aFN0eWxp
bmcoKSBjb25zdCB7IHJldHVybiBtX2hhc1JlZ2lvbnNXaXRoU3R5bGluZzsgfQotICAgIHZvaWQg
Y2hlY2tSZWdpb25zV2l0aFN0eWxpbmcoKTsKLQotICAgIHZvaWQgY2xlYXJSZW5kZXJPYmplY3RD
dXN0b21TdHlsZShjb25zdCBSZW5kZXJFbGVtZW50Jik7Ci0KLSAgICB2b2lkIHJlbW92ZUZsb3dD
aGlsZEluZm8oUmVuZGVyRWxlbWVudCYpIG92ZXJyaWRlOwotCi0gICAgTGF5b3V0VW5pdCBmbG93
Q29udGVudEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd0NvbnRlbnRCb3R0b207IH0KLSAg
ICB2b2lkIGRpc3BhdGNoTmFtZWRGbG93RXZlbnRzKCk7Ci0KLSAgICB2b2lkIHNldERpc3BhdGNo
UmVnaW9uT3ZlcnNldENoYW5nZUV2ZW50KGJvb2wgdmFsdWUpIHsgbV9kaXNwYXRjaFJlZ2lvbk92
ZXJzZXRDaGFuZ2VFdmVudCA9IHZhbHVlOyB9Ci0KLSAgICBib29sIGFic29sdXRlUXVhZHNGb3JC
b3goVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiwgY29uc3QgUmVuZGVyQm94KiwgZmxvYXQsIGZs
b2F0KSBjb25zdCBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgc2V0TWFya0ZvckRl
c3RydWN0aW9uKCk7Ci0gICAgdm9pZCByZXNldE1hcmtGb3JEZXN0cnVjdGlvbigpOwotCi1wcml2
YXRlOgotICAgIHZvaWQgd2lsbEJlRGVzdHJveWVkKCkgb3ZlcnJpZGU7Ci0gICAgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNSZW5kZXJOYW1lZEZs
b3dUaHJlYWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0gICAgYm9vbCBpc0No
aWxkQWxsb3dlZChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBSZW5kZXJTdHlsZSYpIGNvbnN0
IG92ZXJyaWRlOwotICAgIHZvaWQgY29tcHV0ZU92ZXJmbG93KExheW91dFVuaXQsIGJvb2wgPSBm
YWxzZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKLQotICAgIHZvaWQg
ZGlzcGF0Y2hSZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnRJZk5lZWRlZCgpOwotCi0gICAgYm9vbCBk
ZXBlbmRzT24oUmVuZGVyTmFtZWRGbG93VGhyZWFkKiBvdGhlclJlbmRlckZsb3dUaHJlYWQpIGNv
bnN0OwotICAgIHZvaWQgYWRkRGVwZW5kZW5jeU9uRmxvd1RocmVhZChSZW5kZXJOYW1lZEZsb3dU
aHJlYWQqKTsKLSAgICB2b2lkIHJlbW92ZURlcGVuZGVuY3lPbkZsb3dUaHJlYWQoUmVuZGVyTmFt
ZWRGbG93VGhyZWFkKik7Ci0KLSAgICB2b2lkIGFkZEZyYWdtZW50VG9OYW1lZEZsb3dUaHJlYWQo
UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqKTsKLQotICAgIHZvaWQgY2hlY2tJbnZhbGlkUmVnaW9u
cygpOwotCi0gICAgYm9vbCBjYW5CZURlc3Ryb3llZCgpIGNvbnN0IHsgcmV0dXJuIG1faW52YWxp
ZFJlZ2lvbkxpc3QuaXNFbXB0eSgpICYmIG1fcmVnaW9uTGlzdC5pc0VtcHR5KCkgJiYgbV9jb250
ZW50RWxlbWVudHMuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCByZWdpb25PdmVyc2V0Q2hhbmdlRXZl
bnRUaW1lckZpcmVkKCk7Ci0gICAgdm9pZCBjbGVhckNvbnRlbnRFbGVtZW50cygpOwotICAgIHZv
aWQgdXBkYXRlV3JpdGluZ01vZGUoKTsKLQotICAgIC8vIE9ic2VydmVyIGZsb3cgdGhyZWFkcyBo
YXZlIGludmFsaWQgcmVnaW9ucyB0aGF0IGRlcGVuZCBvbiB0aGUgc3RhdGUgb2YgdGhpcyB0aHJl
YWQKLSAgICAvLyB0byByZS12YWxpZGF0ZSB0aGVpciByZWdpb25zLiBLZWVwaW5nIGEgc2V0IG9m
IG9ic2VydmVyIHRocmVhZHMgbWFrZSBpdCBlYXN5Ci0gICAgLy8gdG8gbm90aWZ5IHRoZW0gd2hl
biBhIHJlZ2lvbiB3YXMgcmVtb3ZlZCBmcm9tIHRoaXMgZmxvdy4KLSAgICBSZW5kZXJOYW1lZEZs
b3dUaHJlYWRDb3VudGVkU2V0IG1fb2JzZXJ2ZXJUaHJlYWRzU2V0OwotCi0gICAgLy8gU29tZSB0
aHJlYWRzIG5lZWQgdG8gaGF2ZSBhIGNvbXBsZXRlIGxheW91dCBiZWZvcmUgd2UgbGF5b3V0IHRo
aXMgZmxvdy4KLSAgICAvLyBUaGF0J3MgYmVjYXVzZSB0aGV5IGNvbnRhaW4gYSBSZW5kZXJSZWdp
b24gdGhhdCBzaG91bGQgZGlzcGxheSB0aGlzIHRocmVhZC4gVGhlIHNldCBtYWtlcyBpdAotICAg
IC8vIGVhc3kgdG8gc29ydCB0aGUgb3JkZXIgb2YgdGhyZWFkcyBsYXlvdXQuCi0gICAgUmVuZGVy
TmFtZWRGbG93VGhyZWFkQ291bnRlZFNldCBtX2xheW91dEJlZm9yZVRocmVhZHNTZXQ7Ci0KLSAg
ICBOYW1lZEZsb3dDb250ZW50RWxlbWVudHMgbV9jb250ZW50RWxlbWVudHM7Ci0KLSAgICBSZW5k
ZXJSZWdpb25MaXN0IG1faW52YWxpZFJlZ2lvbkxpc3Q7Ci0KLSAgICBib29sIG1faGFzUmVnaW9u
c1dpdGhTdHlsaW5nIDogMTsKLSAgICBib29sIG1fZGlzcGF0Y2hSZWdpb25PdmVyc2V0Q2hhbmdl
RXZlbnQgOiAxOwotCi0gICAgVGltZXIgbV9yZWdpb25PdmVyc2V0Q2hhbmdlRXZlbnRUaW1lcjsK
LQotICAgIExheW91dFVuaXQgbV9mbG93Q29udGVudEJvdHRvbTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19SRU5ERVJfT0JKRUNUKFJlbmRl
ck5hbWVkRmxvd1RocmVhZCwgaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyMjIyNTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJFZGl0aW5nLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAi
Rmxvd1RocmVhZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCkBAIC01
NSw3ICs1NCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93
RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNpbmNsdWRl
ICJSZW5kZXJSdWJ5LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHQmxvY2suaCIKICNpbmNsdWRlICJS
ZW5kZXJTVkdJbmxpbmUuaCIKQEAgLTEyMzYsOCArMTIzNCw2IEBAIFNlbGVjdGlvblN1YnRyZWVS
b290JiBSZW5kZXJPYmplY3Q6OnNlbGUKICAgICBpZiAoIWZsb3dUaHJlYWQpCiAgICAgICAgIHJl
dHVybiB2aWV3KCk7CiAKLSAgICBpZiAoaXM8UmVuZGVyTmFtZWRGbG93VGhyZWFkPigqZmxvd1Ro
cmVhZCkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpm
bG93VGhyZWFkKTsKICAgICBpZiAoaXM8UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkPigqZmxv
d1RocmVhZCkpIHsKICAgICAgICAgaWYgKCFmbG93VGhyZWFkLT5jb250YWluaW5nQmxvY2soKSkK
ICAgICAgICAgICAgIHJldHVybiB2aWV3KCk7CkBAIC0xNzY3LDcgKzE3NjMsNyBAQCBSZW5kZXJC
b3hNb2RlbE9iamVjdCogUmVuZGVyT2JqZWN0OjpvZmZzCiAgICAgYm9vbCBza2lwVGFibGVzID0g
aXNQb3NpdGlvbmVkKCk7CiAgICAgZmxvYXQgY3Vyclpvb20gPSBzdHlsZSgpLmVmZmVjdGl2ZVpv
b20oKTsKICAgICBhdXRvIGN1cnJlbnQgPSBwYXJlbnQoKTsKLSAgICB3aGlsZSAoY3VycmVudCAm
JiAoIWN1cnJlbnQtPmVsZW1lbnQoKSB8fCAoIWN1cnJlbnQtPmlzUG9zaXRpb25lZCgpICYmICFj
dXJyZW50LT5pc0JvZHkoKSkpICYmICFpczxSZW5kZXJOYW1lZEZsb3dUaHJlYWQ+KCpjdXJyZW50
KSkgeworICAgIHdoaWxlIChjdXJyZW50ICYmICghY3VycmVudC0+ZWxlbWVudCgpIHx8ICghY3Vy
cmVudC0+aXNQb3NpdGlvbmVkKCkgJiYgIWN1cnJlbnQtPmlzQm9keSgpKSkpIHsKICAgICAgICAg
RWxlbWVudCogZWxlbWVudCA9IGN1cnJlbnQtPmVsZW1lbnQoKTsKICAgICAgICAgaWYgKCFza2lw
VGFibGVzICYmIGVsZW1lbnQgJiYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCplbGVtZW50KSB8fCBp
czxIVE1MVGFibGVDZWxsRWxlbWVudD4oKmVsZW1lbnQpKSkKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTc3OCwxMyArMTc3NCw3IEBAIFJlbmRlckJveE1vZGVsT2JqZWN0KiBSZW5kZXJPYmplY3Q6
Om9mZnMKICAgICAgICAgY3Vyclpvb20gPSBuZXdab29tOwogICAgICAgICBjdXJyZW50ID0gY3Vy
cmVudC0+cGFyZW50KCk7CiAgICAgfQotICAgIAotICAgIC8vIENTUyByZWdpb25zIHNwZWNpZmlj
YXRpb24gc2F5cyB0aGF0IHJlZ2lvbiBmbG93cyBzaG91bGQgcmV0dXJuIHRoZSBib2R5IGVsZW1l
bnQgYXMgdGhlaXIgb2Zmc2V0UGFyZW50LgotICAgIGlmIChpczxSZW5kZXJOYW1lZEZsb3dUaHJl
YWQ+KGN1cnJlbnQpKSB7Ci0gICAgICAgIGF1dG8qIGJvZHkgPSBkb2N1bWVudCgpLmJvZHlPckZy
YW1lc2V0KCk7Ci0gICAgICAgIGN1cnJlbnQgPSBib2R5ID8gYm9keS0+cmVuZGVyZXIoKSA6IG51
bGxwdHI7Ci0gICAgfQotICAgIAorCiAgICAgcmV0dXJuIGlzPFJlbmRlckJveE1vZGVsT2JqZWN0
PihjdXJyZW50KSA/IGRvd25jYXN0PFJlbmRlckJveE1vZGVsT2JqZWN0PihjdXJyZW50KSA6IG51
bGxwdHI7CiB9CiAKQEAgLTE5MjUsMTYgKzE5MTUsNyBAQCBib29sIFJlbmRlck9iamVjdDo6bm9k
ZUF0RmxvYXRQb2ludChjb25zCiAKIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBSZW5kZXJPYmpl
Y3Q6OmN1cnJlbnRSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0CiB7Ci0gICAgUmVuZGVy
Rmxvd1RocmVhZCogZmxvd1RocmVhZCA9IGZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAg
ICBpZiAoIWlzPFJlbmRlck5hbWVkRmxvd1RocmVhZD4oZmxvd1RocmVhZCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgLy8gRklYTUU6IE9uY2UgcmVnaW9ucyBhcmUgZnVsbHkgaW50
ZWdyYXRlZCB3aXRoIHRoZSBjb21wb3NpdGluZyBzeXN0ZW0gd2Ugc2hvdWxkIHVuY29tbWVudCB0
aGlzIGFzc2VydC4KLSAgICAvLyBUaGlzIGFzc2VydCBuZWVkcyB0byBiZSBkaXNhYmxlZCBiZWNh
dXNlIGl0J3MgcG9zc2libGUgdG8gYXNrIGZvciB0aGUgYW5jZXN0b3IgY2xpcHBpbmcgcmVjdGFu
Z2xlIG9mCi0gICAgLy8gYSBsYXllciB3aXRob3V0IGtub3dpbmcgdGhlIGNvbnRhaW5pbmcgcmVn
aW9uIGluIGFkdmFuY2UuCi0gICAgLy8gQVNTRVJUKGZsb3dUaHJlYWQtPmN1cnJlbnRSZWdpb24o
KSAmJiBmbG93VGhyZWFkLT5jdXJyZW50UmVnaW9uKCktPmlzUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQoKSk7Ci0KLSAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+KGZs
b3dUaHJlYWQtPmN1cnJlbnRSZWdpb24oKSk7CisgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKIFJl
bmRlckZsb3dUaHJlYWQqIFJlbmRlck9iamVjdDo6bG9jYXRlRmxvd1RocmVhZENvbnRhaW5pbmdC
bG9jaygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CShyZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDYgQEAgY2xhc3MgUmVuZGVyR2VvbWV0
cnlNYXA7CiBjbGFzcyBSZW5kZXJMYXllcjsKIGNsYXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7
CiBjbGFzcyBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDsKLWNsYXNzIFJlbmRlck5hbWVkRmxvd1Ro
cmVhZDsKIGNsYXNzIFJlbmRlclJlZ2lvbjsKIGNsYXNzIFJlbmRlclRoZW1lOwogY2xhc3MgU2Vs
ZWN0aW9uU3VidHJlZVJvb3Q7CkBAIC0yNzgsNyArMjc3LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBpc1JlbmRlckZ1bGxTY3JlZW5QbGFjZWhvbGRlcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAjZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJHcmlkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJOYW1lZEZsb3dUaHJlYWQo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIGJvb2wgaXNJbkZsb3dSZW5kZXJGbG93VGhy
ZWFkKCkgY29uc3QgeyByZXR1cm4gaXNSZW5kZXJGbG93VGhyZWFkKCkgJiYgIWlzT3V0T2ZGbG93
UG9zaXRpb25lZCgpOyB9CiAgICAgYm9vbCBpc091dE9mRmxvd1JlbmRlckZsb3dUaHJlYWQoKSBj
b25zdCB7IHJldHVybiBpc1JlbmRlckZsb3dUaHJlYWQoKSAmJiBpc091dE9mRmxvd1Bvc2l0aW9u
ZWQoKTsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNw
cAkocmV2aXNpb24gMjIyMjU5KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
Z2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE4ICszMCwxNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlclJlZ2lvbi5oIgogCi0jaW5jbHVkZSAiRmxvd1RocmVh
ZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJI
aXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheW91dFJl
cGFpbnRlci5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94UmVnaW9u
SW5mby5oIgorI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJJ
bmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJOYW1lZEZsb3dUaHJlYWQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlci5oIgogCkBAIC01MCw3ICs0OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIFJlbmRlclJlZ2lvbjo6UmVuZGVyUmVnaW9uKEVsZW1lbnQmIGVsZW1lbnQsIFJlbmRlclN0
eWxlJiYgc3R5bGUsIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQpCiAgICAgOiBSZW5kZXJC
bG9ja0Zsb3coZWxlbWVudCwgV1RGTW92ZShzdHlsZSkpCiAgICAgLCBtX2Zsb3dUaHJlYWQoZmxv
d1RocmVhZCkKLSAgICAsIG1fcGFyZW50TmFtZWRGbG93VGhyZWFkKG51bGxwdHIpCiAgICAgLCBt
X2lzVmFsaWQoZmFsc2UpCiB7CiB9CkBAIC01OCw3ICs1Niw2IEBAIFJlbmRlclJlZ2lvbjo6UmVu
ZGVyUmVnaW9uKEVsZW1lbnQmIGVsZW0KIFJlbmRlclJlZ2lvbjo6UmVuZGVyUmVnaW9uKERvY3Vt
ZW50JiBkb2N1bWVudCwgUmVuZGVyU3R5bGUmJiBzdHlsZSwgUmVuZGVyRmxvd1RocmVhZCogZmxv
d1RocmVhZCkKICAgICA6IFJlbmRlckJsb2NrRmxvdyhkb2N1bWVudCwgV1RGTW92ZShzdHlsZSkp
CiAgICAgLCBtX2Zsb3dUaHJlYWQoZmxvd1RocmVhZCkKLSAgICAsIG1fcGFyZW50TmFtZWRGbG93
VGhyZWFkKG51bGxwdHIpCiAgICAgLCBtX2lzVmFsaWQoZmFsc2UpCiB7CiB9CkBAIC0yNzgsNyAr
Mjc1LDcgQEAgdm9pZCBSZW5kZXJSZWdpb246OmF0dGFjaFJlZ2lvbigpCiAgICAgLy8gYW5kIHdl
IGFyZSBhdHRhY2hpbmcgdGhlIHJlZ2lvbiB0byB0aGUgZmxvdyB0aHJlYWQuCiAgICAgaW5zdGFs
bEZsb3dUaHJlYWQoKTsKICAgICAKLSAgICBpZiAobV9mbG93VGhyZWFkID09IG1fcGFyZW50TmFt
ZWRGbG93VGhyZWFkKQorICAgIGlmICghbV9mbG93VGhyZWFkKQogICAgICAgICByZXR1cm47CiAK
ICAgICAvLyBPbmx5IGFmdGVyIGFkZGluZyB0aGUgcmVnaW9uIHRvIHRoZSB0aHJlYWQsIHRoZSBy
ZWdpb24gaXMgbWFya2VkIHRvIGJlIHZhbGlkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlZ2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZWdpb24uaAkocmV2aXNpb24gMjIyMjU5KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlZ2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBAIGNs
YXNzIEVsZW1lbnQ7CiBjbGFzcyBSZW5kZXJCb3g7CiBjbGFzcyBSZW5kZXJCb3hSZWdpb25JbmZv
OwogY2xhc3MgUmVuZGVyRmxvd1RocmVhZDsKLWNsYXNzIFJlbmRlck5hbWVkRmxvd1RocmVhZDsK
IAogY2xhc3MgUmVuZGVyUmVnaW9uIDogcHVibGljIFJlbmRlckJsb2NrRmxvdyB7CiBwdWJsaWM6
CkBAIC01NSw3ICs1NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoUmVnaW9u
KCk7CiAgICAgdmlydHVhbCB2b2lkIGRldGFjaFJlZ2lvbigpOwogCi0gICAgUmVuZGVyTmFtZWRG
bG93VGhyZWFkKiBwYXJlbnROYW1lZEZsb3dUaHJlYWQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVu
dE5hbWVkRmxvd1RocmVhZDsgfQogICAgIFJlbmRlckZsb3dUaHJlYWQqIGZsb3dUaHJlYWQoKSBj
b25zdCB7IHJldHVybiBtX2Zsb3dUaHJlYWQ7IH0KIAogICAgIC8vIFZhbGlkIHJlZ2lvbnMgZG8g
bm90IGNyZWF0ZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMgd2l0aCBvdGhlciBmbG93cy4KQEAgLTE1
OCwxMCArMTU2LDYgQEAgcHJvdGVjdGVkOgogICAgIFJlbmRlckZsb3dUaHJlYWQqIG1fZmxvd1Ro
cmVhZDsKIAogcHJpdmF0ZToKLSAgICAvLyBJZiB0aGlzIFJlbmRlclJlZ2lvbiBpcyBkaXNwbGF5
ZWQgYXMgcGFydCBvZiBhbm90aGVyIG5hbWVkIGZsb3csCi0gICAgLy8gd2UgbmVlZCB0byBjcmVh
dGUgYSBkZXBlbmRlbmN5IHRyZWUsIHNvIHRoYXQgbGF5b3V0IG9mIHRoZQotICAgIC8vIHJlZ2lv
bnMgaXMgYWx3YXlzIGRvbmUgYmVmb3JlIHRoZSByZWdpb25zIHRoZW1zZWx2ZXMuCi0gICAgUmVu
ZGVyTmFtZWRGbG93VGhyZWFkKiBtX3BhcmVudE5hbWVkRmxvd1RocmVhZDsKICAgICBMYXlvdXRS
ZWN0IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0OwogCiAgICAgLy8gVGhpcyBtYXAgaG9sZHMgdW5p
cXVlIGluZm9ybWF0aW9uIGFib3V0IGEgYmxvY2sgdGhhdCBpcyBzcGxpdCBhY3Jvc3MgcmVnaW9u
cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5j
cHAJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVk
ZSAiQ2xpcFJlY3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb3dUaHJl
YWRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVNlbGVj
dGlvbi5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtNTEsNyArNTAsNiBAQAogI2luY2x1
ZGUgIlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2lu
Y2x1ZGUgIlJlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyTmFtZWRG
bG93VGhyZWFkLmgiCiAjaW5jbHVkZSAiUmVuZGVyUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmgiCkBAIC02
ODAsNzkgKzY3OCw2IEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXJSZW5kZXJlcnMoVGV4dFN0cmUK
ICAgICAgICAgd3JpdGUodHMsIGxheWVyLnJlbmRlcmVyKCksIGluZGVudCArIDEsIGJlaGF2aW9y
KTsKIH0KIAotc3RhdGljIHZvaWQgd3JpdGVSZW5kZXJSZWdpb25MaXN0KGNvbnN0IFJlbmRlclJl
Z2lvbkxpc3QmIGZsb3dUaHJlYWRSZWdpb25MaXN0LCBUZXh0U3RyZWFtJiB0cywgaW50IGluZGVu
dCkKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlbmRlclJlZ2lvbiA6IGZsb3dUaHJlYWRSZWdp
b25MaXN0KSB7Ci0gICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwotICAgICAgICB0cyA8
PCBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJPYmplY3QqPihyZW5kZXJSZWdpb24pLT5yZW5kZXJO
YW1lKCk7Ci0KLSAgICAgICAgRWxlbWVudCogZ2VuZXJhdGluZ0VsZW1lbnQgPSByZW5kZXJSZWdp
b24tPmdlbmVyYXRpbmdFbGVtZW50KCk7Ci0gICAgICAgIGlmIChnZW5lcmF0aW5nRWxlbWVudCkg
ewotICAgICAgICAgICAgYm9vbCBpc1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50ID0gaXM8UmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQ+KCpyZW5kZXJSZWdpb24pOwotICAgICAgICAgICAgaWYgKGlzUmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQgJiYgZG93bmNhc3Q8UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ+
KCpyZW5kZXJSZWdpb24pLmhhc0N1c3RvbVJlZ2lvblN0eWxlKCkpCi0gICAgICAgICAgICAgICAg
dHMgPDwgIiByZWdpb24gc3R5bGU6IDEiOwotICAgICAgICAgICAgaWYgKHJlbmRlclJlZ2lvbi0+
aGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKLSAgICAgICAgICAgICAgICB0cyA8PCAiIGhhc0F1dG9M
b2dpY2FsSGVpZ2h0IjsKLQotICAgICAgICAgICAgaWYgKGlzUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQpCi0gICAgICAgICAgICAgICAgdHMgPDwgIiAoYW5vbnltb3VzIGNoaWxkIG9mIjsKLQotICAg
ICAgICAgICAgU3RyaW5nQnVpbGRlciB0YWdOYW1lOwotICAgICAgICAgICAgdGFnTmFtZS5hcHBl
bmQoZ2VuZXJhdGluZ0VsZW1lbnQtPm5vZGVOYW1lKCkpOwotCi0gICAgICAgICAgICBSZW5kZXJF
bGVtZW50KiByZW5kZXJFbGVtZW50Rm9yUmVnaW9uID0gaXNSZW5kZXJOYW1lZEZsb3dGcmFnbWVu
dCA/IHJlbmRlclJlZ2lvbi0+cGFyZW50KCkgOiByZW5kZXJSZWdpb247Ci0gICAgICAgICAgICBp
ZiAocmVuZGVyRWxlbWVudEZvclJlZ2lvbi0+aXNQc2V1ZG9FbGVtZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAocmVuZGVyRWxlbWVudEZvclJlZ2lvbi0+ZWxlbWVudCgpLT5pc0JlZm9yZVBz
ZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgdGFnTmFtZS5hcHBlbmRMaXRlcmFs
KCI6OmJlZm9yZSIpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlbmRlckVsZW1lbnRGb3JS
ZWdpb24tPmVsZW1lbnQoKS0+aXNBZnRlclBzZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgdGFnTmFtZS5hcHBlbmRMaXRlcmFsKCI6OmFmdGVyIik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIHRzIDw8ICIgeyIgPDwgdGFnTmFtZS50b1N0cmluZygpIDw8ICJ9IjsKLQot
ICAgICAgICAgICAgYXV0byYgZ2VuZXJhdGluZ0VsZW1lbnRJZCA9IGdlbmVyYXRpbmdFbGVtZW50
LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOwotICAgICAgICAgICAgaWYgKCFnZW5lcmF0aW5nRWxl
bWVudElkLmlzTnVsbCgpKQotICAgICAgICAgICAgICAgIHRzIDw8ICIgIyIgPDwgZ2VuZXJhdGlu
Z0VsZW1lbnRJZDsKLQotICAgICAgICAgICAgaWYgKGlzUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQp
Ci0gICAgICAgICAgICAgICAgdHMgPDwgIikiOwotICAgICAgICB9Ci0KLSAgICAgICAgdHMgPDwg
IlxuIjsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlUmVuZGVyTmFtZWRGbG93VGhyZWFk
cyhUZXh0U3RyZWFtJiB0cywgUmVuZGVyVmlldyYgcmVuZGVyVmlldywgY29uc3QgUmVuZGVyTGF5
ZXImIHJvb3RMYXllciwgY29uc3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0LCBpbnQgaW5kZW50LCBS
ZW5kZXJBc1RleHRCZWhhdmlvciBiZWhhdmlvcikKLXsKLSAgICBpZiAoIXJlbmRlclZpZXcuaGFz
UmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3cml0ZUlu
ZGVudCh0cywgaW5kZW50KTsKLSAgICB0cyA8PCAiTmFtZWQgZmxvd3NcbiI7Ci0KLSAgICBmb3Ig
KGNvbnN0IGF1dG8qIHJlbmRlckZsb3dUaHJlYWQgOiAqcmVuZGVyVmlldy5mbG93VGhyZWFkQ29u
dHJvbGxlcigpLnJlbmRlck5hbWVkRmxvd1RocmVhZExpc3QoKSkgewotICAgICAgICB3cml0ZUlu
ZGVudCh0cywgaW5kZW50ICsgMSk7Ci0gICAgICAgIHRzIDw8ICJOYW1lZCBmbG93ICciIDw8IHJl
bmRlckZsb3dUaHJlYWQtPmZsb3dUaHJlYWROYW1lKCkgPDwgIidcbiI7Ci0KLSAgICAgICAgUmVu
ZGVyTGF5ZXIqIGxheWVyID0gcmVuZGVyRmxvd1RocmVhZC0+bGF5ZXIoKTsKLSAgICAgICAgd3Jp
dGVMYXllcnModHMsIHJvb3RMYXllciwgKmxheWVyLCBwYWludFJlY3QsIGluZGVudCArIDIsIGJl
aGF2aW9yKTsKLQotICAgICAgICAvLyBEaXNwbGF5IHRoZSB2YWxpZCBhbmQgaW52YWxpZCByZW5k
ZXIgcmVnaW9ucyBhdHRhY2hlZCB0byB0aGlzIGZsb3cgdGhyZWFkLgotICAgICAgICBjb25zdCBS
ZW5kZXJSZWdpb25MaXN0JiB2YWxpZFJlZ2lvbnNMaXN0ID0gcmVuZGVyRmxvd1RocmVhZC0+cmVu
ZGVyUmVnaW9uTGlzdCgpOwotICAgICAgICBjb25zdCBSZW5kZXJSZWdpb25MaXN0JiBpbnZhbGlk
UmVnaW9uc0xpc3QgPSByZW5kZXJGbG93VGhyZWFkLT5pbnZhbGlkUmVuZGVyUmVnaW9uTGlzdCgp
OwotICAgICAgICBpZiAoIXZhbGlkUmVnaW9uc0xpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAg
ICB3cml0ZUluZGVudCh0cywgaW5kZW50ICsgMik7Ci0gICAgICAgICAgICB0cyA8PCAiUmVnaW9u
cyBmb3IgbmFtZWQgZmxvdyAnIiA8PCByZW5kZXJGbG93VGhyZWFkLT5mbG93VGhyZWFkTmFtZSgp
IDw8ICInXG4iOwotICAgICAgICAgICAgd3JpdGVSZW5kZXJSZWdpb25MaXN0KHZhbGlkUmVnaW9u
c0xpc3QsIHRzLCBpbmRlbnQgKyAzKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWludmFsaWRS
ZWdpb25zTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRl
bnQgKyAyKTsKLSAgICAgICAgICAgIHRzIDw8ICJJbnZhbGlkIHJlZ2lvbnMgZm9yIG5hbWVkIGZs
b3cgJyIgPDwgcmVuZGVyRmxvd1RocmVhZC0+Zmxvd1RocmVhZE5hbWUoKSA8PCAiJ1xuIjsKLSAg
ICAgICAgICAgIHdyaXRlUmVuZGVyUmVnaW9uTGlzdChpbnZhbGlkUmVnaW9uc0xpc3QsIHRzLCBp
bmRlbnQgKyAzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQogc3RhdGljIExheW91dFNpemUgbWF4
TGF5b3V0T3ZlcmZsb3coY29uc3QgUmVuZGVyQm94KiBib3gpCiB7CiAgICAgTGF5b3V0UmVjdCBv
dmVyZmxvd1JlY3QgPSBib3gtPmxheW91dE92ZXJmbG93UmVjdCgpOwpAQCAtODM5LDcgKzc2NCw2
IEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXJzKFRleHRTdHJlYW0mIHRzLCAKICAgICAgICAgCiAg
ICAgICAgIGlmIChsYXllckNvdW50KSB7CiAgICAgICAgICAgICBpbnQgY3VyckluZGVudCA9IGlu
ZGVudDsKLSAgICAgICAgICAgIC8vIFdlIG9ubHkgcHJpbnQgdGhlIGhlYWRlciBpZiB0aGVyZSdz
IGF0IGxpc3QgYSBub24tUmVuZGVyTmFtZWRGbG93VGhyZWFkIHBhcnQgb2YgdGhlIGxpc3QuCiAg
ICAgICAgICAgICBpZiAoIXBvc2l0aXZlWk9yZGVyTGlzdC0+c2l6ZSgpIHx8ICFwb3NpdGl2ZVpP
cmRlckxpc3QtPmF0KDApLT5pc0Zsb3dUaHJlYWRDb2xsZWN0aW5nR3JhcGhpY3NMYXllcnNVbmRl
clJlZ2lvbnMoKSkgewogICAgICAgICAgICAgICAgIGlmIChiZWhhdmlvciAmIFJlbmRlckFzVGV4
dFNob3dMYXllck5lc3RpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgd3JpdGVJbmRlbnQodHMs
IGluZGVudCk7CkBAIC04NTUsMTEgKzc3OSw2IEBAIHN0YXRpYyB2b2lkIHdyaXRlTGF5ZXJzKFRl
eHRTdHJlYW0mIHRzLCAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKLSAg
ICAvLyBBbHRvdWdoIHRoZSBSZW5kZXJGbG93VGhyZWFkIHJlcXVpcmVzIGEgbGF5ZXIsIGl0IGlz
IG5vdCBjb2xsZWN0ZWQgYnkgaXRzIHBhcmVudCwKLSAgICAvLyBzbyB3ZSBoYXZlIHRvIHRyZWF0
IGl0IGFzIGEgc3BlY2lhbCBjYXNlLgotICAgIGlmIChpczxSZW5kZXJWaWV3PihsYXllci5yZW5k
ZXJlcigpKSkKLSAgICAgICAgd3JpdGVSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKHRzLCBkb3duY2Fz
dDxSZW5kZXJWaWV3PihsYXllci5yZW5kZXJlcigpKSwgcm9vdExheWVyLCBwYWludERpcnR5UmVj
dCwgaW5kZW50LCBiZWhhdmlvcik7CiB9CiAKIHN0YXRpYyBTdHJpbmcgbm9kZVBvc2l0aW9uKE5v
ZGUqIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShy
ZXZpc2lvbiAyMjIyNTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRmxvYXRpbmdPYmplY3RzLmgiCi0j
aW5jbHVkZSAiRmxvd1RocmVhZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC00Nyw3
ICs0Niw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgiCiAjaW5j
bHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCIKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVt
blNwYW5uZXJQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5o
IgogI2luY2x1ZGUgIlJlbmRlclF1b3RlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5m
by5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgpAQCAtMjQ4LDggKzI0Niw2IEBAIHZvaWQg
UmVuZGVyVmlldzo6bGF5b3V0Q29udGVudChjb25zdCBMYXkKICAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7CiAKICAgICBSZW5kZXJCbG9ja0Zsb3c6OmxheW91dCgpOwotICAgIGlmIChoYXNSZW5k
ZXJOYW1lZEZsb3dUaHJlYWRzKCkpCi0gICAgICAgIGZsb3dUaHJlYWRDb250cm9sbGVyKCkubGF5
b3V0UmVuZGVyTmFtZWRGbG93VGhyZWFkcygpOwogI2lmbmRlZiBOREVCVUcKICAgICBjaGVja0xh
eW91dFN0YXRlKHN0YXRlKTsKICNlbmRpZgpAQCAtMjc1LDY1ICsyNzEsOCBAQCB2b2lkIFJlbmRl
clZpZXc6OmluaXRpYWxpemVMYXlvdXRTdGF0ZShMCiAgICAgc3RhdGUubV9pc1BhZ2luYXRlZCA9
IHN0YXRlLm1fcGFnZUxvZ2ljYWxIZWlnaHQgPiAwOwogfQogCi0vLyBUaGUgYWxnb3JpdGhtIGJl
bG93IGFzc3VtZXMgdGhpcyBpcyBhIGZ1bGwgbGF5b3V0LiBJbiBjYXNlIHRoZXJlIGFyZSBwcmV2
aW91c2x5IGNvbXB1dGVkIHZhbHVlcyBmb3IgcmVnaW9ucywgc3VwcGxlbWVudGFsIHN0ZXBzIGFy
ZSB0YWtlbgotLy8gdG8gZW5zdXJlIHRoZSByZXN1bHRzIGFyZSB0aGUgc2FtZSBhcyB0aG9zZSBv
YnRhaW5lZCBmcm9tIGEgZnVsbCBsYXlvdXQgKGkuZS4gdGhlIGF1dG8taGVpZ2h0IHJlZ2lvbnMg
ZnJvbSBhbGwgdGhlIGZsb3dzIGFyZSBtYXJrZWQgYXMgbmVlZGluZwotLy8gbGF5b3V0KS4KLS8v
IDEuIFRoZSBmbG93cyBhcmUgbGFpZCBvdXQgZnJvbSB0aGUgb3V0ZXIgZmxvdyB0byB0aGUgaW5u
ZXIgZmxvdy4gVGhpcyBzdWNjZXNzZnVsbHkgY29tcHV0ZXMgdGhlIG91dGVyIG5vbi1hdXRvLWhl
aWdodCByZWdpb25zIHNpemUgc28gdGhlIAotLy8gaW5uZXIgZmxvd3MgaGF2ZSB0aGUgbmVjZXNz
YXJ5IGluZm9ybWF0aW9uIHRvIGNvcnJlY3RseSBmcmFnbWVudCB0aGUgY29udGVudC4KLS8vIDIu
IFRoZSBmbG93cyBhcmUgbGFpZCBvdXQgZnJvbSB0aGUgaW5uZXIgZmxvdyB0byB0aGUgb3V0ZXIg
Zmxvdy4gQWZ0ZXIgYW4gaW5uZXIgZmxvdyBpcyBsYWlkIG91dCBpdCBnb2VzIGludG8gdGhlIGNv
bnN0cmFpbmVkIGxheW91dCBwaGFzZQotLy8gYW5kIG1hcmtzIHRoZSBhdXRvLWhlaWdodCByZWdp
b25zIHRoZXkgbmVlZCBsYXlvdXQuIFRoaXMgbWVhbnMgdGhlIG91dGVyIGZsb3dzIHdpbGwgcmVs
YXlvdXQgaWYgdGhleSBkZXBlbmQgb24gcmVnaW9ucyB3aXRoIGF1dG8taGVpZ2h0IHJlZ2lvbnMK
LS8vIGJlbG9uZ2luZyB0byBpbm5lciBmbG93cy4gVGhpcyBzdGVwIHdpbGwgY29ycmVjdGx5IHNl
dCB0aGUgY29tcHV0ZWRBdXRvSGVpZ2h0IGZvciB0aGUgYXV0by1oZWlnaHQgcmVnaW9ucy4gSXQn
cyBwb3NzaWJsZSBmb3Igbm9uLWF1dG8taGVpZ2h0Ci0vLyByZWdpb25zIHRvIHJlbGF5b3V0IGlm
IHRoZXkgZGVwZW5kIG9uIGF1dG8taGVpZ2h0IHJlZ2lvbnMuIFRoaXMgd2lsbCBpbnZhbGlkYXRl
IHRoZSBpbm5lciBmbG93IHRocmVhZHMgYW5kIG1hcmsgdGhlbSBhcyBuZWVkaW5nIGxheW91dC4K
LS8vIDMuIFRoZSBsYXN0IHN0ZXAgaXMgdG8gZG8gb25lIGxhc3QgbGF5b3V0IGlmIHRoZXJlIGFy
ZSBwYXRob2xvZ2ljYWwgZGVwZW5kZW5jaWVzIGJldHdlZW4gbm9uLWF1dG8taGVpZ2h0IHJlZ2lv
bnMgYW5kIGF1dG8taGVpZ2h0IHJlZ2lvbnMKLS8vIGFzIGRldGVjdGVkIGluIHRoZSBwcmV2aW91
cyBzdGVwLgotdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXRDb250ZW50SW5BdXRvTG9naWNhbEhlaWdo
dFJlZ2lvbnMoY29uc3QgTGF5b3V0U3RhdGUmIHN0YXRlKQotewotICAgIC8vIFdlIG5lZWQgdG8g
aW52YWxpZGF0ZSBhbGwgdGhlIGZsb3dzIHdpdGggYXV0by1oZWlnaHQgcmVnaW9ucyBpZiBvbmUg
c3VjaCBmbG93IG5lZWRzIGxheW91dC4KLSAgICAvLyBJZiBub25lIGlzIGZvdW5kIHdlIGRvIGEg
bGF5b3V0IGEgY2hlY2sgYmFjayBhZ2FpbiBhZnRlcndhcmRzLgotICAgIGlmICghZmxvd1RocmVh
ZENvbnRyb2xsZXIoKS51cGRhdGVGbG93VGhyZWFkc05lZWRpbmdMYXlvdXQoKSkgewotICAgICAg
ICAvLyBEbyBhIGZpcnN0IGxheW91dCBvZiB0aGUgY29udGVudC4gSW4gc29tZSBjYXNlcyBtb3Jl
IGxheW91dHMgYXJlIG5vdCBuZWVkZWQgKGUuZy4gb25seSBmbG93cyB3aXRoIG5vbi1hdXRvLWhl
aWdodCByZWdpb25zIGhhdmUgY2hhbmdlZCkuCi0gICAgICAgIGxheW91dENvbnRlbnQoc3RhdGUp
OwotCi0gICAgICAgIC8vIElmIHdlIGZpbmQgbm8gbmFtZWQgZmxvdyBuZWVkaW5nIGEgdHdvIHN0
ZXAgbGF5b3V0IGFmdGVyIHRoZSBmaXJzdCBsYXlvdXQsIGV4aXQgZWFybHkuCi0gICAgICAgIC8v
IE90aGVyd2lzZSwgaW5pdGlhdGUgdGhlIHR3byBzdGVwIGxheW91dCBhbGdvcml0aG0gYW5kIHJl
Y29tcHV0ZSBhbGwgdGhlIGZsb3dzLgotICAgICAgICBpZiAoIWZsb3dUaHJlYWRDb250cm9sbGVy
KCkudXBkYXRlRmxvd1RocmVhZHNOZWVkaW5nVHdvU3RlcExheW91dCgpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIExheW91dCB0byByZWNvbXB1dGUgYWxsIHRoZSBuYW1l
ZCBmbG93cyB3aXRoIGF1dG8taGVpZ2h0IHJlZ2lvbnMuCi0gICAgbGF5b3V0Q29udGVudChzdGF0
ZSk7Ci0KLSAgICAvLyBQcm9wYWdhdGUgdGhlIGNvbXB1dGVkIGF1dG8taGVpZ2h0IHZhbHVlcyB1
cHdhcmRzLgotICAgIC8vIE5vbi1hdXRvLWhlaWdodCByZWdpb25zIG1heSBpbnZhbGlkYXRlIHRo
ZSBmbG93IHRocmVhZCBiZWNhdXNlIHRoZXkgZGVwZW5kZWQgb24gYXV0by1oZWlnaHQgcmVnaW9u
cywgYnV0IHRoYXQncyBvay4KLSAgICBmbG93VGhyZWFkQ29udHJvbGxlcigpLnVwZGF0ZUZsb3dU
aHJlYWRzSW50b0NvbnN0cmFpbmVkUGhhc2UoKTsKLQotICAgIC8vIERvIG9uZSBsYXN0IGxheW91
dCB0aGF0IHNob3VsZCB1cGRhdGUgdGhlIGF1dG8taGVpZ2h0IHJlZ2lvbnMgZm91bmQgaW4gdGhl
IG1haW4gZmxvdwotICAgIC8vIGFuZCBzb2x2ZSBwYXRob2xvZ2ljYWwgZGVwZW5kZW5jaWVzIGJl
dHdlZW4gcmVnaW9ucyAoZS5nLiBhIG5vbi1hdXRvLWhlaWdodCByZWdpb24gZGVwZW5kaW5nCi0g
ICAgLy8gb24gYW4gYXV0by1oZWlnaHQgb25lKS4KLSAgICBpZiAobmVlZHNMYXlvdXQoKSkKLSAg
ICAgICAgbGF5b3V0Q29udGVudChzdGF0ZSk7Ci19Ci0KLXZvaWQgUmVuZGVyVmlldzo6bGF5b3V0
Q29udGVudFRvQ29tcHV0ZU92ZXJmbG93SW5SZWdpb25zKGNvbnN0IExheW91dFN0YXRlJiBzdGF0
ZSkKK3ZvaWQgUmVuZGVyVmlldzo6bGF5b3V0Q29udGVudEluQXV0b0xvZ2ljYWxIZWlnaHRSZWdp
b25zKGNvbnN0IExheW91dFN0YXRlJikKIHsKLSAgICBpZiAoIWhhc1JlbmRlck5hbWVkRmxvd1Ro
cmVhZHMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRmlyc3QgcGFzcyB0aHJvdWdoIHRo
ZSBmbG93IHRocmVhZHMgYW5kIG1hcmsgdGhlIHJlZ2lvbnMgYXMgbmVlZGluZyBhIHNpbXBsZSBs
YXlvdXQuCi0gICAgLy8gVGhlIHJlZ2lvbnMgZXh0cmFjdCB0aGUgb3ZlcmZsb3cgZnJvbSB0aGUg
ZmxvdyB0aHJlYWQgYW5kIHBhc3MgaXQgdG8gdGhlaXIgY29udGFpbmcKLSAgICAvLyBibG9jayBj
aGFpbi4KLSAgICBmbG93VGhyZWFkQ29udHJvbGxlcigpLnVwZGF0ZUZsb3dUaHJlYWRzSW50b092
ZXJmbG93UGhhc2UoKTsKLSAgICBpZiAobmVlZHNMYXlvdXQoKSkKLSAgICAgICAgbGF5b3V0Q29u
dGVudChzdGF0ZSk7Ci0KLSAgICAvLyBJbiBjYXNlIHNjcm9sbGJhcnMgcmVzaXplZCB0aGUgcmVn
aW9ucyBhIG5ldyBwYXNzIGlzIG5lY2Vzc2FyeSB0byB1cGRhdGUgdGhlIGZsb3cgdGhyZWFkcwot
ICAgIC8vIGFuZCByZWNvbXB1dGUgdGhlIG92ZXJmbG93IG9uIHJlZ2lvbnMuIFRoaXMgaXMgdGhl
IGZpbmFsIHN0YXRlIG9mIHRoZSBmbG93IHRocmVhZHMuCi0gICAgZmxvd1RocmVhZENvbnRyb2xs
ZXIoKS51cGRhdGVGbG93VGhyZWFkc0ludG9GaW5hbFBoYXNlKCk7Ci0gICAgaWYgKG5lZWRzTGF5
b3V0KCkpCi0gICAgICAgIGxheW91dENvbnRlbnQoc3RhdGUpOwotCi0gICAgLy8gRmluYWxseSBy
ZXNldCB0aGUgbGF5b3V0IHN0YXRlIG9mIHRoZSBmbG93IHRocmVhZHMuCi0gICAgZmxvd1RocmVh
ZENvbnRyb2xsZXIoKS51cGRhdGVGbG93VGhyZWFkc0ludG9NZWFzdXJlQ29udGVudFBoYXNlKCk7
CiB9CiAKIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKQEAgLTM3OSw4ICszMTgsNiBAQCB2b2lk
IFJlbmRlclZpZXc6OmxheW91dCgpCiAgICAgZWxzZQogICAgICAgICBsYXlvdXRDb250ZW50KCpt
X2xheW91dFN0YXRlKTsKIAotICAgIGxheW91dENvbnRlbnRUb0NvbXB1dGVPdmVyZmxvd0luUmVn
aW9ucygqbV9sYXlvdXRTdGF0ZSk7Ci0KICNpZm5kZWYgTkRFQlVHCiAgICAgY2hlY2tMYXlvdXRT
dGF0ZSgqbV9sYXlvdXRTdGF0ZSk7CiAjZW5kaWYKQEAgLTc4MCwxNCArNzE3LDYgQEAgc3RhdGlj
IFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlclBvc2l0aQogSW50UmVjdCBSZW5kZXJWaWV3Ojpz
ZWxlY3Rpb25Cb3VuZHMoYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKIHsKICAgICBM
YXlvdXRSZWN0IHNlbFJlY3QgPSBzdWJ0cmVlU2VsZWN0aW9uQm91bmRzKCp0aGlzLCBjbGlwVG9W
aXNpYmxlQ29udGVudCk7Ci0KLSAgICBpZiAoaGFzUmVuZGVyTmFtZWRGbG93VGhyZWFkcygpKSB7
Ci0gICAgICAgIGZvciAoYXV0byogbmFtZWRGbG93VGhyZWFkIDogKm1fZmxvd1RocmVhZENvbnRy
b2xsZXItPnJlbmRlck5hbWVkRmxvd1RocmVhZExpc3QoKSkgewotICAgICAgICAgICAgTGF5b3V0
UmVjdCBjdXJyUmVjdCA9IHN1YnRyZWVTZWxlY3Rpb25Cb3VuZHMoKm5hbWVkRmxvd1RocmVhZCwg
Y2xpcFRvVmlzaWJsZUNvbnRlbnQpOwotICAgICAgICAgICAgc2VsUmVjdC51bml0ZShjdXJyUmVj
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICByZXR1cm4gc25hcHBlZEludFJlY3Qoc2VsUmVj
dCk7CiB9CiAKQEAgLTgzOCwxMSArNzY3LDYgQEAgTGF5b3V0UmVjdCBSZW5kZXJWaWV3OjpzdWJ0
cmVlU2VsZWN0aW9uQgogdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U2VsZWN0aW9uKCkgY29uc3QK
IHsKICAgICByZXBhaW50U3VidHJlZVNlbGVjdGlvbigqdGhpcyk7Ci0KLSAgICBpZiAoaGFzUmVu
ZGVyTmFtZWRGbG93VGhyZWFkcygpKSB7Ci0gICAgICAgIGZvciAoYXV0byogbmFtZWRGbG93VGhy
ZWFkIDogKm1fZmxvd1RocmVhZENvbnRyb2xsZXItPnJlbmRlck5hbWVkRmxvd1RocmVhZExpc3Qo
KSkKLSAgICAgICAgICAgIHJlcGFpbnRTdWJ0cmVlU2VsZWN0aW9uKCpuYW1lZEZsb3dUaHJlYWQp
OwotICAgIH0KIH0KIAogdm9pZCBSZW5kZXJWaWV3OjpyZXBhaW50U3VidHJlZVNlbGVjdGlvbihj
b25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYgcm9vdCkgY29uc3QKQEAgLTg5Nyw1OCArODIxLDkg
QEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRTZWxlY3Rpb24oUmVuZGVyT2JqZQogICAgIG1fc2VsZWN0
aW9uVW5zcGxpdEVuZCA9IGVuZDsKICAgICBtX3NlbGVjdGlvblVuc3BsaXRFbmRQb3MgPSBlbmRQ
b3M7CiAKLSAgICAvLyBJZiB0aGVyZSBpcyBubyBSZW5kZXJOYW1lZEZsb3dUaHJlYWRzIHdlIGZv
bGxvdyB0aGUgcmVndWxhciBzZWxlY3Rpb24uCi0gICAgaWYgKCFoYXNSZW5kZXJOYW1lZEZsb3dU
aHJlYWRzKCkpIHsKLSAgICAgICAgUmVuZGVyU3VidHJlZXNNYXAgc2luZ2xlU3VidHJlZU1hcDsK
LSAgICAgICAgc2luZ2xlU3VidHJlZU1hcC5zZXQodGhpcywgU2VsZWN0aW9uU3VidHJlZURhdGEo
c3RhcnQsIHN0YXJ0UG9zLCBlbmQsIGVuZFBvcykpOwotICAgICAgICB1cGRhdGVTZWxlY3Rpb25G
b3JTdWJ0cmVlcyhzaW5nbGVTdWJ0cmVlTWFwLCBibG9ja1JlcGFpbnRNb2RlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHNwbGl0U2VsZWN0aW9uQmV0d2VlblN1YnRyZWVzKHN0YXJ0
LCBzdGFydFBvcywgZW5kLCBlbmRQb3MsIGJsb2NrUmVwYWludE1vZGUpOwotfQotCi12b2lkIFJl
bmRlclZpZXc6OnNwbGl0U2VsZWN0aW9uQmV0d2VlblN1YnRyZWVzKGNvbnN0IFJlbmRlck9iamVj
dCogc3RhcnQsIHN0ZDo6b3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0UG9zLCBjb25zdCBSZW5kZXJP
YmplY3QqIGVuZCwgc3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBh
aW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQotewotICAgIC8vIENvbXB1dGUgdGhlIHZpc2libGUg
c2VsZWN0aW9uIGVuZCBwb2ludHMgZm9yIGVhY2ggb2YgdGhlIHN1YnRyZWVzLgotICAgIFJlbmRl
clN1YnRyZWVzTWFwIHJlbmRlclN1YnRyZWVzTWFwOwotCi0gICAgU2VsZWN0aW9uU3VidHJlZURh
dGEgaW5pdGlhbFNlbGVjdGlvbjsKLSAgICByZW5kZXJTdWJ0cmVlc01hcC5zZXQodGhpcywgaW5p
dGlhbFNlbGVjdGlvbik7Ci0gICAgZm9yIChhdXRvKiBuYW1lZEZsb3dUaHJlYWQgOiAqZmxvd1Ro
cmVhZENvbnRyb2xsZXIoKS5yZW5kZXJOYW1lZEZsb3dUaHJlYWRMaXN0KCkpCi0gICAgICAgIHJl
bmRlclN1YnRyZWVzTWFwLnNldChuYW1lZEZsb3dUaHJlYWQsIGluaXRpYWxTZWxlY3Rpb24pOwot
Ci0gICAgaWYgKHN0YXJ0ICYmIGVuZCkgewotICAgICAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFy
dC0+bm9kZSgpOwotICAgICAgICBOb2RlKiBlbmROb2RlID0gZW5kLT5ub2RlKCk7Ci0gICAgICAg
IEFTU0VSVChlbmROb2RlKTsKLSAgICAgICAgTm9kZSogc3RvcE5vZGUgPSBOb2RlVHJhdmVyc2Fs
OjpuZXh0U2tpcHBpbmdDaGlsZHJlbigqZW5kTm9kZSk7Ci0KLSAgICAgICAgZm9yIChOb2RlKiBu
b2RlID0gc3RhcnROb2RlOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2Rl
LT5yZW5kZXJlcigpOwotICAgICAgICAgICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2VsZWN0aW9uU3VidHJlZVJvb3QmIHJvb3QgPSBy
ZW5kZXJlci0+c2VsZWN0aW9uUm9vdCgpOwotICAgICAgICAgICAgU2VsZWN0aW9uU3VidHJlZURh
dGEgc2VsZWN0aW9uRGF0YSA9IHJlbmRlclN1YnRyZWVzTWFwLmdldCgmcm9vdCk7Ci0gICAgICAg
ICAgICBpZiAoc2VsZWN0aW9uRGF0YS5zZWxlY3Rpb25DbGVhcigpKSB7Ci0gICAgICAgICAgICAg
ICAgc2VsZWN0aW9uRGF0YS5zZXRTZWxlY3Rpb25TdGFydChub2RlLT5yZW5kZXJlcigpKTsKLSAg
ICAgICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvblN0YXJ0UG9zKG5vZGUgPT0g
c3RhcnROb2RlID8gc3RhcnRQb3MgOiBzdGQ6Om9wdGlvbmFsPHVuc2lnbmVkPigwKSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0U2VsZWN0aW9uRW5kKG5v
ZGUtPnJlbmRlcmVyKCkpOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gZW5kTm9kZSkKLSAgICAg
ICAgICAgICAgICBzZWxlY3Rpb25EYXRhLnNldFNlbGVjdGlvbkVuZFBvcyhlbmRQb3MpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbmV3RW5kUG9zID0gbm9k
ZS0+b2Zmc2V0SW5DaGFyYWN0ZXJzKCkgPyBub2RlLT5tYXhDaGFyYWN0ZXJPZmZzZXQoKSA6IG5v
ZGUtPmNvdW50Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgICAgIHNlbGVjdGlvbkRhdGEuc2V0
U2VsZWN0aW9uRW5kUG9zKG5ld0VuZFBvcyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHJlbmRlclN1YnRyZWVzTWFwLnNldCgmcm9vdCwgc2VsZWN0aW9uRGF0YSk7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgCi0gICAgdXBkYXRlU2VsZWN0aW9uRm9yU3VidHJlZXMocmVuZGVyU3VidHJl
ZXNNYXAsIGJsb2NrUmVwYWludE1vZGUpOworICAgIFJlbmRlclN1YnRyZWVzTWFwIHNpbmdsZVN1
YnRyZWVNYXA7CisgICAgc2luZ2xlU3VidHJlZU1hcC5zZXQodGhpcywgU2VsZWN0aW9uU3VidHJl
ZURhdGEoc3RhcnQsIHN0YXJ0UG9zLCBlbmQsIGVuZFBvcykpOworICAgIHVwZGF0ZVNlbGVjdGlv
bkZvclN1YnRyZWVzKHNpbmdsZVN1YnRyZWVNYXAsIGJsb2NrUmVwYWludE1vZGUpOwogfQogCiB2
b2lkIFJlbmRlclZpZXc6OnVwZGF0ZVNlbGVjdGlvbkZvclN1YnRyZWVzKFJlbmRlclN1YnRyZWVz
TWFwJiByZW5kZXJTdWJ0cmVlc01hcCwgU2VsZWN0aW9uUmVwYWludE1vZGUgYmxvY2tSZXBhaW50
TW9kZSkKQEAgLTk2Miw4ICs4MzcsNiBAQCB2b2lkIFJlbmRlclZpZXc6OnVwZGF0ZVNlbGVjdGlv
bkZvclN1YnRyCiAgICAgICAgIG9sZFNlbGVjdGlvbkRhdGFNYXAuc2V0KCZyb290LCBXVEZNb3Zl
KG9sZFNlbGVjdGlvbkRhdGEpKTsKIAogICAgICAgICByb290LnNldFNlbGVjdGlvbkRhdGEoc3Vi
dHJlZVNlbGVjdGlvbkluZm8udmFsdWUpOwotICAgICAgICBpZiAoaGFzUmVuZGVyTmFtZWRGbG93
VGhyZWFkcygpKQotICAgICAgICAgICAgcm9vdC5hZGp1c3RGb3JWaXNpYmxlU2VsZWN0aW9uKGRv
Y3VtZW50KCkpOwogICAgIH0KIAogICAgIC8vIFVwZGF0ZSBzZWxlY3Rpb24gc3RhdHVzIGZvciB0
aGUgb2JqZWN0cyBpbnNpZGUgdGhlIHNlbGVjdGlvbiBzdWJ0cmVlcy4KQEAgLTEzMzEsNTQgKzEy
MDQsMjEgQEAgdm9pZCBSZW5kZXJWaWV3OjpzZXRJc0luV2luZG93KGJvb2wgaXNJbgogdm9pZCBS
ZW5kZXJWaWV3OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIFJlbmRlckJsb2NrRmxvdzo6c3R5bGVEaWRDaGFu
Z2UoZGlmZiwgb2xkU3R5bGUpOwotICAgIGlmIChoYXNSZW5kZXJOYW1lZEZsb3dUaHJlYWRzKCkp
Ci0gICAgICAgIGZsb3dUaHJlYWRDb250cm9sbGVyKCkuc3R5bGVEaWRDaGFuZ2UoKTsKIAogICAg
IGZyYW1lVmlldygpLnN0eWxlRGlkQ2hhbmdlKCk7CiB9CiAKLWJvb2wgUmVuZGVyVmlldzo6aGFz
UmVuZGVyTmFtZWRGbG93VGhyZWFkcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZmxvd1RocmVh
ZENvbnRyb2xsZXIgJiYgbV9mbG93VGhyZWFkQ29udHJvbGxlci0+aGFzUmVuZGVyTmFtZWRGbG93
VGhyZWFkcygpOwotfQotCiBib29sIFJlbmRlclZpZXc6OmNoZWNrVHdvUGFzc0xheW91dEZvckF1
dG9IZWlnaHRSZWdpb25zKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzUmVuZGVyTmFtZWRGbG93
VGhyZWFkcygpICYmIG1fZmxvd1RocmVhZENvbnRyb2xsZXItPmhhc0Zsb3dUaHJlYWRzV2l0aEF1
dG9Mb2dpY2FsSGVpZ2h0UmVnaW9ucygpOwotfQotCi1GbG93VGhyZWFkQ29udHJvbGxlciYgUmVu
ZGVyVmlldzo6Zmxvd1RocmVhZENvbnRyb2xsZXIoKQotewotICAgIGlmICghbV9mbG93VGhyZWFk
Q29udHJvbGxlcikKLSAgICAgICAgbV9mbG93VGhyZWFkQ29udHJvbGxlciA9IHN0ZDo6bWFrZV91
bmlxdWU8Rmxvd1RocmVhZENvbnRyb2xsZXI+KHRoaXMpOwotCi0gICAgcmV0dXJuICptX2Zsb3dU
aHJlYWRDb250cm9sbGVyOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJWaWV3
OjpwdXNoTGF5b3V0U3RhdGVGb3JDdXJyZW50Rmxvd1RocmVhZChjb25zdCBSZW5kZXJPYmplY3Qm
IG9iamVjdCkKK3ZvaWQgUmVuZGVyVmlldzo6cHVzaExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dU
aHJlYWQoY29uc3QgUmVuZGVyT2JqZWN0JikKIHsKLSAgICBpZiAoIW1fZmxvd1RocmVhZENvbnRy
b2xsZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlbmRlckZsb3dUaHJlYWQqIGN1cnJlbnRG
bG93VGhyZWFkID0gb2JqZWN0LmZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKTsKLSAgICBpZiAo
IWN1cnJlbnRGbG93VGhyZWFkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xheW91dFN0YXRl
LT5zZXRDdXJyZW50UmVuZGVyRmxvd1RocmVhZChjdXJyZW50Rmxvd1RocmVhZCk7Ci0KLSAgICBj
dXJyZW50Rmxvd1RocmVhZC0+cHVzaEZsb3dUaHJlYWRMYXlvdXRTdGF0ZShvYmplY3QpOwogfQog
CiB2b2lkIFJlbmRlclZpZXc6OnBvcExheW91dFN0YXRlRm9yQ3VycmVudEZsb3dUaHJlYWQoKQog
ewotICAgIGlmICghbV9mbG93VGhyZWFkQ29udHJvbGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVuZGVyRmxvd1RocmVhZCogY3VycmVudEZsb3dUaHJlYWQgPSBtX2xheW91dFN0YXRlLT5j
dXJyZW50UmVuZGVyRmxvd1RocmVhZCgpOwotICAgIGlmICghY3VycmVudEZsb3dUaHJlYWQpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGN1cnJlbnRGbG93VGhyZWFkLT5wb3BGbG93VGhyZWFkTGF5
b3V0U3RhdGUoKTsKIH0KIAogSW1hZ2VRdWFsaXR5Q29udHJvbGxlciYgUmVuZGVyVmlldzo6aW1h
Z2VRdWFsaXR5Q29udHJvbGxlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJW
aWV3LmgJKHJldmlzaW9uIDIyMjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBGbG93VGhyZWFkQ29udHJvbGxlcjsKIGNsYXNzIEltYWdlUXVhbGl0
eUNvbnRyb2xsZXI7CiBjbGFzcyBSZW5kZXJMYXllckNvbXBvc2l0b3I7CiBjbGFzcyBSZW5kZXJR
dW90ZTsKQEAgLTE4OCw5ICsxODcsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmVuZGVyZXIgdGhhdCBw
YWludHMgdGhlIHJvb3QgYmFja2dyb3VuZCBoYXMgYmFja2dyb3VuZC1pbWFnZXMgd2hpY2ggYWxs
IGhhdmUgYmFja2dyb3VuZC1hdHRhY2htZW50OiBmaXhlZC4KICAgICBib29sIHJvb3RCYWNrZ3Jv
dW5kSXNFbnRpcmVseUZpeGVkKCkgY29uc3Q7CiAgICAgCi0gICAgYm9vbCBoYXNSZW5kZXJOYW1l
ZEZsb3dUaHJlYWRzKCkgY29uc3Q7CiAgICAgYm9vbCBjaGVja1R3b1Bhc3NMYXlvdXRGb3JBdXRv
SGVpZ2h0UmVnaW9ucygpIGNvbnN0OwotICAgIEZsb3dUaHJlYWRDb250cm9sbGVyJiBmbG93VGhy
ZWFkQ29udHJvbGxlcigpOwogCiAgICAgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkgb3ZlcnJpZGU7CiAKQEAgLTMxMCw3ICsz
MDcsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBsYXlvdXRDb250ZW50KGNvbnN0IExheW91dFN0
YXRlJik7CiAgICAgdm9pZCBsYXlvdXRDb250ZW50SW5BdXRvTG9naWNhbEhlaWdodFJlZ2lvbnMo
Y29uc3QgTGF5b3V0U3RhdGUmKTsKLSAgICB2b2lkIGxheW91dENvbnRlbnRUb0NvbXB1dGVPdmVy
Zmxvd0luUmVnaW9ucyhjb25zdCBMYXlvdXRTdGF0ZSYpOwogI2lmbmRlZiBOREVCVUcKICAgICB2
b2lkIGNoZWNrTGF5b3V0U3RhdGUoY29uc3QgTGF5b3V0U3RhdGUmKTsKICNlbmRpZgpAQCAtMzI1
LDcgKzMyMSw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzU2Nyb2xsYWJsZU9yUnViYmVyYmFu
ZGFibGVCb3goKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc3BsaXRTZWxlY3Rpb25CZXR3
ZWVuU3VidHJlZXMoY29uc3QgUmVuZGVyT2JqZWN0KiBzdGFydFJlbmRlcmVyLCBzdGQ6Om9wdGlv
bmFsPHVuc2lnbmVkPiBzdGFydFBvcywgY29uc3QgUmVuZGVyT2JqZWN0KiBlbmRSZW5kZXJlciwg
c3RkOjpvcHRpb25hbDx1bnNpZ25lZD4gZW5kUG9zLCBTZWxlY3Rpb25SZXBhaW50TW9kZSBibG9j
a1JlcGFpbnRNb2RlKTsKICAgICB2b2lkIGNsZWFyU3VidHJlZVNlbGVjdGlvbihjb25zdCBTZWxl
Y3Rpb25TdWJ0cmVlUm9vdCYsIFNlbGVjdGlvblJlcGFpbnRNb2RlLCBPbGRTZWxlY3Rpb25EYXRh
JikgY29uc3Q7CiAgICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25Gb3JTdWJ0cmVlcyhSZW5kZXJTdWJ0
cmVlc01hcCYsIFNlbGVjdGlvblJlcGFpbnRNb2RlKTsKICAgICB2b2lkIGFwcGx5U3VidHJlZVNl
bGVjdGlvbihjb25zdCBTZWxlY3Rpb25TdWJ0cmVlUm9vdCYsIFNlbGVjdGlvblJlcGFpbnRNb2Rl
LCBjb25zdCBPbGRTZWxlY3Rpb25EYXRhJik7CkBAIC0zNzAsNyArMzY1LDYgQEAgcHJpdmF0ZToK
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF5b3V0U3RhdGU+IG1fbGF5b3V0U3RhdGU7CiAgICAgdW5z
aWduZWQgbV9sYXlvdXRTdGF0ZURpc2FibGVDb3VudCB7IDAgfTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyTGF5ZXJDb21wb3NpdG9yPiBtX2NvbXBvc2l0b3I7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPEZsb3dUaHJlYWRDb250cm9sbGVyPiBtX2Zsb3dUaHJlYWRDb250cm9sbGVyOwogCiAgICAg
Ym9vbCBtX2hhc1F1b3Rlc05lZWRpbmdVcGRhdGUgeyBmYWxzZSB9OwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyaW5nQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDIy
MjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJpbmdBbGxJbk9uZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3RS
ZW5kZXJlci5jcHAiCiAjaW5jbHVkZSAiRml4ZWRUYWJsZUxheW91dC5jcHAiCiAjaW5jbHVkZSAi
RmxvYXRpbmdPYmplY3RzLmNwcCIKLSNpbmNsdWRlICJGbG93VGhyZWFkQ29udHJvbGxlci5jcHAi
CiAjaW5jbHVkZSAiSGl0VGVzdExvY2F0aW9uLmNwcCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0
LmNwcCIKICNpbmNsdWRlICJIaXRUZXN0aW5nVHJhbnNmb3JtU3RhdGUuY3BwIgpAQCAtOTcsNyAr
OTYsNiBAQAogI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU2V0LmNwcCIKICNpbmNsdWRlICJS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5jcHAiCiAjaW5jbHVkZSAiUmVuZGVy
TmFtZWRGbG93RnJhZ21lbnQuY3BwIgotI2luY2x1ZGUgIlJlbmRlck5hbWVkRmxvd1RocmVhZC5j
cHAiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmNwcCIKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVz
cy5jcHAiCiAjaW5jbHVkZSAiUmVuZGVyUXVvdGUuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3BwCShyZXZpc2lvbiAyMjIy
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uU3VidHJlZVJvb3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw1MCArNDIsNCBAQCBTZWxlY3Rpb25TdWJ0cmVlUm9vdDo6
U2VsZWN0aW9uU3VidHJlZVJvCiB7CiB9CiAKLXZvaWQgU2VsZWN0aW9uU3VidHJlZVJvb3Q6OmFk
anVzdEZvclZpc2libGVTZWxlY3Rpb24oRG9jdW1lbnQmIGRvY3VtZW50KQotewotICAgIGlmICht
X3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlvbkNsZWFyKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIENyZWF0ZSBhIHJhbmdlIGJhc2VkIG9uIHRoZSBjYWNoZWQgZW5kIHBvaW50cwot
ICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLnNlbGVjdGlv
blN0YXJ0UG9zKCkudmFsdWUoKTsKLSAgICBhdXRvIHNlbGVjdGlvbkVuZCA9IG1fc2VsZWN0aW9u
U3VidHJlZURhdGEuc2VsZWN0aW9uRW5kUG9zKCkudmFsdWUoKTsKLSAgICBQb3NpdGlvbiBzdGFy
dFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fc2VsZWN0aW9uU3VidHJl
ZURhdGEuc2VsZWN0aW9uU3RhcnQoKS0+bm9kZSgpLCBzZWxlY3Rpb25TdGFydCk7Ci0gICAgUG9z
aXRpb24gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9zZWxlY3Rp
b25TdWJ0cmVlRGF0YS5zZWxlY3Rpb25FbmQoKS0+bm9kZSgpLCBzZWxlY3Rpb25FbmQpOwotCi0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIHN0YXJ0UG9z
aXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIGVuZFBvc2l0aW9uLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpKTsKLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbigqcmFuZ2Up
OwotICAgIFBvc2l0aW9uIHN0YXJ0UG9zID0gc2VsZWN0aW9uLnN0YXJ0KCk7Ci0gICAgUG9zaXRp
b24gY2FuZGlkYXRlID0gc3RhcnRQb3MuZG93bnN0cmVhbSgpOwotICAgIGlmIChjYW5kaWRhdGUu
aXNDYW5kaWRhdGUoKSkKLSAgICAgICAgc3RhcnRQb3MgPSBjYW5kaWRhdGU7Ci0KLSAgICBQb3Np
dGlvbiBlbmRQb3MgPSBzZWxlY3Rpb24uZW5kKCk7Ci0gICAgY2FuZGlkYXRlID0gZW5kUG9zLnVw
c3RyZWFtKCk7Ci0gICAgaWYgKGNhbmRpZGF0ZS5pc0NhbmRpZGF0ZSgpKQotICAgICAgICBlbmRQ
b3MgPSBjYW5kaWRhdGU7Ci0KLSAgICBtX3NlbGVjdGlvblN1YnRyZWVEYXRhLmNsZWFyU2VsZWN0
aW9uKCk7Ci0KLSAgICBpZiAoc3RhcnRQb3MuaXNOdWxsKCkgfHwgZW5kUG9zLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpID09IHNl
bGVjdGlvbi52aXNpYmxlRW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChzdGFydFBv
cy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5mbG93VGhyZWFkQ29udGFpbmluZ0Jsb2Nr
KCkgIT0gZW5kUG9zLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCktPmZsb3dUaHJlYWRDb250
YWluaW5nQmxvY2soKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCZzdGFydFBvcy5kZXBy
ZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpLT5zZWxlY3Rpb25Sb290KCkgIT0gdGhpcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBuZXdTdGFydFBvcyA9IHN0YXJ0UG9zLmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCk7Ci0gICAgYXV0byBuZXdFbmRQb3MgPSBlbmRQb3MuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKTsKLSAgICBBU1NFUlQobmV3U3RhcnRQb3MgPj0gMCAmJiBuZXdFbmRQb3Mg
Pj0gMCk7Ci0gICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25TdGFydChzdGFy
dFBvcy5kZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKTsKLSAgICBtX3NlbGVjdGlvblN1YnRy
ZWVEYXRhLnNldFNlbGVjdGlvblN0YXJ0UG9zKG5ld1N0YXJ0UG9zKTsKLSAgICBtX3NlbGVjdGlv
blN1YnRyZWVEYXRhLnNldFNlbGVjdGlvbkVuZChlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVu
ZGVyZXIoKSk7Ci0gICAgbV9zZWxlY3Rpb25TdWJ0cmVlRGF0YS5zZXRTZWxlY3Rpb25FbmRQb3Mo
bmV3RW5kUG9zKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblN1YnRyZWVSb290LmgJKHJldmlzaW9uIDIy
MjI1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25TdWJ0cmVlUm9vdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsNyArMTEwLDYgQEAgcHVibGljOgogICAgIGNvbnN0IFNl
bGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb25TdWJ0cmVlRGF0YTsgfQogCiAgICAgdm9pZCBzZXRTZWxlY3Rpb25EYXRhKGNvbnN0IFNl
bGVjdGlvblN1YnRyZWVEYXRhJiBzZWxlY3Rpb25TdWJ0cmVlRGF0YSkgeyBtX3NlbGVjdGlvblN1
YnRyZWVEYXRhID0gc2VsZWN0aW9uU3VidHJlZURhdGE7IH0KLSAgICB2b2lkIGFkanVzdEZvclZp
c2libGVTZWxlY3Rpb24oRG9jdW1lbnQmKTsKIAogcHJpdmF0ZToKICAgICBTZWxlY3Rpb25TdWJ0
cmVlRGF0YSBtX3NlbGVjdGlvblN1YnRyZWVEYXRhOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>