<?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>10746</bug_id>
          
          <creation_ts>2006-09-06 01:18:50 -0700</creation_ts>
          <short_desc>SVG code calls fooBaseValue() many times when it should call foo()</short_desc>
          <delta_ts>2006-09-08 18:50:08 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>54874</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-06 01:18:50 -0700</bug_when>
    <thetext>SVG code calls fooBaseValue() many times when it should call foo()

Now that the old broken SVGAnimated* code is removed as part of bug 10490, it has become obvious how many times the SVG code uses the wrong value (base vs. anim) for its calculations.  Before base and anim values were actually stored separately.  Now they are stored together until animation is enabled, at which point their storage is separate, until the element stops animating again.

Someone needs to do a search for all uses of BaseValue() and make sure that those callsites really need access to the baseVal instead of the animVal.  There are basically only 3 sections of c++ code which should ever need access to the baseValues.  Those are:
1.  attribute parsing code (always should use setFooBaseValue())
2.  animation code (may need to use fooBaseValue() to retrieve the base value for animation-related calculations).
3.  SVG DOM bindings.  JSSVGAnimated* bindings will need to call fooBaseValue() and setFooBaseValue()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54875</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-06 01:20:08 -0700</bug_when>
    <thetext>For those who are familiar with the SVG spec, this should be a very easy fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55018</commentid>
    <comment_count>2</comment_count>
      <attachid>10450</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-08 01:45:45 -0700</bug_when>
    <thetext>Created attachment 10450
remove bogus fooBaseValue() calls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55022</commentid>
    <comment_count>3</comment_count>
      <attachid>10453</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-08 02:03:34 -0700</bug_when>
    <thetext>Created attachment 10453
Include some related cleanup, while we&apos;re at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55059</commentid>
    <comment_count>4</comment_count>
      <attachid>10453</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-08 09:44:43 -0700</bug_when>
    <thetext>Comment on attachment 10453
Include some related cleanup, while we&apos;re at it.

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10450</attachid>
            <date>2006-09-08 01:45:45 -0700</date>
            <delta_ts>2006-09-08 02:03:34 -0700</delta_ts>
            <desc>remove bogus fooBaseValue() calls</desc>
            <filename>remove-basevalue-calls.patch</filename>
            <type>text/plain</type>
            <size>73471</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjY4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI3IEBACisyMDA2LTA5
LTA4ICBFcmljIFNlaWRlbCAgPGVyaWNAZXNlaWRlbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBpbmNvcnJlY3QgZm9vQmFzZVZh
bHVlKCkgY2FsbHMgd2l0aCBmb28oKSBjYWxscyBpbnN0ZWFkLgorICAgICAgICBodHRwOi8vYnVn
emlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ2CisgICAgICAgIAorICAg
ICAgICBXaXRoIHRoZSBwcmV2aW91c2x5IGJyb2tlbiBhbmltYXRpb24gc3lzdGVtLCB3ZSBoYWQg
Ym90aCBiYXNlIGFuZCBhbmltIHZhbHVlcworICAgICAgICBidXQgdGhleSB3ZXJlIG5vdCBhdXRv
bWF0aWNhbGx5IGNvbm5lY3RlZC9kaXNjb25uZWN0ZWQgd2hlbiBhbmltYXRpb24gc3RhcnRlZCBh
bmQgc3RvcHBlZC4KKyAgICAgICAgU28gdGhlIGFuaW1WYWxzIHdlcmUgYmFzaWNhbGx5IG5ldmVy
IHVzZWQgKHNpbmNlIHRoZXkgd2VyZSBhbHdheXMgd3JvbmcpLgorICAgICAgICBOb3csIGFuaW1W
YWwgYW5kIGJhc2VWYWwgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorICAgICAgICAKKyAgICAgICAg
VGhlcmUgYXJlIG9ubHkgMyBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgd2Ugd2lsbCBldmVyIG5l
ZWQgdG8gdXNlIHRoZSBCYXNlVmFsdWUgYWNjZXNzb3IgdmFyaWFudHMuCisgICAgICAgIDEuIFNW
R0FuaW1hdGVkKiBET00gYmluZGluZ3MKKyAgICAgICAgMi4gQW5pbWF0aW9uIENvZGUKKyAgICAg
ICAgMy4gcGFyc2VNYXBwZWRBdHRyaWJ1dGUgaW1wbGVtZW50YXRpb25zCisKKyAgICAgICAgKiBr
Y2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Rm9yZWlnbk9iamVjdDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBrY2Fu
dmFzL1JlbmRlclNWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdl
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cmVsYXRpdmVCQm94
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpnZXRBYnNvbHV0ZVJlcGFpbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdGlvbkZvckF0
dHJpYnV0ZXMpOgorICAgICAgICAqIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMpOgorICAg
ICAgICAqIGtzdmcyL21pc2MvU1ZHSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoK
KyAgICAgICAgKFNWR0NpcmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAoU1ZHQ2lyY2xlRWxl
bWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQpOgorICAgICAgICAoU1ZHQ2lyY2xlRWxlbWVudDo6
aGFzUGVyY2VudGFnZVZhbHVlcyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxl
bWVudC5jcHA6CisgICAgICAgIChTVkdDbGlwUGF0aEVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnRyYW5z
ZmVyRnVuY3Rpb24pOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcDoK
KyAgICAgICAgKFNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRWxsaXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsbGlwc2VFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdFbGxpcHNlRWxlbWVudDo6aGFzUGVyY2VudGFnZVZhbHVlcyk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFQmxlbmRFbGVtZW50
OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5jcHA6CisgICAgICAgIChTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6ZmlsdGVyRWZmZWN0
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
RkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVm
ZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6
CisgICAgICAgIChTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFSW1h
Z2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFTWVyZ2VFbGVtZW50OjpTVkdGRU1l
cmdlRWxlbWVudCk6CisgICAgICAgIChTVkdGRU1lcmdlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFNW
R0ZFT2Zmc2V0RWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
RkVQb2ludExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVBvaW50TGln
aHRFbGVtZW50OjpTVkdGRVBvaW50TGlnaHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdG
RVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcG90TGlnaHRF
bGVtZW50OjpsaWdodFNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuY3BwOgorICAgICAgICAoU1ZHRkVUaWxlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZpbHRlckVsZW1lbnQ6OmNhbnZhc1Jl
c291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHR3Jh
ZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0dyYWRpZW50RWxlbWVudDo6cmVidWlsZFN0
b3BzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0hlbHBlcjo6UGVyY2VudGFnZU9mVmlld3BvcnQpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdMaW5lRWxlbWVudDo6dG9QYXRoRGF0
YSk6CisgICAgICAgIChTVkdMaW5lRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQpOgorICAg
ICAgICAoU1ZHTGluZUVsZW1lbnQ6Omhhc1BlcmNlbnRhZ2VWYWx1ZXMpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
TWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50Ojpj
YW52YXNSZXNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpkcmF3TWFza2VyQ29udGVudCk6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdHRlcm5FbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250
ZW50SW50b1RpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6Om5vdGlm
eUF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6
Z2V0Q1RNKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFk
aWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1JlY3RFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSZWN0RWxlbWVudDo6aGFzUGVyY2VudGFnZVZhbHVlcyk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6
dmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Z2V0Q1RNKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldFNjcmVlbkNUTSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1RSZWZFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR1RSZWZFbGVtZW50Ojp1cGRhdGVS
ZWZlcmVuY2VkVGV4dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoU1ZHVXNlRWxlbWVudDo6Y2xvc2VSZW5kZXJlcik6CisKIDIwMDYtMDktMDcgIFNh
bSBXZWluaWcgIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBhbmQgVGltIEguCkluZGV4OiBrY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDE2
MjYwKQorKysga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsOCArMzgsOCBAQCBSZW5kZXJGb3JlaWduT2JqZWN0OjpSZW5kZXJGb3JlaWduT2JqZWN0
CiAKIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0Ojp0cmFuc2xhdGlvbkZvckF0
dHJpYnV0ZXMoKQogewotICAgIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50ICpmb3JlaWduID0gc3Rh
dGljX2Nhc3Q8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQgKj4oZWxlbWVudCgpKTsKLSAgICByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKGZvcmVpZ24tPnhCYXNlVmFsdWUoKS0+dmFs
dWUoKSwgZm9yZWlnbi0+eUJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKKyAgICBTVkdGb3JlaWduT2Jq
ZWN0RWxlbWVudCogZm9yZWlnbiA9IHN0YXRpY19jYXN0PFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50
ICo+KGVsZW1lbnQoKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShm
b3JlaWduLT54KCktPnZhbHVlKCksIGZvcmVpZ24tPnkoKS0+dmFsdWUoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJl
bnRYLCBpbnQgcGFyZW50WSkKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysr
IGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsMTIgKzE3
MSwxMiBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAgICAgICAg
IAogICAgIFNWR0ltYWdlRWxlbWVudCAqaW1hZ2VFbHQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVs
ZW1lbnQgKj4obm9kZSgpKTsKICAgICAgICAgCi0gICAgaWYgKGltYWdlRWx0LT5wcmVzZXJ2ZUFz
cGVjdFJhdGlvQmFzZVZhbHVlKCktPmFsaWduKCkgPT0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
Tk9ORSkKKyAgICBpZiAoaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS0+YWxpZ24oKSA9
PSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQogICAgICAgICBSZW5kZXJJbWFnZTo6cGFp
bnQocGksIDAsIDApOwogICAgIGVsc2UgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QobV94
LCBtX3ksIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpOwogICAgICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdCgwLCAwLCBpbWFnZSgpLT53aWR0aCgpLCBpbWFnZSgpLT5oZWlnaHQoKSk7Ci0g
ICAgICAgIGFkanVzdFJlY3RzRm9yQXNwZWN0UmF0aW8oZGVzdFJlY3QsIHNyY1JlY3QsIGltYWdl
RWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCkpOworICAgICAgICBhZGp1c3RSZWN0
c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBpbWFnZUVsdC0+cHJlc2VydmVBc3Bl
Y3RSYXRpbygpKTsKICAgICAgICAgYy0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RSZWN0LCBzcmNS
ZWN0KTsKICAgICB9CiAKQEAgLTI0NCw3ICsyNDQsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjps
YXlvdXQoKQogRmxvYXRSZWN0IFJlbmRlclNWR0ltYWdlOjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNs
dWRlU3Ryb2tlKSBjb25zdAogewogICAgIFNWR0ltYWdlRWxlbWVudCAqaW1hZ2UgPSBzdGF0aWNf
Y2FzdDxTVkdJbWFnZUVsZW1lbnQgKj4obm9kZSgpKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KGlt
YWdlLT54QmFzZVZhbHVlKCktPnZhbHVlKCksIGltYWdlLT55QmFzZVZhbHVlKCktPnZhbHVlKCks
IHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KGltYWdlLT54KCktPnZh
bHVlKCksIGltYWdlLT55KCktPnZhbHVlKCksIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KIAogdm9p
ZCBSZW5kZXJTVkdJbWFnZTo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiBpbWFnZSkKQEAgLTI1
Nyw3ICsyNTcsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjppbWFnZUNoYW5nZWQoQ2FjaGVkCiBJ
bnRSZWN0IFJlbmRlclNWR0ltYWdlOjpnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCkKIHsKICAgICBT
VkdJbWFnZUVsZW1lbnQgKmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50ICo+KG5v
ZGUoKSk7Ci0gICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KEZsb2F0UmVjdChpbWFnZS0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBpbWFnZS0+eUJh
c2VWYWx1ZSgpLT52YWx1ZSgpLCB3aWR0aCgpLCBoZWlnaHQoKSkpOworICAgIEZsb2F0UmVjdCBy
ZXBhaW50UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChGbG9hdFJlY3QoaW1hZ2Ut
PngoKS0+dmFsdWUoKSwgaW1hZ2UtPnkoKS0+dmFsdWUoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsK
IAogICAgIC8vIEZpbHRlcnMgY2FuIGV4cGFuZCB0aGUgYm91bmRpbmcgYm94CiAgICAgS0NhbnZh
c0ZpbHRlciAqZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdHlsZSgpLT5zdmdT
dHlsZSgpLT5maWx0ZXIoKS5taWQoMSkpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgUmVuZGVy
U1ZHSW1hZ2U6OmFic29sdXRlUmVjdHMoVmVjdG8KIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdJ
bWFnZTo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQg
KmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50ICo+KG5vZGUoKSk7Ci0gICAgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShpbWFnZS0+eEJhc2VWYWx1ZSgpLT52YWx1
ZSgpLCBpbWFnZS0+eUJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gQWZmaW5lVHJh
bnNmb3JtKCkudHJhbnNsYXRlKGltYWdlLT54KCktPnZhbHVlKCksIGltYWdlLT55KCktPnZhbHVl
KCkpOwogfQogCiB2b2lkIFJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdGVGb3JBdHRyaWJ1dGVzKCkK
SW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9S
ZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrY2FudmFzL1JlbmRlclNWR1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIEFmZmluZVRyYW5zZm9ybSBS
ZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGkKIHsKICAgICBTVkdUZXh0RWxlbWVudCAqdGV4dCA9IHN0
YXRpY19jYXN0PFNWR1RleHRFbGVtZW50ICo+KGVsZW1lbnQoKSk7CiAKLSAgICBmbG9hdCB4T2Zm
c2V0ID0gdGV4dC0+eEJhc2VWYWx1ZSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eEJhc2VWYWx1ZSgp
LT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKLSAgICBmbG9hdCB5T2Zmc2V0ID0gdGV4dC0+eUJh
c2VWYWx1ZSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eUJhc2VWYWx1ZSgpLT5nZXRGaXJzdCgpLT52
YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB4T2Zmc2V0ID0gdGV4dC0+eCgpLT5nZXRGaXJzdCgpID8g
dGV4dC0+eCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB5T2Zmc2V0ID0g
dGV4dC0+eSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDog
MDsKIAogICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoeE9mZnNldCwgeU9m
ZnNldCk7CiB9CkluZGV4OiBrc3ZnMi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBr
c3ZnMi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIs
OCBAQCB2b2lkIFNWR0ltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGRvYyA9IGltYWdlRWxlbWVudC0+b3duZXJEb2N1bWVudCgpOwogICAgIAog
ICAgIENhY2hlZEltYWdlICpuZXdJbWFnZSA9IDA7Ci0gICAgaWYgKCFpbWFnZUVsZW1lbnQtPmhy
ZWZCYXNlVmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgIG5ld0ltYWdlID0gZG9jLT5kb2NMb2Fk
ZXIoKS0+cmVxdWVzdEltYWdlKGltYWdlRWxlbWVudC0+aHJlZkJhc2VWYWx1ZSgpKTsKKyAgICBp
ZiAoIWltYWdlRWxlbWVudC0+aHJlZigpLmlzRW1wdHkoKSkKKyAgICAgICAgbmV3SW1hZ2UgPSBk
b2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UoaW1hZ2VFbGVtZW50LT5ocmVmKCkpOwogCiAg
ICAgQ2FjaGVkSW1hZ2UgKm9sZEltYWdlID0gaW1hZ2UoKTsKICAgICBpZiAobmV3SW1hZ2UgIT0g
b2xkSW1hZ2UpIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9z
dmcvU1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwyNiArNzgsMjMgQEAgUmVu
ZGVyT2JqZWN0KiBTVkdBRWxlbWVudDo6Y3JlYXRlUmVuZGVyZQogdm9pZCBTVkdBRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCAqZXZ0KQogewogICAgIC8vIFRPRE8gOiBzaG91bGQg
dXNlIENMSUNLIGluc3RlYWQKLSAgICBpZigoZXZ0LT50eXBlKCkgPT0gRXZlbnROYW1lczo6bW91
c2V1cEV2ZW50ICYmIG1faXNMaW5rKSkKLSAgICB7CisgICAgaWYgKChldnQtPnR5cGUoKSA9PSBF
dmVudE5hbWVzOjptb3VzZXVwRXZlbnQgJiYgbV9pc0xpbmspKSB7CiAgICAgICAgIE1vdXNlRXZl
bnQgKmUgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KTsKIAogICAgICAgICBEZXByZWNh
dGVkU3RyaW5nIHVybDsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB1dGFyZ2V0OwotICAgICAg
ICBpZihlICYmIGUtPmJ1dHRvbigpID09IDIpCi0gICAgICAgIHsKKyAgICAgICAgaWYgKGUgJiYg
ZS0+YnV0dG9uKCkgPT0gMikgewogICAgICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICB1cmwgPSBwYXJzZVVSTChocmVmQmFzZVZhbHVlKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKKyAgICAgICAgdXJsID0gcGFyc2VVUkwoaHJlZigpKS5kZXByZWNhdGVkU3Ry
aW5nKCk7CiAgICAgICAgIHV0YXJnZXQgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldEF0
dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAotICAgICAgICBpZihlICYmIGUtPmJ1dHRvbigpID09
IDEpCisgICAgICAgIGlmIChlICYmIGUtPmJ1dHRvbigpID09IDEpCiAgICAgICAgICAgICB1dGFy
Z2V0ID0gIl9ibGFuayI7CiAKICAgICAgICAgaWYgKCFldnQtPmRlZmF1bHRQcmV2ZW50ZWQoKSkg
ewotICAgICAgICAgICAgaWYob3duZXJEb2N1bWVudCgpICYmIG93bmVyRG9jdW1lbnQoKS0+dmll
dygpICYmIG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChvd25lckRvY3VtZW50KCkgJiYgb3duZXJEb2N1bWVudCgpLT52aWV3KCkgJiYgb3du
ZXJEb2N1bWVudCgpLT5mcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAgLy9kb2N1bWVudCgpLT52
aWV3KCktPnJlc2V0Q3Vyc29yKCk7CiAgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+dXJsU2VsZWN0ZWQodXJsLCB1dGFyZ2V0KTsKICAgICAgICAgICAgIH0KSW5kZXg6IGtzdmcy
L3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQ2ly
Y2xlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxOSArNjEsMjEgQEAgdm9pZCBTVkdDaXJj
bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgICAgICBjeUJhc2VWYWx1ZSgpLT5zZXRW
YWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpyQXR0cikKICAgICAgICAgckJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYoU1ZHVGVzdHM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0gICAgICAgIGlmKFNWR0xhbmdTcGFj
ZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICAgICAgaWYoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVy
bjsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogICAgIH0KIH0KIAogUGF0aCBT
VkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKIHsKLSAgICBmbG9hdCBfY3ggPSBj
eEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfY3kgPSBjeUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAg
IGZsb2F0IF9yID0gckJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9jeCA9IGN4KCkt
PnZhbHVlKCksIF9jeSA9IGN5KCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3IgPSByKCktPnZhbHVl
KCk7CiAKICAgICByZXR1cm4gUGF0aDo6Y3JlYXRlQ2lyY2xlKEZsb2F0UG9pbnQoX2N4LCBfY3kp
LCBfcik7CiB9CkBAIC04MSwxMSArODMsMTEgQEAgUGF0aCBTVkdDaXJjbGVFbGVtZW50Ojp0b1Bh
dGhEYXRhKCkgY29ucwogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHQ2lyY2xlRWxlbWVudDo6
cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKIHsK
ICAgICAvLyBBbGwgYXR0cmlidXRlJ3MgY29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2Ug
dGhlIG9uZSBmcm9tICdjeCcpLgotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUg
PSBjeEJhc2VWYWx1ZSgpLT5jb250ZXh0KCk7CisgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAq
cmVzdG9yZSA9IGN4KCktPmNvbnRleHQoKTsKIAotICAgIGN4QmFzZVZhbHVlKCktPnNldENvbnRl
eHQoY29udGV4dCk7Ci0gICAgY3lCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAg
ICByQmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgY3goKS0+c2V0Q29udGV4
dChjb250ZXh0KTsKKyAgICBjeSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHIoKS0+c2V0
Q29udGV4dChjb250ZXh0KTsKICAgICAKICAgICBTVkdTdHlsZWRFbGVtZW50OjpwdXNoQXR0cmli
dXRlQ29udGV4dChjb250ZXh0KTsKICAgICByZXR1cm4gcmVzdG9yZTsKQEAgLTkzLDkgKzk1LDkg
QEAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHQ2lyY2xlRWxlbWVudAogCiBib29sIFNWR0Np
cmNsZUVsZW1lbnQ6Omhhc1BlcmNlbnRhZ2VWYWx1ZXMoKSBjb25zdAogewotICAgIGlmIChjeEJh
c2VWYWx1ZSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VO
VEFHRSB8fAotICAgICAgICBjeUJhc2VWYWx1ZSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6
U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAotICAgICAgICByQmFzZVZhbHVlKCktPnVuaXRU
eXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQorICAgIGlmIChj
eCgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8
fAorICAgICAgICBjeSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVf
UEVSQ0VOVEFHRSB8fAorICAgICAgICByKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdf
TEVOR1RIVFlQRV9QRVJDRU5UQUdFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkK
KysrIGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NywxOCArNTcsMTggQEAgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ2xpcFBhdAog
dm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
LSAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjbGlwUGF0aFVuaXRzQXR0cikKLSAg
ICB7Ci0gICAgICAgIGlmKHZhbHVlID09ICJ1c2VyU3BhY2VPblVzZSIpCisgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpIHsKKyAgICAgICAgaWYgKHZh
bHVlID09ICJ1c2VyU3BhY2VPblVzZSIpCiAgICAgICAgICAgICBzZXRDbGlwUGF0aFVuaXRzQmFz
ZVZhbHVlKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwotICAgICAgICBlbHNlIGlmKHZh
bHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCisgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJv
YmplY3RCb3VuZGluZ0JveCIpCiAgICAgICAgICAgICBzZXRDbGlwUGF0aFVuaXRzQmFzZVZhbHVl
KFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwotICAgIH0KLSAgIGVsc2UKLSAgICB7
Ci0gICAgICAgIGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJu
OwotICAgICAgICBpZihTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSBy
ZXR1cm47Ci0gICAgICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKFNW
R1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogICAgIH0KIH0KQEAgLTgyLDcgKzgyLDcgQEAgS0NhbnZhc0NsaXBwZXIgKlNWR0Ns
aXBQYXRoRWxlbWVudDo6Y2FudgogICAgIGVsc2UKICAgICAgICAgbV9jbGlwcGVyLT5yZXNldENs
aXBEYXRhKCk7CiAKLSAgICBib29sIGJib3ggPSBjbGlwUGF0aFVuaXRzQmFzZVZhbHVlKCkgPT0g
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKKyAgICBib29sIGJib3ggPSBjbGlwUGF0
aFVuaXRzKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKIAogICAgIFJlbmRl
clN0eWxlICpjbGlwUGF0aFN0eWxlID0gc3R5bGVGb3JSZW5kZXJlcihwYXJlbnQoKS0+cmVuZGVy
ZXIoKSk7IC8vIEZJWE1FOiBNYW51YWwgc3R5bGUgcmVzb2x1dGlvbiBpcyBhIGhhY2sKICAgICBm
b3IgKE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkp
IHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMyArOTQsMTMg
QEAgdm9pZCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudAogS0NDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojp0cmFu
c2ZlckZ1bmN0aW9uKCkgY29uc3QKIHsKICAgICBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
ZnVuYzsKLSAgICBmdW5jLnR5cGUgPSAoS0NDb21wb25lbnRUcmFuc2ZlclR5cGUpKHR5cGVCYXNl
VmFsdWUoKSAtIDEpOwotICAgIGZ1bmMuc2xvcGUgPSBzbG9wZUJhc2VWYWx1ZSgpOwotICAgIGZ1
bmMuaW50ZXJjZXB0ID0gaW50ZXJjZXB0QmFzZVZhbHVlKCk7Ci0gICAgZnVuYy5hbXBsaXR1ZGUg
PSBhbXBsaXR1ZGVCYXNlVmFsdWUoKTsKLSAgICBmdW5jLmV4cG9uZW50ID0gZXhwb25lbnRCYXNl
VmFsdWUoKTsKLSAgICBmdW5jLm9mZnNldCA9IG9mZnNldEJhc2VWYWx1ZSgpOwotICAgIFNWR051
bWJlckxpc3QgKm51bWJlcnMgPSB0YWJsZVZhbHVlc0Jhc2VWYWx1ZSgpOworICAgIGZ1bmMudHlw
ZSA9IChLQ0NvbXBvbmVudFRyYW5zZmVyVHlwZSkodHlwZSgpIC0gMSk7CisgICAgZnVuYy5zbG9w
ZSA9IHNsb3BlKCk7CisgICAgZnVuYy5pbnRlcmNlcHQgPSBpbnRlcmNlcHQoKTsKKyAgICBmdW5j
LmFtcGxpdHVkZSA9IGFtcGxpdHVkZSgpOworICAgIGZ1bmMuZXhwb25lbnQgPSBleHBvbmVudCgp
OworICAgIGZ1bmMub2Zmc2V0ID0gb2Zmc2V0KCk7CisgICAgU1ZHTnVtYmVyTGlzdCAqbnVtYmVy
cyA9IHRhYmxlVmFsdWVzKCk7CiAgICAgdW5zaWduZWQgaW50IG5yID0gbnVtYmVycy0+bnVtYmVy
T2ZJdGVtcygpOwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnI7IGkrKykKICAg
ICAgICAgZnVuYy50YWJsZVZhbHVlcy5hcHBlbmQobnVtYmVycy0+Z2V0SXRlbShpKS0+dmFsdWUo
KSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcy
L3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsMTQgKzYyLDE1
IEBAIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgeEJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKICAgICAgICAgeUJhc2VWYWx1ZSgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
aWYoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0gICAgICAg
IGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKSByZXR1cm47CisgICAgZWxzZSB7CisgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAg
ICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMpOwotICAgICAgICAgICAgbV9j
YWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZSho
cmVmQmFzZVZhbHVlKCkpOworICAgICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1l
bnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShocmVmKCkpOwogICAgICAgICAgICAgaWYg
KG1fY2FjaGVkSW1hZ2UpCiAgICAgICAgICAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVmKHRoaXMp
OwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDE5ICs2NSwyMSBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpCiAgICAgICAgIHJ4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeUF0dHIpCiAgICAg
ICAgIHJ5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKLSAgICBl
bHNlCi0gICAgewotICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpIHJldHVybjsKLSAgICAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOworICAgIGVsc2UgeworICAgICAg
ICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQogCiBQYXRoIFNWR0VsbGlwc2VFbGVtZW50Ojp0b1Bh
dGhEYXRhKCkgY29uc3QKIHsKLSAgICBmbG9hdCBfY3ggPSBjeEJhc2VWYWx1ZSgpLT52YWx1ZSgp
LCBfY3kgPSBjeUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF9yeCA9IHJ4QmFzZVZh
bHVlKCktPnZhbHVlKCksIF9yeSA9IHJ5QmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQg
X2N4ID0gY3goKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfcngg
PSByeCgpLT52YWx1ZSgpLCBfcnkgPSByeSgpLT52YWx1ZSgpOwogCiAgICAgcmV0dXJuIFBhdGg6
OmNyZWF0ZUVsbGlwc2UoRmxvYXRQb2ludChfY3gsIF9jeSksIF9yeCwgX3J5KTsKIH0KQEAgLTg1
LDEyICs4NywxMiBAQCBQYXRoIFNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uCiBj
b25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdFbGxpcHNlRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNv
bnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0
cmlidXRlJ3MgY29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICdj
eCcpLgotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSBjeEJhc2VWYWx1ZSgp
LT5jb250ZXh0KCk7CisgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9yZSA9IGN4KCkt
PmNvbnRleHQoKTsKIAotICAgIGN4QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0g
ICAgY3lCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICByeEJhc2VWYWx1ZSgp
LT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHJ5QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29u
dGV4dCk7CisgICAgY3goKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBjeSgpLT5zZXRDb250
ZXh0KGNvbnRleHQpOworICAgIHJ4KCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgcnkoKS0+
c2V0Q29udGV4dChjb250ZXh0KTsKIAogICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnB1c2hBdHRyaWJ1
dGVDb250ZXh0KGNvbnRleHQpOwogICAgIHJldHVybiByZXN0b3JlOwpAQCAtOTgsMTAgKzEwMCwx
MCBAQCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdFbGxpcHNlRWxlbWVuCiAKIGJvb2wgU1ZH
RWxsaXBzZUVsZW1lbnQ6Omhhc1BlcmNlbnRhZ2VWYWx1ZXMoKSBjb25zdAogewotICAgIGlmIChj
eEJhc2VWYWx1ZSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVS
Q0VOVEFHRSB8fAotICAgICAgICBjeUJhc2VWYWx1ZSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0
aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAotICAgICAgICByeEJhc2VWYWx1ZSgpLT51
bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAotICAg
ICAgICByeUJhc2VWYWx1ZSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZ
UEVfUEVSQ0VOVEFHRSkKKyAgICBpZiAoY3goKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNW
R19MRU5HVEhUWVBFX1BFUkNFTlRBR0UgfHwKKyAgICAgICAgY3koKS0+dW5pdFR5cGUoKSA9PSBT
VkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UgfHwKKyAgICAgICAgcngoKS0+dW5p
dFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UgfHwKKyAgICAg
ICAgcnkoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRB
R0UpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDoga3N2
ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdGRUJs
ZW5kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDkgKzgyLDkgQEAgS0NhbnZhc0ZF
QmxlbmQgKlNWR0ZFQmxlbmRFbGVtZW50OjpmaWx0ZQogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9
IHN0YXRpY19jYXN0PEtDYW52YXNGRUJsZW5kICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVG
aWx0ZXJFZmZlY3QoRkVfQkxFTkQpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmxlbmRNb2RlKChLQ0JsZW5kTW9k
ZVR5cGUpKG1vZGVCYXNlVmFsdWUoKS0xKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0
cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRJbjIoU3RyaW5nKGluMkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwor
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCbGVuZE1vZGUoKEtDQmxlbmRNb2RlVHlwZSkobW9kZSgp
LTEpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4oKS5kZXByZWNhdGVkU3RyaW5nKCkp
OworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbjIoU3RyaW5nKGluMigpKS5kZXByZWNhdGVkU3Ry
aW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAg
cmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4NiwxNSBAQCBLQ2FudmFzRkVD
b2xvck1hdHJpeCAqU1ZHRkVDb2xvck1hdHJpeEVsCiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihT
dHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0SW4oaW4oKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0
cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxmbG9hdD4g
X3ZhbHVlczsKLSAgICBTVkdOdW1iZXJMaXN0ICpudW1iZXJzID0gdmFsdWVzQmFzZVZhbHVlKCk7
CisgICAgU1ZHTnVtYmVyTGlzdCAqbnVtYmVycyA9IHZhbHVlcygpOwogICAgIHVuc2lnbmVkIGlu
dCBuciA9IG51bWJlcnMtPm51bWJlck9mSXRlbXMoKTsKICAgICBmb3IodW5zaWduZWQgaW50IGkg
PSAwO2kgPCBucjtpKyspCiAgICAgICAgIF92YWx1ZXMuYXBwZW5kKG51bWJlcnMtPmdldEl0ZW0o
aSktPnZhbHVlKCkpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRWYWx1ZXMoX3ZhbHVlcyk7Ci0g
ICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDQ29sb3JNYXRyaXhUeXBlKSh0eXBlQmFzZVZh
bHVlKCkgLSAxKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDQ29sb3JNYXRyaXhU
eXBlKSh0eXBlKCkgLSAxKSk7CiAgICAgCiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQpJ
bmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcwLDcgQEAgS0NhbnZhc0ZFQ29tcG9uZW50VHJh
bnNmZXIgKlNWR0ZFQ29tcG9uZQogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJl
dHVybiAwOwogICAgIAotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFs
dWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4o
KS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRl
ckVmZmVjdCk7CiAgICAgCiAgICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7
IG4gPSBuLT5uZXh0U2libGluZygpKSB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE0ICsxMDMsMTQgQEAgS0NhbnZhc0ZFQ29tcG9z
aXRlICpTVkdGRUNvbXBvc2l0ZUVsZW1lbgogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRp
Y19jYXN0PEtDYW52YXNGRUNvbXBvc2l0ZSAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmls
dGVyRWZmZWN0KEZFX0NPTVBPU0lURSkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRPcGVyYXRpb24oKEtDQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSkoX29wZXJhdG9yQmFzZVZhbHVlKCkgLSAxKSk7Ci0gICAgbV9maWx0
ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkp
OwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbjIoU3RyaW5nKGluMkJhc2VWYWx1ZSgpKS5kZXBy
ZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRPcGVyYXRpb24oKEtDQ29t
cG9zaXRlT3BlcmF0aW9uVHlwZSkoX29wZXJhdG9yKCkgLSAxKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldEluKGluKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4yKFN0cmluZyhpbjIoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMShr
MUJhc2VWYWx1ZSgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzIoazJCYXNlVmFsdWUoKSk7
Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEszKGszQmFzZVZhbHVlKCkpOwotICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRLNChrNEJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzEo
azEoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEsyKGsyKCkpOworICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRLMyhrMygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzQoazQoKSk7CiAgICAg
cmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTMgKzg1LDEz
IEBAIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZyAqU1ZHRkVEaWZmdXNlTGkKIHsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KSAKICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxL
Q2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRl
ckVmZmVjdChGRV9ESUZGVVNFX0xJR0hUSU5HKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldElu
KFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRJbihpbigpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRB
dHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RGlmZnVz
ZUNvbnN0YW50KChkaWZmdXNlQ29uc3RhbnRCYXNlVmFsdWUoKSkpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZhY2VTY2FsZUJhc2VWYWx1ZSgpKSk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWEJhc2VW
YWx1ZSgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJu
ZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZSgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0
aW5nQ29sb3IobGlnaHRpbmdDb2xvckJhc2VWYWx1ZSgpLT5jb2xvcigpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0RGlmZnVzZUNvbnN0YW50KChkaWZmdXNlQ29uc3RhbnQoKSkpOworICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZhY2VTY2FsZSgpKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWCgpKSk7
CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJuZWxVbml0TGVu
Z3RoWSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdD
b2xvcigpLT5jb2xvcigpKTsKICAgICB1cGRhdGVMaWdodHMoKTsKICAgICByZXR1cm4gbV9maWx0
ZXJFZmZlY3Q7CiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTEgKzkxLDExIEBAIEtDYW52YXNGRURp
c3BsYWNlbWVudE1hcCogU1ZHRkVEaXNwbGFjZW0KICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAgKj4ocmVuZGVyaW5nRGV2aWNlKCkt
PmNyZWF0ZUZpbHRlckVmZmVjdChGRV9ESVNQTEFDRU1FTlRfTUFQKSk7CiAgICAgaWYgKCFtX2Zp
bHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFhD
aGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSkoeENoYW5uZWxTZWxlY3RvckJh
c2VWYWx1ZSgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFlDaGFubmVsU2VsZWN0b3IoKEtD
Q2hhbm5lbFNlbGVjdG9yVHlwZSkoeUNoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZSgpKSk7Ci0gICAg
bV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3Ry
aW5nKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbjIoU3RyaW5nKGluMkJhc2VWYWx1ZSgp
KS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTY2FsZShzY2Fs
ZUJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0WENoYW5uZWxTZWxlY3Rvcigo
S0NDaGFubmVsU2VsZWN0b3JUeXBlKSh4Q2hhbm5lbFNlbGVjdG9yKCkpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0WUNoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2VsZWN0b3JUeXBlKSh5Q2hh
bm5lbFNlbGVjdG9yKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4oKS5kZXByZWNh
dGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbjIoU3RyaW5nKGluMigpKS5k
ZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTY2FsZShzY2FsZSgp
KTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIHJldHVy
biBtX2ZpbHRlckVmZmVjdDsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIFNWR0ZFRGlzdGFudExp
Z2h0RWxlbWVudDo6flNWR0ZFRGlzdGFudEwKIAogS0NMaWdodFNvdXJjZSAqU1ZHRkVEaXN0YW50
TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldyBLQ0Rp
c3RhbnRMaWdodFNvdXJjZShhemltdXRoQmFzZVZhbHVlKCksIGVsZXZhdGlvbkJhc2VWYWx1ZSgp
KTsKKyAgICByZXR1cm4gbmV3IEtDRGlzdGFudExpZ2h0U291cmNlKGF6aW11dGgoKSwgZWxldmF0
aW9uKCkpOwogfQogCiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MjYwKQorKysga3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNyArNjMsNyBAQCBLQ2FudmFzRkVGbG9vZCAqU1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRl
CiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRmxvb2QgKj4o
cmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9GTE9PRCkpOwogICAgIGlm
ICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4oKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0
YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgUmVuZGVyU3R5bGUgKmZpbHRl
clN0eWxlID0gY29uc3RfY2FzdDxTVkdGRUZsb29kRWxlbWVudCAqPih0aGlzKS0+c3R5bGVGb3JS
ZW5kZXJlcihwYXJlbnROb2RlKCktPnJlbmRlcmVyKCkpOwogICAgIGNvbnN0IFNWR1JlbmRlclN0
eWxlICpzdmdTdHlsZSA9IGZpbHRlclN0eWxlLT5zdmdTdHlsZSgpOwpJbmRleDoga3N2ZzIvc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3Zn
L1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDEwICs4
MiwxMCBAQCBLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKlNWR0ZFR2F1c3NpYW5CbHVyCiAgICAgICAg
IG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFR2F1c3NpYW5CbHVyICo+KHJl
bmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfR0FVU1NJQU5fQkxVUikpOwog
ICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4oKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAg
IHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAgbV9maWx0ZXJFZmZl
Y3QtPnNldFN0ZERldmlhdGlvblgoc3RkRGV2aWF0aW9uWEJhc2VWYWx1ZSgpKTsKLSAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0U3RkRGV2aWF0aW9uWShzdGREZXZpYXRpb25ZQmFzZVZhbHVlKCkpOwor
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdGREZXZpYXRpb25YKHN0ZERldmlhdGlvblgoKSk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldFN0ZERldmlhdGlvblkoc3RkRGV2aWF0aW9uWSgpKTsKICAg
ICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUltYWdl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNw
cAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmkKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAg
ICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMpOwotICAgICAgICAgICAgbV9jYWNo
ZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShocmVm
QmFzZVZhbHVlKCkpOworICAgICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQo
KS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShocmVmKCkpOwogICAgICAgICAgICAgaWYgKG1f
Y2FjaGVkSW1hZ2UpCiAgICAgICAgICAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVmKHRoaXMpOwog
ICAgICAgICAgICAgcmV0dXJuOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDggKzM5LDggQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFNWR0ZFTWVy
Z2VFbGVtZW50OjpTVkdGRU1lcmdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCAqZG9jKQogICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIG1fZmlsdGVyRWZmZWN0KDApCiB7Ci0gICAgbV9maWx0
ZXJFZmZlY3QgPSAwOwogfQogCiBTVkdGRU1lcmdlRWxlbWVudDo6flNWR0ZFTWVyZ2VFbGVtZW50
KCkKQEAgLTU3LDEzICs1Nyw5IEBAIEtDYW52YXNGRU1lcmdlICpTVkdGRU1lcmdlRWxlbWVudDo6
ZmlsdGUKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogCiAgICAg
RGVwcmVjYXRlZFN0cmluZ0xpc3QgbWVyZ2VJbnB1dHM7Ci0gICAgZm9yKE5vZGUgKm4gPSBmaXJz
dENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpCi0gICAgewotICAgICAgICBp
ZihuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZU1lcmdlTm9kZVRhZykpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIFN0cmluZyBtZXJnZUlucHV0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVNZXJnZU5vZGVF
bGVtZW50ICo+KG4pLT5pbkJhc2VWYWx1ZSgpOwotICAgICAgICAgICAgbWVyZ2VJbnB1dHMuYXBw
ZW5kKG1lcmdlSW5wdXQuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAgfQorICAgIGZvciAo
Tm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewor
ICAgICAgICBpZiAobi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVNZXJnZU5vZGVUYWcpKQorICAg
ICAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2RlRWxl
bWVudCAqPihuKS0+aW4oKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIH0KIAogICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRNZXJnZUlucHV0cyhtZXJnZUlucHV0cyk7CkluZGV4OiBrc3ZnMi9zdmcv
U1ZHRkVPZmZzZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRkVPZmZzZXRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsMTAgKzczLDEwIEBAIEtDYW52YXNGRU9m
ZnNldCAqU1ZHRkVPZmZzZXRFbGVtZW50OjpmaWwKICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzRkVPZmZzZXQgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZp
bHRlckVmZmVjdChGRV9PRkZTRVQpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAg
ICByZXR1cm4gMDsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVl
KCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGluKCku
ZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJF
ZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREeChkeEJhc2VWYWx1ZSgpKTsKLSAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0RHkoZHlCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3Qt
PnNldER4KGR4KCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREeShkeSgpKTsKICAgICByZXR1
cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw4ICsyNCw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6U1ZHRkVQb2ludExpZ2h0RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6IAotU1ZHRkVMaWdo
dEVsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6U1ZHRkVQb2lu
dExpZ2h0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KQorICAgIDogU1ZHRkVMaWdodEVsZW1lbnQodGFnTmFtZSwgZG9jKQogewogfQogCkBAIC0zNSw3
ICszNSw3IEBAIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6On5TVkdGRVBvaW50TGlnaHQKIAogS0NM
aWdodFNvdXJjZSAqU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdAog
ewotICAgIEtDYW52YXNQb2ludDNGIHBvcyh4QmFzZVZhbHVlKCksIHlCYXNlVmFsdWUoKSwgekJh
c2VWYWx1ZSgpKTsKKyAgICBLQ2FudmFzUG9pbnQzRiBwb3MoeCgpLCB5KCksIHooKSk7CiAgICAg
cmV0dXJuIG5ldyBLQ1BvaW50TGlnaHRTb3VyY2UocG9zKTsKIH0KIApJbmRleDoga3N2ZzIvc3Zn
L1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2
Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBr
c3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDE0ICs5MSwxNCBAQCBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nICpTVkdGRVNwZWN1
bGFyCiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkgCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0
ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyAqPihyZW5kZXJpbmdEZXZp
Y2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1NQRUNVTEFSX0xJR0hUSU5HKSk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5n
KCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihpbigpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0U3BlY3VsYXJDb25zdGFudCgoc3BlY3VsYXJDb25zdGFudEJhc2VWYWx1ZSgp
KSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFyRXhwb25lbnQoKHNwZWN1bGFyRXhw
b25lbnRCYXNlVmFsdWUoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdXJmYWNlU2NhbGUo
KHN1cmZhY2VTY2FsZUJhc2VWYWx1ZSgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5l
bFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWEJhc2VWYWx1ZSgpKSk7Ci0gICAgbV9maWx0
ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1
ZSgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xv
ckJhc2VWYWx1ZSgpLT5jb2xvcigpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJD
b25zdGFudCgoc3BlY3VsYXJDb25zdGFudCgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFNw
ZWN1bGFyRXhwb25lbnQoKHNwZWN1bGFyRXhwb25lbnQoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZhY2VTY2FsZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3Qt
PnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWCgpKSk7CisgICAgbV9maWx0
ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWSgpKSk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcigpLT5jb2xv
cigpKTsKICAgICB1cGRhdGVMaWdodHMoKTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9
CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisr
KyBrc3ZnMi9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMTMgKzM1LDEzIEBAIFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6flNWR0ZFU3BvdExpZ2h0RWwK
IAogS0NMaWdodFNvdXJjZSAqU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNv
bnN0CiB7Ci0gICAgS0NhbnZhc1BvaW50M0YgcG9zKHhCYXNlVmFsdWUoKSwgeUJhc2VWYWx1ZSgp
LCB6QmFzZVZhbHVlKCkpOworICAgIEtDYW52YXNQb2ludDNGIHBvcyh4KCksIHkoKSwgeigpKTsK
ICAgICAvL2NvbnZlcnQgbG9va0F0IHRvIGEgZGlyZWN0aW9uCi0gICAgS0NhbnZhc1BvaW50M0Yg
ZGlyZWN0aW9uKHBvaW50c0F0WEJhc2VWYWx1ZSgpIC0gcG9zLngoKSwgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBvaW50c0F0WUJhc2VWYWx1ZSgpIC0gcG9zLnkoKSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvaW50c0F0WkJhc2VWYWx1ZSgpIC0gcG9zLnooKSk7Cisg
ICAgS0NhbnZhc1BvaW50M0YgZGlyZWN0aW9uKHBvaW50c0F0WCgpIC0gcG9zLngoKSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c0F0WSgpIC0gcG9zLnkoKSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBvaW50c0F0WigpIC0gcG9zLnooKSk7CiAgICAgZGlyZWN0
aW9uLm5vcm1hbGl6ZSgpOwotICAgIHJldHVybiBuZXcgS0NTcG90TGlnaHRTb3VyY2UocG9zLCBk
aXJlY3Rpb24sIHNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUoKSwgbGltaXRpbmdDb25lQW5nbGVC
YXNlVmFsdWUoKSk7CisgICAgcmV0dXJuIG5ldyBLQ1Nwb3RMaWdodFNvdXJjZShwb3MsIGRpcmVj
dGlvbiwgc3BlY3VsYXJFeHBvbmVudCgpLCBsaW1pdGluZ0NvbmVBbmdsZSgpKTsKIH0KIAogfQpJ
bmRleDoga3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcv
U1ZHRkVUaWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgS0Nh
bnZhc0ZFVGlsZSAqU1ZHRkVUaWxlRWxlbWVudDo6ZmlsdGVyRQogICAgICAgICBtX2ZpbHRlckVm
ZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRVRpbGUgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNy
ZWF0ZUZpbHRlckVmZmVjdChGRV9USUxFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJhc2VW
YWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihp
bigpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmls
dGVyRWZmZWN0KTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9T
VkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDEzICsxMDMs
MTMgQEAgS0NhbnZhc0ZFVHVyYnVsZW5jZSAqU1ZHRkVUdXJidWxlbmNlRWxlbQogICAgIGlmICgh
bV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRUeXBlKChLQ1R1cmJ1bGFuY2VUeXBlKSh0eXBlQmFzZVZhbHVlKCkgLSAxKSk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDVHVyYnVsYW5jZVR5cGUpKHR5cGUoKSAtIDEp
KTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRCYXNlRnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WEJhc2VWYWx1ZSgpKTsK
LSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVlCYXNl
VmFsdWUoKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldE51bU9jdGF2ZXMobnVtT2N0YXZlc0Jh
c2VWYWx1ZSgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U2VlZChzZWVkQmFzZVZhbHVlKCkp
OwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlc0Jhc2VWYWx1
ZSgpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEJh
c2VGcmVxdWVuY3lYKGJhc2VGcmVxdWVuY3lYKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRC
YXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
TnVtT2N0YXZlcyhudW1PY3RhdmVzKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTZWVkKHNl
ZWQoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKCkg
PT0gU1ZHX1NUSVRDSFRZUEVfU1RJVENIKTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9
CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIv
c3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsMTggKzEyNCwx
NiBAQCBLQ2FudmFzRmlsdGVyICpTVkdGaWx0ZXJFbGVtZW50OjpjYW52YXNSCiAgICAgaWYgKCFt
X2ZpbHRlcikKICAgICAgICAgbV9maWx0ZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRmlsdGVyICo+
KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVSZXNvdXJjZShSU19GSUxURVIpKTsKIAotICAgIGJv
b2wgZmlsdGVyQkJveE1vZGUgPSBmaWx0ZXJVbml0c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZ
UEVfT0JKRUNUQk9VTkRJTkdCT1g7CisgICAgYm9vbCBmaWx0ZXJCQm94TW9kZSA9IGZpbHRlclVu
aXRzKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKICAgICBtX2ZpbHRlci0+
c2V0RmlsdGVyQm91bmRpbmdCb3hNb2RlKGZpbHRlckJCb3hNb2RlKTsKICAgICAKLSAgICB4QmFz
ZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7Ci0gICAgeUJhc2VWYWx1
ZSgpLT5zZXRCYm94UmVsYXRpdmUoZmlsdGVyQkJveE1vZGUpOwotICAgIHdpZHRoQmFzZVZhbHVl
KCktPnNldEJib3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7Ci0gICAgaGVpZ2h0QmFzZVZhbHVl
KCktPnNldEJib3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7Ci0gICAgZmxvYXQgX3ggPSB4QmFz
ZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAgIGZsb2F0
IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHRCYXNl
VmFsdWUoKS0+dmFsdWUoKTsKLSAgICBtX2ZpbHRlci0+c2V0RmlsdGVyUmVjdChGbG9hdFJlY3Qo
X3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpKTsKKyAgICB4KCktPnNldEJib3hSZWxhdGl2ZShmaWx0
ZXJCQm94TW9kZSk7CisgICAgeSgpLT5zZXRCYm94UmVsYXRpdmUoZmlsdGVyQkJveE1vZGUpOwor
ICAgIHdpZHRoKCktPnNldEJib3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7CisgICAgaGVpZ2h0
KCktPnNldEJib3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7CisgICAgbV9maWx0ZXItPnNldEZp
bHRlclJlY3QoRmxvYXRSZWN0KHgoKS0+dmFsdWUoKSwgeSgpLT52YWx1ZSgpLCB3aWR0aCgpLT52
YWx1ZSgpLCBoZWlnaHQoKS0+dmFsdWUoKSkpOwogICAgIAotICAgIGJvb2wgcHJpbWl0aXZlQkJv
eE1vZGUgPSBwcmltaXRpdmVVbml0c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1g7CisgICAgYm9vbCBwcmltaXRpdmVCQm94TW9kZSA9IHByaW1pdGl2ZVVuaXRz
KCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKICAgICBtX2ZpbHRlci0+c2V0
RWZmZWN0Qm91bmRpbmdCb3hNb2RlKHByaW1pdGl2ZUJCb3hNb2RlKTsKICAgICAvLyBGSVhNRTog
V2hlbiBkb2VzIHRoaXMgaW5mbyBnZXQgcGFzc2VkIHRvIHRoZSBmaWx0ZXJzIGVsZW1lbnRzPwog
CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzLmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsMjEgKzgxLDIx
IEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGUKICAgICBpZiAoIWZp
bHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgYmJveCA9IGZhbHNlOwotICAg
IGlmKHBhcmVudE5vZGUoKSAmJiBwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZp
bHRlclRhZykpCi0gICAgICAgIGJib3ggPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50ICo+
KHBhcmVudE5vZGUoKSktPnByaW1pdGl2ZVVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX1VOSVRfVFlQ
RV9PQkpFQ1RCT1VORElOR0JPWDsKKyAgICBpZiAocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUo
KS0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmlsdGVyVGFnKSkKKyAgICAgICAgYmJveCA9IHN0YXRp
Y19jYXN0PFNWR0ZpbHRlckVsZW1lbnQgKj4ocGFyZW50Tm9kZSgpKS0+cHJpbWl0aXZlVW5pdHMo
KSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCi0gICAgeEJhc2VWYWx1ZSgp
LT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgeUJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRp
dmUoYmJveCk7Ci0gICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwot
ICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgZmxvYXQg
X3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwot
ICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIF9oZWlnaHQgPSBo
ZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKLSAgICBpZihiYm94KQorICAgIHgoKS0+c2V0QmJv
eFJlbGF0aXZlKGJib3gpOworICAgIHkoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIHdp
ZHRoKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICBoZWlnaHQoKS0+c2V0QmJveFJlbGF0
aXZlKGJib3gpOworICAgIGZsb2F0IF94ID0geCgpLT52YWx1ZSgpLCBfeSA9IHkoKS0+dmFsdWUo
KTsKKyAgICBmbG9hdCBfd2lkdGggPSB3aWR0aCgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0
KCktPnZhbHVlKCk7CisgICAgaWYgKGJib3gpCiAgICAgICAgIGZpbHRlckVmZmVjdC0+c2V0U3Vi
UmVnaW9uKEZsb2F0UmVjdChfeCAqIDEwMC5mLCBfeSAqIDEwMC5mLCBfd2lkdGggKiAxMDAuZiwg
X2hlaWdodCAqIDEwMC5mKSk7CiAgICAgZWxzZQogICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldFN1
YlJlZ2lvbihGbG9hdFJlY3QoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpKTsKIAotICAgIGZpbHRl
ckVmZmVjdC0+c2V0UmVzdWx0KFN0cmluZyhyZXN1bHRCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0
cmluZygpKTsKKyAgICBmaWx0ZXJFZmZlY3QtPnNldFJlc3VsdChyZXN1bHQoKS5kZXByZWNhdGVk
U3RyaW5nKCkpOwogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRml0
VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTAsMTEgKzkwLDExIEBAIGJhaWxfb3V0OjsKIAogU1ZHTWF0cml4KiBT
VkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBm
bG9hdCB2aWV3SGVpZ2h0KSBjb25zdAogewotICAgIFNWR1JlY3QqIHZpZXdCb3hSZWN0ID0gdmll
d0JveEJhc2VWYWx1ZSgpOworICAgIFNWR1JlY3QqIHZpZXdCb3hSZWN0ID0gdmlld0JveCgpOwog
ICAgIGlmKHZpZXdCb3hSZWN0LT53aWR0aCgpID09IDAgfHwgdmlld0JveFJlY3QtPmhlaWdodCgp
ID09IDApCiAgICAgICAgIHJldHVybiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKTsK
IAotICAgIHJldHVybiBwcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPmdldENUTSh2aWV3
Qm94UmVjdC0+eCgpLAorICAgIHJldHVybiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmdldENUTSh2
aWV3Qm94UmVjdC0+eCgpLAogICAgICAgICAgICAgdmlld0JveFJlY3QtPnkoKSwgdmlld0JveFJl
Y3QtPndpZHRoKCksIHZpZXdCb3hSZWN0LT5oZWlnaHQoKSwKICAgICAgICAgICAgIDAsIDAsIHZp
ZXdXaWR0aCwgdmlld0hlaWdodCk7CiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAko
cmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgU1ZHR3JhZGllbnRFbGVtZW50Ojpy
ZWJ1aWxkU3RvcHMoKSAKICAgICAgICAgICAgIFNWR0VsZW1lbnQgKmVsZW1lbnQgPSBzdmdfZHlu
YW1pY19jYXN0KG4pOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNHcmFk
aWVudFN0b3AoKSkgewogICAgICAgICAgICAgICAgIFNWR1N0b3BFbGVtZW50ICpzdG9wID0gc3Rh
dGljX2Nhc3Q8U1ZHU3RvcEVsZW1lbnQgKj4oZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgZmxv
YXQgc3RvcE9mZnNldCA9IHN0b3AtPm9mZnNldEJhc2VWYWx1ZSgpOworICAgICAgICAgICAgICAg
IGZsb2F0IHN0b3BPZmZzZXQgPSBzdG9wLT5vZmZzZXQoKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBSZW5kZXJTdHlsZSAqc3RvcFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVT
ZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQoc3RvcCwgZ3JhZGllbnRTdHlsZSk7CiAgICAgICAg
ICAgICAgICAgQ29sb3IgYyA9IHN0b3BTdHlsZS0+c3ZnU3R5bGUoKS0+c3RvcENvbG9yKCk7Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
SGVscGVyLmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEwIEBAIGZsb2F0IFNWR0hlbHBlcjo6UGVyY2Vu
dGFnZU9mVmlld3BvcnQoZmwKICAgICBpZiAodmlld3BvcnRFbGVtZW50LT5pc1NWRygpKSB7CiAg
ICAgICAgIGNvbnN0IFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1NW
R0VsZW1lbnQqPih2aWV3cG9ydEVsZW1lbnQpOwogICAgICAgICBpZiAoc3ZnLT5oYXNBdHRyaWJ1
dGUoU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgewotICAgICAgICAgICAgd2lkdGggPSBzdmctPnZp
ZXdCb3hCYXNlVmFsdWUoKS0+d2lkdGgoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN2Zy0+dmll
d0JveEJhc2VWYWx1ZSgpLT5oZWlnaHQoKTsKLSAgICAgICAgfSBlbHNlIGlmIChzdmctPndpZHRo
QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJD
RU5UQUdFIHx8Ci0gICAgICAgICAgICAgICAgc3ZnLT5oZWlnaHRCYXNlVmFsdWUoKS0+dW5pdFR5
cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpIHsKKyAgICAgICAg
ICAgIHdpZHRoID0gc3ZnLT52aWV3Qm94KCktPndpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQg
PSBzdmctPnZpZXdCb3goKS0+aGVpZ2h0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3ZnLT53aWR0
aCgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8
fAorICAgICAgICAgICAgICAgIHN2Zy0+aGVpZ2h0KCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3Ro
OjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKSB7CiAgICAgICAgICAgICAvLyBUT0RPOiBTaG91
bGRuJ3Qgdy9oIGJlIG11bHRpcGxpZWQgd2l0aCB0aGUgcGVyY2VudGFnZSB2YWx1ZXM/IQogICAg
ICAgICAgICAgLy8gQUZBSUssIHRoaXMgYXNzdW1lcyB3aWR0aCAmIGhlaWdodCA9PSAxMDAlLCBS
b2I/PwogICAgICAgICAgICAgRG9jdW1lbnQgKmRvYyA9IHN2Zy0+ZG9jdW1lbnQoKTsKQEAgLTYz
LDggKzYzLDggQEAgZmxvYXQgU1ZHSGVscGVyOjpQZXJjZW50YWdlT2ZWaWV3cG9ydChmbAogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHdpZHRoID0gc3ZnLT53aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAgICAgICAgICAg
aGVpZ2h0ID0gc3ZnLT5oZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIHdp
ZHRoID0gc3ZnLT53aWR0aCgpLT52YWx1ZSgpOworICAgICAgICAgICAgaGVpZ2h0ID0gc3ZnLT5o
ZWlnaHQoKS0+dmFsdWUoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDoga3N2ZzIvc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDggKzc2LDggQEAgdm9pZCBTVkdMaW5lRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dAogCiBQYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QK
IHsKLSAgICBmbG9hdCBfeDEgPSB4MUJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfeTEgPSB5MUJhc2VW
YWx1ZSgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF94MiA9IHgyQmFzZVZhbHVlKCktPnZhbHVlKCks
IF95MiA9IHkyQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3gxID0geDEoKS0+dmFs
dWUoKSwgX3kxID0geTEoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDIgPSB4MigpLT52YWx1ZSgp
LCBfeTIgPSB5MigpLT52YWx1ZSgpOwogCiAgICAgcmV0dXJuIFBhdGg6OmNyZWF0ZUxpbmUoRmxv
YXRQb2ludChfeDEsIF95MSksIEZsb2F0UG9pbnQoX3gyLCBfeTIpKTsKIH0KQEAgLTg1LDEyICs4
NSwxMiBAQCBQYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKIGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQgKlNWR0xpbmVFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb25z
dCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQogewogICAgIC8vIEFsbCBhdHRyaWJ1dGUncyBj
b250ZXh0cyBhcmUgZXF1YWwgKHNvIGp1c3QgdGFrZSB0aGUgb25lIGZyb20gJ3gxJykuCi0gICAg
Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9yZSA9IHgxQmFzZVZhbHVlKCktPmNvbnRleHQo
KTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0geDEoKS0+Y29udGV4dCgp
OwogCi0gICAgeDFCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB5MUJhc2VW
YWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHgyQmFzZVZhbHVlKCktPnNldENvbnRl
eHQoY29udGV4dCk7Ci0gICAgeTJCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAg
ICB4MSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHkxKCktPnNldENvbnRleHQoY29udGV4
dCk7CisgICAgeDIoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB5MigpLT5zZXRDb250ZXh0
KGNvbnRleHQpOwogICAgIAogICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250
ZXh0KGNvbnRleHQpOwogICAgIHJldHVybiByZXN0b3JlOwpAQCAtOTgsMTAgKzk4LDEwIEBAIGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0xpbmVFbGVtZW50OjoKIAogYm9vbCBTVkdMaW5lRWxl
bWVudDo6aGFzUGVyY2VudGFnZVZhbHVlcygpIGNvbnN0CiB7Ci0gICAgaWYgKHgxQmFzZVZhbHVl
KCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8
Ci0gICAgICAgIHkxQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVO
R1RIVFlQRV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgIHgyQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkg
PT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgIHkyQmFz
ZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5U
QUdFKQorICAgIGlmICh4MSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZ
UEVfUEVSQ0VOVEFHRSB8fAorICAgICAgICB5MSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6
U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAorICAgICAgICB4MigpLT51bml0VHlwZSgpID09
IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAorICAgICAgICB5MigpLT51
bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBrc3ZnMi9zdmcvU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksODQgKzc5LDc5
IEBAIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKIHsKICAgICByZWJ1
aWxkU3RvcHMoKTsgLy8gcmVidWlsZCBzdG9wcyBiZWZvcmUgcG9zc2libHkgaW1wb3J0aW5nIHRo
ZW0gZnJvbSBhbnkgcmVmZXJlbmNlZCBncmFkaWVudC4KIAotICAgIGJvb2wgYmJveCA9IChncmFk
aWVudFVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7
CisgICAgYm9vbCBiYm94ID0gKGdyYWRpZW50VW5pdHMoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVD
VEJPVU5ESU5HQk9YKTsKICAgICAKLSAgICB4MUJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUo
YmJveCk7Ci0gICAgeTFCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIHgy
QmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB5MkJhc2VWYWx1ZSgpLT5z
ZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgeDEoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwor
ICAgIHkxKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICB4MigpLT5zZXRCYm94UmVsYXRp
dmUoYmJveCk7CisgICAgeTIoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwogICAgIAotICAgIGZs
b2F0IF94MSA9IHgxQmFzZVZhbHVlKCktPnZhbHVlKCksIF95MSA9IHkxQmFzZVZhbHVlKCktPnZh
bHVlKCk7Ci0gICAgZmxvYXQgX3gyID0geDJCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3kyID0geTJC
YXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDEgPSB4MSgpLT52YWx1ZSgpLCBfeTEg
PSB5MSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF94MiA9IHgyKCktPnZhbHVlKCksIF95MiA9IHky
KCktPnZhbHVlKCk7CiAKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCAq
Z3JhZCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50ICo+
KF9ncmFkKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0OwotICAgIGlmKGdyYWRpZW50VHJhbnNm
b3JtQmFzZVZhbHVlKCktPm51bWJlck9mSXRlbXMoKSA+IDApCi0gICAgICAgIG1hdCA9IGdyYWRp
ZW50VHJhbnNmb3JtQmFzZVZhbHVlKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgo
KTsKKyAgICBpZiAoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+bnVtYmVyT2ZJdGVtcygpID4gMCkKKyAg
ICAgICAgbWF0ID0gZ3JhZGllbnRUcmFuc2Zvcm0oKS0+Y29uc29saWRhdGUoKS0+bWF0cml4KCkt
Pm1hdHJpeCgpOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZkJhc2VW
YWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBT
dHJpbmcoaHJlZigpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyICpwc2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3VtZW50KCksIHJlZi5taWQoMSkp
OwogICAgIAotICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19SQURJQUxf
R1JBRElFTlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVOVCkpCisgICAg
aWYgKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19SQURJQUxfR1JBRElFTlQgfHwg
cHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVOVCkpCiAgICAgewogICAgICAgICBi
b29sIGlzTGluZWFyID0gcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVOVDsKICAg
ICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKmdyYWRpZW50ID0gc3RhdGljX2Nh
c3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKj4ocHNlcnZlcik7CiAKLSAgICAgICAg
aWYoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpKQorICAgICAgICBp
ZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpKQogICAgICAgICAg
ICAgYmJveCA9IGdyYWRpZW50LT5ib3VuZGluZ0JveE1vZGUoKTsKICAgICAgICAgICAgIAotICAg
ICAgICBpZihpc0xpbmVhcikKKyAgICAgICAgaWYgKGlzTGluZWFyKQogICAgICAgICB7CiAgICAg
ICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCAqbGluZWFyID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQgKj4ocHNlcnZlcik7
Ci0gICAgICAgICAgICBpZighaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4MUF0dHIpKQorICAgICAg
ICAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OngxQXR0cikpCiAgICAgICAgICAgICAg
ICAgX3gxID0gbGluZWFyLT5ncmFkaWVudFN0YXJ0KCkueCgpOwotICAgICAgICAgICAgZWxzZSBp
ZihiYm94KQorICAgICAgICAgICAgZWxzZSBpZiAoYmJveCkKICAgICAgICAgICAgICAgICBfeDEg
Kj0gMTAwLjsKIAotICAgICAgICAgICAgaWYoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eTFBdHRy
KSkKKyAgICAgICAgICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5MUF0dHIpKQogICAg
ICAgICAgICAgICAgIF95MSA9IGxpbmVhci0+Z3JhZGllbnRTdGFydCgpLnkoKTsKLSAgICAgICAg
ICAgIGVsc2UgaWYoYmJveCkKKyAgICAgICAgICAgIGVsc2UgaWYgKGJib3gpCiAgICAgICAgICAg
ICAgICAgX3kxICo9IDEwMC47CiAKLSAgICAgICAgICAgIGlmKCFoYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OngyQXR0cikpCisgICAgICAgICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6eDJB
dHRyKSkKICAgICAgICAgICAgICAgICBfeDIgPSBsaW5lYXItPmdyYWRpZW50RW5kKCkueCgpOwot
ICAgICAgICAgICAgZWxzZSBpZihiYm94KQorICAgICAgICAgICAgZWxzZSBpZiAoYmJveCkKICAg
ICAgICAgICAgICAgICBfeDIgKj0gMTAwLjsKIAotICAgICAgICAgICAgaWYoIWhhc0F0dHJpYnV0
ZShTVkdOYW1lczo6eTJBdHRyKSkKKyAgICAgICAgICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05h
bWVzOjp5MkF0dHIpKQogICAgICAgICAgICAgICAgIF95MiA9IGxpbmVhci0+Z3JhZGllbnRFbmQo
KS55KCk7Ci0gICAgICAgICAgICBlbHNlIGlmKGJib3gpCisgICAgICAgICAgICBlbHNlIGlmIChi
Ym94KQogICAgICAgICAgICAgICAgIF95MiAqPSAxMDAuOwotICAgICAgICB9Ci0gICAgICAgIGVs
c2UgaWYoYmJveCkKLSAgICAgICAgeworICAgICAgICB9IGVsc2UgaWYgKGJib3gpIHsKICAgICAg
ICAgICAgIF94MSAqPSAxMDAuMDsKICAgICAgICAgICAgIF95MSAqPSAxMDAuMDsKICAgICAgICAg
ICAgIF94MiAqPSAxMDAuMDsKICAgICAgICAgICAgIF95MiAqPSAxMDAuMDsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0
cikpCisgICAgICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpncmFkaWVudFRyYW5zZm9y
bUF0dHIpKQogICAgICAgICAgICAgbWF0ID0gZ3JhZGllbnQtPmdyYWRpZW50VHJhbnNmb3JtKCk7
CiAKICAgICAgICAgLy8gSW5oZXJpdCBjb2xvciBzdG9wcyBpZiBlbXB0eQogICAgICAgICBpZiAo
Z3JhZC0+Z3JhZGllbnRTdG9wcygpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGdyYWQtPnNldEdy
YWRpZW50U3RvcHMoZ3JhZGllbnQpOwogCi0gICAgICAgIGlmKCFoYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnNwcmVhZE1ldGhvZEF0dHIpKQorICAgICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1l
czo6c3ByZWFkTWV0aG9kQXR0cikpCiAgICAgICAgICAgICBncmFkLT5zZXRHcmFkaWVudFNwcmVh
ZE1ldGhvZChncmFkaWVudC0+c3ByZWFkTWV0aG9kKCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ewotICAgICAgICBpZihzcHJlYWRNZXRob2RCYXNlVmFsdWUoKSA9PSBTVkdfU1BSRUFETUVUSE9E
X1JFRkxFQ1QpCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNwcmVhZE1ldGhvZCgpID09IFNW
R19TUFJFQURNRVRIT0RfUkVGTEVDVCkKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3By
ZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9SRUZMRUNUKTsKLSAgICAgICAgZWxzZSBpZihzcHJlYWRN
ZXRob2RCYXNlVmFsdWUoKSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFUEVBVCkKKyAgICAgICAgZWxz
ZSBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpCiAgICAgICAg
ICAgICBncmFkLT5zZXRHcmFkaWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUkVQRUFUKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2Qo
U1BSRUFETUVUSE9EX1BBRCk7CiAKLSAgICAgICAgaWYoYmJveCkKLSAgICAgICAgeworICAgICAg
ICBpZiAoYmJveCkgewogICAgICAgICAgICAgX3gxICo9IDEwMC4wOwogICAgICAgICAgICAgX3kx
ICo9IDEwMC4wOwogICAgICAgICAgICAgX3gyICo9IDEwMC4wOwpJbmRleDoga3N2ZzIvc3ZnL1NW
R01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdNYXJrZXJFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNywxNiArMTI3LDE2IEBAIEtDYW52YXNNYXJrZXIgKlNW
R01hcmtlckVsZW1lbnQ6OmNhbnZhc1IKICAgICBpZighbV9vcmllbnRUeXBlKQogICAgICAgICBz
ZXRPcmllbnRUb0FuZ2xlKFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR0FuZ2xlKCkpOwogICAgIAot
ICAgIGlmKG9yaWVudFR5cGVCYXNlVmFsdWUoKSA9PSBTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSkK
LSAgICAgICAgbV9tYXJrZXItPnNldEFuZ2xlKG9yaWVudEFuZ2xlQmFzZVZhbHVlKCktPnZhbHVl
KCkpOworICAgIGlmKG9yaWVudFR5cGUoKSA9PSBTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSkKKyAg
ICAgICAgbV9tYXJrZXItPnNldEFuZ2xlKG9yaWVudEFuZ2xlKCktPnZhbHVlKCkpOwogICAgIGVs
c2UKICAgICAgICAgbV9tYXJrZXItPnNldEF1dG9BbmdsZSgpOwogCi0gICAgbV9tYXJrZXItPnNl
dFJlZihyZWZYQmFzZVZhbHVlKCktPnZhbHVlKCksIHJlZllCYXNlVmFsdWUoKS0+dmFsdWUoKSk7
CisgICAgbV9tYXJrZXItPnNldFJlZihyZWZYKCktPnZhbHVlKCksIHJlZlkoKS0+dmFsdWUoKSk7
CiAgICAgCi0gICAgbV9tYXJrZXItPnNldFVzZVN0cm9rZVdpZHRoKG1hcmtlclVuaXRzQmFzZVZh
bHVlKCkgPT0gU1ZHX01BUktFUlVOSVRTX1NUUk9LRVdJRFRIKTsKLSAgICBkb3VibGUgdyA9IG1h
cmtlcldpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCk7Ci0gICAgZG91YmxlIGggPSBtYXJrZXJIZWln
aHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBtX21hcmtlci0+c2V0VXNlU3Ryb2tlV2lkdGgo
bWFya2VyVW5pdHMoKSA9PSBTVkdfTUFSS0VSVU5JVFNfU1RST0tFV0lEVEgpOworICAgIGRvdWJs
ZSB3ID0gbWFya2VyV2lkdGgoKS0+dmFsdWUoKTsKKyAgICBkb3VibGUgaCA9IG1hcmtlckhlaWdo
dCgpLT52YWx1ZSgpOwogICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9W
aWV3VHJhbnNmb3JtKHcsIGgpOwogICAgIG1fbWFya2VyLT5zZXRTY2FsZSh2aWV3Qm94LT5tYXRy
aXgoKS5tMTEoKSwgdmlld0JveC0+bWF0cml4KCkubTIyKCkpOwogICAgIApJbmRleDoga3N2ZzIv
c3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTWFza0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHTWFza0VsZQogCiB2b2lkIFNWR01hc2tFbGVtZW50OjphdHRyaWJ1dGVDaGFu
Z2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQogewotICAgIEludFNpemUg
bmV3U2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwgbHJv
dW5kZihoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSkpOworICAgIEludFNpemUgbmV3U2l6ZSA9
IEludFNpemUobHJvdW5kZih3aWR0aCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+dmFs
dWUoKSkpOwogICAgIGlmICghbV9tYXNrZXIgfHwgIW1fbWFza2VyLT5tYXNrKCkgfHwgKG1fbWFz
a2VyLT5tYXNrKCktPnNpemUoKSAhPSBuZXdTaXplKSkKICAgICAgICAgbV9kaXJ0eSA9IHRydWU7
CiAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBw
cmVzZXJ2ZURlY2xzKTsKQEAgLTExMyw3ICsxMTMsNyBAQCBLQ2FudmFzSW1hZ2UgKlNWR01hc2tF
bGVtZW50OjpkcmF3TWFza2VyCiAgICAgICAgIHJldHVybiAwOwogICAgIEtDYW52YXNJbWFnZSAq
bWFza0ltYWdlID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ltYWdlICo+KGRldmljZS0+Y3JlYXRlUmVz
b3VyY2UoUlNfSU1BR0UpKTsKIAotICAgIEludFNpemUgc2l6ZSA9IEludFNpemUobHJvdW5kZih3
aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNlVmFsdWUoKS0+dmFs
dWUoKSkpOworICAgIEludFNpemUgc2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aCgpLT52YWx1
ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+dmFsdWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5pdChz
aXplKTsKIAogICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpwYXR0ZXJuQ29udGV4dCA9IGRl
dmljZS0+Y29udGV4dEZvckltYWdlKG1hc2tJbWFnZSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0
dGVybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDEyICsxMjMsMTIgQEAgdm9pZCBTVkdQYXR0ZXJuRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaQogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogU1ZHUGF0dGVy
bkVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIGNv
bnRleHQpCiB7CiAgICAgLy8gQWxsIGF0dHJpYnV0ZSdzIGNvbnRleHRzIGFyZSBlcXVhbCAoc28g
anVzdCB0YWtlIHRoZSBvbmUgZnJvbSAneCcpLgotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQq
IHJlc3RvcmUgPSB4QmFzZVZhbHVlKCktPmNvbnRleHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRF
bGVtZW50KiByZXN0b3JlID0geCgpLT5jb250ZXh0KCk7CiAKLSAgICB4QmFzZVZhbHVlKCktPnNl
dENvbnRleHQoY29udGV4dCk7Ci0gICAgeUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQp
OwotICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgaGVpZ2h0
QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgeCgpLT5zZXRDb250ZXh0KGNv
bnRleHQpOworICAgIHkoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB3aWR0aCgpLT5zZXRD
b250ZXh0KGNvbnRleHQpOworICAgIGhlaWdodCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogCiAg
ICAgcmV0dXJuIHJlc3RvcmU7CiB9CkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBTVkdQYXR0ZXJu
RWxlbWVudDo6cmVzb3VyY2VOb3RpZmljYQogCiB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpmaWxs
QXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiB0
YXJnZXQsIEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCkKIHsKLSAgICBE
ZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmKCkpLmRlcHJl
Y2F0ZWRTdHJpbmcoKTsKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnJlZlNlcnZlciA9IGdl
dFBhaW50U2VydmVyQnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsKIAogICAgIGlmICghcmVm
U2VydmVyIHx8IHJlZlNlcnZlci0+dHlwZSgpICE9IFBTX1BBVFRFUk4pCkBAIC0xNzUsMTQgKzE3
NSwxNCBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpkcmF3UGF0dGVybkNvbnRlCiAgICAgCiAg
ICAgU1ZHU3R5bGVkRWxlbWVudCogYWN0aXZlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxl
ZEVsZW1lbnQqPihtX3BhaW50U2VydmVyLT5hY3RpdmVDbGllbnQoKS0+ZWxlbWVudCgpKTsKIAot
ICAgIGJvb2wgYmJveCA9IChwYXR0ZXJuVW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICBib29sIGJib3ggPSAocGF0dGVyblVuaXRzKCkgPT0g
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAKICAgICBjb25zdCBTVkdTdHlsZWRF
bGVtZW50KiBzYXZlZENvbnRleHQgPSAwOwogICAgIGlmIChiYm94KSB7Ci0gICAgICAgIGlmICh3
aWR0aEJhc2VWYWx1ZSgpLT51bml0VHlwZSgpICE9IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVf
UEVSQ0VOVEFHRSkKLSAgICAgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPm5ld1ZhbHVlU3BlY2lm
aWVkVW5pdHMoU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFLCB3aWR0aEJhc2VW
YWx1ZSgpLT52YWx1ZSgpICogMTAwLik7Ci0gICAgICAgIGlmIChoZWlnaHRCYXNlVmFsdWUoKS0+
dW5pdFR5cGUoKSAhPSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpCi0gICAg
ICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5n
dGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UsIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgp
ICogMTAwLik7CisgICAgICAgIGlmICh3aWR0aCgpLT51bml0VHlwZSgpICE9IFNWR0xlbmd0aDo6
U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkKKyAgICAgICAgICAgIHdpZHRoKCktPm5ld1ZhbHVl
U3BlY2lmaWVkVW5pdHMoU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFLCB3aWR0
aCgpLT52YWx1ZSgpICogMTAwLik7CisgICAgICAgIGlmIChoZWlnaHQoKS0+dW5pdFR5cGUoKSAh
PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpCisgICAgICAgICAgICBoZWln
aHQoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BF
UkNFTlRBR0UsIGhlaWdodCgpLT52YWx1ZSgpICogMTAwLik7CiAgICAgICAgIGlmIChhY3RpdmVF
bGVtZW50KQogICAgICAgICAgICAgc2F2ZWRDb250ZXh0ID0gY29uc3RfY2FzdDxTVkdQYXR0ZXJu
RWxlbWVudCogPih0aGlzKS0+cHVzaEF0dHJpYnV0ZUNvbnRleHQoYWN0aXZlRWxlbWVudCk7CiAg
ICAgfQpAQCAtMTkzLDcgKzE5Myw3IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRyYXdQYXR0
ZXJuQ29udGUKIAogICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBwYXR0ZXJuQ29udGV4dCA9
IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1fdGlsZSk7CiAgICAgZGV2aWNlLT5wdXNoQ29udGV4
dChwYXR0ZXJuQ29udGV4dCk7Ci0gICAgRmxvYXRSZWN0IHJlY3QoeEJhc2VWYWx1ZSgpLT52YWx1
ZSgpLCB5QmFzZVZhbHVlKCktPnZhbHVlKCksIHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIGhl
aWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKKyAgICBGbG9hdFJlY3QgcmVjdCh4KCktPnZhbHVl
KCksIHkoKS0+dmFsdWUoKSwgd2lkdGgoKS0+dmFsdWUoKSwgaGVpZ2h0KCktPnZhbHVlKCkpOwog
ICAgIG1fcGFpbnRTZXJ2ZXItPnNldEJib3gocmVjdCk7CiAgICAgbV9wYWludFNlcnZlci0+c2V0
UGF0dGVyblRyYW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KTsKICAgICBtX3BhaW50U2Vy
dmVyLT5zZXRUaWxlKG1fdGlsZSk7CkBAIC0yMTksNyArMjE5LDcgQEAgdm9pZCBTVkdQYXR0ZXJu
RWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZQogICAgICAgICBLQ2FudmFzTWF0cml4IHNhdmVkTWF0
cml4ID0gaXRlbS0+bG9jYWxUcmFuc2Zvcm0oKTsKIAogICAgICAgICBjb25zdCBTVkdTdHlsZWRF
bGVtZW50KiBzYXZlZENvbnRleHQgPSAwOwotICAgICAgICBpZiAocGF0dGVybkNvbnRlbnRVbml0
c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgICAg
IGlmIChwYXR0ZXJuQ29udGVudFVuaXRzKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpCiAgICAgICAg
ICAgICAgICAgc2F2ZWRDb250ZXh0ID0gZS0+cHVzaEF0dHJpYnV0ZUNvbnRleHQoYWN0aXZlRWxl
bWVudCk7CkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6bm90aWZ5
QXR0cmlidXRlQwogICAgIGlmICghbV9wYWludFNlcnZlciB8fCAhbV9wYWludFNlcnZlci0+YWN0
aXZlQ2xpZW50KCkgfHwgbV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzKQogICAgICAgICByZXR1cm47
CiAKLSAgICBJbnRTaXplIG5ld1NpemUgPSBJbnRTaXplKGxyb3VuZGYod2lkdGhCYXNlVmFsdWUo
KS0+dmFsdWUoKSksIGxyb3VuZGYoaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCkpKTsKKyAgICBJ
bnRTaXplIG5ld1NpemUgPSBJbnRTaXplKGxyb3VuZGYod2lkdGgoKS0+dmFsdWUoKSksIGxyb3Vu
ZGYoaGVpZ2h0KCktPnZhbHVlKCkpKTsKICAgICBpZiAobV90aWxlICYmIChtX3RpbGUtPnNpemUo
KSA9PSBuZXdTaXplKSB8fCBuZXdTaXplLndpZHRoKCkgPCAxIHx8IG5ld1NpemUuaGVpZ2h0KCkg
PCAxKQogICAgICAgICByZXR1cm47CiAKQEAgLTMwMiwxOCArMzAyLDE4IEBAIHZvaWQgU1ZHUGF0
dGVybkVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUMKICAgICBjb25zdCBOb2RlICp0ZXN0ID0gdGhp
czsKICAgICB3aGlsZSh0ZXN0ICYmICF0ZXN0LT5oYXNDaGlsZE5vZGVzKCkpCiAgICAgewotICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyh0YXJnZXQtPmhyZWZCYXNlVmFsdWUo
KSkuZGVwcmVjYXRlZFN0cmluZygpOworICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0
cmluZyh0YXJnZXQtPmhyZWYoKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICB0ZXN0ID0g
b3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZChTdHJpbmcocmVmLm1pZCgxKSkuaW1wbCgp
KTsKICAgICAgICAgaWYgKHRlc3QgJiYgdGVzdC0+aGFzVGFnTmFtZShTVkdOYW1lczo6cGF0dGVy
blRhZykpCiAgICAgICAgICAgICB0YXJnZXQgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdQYXR0ZXJu
RWxlbWVudCogPih0ZXN0KTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBzaG9ydCBzYXZlZFBhdHRl
cm5Vbml0cyA9IHBhdHRlcm5Vbml0c0Jhc2VWYWx1ZSgpOwotICAgIHVuc2lnbmVkIHNob3J0IHNh
dmVkUGF0dGVybkNvbnRlbnRVbml0cyA9IHBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUoKTsK
KyAgICB1bnNpZ25lZCBzaG9ydCBzYXZlZFBhdHRlcm5Vbml0cyA9IHBhdHRlcm5Vbml0cygpOwor
ICAgIHVuc2lnbmVkIHNob3J0IHNhdmVkUGF0dGVybkNvbnRlbnRVbml0cyA9IHBhdHRlcm5Db250
ZW50VW5pdHMoKTsKIAogICAgIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4
OwotICAgIGlmIChwYXR0ZXJuVHJhbnNmb3JtQmFzZVZhbHVlKCktPm51bWJlck9mSXRlbXMoKSA+
IDApCi0gICAgICAgIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXggPSBwYXR0ZXJuVHJhbnNmb3JtQmFz
ZVZhbHVlKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKKyAgICBpZiAocGF0
dGVyblRyYW5zZm9ybSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQorICAgICAgICBwYXR0ZXJuVHJh
bnNmb3JtTWF0cml4ID0gcGF0dGVyblRyYW5zZm9ybSgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgo
KS0+bWF0cml4KCk7CiAKIAogICAgIFNWR1BhdHRlcm5FbGVtZW50ICpub25Db25zdFRoaXMgPSBj
b25zdF9jYXN0PFNWR1BhdHRlcm5FbGVtZW50Kj4odGhpcyk7CkBAIC0zNDgsMTEgKzM0OCw4IEBA
IEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4gKlNWR1BhdHRlcm4KIFNWR01hdHJpeCAqU1ZH
UGF0dGVybkVsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiB7CiAgICAgU1ZHTWF0cml4ICptYXQgPSBT
VkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKTsKLSAgICBpZiAobWF0KQotICAgIHsKLSAg
ICAgICAgUmVmUHRyPFNWR01hdHJpeD4gdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0o
d2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCkpOwot
CisgICAgaWYgKG1hdCkgeworICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0gdmll
d0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLT52YWx1ZSgpLCBoZWlnaHQoKS0+dmFsdWUoKSk7
CiAgICAgICAgIG1hdC0+bXVsdGlwbHkodmlld0JveC5nZXQoKSk7CiAgICAgfQogCkluZGV4OiBr
c3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBr
c3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODUsMjUgKzg1LDI1IEBAIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQK
IHsKICAgICByZWJ1aWxkU3RvcHMoKTsgLy8gcmVidWlsZCBzdG9wcyBiZWZvcmUgcG9zc2libHkg
aW1wb3J0aW5nIHRoZW0gZnJvbSBhbnkgcmVmZXJlbmNlZCBncmFkaWVudC4KIAotICAgIGJvb2wg
YmJveCA9IChncmFkaWVudFVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RC
T1VORElOR0JPWCk7CisgICAgYm9vbCBiYm94ID0gKGdyYWRpZW50VW5pdHMoKSA9PSBTVkdfVU5J
VF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICBib29sIGZ4U2V0ID0gaGFzQXR0cmlidXRl
KFNWR05hbWVzOjpmeEF0dHIpOwogICAgIGJvb2wgZnlTZXQgPSBoYXNBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OmZ5QXR0cik7Ci0gICAgY3hCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwot
ICAgIGN5QmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICByQmFzZVZhbHVl
KCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICBmeEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVs
YXRpdmUoYmJveCk7Ci0gICAgZnlCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwot
ICAgIGZsb2F0IF9jeCA9IGN4QmFzZVZhbHVlKCktPnZhbHVlKCksIF9jeSA9IGN5QmFzZVZhbHVl
KCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3IgPSByQmFzZVZhbHVlKCktPnZhbHVlKCk7Ci0gICAg
ZmxvYXQgX2Z4ID0gZnhTZXQgPyBmeEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogX2N4OwotICAgIGZs
b2F0IF9meSA9IGZ5U2V0ID8gZnlCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IF9jeTsKKyAgICBjeCgp
LT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgY3koKS0+c2V0QmJveFJlbGF0aXZlKGJib3gp
OworICAgIHIoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIGZ4KCktPnNldEJib3hSZWxh
dGl2ZShiYm94KTsKKyAgICBmeSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgZmxvYXQg
X2N4ID0gY3goKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfciA9
IHIoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfZnggPSBmeFNldCA/IGZ4KCktPnZhbHVlKCkgOiBf
Y3g7CisgICAgZmxvYXQgX2Z5ID0gZnlTZXQgPyBmeSgpLT52YWx1ZSgpIDogX2N5OwogCiAgICAg
S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQgKmdyYWQgPSBzdGF0aWNfY2FzdDxL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCAqPihfZ3JhZCk7CiAgICAgQWZmaW5l
VHJhbnNmb3JtIG1hdDsKLSAgICBpZihncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5udW1i
ZXJPZkl0ZW1zKCkgPiAwKQotICAgICAgICBtYXQgPSBncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1
ZSgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CisgICAgaWYoZ3JhZGllbnRU
cmFuc2Zvcm0oKS0+bnVtYmVyT2ZJdGVtcygpID4gMCkKKyAgICAgICAgbWF0ID0gZ3JhZGllbnRU
cmFuc2Zvcm0oKS0+Y29uc29saWRhdGUoKS0+bWF0cml4KCktPm1hdHJpeCgpOwogCi0gICAgRGVw
cmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3Ry
aW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZigpKS5kZXByZWNh
dGVkU3RyaW5nKCk7CiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyID0gZ2V0UGFp
bnRTZXJ2ZXJCeUlkKGRvY3VtZW50KCksIHJlZi5taWQoMSkpOwogCiAgICAgaWYocHNlcnZlciAm
JiAocHNlcnZlci0+dHlwZSgpID09IFBTX1JBRElBTF9HUkFESUVOVCB8fCBwc2VydmVyLT50eXBl
KCkgPT0gUFNfTElORUFSX0dSQURJRU5UKSkKQEAgLTE2MSw5ICsxNjEsOSBAQCB2b2lkIFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0g
ICAgICAgIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNWR19TUFJFQURNRVRIT0RfUkVG
TEVDVCkKKyAgICAgICAgaWYoc3ByZWFkTWV0aG9kKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRUZM
RUNUKQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVU
SE9EX1JFRkxFQ1QpOwotICAgICAgICBlbHNlIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09
IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQorICAgICAgICBlbHNlIGlmKHNwcmVhZE1ldGhvZCgp
ID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGll
bnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1JFUEVBVCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9QQUQpOwpJ
bmRleDoga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHUmVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdS
ZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDE1ICs4NywxNSBAQCB2b2lkIFNW
R1JlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAKIFBhdGggU1ZHUmVjdEVsZW1lbnQ6
OnRvUGF0aERhdGEoKSBjb25zdAogewotICAgIGZsb2F0IF94ID0geEJhc2VWYWx1ZSgpLT52YWx1
ZSgpLCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfd2lkdGggPSB3aWR0
aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVl
KCk7CisgICAgZmxvYXQgX3ggPSB4KCktPnZhbHVlKCksIF95ID0geSgpLT52YWx1ZSgpOworICAg
IGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHQoKS0+dmFs
dWUoKTsKIAogICAgIGJvb2wgaGFzUnggPSBoYXNBdHRyaWJ1dGUoU3RyaW5nKCJyeCIpLmltcGwo
KSk7CiAgICAgYm9vbCBoYXNSeSA9IGhhc0F0dHJpYnV0ZShTdHJpbmcoInJ5IikuaW1wbCgpKTsK
ICAgICBpZihoYXNSeCB8fCBoYXNSeSkKICAgICB7Ci0gICAgICAgIGZsb2F0IF9yeCA9IGhhc1J4
ID8gcnhCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IHJ5QmFzZVZhbHVlKCktPnZhbHVlKCk7Ci0gICAg
ICAgIGZsb2F0IF9yeSA9IGhhc1J5ID8gcnlCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IHJ4QmFzZVZh
bHVlKCktPnZhbHVlKCk7CisgICAgICAgIGZsb2F0IF9yeCA9IGhhc1J4ID8gcngoKS0+dmFsdWUo
KSA6IHJ5KCktPnZhbHVlKCk7CisgICAgICAgIGZsb2F0IF9yeSA9IGhhc1J5ID8gcnkoKS0+dmFs
dWUoKSA6IHJ4KCktPnZhbHVlKCk7CiAgICAgICAgIHJldHVybiBQYXRoOjpjcmVhdGVSb3VuZGVk
UmVjdGFuZ2xlKEZsb2F0UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCksIEZsb2F0U2l6ZShf
cngsIF9yeSkpOwogICAgIH0KIApAQCAtMTA1LDEyICsxMDUsMTIgQEAgUGF0aCBTVkdSZWN0RWxl
bWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CiBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdSZWN0
RWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29u
dGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3MgY29udGV4dHMgYXJlIGVxdWFsIChzbyBq
dXN0IHRha2UgdGhlIG9uZSBmcm9tICd4JykuCi0gICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAq
cmVzdG9yZSA9IHhCYXNlVmFsdWUoKS0+Y29udGV4dCgpOworICAgIGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQgKnJlc3RvcmUgPSB4KCktPmNvbnRleHQoKTsKIAotICAgIHhCYXNlVmFsdWUoKS0+c2V0
Q29udGV4dChjb250ZXh0KTsKLSAgICB5QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7
Ci0gICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBoZWlnaHRC
YXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB4KCktPnNldENvbnRleHQoY29u
dGV4dCk7CisgICAgeSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHdpZHRoKCktPnNldENv
bnRleHQoY29udGV4dCk7CisgICAgaGVpZ2h0KCktPnNldENvbnRleHQoY29udGV4dCk7CiAgICAg
CiAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29udGV4dCk7CiAg
ICAgcmV0dXJuIHJlc3RvcmU7CkBAIC0xMTgsMTIgKzExOCwxMiBAQCBjb25zdCBTVkdTdHlsZWRF
bGVtZW50ICpTVkdSZWN0RWxlbWVudDo6CiAKIGJvb2wgU1ZHUmVjdEVsZW1lbnQ6Omhhc1BlcmNl
bnRhZ2VWYWx1ZXMoKSBjb25zdAogewotICAgIGlmICh4QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkg
PT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgIHlCYXNl
VmFsdWUoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRB
R0UgfHwKLSAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6
OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UgfHwKLSAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCkt
PnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8Ci0g
ICAgICAgIHJ4QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RI
VFlQRV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgIHJ5QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0g
U1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQorICAgIGlmICh4KCktPnVuaXRU
eXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8CisgICAgICAg
IHkoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0Ug
fHwKKyAgICAgICAgd2lkdGgoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhU
WVBFX1BFUkNFTlRBR0UgfHwKKyAgICAgICAgaGVpZ2h0KCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVu
Z3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8CisgICAgICAgIHJ4KCktPnVuaXRUeXBl
KCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8CisgICAgICAgIHJ5
KCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IGtzdmcyL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDQsMTAgKzEwNCwxMCBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNl
dENvbnRlbnRTdHlsZVR5cGUoCiAKIEZsb2F0UmVjdCBTVkdTVkdFbGVtZW50Ojp2aWV3cG9ydCgp
IGNvbnN0CiB7Ci0gICAgZG91YmxlIF94ID0geEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAgIGRv
dWJsZSBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKLSAgICBkb3VibGUgdyA9IHdpZHRoQmFz
ZVZhbHVlKCktPnZhbHVlKCk7Ci0gICAgZG91YmxlIGggPSBoZWlnaHRCYXNlVmFsdWUoKS0+dmFs
dWUoKTsKKyAgICBkb3VibGUgX3ggPSB4KCktPnZhbHVlKCk7CisgICAgZG91YmxlIF95ID0geSgp
LT52YWx1ZSgpOworICAgIGRvdWJsZSB3ID0gd2lkdGgoKS0+dmFsdWUoKTsKKyAgICBkb3VibGUg
aCA9IGhlaWdodCgpLT52YWx1ZSgpOwogICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2
aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHcsIGgpOwogICAgIHZpZXdCb3gtPm1hdHJpeCgpLm1hcChf
eCwgX3ksICZfeCwgJl95KTsKICAgICB2aWV3Qm94LT5tYXRyaXgoKS5tYXAodywgaCwgJncsICZo
KTsKQEAgLTIzMCwxMCArMjMwLDggQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKSB7Ci0gICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihyZW5kZXJlcigpKS0+c2V0Vmlld0JveChG
bG9hdFJlY3Qodmlld0JveEJhc2VWYWx1ZSgpLT54KCksIHZpZXdCb3hCYXNlVmFsdWUoKS0+eSgp
LCB2aWV3Qm94QmFzZVZhbHVlKCktPndpZHRoKCksIHZpZXdCb3hCYXNlVmFsdWUoKS0+aGVpZ2h0
KCkpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSAmJiByZW5kZXJlcigpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
UmVuZGVyU1ZHQ29udGFpbmVyKj4ocmVuZGVyZXIoKSktPnNldFZpZXdCb3goRmxvYXRSZWN0KHZp
ZXdCb3goKS0+eCgpLCB2aWV3Qm94KCktPnkoKSwgdmlld0JveCgpLT53aWR0aCgpLCB2aWV3Qm94
KCktPmhlaWdodCgpKSk7CiAgICAgICAgIGlmIChTVkdab29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKIApAQCAtMzQyLDExICszNDAsMTEg
QEAgU1ZHTWF0cml4ICpTVkdTVkdFbGVtZW50OjpnZXRDVE0oKSBjb25zdAogICAgIFNWR01hdHJp
eCAqbWF0ID0gY3JlYXRlU1ZHTWF0cml4KCk7CiAgICAgaWYobWF0KQogICAgIHsKLSAgICAgICAg
bWF0LT50cmFuc2xhdGUoeEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCB5QmFzZVZhbHVlKCktPnZhbHVl
KCkpOworICAgICAgICBtYXQtPnRyYW5zbGF0ZSh4KCktPnZhbHVlKCksIHkoKS0+dmFsdWUoKSk7
CiAKICAgICAgICAgaWYoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0ZW0oU1ZHTmFtZXM6OnZpZXdC
b3hBdHRyKSkKICAgICAgICAgewotICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gdmlld0Jv
eCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgaGVp
Z2h0QmFzZVZhbHVlKCktPnZhbHVlKCkpOworICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4g
dmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+dmFsdWUoKSwgaGVpZ2h0
KCktPnZhbHVlKCkpOwogICAgICAgICAgICAgbWF0LT5tdWx0aXBseSh2aWV3Qm94LmdldCgpKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTM1OSwxMSArMzU3LDExIEBAIFNWR01hdHJpeCAqU1ZHU1ZH
RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCkKICAgICBTVkdNYXRyaXggKm1hdCA9IFNWR1N0eWxlZExv
Y2F0YWJsZUVsZW1lbnQ6OmdldFNjcmVlbkNUTSgpOwogICAgIGlmKG1hdCkKICAgICB7Ci0gICAg
ICAgIG1hdC0+dHJhbnNsYXRlKHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgeUJhc2VWYWx1ZSgpLT52
YWx1ZSgpKTsKKyAgICAgICAgbWF0LT50cmFuc2xhdGUoeCgpLT52YWx1ZSgpLCB5KCktPnZhbHVl
KCkpOwogCiAgICAgICAgIGlmKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJdGVtKFNWR05hbWVzOjp2
aWV3Qm94QXR0cikpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZp
ZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCks
IGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTVkdNYXRy
aXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCktPnZhbHVlKCksIGhl
aWdodCgpLT52YWx1ZSgpKTsKICAgICAgICAgICAgIG1hdC0+bXVsdGlwbHkodmlld0JveC5nZXQo
KSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNzYsMTUgKzM3NCwxNSBAQCBSZW5kZXJPYmplY3Qq
IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVJlbmRlCiAgICAgUmVuZGVyU1ZHQ29udGFpbmVyICpyb290
Q29udGFpbmVyID0gbmV3IChhcmVuYSkgUmVuZGVyU1ZHQ29udGFpbmVyKHRoaXMpOwogCiAgICAg
Ly8gRklYTUU6IGFsbCB0aGlzIHNldHVwIHNob3VsZCBiZSBkb25lIGFmdGVyIGF0dHJpYnV0ZXND
aGFuZ2VkLCBub3QgaGVyZS4KLSAgICBmbG9hdCBfeCA9IHhCYXNlVmFsdWUoKS0+dmFsdWUoKTsK
LSAgICBmbG9hdCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfd2lkdGgg
PSB3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF9oZWlnaHQgPSBoZWlnaHRC
YXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeCA9IHgoKS0+dmFsdWUoKTsKKyAgICBm
bG9hdCBfeSA9IHkoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfd2lkdGggPSB3aWR0aCgpLT52YWx1
ZSgpOworICAgIGZsb2F0IF9oZWlnaHQgPSBoZWlnaHQoKS0+dmFsdWUoKTsKIAogICAgIHJvb3RD
b250YWluZXItPnNldFZpZXdwb3J0KEZsb2F0UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkp
OwotICAgIHJvb3RDb250YWluZXItPnNldFZpZXdCb3goRmxvYXRSZWN0KHZpZXdCb3hCYXNlVmFs
dWUoKS0+eCgpLCB2aWV3Qm94QmFzZVZhbHVlKCktPnkoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT53
aWR0aCgpLCB2aWV3Qm94QmFzZVZhbHVlKCktPmhlaWdodCgpKSk7Ci0gICAgcm9vdENvbnRhaW5l
ci0+c2V0QWxpZ24oS0NBbGlnbihwcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPmFsaWdu
KCkgLSAxKSk7Ci0gICAgcm9vdENvbnRhaW5lci0+c2V0U2xpY2UocHJlc2VydmVBc3BlY3RSYXRp
b0Jhc2VWYWx1ZSgpLT5tZWV0T3JTbGljZSgpID09IFNWR19NRUVUT1JTTElDRV9TTElDRSk7Cisg
ICAgcm9vdENvbnRhaW5lci0+c2V0Vmlld0JveChGbG9hdFJlY3Qodmlld0JveCgpLT54KCksIHZp
ZXdCb3goKS0+eSgpLCB2aWV3Qm94KCktPndpZHRoKCksIHZpZXdCb3goKS0+aGVpZ2h0KCkpKTsK
KyAgICByb290Q29udGFpbmVyLT5zZXRBbGlnbihLQ0FsaWduKHByZXNlcnZlQXNwZWN0UmF0aW8o
KS0+YWxpZ24oKSAtIDEpKTsKKyAgICByb290Q29udGFpbmVyLT5zZXRTbGljZShwcmVzZXJ2ZUFz
cGVjdFJhdGlvKCktPm1lZXRPclNsaWNlKCkgPT0gU1ZHX01FRVRPUlNMSUNFX1NMSUNFKTsKICAg
ICAKICAgICByZXR1cm4gcm9vdENvbnRhaW5lcjsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdUUmVm
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAko
cmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIFNWR1RSZWZFbGVtZW50Ojp+U1ZHVFJlZkVsZW1lbnQo
KQogCiB2b2lkIFNWR1RSZWZFbGVtZW50Ojp1cGRhdGVSZWZlcmVuY2VkVGV4dCgpCiB7Ci0gICAg
U3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoU3RyaW5nKGhyZWZC
YXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBTdHJpbmcgdGFyZ2V0SWQgPSBT
VkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChocmVmKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAg
ICBFbGVtZW50ICp0YXJnZXRFbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJ
ZCh0YXJnZXRJZC5pbXBsKCkpOwogICAgIFNWR0VsZW1lbnQgKnRhcmdldCA9IHN2Z19keW5hbWlj
X2Nhc3QodGFyZ2V0RWxlbWVudCk7CiAgICAgaWYgKHRhcmdldCkgewpJbmRleDoga3N2ZzIvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50
LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDM1ICs3NiwzNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpo
ZWlnaHRBdHRyKQogICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgewotICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICBpZihTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAg
ICAgICBpZihTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1
cm47CisgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQog
fQogCiB2b2lkIFNWR1VzZUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQogewotICAgIERlcHJlY2F0
ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWZCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygp
OwotICAgIFN0cmluZyB0YXJnZXRJZCA9IFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KHJlZik7
CisgICAgU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoaHJlZigp
LmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgRWxlbWVudCAqdGFyZ2V0RWxlbWVudCA9IG93bmVy
RG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQuaW1wbCgpKTsKICAgICBTVkdFbGVt
ZW50ICp0YXJnZXQgPSBzdmdfZHluYW1pY19jYXN0KHRhcmdldEVsZW1lbnQpOwotICAgIGlmICgh
dGFyZ2V0KQotICAgIHsKKyAgICBpZiAoIXRhcmdldCkgewogICAgICAgICAvL2RvY3VtZW50KCkt
PmFkZEZvcndhcmRSZWZlcmVuY2UodGhpcyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBmbG9hdCBfeCA9IHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3kgPSB5QmFzZVZhbHVlKCktPnZh
bHVlKCk7Ci0gICAgZmxvYXQgX3cgPSB3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfaCA9IGhl
aWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF94ID0geCgpLT52YWx1ZSgpLCBf
eSA9IHkoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfdyA9IHdpZHRoKCktPnZhbHVlKCksIF9oID0g
aGVpZ2h0KCktPnZhbHVlKCk7CiAgICAgCiAgICAgU3RyaW5nIHdTdHJpbmcgPSBTdHJpbmc6Om51
bWJlcihfdyk7CiAgICAgU3RyaW5nIGhTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihfaCk7CiAgICAg
CiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBTdHJpbmcgdHJhbnMgPSBTdHJpbmc6OnNwcmlu
dGYoInRyYW5zbGF0ZSglZiwgJWYpIiwgX3gsIF95KTsKLSAgICBpZih0YXJnZXQtPmhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnN5bWJvbFRhZykpIHsKKyAgICBpZiAodGFyZ2V0LT5oYXNUYWdOYW1lKFNW
R05hbWVzOjpzeW1ib2xUYWcpKSB7CiAgICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiBkdW1teSA9
IG5ldyBTVkdTVkdFbGVtZW50KFNWR05hbWVzOjpzdmdUYWcsIGRvY3VtZW50KCkpOwogICAgICAg
ICBpZiAoX3cgPiAwKQogICAgICAgICAgICAgZHVtbXktPnNldEF0dHJpYnV0ZShTVkdOYW1lczo6
d2lkdGhBdHRyLCB3U3RyaW5nKTsKQEAgLTEyMywxNSArMTI1LDE1IEBAIHZvaWQgU1ZHVXNlRWxl
bWVudDo6Y2xvc2VSZW5kZXJlcigpCiAgICAgICAgIAogICAgICAgICBhcHBlbmRDaGlsZChkdW1t
eTIsIGVjKTsKICAgICAgICAgZHVtbXkyLT5hcHBlbmRDaGlsZChkdW1teSwgZWMpOwotICAgIH0g
ZWxzZSBpZih0YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN2Z1RhZykpIHsKKyAgICB9IGVs
c2UgaWYgKHRhcmdldC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ZnVGFnKSkgewogICAgICAgICBS
ZWZQdHI8U1ZHRHVtbXlFbGVtZW50PiBkdW1teSA9IG5ldyBTVkdEdW1teUVsZW1lbnQoU1ZHTmFt
ZXM6OmdUYWcsIGRvY3VtZW50KCkpOwogICAgICAgICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05h
bWVzOjp0cmFuc2Zvcm1BdHRyLCB0cmFucyk7CiAgICAgICAgIAogICAgICAgICBSZWZQdHI8U1ZH
RWxlbWVudD4gcm9vdCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0LT5j
bG9uZU5vZGUodHJ1ZSkpOwotICAgICAgICBpZihoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRo
QXR0cikpCisgICAgICAgIGlmIChoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpCiAg
ICAgICAgICAgICByb290LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwgd1N0cmlu
Zyk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYoaGFzQXR0cmlidXRlKFNWR05hbWVzOjpoZWln
aHRBdHRyKSkKKyAgICAgICAgaWYgKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikp
CiAgICAgICAgICAgICByb290LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIsIGhT
dHJpbmcpOwogICAgICAgICAgICAgCiAgICAgICAgIGFwcGVuZENoaWxkKGR1bW15LCBlYyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10453</attachid>
            <date>2006-09-08 02:03:34 -0700</date>
            <delta_ts>2006-09-08 09:44:43 -0700</delta_ts>
            <desc>Include some related cleanup, while we&apos;re at it.</desc>
            <filename>remove-basevalue-calls.patch</filename>
            <type>text/plain</type>
            <size>100464</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjY4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI3IEBACisyMDA2LTA5
LTA4ICBFcmljIFNlaWRlbCAgPGVyaWNAZXNlaWRlbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVwbGFjZSBpbmNvcnJlY3QgZm9vQmFzZVZh
bHVlKCkgY2FsbHMgd2l0aCBmb28oKSBjYWxscyBpbnN0ZWFkLgorICAgICAgICBodHRwOi8vYnVn
emlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTEwNzQ2CisgICAgICAgIAorICAg
ICAgICBXaXRoIHRoZSBwcmV2aW91c2x5IGJyb2tlbiBhbmltYXRpb24gc3lzdGVtLCB3ZSBoYWQg
Ym90aCBiYXNlIGFuZCBhbmltIHZhbHVlcworICAgICAgICBidXQgdGhleSB3ZXJlIG5vdCBhdXRv
bWF0aWNhbGx5IGNvbm5lY3RlZC9kaXNjb25uZWN0ZWQgd2hlbiBhbmltYXRpb24gc3RhcnRlZCBh
bmQgc3RvcHBlZC4KKyAgICAgICAgU28gdGhlIGFuaW1WYWxzIHdlcmUgYmFzaWNhbGx5IG5ldmVy
IHVzZWQgKHNpbmNlIHRoZXkgd2VyZSBhbHdheXMgd3JvbmcpLgorICAgICAgICBOb3csIGFuaW1W
YWwgYW5kIGJhc2VWYWwgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorICAgICAgICAKKyAgICAgICAg
VGhlcmUgYXJlIG9ubHkgMyBwbGFjZXMgaW4gdGhlIGNvZGUgd2hlcmUgd2Ugd2lsbCBldmVyIG5l
ZWQgdG8gdXNlIHRoZSBCYXNlVmFsdWUgYWNjZXNzb3IgdmFyaWFudHMuCisgICAgICAgIDEuIFNW
R0FuaW1hdGVkKiBET00gYmluZGluZ3MKKyAgICAgICAgMi4gQW5pbWF0aW9uIENvZGUKKyAgICAg
ICAgMy4gcGFyc2VNYXBwZWRBdHRyaWJ1dGUgaW1wbGVtZW50YXRpb25zCisKKyAgICAgICAgKiBr
Y2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Rm9yZWlnbk9iamVjdDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBrY2Fu
dmFzL1JlbmRlclNWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdl
OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cmVsYXRpdmVCQm94
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpnZXRBYnNvbHV0ZVJlcGFpbnRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdGlvbkZvckF0
dHJpYnV0ZXMpOgorICAgICAgICAqIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMpOgorICAg
ICAgICAqIGtzdmcyL21pc2MvU1ZHSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoK
KyAgICAgICAgKFNWR0NpcmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAoU1ZHQ2lyY2xlRWxl
bWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQpOgorICAgICAgICAoU1ZHQ2lyY2xlRWxlbWVudDo6
aGFzUGVyY2VudGFnZVZhbHVlcyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxl
bWVudC5jcHA6CisgICAgICAgIChTVkdDbGlwUGF0aEVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnRyYW5z
ZmVyRnVuY3Rpb24pOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcDoK
KyAgICAgICAgKFNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRWxsaXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0VsbGlwc2VFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdFbGxpcHNlRWxlbWVudDo6aGFzUGVyY2VudGFnZVZhbHVlcyk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFQmxlbmRFbGVtZW50
OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5jcHA6CisgICAgICAgIChTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6ZmlsdGVyRWZmZWN0
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3Bw
OgorICAgICAgICAoU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAg
IChTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdGRURp
c3BsYWNlbWVudE1hcEVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
RkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVGbG9vZEVsZW1lbnQ6OmZpbHRlckVm
ZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6
CisgICAgICAgIChTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFSW1h
Z2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0ZFTWVyZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFTWVyZ2VFbGVtZW50OjpTVkdGRU1l
cmdlRWxlbWVudCk6CisgICAgICAgIChTVkdGRU1lcmdlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFNW
R0ZFT2Zmc2V0RWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
RkVQb2ludExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVBvaW50TGln
aHRFbGVtZW50OjpTVkdGRVBvaW50TGlnaHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdG
RVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcG90TGlnaHRF
bGVtZW50OjpsaWdodFNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1l
bnQuY3BwOgorICAgICAgICAoU1ZHRkVUaWxlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZpbHRlckVsZW1lbnQ6OmNhbnZhc1Jl
c291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHR3Jh
ZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0dyYWRpZW50RWxlbWVudDo6cmVidWlsZFN0
b3BzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0hlbHBlcjo6UGVyY2VudGFnZU9mVmlld3BvcnQpOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdMaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdMaW5lRWxlbWVudDo6dG9QYXRoRGF0
YSk6CisgICAgICAgIChTVkdMaW5lRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQpOgorICAg
ICAgICAoU1ZHTGluZUVsZW1lbnQ6Omhhc1BlcmNlbnRhZ2VWYWx1ZXMpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHTGluZWFy
R3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
TWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50Ojpj
YW52YXNSZXNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVtZW50OjpkcmF3TWFza2VyQ29udGVudCk6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdHRlcm5FbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250
ZW50SW50b1RpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6Om5vdGlm
eUF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6
Z2V0Q1RNKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFk
aWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1JlY3RFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdSZWN0RWxlbWVudDo6aGFzUGVyY2VudGFnZVZhbHVlcyk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6
dmlld3BvcnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Z2V0Q1RNKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmdldFNjcmVlbkNUTSk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1RSZWZFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR1RSZWZFbGVtZW50Ojp1cGRhdGVS
ZWZlcmVuY2VkVGV4dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoU1ZHVXNlRWxlbWVudDo6Y2xvc2VSZW5kZXJlcik6CisKIDIwMDYtMDktMDcgIFNh
bSBXZWluaWcgIDxzYW0ud2VpbmlnQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YXJpbiBhbmQgVGltIEguCkluZGV4OiBrY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDE2
MjYwKQorKysga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsOCArMzgsOCBAQCBSZW5kZXJGb3JlaWduT2JqZWN0OjpSZW5kZXJGb3JlaWduT2JqZWN0
CiAKIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0Ojp0cmFuc2xhdGlvbkZvckF0
dHJpYnV0ZXMoKQogewotICAgIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50ICpmb3JlaWduID0gc3Rh
dGljX2Nhc3Q8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQgKj4oZWxlbWVudCgpKTsKLSAgICByZXR1
cm4gQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKGZvcmVpZ24tPnhCYXNlVmFsdWUoKS0+dmFs
dWUoKSwgZm9yZWlnbi0+eUJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKKyAgICBTVkdGb3JlaWduT2Jq
ZWN0RWxlbWVudCogZm9yZWlnbiA9IHN0YXRpY19jYXN0PFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50
ICo+KGVsZW1lbnQoKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShm
b3JlaWduLT54KCktPnZhbHVlKCksIGZvcmVpZ24tPnkoKS0+dmFsdWUoKSk7CiB9CiAKIHZvaWQg
UmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJl
bnRYLCBpbnQgcGFyZW50WSkKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysr
IGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsMTIgKzE3
MSwxMiBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWludChQYWludEluZm8mIHBhCiAgICAgICAg
IAogICAgIFNWR0ltYWdlRWxlbWVudCAqaW1hZ2VFbHQgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVs
ZW1lbnQgKj4obm9kZSgpKTsKICAgICAgICAgCi0gICAgaWYgKGltYWdlRWx0LT5wcmVzZXJ2ZUFz
cGVjdFJhdGlvQmFzZVZhbHVlKCktPmFsaWduKCkgPT0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9f
Tk9ORSkKKyAgICBpZiAoaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS0+YWxpZ24oKSA9
PSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQogICAgICAgICBSZW5kZXJJbWFnZTo6cGFp
bnQocGksIDAsIDApOwogICAgIGVsc2UgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QobV94
LCBtX3ksIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpOwogICAgICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdCgwLCAwLCBpbWFnZSgpLT53aWR0aCgpLCBpbWFnZSgpLT5oZWlnaHQoKSk7Ci0g
ICAgICAgIGFkanVzdFJlY3RzRm9yQXNwZWN0UmF0aW8oZGVzdFJlY3QsIHNyY1JlY3QsIGltYWdl
RWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCkpOworICAgICAgICBhZGp1c3RSZWN0
c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBpbWFnZUVsdC0+cHJlc2VydmVBc3Bl
Y3RSYXRpbygpKTsKICAgICAgICAgYy0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RSZWN0LCBzcmNS
ZWN0KTsKICAgICB9CiAKQEAgLTI0NCw3ICsyNDQsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjps
YXlvdXQoKQogRmxvYXRSZWN0IFJlbmRlclNWR0ltYWdlOjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNs
dWRlU3Ryb2tlKSBjb25zdAogewogICAgIFNWR0ltYWdlRWxlbWVudCAqaW1hZ2UgPSBzdGF0aWNf
Y2FzdDxTVkdJbWFnZUVsZW1lbnQgKj4obm9kZSgpKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KGlt
YWdlLT54QmFzZVZhbHVlKCktPnZhbHVlKCksIGltYWdlLT55QmFzZVZhbHVlKCktPnZhbHVlKCks
IHdpZHRoKCksIGhlaWdodCgpKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KGltYWdlLT54KCktPnZh
bHVlKCksIGltYWdlLT55KCktPnZhbHVlKCksIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KIAogdm9p
ZCBSZW5kZXJTVkdJbWFnZTo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiBpbWFnZSkKQEAgLTI1
Nyw3ICsyNTcsNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjppbWFnZUNoYW5nZWQoQ2FjaGVkCiBJ
bnRSZWN0IFJlbmRlclNWR0ltYWdlOjpnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KCkKIHsKICAgICBT
VkdJbWFnZUVsZW1lbnQgKmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50ICo+KG5v
ZGUoKSk7Ci0gICAgRmxvYXRSZWN0IHJlcGFpbnRSZWN0ID0gYWJzb2x1dGVUcmFuc2Zvcm0oKS5t
YXBSZWN0KEZsb2F0UmVjdChpbWFnZS0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBpbWFnZS0+eUJh
c2VWYWx1ZSgpLT52YWx1ZSgpLCB3aWR0aCgpLCBoZWlnaHQoKSkpOworICAgIEZsb2F0UmVjdCBy
ZXBhaW50UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChGbG9hdFJlY3QoaW1hZ2Ut
PngoKS0+dmFsdWUoKSwgaW1hZ2UtPnkoKS0+dmFsdWUoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsK
IAogICAgIC8vIEZpbHRlcnMgY2FuIGV4cGFuZCB0aGUgYm91bmRpbmcgYm94CiAgICAgS0NhbnZh
c0ZpbHRlciAqZmlsdGVyID0gZ2V0RmlsdGVyQnlJZChkb2N1bWVudCgpLCBzdHlsZSgpLT5zdmdT
dHlsZSgpLT5maWx0ZXIoKS5taWQoMSkpOwpAQCAtMjc2LDcgKzI3Niw3IEBAIHZvaWQgUmVuZGVy
U1ZHSW1hZ2U6OmFic29sdXRlUmVjdHMoVmVjdG8KIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdJ
bWFnZTo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQg
KmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50ICo+KG5vZGUoKSk7Ci0gICAgcmV0
dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShpbWFnZS0+eEJhc2VWYWx1ZSgpLT52YWx1
ZSgpLCBpbWFnZS0+eUJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gQWZmaW5lVHJh
bnNmb3JtKCkudHJhbnNsYXRlKGltYWdlLT54KCktPnZhbHVlKCksIGltYWdlLT55KCktPnZhbHVl
KCkpOwogfQogCiB2b2lkIFJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdGVGb3JBdHRyaWJ1dGVzKCkK
SW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9S
ZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrY2FudmFzL1JlbmRlclNWR1Rl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIEFmZmluZVRyYW5zZm9ybSBS
ZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGkKIHsKICAgICBTVkdUZXh0RWxlbWVudCAqdGV4dCA9IHN0
YXRpY19jYXN0PFNWR1RleHRFbGVtZW50ICo+KGVsZW1lbnQoKSk7CiAKLSAgICBmbG9hdCB4T2Zm
c2V0ID0gdGV4dC0+eEJhc2VWYWx1ZSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eEJhc2VWYWx1ZSgp
LT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKLSAgICBmbG9hdCB5T2Zmc2V0ID0gdGV4dC0+eUJh
c2VWYWx1ZSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eUJhc2VWYWx1ZSgpLT5nZXRGaXJzdCgpLT52
YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB4T2Zmc2V0ID0gdGV4dC0+eCgpLT5nZXRGaXJzdCgpID8g
dGV4dC0+eCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB5T2Zmc2V0ID0g
dGV4dC0+eSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDog
MDsKIAogICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoeE9mZnNldCwgeU9m
ZnNldCk7CiB9CkluZGV4OiBrc3ZnMi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBr
c3ZnMi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsOCArNTIs
OCBAQCB2b2lkIFNWR0ltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGRvYyA9IGltYWdlRWxlbWVudC0+b3duZXJEb2N1bWVudCgpOwogICAgIAog
ICAgIENhY2hlZEltYWdlICpuZXdJbWFnZSA9IDA7Ci0gICAgaWYgKCFpbWFnZUVsZW1lbnQtPmhy
ZWZCYXNlVmFsdWUoKS5pc0VtcHR5KCkpCi0gICAgICAgIG5ld0ltYWdlID0gZG9jLT5kb2NMb2Fk
ZXIoKS0+cmVxdWVzdEltYWdlKGltYWdlRWxlbWVudC0+aHJlZkJhc2VWYWx1ZSgpKTsKKyAgICBp
ZiAoIWltYWdlRWxlbWVudC0+aHJlZigpLmlzRW1wdHkoKSkKKyAgICAgICAgbmV3SW1hZ2UgPSBk
b2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UoaW1hZ2VFbGVtZW50LT5ocmVmKCkpOwogCiAg
ICAgQ2FjaGVkSW1hZ2UgKm9sZEltYWdlID0gaW1hZ2UoKTsKICAgICBpZiAobmV3SW1hZ2UgIT0g
b2xkSW1hZ2UpIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9z
dmcvU1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCwxMSBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBTVkdBRWxlbWVudDo6U1ZHQUVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVVJJUmVmZXJlbmNlKCksIFNWR1Rlc3RzKCksIFNW
R0xhbmdTcGFjZSgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICA6IFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1VSSVJlZmVy
ZW5jZSgpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCiB7CiB9CiAKQEAgLTU0LDcgKzU4LDcgQEAgdm9p
ZCBTVkdBRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTQogewogICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6dGFyZ2V0QXR0cikgewotICAgICAgICBzZXRUYXJnZXRCYXNlVmFsdWUodmFsdWUu
aW1wbCgpKTsKKyAgICAgICAgc2V0VGFyZ2V0QmFzZVZhbHVlKHZhbHVlKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkgewogICAgICAgICAgICAgbV9pc0xpbmsgPSBhdHRyLT52YWx1ZSgpICE9IDA7CkBAIC03OCwy
NiArODIsMjMgQEAgUmVuZGVyT2JqZWN0KiBTVkdBRWxlbWVudDo6Y3JlYXRlUmVuZGVyZQogdm9p
ZCBTVkdBRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCAqZXZ0KQogewogICAgIC8v
IFRPRE8gOiBzaG91bGQgdXNlIENMSUNLIGluc3RlYWQKLSAgICBpZigoZXZ0LT50eXBlKCkgPT0g
RXZlbnROYW1lczo6bW91c2V1cEV2ZW50ICYmIG1faXNMaW5rKSkKLSAgICB7CisgICAgaWYgKChl
dnQtPnR5cGUoKSA9PSBFdmVudE5hbWVzOjptb3VzZXVwRXZlbnQgJiYgbV9pc0xpbmspKSB7CiAg
ICAgICAgIE1vdXNlRXZlbnQgKmUgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KTsKIAog
ICAgICAgICBEZXByZWNhdGVkU3RyaW5nIHVybDsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZyB1
dGFyZ2V0OwotICAgICAgICBpZihlICYmIGUtPmJ1dHRvbigpID09IDIpCi0gICAgICAgIHsKKyAg
ICAgICAgaWYgKGUgJiYgZS0+YnV0dG9uKCkgPT0gMikgewogICAgICAgICAgICAgU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB1cmwgPSBwYXJzZVVSTChocmVmQmFzZVZh
bHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgdXJsID0gcGFyc2VVUkwoaHJlZigp
KS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgIHV0YXJnZXQgPSBnZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OnRhcmdldEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKIAotICAgICAgICBpZihlICYm
IGUtPmJ1dHRvbigpID09IDEpCisgICAgICAgIGlmIChlICYmIGUtPmJ1dHRvbigpID09IDEpCiAg
ICAgICAgICAgICB1dGFyZ2V0ID0gIl9ibGFuayI7CiAKICAgICAgICAgaWYgKCFldnQtPmRlZmF1
bHRQcmV2ZW50ZWQoKSkgewotICAgICAgICAgICAgaWYob3duZXJEb2N1bWVudCgpICYmIG93bmVy
RG9jdW1lbnQoKS0+dmlldygpICYmIG93bmVyRG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChvd25lckRvY3VtZW50KCkgJiYgb3duZXJEb2N1bWVudCgp
LT52aWV3KCkgJiYgb3duZXJEb2N1bWVudCgpLT5mcmFtZSgpKSB7CiAgICAgICAgICAgICAgICAg
Ly9kb2N1bWVudCgpLT52aWV3KCktPnJlc2V0Q3Vyc29yKCk7CiAgICAgICAgICAgICAgICAgZG9j
dW1lbnQoKS0+ZnJhbWUoKS0+dXJsU2VsZWN0ZWQodXJsLCB1dGFyZ2V0KTsKICAgICAgICAgICAg
IH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysg
a3N2ZzIvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nywx
OSArNzcsMTMgQEAgU1ZHQW5pbWF0aW9uRWxlbWVudDo6flNWR0FuaW1hdGlvbkVsZW1lbgogCiBT
VkdFbGVtZW50ICpTVkdBbmltYXRpb25FbGVtZW50Ojp0YXJnZXRFbGVtZW50KCkgY29uc3QKIHsK
LSAgICBpZiAoIW1fdGFyZ2V0RWxlbWVudCkKLSAgICB7Ci0gICAgICAgIGlmICghbV9ocmVmLmlz
RW1wdHkoKSkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJ
UmVmZXJlbmNlOjpnZXRUYXJnZXQobV9ocmVmKTsKLSAgICAgICAgICAgIEVsZW1lbnQgKmVsZW1l
bnQgPSBvd25lckRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKHRhcmdldElkLmltcGwoKSk7Cisg
ICAgaWYgKCFtX3RhcmdldEVsZW1lbnQpIHsKKyAgICAgICAgaWYgKCFtX2hyZWYuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBFbGVtZW50ICplbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRF
bGVtZW50QnlJZChTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChtX2hyZWYpKTsKICAgICAgICAg
ICAgIG1fdGFyZ2V0RWxlbWVudCA9IHN2Z19keW5hbWljX2Nhc3QoZWxlbWVudCk7Ci0gICAgICAg
IH0KLSAgICAgICAgZWxzZSBpZiAocGFyZW50Tm9kZSgpKQotICAgICAgICB7CisgICAgICAgIH0g
ZWxzZSBpZiAocGFyZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICBOb2RlICp0YXJnZXQgPSBwYXJl
bnROb2RlKCk7Ci0gICAgICAgICAgICB3aGlsZSh0YXJnZXQgIT0gMCkKLSAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIHdoaWxlKHRhcmdldCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKHRh
cmdldC0+bm9kZVR5cGUoKSAhPSBFTEVNRU5UX05PREUpCiAgICAgICAgICAgICAgICAgICAgIHRh
cmdldCA9IHRhcmdldC0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgIGVsc2UKSW5kZXg6
IGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0Np
cmNsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NiwyNCArNTYsMjYgQEAgdm9pZCBT
VkdDaXJjbGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogewogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmN4QXR0cikKLSAgICAgICAgY3hCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICBjeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKLSAg
ICAgICAgY3lCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAg
ICAgICBjeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKQotICAgICAgICByQmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKLSAgICBlbHNlCi0gICAgewotICAgICAg
ICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICAg
ICAgaWYoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwot
ICAgICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkgcmV0dXJuOworICAgICAgICByQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUpOworICAgIGVsc2UgeworICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoU1ZHTGFu
Z1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQog
CiBQYXRoIFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogewotICAgIGZsb2F0
IF9jeCA9IGN4QmFzZVZhbHVlKCktPnZhbHVlKCksIF9jeSA9IGN5QmFzZVZhbHVlKCktPnZhbHVl
KCk7Ci0gICAgZmxvYXQgX3IgPSByQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX2N4
ID0gY3goKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfciA9IHIo
KS0+dmFsdWUoKTsKIAogICAgIHJldHVybiBQYXRoOjpjcmVhdGVDaXJjbGUoRmxvYXRQb2ludChf
Y3gsIF9jeSksIF9yKTsKIH0KQEAgLTgxLDExICs4MywxMSBAQCBQYXRoIFNWR0NpcmNsZUVsZW1l
bnQ6OnRvUGF0aERhdGEoKSBjb25zCiBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdDaXJjbGVF
bGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250
ZXh0KQogewogICAgIC8vIEFsbCBhdHRyaWJ1dGUncyBjb250ZXh0cyBhcmUgZXF1YWwgKHNvIGp1
c3QgdGFrZSB0aGUgb25lIGZyb20gJ2N4JykuCi0gICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAq
cmVzdG9yZSA9IGN4QmFzZVZhbHVlKCktPmNvbnRleHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRF
bGVtZW50ICpyZXN0b3JlID0gY3goKS0+Y29udGV4dCgpOwogCi0gICAgY3hCYXNlVmFsdWUoKS0+
c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBjeUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRl
eHQpOwotICAgIHJCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBjeCgpLT5z
ZXRDb250ZXh0KGNvbnRleHQpOworICAgIGN5KCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAg
cigpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIAogICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnB1
c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnRleHQpOwogICAgIHJldHVybiByZXN0b3JlOwpAQCAtOTMs
OSArOTUsOSBAQCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdDaXJjbGVFbGVtZW50CiAKIGJv
b2wgU1ZHQ2lyY2xlRWxlbWVudDo6aGFzUGVyY2VudGFnZVZhbHVlcygpIGNvbnN0CiB7Ci0gICAg
aWYgKGN4QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQ
RV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgIGN5QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZH
TGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgIHJCYXNlVmFsdWUo
KS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpCisg
ICAgaWYgKGN4KCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJD
RU5UQUdFIHx8CisgICAgICAgIGN5KCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVO
R1RIVFlQRV9QRVJDRU5UQUdFIHx8CisgICAgICAgIHIoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5n
dGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgcmV0dXJuIGZhbHNlOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDE4ICs1NywxOCBAQCBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdD
bGlwUGF0CiB2b2lkIFNWR0NsaXBQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOwotICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmNsaXBQYXRoVW5pdHNB
dHRyKQotICAgIHsKLSAgICAgICAgaWYodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjbGlwUGF0aFVuaXRzQXR0cikgeworICAgICAg
ICBpZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKICAgICAgICAgICAgIHNldENsaXBQYXRo
VW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7Ci0gICAgICAgIGVs
c2UgaWYodmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKKyAgICAgICAgZWxzZSBpZiAodmFs
dWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKICAgICAgICAgICAgIHNldENsaXBQYXRoVW5pdHNC
YXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7Ci0gICAgfQotICAgZWxz
ZQotICAgIHsKLSAgICAgICAgaWYoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KSByZXR1cm47Ci0gICAgICAgIGlmKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpIHJldHVybjsKLSAgICAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAg
ICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQpAQCAtODIsNyArODIsNyBAQCBLQ2FudmFzQ2xpcHBl
ciAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpjYW52CiAgICAgZWxzZQogICAgICAgICBtX2NsaXBwZXIt
PnJlc2V0Q2xpcERhdGEoKTsKIAotICAgIGJvb2wgYmJveCA9IGNsaXBQYXRoVW5pdHNCYXNlVmFs
dWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworICAgIGJvb2wgYmJveCA9
IGNsaXBQYXRoVW5pdHMoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCiAg
ICAgUmVuZGVyU3R5bGUgKmNsaXBQYXRoU3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudCgp
LT5yZW5kZXJlcigpKTsgLy8gRklYTUU6IE1hbnVhbCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFj
awogICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNp
YmxpbmcoKSkgewpJbmRleDoga3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDEz
ICs5NCwxMyBAQCB2b2lkIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50CiBLQ0Nv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1l
bnQ6OnRyYW5zZmVyRnVuY3Rpb24oKSBjb25zdAogewogICAgIEtDQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiBmdW5jOwotICAgIGZ1bmMudHlwZSA9IChLQ0NvbXBvbmVudFRyYW5zZmVyVHlwZSko
dHlwZUJhc2VWYWx1ZSgpIC0gMSk7Ci0gICAgZnVuYy5zbG9wZSA9IHNsb3BlQmFzZVZhbHVlKCk7
Ci0gICAgZnVuYy5pbnRlcmNlcHQgPSBpbnRlcmNlcHRCYXNlVmFsdWUoKTsKLSAgICBmdW5jLmFt
cGxpdHVkZSA9IGFtcGxpdHVkZUJhc2VWYWx1ZSgpOwotICAgIGZ1bmMuZXhwb25lbnQgPSBleHBv
bmVudEJhc2VWYWx1ZSgpOwotICAgIGZ1bmMub2Zmc2V0ID0gb2Zmc2V0QmFzZVZhbHVlKCk7Ci0g
ICAgU1ZHTnVtYmVyTGlzdCAqbnVtYmVycyA9IHRhYmxlVmFsdWVzQmFzZVZhbHVlKCk7CisgICAg
ZnVuYy50eXBlID0gKEtDQ29tcG9uZW50VHJhbnNmZXJUeXBlKSh0eXBlKCkgLSAxKTsKKyAgICBm
dW5jLnNsb3BlID0gc2xvcGUoKTsKKyAgICBmdW5jLmludGVyY2VwdCA9IGludGVyY2VwdCgpOwor
ICAgIGZ1bmMuYW1wbGl0dWRlID0gYW1wbGl0dWRlKCk7CisgICAgZnVuYy5leHBvbmVudCA9IGV4
cG9uZW50KCk7CisgICAgZnVuYy5vZmZzZXQgPSBvZmZzZXQoKTsKKyAgICBTVkdOdW1iZXJMaXN0
ICpudW1iZXJzID0gdGFibGVWYWx1ZXMoKTsKICAgICB1bnNpZ25lZCBpbnQgbnIgPSBudW1iZXJz
LT5udW1iZXJPZkl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBucjsg
aSsrKQogICAgICAgICBmdW5jLnRhYmxlVmFsdWVzLmFwcGVuZChudW1iZXJzLT5nZXRJdGVtKGkp
LT52YWx1ZSgpKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQor
Kysga3N2ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwx
NyArNTksMTggQEAgdm9pZCBTVkdDdXJzb3JFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogewog
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgeEJhc2VWYWx1ZSgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp5QXR0cikKLSAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYoU1ZHVGVzdHM6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0gICAgICAgIGlmKFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CisgICAgICAg
IHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CisgICAgZWxzZSB7CisgICAg
ICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYg
KFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAg
ICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRl
cmVmKHRoaXMpOwotICAgICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+
ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShocmVmQmFzZVZhbHVlKCkpOworICAgICAgICAgICAg
bV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFn
ZShocmVmKCkpOwogICAgICAgICAgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCiAgICAgICAgICAgICAg
ICAgbV9jYWNoZWRJbWFnZS0+cmVmKHRoaXMpOwogICAgICAgICAgICAgcmV0dXJuOwpJbmRleDog
a3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdF
bGxpcHNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDI2ICs1OCwyOCBAQCB2b2lk
IFNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiB7CiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6Y3hBdHRyKQotICAgICAgICBjeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIGN4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKLSAgICAg
ICAgY3lCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICBjeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpCi0gICAgICAgIHJ4QmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnhCYXNlVmFsdWUoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlB
dHRyKQotICAgICAgICByeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgaWYoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKSByZXR1cm47Ci0gICAgICAgIGlmKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKKyAgICAgICAg
cnlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CisgICAgZWxzZSB7CisgICAg
ICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKICAgICB9CiB9CiAKIFBhdGggU1ZHRWxsaXBzZUVsZW1lbnQ6OnRv
UGF0aERhdGEoKSBjb25zdAogewotICAgIGZsb2F0IF9jeCA9IGN4QmFzZVZhbHVlKCktPnZhbHVl
KCksIF9jeSA9IGN5QmFzZVZhbHVlKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3J4ID0gcnhCYXNl
VmFsdWUoKS0+dmFsdWUoKSwgX3J5ID0gcnlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9h
dCBfY3ggPSBjeCgpLT52YWx1ZSgpLCBfY3kgPSBjeSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9y
eCA9IHJ4KCktPnZhbHVlKCksIF9yeSA9IHJ5KCktPnZhbHVlKCk7CiAKICAgICByZXR1cm4gUGF0
aDo6Y3JlYXRlRWxsaXBzZShGbG9hdFBvaW50KF9jeCwgX2N5KSwgX3J4LCBfcnkpOwogfQpAQCAt
ODUsMTIgKzg3LDEyIEBAIFBhdGggU1ZHRWxsaXBzZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb24K
IGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0VsbGlwc2VFbGVtZW50OjpwdXNoQXR0cmlidXRl
Q29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQogewogICAgIC8vIEFsbCBh
dHRyaWJ1dGUncyBjb250ZXh0cyBhcmUgZXF1YWwgKHNvIGp1c3QgdGFrZSB0aGUgb25lIGZyb20g
J2N4JykuCi0gICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9yZSA9IGN4QmFzZVZhbHVl
KCktPmNvbnRleHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0gY3go
KS0+Y29udGV4dCgpOwogCi0gICAgY3hCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsK
LSAgICBjeUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHJ4QmFzZVZhbHVl
KCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgcnlCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChj
b250ZXh0KTsKKyAgICBjeCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGN5KCktPnNldENv
bnRleHQoY29udGV4dCk7CisgICAgcngoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICByeSgp
LT5zZXRDb250ZXh0KGNvbnRleHQpOwogCiAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cHVzaEF0dHJp
YnV0ZUNvbnRleHQoY29udGV4dCk7CiAgICAgcmV0dXJuIHJlc3RvcmU7CkBAIC05OCwxMCArMTAw
LDEwIEBAIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0VsbGlwc2VFbGVtZW4KIAogYm9vbCBT
VkdFbGxpcHNlRWxlbWVudDo6aGFzUGVyY2VudGFnZVZhbHVlcygpIGNvbnN0CiB7Ci0gICAgaWYg
KGN4QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9Q
RVJDRU5UQUdFIHx8Ci0gICAgICAgIGN5QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVu
Z3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgIHJ4QmFzZVZhbHVlKCkt
PnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8Ci0g
ICAgICAgIHJ5QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RI
VFlQRV9QRVJDRU5UQUdFKQorICAgIGlmIChjeCgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6
U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAorICAgICAgICBjeSgpLT51bml0VHlwZSgpID09
IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAorICAgICAgICByeCgpLT51
bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAorICAg
ICAgICByeSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VO
VEFHRSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBr
c3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdGRUJsZW5kRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0ZF
QmxlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksOSArNjksOSBAQCB2b2lkIFNW
R0ZFQmxlbmRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAgICAgICAgICAgICBzZXRNb2RlQmFz
ZVZhbHVlKFNWR19GRUJMRU5EX01PREVfTElHSFRFTik7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2
YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQotICAgICAgICBzZXRJbjJCYXNl
VmFsdWUodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlKTsKICAg
ICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC04Miw5ICs4Miw5IEBAIEtDYW52YXNGRUJs
ZW5kICpTVkdGRUJsZW5kRWxlbWVudDo6ZmlsdGUKICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzRkVCbGVuZCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmls
dGVyRWZmZWN0KEZFX0JMRU5EKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEJsZW5kTW9kZSgoS0NCbGVuZE1vZGVU
eXBlKShtb2RlQmFzZVZhbHVlKCktMSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJp
bmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0SW4yKFN0cmluZyhpbjJCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAg
ICBtX2ZpbHRlckVmZmVjdC0+c2V0QmxlbmRNb2RlKChLQ0JsZW5kTW9kZVR5cGUpKG1vZGUoKS0x
KSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGluKCkuZGVwcmVjYXRlZFN0cmluZygpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4yKFN0cmluZyhpbjIoKSkuZGVwcmVjYXRlZFN0cmlu
ZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIHJl
dHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIHZvaWQgU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OnBhcnNlTWFwcGUKICAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUo
U1ZHX0ZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBKTsKICAgICB9CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIHNldEluQmFz
ZVZhbHVlKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpCiAgICAgICAg
IHZhbHVlc0Jhc2VWYWx1ZSgpLT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRoaXMp
OwogICAgIGVsc2UKQEAgLTg2LDE1ICs4NiwxNSBAQCBLQ2FudmFzRkVDb2xvck1hdHJpeCAqU1ZH
RkVDb2xvck1hdHJpeEVsCiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIAotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFs
dWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4o
KS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRl
ckVmZmVjdCk7CiAgICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxmbG9hdD4gX3ZhbHVlczsKLSAgICBT
VkdOdW1iZXJMaXN0ICpudW1iZXJzID0gdmFsdWVzQmFzZVZhbHVlKCk7CisgICAgU1ZHTnVtYmVy
TGlzdCAqbnVtYmVycyA9IHZhbHVlcygpOwogICAgIHVuc2lnbmVkIGludCBuciA9IG51bWJlcnMt
Pm51bWJlck9mSXRlbXMoKTsKICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwO2kgPCBucjtpKysp
CiAgICAgICAgIF92YWx1ZXMuYXBwZW5kKG51bWJlcnMtPmdldEl0ZW0oaSktPnZhbHVlKCkpOwog
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRWYWx1ZXMoX3ZhbHVlcyk7Ci0gICAgbV9maWx0ZXJFZmZl
Y3QtPnNldFR5cGUoKEtDQ29sb3JNYXRyaXhUeXBlKSh0eXBlQmFzZVZhbHVlKCkgLSAxKSk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDQ29sb3JNYXRyaXhUeXBlKSh0eXBlKCkgLSAx
KSk7CiAgICAgCiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQpJbmRleDoga3N2ZzIvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysr
IGtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDcgQEAgdm9pZCBTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
cGFycwogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAgc2V0SW5CYXNlVmFs
dWUodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFsdWUpOwogICAgIGVs
c2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTcwLDcgKzcwLDcgQEAgS0NhbnZhc0ZFQ29tcG9u
ZW50VHJhbnNmZXIgKlNWR0ZFQ29tcG9uZQogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAg
ICAgIHJldHVybiAwOwogICAgIAotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5C
YXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
SW4oaW4oKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyht
X2ZpbHRlckVmZmVjdCk7CiAgICAgCiAgICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBu
ICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVDb21w
b3NpdGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsOSArODIsOSBAQCB2b2lkIFNWR0ZFQ29t
cG9zaXRlRWxlbWVudDo6cGFyc2VNYXBwZWRBCiAgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNl
VmFsdWUoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpOwogICAgIH0KICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAgc2V0SW5C
YXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFsdWUpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikKLSAgICAgICAg
c2V0SW4yQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluMkJhc2VWYWx1ZSh2
YWx1ZSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprMUF0dHIpCiAg
ICAgICAgIHNldEsxQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgp
KTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmsyQXR0cikKQEAgLTEw
MywxNCArMTAzLDE0IEBAIEtDYW52YXNGRUNvbXBvc2l0ZSAqU1ZHRkVDb21wb3NpdGVFbGVtZW4K
ICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVDb21wb3NpdGUg
Kj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT01QT1NJVEUpKTsK
ICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0T3BlcmF0aW9uKChLQ0NvbXBvc2l0ZU9wZXJhdGlvblR5cGUpKF9vcGVyYXRv
ckJhc2VWYWx1ZSgpIC0gMSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5C
YXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
SW4yKFN0cmluZyhpbjJCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0T3BlcmF0aW9uKChLQ0NvbXBvc2l0ZU9wZXJhdGlvblR5cGUpKF9vcGVy
YXRvcigpIC0gMSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihpbigpLmRlcHJlY2F0ZWRT
dHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yKCkpLmRlcHJl
Y2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0
KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzEoazFCYXNlVmFsdWUoKSk7Ci0gICAgbV9maWx0
ZXJFZmZlY3QtPnNldEsyKGsyQmFzZVZhbHVlKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRL
MyhrM0Jhc2VWYWx1ZSgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzQoazRCYXNlVmFsdWUo
KSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEsxKGsxKCkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRLMihrMigpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzMoazMoKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEs0KGs0KCkpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0K
IApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnBhcnNlTQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAg
c2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFs
dWUpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxl
QXR0cikKICAgICAgICAgc2V0U3VyZmFjZVNjYWxlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZU0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2V0
S2VybmVsVW5pdExlbmd0aFlCYXNlVmFsdWUobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKICAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKQot
ICAgICAgICBzZXRMaWdodGluZ0NvbG9yQmFzZVZhbHVlKG5ldyBTVkdDb2xvcih2YWx1ZS5pbXBs
KCkpKTsKKyAgICAgICAgc2V0TGlnaHRpbmdDb2xvckJhc2VWYWx1ZShuZXcgU1ZHQ29sb3IodmFs
dWUpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC04NSwxMyArODUsMTMgQEAg
S0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nICpTVkdGRURpZmZ1c2VMaQogewogICAgIGlmICghbV9m
aWx0ZXJFZmZlY3QpIAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52
YXNGRURpZmZ1c2VMaWdodGluZyAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZm
ZWN0KEZFX0RJRkZVU0VfTElHSFRJTkcpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3Ry
aW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldEluKGluKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJp
YnV0ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREaWZmdXNlQ29u
c3RhbnQoKGRpZmZ1c2VDb25zdGFudEJhc2VWYWx1ZSgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3Qt
PnNldFN1cmZhY2VTY2FsZSgoc3VyZmFjZVNjYWxlQmFzZVZhbHVlKCkpKTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFgoKGtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVl
KCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVu
aXRMZW5ndGhZQmFzZVZhbHVlKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdD
b2xvcihsaWdodGluZ0NvbG9yQmFzZVZhbHVlKCktPmNvbG9yKCkpOworICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXREaWZmdXNlQ29uc3RhbnQoKGRpZmZ1c2VDb25zdGFudCgpKSk7CisgICAgbV9maWx0
ZXJFZmZlY3QtPnNldFN1cmZhY2VTY2FsZSgoc3VyZmFjZVNjYWxlKCkpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFgoKGtlcm5lbFVuaXRMZW5ndGhYKCkpKTsKKyAg
ICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5ndGhZ
KCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9y
KCktPmNvbG9yKCkpOwogICAgIHVwZGF0ZUxpZ2h0cygpOwogICAgIHJldHVybiBtX2ZpbHRlckVm
ZmVjdDsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw5ICs3Niw5IEBAIHZvaWQgU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50OjpwYXJzZU0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnlDaGFubmVsU2VsZWN0b3JBdHRyKQogICAgICAgICBzZXRZQ2hhbm5lbFNlbGVjdG9y
QmFzZVZhbHVlKHN0cmluZ1RvQ2hhbm5lbCh2YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5p
bXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZSk7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQotICAgICAgICBzZXRJbjJCYXNlVmFsdWUo
dmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNjYWxlQXR0cikKICAgICAgICAgc2V0U2Nh
bGVCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVs
c2UKQEAgLTkxLDExICs5MSwxMSBAQCBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAqIFNWR0ZFRGlz
cGxhY2VtCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRGlz
cGxhY2VtZW50TWFwICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVf
RElTUExBQ0VNRU5UX01BUCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5u
ZWxTZWxlY3RvclR5cGUpKHhDaGFubmVsU2VsZWN0b3JCYXNlVmFsdWUoKSkpOwotICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRZQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUpKHlD
aGFubmVsU2VsZWN0b3JCYXNlVmFsdWUoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihT
dHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0SW4yKFN0cmluZyhpbjJCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsK
LSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U2NhbGUoc2NhbGVCYXNlVmFsdWUoKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFhDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSko
eENoYW5uZWxTZWxlY3RvcigpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFlDaGFubmVsU2Vs
ZWN0b3IoKEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSkoeUNoYW5uZWxTZWxlY3RvcigpKSk7CisgICAg
bV9maWx0ZXJFZmZlY3QtPnNldEluKGluKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0SW4yKFN0cmluZyhpbjIoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAg
ICBtX2ZpbHRlckVmZmVjdC0+c2V0U2NhbGUoc2NhbGUoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRy
aWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjAp
CisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNyBAQCBTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6On5TVkdGRURpc3Rh
bnRMCiAKIEtDTGlnaHRTb3VyY2UgKlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3Vy
Y2UoKSBjb25zdAogewotICAgIHJldHVybiBuZXcgS0NEaXN0YW50TGlnaHRTb3VyY2UoYXppbXV0
aEJhc2VWYWx1ZSgpLCBlbGV2YXRpb25CYXNlVmFsdWUoKSk7CisgICAgcmV0dXJuIG5ldyBLQ0Rp
c3RhbnRMaWdodFNvdXJjZShhemltdXRoKCksIGVsZXZhdGlvbigpKTsKIH0KIAogfQpJbmRleDog
a3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHRkVGbG9vZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdG
RUZsb29kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBT
VkdGRUZsb29kRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogewogICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikKLSAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKKyAgICAgICAg
c2V0SW5CYXNlVmFsdWUodmFsdWUpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAg
LTYzLDcgKzYzLDcgQEAgS0NhbnZhc0ZFRmxvb2QgKlNWR0ZFRmxvb2RFbGVtZW50OjpmaWx0ZQog
ICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUZsb29kICo+KHJl
bmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRkxPT0QpKTsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEluKGluKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFu
ZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIFJlbmRlclN0eWxlICpmaWx0ZXJT
dHlsZSA9IGNvbnN0X2Nhc3Q8U1ZHRkVGbG9vZEVsZW1lbnQgKj4odGhpcyktPnN0eWxlRm9yUmVu
ZGVyZXIocGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpKTsKICAgICBjb25zdCBTVkdSZW5kZXJTdHls
ZSAqc3ZnU3R5bGUgPSBmaWx0ZXJTdHlsZS0+c3ZnU3R5bGUoKTsKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3
IEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwYXJzZU1hcHAKICAgICAgICAgICAg
IHNldFN0ZERldmlhdGlvbllCYXNlVmFsdWUobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKICAgICB9
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAg
IHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZh
bHVlKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC04MiwxMCArODIsMTAgQEAg
S0NhbnZhc0ZFR2F1c3NpYW5CbHVyICpTVkdGRUdhdXNzaWFuQmx1cgogICAgICAgICBtX2ZpbHRl
ckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUdhdXNzaWFuQmx1ciAqPihyZW5kZXJpbmdE
ZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0dBVVNTSUFOX0JMVVIpKTsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEluKGluKCkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFu
ZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRT
dGREZXZpYXRpb25YKHN0ZERldmlhdGlvblhCYXNlVmFsdWUoKSk7Ci0gICAgbV9maWx0ZXJFZmZl
Y3QtPnNldFN0ZERldmlhdGlvblkoc3RkRGV2aWF0aW9uWUJhc2VWYWx1ZSgpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0U3RkRGV2aWF0aW9uWChzdGREZXZpYXRpb25YKCkpOworICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRTdGREZXZpYXRpb25ZKHN0ZERldmlhdGlvblkoKSk7CiAgICAgcmV0dXJu
IG1fZmlsdGVyRWZmZWN0OwogfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzgsNyArMzgsNyBAQAogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJp
bmdEZXZpY2UuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50
ZXIuaD4KIAotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CituYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFNWR0ZFSW1hZ2VFbGVtZW50OjpTVkdGRUltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQogICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKQEAgLTQ2LDkgKzQ2LDkgQEAgU1ZHRkVJbWFnZUVs
ZW1lbnQ6OlNWR0ZFSW1hZ2VFbGVtZW50KGNvbgogICAgICwgU1ZHTGFuZ1NwYWNlKCkKICAgICAs
IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQogICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJh
dGlvKG5ldyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKHRoaXMpKQorICAgICwgbV9jYWNoZWRJbWFn
ZSgwKQorICAgICwgbV9maWx0ZXJFZmZlY3QoMCkKIHsKLSAgICBtX2ZpbHRlckVmZmVjdCA9IDA7
Ci0gICAgbV9jYWNoZWRJbWFnZSA9IDA7CiB9CiAKIFNWR0ZFSW1hZ2VFbGVtZW50Ojp+U1ZHRkVJ
bWFnZUVsZW1lbnQoKQpAQCAtNjUsMTggKzY1LDE5IEBAIHZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmkKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlv
QXR0cikKICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgpLT5wYXJzZVByZXNl
cnZlQXNwZWN0UmF0aW8odmFsdWUuaW1wbCgpKTsKLSAgICBlbHNlCi0gICAgeworICAgIGVsc2Ug
ewogICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkgewogICAgICAgICAgICAgaWYgKG1fY2FjaGVkSW1hZ2UpCiAgICAgICAgICAgICAgICAgbV9j
YWNoZWRJbWFnZS0+ZGVyZWYodGhpcyk7Ci0gICAgICAgICAgICBtX2NhY2hlZEltYWdlID0gb3du
ZXJEb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKGhyZWZCYXNlVmFsdWUoKSk7
CisgICAgICAgICAgICBtX2NhY2hlZEltYWdlID0gb3duZXJEb2N1bWVudCgpLT5kb2NMb2FkZXIo
KS0+cmVxdWVzdEltYWdlKGhyZWYoKSk7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkK
ICAgICAgICAgICAgICAgICBtX2NhY2hlZEltYWdlLT5yZWYodGhpcyk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwotICAgICAgICBpZihTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOworICAgICAgICBpZiAo
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7CiAgICAgfQpAQCAtOTgsNiArOTksOCBAQCBLQ2FudmFzRkVJbWFnZSAqU1ZHRkVJbWFnZUVs
ZW1lbnQ6OmZpbHRlCiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQogCit9CisKIC8vIHZp
bTp0cz00Om5vZXQKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCkluZGV4OiBrc3ZnMi9zdmcvU1ZH
RkVNZXJnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRU1lcmdlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAogU1ZHRkVNZXJnZUVsZW1lbnQ6OlNWR0ZFTWVyZ2VFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCiAgICAgOiBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorICAgICwgbV9maWx0ZXJFZmZlY3Qo
MCkKIHsKLSAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CiB9CiAKIFNWR0ZFTWVyZ2VFbGVtZW50Ojp+
U1ZHRkVNZXJnZUVsZW1lbnQoKQpAQCAtNTcsMTMgKzU3LDkgQEAgS0NhbnZhc0ZFTWVyZ2UgKlNW
R0ZFTWVyZ2VFbGVtZW50OjpmaWx0ZQogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRl
ckVmZmVjdCk7CiAKICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBtZXJnZUlucHV0czsKLSAgICBm
b3IoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkK
LSAgICB7Ci0gICAgICAgIGlmKG4tPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZlTWVyZ2VOb2RlVGFn
KSkKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIG1lcmdlSW5wdXQgPSBzdGF0aWNfY2Fz
dDxTVkdGRU1lcmdlTm9kZUVsZW1lbnQgKj4obiktPmluQmFzZVZhbHVlKCk7Ci0gICAgICAgICAg
ICBtZXJnZUlucHV0cy5hcHBlbmQobWVyZ2VJbnB1dC5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAg
ICAgICB9CisgICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5u
ZXh0U2libGluZygpKSB7CisgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZU1l
cmdlTm9kZVRhZykpCisgICAgICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQoc3RhdGljX2Nhc3Q8
U1ZHRkVNZXJnZU5vZGVFbGVtZW50ICo+KG4pLT5pbigpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAg
ICAgfQogCiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldE1lcmdlSW5wdXRzKG1lcmdlSW5wdXRzKTsK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysr
IGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw3ICs0Myw3IEBAIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpwYXJzZU1hcHBlZEEKIHsK
ICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlKTsKICAgICBlbHNlCiAgICAg
ICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDoga3N2
ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R0ZFT2Zmc2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0ZF
T2Zmc2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBT
VkdGRU9mZnNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cgogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6ZHlBdHRyKQogICAgICAgICBzZXREeUJhc2VWYWx1ZSh2YWx1ZS5k
ZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlKTsKICAgICBlbHNlCiAgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiB9CkBAIC03MywxMCArNzMsMTAgQEAgS0NhbnZhc0ZFT2Zmc2V0ICpTVkdGRU9mZnNl
dEVsZW1lbnQ6OmZpbAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52
YXNGRU9mZnNldCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX09G
RlNFVCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwotICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0
cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oaW4oKS5kZXByZWNhdGVkU3RyaW5n
KCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldER4KGR4QmFzZVZhbHVlKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXREeShkeUJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RHgoZHgoKSk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldER5KGR5KCkpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVj
dDsKIH0KIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24g
MTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI0LDggKzI0LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdGRVBv
aW50TGlnaHRFbGVtZW50OjpTVkdGRVBvaW50TGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1TVkdGRUxpZ2h0RWxlbWVudCh0YWdOYW1l
LCBkb2MpCitTVkdGRVBvaW50TGlnaHRFbGVtZW50OjpTVkdGRVBvaW50TGlnaHRFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBTVkdGRUxp
Z2h0RWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7CiB9CiAKQEAgLTM1LDcgKzM1LDcgQEAgU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudDo6flNWR0ZFUG9pbnRMaWdodAogCiBLQ0xpZ2h0U291cmNlICpTVkdG
RVBvaW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7Ci0gICAgS0NhbnZhc1Bv
aW50M0YgcG9zKHhCYXNlVmFsdWUoKSwgeUJhc2VWYWx1ZSgpLCB6QmFzZVZhbHVlKCkpOworICAg
IEtDYW52YXNQb2ludDNGIHBvcyh4KCksIHkoKSwgeigpKTsKICAgICByZXR1cm4gbmV3IEtDUG9p
bnRMaWdodFNvdXJjZShwb3MpOwogfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBA
QCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNlCiB7ICAgIAogICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFsdWUpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikKICAgICAgICAgc2V0U3VyZmFjZVNj
YWxlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyKQpA
QCAtODIsNyArODIsNyBAQCB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNl
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNldEtlcm5lbFVuaXRMZW5ndGhZQmFzZVZhbHVl
KG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikKLSAgICAgICAgc2V0TGlnaHRpbmdDb2xvckJh
c2VWYWx1ZShuZXcgU1ZHQ29sb3IodmFsdWUuaW1wbCgpKSk7CisgICAgICAgIHNldExpZ2h0aW5n
Q29sb3JCYXNlVmFsdWUobmV3IFNWR0NvbG9yKHZhbHVlKSk7CiAgICAgZWxzZQogICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogfQpAQCAtOTEsMTQgKzkxLDE0IEBAIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcg
KlNWR0ZFU3BlY3VsYXIKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KSAKICAgICAgICAgbV9m
aWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nICo+KHJl
bmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfU1BFQ1VMQVJfTElHSFRJTkcp
KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJl
Y2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGluKCkuZGVwcmVjYXRl
ZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwot
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTcGVjdWxhckNvbnN0YW50KChzcGVjdWxhckNvbnN0YW50
QmFzZVZhbHVlKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJFeHBvbmVudCgo
c3BlY3VsYXJFeHBvbmVudEJhc2VWYWx1ZSgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFN1
cmZhY2VTY2FsZSgoc3VyZmFjZVNjYWxlQmFzZVZhbHVlKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0S2VybmVsVW5pdExlbmd0aFgoKGtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKCkpKTsK
LSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5n
dGhZQmFzZVZhbHVlKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihs
aWdodGluZ0NvbG9yQmFzZVZhbHVlKCktPmNvbG9yKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRTcGVjdWxhckNvbnN0YW50KChzcGVjdWxhckNvbnN0YW50KCkpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0U3BlY3VsYXJFeHBvbmVudCgoc3BlY3VsYXJFeHBvbmVudCgpKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFN1cmZhY2VTY2FsZSgoc3VyZmFjZVNjYWxlKCkpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFgoKGtlcm5lbFVuaXRMZW5ndGhYKCkpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5n
dGhZKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihsaWdodGluZ0Nv
bG9yKCktPmNvbG9yKCkpOwogICAgIHVwZGF0ZUxpZ2h0cygpOwogICAgIHJldHVybiBtX2ZpbHRl
ckVmZmVjdDsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxMyArMzUsMTMgQEAgU1ZHRkVTcG90TGlnaHRFbGVtZW50Ojp+U1ZHRkVT
cG90TGlnaHRFbAogCiBLQ0xpZ2h0U291cmNlICpTVkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0
U291cmNlKCkgY29uc3QKIHsKLSAgICBLQ2FudmFzUG9pbnQzRiBwb3MoeEJhc2VWYWx1ZSgpLCB5
QmFzZVZhbHVlKCksIHpCYXNlVmFsdWUoKSk7CisgICAgS0NhbnZhc1BvaW50M0YgcG9zKHgoKSwg
eSgpLCB6KCkpOwogICAgIC8vY29udmVydCBsb29rQXQgdG8gYSBkaXJlY3Rpb24KLSAgICBLQ2Fu
dmFzUG9pbnQzRiBkaXJlY3Rpb24ocG9pbnRzQXRYQmFzZVZhbHVlKCkgLSBwb3MueCgpLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzQXRZQmFzZVZhbHVlKCkgLSBwb3MueSgp
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzQXRaQmFzZVZhbHVlKCkgLSBw
b3MueigpKTsKKyAgICBLQ2FudmFzUG9pbnQzRiBkaXJlY3Rpb24ocG9pbnRzQXRYKCkgLSBwb3Mu
eCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzQXRZKCkgLSBwb3MueSgp
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzQXRaKCkgLSBwb3MueigpKTsK
ICAgICBkaXJlY3Rpb24ubm9ybWFsaXplKCk7Ci0gICAgcmV0dXJuIG5ldyBLQ1Nwb3RMaWdodFNv
dXJjZShwb3MsIGRpcmVjdGlvbiwgc3BlY3VsYXJFeHBvbmVudEJhc2VWYWx1ZSgpLCBsaW1pdGlu
Z0NvbmVBbmdsZUJhc2VWYWx1ZSgpKTsKKyAgICByZXR1cm4gbmV3IEtDU3BvdExpZ2h0U291cmNl
KHBvcywgZGlyZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50KCksIGxpbWl0aW5nQ29uZUFuZ2xlKCkp
OwogfQogCiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysr
IGtzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyAr
NTIsNyBAQCB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiB7CiAgICAg
Y29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBs
KCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZSk7CiAgICAgZWxzZQogICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogfQpAQCAtNjMsNyArNjMsNyBAQCBLQ2FudmFzRkVUaWxlICpTVkdGRVRpbGVFbGVt
ZW50OjpmaWx0ZXJFCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZh
c0ZFVGlsZSAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX1RJTEUp
KTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmco
KSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKGluKCkuZGVwcmVjYXRlZFN0cmluZygpKTsK
ICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIHJldHVybiBt
X2ZpbHRlckVmZmVjdDsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsMTMgKzEwMywxMyBAQCBLQ2FudmFzRkVUdXJidWxlbmNl
ICpTVkdGRVR1cmJ1bGVuY2VFbGVtCiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCi0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDVHVyYnVsYW5j
ZVR5cGUpKHR5cGVCYXNlVmFsdWUoKSAtIDEpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0VHlw
ZSgoS0NUdXJidWxhbmNlVHlwZSkodHlwZSgpIC0gMSkpOwogICAgIHNldFN0YW5kYXJkQXR0cmli
dXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEJhc2VGcmVxdWVu
Y3lYKGJhc2VGcmVxdWVuY3lYQmFzZVZhbHVlKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRC
YXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WUJhc2VWYWx1ZSgpKTsKLSAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0TnVtT2N0YXZlcyhudW1PY3RhdmVzQmFzZVZhbHVlKCkpOwotICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRTZWVkKHNlZWRCYXNlVmFsdWUoKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzQmFzZVZhbHVlKCkgPT0gU1ZHX1NUSVRDSFRZUEVfU1RJ
VENIKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmFzZUZyZXF1ZW5jeVgoYmFzZUZyZXF1ZW5j
eVgoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEJhc2VGcmVxdWVuY3lZKGJhc2VGcmVxdWVu
Y3lZKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXROdW1PY3RhdmVzKG51bU9jdGF2ZXMoKSk7
CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFNlZWQoc2VlZCgpKTsKKyAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0U3RpdGNoVGlsZXMoc3RpdGNoVGlsZXMoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gp
OwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KIApJbmRleDoga3N2ZzIvc3ZnL1NWR0Zp
bHRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50
LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk5LDEzICs5OSwxMyBAQCB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICBzZXRQcmltaXRpdmVVbml0c0Jhc2VWYWx1
ZShTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICB9CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgeEJhc2VWYWx1ZSgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp5QXR0cikKLSAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCi0gICAg
ICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAg
ICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQotICAgICAgICBoZWln
aHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBo
ZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZQogICAg
IHsKICAgICAgICAgaWYoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkgcmV0dXJuOwpAQCAtMTI0LDE4ICsxMjQsMTYgQEAgS0NhbnZhc0ZpbHRlciAqU1ZHRmlsdGVy
RWxlbWVudDo6Y2FudmFzUgogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAgIG1fZmlsdGVyID0g
c3RhdGljX2Nhc3Q8S0NhbnZhc0ZpbHRlciAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUmVz
b3VyY2UoUlNfRklMVEVSKSk7CiAKLSAgICBib29sIGZpbHRlckJCb3hNb2RlID0gZmlsdGVyVW5p
dHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworICAgIGJv
b2wgZmlsdGVyQkJveE1vZGUgPSBmaWx0ZXJVbml0cygpID09IFNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1g7CiAgICAgbV9maWx0ZXItPnNldEZpbHRlckJvdW5kaW5nQm94TW9kZShmaWx0
ZXJCQm94TW9kZSk7CiAgICAgCi0gICAgeEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoZmls
dGVyQkJveE1vZGUpOwotICAgIHlCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJC
b3hNb2RlKTsKLSAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoZmlsdGVyQkJv
eE1vZGUpOwotICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoZmlsdGVyQkJv
eE1vZGUpOwotICAgIGZsb2F0IF94ID0geEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfeSA9IHlCYXNl
VmFsdWUoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfd2lkdGggPSB3aWR0aEJhc2VWYWx1ZSgpLT52
YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCk7Ci0gICAgbV9maWx0
ZXItPnNldEZpbHRlclJlY3QoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSk7Cisg
ICAgeCgpLT5zZXRCYm94UmVsYXRpdmUoZmlsdGVyQkJveE1vZGUpOworICAgIHkoKS0+c2V0QmJv
eFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKKyAgICB3aWR0aCgpLT5zZXRCYm94UmVsYXRpdmUo
ZmlsdGVyQkJveE1vZGUpOworICAgIGhlaWdodCgpLT5zZXRCYm94UmVsYXRpdmUoZmlsdGVyQkJv
eE1vZGUpOworICAgIG1fZmlsdGVyLT5zZXRGaWx0ZXJSZWN0KEZsb2F0UmVjdCh4KCktPnZhbHVl
KCksIHkoKS0+dmFsdWUoKSwgd2lkdGgoKS0+dmFsdWUoKSwgaGVpZ2h0KCktPnZhbHVlKCkpKTsK
ICAgICAKLSAgICBib29sIHByaW1pdGl2ZUJCb3hNb2RlID0gcHJpbWl0aXZlVW5pdHNCYXNlVmFs
dWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworICAgIGJvb2wgcHJpbWl0
aXZlQkJveE1vZGUgPSBwcmltaXRpdmVVbml0cygpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1g7CiAgICAgbV9maWx0ZXItPnNldEVmZmVjdEJvdW5kaW5nQm94TW9kZShwcmltaXRp
dmVCQm94TW9kZSk7CiAgICAgLy8gRklYTUU6IFdoZW4gZG9lcyB0aGlzIGluZm8gZ2V0IHBhc3Nl
ZCB0byB0aGUgZmlsdGVycyBlbGVtZW50cz8KIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJKHJldmlzaW9uIDE2MjYwKQor
Kysga3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYyLDE1ICs2MiwxNSBAQCB2b2lkIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAg
ICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6d2lkdGhBdHRyKQotICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0
QXR0cikKLSAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikK
LSAgICAgICAgc2V0UmVzdWx0QmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldFJl
c3VsdEJhc2VWYWx1ZSh2YWx1ZSk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gU1ZHU3R5bGVk
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC04MSwyMSArODEsMjEg
QEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZQogICAgIGlmICghZmls
dGVyRWZmZWN0KQogICAgICAgICByZXR1cm47CiAgICAgYm9vbCBiYm94ID0gZmFsc2U7Ci0gICAg
aWYocGFyZW50Tm9kZSgpICYmIHBhcmVudE5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6Zmls
dGVyVGFnKSkKLSAgICAgICAgYmJveCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQgKj4o
cGFyZW50Tm9kZSgpKS0+cHJpbWl0aXZlVW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YOworICAgIGlmIChwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgp
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmaWx0ZXJUYWcpKQorICAgICAgICBiYm94ID0gc3RhdGlj
X2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCAqPihwYXJlbnROb2RlKCkpLT5wcmltaXRpdmVVbml0cygp
ID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CiAKLSAgICB4QmFzZVZhbHVlKCkt
PnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB5QmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2
ZShiYm94KTsKLSAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0g
ICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICBmbG9hdCBf
eCA9IHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3kgPSB5QmFzZVZhbHVlKCktPnZhbHVlKCk7Ci0g
ICAgZmxvYXQgX3dpZHRoID0gd2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX2hlaWdodCA9IGhl
aWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAgIGlmKGJib3gpCisgICAgeCgpLT5zZXRCYm94
UmVsYXRpdmUoYmJveCk7CisgICAgeSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgd2lk
dGgoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIGhlaWdodCgpLT5zZXRCYm94UmVsYXRp
dmUoYmJveCk7CisgICAgZmxvYXQgX3ggPSB4KCktPnZhbHVlKCksIF95ID0geSgpLT52YWx1ZSgp
OworICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHQo
KS0+dmFsdWUoKTsKKyAgICBpZiAoYmJveCkKICAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRTdWJS
ZWdpb24oRmxvYXRSZWN0KF94ICogMTAwLmYsIF95ICogMTAwLmYsIF93aWR0aCAqIDEwMC5mLCBf
aGVpZ2h0ICogMTAwLmYpKTsKICAgICBlbHNlCiAgICAgICAgIGZpbHRlckVmZmVjdC0+c2V0U3Vi
UmVnaW9uKEZsb2F0UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkpOwogCi0gICAgZmlsdGVy
RWZmZWN0LT5zZXRSZXN1bHQoU3RyaW5nKHJlc3VsdEJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3Ry
aW5nKCkpOworICAgIGZpbHRlckVmZmVjdC0+c2V0UmVzdWx0KHJlc3VsdCgpLmRlcHJlY2F0ZWRT
dHJpbmcoKSk7CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGaXRU
b1ZpZXdCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3Bw
CShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MCwxMSArOTAsMTEgQEAgYmFpbF9vdXQ6OwogCiBTVkdNYXRyaXgqIFNW
R0ZpdFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lkdGgsIGZs
b2F0IHZpZXdIZWlnaHQpIGNvbnN0CiB7Ci0gICAgU1ZHUmVjdCogdmlld0JveFJlY3QgPSB2aWV3
Qm94QmFzZVZhbHVlKCk7CisgICAgU1ZHUmVjdCogdmlld0JveFJlY3QgPSB2aWV3Qm94KCk7CiAg
ICAgaWYodmlld0JveFJlY3QtPndpZHRoKCkgPT0gMCB8fCB2aWV3Qm94UmVjdC0+aGVpZ2h0KCkg
PT0gMCkKICAgICAgICAgcmV0dXJuIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeCgpOwog
Ci0gICAgcmV0dXJuIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+Z2V0Q1RNKHZpZXdC
b3hSZWN0LT54KCksCisgICAgcmV0dXJuIHByZXNlcnZlQXNwZWN0UmF0aW8oKS0+Z2V0Q1RNKHZp
ZXdCb3hSZWN0LT54KCksCiAgICAgICAgICAgICB2aWV3Qm94UmVjdC0+eSgpLCB2aWV3Qm94UmVj
dC0+d2lkdGgoKSwgdmlld0JveFJlY3QtPmhlaWdodCgpLAogICAgICAgICAgICAgMCwgMCwgdmll
d1dpZHRoLCB2aWV3SGVpZ2h0KTsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHRm9yZWlnbk9iamVjdEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxNCArNjAsMTQgQEAgdm9pZCBTVkdGb3Jl
aWduT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnhBdHRyKQotICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5QmFz
ZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeUJhc2VW
YWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewotICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBD
U1NfUFJPUF9XSURUSCwgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRW
YWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BS
T1BfSEVJR0hULCB2YWx1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKSW5kZXg6IGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6
OnJlYnVpbGRTdG9wcygpIAogICAgICAgICAgICAgU1ZHRWxlbWVudCAqZWxlbWVudCA9IHN2Z19k
eW5hbWljX2Nhc3Qobik7CiAgICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc0dy
YWRpZW50U3RvcCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHU3RvcEVsZW1lbnQgKnN0b3AgPSBz
dGF0aWNfY2FzdDxTVkdTdG9wRWxlbWVudCAqPihlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBm
bG9hdCBzdG9wT2Zmc2V0ID0gc3RvcC0+b2Zmc2V0QmFzZVZhbHVlKCk7CisgICAgICAgICAgICAg
ICAgZmxvYXQgc3RvcE9mZnNldCA9IHN0b3AtPm9mZnNldCgpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdG9wU3R5bGUgPSBkb2N1bWVudCgpLT5zdHls
ZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChzdG9wLCBncmFkaWVudFN0eWxlKTsKICAgICAg
ICAgICAgICAgICBDb2xvciBjID0gc3RvcFN0eWxlLT5zdmdTdHlsZSgpLT5zdG9wQ29sb3IoKTsK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdIZWxwZXIuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdIZWxwZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsMTAgQEAgZmxvYXQgU1ZHSGVscGVyOjpQZXJj
ZW50YWdlT2ZWaWV3cG9ydChmbAogICAgIGlmICh2aWV3cG9ydEVsZW1lbnQtPmlzU1ZHKCkpIHsK
ICAgICAgICAgY29uc3QgU1ZHU1ZHRWxlbWVudCogc3ZnID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZH
U1ZHRWxlbWVudCo+KHZpZXdwb3J0RWxlbWVudCk7CiAgICAgICAgIGlmIChzdmctPmhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6dmlld0JveEF0dHIpKSB7Ci0gICAgICAgICAgICB3aWR0aCA9IHN2Zy0+
dmlld0JveEJhc2VWYWx1ZSgpLT53aWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3ZnLT52
aWV3Qm94QmFzZVZhbHVlKCktPmhlaWdodCgpOwotICAgICAgICB9IGVsc2UgaWYgKHN2Zy0+d2lk
dGhCYXNlVmFsdWUoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BF
UkNFTlRBR0UgfHwKLSAgICAgICAgICAgICAgICBzdmctPmhlaWdodEJhc2VWYWx1ZSgpLT51bml0
VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkgeworICAgICAg
ICAgICAgd2lkdGggPSBzdmctPnZpZXdCb3goKS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGhlaWdo
dCA9IHN2Zy0+dmlld0JveCgpLT5oZWlnaHQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdmctPndp
ZHRoKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdF
IHx8CisgICAgICAgICAgICAgICAgc3ZnLT5oZWlnaHQoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5n
dGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpIHsKICAgICAgICAgICAgIC8vIFRPRE86IFNo
b3VsZG4ndCB3L2ggYmUgbXVsdGlwbGllZCB3aXRoIHRoZSBwZXJjZW50YWdlIHZhbHVlcz8hCiAg
ICAgICAgICAgICAvLyBBRkFJSywgdGhpcyBhc3N1bWVzIHdpZHRoICYgaGVpZ2h0ID09IDEwMCUs
IFJvYj8/CiAgICAgICAgICAgICBEb2N1bWVudCAqZG9jID0gc3ZnLT5kb2N1bWVudCgpOwpAQCAt
NjMsOCArNjMsOCBAQCBmbG9hdCBTVkdIZWxwZXI6OlBlcmNlbnRhZ2VPZlZpZXdwb3J0KGZsCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgd2lkdGggPSBzdmctPndpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCk7Ci0gICAgICAgICAg
ICBoZWlnaHQgPSBzdmctPmhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgICAgICAgICAg
d2lkdGggPSBzdmctPndpZHRoKCktPnZhbHVlKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdmct
PmhlaWdodCgpLT52YWx1ZSgpOwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBrc3ZnMi9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzEsMTYgKzcxLDE2IEBAIHZvaWQgU1ZHSW1hZ2VFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnUKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0g
YXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikK
LSAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7Cisg
ICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeUJhc2VWYWx1ZSgp
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKICAgICAgICAgcHJlc2VydmVBc3BlY3RS
YXRpb0Jhc2VWYWx1ZSgpLT5wYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8odmFsdWUuaW1wbCgpKTsK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewotICAg
ICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7Cisg
ICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwogICAgICAg
ICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9XSURUSCwgdmFsdWUpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGhl
aWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAg
IGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICAgICAgYWRk
Q1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfSEVJR0hULCB2YWx1ZSk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKSW5kZXg6
IGtzdmcyL3N2Zy9TVkdMZW5ndGhMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
TGVuZ3RoTGlzdC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR0xlbmd0aExp
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMCArMjgsMTAgQEAKICNpbmNsdWRlICJTVkdT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogCi11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHTGVuZ3RoTGlzdDo6U1ZHTGVu
Z3RoTGlzdChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQotOiBTVkdMaXN0PFNWR0xl
bmd0aD4oY29udGV4dCkKKyAgICA6IFNWR0xpc3Q8U1ZHTGVuZ3RoPihjb250ZXh0KQogewogfQog
CkBAIC00MiwxNSArNDIsMTYgQEAgU1ZHTGVuZ3RoTGlzdDo6flNWR0xlbmd0aExpc3QoKQogdm9p
ZCBTVkdMZW5ndGhMaXN0OjpwYXJzZShjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ2YWx1ZSwgY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCwgTGVuZ3RoTW9kZSBtb2RlKQogewogICAgIERl
cHJlY2F0ZWRTdHJpbmdMaXN0IGxlbmd0aHMgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQo
JyAnLCB2YWx1ZSk7Ci0gICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDtpIDwgbGVuZ3Rocy5jb3Vu
dCgpO2krKykKLSAgICB7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGhz
LmNvdW50KCk7IGkrKykgewogICAgICAgICBTVkdMZW5ndGggKmxlbmd0aCA9IG5ldyBTVkdMZW5n
dGgoY29udGV4dCwgbW9kZSk7CiAgICAgICAgIFN0cmluZyBzdHIobGVuZ3Roc1tpXSk7Ci0gICAg
ICAgIGxlbmd0aC0+c2V0VmFsdWVBc1N0cmluZyhzdHIuaW1wbCgpKTsKKyAgICAgICAgbGVuZ3Ro
LT5zZXRWYWx1ZUFzU3RyaW5nKHN0cik7CiAgICAgICAgIGFwcGVuZEl0ZW0obGVuZ3RoKTsKICAg
ICB9CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCiAK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIv
c3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZH
TGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMyArNTgsMTMgQEAgdm9pZCBT
VkdMaW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dAogewogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OngxQXR0cikKLSAgICAgICAgeDFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICB4MUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnkxQXR0cikKLSAg
ICAgICAgeTFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAg
ICAgICB5MUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngyQXR0cikKLSAgICAgICAgeDJCYXNlVmFsdWUo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4MkJhc2VWYWx1ZSgp
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnkyQXR0cikKLSAgICAgICAgeTJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5MkJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlKTsKICAgICBlbHNlCiAgICAgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKQEAgLTc2LDggKzc2LDggQEAgdm9pZCBTVkdMaW5l
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dAogCiBQYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1Bh
dGhEYXRhKCkgY29uc3QKIHsKLSAgICBmbG9hdCBfeDEgPSB4MUJhc2VWYWx1ZSgpLT52YWx1ZSgp
LCBfeTEgPSB5MUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF94MiA9IHgyQmFzZVZh
bHVlKCktPnZhbHVlKCksIF95MiA9IHkyQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQg
X3gxID0geDEoKS0+dmFsdWUoKSwgX3kxID0geTEoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDIg
PSB4MigpLT52YWx1ZSgpLCBfeTIgPSB5MigpLT52YWx1ZSgpOwogCiAgICAgcmV0dXJuIFBhdGg6
OmNyZWF0ZUxpbmUoRmxvYXRQb2ludChfeDEsIF95MSksIEZsb2F0UG9pbnQoX3gyLCBfeTIpKTsK
IH0KQEAgLTg1LDEyICs4NSwxMiBAQCBQYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkg
Y29uc3QKIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0xpbmVFbGVtZW50OjpwdXNoQXR0cmli
dXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQogewogICAgIC8vIEFs
bCBhdHRyaWJ1dGUncyBjb250ZXh0cyBhcmUgZXF1YWwgKHNvIGp1c3QgdGFrZSB0aGUgb25lIGZy
b20gJ3gxJykuCi0gICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9yZSA9IHgxQmFzZVZh
bHVlKCktPmNvbnRleHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0g
eDEoKS0+Y29udGV4dCgpOwogCi0gICAgeDFCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0
KTsKLSAgICB5MUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHgyQmFzZVZh
bHVlKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgeTJCYXNlVmFsdWUoKS0+c2V0Q29udGV4
dChjb250ZXh0KTsKKyAgICB4MSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHkxKCktPnNl
dENvbnRleHQoY29udGV4dCk7CisgICAgeDIoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB5
MigpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIAogICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnB1
c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnRleHQpOwogICAgIHJldHVybiByZXN0b3JlOwpAQCAtOTgs
MTAgKzk4LDEwIEBAIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0xpbmVFbGVtZW50OjoKIAog
Ym9vbCBTVkdMaW5lRWxlbWVudDo6aGFzUGVyY2VudGFnZVZhbHVlcygpIGNvbnN0CiB7Ci0gICAg
aWYgKHgxQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQ
RV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgIHkxQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZH
TGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgIHgyQmFzZVZhbHVl
KCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8
Ci0gICAgICAgIHkyQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVO
R1RIVFlQRV9QRVJDRU5UQUdFKQorICAgIGlmICh4MSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0
aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAorICAgICAgICB5MSgpLT51bml0VHlwZSgp
ID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAorICAgICAgICB4Migp
LT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAor
ICAgICAgICB5MigpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVS
Q0VOVEFHRSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisr
KyBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjQsMTMgKzY0LDEzIEBAIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpwYXJzZU1h
cHAKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0dHIpCi0gICAgICAgIHgxQmFzZVZh
bHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeDFCYXNlVmFs
dWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp5MUF0dHIpCi0gICAgICAgIHkxQmFzZVZhbHVlKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeTFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MkF0
dHIpCi0gICAgICAgIHgyQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeDJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MkF0dHIpCi0gICAgICAgIHkyQmFz
ZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeTJCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZQogICAgICAgICBTVkdH
cmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtNzksODQg
Kzc5LDc5IEBAIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKIHsKICAg
ICByZWJ1aWxkU3RvcHMoKTsgLy8gcmVidWlsZCBzdG9wcyBiZWZvcmUgcG9zc2libHkgaW1wb3J0
aW5nIHRoZW0gZnJvbSBhbnkgcmVmZXJlbmNlZCBncmFkaWVudC4KIAotICAgIGJvb2wgYmJveCA9
IChncmFkaWVudFVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWCk7CisgICAgYm9vbCBiYm94ID0gKGdyYWRpZW50VW5pdHMoKSA9PSBTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICAKLSAgICB4MUJhc2VWYWx1ZSgpLT5zZXRCYm94UmVs
YXRpdmUoYmJveCk7Ci0gICAgeTFCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwot
ICAgIHgyQmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB5MkJhc2VWYWx1
ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgeDEoKS0+c2V0QmJveFJlbGF0aXZlKGJi
b3gpOworICAgIHkxKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICB4MigpLT5zZXRCYm94
UmVsYXRpdmUoYmJveCk7CisgICAgeTIoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwogICAgIAot
ICAgIGZsb2F0IF94MSA9IHgxQmFzZVZhbHVlKCktPnZhbHVlKCksIF95MSA9IHkxQmFzZVZhbHVl
KCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3gyID0geDJCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3ky
ID0geTJCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDEgPSB4MSgpLT52YWx1ZSgp
LCBfeTEgPSB5MSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF94MiA9IHgyKCktPnZhbHVlKCksIF95
MiA9IHkyKCktPnZhbHVlKCk7CiAKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFk
aWVudCAqZ3JhZCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRp
ZW50ICo+KF9ncmFkKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0OwotICAgIGlmKGdyYWRpZW50
VHJhbnNmb3JtQmFzZVZhbHVlKCktPm51bWJlck9mSXRlbXMoKSA+IDApCi0gICAgICAgIG1hdCA9
IGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5t
YXRyaXgoKTsKKyAgICBpZiAoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+bnVtYmVyT2ZJdGVtcygpID4g
MCkKKyAgICAgICAgbWF0ID0gZ3JhZGllbnRUcmFuc2Zvcm0oKS0+Y29uc29saWRhdGUoKS0+bWF0
cml4KCktPm1hdHJpeCgpOwogCi0gICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJl
ZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyBy
ZWYgPSBTdHJpbmcoaHJlZigpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgS1JlbmRlcmluZ1Bh
aW50U2VydmVyICpwc2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3VtZW50KCksIHJlZi5t
aWQoMSkpOwogICAgIAotICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19S
QURJQUxfR1JBRElFTlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVOVCkp
CisgICAgaWYgKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19SQURJQUxfR1JBRElF
TlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVOVCkpCiAgICAgewogICAg
ICAgICBib29sIGlzTGluZWFyID0gcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVO
VDsKICAgICAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKmdyYWRpZW50ID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyR3JhZGllbnQgKj4ocHNlcnZlcik7CiAKLSAg
ICAgICAgaWYoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpKQorICAg
ICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpKQogICAg
ICAgICAgICAgYmJveCA9IGdyYWRpZW50LT5ib3VuZGluZ0JveE1vZGUoKTsKICAgICAgICAgICAg
IAotICAgICAgICBpZihpc0xpbmVhcikKKyAgICAgICAgaWYgKGlzTGluZWFyKQogICAgICAgICB7
CiAgICAgICAgICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCAqbGluZWFy
ID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQgKj4ocHNl
cnZlcik7Ci0gICAgICAgICAgICBpZighaGFzQXR0cmlidXRlKFNWR05hbWVzOjp4MUF0dHIpKQor
ICAgICAgICAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OngxQXR0cikpCiAgICAgICAg
ICAgICAgICAgX3gxID0gbGluZWFyLT5ncmFkaWVudFN0YXJ0KCkueCgpOwotICAgICAgICAgICAg
ZWxzZSBpZihiYm94KQorICAgICAgICAgICAgZWxzZSBpZiAoYmJveCkKICAgICAgICAgICAgICAg
ICBfeDEgKj0gMTAwLjsKIAotICAgICAgICAgICAgaWYoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
eTFBdHRyKSkKKyAgICAgICAgICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjp5MUF0dHIp
KQogICAgICAgICAgICAgICAgIF95MSA9IGxpbmVhci0+Z3JhZGllbnRTdGFydCgpLnkoKTsKLSAg
ICAgICAgICAgIGVsc2UgaWYoYmJveCkKKyAgICAgICAgICAgIGVsc2UgaWYgKGJib3gpCiAgICAg
ICAgICAgICAgICAgX3kxICo9IDEwMC47CiAKLSAgICAgICAgICAgIGlmKCFoYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OngyQXR0cikpCisgICAgICAgICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1l
czo6eDJBdHRyKSkKICAgICAgICAgICAgICAgICBfeDIgPSBsaW5lYXItPmdyYWRpZW50RW5kKCku
eCgpOwotICAgICAgICAgICAgZWxzZSBpZihiYm94KQorICAgICAgICAgICAgZWxzZSBpZiAoYmJv
eCkKICAgICAgICAgICAgICAgICBfeDIgKj0gMTAwLjsKIAotICAgICAgICAgICAgaWYoIWhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6eTJBdHRyKSkKKyAgICAgICAgICAgIGlmICghaGFzQXR0cmlidXRl
KFNWR05hbWVzOjp5MkF0dHIpKQogICAgICAgICAgICAgICAgIF95MiA9IGxpbmVhci0+Z3JhZGll
bnRFbmQoKS55KCk7Ci0gICAgICAgICAgICBlbHNlIGlmKGJib3gpCisgICAgICAgICAgICBlbHNl
IGlmIChiYm94KQogICAgICAgICAgICAgICAgIF95MiAqPSAxMDAuOwotICAgICAgICB9Ci0gICAg
ICAgIGVsc2UgaWYoYmJveCkKLSAgICAgICAgeworICAgICAgICB9IGVsc2UgaWYgKGJib3gpIHsK
ICAgICAgICAgICAgIF94MSAqPSAxMDAuMDsKICAgICAgICAgICAgIF95MSAqPSAxMDAuMDsKICAg
ICAgICAgICAgIF94MiAqPSAxMDAuMDsKICAgICAgICAgICAgIF95MiAqPSAxMDAuMDsKICAgICAg
ICAgfQogCi0gICAgICAgIGlmKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNm
b3JtQXR0cikpCisgICAgICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpncmFkaWVudFRy
YW5zZm9ybUF0dHIpKQogICAgICAgICAgICAgbWF0ID0gZ3JhZGllbnQtPmdyYWRpZW50VHJhbnNm
b3JtKCk7CiAKICAgICAgICAgLy8gSW5oZXJpdCBjb2xvciBzdG9wcyBpZiBlbXB0eQogICAgICAg
ICBpZiAoZ3JhZC0+Z3JhZGllbnRTdG9wcygpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIGdyYWQt
PnNldEdyYWRpZW50U3RvcHMoZ3JhZGllbnQpOwogCi0gICAgICAgIGlmKCFoYXNBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIpKQorICAgICAgICBpZiAoIWhhc0F0dHJpYnV0ZShT
VkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikpCiAgICAgICAgICAgICBncmFkLT5zZXRHcmFkaWVu
dFNwcmVhZE1ldGhvZChncmFkaWVudC0+c3ByZWFkTWV0aG9kKCkpOwotICAgIH0KLSAgICBlbHNl
Ci0gICAgewotICAgICAgICBpZihzcHJlYWRNZXRob2RCYXNlVmFsdWUoKSA9PSBTVkdfU1BSRUFE
TUVUSE9EX1JFRkxFQ1QpCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKHNwcmVhZE1ldGhvZCgp
ID09IFNWR19TUFJFQURNRVRIT0RfUkVGTEVDVCkKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRp
ZW50U3ByZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9SRUZMRUNUKTsKLSAgICAgICAgZWxzZSBpZihz
cHJlYWRNZXRob2RCYXNlVmFsdWUoKSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFUEVBVCkKKyAgICAg
ICAgZWxzZSBpZiAoc3ByZWFkTWV0aG9kKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpCiAg
ICAgICAgICAgICBncmFkLT5zZXRHcmFkaWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUkVQ
RUFUKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRN
ZXRob2QoU1BSRUFETUVUSE9EX1BBRCk7CiAKLSAgICAgICAgaWYoYmJveCkKLSAgICAgICAgewor
ICAgICAgICBpZiAoYmJveCkgewogICAgICAgICAgICAgX3gxICo9IDEwMC4wOwogICAgICAgICAg
ICAgX3kxICo9IDEwMC4wOwogICAgICAgICAgICAgX3gyICo9IDEwMC4wOwpJbmRleDoga3N2ZzIv
c3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdNYXJr
ZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHTWFya2VyRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5LDIwICs2OSwyMCBAQCB2b2lkIFNWR01hcmtl
ckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgICAgICBzZXRNYXJrZXJVbml0c0Jh
c2VWYWx1ZShTVkdfTUFSS0VSVU5JVFNfVVNFUlNQQUNFT05VU0UpOwogICAgIH0KICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJlZlhBdHRyKQotICAgICAgICByZWZYQmFz
ZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcmVmWEJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnJlZllBdHRyKQotICAgICAgICByZWZZQmFzZVZhbHVlKCktPnNl
dFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcmVmWUJhc2VWYWx1ZSgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6Om1hcmtlcldpZHRoQXR0cikKLSAgICAgICAgbWFya2VyV2lkdGhCYXNlVmFsdWUoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBtYXJrZXJXaWR0aEJhc2VW
YWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIpCi0gICAgICAgIG1hcmtlckhlaWdodEJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIG1hcmtl
ckhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIpCiAgICAgewogICAgICAgICBp
ZiAodmFsdWUgPT0gImF1dG8iKQogICAgICAgICAgICAgc2V0T3JpZW50VG9BdXRvKCk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgU1ZHQW5nbGUgKmFuZ2xlID0gU1ZHU1ZHRWxlbWVudDo6
Y3JlYXRlU1ZHQW5nbGUoKTsKLSAgICAgICAgICAgIGFuZ2xlLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CisgICAgICAgICAgICBhbmdsZS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7
CiAgICAgICAgICAgICBzZXRPcmllbnRUb0FuZ2xlKGFuZ2xlKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTEyNywxNiArMTI3LDE2IEBAIEtDYW52YXNNYXJrZXIgKlNWR01hcmtlckVsZW1lbnQ6OmNh
bnZhc1IKICAgICBpZighbV9vcmllbnRUeXBlKQogICAgICAgICBzZXRPcmllbnRUb0FuZ2xlKFNW
R1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR0FuZ2xlKCkpOwogICAgIAotICAgIGlmKG9yaWVudFR5cGVC
YXNlVmFsdWUoKSA9PSBTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSkKLSAgICAgICAgbV9tYXJrZXIt
PnNldEFuZ2xlKG9yaWVudEFuZ2xlQmFzZVZhbHVlKCktPnZhbHVlKCkpOworICAgIGlmKG9yaWVu
dFR5cGUoKSA9PSBTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSkKKyAgICAgICAgbV9tYXJrZXItPnNl
dEFuZ2xlKG9yaWVudEFuZ2xlKCktPnZhbHVlKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9tYXJr
ZXItPnNldEF1dG9BbmdsZSgpOwogCi0gICAgbV9tYXJrZXItPnNldFJlZihyZWZYQmFzZVZhbHVl
KCktPnZhbHVlKCksIHJlZllCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CisgICAgbV9tYXJrZXItPnNl
dFJlZihyZWZYKCktPnZhbHVlKCksIHJlZlkoKS0+dmFsdWUoKSk7CiAgICAgCi0gICAgbV9tYXJr
ZXItPnNldFVzZVN0cm9rZVdpZHRoKG1hcmtlclVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX01BUktF
UlVOSVRTX1NUUk9LRVdJRFRIKTsKLSAgICBkb3VibGUgdyA9IG1hcmtlcldpZHRoQmFzZVZhbHVl
KCktPnZhbHVlKCk7Ci0gICAgZG91YmxlIGggPSBtYXJrZXJIZWlnaHRCYXNlVmFsdWUoKS0+dmFs
dWUoKTsKKyAgICBtX21hcmtlci0+c2V0VXNlU3Ryb2tlV2lkdGgobWFya2VyVW5pdHMoKSA9PSBT
VkdfTUFSS0VSVU5JVFNfU1RST0tFV0lEVEgpOworICAgIGRvdWJsZSB3ID0gbWFya2VyV2lkdGgo
KS0+dmFsdWUoKTsKKyAgICBkb3VibGUgaCA9IG1hcmtlckhlaWdodCgpLT52YWx1ZSgpOwogICAg
IFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHcsIGgp
OwogICAgIG1fbWFya2VyLT5zZXRTY2FsZSh2aWV3Qm94LT5tYXRyaXgoKS5tMTEoKSwgdmlld0Jv
eC0+bWF0cml4KCkubTIyKCkpOwogICAgIApJbmRleDoga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDcgKzY4LDcgQEAgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFza0Vs
ZQogCiB2b2lkIFNWR01hc2tFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0
ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKQogewotICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNpemUo
bHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNlVmFs
dWUoKS0+dmFsdWUoKSkpOworICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNpemUobHJvdW5kZih3
aWR0aCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+dmFsdWUoKSkpOwogICAgIGlmICgh
bV9tYXNrZXIgfHwgIW1fbWFza2VyLT5tYXNrKCkgfHwgKG1fbWFza2VyLT5tYXNrKCktPnNpemUo
KSAhPSBuZXdTaXplKSkKICAgICAgICAgbV9kaXJ0eSA9IHRydWU7CiAgICAgU1ZHU3R5bGVkTG9j
YXRhYmxlRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsKQEAg
LTg0LDEzICs4NCwxMyBAQCB2b2lkIFNWR01hc2tFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
CiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCi0gICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQotICAgICAg
ICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAg
ICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKLSAgICAgICAgaGVpZ2h0
QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVp
Z2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwogICAgIGVsc2UgewogICAg
ICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTExMyw3ICsxMTMsNyBAQCBLQ2FudmFzSW1hZ2UgKlNWR01h
c2tFbGVtZW50OjpkcmF3TWFza2VyCiAgICAgICAgIHJldHVybiAwOwogICAgIEtDYW52YXNJbWFn
ZSAqbWFza0ltYWdlID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ltYWdlICo+KGRldmljZS0+Y3JlYXRl
UmVzb3VyY2UoUlNfSU1BR0UpKTsKIAotICAgIEludFNpemUgc2l6ZSA9IEludFNpemUobHJvdW5k
Zih3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNlVmFsdWUoKS0+
dmFsdWUoKSkpOworICAgIEludFNpemUgc2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aCgpLT52
YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+dmFsdWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5p
dChzaXplKTsKIAogICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpwYXR0ZXJuQ29udGV4dCA9
IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1hc2tJbWFnZSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZH
UGF0dGVybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTMgKzk3LDEzIEBAIHZvaWQgU1ZHUGF0dGVybkVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAqcGF0dGVy
blRyYW5zZm9ybXMgPSBwYXR0ZXJuVHJhbnNmb3JtQmFzZVZhbHVlKCk7CiAgICAgICAgIFNWR1Ry
YW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKHBhdHRlcm5UcmFuc2Zvcm1zLCB2
YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQot
ICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAg
ICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5QmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omhl
aWdodEF0dHIpCi0gICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMjMsMTIgKzEy
MywxMiBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiBjb25zdCBT
VkdTdHlsZWRFbGVtZW50KiBTVkdQYXR0ZXJuRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQo
Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRl
J3MgY29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICd4JykuCi0g
ICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogcmVzdG9yZSA9IHhCYXNlVmFsdWUoKS0+Y29udGV4
dCgpOworICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIHJlc3RvcmUgPSB4KCktPmNvbnRleHQo
KTsKIAotICAgIHhCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB5QmFzZVZh
bHVlKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0Q29u
dGV4dChjb250ZXh0KTsKLSAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0
KTsKKyAgICB4KCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgeSgpLT5zZXRDb250ZXh0KGNv
bnRleHQpOworICAgIHdpZHRoKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgaGVpZ2h0KCkt
PnNldENvbnRleHQoY29udGV4dCk7CiAKICAgICByZXR1cm4gcmVzdG9yZTsKIH0KQEAgLTE0MSw3
ICsxNDEsNyBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpyZXNvdXJjZU5vdGlmaWNhCiAKIHZv
aWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVzRnJvbVJlZmVyZW5jZVBhdHRlcm4o
Y29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJu
VHJhbnNmb3JtTWF0cml4KQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhy
ZWZCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpOworICAgIERlcHJlY2F0ZWRTdHJpbmcg
cmVmID0gU3RyaW5nKGhyZWYoKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgIEtSZW5kZXJpbmdQ
YWludFNlcnZlciAqcmVmU2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlkKGRvY3VtZW50KCksIHJl
Zi5taWQoMSkpOwogCiAgICAgaWYgKCFyZWZTZXJ2ZXIgfHwgcmVmU2VydmVyLT50eXBlKCkgIT0g
UFNfUEFUVEVSTikKQEAgLTE3NSwxNCArMTc1LDE0IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6
OmRyYXdQYXR0ZXJuQ29udGUKICAgICAKICAgICBTVkdTdHlsZWRFbGVtZW50KiBhY3RpdmVFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkRWxlbWVudCo+KG1fcGFpbnRTZXJ2ZXItPmFjdGl2
ZUNsaWVudCgpLT5lbGVtZW50KCkpOwogCi0gICAgYm9vbCBiYm94ID0gKHBhdHRlcm5Vbml0c0Jh
c2VWYWx1ZSgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgIGJvb2wg
YmJveCA9IChwYXR0ZXJuVW5pdHMoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9Y
KTsKIAogICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIHNhdmVkQ29udGV4dCA9IDA7CiAgICAg
aWYgKGJib3gpIHsKLSAgICAgICAgaWYgKHdpZHRoQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgIT0g
U1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQotICAgICAgICAgICAgd2lkdGhC
YXNlVmFsdWUoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5ndGg6OlNWR19MRU5HVEhU
WVBFX1BFUkNFTlRBR0UsIHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCkgKiAxMDAuKTsKLSAgICAg
ICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLT51bml0VHlwZSgpICE9IFNWR0xlbmd0aDo6U1ZHX0xF
TkdUSFRZUEVfUEVSQ0VOVEFHRSkKLSAgICAgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5uZXdW
YWx1ZVNwZWNpZmllZFVuaXRzKFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSwg
aGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCkgKiAxMDAuKTsKKyAgICAgICAgaWYgKHdpZHRoKCkt
PnVuaXRUeXBlKCkgIT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQorICAg
ICAgICAgICAgd2lkdGgoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5ndGg6OlNWR19M
RU5HVEhUWVBFX1BFUkNFTlRBR0UsIHdpZHRoKCktPnZhbHVlKCkgKiAxMDAuKTsKKyAgICAgICAg
aWYgKGhlaWdodCgpLT51bml0VHlwZSgpICE9IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVS
Q0VOVEFHRSkKKyAgICAgICAgICAgIGhlaWdodCgpLT5uZXdWYWx1ZVNwZWNpZmllZFVuaXRzKFNW
R0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSwgaGVpZ2h0KCktPnZhbHVlKCkgKiAx
MDAuKTsKICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQpCiAgICAgICAgICAgICBzYXZlZENvbnRl
eHQgPSBjb25zdF9jYXN0PFNWR1BhdHRlcm5FbGVtZW50KiA+KHRoaXMpLT5wdXNoQXR0cmlidXRl
Q29udGV4dChhY3RpdmVFbGVtZW50KTsKICAgICB9CkBAIC0xOTMsNyArMTkzLDcgQEAgdm9pZCBT
VkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZQogCiAgICAgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQqIHBhdHRlcm5Db250ZXh0ID0gZGV2aWNlLT5jb250ZXh0Rm9ySW1hZ2UobV90aWxl
KTsKICAgICBkZXZpY2UtPnB1c2hDb250ZXh0KHBhdHRlcm5Db250ZXh0KTsKLSAgICBGbG9hdFJl
Y3QgcmVjdCh4QmFzZVZhbHVlKCktPnZhbHVlKCksIHlCYXNlVmFsdWUoKS0+dmFsdWUoKSwgd2lk
dGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCkpOworICAg
IEZsb2F0UmVjdCByZWN0KHgoKS0+dmFsdWUoKSwgeSgpLT52YWx1ZSgpLCB3aWR0aCgpLT52YWx1
ZSgpLCBoZWlnaHQoKS0+dmFsdWUoKSk7CiAgICAgbV9wYWludFNlcnZlci0+c2V0QmJveChyZWN0
KTsKICAgICBtX3BhaW50U2VydmVyLT5zZXRQYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zv
cm1NYXRyaXgpOwogICAgIG1fcGFpbnRTZXJ2ZXItPnNldFRpbGUobV90aWxlKTsKQEAgLTIxOSw3
ICsyMTksNyBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpkcmF3UGF0dGVybkNvbnRlCiAgICAg
ICAgIEtDYW52YXNNYXRyaXggc2F2ZWRNYXRyaXggPSBpdGVtLT5sb2NhbFRyYW5zZm9ybSgpOwog
CiAgICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIHNhdmVkQ29udGV4dCA9IDA7Ci0gICAg
ICAgIGlmIChwYXR0ZXJuQ29udGVudFVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCkKKyAgICAgICAgaWYgKHBhdHRlcm5Db250ZW50VW5pdHMoKSA9PSBT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoYWN0aXZlRWxlbWVudCkKICAgICAgICAgICAgICAgICBzYXZlZENvbnRleHQgPSBlLT5wdXNo
QXR0cmlidXRlQ29udGV4dChhY3RpdmVFbGVtZW50KTsKQEAgLTI4Niw3ICsyODYsNyBAQCB2b2lk
IFNWR1BhdHRlcm5FbGVtZW50Ojpub3RpZnlBdHRyaWJ1dGVDCiAgICAgaWYgKCFtX3BhaW50U2Vy
dmVyIHx8ICFtX3BhaW50U2VydmVyLT5hY3RpdmVDbGllbnQoKSB8fCBtX2lnbm9yZUF0dHJpYnV0
ZUNoYW5nZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNp
emUobHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNl
VmFsdWUoKS0+dmFsdWUoKSkpOworICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNpemUobHJvdW5k
Zih3aWR0aCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+dmFsdWUoKSkpOwogICAgIGlm
IChtX3RpbGUgJiYgKG1fdGlsZS0+c2l6ZSgpID09IG5ld1NpemUpIHx8IG5ld1NpemUud2lkdGgo
KSA8IDEgfHwgbmV3U2l6ZS5oZWlnaHQoKSA8IDEpCiAgICAgICAgIHJldHVybjsKIApAQCAtMzAy
LDE4ICszMDIsMTggQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6bm90aWZ5QXR0cmlidXRlQwog
ICAgIGNvbnN0IE5vZGUgKnRlc3QgPSB0aGlzOwogICAgIHdoaWxlKHRlc3QgJiYgIXRlc3QtPmhh
c0NoaWxkTm9kZXMoKSkKICAgICB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3Ry
aW5nKHRhcmdldC0+aHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAg
IERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKHRhcmdldC0+aHJlZigpKS5kZXByZWNhdGVk
U3RyaW5nKCk7CiAgICAgICAgIHRlc3QgPSBvd25lckRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlk
KFN0cmluZyhyZWYubWlkKDEpKS5pbXBsKCkpOwogICAgICAgICBpZiAodGVzdCAmJiB0ZXN0LT5o
YXNUYWdOYW1lKFNWR05hbWVzOjpwYXR0ZXJuVGFnKSkKICAgICAgICAgICAgIHRhcmdldCA9IHN0
YXRpY19jYXN0PGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiA+KHRlc3QpOwogICAgIH0KIAotICAg
IHVuc2lnbmVkIHNob3J0IHNhdmVkUGF0dGVyblVuaXRzID0gcGF0dGVyblVuaXRzQmFzZVZhbHVl
KCk7Ci0gICAgdW5zaWduZWQgc2hvcnQgc2F2ZWRQYXR0ZXJuQ29udGVudFVuaXRzID0gcGF0dGVy
bkNvbnRlbnRVbml0c0Jhc2VWYWx1ZSgpOworICAgIHVuc2lnbmVkIHNob3J0IHNhdmVkUGF0dGVy
blVuaXRzID0gcGF0dGVyblVuaXRzKCk7CisgICAgdW5zaWduZWQgc2hvcnQgc2F2ZWRQYXR0ZXJu
Q29udGVudFVuaXRzID0gcGF0dGVybkNvbnRlbnRVbml0cygpOwogCiAgICAgQWZmaW5lVHJhbnNm
b3JtIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXg7Ci0gICAgaWYgKHBhdHRlcm5UcmFuc2Zvcm1CYXNl
VmFsdWUoKS0+bnVtYmVyT2ZJdGVtcygpID4gMCkKLSAgICAgICAgcGF0dGVyblRyYW5zZm9ybU1h
dHJpeCA9IHBhdHRlcm5UcmFuc2Zvcm1CYXNlVmFsdWUoKS0+Y29uc29saWRhdGUoKS0+bWF0cml4
KCktPm1hdHJpeCgpOworICAgIGlmIChwYXR0ZXJuVHJhbnNmb3JtKCktPm51bWJlck9mSXRlbXMo
KSA+IDApCisgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXggPSBwYXR0ZXJuVHJhbnNmb3Jt
KCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKIAogCiAgICAgU1ZHUGF0dGVy
bkVsZW1lbnQgKm5vbkNvbnN0VGhpcyA9IGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqPih0
aGlzKTsKQEAgLTM0OCwxMSArMzQ4LDggQEAgS1JlbmRlcmluZ1BhaW50U2VydmVyUGF0dGVybiAq
U1ZHUGF0dGVybgogU1ZHTWF0cml4ICpTVkdQYXR0ZXJuRWxlbWVudDo6Z2V0Q1RNKCkgY29uc3QK
IHsKICAgICBTVkdNYXRyaXggKm1hdCA9IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeCgp
OwotICAgIGlmIChtYXQpCi0gICAgewotICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94
ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln
aHRCYXNlVmFsdWUoKS0+dmFsdWUoKSk7Ci0KKyAgICBpZiAobWF0KSB7CisgICAgICAgIFJlZlB0
cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCktPnZh
bHVlKCksIGhlaWdodCgpLT52YWx1ZSgpKTsKICAgICAgICAgbWF0LT5tdWx0aXBseSh2aWV3Qm94
LmdldCgpKTsKICAgICB9CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCwxNSArNjgsMTUgQEAgdm9pZCBTVkdSYWRpYWxH
cmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcAogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN4
QXR0cikKLSAgICAgICAgY3hCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOworICAgICAgICBjeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKLSAgICAgICAgY3lC
YXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBjeUJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKQotICAgICAgICByQmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgckJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ4
QXR0cikKLSAgICAgICAgZnhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOworICAgICAgICBmeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ5QXR0cikKLSAgICAgICAgZnlC
YXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBmeUJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlCiAgICAgICAgIFNW
R0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC04NSwy
NSArODUsMjUgQEAgdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZAogewog
ICAgIHJlYnVpbGRTdG9wcygpOyAvLyByZWJ1aWxkIHN0b3BzIGJlZm9yZSBwb3NzaWJseSBpbXBv
cnRpbmcgdGhlbSBmcm9tIGFueSByZWZlcmVuY2VkIGdyYWRpZW50LgogCi0gICAgYm9vbCBiYm94
ID0gKGdyYWRpZW50VW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YKTsKKyAgICBib29sIGJib3ggPSAoZ3JhZGllbnRVbml0cygpID09IFNWR19VTklUX1RZ
UEVfT0JKRUNUQk9VTkRJTkdCT1gpOwogICAgIGJvb2wgZnhTZXQgPSBoYXNBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmZ4QXR0cik7CiAgICAgYm9vbCBmeVNldCA9IGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
ZnlBdHRyKTsKLSAgICBjeEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAg
Y3lCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIHJCYXNlVmFsdWUoKS0+
c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIGZ4QmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2
ZShiYm94KTsKLSAgICBmeUJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAg
ZmxvYXQgX2N4ID0gY3hCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX2N5ID0gY3lCYXNlVmFsdWUoKS0+
dmFsdWUoKTsKLSAgICBmbG9hdCBfciA9IHJCYXNlVmFsdWUoKS0+dmFsdWUoKTsKLSAgICBmbG9h
dCBfZnggPSBmeFNldCA/IGZ4QmFzZVZhbHVlKCktPnZhbHVlKCkgOiBfY3g7Ci0gICAgZmxvYXQg
X2Z5ID0gZnlTZXQgPyBmeUJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogX2N5OworICAgIGN4KCktPnNl
dEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICBjeSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Cisg
ICAgcigpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgZngoKS0+c2V0QmJveFJlbGF0aXZl
KGJib3gpOworICAgIGZ5KCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICBmbG9hdCBfY3gg
PSBjeCgpLT52YWx1ZSgpLCBfY3kgPSBjeSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9yID0gcigp
LT52YWx1ZSgpOworICAgIGZsb2F0IF9meCA9IGZ4U2V0ID8gZngoKS0+dmFsdWUoKSA6IF9jeDsK
KyAgICBmbG9hdCBfZnkgPSBmeVNldCA/IGZ5KCktPnZhbHVlKCkgOiBfY3k7CiAKICAgICBLUmVu
ZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCAqZ3JhZCA9IHN0YXRpY19jYXN0PEtSZW5k
ZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50ICo+KF9ncmFkKTsKICAgICBBZmZpbmVUcmFu
c2Zvcm0gbWF0OwotICAgIGlmKGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCktPm51bWJlck9m
SXRlbXMoKSA+IDApCi0gICAgICAgIG1hdCA9IGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCkt
PmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKKyAgICBpZihncmFkaWVudFRyYW5z
Zm9ybSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQorICAgICAgICBtYXQgPSBncmFkaWVudFRyYW5z
Zm9ybSgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CiAKLSAgICBEZXByZWNh
dGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmco
KTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmKCkpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnBzZXJ2ZXIgPSBnZXRQYWludFNl
cnZlckJ5SWQoZG9jdW1lbnQoKSwgcmVmLm1pZCgxKSk7CiAKICAgICBpZihwc2VydmVyICYmIChw
c2VydmVyLT50eXBlKCkgPT0gUFNfUkFESUFMX0dSQURJRU5UIHx8IHBzZXJ2ZXItPnR5cGUoKSA9
PSBQU19MSU5FQVJfR1JBRElFTlQpKQpAQCAtMTYxLDkgKzE2MSw5IEBAIHZvaWQgU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAg
ICAgaWYoc3ByZWFkTWV0aG9kQmFzZVZhbHVlKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRUZMRUNU
KQorICAgICAgICBpZihzcHJlYWRNZXRob2QoKSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1Qp
CiAgICAgICAgICAgICBncmFkLT5zZXRHcmFkaWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0Rf
UkVGTEVDVCk7Ci0gICAgICAgIGVsc2UgaWYoc3ByZWFkTWV0aG9kQmFzZVZhbHVlKCkgPT0gU1ZH
X1NQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgICAgIGVsc2UgaWYoc3ByZWFkTWV0aG9kKCkgPT0g
U1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpCiAgICAgICAgICAgICBncmFkLT5zZXRHcmFkaWVudFNw
cmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUkVQRUFUKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1BBRCk7CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdSZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3ZnL1NWR1JlY3RF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNTIgKzY1LDUyIEBAIHZvaWQgU1ZHUmVj
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKLSAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeUJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHlCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpyeEF0dHIpCi0gICAgICAgIHJ4QmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnhCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpy
eUF0dHIpCi0gICAgICAgIHJ5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKKyAgICAgICAgcnlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCi0gICAgICAg
IHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQotICAgICAgICBoZWlnaHRC
YXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwotICAgIGVsc2UKLSAg
ICB7Ci0gICAgICAgIGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0
dXJuOwotICAgICAgICBpZihTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KSByZXR1cm47Ci0gICAgICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgp
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKFNWR1Rl
c3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwogICAgIH0KIH0KIAogUGF0aCBTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0
CiB7Ci0gICAgZmxvYXQgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJhc2VWYWx1
ZSgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVl
KCksIF9oZWlnaHQgPSBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBGbG9hdFJlY3Qg
cmVjdCh4KCktPnZhbHVlKCksIHkoKS0+dmFsdWUoKSwgd2lkdGgoKS0+dmFsdWUoKSwgaGVpZ2h0
KCktPnZhbHVlKCkpOwogCi0gICAgYm9vbCBoYXNSeCA9IGhhc0F0dHJpYnV0ZShTdHJpbmcoInJ4
IikuaW1wbCgpKTsKLSAgICBib29sIGhhc1J5ID0gaGFzQXR0cmlidXRlKFN0cmluZygicnkiKS5p
bXBsKCkpOwotICAgIGlmKGhhc1J4IHx8IGhhc1J5KQotICAgIHsKLSAgICAgICAgZmxvYXQgX3J4
ID0gaGFzUnggPyByeEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogcnlCYXNlVmFsdWUoKS0+dmFsdWUo
KTsKLSAgICAgICAgZmxvYXQgX3J5ID0gaGFzUnkgPyByeUJhc2VWYWx1ZSgpLT52YWx1ZSgpIDog
cnhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIFBhdGg6OmNyZWF0ZVJvdW5k
ZWRSZWN0YW5nbGUoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSwgRmxvYXRTaXpl
KF9yeCwgX3J5KSk7CisgICAgYm9vbCBoYXNSeCA9IGhhc0F0dHJpYnV0ZSgicngiKTsKKyAgICBi
b29sIGhhc1J5ID0gaGFzQXR0cmlidXRlKCJyeSIpOworICAgIGlmIChoYXNSeCB8fCBoYXNSeSkg
eworICAgICAgICBmbG9hdCBfcnggPSBoYXNSeCA/IHJ4KCktPnZhbHVlKCkgOiByeSgpLT52YWx1
ZSgpOworICAgICAgICBmbG9hdCBfcnkgPSBoYXNSeSA/IHJ5KCktPnZhbHVlKCkgOiByeCgpLT52
YWx1ZSgpOworICAgICAgICByZXR1cm4gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShyZWN0
LCBGbG9hdFNpemUoX3J4LCBfcnkpKTsKICAgICB9CiAKLSAgICByZXR1cm4gUGF0aDo6Y3JlYXRl
UmVjdGFuZ2xlKEZsb2F0UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkpOworICAgIHJldHVy
biBQYXRoOjpjcmVhdGVSZWN0YW5nbGUocmVjdCk7CiB9CiAKIGNvbnN0IFNWR1N0eWxlZEVsZW1l
bnQgKlNWR1JlY3RFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRF
bGVtZW50ICpjb250ZXh0KQogewogICAgIC8vIEFsbCBhdHRyaWJ1dGUncyBjb250ZXh0cyBhcmUg
ZXF1YWwgKHNvIGp1c3QgdGFrZSB0aGUgb25lIGZyb20gJ3gnKS4KLSAgICBjb25zdCBTVkdTdHls
ZWRFbGVtZW50ICpyZXN0b3JlID0geEJhc2VWYWx1ZSgpLT5jb250ZXh0KCk7CisgICAgY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9yZSA9IHgoKS0+Y29udGV4dCgpOwogCi0gICAgeEJhc2VW
YWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHlCYXNlVmFsdWUoKS0+c2V0Q29udGV4
dChjb250ZXh0KTsKLSAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwot
ICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHgoKS0+c2V0
Q29udGV4dChjb250ZXh0KTsKKyAgICB5KCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgd2lk
dGgoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBoZWlnaHQoKS0+c2V0Q29udGV4dChjb250
ZXh0KTsKICAgICAKICAgICBTVkdTdHlsZWRFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChj
b250ZXh0KTsKICAgICByZXR1cm4gcmVzdG9yZTsKQEAgLTExOCwxMiArMTE4LDEyIEBAIGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQgKlNWR1JlY3RFbGVtZW50OjoKIAogYm9vbCBTVkdSZWN0RWxlbWVu
dDo6aGFzUGVyY2VudGFnZVZhbHVlcygpIGNvbnN0CiB7Ci0gICAgaWYgKHhCYXNlVmFsdWUoKS0+
dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UgfHwKLSAg
ICAgICAgeUJhc2VWYWx1ZSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZ
UEVfUEVSQ0VOVEFHRSB8fAotICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT51bml0VHlwZSgpID09
IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAotICAgICAgICBoZWlnaHRC
YXNlVmFsdWUoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNF
TlRBR0UgfHwKLSAgICAgICAgcnhCYXNlVmFsdWUoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6
OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UgfHwKLSAgICAgICAgcnlCYXNlVmFsdWUoKS0+dW5p
dFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpCisgICAgaWYg
KHgoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0Ug
fHwKKyAgICAgICAgeSgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVf
UEVSQ0VOVEFHRSB8fAorICAgICAgICB3aWR0aCgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6
U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAorICAgICAgICBoZWlnaHQoKS0+dW5pdFR5cGUo
KSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UgfHwKKyAgICAgICAgcngo
KS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UgfHwK
KyAgICAgICAgcnkoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BF
UkNFTlRBR0UpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRl
eDoga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHU1ZHRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNCwxMCArMTA0LDEwIEBAIHZvaWQgU1ZHU1ZH
RWxlbWVudDo6c2V0Q29udGVudFN0eWxlVHlwZSgKIAogRmxvYXRSZWN0IFNWR1NWR0VsZW1lbnQ6
OnZpZXdwb3J0KCkgY29uc3QKIHsKLSAgICBkb3VibGUgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVl
KCk7Ci0gICAgZG91YmxlIF95ID0geUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAgIGRvdWJsZSB3
ID0gd2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKLSAgICBkb3VibGUgaCA9IGhlaWdodEJhc2VW
YWx1ZSgpLT52YWx1ZSgpOworICAgIGRvdWJsZSBfeCA9IHgoKS0+dmFsdWUoKTsKKyAgICBkb3Vi
bGUgX3kgPSB5KCktPnZhbHVlKCk7CisgICAgZG91YmxlIHcgPSB3aWR0aCgpLT52YWx1ZSgpOwor
ICAgIGRvdWJsZSBoID0gaGVpZ2h0KCktPnZhbHVlKCk7CiAgICAgUmVmUHRyPFNWR01hdHJpeD4g
dmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odywgaCk7CiAgICAgdmlld0JveC0+bWF0
cml4KCkubWFwKF94LCBfeSwgJl94LCAmX3kpOwogICAgIHZpZXdCb3gtPm1hdHJpeCgpLm1hcCh3
LCBoLCAmdywgJmgpOwpAQCAtMjE0LDE0ICsyMTQsMTQgQEAgdm9pZCBTVkdTVkdFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZQogICAgICAgICAgICAgYWRkU1ZHV2luZG93RXZlbnRMaXN0bmVy
KHpvb21FdmVudCwgYXR0cik7CiAgICAgfQogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnhBdHRyKSB7Ci0gICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUp
OwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikgewotICAg
ICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7Ci0gICAgICAgIHdpZHRoQmFz
ZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lkdGhC
YXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZSk7CiAgICAgICAgIGFkZENTU1Byb3Bl
cnR5KGF0dHIsIENTU19QUk9QX1dJRFRILCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKLSAgICAgICAgaGVpZ2h0QmFzZVZhbHVl
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZh
bHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShh
dHRyLCBDU1NfUFJPUF9IRUlHSFQsIHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
U1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpAQCAtMjMwLDEwICsyMzAsOCBA
QCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNW
R0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKLSAgICAgICAgICAg
IGlmIChyZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNWR0Nv
bnRhaW5lcio+KHJlbmRlcmVyKCkpLT5zZXRWaWV3Qm94KEZsb2F0UmVjdCh2aWV3Qm94QmFzZVZh
bHVlKCktPngoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT55KCksIHZpZXdCb3hCYXNlVmFsdWUoKS0+
d2lkdGgoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT5oZWlnaHQoKSkpOwotICAgICAgICB9CisgICAg
ICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpICYmIHJl
bmRlcmVyKCkpCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihy
ZW5kZXJlcigpKS0+c2V0Vmlld0JveChGbG9hdFJlY3Qodmlld0JveCgpLT54KCksIHZpZXdCb3go
KS0+eSgpLCB2aWV3Qm94KCktPndpZHRoKCksIHZpZXdCb3goKS0+aGVpZ2h0KCkpKTsKICAgICAg
ICAgaWYgKFNWR1pvb21BbmRQYW46OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zNDIsMTEgKzM0MCwxMSBAQCBTVkdNYXRyaXggKlNWR1NWR0Vs
ZW1lbnQ6OmdldENUTSgpIGNvbnN0CiAgICAgU1ZHTWF0cml4ICptYXQgPSBjcmVhdGVTVkdNYXRy
aXgoKTsKICAgICBpZihtYXQpCiAgICAgewotICAgICAgICBtYXQtPnRyYW5zbGF0ZSh4QmFzZVZh
bHVlKCktPnZhbHVlKCksIHlCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CisgICAgICAgIG1hdC0+dHJh
bnNsYXRlKHgoKS0+dmFsdWUoKSwgeSgpLT52YWx1ZSgpKTsKIAogICAgICAgICBpZihhdHRyaWJ1
dGVzKCktPmdldE5hbWVkSXRlbShTVkdOYW1lczo6dmlld0JveEF0dHIpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0gdmlld0JveFRvVmlld1RyYW5z
Zm9ybSh3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUo
KSk7CisgICAgICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0gdmlld0JveFRvVmll
d1RyYW5zZm9ybSh3aWR0aCgpLT52YWx1ZSgpLCBoZWlnaHQoKS0+dmFsdWUoKSk7CiAgICAgICAg
ICAgICBtYXQtPm11bHRpcGx5KHZpZXdCb3guZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MzU5LDExICszNTcsMTEgQEAgU1ZHTWF0cml4ICpTVkdTVkdFbGVtZW50OjpnZXRTY3JlZW5DVE0o
KQogICAgIFNWR01hdHJpeCAqbWF0ID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6Z2V0U2Ny
ZWVuQ1RNKCk7CiAgICAgaWYobWF0KQogICAgIHsKLSAgICAgICAgbWF0LT50cmFuc2xhdGUoeEJh
c2VWYWx1ZSgpLT52YWx1ZSgpLCB5QmFzZVZhbHVlKCktPnZhbHVlKCkpOworICAgICAgICBtYXQt
PnRyYW5zbGF0ZSh4KCktPnZhbHVlKCksIHkoKS0+dmFsdWUoKSk7CiAKICAgICAgICAgaWYoYXR0
cmlidXRlcygpLT5nZXROYW1lZEl0ZW0oU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkKICAgICAgICAg
ewotICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdU
cmFuc2Zvcm0od2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgaGVpZ2h0QmFzZVZhbHVlKCktPnZh
bHVlKCkpOworICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gdmlld0JveCA9IHZpZXdCb3hU
b1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+dmFsdWUoKSwgaGVpZ2h0KCktPnZhbHVlKCkpOwogICAg
ICAgICAgICAgbWF0LT5tdWx0aXBseSh2aWV3Qm94LmdldCgpKTsKICAgICAgICAgfQogICAgIH0K
QEAgLTM3NiwxNSArMzc0LDE1IEBAIFJlbmRlck9iamVjdCogU1ZHU1ZHRWxlbWVudDo6Y3JlYXRl
UmVuZGUKICAgICBSZW5kZXJTVkdDb250YWluZXIgKnJvb3RDb250YWluZXIgPSBuZXcgKGFyZW5h
KSBSZW5kZXJTVkdDb250YWluZXIodGhpcyk7CiAKICAgICAvLyBGSVhNRTogYWxsIHRoaXMgc2V0
dXAgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgYXR0cmlidXRlc0NoYW5nZWQsIG5vdCBoZXJlLgotICAg
IGZsb2F0IF94ID0geEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF95ID0geUJhc2VW
YWx1ZSgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCktPnZh
bHVlKCk7Ci0gICAgZmxvYXQgX2hlaWdodCA9IGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwor
ICAgIGZsb2F0IF94ID0geCgpLT52YWx1ZSgpOworICAgIGZsb2F0IF95ID0geSgpLT52YWx1ZSgp
OworICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX2hlaWdo
dCA9IGhlaWdodCgpLT52YWx1ZSgpOwogCiAgICAgcm9vdENvbnRhaW5lci0+c2V0Vmlld3BvcnQo
RmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSk7Ci0gICAgcm9vdENvbnRhaW5lci0+
c2V0Vmlld0JveChGbG9hdFJlY3Qodmlld0JveEJhc2VWYWx1ZSgpLT54KCksIHZpZXdCb3hCYXNl
VmFsdWUoKS0+eSgpLCB2aWV3Qm94QmFzZVZhbHVlKCktPndpZHRoKCksIHZpZXdCb3hCYXNlVmFs
dWUoKS0+aGVpZ2h0KCkpKTsKLSAgICByb290Q29udGFpbmVyLT5zZXRBbGlnbihLQ0FsaWduKHBy
ZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+YWxpZ24oKSAtIDEpKTsKLSAgICByb290Q29u
dGFpbmVyLT5zZXRTbGljZShwcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPm1lZXRPclNs
aWNlKCkgPT0gU1ZHX01FRVRPUlNMSUNFX1NMSUNFKTsKKyAgICByb290Q29udGFpbmVyLT5zZXRW
aWV3Qm94KEZsb2F0UmVjdCh2aWV3Qm94KCktPngoKSwgdmlld0JveCgpLT55KCksIHZpZXdCb3go
KS0+d2lkdGgoKSwgdmlld0JveCgpLT5oZWlnaHQoKSkpOworICAgIHJvb3RDb250YWluZXItPnNl
dEFsaWduKEtDQWxpZ24ocHJlc2VydmVBc3BlY3RSYXRpbygpLT5hbGlnbigpIC0gMSkpOworICAg
IHJvb3RDb250YWluZXItPnNldFNsaWNlKHByZXNlcnZlQXNwZWN0UmF0aW8oKS0+bWVldE9yU2xp
Y2UoKSA9PSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0UpOwogICAgIAogICAgIHJldHVybiByb290Q29u
dGFpbmVyOwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjI2MCkKKysrIGtz
dmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEyICs0Miwx
MiBAQCBTVkdUUmVmRWxlbWVudDo6flNWR1RSZWZFbGVtZW50KCkKIAogdm9pZCBTVkdUUmVmRWxl
bWVudDo6dXBkYXRlUmVmZXJlbmNlZFRleHQoKQogewotICAgIFN0cmluZyB0YXJnZXRJZCA9IFNW
R1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KFN0cmluZyhocmVmQmFzZVZhbHVlKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKSk7CisgICAgU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRU
YXJnZXQoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgRWxlbWVudCAqdGFyZ2V0RWxl
bWVudCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQuaW1wbCgpKTsK
ICAgICBTVkdFbGVtZW50ICp0YXJnZXQgPSBzdmdfZHluYW1pY19jYXN0KHRhcmdldEVsZW1lbnQp
OwogICAgIGlmICh0YXJnZXQpIHsKICAgICAgICAgRXhjZXB0aW9uQ29kZSBpZ25vcmUgPSAwOwot
ICAgICAgICBzZXRUZXh0Q29udGVudCh0YXJnZXQtPnRleHRDb250ZW50KCkuaW1wbCgpLCBpZ25v
cmUpOworICAgICAgICBzZXRUZXh0Q29udGVudCh0YXJnZXQtPnRleHRDb250ZW50KCksIGlnbm9y
ZSk7CiAgICAgfQogfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHVGVzdHMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtzdmcyL3N2Zy9TVkdUZXN0cy5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3Zn
L1NWR1Rlc3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNyBAQCBib29sIFNWR1Rl
c3RzOjpoYXNFeHRlbnNpb24oU3RyaW5nSW1wbCAqCiBib29sIFNWR1Rlc3RzOjppc1ZhbGlkKCkg
Y29uc3QKIHsKICAgICBTVkdTdHJpbmdMaXN0ICpsaXN0ID0gcmVxdWlyZWRGZWF0dXJlcygpOwot
ICAgIGZvcih1bnNpZ25lZCBsb25nIGkgPSAwO2kgPCBsaXN0LT5udW1iZXJPZkl0ZW1zKCk7aSsr
KQotICAgIHsKKyAgICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7aSA8IGxpc3QtPm51bWJlck9m
SXRlbXMoKTtpKyspIHsKICAgICAgICAgU3RyaW5nIHZhbHVlID0gU3RyaW5nKGxpc3QtPmdldEl0
ZW0oaSkpOwogICAgICAgICBpZih2YWx1ZS5pc0VtcHR5KCkgfHwgIURPTUltcGxlbWVudGF0aW9u
OjppbnN0YW5jZSgpLT5oYXNGZWF0dXJlKHZhbHVlLCBTdHJpbmcoKSkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkocmV2aXNp
b24gMTYyNjApCisrKyBrc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6c2Vs
ZWN0U3ViU3RyCiB2b2lkIFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIC8vaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6bGVuZ3RoQWRqdXN0QXR0cikKLSAgICAvLyAgICB4QmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAvLyAgICB4QmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUpOwogICAgIC8vZWxzZQogICAgIHsKICAgICAgICAgaWYgKFNWR1Rl
c3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKSW5kZXg6IGtzdmcyL3N2Zy9TVkdVUklS
ZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3Bw
CShyZXZpc2lvbiAxNjI2MCkKKysrIGtzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgi
CiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogCi11c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK25hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHVVJJUmVmZXJlbmNlOjpTVkdVUklSZWZlcmVu
Y2UoKQogewpAQCAtNDYsNyArNDYsNyBAQCBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19X
SVRIX0NPTlRFCiBib29sIFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkubWF0Y2hlcyhYTGlu
a05hbWVzOjpocmVmQXR0cikpIHsKLSAgICAgICAgc2V0SHJlZkJhc2VWYWx1ZShhdHRyLT52YWx1
ZSgpLmltcGwoKSk7CisgICAgICAgIHNldEhyZWZCYXNlVmFsdWUoYXR0ci0+dmFsdWUoKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTUsMjIgKzU1LDIwIEBAIGJvb2wgU1ZH
VVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnUKIAogRGVwcmVjYXRlZFN0cmluZyBTVkdV
UklSZWZlcmVuY2U6OmdldFRhcmdldChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ1cmwpCiB7Ci0g
ICAgaWYodXJsLnN0YXJ0c1dpdGgoInVybCgiKSkgLy8gVVJJIFJlZmVyZW5jZXMsIGllLiBmaWxs
OnVybCgjdGFyZ2V0KQotICAgIHsKKyAgICBpZiAodXJsLnN0YXJ0c1dpdGgoInVybCgiKSkgeyAv
LyBVUkkgUmVmZXJlbmNlcywgaWUuIGZpbGw6dXJsKCN0YXJnZXQpCiAgICAgICAgIHVuc2lnbmVk
IGludCBzdGFydCA9IHVybC5maW5kKCcjJykgKyAxOwogICAgICAgICB1bnNpZ25lZCBpbnQgZW5k
ID0gdXJsLmZpbmRSZXYoJyknKTsKIAogICAgICAgICByZXR1cm4gdXJsLm1pZChzdGFydCwgZW5k
IC0gc3RhcnQpOwotICAgIH0KLSAgICBlbHNlIGlmKHVybC5maW5kKCcjJykgPiAtMSkgLy8gZm9y
bWF0IGlzICN0YXJnZXQKLSAgICB7CisgICAgfSBlbHNlIGlmICh1cmwuZmluZCgnIycpID4gLTEp
IHsgLy8gZm9ybWF0IGlzICN0YXJnZXQKICAgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0ID0gdXJs
LmZpbmQoJyMnKSArIDE7CiAgICAgICAgIHJldHVybiB1cmwubWlkKHN0YXJ0LCB1cmwubGVuZ3Ro
KCkgLSBzdGFydCk7Ci0gICAgfQotICAgIGVsc2UgLy8gTm9ybWFsIFJlZmVyZW5jZSwgaWUuIHN0
eWxlPSJjb2xvci1wcm9maWxlOmNoYW5nZUNvbG9yIgorICAgIH0gZWxzZSAvLyBOb3JtYWwgUmVm
ZXJlbmNlLCBpZS4gc3R5bGU9ImNvbG9yLXByb2ZpbGU6Y2hhbmdlQ29sb3IiCiAgICAgICAgIHJl
dHVybiB1cmw7CiB9CiAKK30KKwogLy8gdmltOnRzPTQ6bm9ldAogI2VuZGlmIC8vIFNWR19TVVBQ
T1JUCiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjYwKQorKysga3N2ZzIvc3Zn
L1NWR1VzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw0MyArNjgsNDUgQEAgdm9p
ZCBTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZQogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIAogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQot
ICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAg
ICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lkdGhCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCi0gICAgICAgIGhlaWdodEJhc2VWYWx1ZSgp
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1
ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYoU1ZH
VGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47Ci0gICAgICAgIGlmKFNW
R0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKLSAgICAgICAg
aWYoU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cikpIHJldHVybjsKLSAgICAgICAgaWYoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkgcmV0dXJuOworICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoU1ZHTGFuZ1Nw
YWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoU1ZHVVJJUmVmZXJl
bmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogICAgIH0KIH0KIAogdm9pZCBTVkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkK
IHsKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmQmFzZVZhbHVlKCkpLmRl
cHJlY2F0ZWRTdHJpbmcoKTsKLSAgICBTdHJpbmcgdGFyZ2V0SWQgPSBTVkdVUklSZWZlcmVuY2U6
OmdldFRhcmdldChyZWYpOwotICAgIEVsZW1lbnQgKnRhcmdldEVsZW1lbnQgPSBvd25lckRvY3Vt
ZW50KCktPmdldEVsZW1lbnRCeUlkKHRhcmdldElkLmltcGwoKSk7CisgICAgU3RyaW5nIHRhcmdl
dElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoaHJlZigpLmRlcHJlY2F0ZWRTdHJpbmco
KSk7CisgICAgRWxlbWVudCAqdGFyZ2V0RWxlbWVudCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxl
bWVudEJ5SWQodGFyZ2V0SWQpOwogICAgIFNWR0VsZW1lbnQgKnRhcmdldCA9IHN2Z19keW5hbWlj
X2Nhc3QodGFyZ2V0RWxlbWVudCk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgeworICAgIGlmICgh
dGFyZ2V0KSB7CiAgICAgICAgIC8vZG9jdW1lbnQoKS0+YWRkRm9yd2FyZFJlZmVyZW5jZSh0aGlz
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZsb2F0IF94ID0geEJhc2VWYWx1ZSgp
LT52YWx1ZSgpLCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfdyA9IHdp
ZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIF9oID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCk7
CisgICAgZmxvYXQgX3ggPSB4KCktPnZhbHVlKCksIF95ID0geSgpLT52YWx1ZSgpOworICAgIGZs
b2F0IF93ID0gd2lkdGgoKS0+dmFsdWUoKSwgX2ggPSBoZWlnaHQoKS0+dmFsdWUoKTsKICAgICAK
ICAgICBTdHJpbmcgd1N0cmluZyA9IFN0cmluZzo6bnVtYmVyKF93KTsKICAgICBTdHJpbmcgaFN0
cmluZyA9IFN0cmluZzo6bnVtYmVyKF9oKTsKICAgICAKICAgICBFeGNlcHRpb25Db2RlIGVjOwog
ICAgIFN0cmluZyB0cmFucyA9IFN0cmluZzo6c3ByaW50ZigidHJhbnNsYXRlKCVmLCAlZikiLCBf
eCwgX3kpOwotICAgIGlmKHRhcmdldC0+aGFzVGFnTmFtZShTVkdOYW1lczo6c3ltYm9sVGFnKSkg
eworICAgIGlmICh0YXJnZXQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnN5bWJvbFRhZykpIHsKICAg
ICAgICAgUmVmUHRyPFNWR0VsZW1lbnQ+IGR1bW15ID0gbmV3IFNWR1NWR0VsZW1lbnQoU1ZHTmFt
ZXM6OnN2Z1RhZywgZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmIChfdyA+IDApCiAgICAgICAgICAg
ICBkdW1teS0+c2V0QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIsIHdTdHJpbmcpOwpAQCAt
MTIzLDE1ICsxMjUsMTUgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkKICAg
ICAgICAgCiAgICAgICAgIGFwcGVuZENoaWxkKGR1bW15MiwgZWMpOwogICAgICAgICBkdW1teTIt
PmFwcGVuZENoaWxkKGR1bW15LCBlYyk7Ci0gICAgfSBlbHNlIGlmKHRhcmdldC0+aGFzVGFnTmFt
ZShTVkdOYW1lczo6c3ZnVGFnKSkgeworICAgIH0gZWxzZSBpZiAodGFyZ2V0LT5oYXNUYWdOYW1l
KFNWR05hbWVzOjpzdmdUYWcpKSB7CiAgICAgICAgIFJlZlB0cjxTVkdEdW1teUVsZW1lbnQ+IGR1
bW15ID0gbmV3IFNWR0R1bW15RWxlbWVudChTVkdOYW1lczo6Z1RhZywgZG9jdW1lbnQoKSk7CiAg
ICAgICAgIGR1bW15LT5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIsIHRyYW5z
KTsKICAgICAgICAgCiAgICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiByb290ID0gc3RhdGljX3Bv
aW50ZXJfY2FzdDxTVkdFbGVtZW50Pih0YXJnZXQtPmNsb25lTm9kZSh0cnVlKSk7Ci0gICAgICAg
IGlmKGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKKyAgICAgICAgaWYgKGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyKSkKICAgICAgICAgICAgIHJvb3QtPnNldEF0dHJp
YnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyLCB3U3RyaW5nKTsKICAgICAgICAgICAgIAotICAgICAg
ICBpZihoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKQorICAgICAgICBpZiAoaGFz
QXR0cmlidXRlKFNWR05hbWVzOjpoZWlnaHRBdHRyKSkKICAgICAgICAgICAgIHJvb3QtPnNldEF0
dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgaFN0cmluZyk7CiAgICAgICAgICAgICAKICAg
ICAgICAgYXBwZW5kQ2hpbGQoZHVtbXksIGVjKTsK
</data>
<flag name="review"
          id="3358"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>