<?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>159699</bug_id>
          
          <creation_ts>2016-07-12 17:29:01 -0700</creation_ts>
          <short_desc>Get rid of the color profile from ImageFrame and ImageDecoder</short_desc>
          <delta_ts>2016-09-08 14:18:42 -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>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>159679</dependson>
          <blocked>155322</blocked>
    
    <blocked>159721</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1210271</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 17:29:01 -0700</bug_when>
    <thetext>The color profile is not used by the non-CG ImageFrame and ImageDecoder. There are FIXME comments regarding the removal of the color profile from our code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210272</commentid>
    <comment_count>1</comment_count>
      <attachid>283477</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 17:30:05 -0700</bug_when>
    <thetext>Created attachment 283477
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210298</commentid>
    <comment_count>2</comment_count>
      <attachid>283484</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 18:18:28 -0700</bug_when>
    <thetext>Created attachment 283484
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227715</commentid>
    <comment_count>3</comment_count>
      <attachid>288307</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-08 12:49:51 -0700</bug_when>
    <thetext>Created attachment 288307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227805</commentid>
    <comment_count>4</comment_count>
      <attachid>288307</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 14:18:38 -0700</bug_when>
    <thetext>Comment on attachment 288307
Patch

Clearing flags on attachment: 288307

Committed r205661: &lt;http://trac.webkit.org/changeset/205661&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1227806</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-08 14:18:42 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283477</attachid>
            <date>2016-07-12 17:30:05 -0700</date>
            <delta_ts>2016-09-08 12:49:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159699-20160712172922.patch</filename>
            <type>text/plain</type>
            <size>151720</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uMWNlMTgzMzFkMDRlNGFiZmFkYTRkZWRiMzI5YWVk
ZTIzNWRhMTIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0OCBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIEdldCBy
aWQgb2YgdGhlIGNvbG9yIHByb2ZpbGUgZnJvbSBJbWFnZUZyYW1lIGFuZCBJbWFnZURlY29kZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTY5OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OnNldENvbG9yUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnJlYWRDb2xvclByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlBFR0lt
YWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pw
ZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVhZENvbG9yUHJv
ZmlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmhlYWRl
ckF2YWlsYWJsZSk6IERlbGV0ZWQuCisKKzIwMTYtMDctMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8
c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCB0aGUgcGl4ZWwgZGF0YSBv
ZiBJbWFnZUZyYW1lIHRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1bGF0aW9u
IHBhcnQgaW4gSW1hZ2VGcmFtZSBpbnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgYW5kIHRo
ZW4gbWFrZSBpdCBvcHRpb25hbCAoYWxsb2NhdGVkIG9uIGRlbWFuZCkuCisKKyAgICAgICAgKiBD
TWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQ
bGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBQaXhlbHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBQaXhlbHM6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OkJp
dG1hcFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OndpZHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6
OmF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y2xlYXIpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwUGl4ZWxzOjpyZXBlYXRGaXJzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhl
bHM6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpvdmVyUkdCQSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmluQm91bmRzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptdWx0aXBseTI1
NSk6CisgICAgICAgIChXZWJDb3JlOjpkaXZpZGUyNTUpOgorICAgICAgICAoV2ViQ29yZTo6ZGl2
aWRlQ2VpbCk6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6CisgICAg
ICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6
Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVtdWx0
aXBsaWVkUkdCQSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZURhdGE6OnBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
RGF0YTo6aGFzUGl4ZWxzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0b3I9KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OnNldFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Zml4UG9pbnRVbnNpZ25lZE11
bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmRpdmlkZTI1
NSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpkZWNvZGVC
TVApOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVs
c0NhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcFBpeGVsczo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZy
YW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJh
bWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0JBKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKworMjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxh
d2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIFJlbmFtZSBGcmFtZURhdGEg
dG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBhcmF0ZSBmaWxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0NDQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEltYWdlRnJhbWVE
YXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2FjaGVkIGJ5IEltYWdlU291cmNl
CisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5IEJpdG1hcEltYWdlLiBNYWtl
IHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAgICAgICAgYmUgcHJpdmF0ZSBh
bmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4KKworICAgICAgICBObyBuZXcg
dGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZW5z
dXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJ
bWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXNDb21w
bGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRp
b25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhh
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmllbnRhdGlv
bkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29s
aWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aXNBbG1vc3RTb2xpZENv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNl
OjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ltYWdlRnJhbWVEYXRh
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFt
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZyYW1lRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVE
YXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpmcmFtZUJ5dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNBbHBo
YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRhKToKKworMjAxNi0wNi0yNCAg
U2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIElu
dHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBlciBmb3IgTmF0aXZl
SW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBpcyB0byBtb3ZlIHRoZSBwbGF0
Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9tIEJpdG1hcEltYWdlIHRvIFBs
YXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2libGUgb2YgCisgICAgICAgIGRy
YXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1hZ2VQdHIgcXVlc3Rpb25zIHdo
ZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFpbGFibGUuIEFwYXJ0IGZyb20g
ZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMgd2lsbCBiZQorICAgICAgICBj
YWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0YSBzbyB3ZSB3aWxsIGtlZXAg
ZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRyLiBCdXQgd2Ugd2lsbCBjYXN0
IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdoZW4KKyAgICAgICAgYSBwbGF0
Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0
cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBQ
bGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAg
ICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgor
ICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgor
ICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOgor
ICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAgICgtW1dl
YlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJnaW46b2Zm
c2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6
OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJh
bWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcyk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1l
RGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggZmFsc2Ug
YmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdlOjpmcmFt
ZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFkYXRhLgor
ICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQgaW4gQml0
bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpjYWNoZUZy
YW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRG
aXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6
OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNOaWwp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDogUmVuYW1lZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8u
Y3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUlt
YWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1J
bWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1h
Z2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNp
bmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpp
c0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZpZXcuY3BwIHNpbmNlIFBsYXRm
b3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3MgdG8uCisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTogUmV0dXJucyB0aGUgc3ViLXNh
bXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxpbmcuCisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0VElG
RlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6CisgICAgICAgICogcGxhdGZv
cm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJ
bWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBTcGVlY2ggU3ludGhlc2lzOiBnZXR0aW5nIGxpc3Qgb2Ygdm9pY2VzIG5v
IGxvbmdlciB3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGMxYmMwYmJkZTM2MTI1YzQ2MmJmNDgx
ZGRhZDVkZDJmODI3ZDUyMzkuLjE4ZDFlYmViZWU5MjBiMmYyOWVmMzI4NzdkZWQyZTFlY2ZmOTdk
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxNi0wNy0xMSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIEludHJvZHVj
ZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQ
dHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODY4
NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWlz
Yy9XZWJDYWNoZS5tbToKKyAgICAgICAgKCtbV2ViQ2FjaGUgaW1hZ2VGb3JVUkw6XSk6CisKIDIw
MTYtMDctMTEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgc3ludGhldGljIGNsaWNrIG9yaWdpbiB0byBXS05hdmlnYXRpb25BY3Rpb24uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3YzUzMzVkMmNkNThlNzk2MTUzMzVjNTAyYy4uZjFmMTY3MjU4
NGMwZWU4MTg1OGE3ZTk2NTUzYWNkOWNkMGFjNmZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1
IEBACisyMDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxj
b20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3
cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5j
cHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1hZ2VGb3JVUkwpOgorICAgICAg
ICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKToKKyAgICAgICAgSXQg
d2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVzZXMgQml0bWFwSW1hZ2U6Omdl
dENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJ
bWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAorICAgICAgICBWZWN0b3I8TmF0
aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAgICAgICAKKyAgICAgICAgKiBV
SVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tD
b250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6
XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQpOgorICAgICAg
ICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29saWRDb2xvciB0byBQbGF0Zm9y
bUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0wNy0xMSAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lPU10gSW50ZXJtaXR0ZW50IGNy
YXNoIGluIFtVSUFwcGxpY2F0aW9uIGJlZ2luQmFja2dyb3VuZFRhc2tXaXRoTmFtZV0gZXhwaXJh
dGlvbiBoYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3OGIwNDJiMTA0MDFlMWY0ZWUz
YTJhYjFhMDUyYzIxOGMzYTExZTMuLjIyNmVjOWI4NGU3MjJmZmYzZTJmMDRkY2U3ZGI3MGUzZGQ0
YjgzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjI2LDYgKzIyMjYsNyBAQCBzZXQoV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNPVlRUQ3VlLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1ZmY5OTFmZjdkYTMwOGJiOTE4
MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5MDU4MjUwOTJhYTM4YTc4YzEx
ZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtl
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTU1LDcgKzU1
LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JD
Ry5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03NSw2ICs3NCw3IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3Vt
ZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VD
YWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlv
bk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDUxNDUwNGU2ZWMy
NWFhNWU0M2I5OTM5OGQ1ZTM1Y2VlZWE3NjZhYTQuLjY0YWUxNzEwODlkY2JmMGNkNDViNzBhOWI4
ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xMjIsNyArMTIy
LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
UGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2lu
Z1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9C
aXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRp
bGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTM0
LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
YXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUGF0aENhaXJvLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCkBAIC0xNzks
OSArMTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy94
MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBF
R0ltYWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRt
YXBQaXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0lt
YWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFn
ZUVuY29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2VmbC9OZXR3b3JrU3RhdGVOb3Rp
ZmllckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21h
a2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA2NDVhZGQxY2UzODg4
OGIwNGQ0YTJkODlhZGEwYTdjNmRlMTk5ODZiLi5kMzFmNTcwNmE2OTU5YjIzMWI1YmZiMjJmMDdk
MTg0M2FlODYxYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTAxLDcgKzEwMSw2
IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEuY3BwCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
bG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8u
Y3BwCkBAIC0xMTUsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0
Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Q
YXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5j
cHAKQEAgLTE0OSw3ICsxNDksNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAgIHBsYXRmb3JtL2d0ay9Vc2Vy
QWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURl
Y29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQ
aXhlbHNDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNz
b3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCA5
ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4NGFjMGFhOWRlYTU1YTAyMzdiLi40ZGRlZDMwODhmNGYzOTZm
ZWY0NDRlN2VlNjVjNjQxMDY1OGY1ODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAt
Mzk3LDcgKzM5Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0KICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXllci5tbQogCi0gICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTQxNyw2ICs0MTYs
NyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJh
bnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21h
a2UKaW5kZXggMmM1NTNiMDU1MWRhZDY5YWExOTlkOTYwZjU1MjM0M2Q5MjBmMDdiMy4uMzQyYWE5
MjczMmZkOGY5MmU4NWNmYTYyNmQ1NTU3MGVmNjZiNmE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bVdpbkNhaXJvLmNtYWtlCkBAIC0yMSw3ICsyMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJv
VXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJv
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTM0LDYg
KzMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRl
cm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRD
YWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTQ2LDcgKzQ2
LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKIAotICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0v
bmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzExYmM0N2U1Y2Fk
NjMwYTM2NTdjZGUxYWQ5ZjdiNzZhMGE1NWM2Ni4uZmYyYTQ5OGJhOTZiODFkYTAzZjgxYTMwMWE4
NWJlMzc0ZDBlYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAKIAkJMzc1Q0QyMzIxMTlENDND
ODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24u
aCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc2RENDRTAxM0I0Rjk2
NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdE
RTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3Zlcmxh
cFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNB
OEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovOyB9OworCQkzNzdBM0E5
MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAv
KiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMyMzBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkx
OUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4NUVGMzkwMEY0QjY2MSAvKiBD
cmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzMjUsMTAgKzIz
MjUsMTQgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5n
c0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUY3NjZB
MTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OwogCQk1M0VGNzY2QzE2
NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEw
MDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1NTA0RTRDQjFEMzU1N0IyMDBG
RTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTUwQTBC
QzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8q
IFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyog
UXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NTVCODdFQzFDQUFG
MEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdl
RGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdl
RGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLzsgfTsKKwkJ
NTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0
QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJNTVDQkE2QTExRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRh
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1Q0JB
NjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi87IH07CisJCTU1Q0JB
NkEyMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVDQkE2QTAxRDFERjJFMTAwNDUxODYwIC8q
IEltYWdlRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzJBN0YyMDFD
NkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsgfTsKIAkJNTcyQTdGMjMxQzZF
NUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11
bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU3RUY1RTYwMUQyMEM4MzkwMDE3MUU2MCAvKiBUZXh0
Q29kZWNSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTdFRjVFNUYxRDIwQzgzOTAwMTcxRTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50
LmggKi87IH07CkBAIC05MDYxLDcgKzkwNjUsNyBAQAogCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJF
RkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
ZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3MkIwOTUxNjUzNTg1
NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3ZlcmxhcFRlc3RSZXF1
ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTM3N0EzQThGMTVFRkNF
OUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VDRy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQ
b3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5
MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyZWRlbnRpYWxCYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTg5LDEwICs5OTkzLDE0IEBACiAJCTUzRUQz
RkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnRlcm5hbFNldHRpbmdzR2Vu
ZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRDNGREQxNjdBODhF
NzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRp
bmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldHRpbmdzTWFj
cm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1MDRFNENBMUQzNTUzMkQwMEZF
NTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQml0bWFwUGl4ZWxzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBR
dWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1
M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2QTAxRDFERjJFMTAwNDUxODYwIC8qIElt
YWdlRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRnJh
bWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1RDQwOEY3MUE3QzYzMTgw
MEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3
MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMjQsNyArMjIwMzIsNiBAQAogCQlC
Mjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJ
bWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5j
cHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAg
Ki8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLywK
QEAgLTIyMDUxLDYgKzIyMDU4LDcgQEAKIAkJCQlBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyog
UGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9j
dW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRv
Y3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZv
cm1JbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0MEZCODE2NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1h
Z2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBGQjcxNjU1QzU5MTAwNDBGMjlFIC8q
IFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlCMjc1MzUyQTBCMDUzODE0MDAyQ0U2
NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8sCkBAIC0yMjExOCw2ICsyMjEyNiw3
IEBACiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlLmgg
Ki8sCiAJCQkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCAqLywK
IAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCAqLywKKwkJCQk1
NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggKi8sCiAJCQkJQ0RERTAy
RTkxOEIzREZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywKIAkJCQlCMjc1MzUzODBCMDUz
ODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0
RiAvKiBDb2xvci5oICovLApAQCAtMjIyMDIsNiArMjIyMTEsOCBAQAogCQkJCTQzRDI1OTc2MTND
ODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBCOTEwQjM4MThC
RDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJE
MTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2
MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi8sCisJCQkJNTVDQkE2QTAxRDFERjJFMTAwNDUxODYw
IC8qIEltYWdlRnJhbWVEYXRhLmggKi8sCiAJCQkJQkM3RjQ0QTcwQjlFMzI0RTAwQTlEMDgxIC8q
IEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0MzRjg5MDAxRkJBNDEgLyogSW1h
Z2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkNDMzc2MzAwMUZCQTQxIC8qIElt
YWdlT3JpZW50YXRpb24uaCAqLywKQEAgLTIyMjUxLDYgKzIyMjYyLDcgQEAKIAkJCQkyRDUwMDJG
QTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0
Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBE
NUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQ
bGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRm
b3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1N
ZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8q
IFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNjAxOCw2ICsyNjAzMCw3IEBACiAJCQkJODVF
NzExQjkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVtZW50SW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBFRSAvKiBET01IVE1MTWFycXVl
ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVBMEMwM0I3NDEwMDhCQjBFRSAv
KiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU3
NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJERUM2NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1MTWVkaWFFbGVtZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0NkEgLyogRE9NSFRNTE1lZGlh
RWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NUJBNEQxMzBBQTY4ODY4MDA4
ODA1MkQgLyogRE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI2NDU5LDYg
KzI2NDcyLDcgQEAKIAkJCQlEMzU5RDc4QTEyOUNBMjcxMDAwNkU1RDIgLyogSFRNTERldGFpbHNF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGQTBBMTkxNkRGMDBBOEVGNUYgLyog
SFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0I3MEExOTJC
OUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTVDQkE2
QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjcxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxEb2N1bWVu
dFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODM1OSw2ICsyODM3Myw3IEBACiAJCQkJQjIy
Mjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZVRyYW5z
Zm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk4MEQwMEJGMjIwMDcxQjc4
MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1NTA0RTRDQjFE
MzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzlE
MzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0b3J5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0
eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0MTEsNyArMjk0MjYsNyBAQAog
CQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1OSAvKiBCaXF1YWRQcm9jZXNz
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQyMzM4ODAwRDdDODAyIC8qIEJp
dG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVD
NyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTM3N0EzQTkwMTVFRkNF
OUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2
RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVE
RUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0yOTc3NCw2ICsyOTc4OSw3IEBACiAJCQkJMkUyRDk5RTgxMEUyQkMx
QzAwNDk2MzM3IC8qIERPTUJsb2IubW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEODBBOThD
NDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVB
Q0E5ODcwQTlCNTIwMzAwNjcxRTkwIC8qIERPTUNoYXJhY3RlckRhdGEubW0gaW4gU291cmNlcyAq
LywKKwkJCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODUwODlDREEwQTk4QzQyODAwQTI3NUFBIC8qIERPTUNvbW1lbnQu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCRTE0NUEwRjZDMDA5NjkwOEQgLyogRE9NQ29y
ZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NThDMzhBNjBBQThGMjA0MDBCMTg3
QTQgLyogRE9NQ291bnRlci5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpj
L0RPTS5tbQppbmRleCA0MDExZWEzZmQ4YzA0Njk3NGM1NWQ0OGUzOTZmMWI4M2I4MWYzMzVkLi5h
NWFjNGYwNWFlMzM5YThkNjQ3MDZjMTBmYzBmN2FmNDA0MjU2MjNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9vYmpjL0RPTS5tbQpAQCAtNjA2LDcgKzYwNiw3IEBAIC0gKHZvaWQpZ2V0UHJldmlld1Nu
YXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVjdHM6KE5TQXJyYXkgKiopcmVj
dHMKIAogICAgIGlmICh0ZXh0SW5kaWNhdG9yKSB7CiAgICAgICAgIGlmIChJbWFnZSogaW1hZ2Ug
PSB0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkKLSAgICAgICAgICAgICpjZ0ltYWdlID0g
KENHSW1hZ2VSZWYpQ0ZBdXRvcmVsZWFzZShDR0ltYWdlUmV0YWluKGltYWdlLT5nZXRDR0ltYWdl
UmVmKCkpKTsKKyAgICAgICAgICAgICpjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCkuYXV0
b3JlbGVhc2UoKTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJlY3RB
cnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KaW5kZXggMzY0YTlhODdj
ZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4NWFjZWNhM2M2Njk4ZGQxNTZh
YjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4
dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5k
aWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRX
aXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFRleHRJbmRp
Y2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9y
LT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
Y29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3NmYWRlKCpf
dGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+
Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIGNv
bnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgp
LT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0
SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBjb250
ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFnZSgp
OwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3VuY2VMYXllcnMgPSBhZG9wdE5T
KFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIHN0
YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3JlYXRlQm91bmNlQW5pbWF0aW9u
KENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+
IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24s
IFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAgUmV0YWluUHRyPENBQmFzaWNB
bmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlv
bldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29u
dGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPmdldENHSW1hZ2VSZWYo
KTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0
b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlv
biBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsKICAgICBbY3Jvc3NmYWRlQW5p
bWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNdOwogICAgIFtjcm9zc2ZhZGVB
bmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5kZXggNDYwZDFiODU2Yjc3Yjdj
ZjRlYzY4OTY1ODFiODMzZDNlN2Y5NzAxNC4uZmM2NDlkMTBhYWI5YzEzZmZmMjkzMDU1YTcwN2Ni
NzQ1Mzc0NjkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcApAQCAtNjgsMTUgKzY4LDEzIEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAs
IG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fYW5pbWF0aW9uRmluaXNoZWRXaGVuQ2F0
Y2hpbmdVcChmYWxzZSkKIHsKKyAgICBtX2ZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDEp
OworICAgIG1fZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGltYWdlKSk7CisgICAgCiAg
ICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdlIGNhbid0IGZpZ3VyZSBvdXQg
dGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3NpemVSZXNwZWN0aW5nT3JpZW50
YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mgbm90IDB4MC4KLSAgICBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRpdmVJbWFnZTo6c2l6ZShpbWFn
ZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gbV9zaXplID0gbV9mcmFtZXNb
MF0uc2l6ZSgpOwogICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUuYXJlYSgpICogNDsKLSAgICAK
LSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBOYXRp
dmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOwotICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRh
ID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RGTW92ZShpbWFnZSk7CiB9CiAK
IEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQpAQCAtMTA1LDcgKzEwMyw3IEBAIGJvb2wgQml0
bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgaWYgKGlu
ZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0
dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0u
aGFzSW1hZ2UoKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6aGFzU2luZ2xlU2VjdXJpdHlPcmln
aW4oKSBjb25zdApAQCAtMTI1LDkgKzEyMyw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lE
ZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIGZy
YW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0IHRyeWluZyB0bwogICAgICAg
ICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZlciBkYXRhKSwgc28gd2UgZG9u
J3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRhdGEuCi0gICAgICAgIHVuc2ln
bmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmICht
X2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCAr
PSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBtX2ZyYW1lc1tpXS5j
bGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpOwogICAgIH0KIAogICAgIG1f
c291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJhbWUsIGRhdGEoKSwgbV9hbGxE
YXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzE0Niw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ry
b3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBt
X2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBtX2Zy
YW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS5mcmFtZUJ5dGVzKCk7CiAKICAg
ICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKSB7CiAgICAgICAgIExP
RyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeSBk
ZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9JXUiLCB0aGlzLCBhbGxGcmFt
ZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0xNzcsNyArMTczLDcgQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVuc2lnbmVkIGZyYW1lQnl0ZXND
bGVhcmVkLCBDbGVhcmVkU28KICAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNo
YW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0NsZWFyZWQpKTsKIH0KIAotdm9p
ZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwg
c3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJhbWVDYWNoaW5nKQordm9pZCBC
aXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vi
c2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBz
aXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFTU0VSVChtX2RlY29kZWRTaXpl
ID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xODUsMjUgKzE4MSwxMiBAQCB2b2lkIEJpdG1h
cEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1w
bGluZ0xldmVsLCBJbQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFtZXMpCiAgICAg
ICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIGlmIChmcmFtZUNhY2hpbmcgPT0g
Q2FjaGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdl
ID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2
ZWwpOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2Ft
cGxpbmdMZXZlbDsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlvbiA9
IG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0gICAgbV9mcmFtZXNbaW5kZXhd
Lm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRl
ID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCk7CisgICAgbV9mcmFtZXNb
aW5kZXhdID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVEYXRhQXRJbmRleChpbmRleCwgc3Vic2FtcGxp
bmdMZXZlbCwgY2FjaGluZyk7CiAKLSAgICBpZiAocmVwZXRpdGlvbkNvdW50KGZhbHNlKSAhPSBj
QW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb24gPSBtX3Nv
dXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAgTE9HKEltYWdlcywgIkJpdG1h
cEltYWdlICVwIGNhY2hlRnJhbWUgJWx1ICglcyV1IGJ5dGVzLCBjb21wbGV0ZSAlZCkiLCB0aGlz
LCBpbmRleCwgY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgPyAi
bWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0uZnJhbWVCeXRlcygpLCBtX2Zy
YW1lc1tpbmRleF0uaXNDb21wbGV0ZSgpKTsKIAotICAgIG1fZnJhbWVzW2luZGV4XS5tX2hhc0Fs
cGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwotICAgIG1fZnJhbWVz
W2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5dGVzQXRJbmRleChpbmRleCwg
c3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAgY2Fj
aGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRlICVkKSIsIHRoaXMsIGluZGV4LCBmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBt
X2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzLCBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRl
KTsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkgewotICAgICAgICBpbnQgZGVs
dGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyk7Cisg
ICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKSB7CisgICAgICAgIGludCBkZWx0YUJ5
dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0uZnJhbWVCeXRlcygpKTsKICAgICAg
ICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAgICAvLyBUaGUgZnVsbHktZGVj
b2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGRhdGEgdXNlZAog
ICAgICAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGllcy4KQEAgLTI4OCwyMSArMjcx
LDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVk
KQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBuZXcgZGF0YSBoZXJlLiBUaHVz
IHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29tcGxldGUgZnJhbWVzIHRvIGJl
IHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQgPSAwOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIGZy
YW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9uJ3QgY2FsbCBmcmFtZUlzQ29t
cGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwogICAgICAgICAvLyBkZWNvZGUg
YW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAgICAgICAgLy8gY2xlYXJlZC1v
bi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9
IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLm1faGF2
ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUpCi0gICAgICAgICAgICBmcmFt
ZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFtZUJ5dGVzIDog
MCk7CisgICAgICAgIGlmIChmcmFtZS5oYXNNZXRhZGF0YSgpICYmICFmcmFtZS5pc0NvbXBsZXRl
KCkpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZS5jbGVhcihJbWFnZUZy
YW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgIH0KICAgICBkZXN0cm95TWV0YWRhdGFBbmRO
b3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6Ok5vKTsKICNlbHNlCiAgICAg
Ly8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9TPwogICAgIGludCBkZWx0YUJ5
dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBpbnQgYnl0
ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAg
IGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAg
ICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6ZSgpIC0gMV0uY2xlYXIoSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6OkVtcHR5KSkgewogICAgICAgICAgICAgZGVsdGFCeXRlcyAr
PSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9kZWNvZGVkUHJvcGVydGllc1Np
emU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7CkBAIC0zNjYsMTUg
KzM0NywxNSBAQCBib29sIEJpdG1hcEltYWdlOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVy
biBtX3NpemVBdmFpbGFibGU7CiB9CiAKLWJvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXND
YWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFtZUNhY2hpbmcpCitib29s
IEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCwgSW1hZ2VGcmFt
ZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6
ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lICYm
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBD
YWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKSkKLSAg
ICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNoaW5nKTsKKyAgICAgICAgfHwgKGNh
Y2hpbmcgPT0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UgJiYgIW1f
ZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZy
YW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNNZXRhZGF0
YSgpKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgY2FjaGluZyk7CiAKICAgICByZXR1
cm4gdHJ1ZTsKIH0KQEAgLTM4OCwxMCArMzY5LDkgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2MK
IAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdpdGggYSBoaWdoZXIgc3Vic2Ft
cGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwogICAgIC8vIHJlLWRlY29kZSB3
aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1f
ZnJhbWVzW2luZGV4XS5tX2ltYWdlICYmIHN1YnNhbXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRl
eF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAgaWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgp
ICYmIG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpICYmIHN1YnNhbXBsaW5nTGV2ZWwgPCBtX2Zy
YW1lc1tpbmRleF0uc3Vic2FtcGxpbmdMZXZlbCgpKSB7CiAgICAgICAgIC8vIElmIHRoZSBpbWFn
ZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBhIHNpemUsIHJlLWRlY29kZSBh
IGxhcmdlciB2ZXJzaW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRl
eF0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0uY2xlYXIodHJ1ZSk7Cisg
ICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4XS5jbGVhcihJbWFnZUZyYW1l
RGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7
CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsKICAgICAgICAgaWYgKGltYWdl
T2JzZXJ2ZXIoKSkKQEAgLTM5OSw0MCArMzc5LDcyIEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcElt
YWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNlbnRhdGlvblNj
CiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVkIGEgZnJhbWUgeWV0LCBkbyBz
by4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0u
bV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgQ2Fj
aGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwg
c3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1h
Z2UpOworCisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pbWFnZSgpOworfQorICAgIAorTmF0
aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gZnJh
bWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6
bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgY291
bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKTsKKyAg
ICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLnNpemUoKSA9PSBzaXplKQor
ICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAKKyAgICAvLyBGYWxsYmFjayB0
byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQor
ICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRy
IEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpCit7CisgICAgcmV0dXJu
IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30KIAotICAgIHJldHVybiBtX2Zy
YW1lc1tpbmRleF0ubV9pbWFnZTsKK1ZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gQml0bWFwSW1hZ2U6
OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBpbWFn
ZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGZy
YW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChpbWFnZSk7Cisg
ICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJh
bWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJh
bWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29t
cGxldGU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCk7CiB9CiAKIGZs
b2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0g
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisg
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0ubV9kdXJhdGlvbjsKLX0KLQotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgo
Y3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uZHVyYXRpb24oKTsK
IH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4
KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9u
bHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6
OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAobV9m
cmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5k
ZXhdLm1faGFzQWxwaGE7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNNZXRhZGF0YSgpKQor
ICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmhhc0FscGhhKCk7CiAKICAgICByZXR1cm4g
bV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNDQ0LDExICs0NTYs
MTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkKIAog
SW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6
ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVN
ZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VG
cmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIEltYWdlT3JpZW50
YXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAg
ICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlvbjsKKyAgICBpZiAobV9mcmFt
ZXNbaW5kZXhdLmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0u
b3JpZW50YXRpb24oKTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5vcmllbnRhdGlvbkF0SW5kZXgo
aW5kZXgpOwogfQpAQCAtNzAwLDE3ICs3MTIsNTYgQEAgQ29sb3IgQml0bWFwSW1hZ2U6OnNpbmds
ZVBpeGVsU29saWRDb2xvcigpCiAgICAgICAgIHJldHVybiBDb2xvcigpOwogICAgIAogICAgIEFT
U0VSVChtX2ZyYW1lcy5zaXplKCkpOwotICAgIG1fc29saWRDb2xvciA9IE5hdGl2ZUltYWdlOjpz
aW5nbGVQaXhlbFNvbGlkQ29sb3IobV9mcmFtZXNbMF0ubV9pbWFnZS5nZXQoKSk7CisgICAgbV9z
b2xpZENvbG9yID0gbV9mcmFtZXNbMF0uc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7CiAgICAgCiAg
ICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgp
OwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkKK3sKKyAg
ICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBlbnN1cmVGcmFtZUlzQ2FjaGVkKDApICYmIG1fZnJhbWVzWzBdLmlzQWxtb3N0U29saWRD
b2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0ZSgpCiB7CiAgICAg
cmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkgPiAxOwogfQogCit2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlv
bikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24o
RG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgorICAg
IAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7CisgICAgaWYgKGNv
bG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVz
dFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYXV0
byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBQbGF0Zm9ybUltYWdl
OjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0KSk7CisgICAgaWYg
KCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQu
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9u
KGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAgaWYgKGRlc2NyaXB0aW9uLnJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCisgICAg
ICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUp
OworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXcoY29udGV4dCwgZGVzdFJlY3Qs
IHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9uKTsKKyAgICAKKyAgICBpZiAo
aW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7
Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAog
ewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFkYWNmMDJiNmVkOGVlYWZlN2Rl
ZmQ2NmYwYzUuLjIyMThjODI0YjUyOGZkNjM5YmFiMTM4ZGVjYzk4Yjk4MTZhMTY4MWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMjgs
MTEgKzI4LDEzIEBACiAjaWZuZGVmIEJpdG1hcEltYWdlX2gKICNkZWZpbmUgQml0bWFwSW1hZ2Vf
aAogCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIklt
YWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVu
dGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgogCiAjaWYgVVNFKENHKSB8fCBVU0UoQVBQS0lU
KQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYzICs0OSw5IEBAIHR5cGVkZWYg
c3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0gICAgdGVtcGxh
dGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1lRGF0YT4gOiBwdWJsaWMgU2lt
cGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Jbml0
aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZyYW1lRGF0YSBtZW1iZXJzIGlu
aXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAgIEludFNpemUgc2l6ZShjb25z
dCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hZ2VQ
dHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1hZ2VQ
dHImKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJhbWVEYXRhIHsKLXB1YmxpYzoKLSAg
ICBGcmFtZURhdGEoKQotICAgICAgICA6IG1faGF2ZU1ldGFkYXRhKGZhbHNlKQotICAgICAgICAs
IG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpCi0gICAgewot
ICAgIH0KLQotICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAgICAgIGNsZWFyKHRydWUpOwot
ICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2UgZGF0YSBvbiB0aGUgZnJhbWUs
IGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgotICAgIC8vIFJldHVybnMgd2hldGhlciB0
aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0gICAgYm9vbCBjbGVhcihib29s
IGNsZWFyTWV0YWRhdGEpOwotICAgIAotICAgIHVuc2lnbmVkIHVzZWRGcmFtZUJ5dGVzKCkgY29u
c3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7IH0KLQotICAgIE5hdGl2ZUlt
YWdlUHRyIG1faW1hZ2U7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uIHsgRGVm
YXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxp
bmdMZXZlbCB7IDAgfTsKLSAgICBmbG9hdCBtX2R1cmF0aW9uIHsgMCB9OwotICAgIGJvb2wgbV9o
YXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wgbV9pc0NvbXBsZXRlIDogMTsKLSAgICBib29sIG1f
aGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVkIG1fZnJhbWVCeXRlcyB7IDAgfTsKLX07Ci0KLS8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEJp
dG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0KIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFsIDogcHVibGljIEltYWdlIHsK
ICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIENyb3Nz
ZmFkZUdlbmVyYXRlZEltYWdlOwpAQCAtMTU1LDEyICsxMDMsNiBAQCBwdWJsaWM6CiAgICAgQ0ZE
YXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSNpZiBV
U0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgb3Zl
cnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50
U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBnZXRDR0ltYWdlQXJy
YXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGJvb2wgZ2V0
SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdldEhCSVRNQVBPZlNpemUoSEJJ
VE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0LDggKzExNiwxMyBAQCBwdWJs
aWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZhcyopIG92ZXJyaWRlOwogI2Vu
ZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIG92
ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNp
emUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRG
cmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gb3JDdXJy
ZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChjdXJy
ZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUlt
YWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNBbG1vc3RT
b2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIG92
ZXJyaWRlOwogCkBAIC0yMTUsNyArMTYyLDYgQEAgcHJvdGVjdGVkOgogICAgIHNpemVfdCBmcmFt
ZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3Qs
IGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAgIE5hdGl2ZUltYWdlUHRyIGNv
cHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKICAgICBib29sIGhhdmVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjUsMTEgKzE3MSwxMCBAQCBwcm90ZWN0ZWQ6
CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpOwog
CiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5ldmVyIGFjY2Vzc2VkIGV4Y2Vw
dCBpbnRlcm5hbGx5LgotICAgIGVudW0gSW1hZ2VGcmFtZUNhY2hpbmcgeyBDYWNoZU1ldGFkYXRh
T25seSwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lIH07Ci0gICAgdm9pZCBjYWNoZUZyYW1lKHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgPSBDYWNoZU1ldGFk
YXRhQW5kRnJhbWUpOworICAgIHZvaWQgY2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1YnNhbXBs
aW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSBhY2Nlc3Npbmcg
bV9mcmFtZXNbaW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2RpbmcuIFJldHVybnMgZmFsc2Ug
b24gaW5kZXggb3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6
ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7Cisg
ICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6
OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAK
ICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hlbiB8ZGVzdHJveUFs
bHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBj
YWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ryb3kKQEAgLTI5Miw3ICsyMzcs
NyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3NpemVSZXNwZWN0aW5nT3JpZW50
YXRpb247CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUgeyAwIH07IC8vIFRoZSBpbmRleCBv
ZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAgVmVjdG9yPEZyYW1lRGF0YSwg
MT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQgZnJhbWVzIG9mIHRoZSBhbmlt
YXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhlbSBpbiB0aGUgY2FjaGUuCisg
ICAgVmVjdG9yPEltYWdlRnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhl
IGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRv
IHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaW1lcj4gbV9m
cmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudCB7IGNBbmltYXRpb25Ob25lIH07
IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBzaG91bGQgZG8uIFRoaXMgd2ls
bCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUgaXMgaW5jYXBhYmxlIG9mIGFu
aW1hdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4
ZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMWZhZTNkMmU0MGNjZjFkODFmNmJhNTdkYjY4MmQ5MmQ0NjliYmFj
MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcFBpeGVscy5oCkBAIC0wLDAgKzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5h
dGl2ZUltYWdlUHRyLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQml0bWFwUGl4ZWxzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3Rk
Ojp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEJpdG1hcFBpeGVscz4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgfQorCisgICAg
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNyZWF0ZShjb25zdCBCaXRtYXBQ
aXhlbHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Qml0
bWFwUGl4ZWxzPihvdGhlcik7CisgICAgfQorCisgICAgQml0bWFwUGl4ZWxzKGNvbnN0IEludFNp
emUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUpCisgICAgICAgIDogbV9wcmVt
dWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICBBU1NFUlQoIXNp
emUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBCaXRt
YXBQaXhlbHMoY29uc3QgQml0bWFwUGl4ZWxzJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0
aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1f
YmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7CisgICAgICAgIG1fcGl4ZWxzID0g
bV9iYWNraW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Cisg
ICAgICAgIG1fcmVjdCA9IG90aGVyLm1fcmVjdDsKKyAgICAgICAgbV9wcmVtdWx0aXBseUFscGhh
ID0gb3RoZXIubV9wcmVtdWx0aXBseUFscGhhOworICAgIH0KKworICAgIE5hdGl2ZUltYWdlUHRy
IGltYWdlKCkgY29uc3Q7CisKKyAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
KyAgICB7CisgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNp
emUuYXJlYSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IG1fYmFja2luZ1N0b3JlLnJlc2l6ZShzaXplLmFyZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzID0g
bV9iYWNraW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBt
X3JlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSk7CisgICAgICAgIGNsZWFyKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplLmlzRW1wdHkoKSk7
CisgICAgICAgIEFTU0VSVChpbkJvdW5kcyhyZWN0KSk7CisgICAgICAgIG1fcmVjdCA9IHJlY3Q7
CisgICAgfQorICAgIAorICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsg
fQorICAgIEludFJlY3QgcmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjdDsgfQorCisgICAgUkdC
QTMyKiBhdChpbnQgeCwgaW50IHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9waXhl
bHMgKyB5ICogbV9zaXplLndpZHRoKCkgKyB4OworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQor
ICAgIHsKKyAgICAgICAgbWVtc2V0KG1fcGl4ZWxzLCAwLCBtX3NpemUuYXJlYSgpICogc2l6ZW9m
KFJHQkEzMikpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCisgICAgeworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgaW5Cb3VuZHMocmVjdCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgcmVjdFdpZHRo
SW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIq
IHN0YXJ0ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFydCwgMCwg
cmVjdFdpZHRoSW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lkdGgoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3QgSW50UmVj
dCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBpbkJvdW5kcyhy
ZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCByZWN0
V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJH
QkEzMiogc3JjID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgUkdCQTMyKiBkZXN0
ID0gc3JjICsgbV9zaXplLndpZHRoKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVj
dC5oZWlnaHQoKTsgKytpKSB7CisgICAgICAgICAgICBtZW1jcHkoZGVzdCwgc3JjLCByZWN0V2lk
dGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIGRlc3QgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdC
QShhdCh4LCB5KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEz
MiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkK
KyAgICB7CisgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhIHx8IGEgPj0gMjU1KQorICAg
ICAgICAgICAgKmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZSBpZiAo
IWEpCisgICAgICAgICAgICAqZGVzdCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpk
ZXN0ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZv
aWQgb3ZlclJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwoKmRl
c3QpKSB7CisgICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVsdGlw
bHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENo
YW5uZWwoKmRlc3QpLCBncmVlbkNoYW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFs
cGhhQ2hhbm5lbCgqZGVzdCkpOworICAgICAgICAKKyAgICAgICAgUkdCQTMyIHNyYyA9IG1ha2VS
R0JBKHIsIGcsIGIsIGEpOworICAgICAgICAqZGVzdCA9IENvbG9yKCpkZXN0KS5ibGVuZChzcmMp
LnJnYigpOworICAgICAgICAKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCisgICAg
ICAgICAgICAqZGVzdCA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRlc3Qp
LCBncmVlbkNoYW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5lbCgq
ZGVzdCkpOworICAgIH0KKworICAgIGJvb2wgaW5Cb3VuZHMoY29uc3QgSW50UG9pbnQmIHBvaW50
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXpl
KS5jb250YWlucyhwb2ludCk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJbnRS
ZWN0JiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQo
KSwgbV9zaXplKS5jb250YWlucyhyZWN0KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PFJHQkEzMj4gbV9iYWNraW5nU3RvcmU7CisgICAgUkdCQTMyKiBtX3BpeGVscyB7IG51bGxwdHIg
fTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fcmVjdDsgLy8gVGhpcyB3aWxs
IGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcg
ZnJhbWVzCisgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxwaGEgeyB0cnVlIH07Cit9OworCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKaW5kZXggNGUyNWFhNmZk
NzRkMWU0NmM1NDE2MTQ5OGJjMTcyYmY2MDA4NzVkMS4uNDM5ZjVhNjNjN2JlYmU1NjA0MmIyNGU3
ZDcyZWNjZWNmMzZjNDBjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmNwcApAQCAtNDksNiArNDksNDAgQEAgY29uc3QgUkdCQTMyIENvbG9yOjp0cmFuc3BhcmVu
dDsKIHN0YXRpYyBjb25zdCBSR0JBMzIgbGlnaHRlbmVkQmxhY2sgPSAweEZGNTQ1NDU0Owogc3Rh
dGljIGNvbnN0IFJHQkEzMiBkYXJrZW5lZFdoaXRlID0gMHhGRkFCQUJBQjsKIAorc3RhdGljIGlu
bGluZSB1bnNpZ25lZCBtdWx0aXBseTI1NSh1bnNpZ25lZCBjKQoreworICAgIC8vIGMgKiAyNTUK
KyAgICAvLyAgID0gYyAqICgyNTYgLSAxKQorICAgIC8vICAgPSBjICogMjU2IC0gYworICAgIHJl
dHVybiAoYyA8PCA4KSAtIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1
KHVuc2lnbmVkIGMpCit7CisgICAgLy8gYyAvIDI1NQorICAgIC8vICAgPSBjIC8gMjU2ICogKDEg
KyAxIC8gMjU1KQorICAgIC8vICAgPSAoYyArIGMgLyAyNTUpIC8gMjU2CisgICAgLy8gICA9IChj
ICsgKGMgKyBjIC8gMjU1KSAvIDI1NikgLyAyNTYKKyAgICAvLyAgID0gKGMgKyBjIC8gMjU2ICsg
YyAvICgyNTUgeCAyNTYpKSAvIDI1NgorICAgIC8vICB+PSAoYyArIGMgLyAyNTYgKyAxKSAvIDI1
NgorICAgIHJldHVybiAoYyArIChjID4+IDgpICsgMSkgPj4gODsKK30KKyAgICAKK3N0YXRpYyBp
bmxpbmUgdW5zaWduZWQgZGl2aWRlQ2VpbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBkKQoreworICAg
IHJldHVybiAoYyArIGQgLSAxKSAvIGQ7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVk
IHByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0
dXJuIGRpdmlkZTI1NShjICogYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5wcmVt
dWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBk
aXZpZGVDZWlsKG11bHRpcGx5MjU1KGMpLCBhKTsKK30KKyAgICAKIFJHQkEzMiBtYWtlUkdCKGlu
dCByLCBpbnQgZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIDB4RkYwMDAwMDAgfCBzdGQ6Om1heCgw
LCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkp
IDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKQEAgLTU5LDYgKzkzLDE2IEBA
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICByZXR1cm4g
c3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMjU1KSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1p
bihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBz
dGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKIH0KIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBs
aWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJH
QkEocHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEp
LCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisgICAgCitSR0JBMzIgbWFrZVVu
UHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0
dXJuIG1ha2VSR0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGll
ZENoYW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorICAg
IAogc3RhdGljIGludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQogewogICAgIC8vIFdl
IHVzZSBscm91bmRmIGFuZCAyNTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0
Y2ggQ0cncyByb3VuZGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
aW5kZXggZGQyNjI3MGJiNDY2MGIzM2FlMDcwZThjOTQ0NTIwZDcyODQ1NGI4YS4uYTU0NTMyYzc3
NTVhN2M4NzY5MzYyNDBjYWU0ZWMzN2E0ZGEwZDA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Db2xvci5oCkBAIC01NCw2ICs1NCw4IEBAIHR5cGVkZWYgdW5zaWduZWQgUkdC
QTMyOyAvLyBEZXByZWNhdGVkOiBUeXBlIGZvciBhbiBSR0JBIHF1YWRydXBsZXQuIFVzZSBSR0JB
IGNsCiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIp
OwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VVblByZW11
bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAogV0VCQ09SRV9FWFBP
UlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVy
cmlkZUFscGhhKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhh
KFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKaW5kZXggN2EyOTk5MmY3NzE4OGUwMzgyOGQ4
MGE2NWI4YmUyY2Q4ZGMyZGU3Ni4uOGU3YjUyYjFmNGYzMWM3NGEzY2IyYTEzMjE1ZGE3N2EyYjE4
YzA3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2Uu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCkBAIC0xMzcs
OCArMTM3LDExIEBAIHB1YmxpYzoKIAogICAgIGVudW0gVGlsZVJ1bGUgeyBTdHJldGNoVGlsZSwg
Um91bmRUaWxlLCBTcGFjZVRpbGUsIFJlcGVhdFRpbGUgfTsKIAorICAgIHZpcnR1YWwgTmF0aXZl
SW1hZ2VQdHIgbmF0aXZlSW1hZ2UoKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgdmlydHVhbCBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4g
bnVsbHB0cjsgfQogICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VGb3JDdXJy
ZW50RnJhbWUoKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBJbWFnZU9yaWVudGF0
aW9uIG9yaWVudGF0aW9uRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gSW1hZ2VPcmllbnRhdGlv
bigpOyB9CisgICAgdmlydHVhbCBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUlt
YWdlcygpIHsgcmV0dXJuIHsgfTsgfQogCiAgICAgLy8gQWNjZXNzb3JzIGZvciBuYXRpdmUgaW1h
Z2UgZm9ybWF0cy4KIApAQCAtMTUwLDEyICsxNTMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBD
RkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogI2Vu
ZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldENHSW1hZ2VSZWYo
KSB7IHJldHVybiBudWxscHRyOyB9Ci0gICAgdmlydHVhbCBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJ
bWFnZVJlZk9mU2l6ZShjb25zdCBJbnRTaXplJikgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZp
cnR1YWwgUmV0YWluUHRyPENGQXJyYXlSZWY+IGdldENHSW1hZ2VBcnJheSgpIHsgcmV0dXJuIG51
bGxwdHI7IH0KLSNlbmRpZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZpcnR1YWwgYm9vbCBn
ZXRIQklUTUFQKEhCSVRNQVApIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIHsgcmV0dXJuIGZhbHNlOyB9
CkBAIC0xNzksNiArMTc2LDggQEAgcHVibGljOgogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2
aXJ0dWFsIGJvb2wgbm90U29saWRDb2xvcigpIHsgcmV0dXJuIHRydWU7IH0KICNlbmRpZgorICAg
IAorICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRJZk5lZWRlZCgpIHsgfQogCiAgICAgdmlydHVhbCB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmZkMjBjZjhl
NjFmNGIxYTFmZTA4ZWIzMzJiNzE2NTdmMDE0OGMxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApAQCAtMCwwICsx
LDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKKworI2luY2x1
ZGUgIkNvbG9yLmgiCisKKyNpZiBVU0UoQ0cpCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyQ0cuaCIK
KyNlbHNlCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIlBs
YXRmb3JtSW1hZ2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJbWFnZUZyYW1lRGF0YTo6
SW1hZ2VGcmFtZURhdGEoKQoreworfQorCitJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEo
TmF0aXZlSW1hZ2VQdHImJiBpbWFnZSkKKyAgICA6IG1fc3RhdHVzKERlY29kaW5nU3RhdHVzOjpD
b21wbGV0ZSkKKyAgICAsIG1faW1hZ2UoV1RGTW92ZShpbWFnZSkpCit7CisgICAgbV9zaXplID0g
UGxhdGZvcm1JbWFnZShtX2ltYWdlKS5zaXplKCk7CisgICAgbV9oYXNBbHBoYSA9IFBsYXRmb3Jt
SW1hZ2UobV9pbWFnZSkuaGFzQWxwaGEoKTsKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJh
bWVEYXRhKEltYWdlRGVjb2RlciYgZGVjb2Rlciwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwsIENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VS
VChmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENh
Y2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworICAgIAorICAgIGlmIChmcmFtZUNhY2hpbmcgPT0g
Q2FjaGluZzo6SW1hZ2UgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1h
Z2UpIHsKKyAgICAgICAgbV9pbWFnZSA9IGRlY29kZXIuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgo
aW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgICAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBz
dWJzYW1wbGluZ0xldmVsOworICAgIH0KKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENh
Y2hpbmc6Ok1ldGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZElt
YWdlKSB7CisgICAgICAgIG1fb3JpZW50YXRpb24gPSBkZWNvZGVyLm9yaWVudGF0aW9uQXRJbmRl
eChpbmRleCk7CisgICAgICAgIG1fc3RhdHVzID0gZGVjb2Rlci5mcmFtZUlzQ29tcGxldGVBdElu
ZGV4KGluZGV4KSA/IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZSA6IERlY29kaW5nU3RhdHVzOjpQ
YXJ0aWFsOworICAgICAgICAKKyAgICAgICAgaWYgKGRlY29kZXIucmVwZXRpdGlvbkNvdW50KCkg
IT0gY0FuaW1hdGlvbk5vbmUpCisgICAgICAgICAgICBtX2R1cmF0aW9uID0gZGVjb2Rlci5mcmFt
ZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAgICAgIAorICAgICAgICBtX2hhc0FscGhhID0g
ZGVjb2Rlci5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CisgICAgICAgIG1fc2l6ZSA9IGRl
Y29kZXIuZnJhbWVTaXplQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgfQor
fQorCitJbWFnZUZyYW1lRGF0YTo6fkltYWdlRnJhbWVEYXRhKCkKK3sKKyAgICBjbGVhclN1Yklt
YWdlcygpOworfQorICAgIAorSW1hZ2VGcmFtZURhdGEmIEltYWdlRnJhbWVEYXRhOjpvcGVyYXRv
cj0oY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhl
cikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9zdGF0dXMgPSBvdGhlci5tX3N0YXR1
czsKKyAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgbV9pbWFnZSA9IG90aGVyLm1faW1h
Z2U7CisgICAgCisgICAgbV9waXhlbHMgPSBvdGhlci5waXhlbHMoKSA/IEJpdG1hcFBpeGVsczo6
Y3JlYXRlKCpvdGhlci5waXhlbHMoKSkgOiBudWxscHRyOworICAgIAorICAgIG1fb3JpZW50YXRp
b24gPSBvdGhlci5tX29yaWVudGF0aW9uOworICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IG90aGVy
Lm1fc3Vic2FtcGxpbmdMZXZlbDsKKyAgICBtX2R1cmF0aW9uID0gb3RoZXIubV9kdXJhdGlvbjsK
KyAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK3ZvaWQgSW1hZ2VGcmFtZURhdGE6OmNsZWFyU3ViSW1hZ2VzKCkKK3sKKyAgICBpZiAoIW1f
aW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBQbGF0Zm9ybUltYWdlKG1faW1hZ2Up
LmNsZWFyU3ViSW1hZ2VzKCk7Cit9CisKK3Vuc2lnbmVkIEltYWdlRnJhbWVEYXRhOjpjbGVhcihD
YWNoaW5nIGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NFUlQoZnJhbWVDYWNoaW5nID09IENhY2hp
bmc6OkVtcHR5IHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSk7CisgICAgCisg
ICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IHRoaXMtPmZyYW1lQnl0ZXMoKTsKKyAgICAKKyAgICBj
bGVhclN1YkltYWdlcygpOworICAgIAorICAgIGlmIChmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6
RW1wdHkpCisgICAgICAgICp0aGlzID0gSW1hZ2VGcmFtZURhdGEoKTsKKyAgICBlbHNlCisgICAg
ICAgIG1faW1hZ2UgPSBudWxscHRyOworICAgIAorICAgIHJldHVybiBmcmFtZUJ5dGVzOworfQor
CitDb2xvciBJbWFnZUZyYW1lRGF0YTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sK
KyAgICBpZiAoIWhhc0ltYWdlKCkgfHwgbV9zaXplICE9IEludFNpemUoMSwgMSkpCisgICAgICAg
IHJldHVybiBDb2xvcigpOworICAgIAorICAgIHJldHVybiBQbGF0Zm9ybUltYWdlKG1faW1hZ2Up
LnNpbmdsZVBpeGVsU29saWRDb2xvcigpOworfQorCitib29sIEltYWdlRnJhbWVEYXRhOjppc0Fs
bW9zdFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlmICghaGFzSW1hZ2UoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmlz
QWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjZmYjc1OGVmM2E0
MjU4Y2JkYjNhZTJmNDZlODQ0MGY3MzBlZjQ3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmgKQEAgLTAsMCArMSwxMDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJCaXRtYXBQaXhlbHMuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVu
dGF0aW9uLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBJbWFnZURl
Y29kZXI7CisKKy8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMg
aGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCit1c2luZyBTdWJzYW1wbGluZ0xldmVs
ID0gdWludDhfdDsKKworZW51bSA6IFN1YnNhbXBsaW5nTGV2ZWwgeworICAgIE1pblN1YnNhbXBs
aW5nTGV2ZWwgPSAwLAorICAgIE1heFN1YnNhbXBsaW5nTGV2ZWwgPSAzLAorICAgIERlZmF1bHRT
dWJzYW1wbGluZ0xldmVsID0gTWluU3Vic2FtcGxpbmdMZXZlbAorfTsKKworY2xhc3MgSW1hZ2VG
cmFtZURhdGEgeworICAgIGZyaWVuZCBjbGFzcyBJbWFnZURlY29kZXI7CitwdWJsaWM6CisgICAg
ZW51bSBjbGFzcyBDYWNoaW5nIHsgRW1wdHksIE1ldGFkYXRhLCBJbWFnZSwgTWV0YWRhdGFBbmRJ
bWFnZSB9OworICAgIGVudW0gY2xhc3MgRGVjb2RpbmdTdGF0dXMgeyBFbXB0eSwgUGFydGlhbCwg
Q29tcGxldGUgfTsKKyAgICAKKyAgICBJbWFnZUZyYW1lRGF0YSgpOworICAgIEltYWdlRnJhbWVE
YXRhKE5hdGl2ZUltYWdlUHRyJiYpOworICAgIEltYWdlRnJhbWVEYXRhKEltYWdlRGVjb2RlciYs
IHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVs
LCBDYWNoaW5nID0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CisgICAgSW1hZ2VGcmFtZURh
dGEoY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKSB7IG9wZXJhdG9yPShvdGhlcik7IH0KKwor
ICAgIH5JbWFnZUZyYW1lRGF0YSgpOworCisgICAgSW1hZ2VGcmFtZURhdGEmIG9wZXJhdG9yPShj
b25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpOworICAgIAorICAgIHVuc2lnbmVkIGNsZWFyKENh
Y2hpbmcpOworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OworICAgIGJv
b2wgaXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgCisgICAgRGVjb2RpbmdTdGF0dXMg
c3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KKyAgICBib29sIGlzQ29tcGxldGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXR1cyA9PSBEZWNvZGluZ1N0YXR1czo6Q29tcGxldGU7IH0K
KyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBoYXNQaXhlbHMoKSA/IHBpeGVscygp
LT5zaXplKCkgOiBtX3NpemU7IH0KKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzKCkgY29uc3QgeyBy
ZXR1cm4gaGFzSW1hZ2UoKSA/IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSA6IDA7IH0K
KyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAg
ICBCaXRtYXBQaXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhl
bHMuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgCisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0KKyAgICBTdWJzYW1wbGluZ0xl
dmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7
IH0KKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAg
ICAKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQorICAg
IGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgYm9vbCBoYXNN
ZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemUuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBo
YXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBwaXhlbHMoKTsgfQorICAgIAorcHJpdmF0ZToKKyAg
ICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAgICB2b2lkIHNldFN0YXR1cyhEZWNvZGluZ1N0
YXR1cyBzdGF0dXMpIHsgbV9zdGF0dXMgPSBzdGF0dXM7IH0KKyAgICB2b2lkIHNldE9yaWVudGF0
aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVu
dGF0aW9uOyB9OworICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9k
dXJhdGlvbiA9IGR1cmF0aW9uOyB9CisgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGhhc0FscGhh
KSB7IG1faGFzQWxwaGEgPSBoYXNBbHBoYTsgfQorICAgIAorICAgIERlY29kaW5nU3RhdHVzIG1f
c3RhdHVzIHsgRGVjb2RpbmdTdGF0dXM6OkVtcHR5IH07CisgICAgSW50U2l6ZSBtX3NpemU7Cisg
ICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4
ZWxzPiBtX3BpeGVsczsKKyAgICAKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24g
eyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJz
YW1wbGluZ0xldmVsIHsgMCB9OworICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07CisgICAgYm9v
bCBtX2hhc0FscGhhIHsgdHJ1ZSB9OworfTsKKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBkZGQ4YTU1YmEwOTA2YzU4
NjZhMTkyY2Y4ZTQxNGVhNzA3YjcyOGFjLi44MmY2ZTJkNmU0NTQzM2RhMWE3ZDU2YjM3MGRmYTYx
YTRjNDE5MTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwCkBAIC0yMjQsNiArMjI0LDExIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291
cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2
CiAgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VB
dEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7CiB9CiAKK0ltYWdlRnJh
bWVEYXRhIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
ZyBjYWNoaW5nKQoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gSW1hZ2VGcmFtZURhdGEo
Km1fZGVjb2RlciwgaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGNhY2hpbmcpIDogSW1hZ2VGcmFt
ZURhdGEoKTsKK30KKyAgICAKIHZvaWQgSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMp
IGNvbnN0CiB7CiAgICAgaWYgKG1fYWxsb3dTdWJzYW1wbGluZykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDYwMzU3MzliN2U4YjA5NmRj
OGRmZTljNTMwYTQyYzZmMjkxYmRhMDAuLmE0MGM3Y2U5MzA3Y2RhZGYwNzlhYjcwMWE4Mjc5OWI2
OTA1MjlkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lt
YWdlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBJbWFnZVNvdXJjZV9oCiAjZGVmaW5l
IEltYWdlU291cmNlX2gKIAorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCiAjaW5jbHVkZSAi
SW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiTmF0
aXZlSW1hZ2VQdHIuaCIKQEAgLTYzLDkgKzY0LDYgQEAgY29uc3QgaW50IGNBbmltYXRpb25Mb29w
T25jZSA9IDA7CiBjb25zdCBpbnQgY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0xOwogY29uc3Qg
aW50IGNBbmltYXRpb25Ob25lID0gLTI7CiAKLS8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMgbm8g
c3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCi10eXBl
ZGVmIHNob3J0IFN1YnNhbXBsaW5nTGV2ZWw7Ci0KIGNsYXNzIEltYWdlU291cmNlIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZVNvdXJjZSk7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1h
cEltYWdlOwpAQCAtMTMyLDE4ICsxMzAsMTkgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dTdWJz
YW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CiAgICAgCiAgICAgLy8gU2l6ZSBv
ZiBvcHRpb25hbGx5IHN1YnNhbXBsZWQgZnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdElu
ZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
RW51bSA9IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OworICAgIEludFNpemUg
ZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2Ft
cGxpbmdMZXZlbCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbikgY29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2Yg
Ynl0ZXMgaW4gdGhlIGRlY29kZWQgZnJhbWUuIElmIHRoZSBmcmFtZSBpcyBub3QgeWV0CiAgICAg
Ly8gZGVjb2RlZCB0aGVuIHJldHVybiAwLgotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4
KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGlu
Z0xldmVsKSBjb25zdDsKICAgICAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXpl
X3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkgY29u
c3Q7IC8vIEVYSUYgaW1hZ2Ugb3JpZW50YXRpb24KICAgICAKICAgICAvLyBDYWxsZXJzIHNob3Vs
ZCBub3QgY2FsbCB0aGlzIGFmdGVyIGNhbGxpbmcgY2xlYXIoKSB3aXRoIGEgaGlnaGVyIGluZGV4
OwogICAgIC8vIHNlZSBjb21tZW50cyBvbiBjbGVhcigpIGFib3ZlLgotICAgIE5hdGl2ZUltYWdl
UHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDAp
OworICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vi
c2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZUZyYW1l
RGF0YSBjcmVhdGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERl
ZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJh
bWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsKICAgICAKIHByaXZhdGU6CiAgICAg
dm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjdhZWE0ODlm
M2ViMmE4Mjg3NzFjMjEwM2U4ZDRkMGJlMTdiZTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCkBAIC0wLDAgKzEsNjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmll
bnRhdGlvbi5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOwor
Y2xhc3MgR3JhcGhpY3NDb250ZXh0OworCitjbGFzcyBQbGF0Zm9ybUltYWdlIHsKK3B1YmxpYzoK
KyAgICBQbGF0Zm9ybUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKKyAgICAgICAg
OiBtX2ltYWdlKGltYWdlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzTmlsKCkgY29uc3Qg
eyByZXR1cm4gIW1faW1hZ2U7IH0KKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAgICBJ
bnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAgQ29s
b3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlk
Q29sb3IoKSBjb25zdDsKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXpl
JiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVu
dGF0aW9uJikgY29uc3Q7CisKKyAgICBzdGF0aWMgZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFw
aGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QpOworCitwcml2YXRlOgorI2lmIFVTRShDRykKKyAgICBDR0ltYWdlUmVmIGNnSW1h
Z2VSZWYoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS5nZXQoKSA6IG51bGxwdHI7
IH0KKyNlbmRpZgorICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Cit9OworCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRp
YVN0cmVhbUFWRk9iakMubW0KaW5kZXggZjRjMTQ1N2JiYjI1NTc1NGYwMGEwNjI1ZWU4M2UwNGRh
N2M2ZWZjZi4uZDUyMGY1ZDU4NWFjNjBkYmFlZTI1NWUxYjgzYzI0ZGM2ODcyMTBhNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSgpCiAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIG1fcGF1c2VkSW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICAgICAg
ICAgIG1fcGF1c2VkSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
ICAgICAgICAgICAgICAgICBpZiAoIW1fcGF1c2VkSW1hZ2UpIHsKICAgICAgICAgICAgICAgICAg
ICAgbV9kaXNwbGF5TW9kZSA9IFBhaW50SXRCbGFjazsKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9CaXRtYXBJbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxNzcyMmJlYzUzYWI4YTA4YThkYTg1MjhiOWUwZDdjNGQwY2Q0MTM1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lm
IFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSW1h
Z2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVk
ZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQdHI8Y2Fp
cm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNpemUoaW1h
Z2UuZ2V0KCkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChpbWFn
ZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xlUGl4ZWxT
b2xpZENvbG9yKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICBB
U1NFUlQoaW1hZ2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0g
SW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAoY2Fpcm9f
c3VyZmFjZV9nZXRfdHlwZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdF
KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVy
cHJldF9jYXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdl
LmdldCgpKSk7Ci0gICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7
Ci19Ci0KLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsCi0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRl
c2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwgIWRzdC5o
ZWlnaHQoKSB8fCAhc3JjLndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgc3RhcnRBbmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZyYW1lSW1h
Z2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3Mg
dG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0K
LSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xv
ci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwg
Y29sb3IsIG9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuc2F2ZSgp
OwotCi0gICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYgKG9wID09
IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAh
ZnJhbWVIYXNBbHBoYUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAgICAgIGNv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYgRU5BQkxF
KElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBj
YWlyb1N1cmZhY2VTaXplKHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6ZSk7
Ci0jZWxzZQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRpZgotCi0g
ICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3Jp
ZW50YXRpb24oKSk7Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50YXRpb24g
PSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBGbG9hdFJl
Y3QgZHN0UmVjdCA9IGRzdDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERlZmF1bHRJ
bWFnZU9yaWVudGF0aW9uKSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0
aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0
UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlvbihGbG9h
dFBvaW50KCkpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0aW9uLnRy
YW5zZm9ybUZyb21EZWZhdWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFtZU9y
aWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0
aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5
IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFn
ZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJz
ZSBpdCBiYWNrIGhlcmUuCi0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRzdFJlY3Qu
eCgpLCBkc3RSZWN0LnkoKSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgpKTsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJm
YWNlVG9Db250ZXh0KHN1cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29u
dGV4dCk7Ci0KLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVy
KCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotYm9vbCBG
cmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRh
ZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2ltYWdl
KSB7Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNl
bmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43
MGFkYWVjMjcwZTMxYjA1NGFmYzVmNjZkNDgyODhhZWJmMDYxZTNhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNh
aXJvLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1J
bWFnZS5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdl
cygpCit7Cit9CisKK0ludFNpemUgUGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGlzTmlsKCkgPyBJbnRTaXplKCkgOiBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0
KCkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaXNOaWwoKSB8fCBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1faW1hZ2UuZ2V0KCkp
ICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmds
ZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9
IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNhaXJv
X3N1cmZhY2VfZ2V0X3R5cGUobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lN
QUdFKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIFJHQkEzMiogcGl4ZWwgPSByZWlu
dGVycHJldF9jYXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1f
aW1hZ2UuZ2V0KCkpKTsKKyAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBp
eGVsKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2Ft
cGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9h
dFJlY3QmKQoreworICAgIHJldHVybiAxOworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXco
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciBv
cCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBj
b25zdAoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIAorICAgIC8vIFNldCB0aGUgY29tcG9z
aXRpbmcgb3BlcmF0aW9uLgorICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIG1v
ZGUgPT0gQmxlbmRNb2RlTm9ybWFsICYmICFoYXNBbHBoYSgpKQorICAgICAgICBjb250ZXh0LnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAgICAgIGNv
bnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxlZFNpemUg
PSBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBhZGp1c3Rl
ZFNyY1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3QsIHNjYWxl
ZFNpemUpOworI2Vsc2UKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyY1JlY3QpOwor
I2VuZGlmCisgICAgICAgIAorICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJl
Y3Q7CisgICAgICAgIAorICAgIGlmIChvcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRh
dGlvbikgeworICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0
byBiZSBhdCAoMCwgMCkuCisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LngoKSwg
ZGVzdFJlY3QueSgpKTsKKyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9h
dFBvaW50KCkpOworICAgICAgICBjb250ZXh0LmNvbmNhdENUTShvcmllbnRhdGlvbi50cmFuc2Zv
cm1Gcm9tRGVmYXVsdChhZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAob3Jp
ZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGRlc3Rp
bmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkg
cmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGltYWdl
LCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNl
IGl0IGJhY2sgaGVyZS4KKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShhZGp1
c3RlZERlc3RSZWN0LnNpemUoKS50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KG1f
aW1hZ2UuZ2V0KCksIGFkanVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7
CisKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDNjODFhMTcwYmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2ZC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIw
NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIK
LSNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotCi0jaWYgVVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2Vz
L0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0j
aW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9S
TShXSU4pCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVy
ZmFjZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2
ZUltYWdlIHsKLQotSW50U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1h
Z2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6ZShDR0ltYWdlR2V0
V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci19Ci0K
LWJvb2wgaGFzQWxwaGEoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikKLXsKLSAgICAvLyBG
SVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYg
aGF2ZSBhbHBoYSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbG9yIHNp
bmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQot
ewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpzaXplKGlt
YWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAg
ICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBiaXRtYXBDb250ZXh0
ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihw
aXhlbCksIHNSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0
aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAgICBpZiAoIWJpdG1h
cENvbnRleHQpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIENHQ29udGV4dFNl
dEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBD
R0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAx
LCAxKSwgaW1hZ2UuZ2V0KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAgIHJl
dHVybiBDb2xvcigwLCAwLCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1
NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAv
IHBpeGVsWzNdLCBwaXhlbFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJv
b2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9o
YXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci0KLSAg
ICBpZiAobV9pbWFnZSkgewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJpbWFnZUNh
Y2hlKCkuY2xlYXJJbWFnZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBtX2ltYWdl
ID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCi17Ci0gICAg
cmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0ltYWdlUmVmIEJpdG1h
cEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsK
LSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1h
Z2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkK
LSAgICAgICAgICAgIHJldHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRv
IHRoZSBkZWZhdWx0IENHSW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQot
ICAgIHJldHVybiBnZXRDR0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxDRkFycmF5UmVmPiBC
aXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFt
ZUNvdW50KCk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShOVUxM
LCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9IGZy
YW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVl
KGFycmF5LCBjdXJyRnJhbWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihhcnJheSk7Ci19
Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9u
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXJ0
QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0j
ZW5kaWYKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICAvLyBOZXZlciB1
c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0gICAg
aWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAg
ICAgICBpbWFnZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1l
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0
ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShj
dHh0LnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUg
PSBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Qu
c2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Qu
c2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAgaW1hZ2UgPSBmcmFt
ZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Ci0gICAgfQot
Ci0gICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBp
bWFnZSB5ZXQuCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBjb2xvciA9IHNpbmds
ZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAg
ZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29tcG9zaXRlT3ApOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2
ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgotICAgIEludFNpemUg
aW1hZ2VTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UuZ2V0KCkpKTsKLSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRl
cyBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUg
c3Vic2FtcGxlZCBpbWFnZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7
Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9yaWdp
bmFsSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJlY3Qg
c3Vic2FtcGxlZEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAgICAg
c2NhbGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFnZUJvdW5kcywgc3Vi
c2FtcGxlZEltYWdlQm91bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbjsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24o
KSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBmcmFt
ZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LmRyYXdOYXRp
dmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3JjUmVjdCwgY29tcG9z
aXRlT3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIo
KSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCi1SZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gQml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4
KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwg
IW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsK
LQotICAgIGlmICghbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLmNy
ZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENH
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVy
bkNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKaW5kZXggYjQyOGQ1MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUyOGQ5Mi4uM2RhYTEz
OWFiN2VhNWI0MjE1Nzc4ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03Miw3ICs3Miw3IEBA
IENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGluIGJv
dGggZGlyZWN0aW9ucywgd2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAvLyBp
bnN0ZWFkIG9mIGN1c3RvbSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNy
YWNrcy4KICAgICBpZiAobV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIHdr
Q0dQYXR0ZXJuQ3JlYXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRDR0lt
YWdlUmVmKCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2lu
Zyk7CisgICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9y
bSh0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQ
YXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hvdWxk
IGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVz
aW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGluZyBi
ZWluZyByZW5kZXJlZC4KQEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4K
ICAgICBDR0Zsb2F0IHlTdGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8
PCAyMik7CiAKICAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYg
d2hlbiBpdCdzIGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBD
R0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRD
R0ltYWdlUmVmKCkpOworICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgp
LT5uYXRpdmVJbWFnZSgpLmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNr
cyBwYXR0ZXJuQ2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNl
Q2FsbGJhY2sgfTsKICAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRp
bGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdD
b25zdGFudFNwYWNpbmcsIFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmFmYjJkZTBlYTEyZGEyMTRmMTA0NmMzOTYyZThlYWI1M2M2NDQxMjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9y
bUltYWdlQ0cuY3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtSW1hZ2UuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVk
ZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCisK
KyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktp
dFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAK
K3ZvaWQgUGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lmIENBQ0hFX1NVQklN
QUdFUworICAgIGlmICghaXNOaWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1h
Z2UoY2dJbWFnZVJlZigpKTsKKyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNp
emUoKSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogSW50U2l6ZShD
R0ltYWdlR2V0V2lkdGgoY2dJbWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlUmVm
KCkpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAg
Ly8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdl
UmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvbG9yIFBs
YXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlz
TmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigp
OworICAgIAorICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRvIGJp
dG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwg
OCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAgICAga0NHSW1hZ2VB
bHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAgICAK
KyAgICBpZiAoIWJpdG1hcENvbnRleHQpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAor
ICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1v
ZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dS
ZWN0TWFrZSgwLCAwLCAxLCAxKSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAgICBpZiAoIXBpeGVs
WzNdKQorICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgCisgICAgcmV0dXJu
IENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxb
M10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKyAgICAKK2Jvb2wg
UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBDR0ltYWdl
UmVmIGltYWdlID0gY2dJbWFnZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNv
bXBvbmVudChpbWFnZSkgPT0gOCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9
IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dC
aXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5m
b01hc2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKKyAgICAgICAgLy8g
RklYTUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMu
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7Cisg
ICAgc2l6ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIHNpemVfdCBi
eXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7CisgICAgCisgICAgUmV0
YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURh
dGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25zdCBVSW50OCogZGF0
YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAorICAgIC8vIE92ZXJs
YXkgYSBncmlkIG9mIHNhbXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24g
b2YgdGhlIGltYWdlLgorICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUg
dGhlIGRpZmZlcmVuY2UgaW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKKyAgICAv
LyBhbmQgaXRzIHN1cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCisgICAg
Y29uc3QgdW5zaWduZWQgc2FtcGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxl
Q29scyA9IDc7CisgICAgLy8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1w
bGVzLCBhbmQgYWNjb21tb2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCisgICAgaWYgKHdp
ZHRoIDwgc2FtcGxlQ29scyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5k
IG9uIHRoZSBpbWFnZSBwZXJpbWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBz
dGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7CisgICAgY29u
c3QgZmxvYXQgc3RyaWRlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8g
KHNhbXBsZVJvd3MgLSAxKTsKKyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNv
bHNdOworICAgIAorICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50
cy4KKyAgICBmbG9hdCB5ID0gMDsKKyAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7CisgICAgICAgIGZsb2F0
IHggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytq
KSB7CisgICAgICAgICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50
Pih4ICsgLjUpKSAqIDQ7CisgICAgICAgICAgICAvLyBSIEcgQiBBCisgICAgICAgICAgICBzYW1w
bGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAq
KHAwKzIpKSAqICoocDArMykgLyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwor
ICAgICAgICB9CisgICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAgICByb3cgPSBkYXRh
ICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKKyAgICB9CisgICAg
CisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9hdCBhY2N1bVNjb3Jl
ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkg
eworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikg
eworICAgICAgICAgICAgZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tp
ICsgMV1bal0gKyBzYW1wbGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNh
bXBsZXNbaV1bal07CisgICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1wbGUg
Y2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAgcmV0dXJuIGFjY3Vt
U2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Cit9CisK
K2Zsb2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QpCit7CisgICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGlu
dG8gUERGIGNvbnRleHRzLgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgQ0dSZWN0
IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0o
ZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSk7Cisg
ICAgcmV0dXJuIHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0
aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0
aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBQbGF0
Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNT
aXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3Jp
ZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBo
YXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJ
bnRTaXplIHN1YnNhbXBsZWRJbWFnZVNpemUgPSBzaXplKCk7CisgICAgCisgICAgLy8gc3JjUmVj
dCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2Ug
aGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0IGFk
anVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNpemUgIT0g
c3JjU2l6ZSkKKyAgICAgICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBGbG9h
dFJlY3QoeyB9LCBzcmNTaXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6ZSkp
OworICAgIAorICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIHN1YnNhbXBsZWRJ
bWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmllbnRhdGlv
bik7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNv
Y29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNr
UmVwcmVzZW50YXRpb25Db2NvYS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4YmE4NDY5ZDUyOTQ1
NDhkNTE4NDdhN2ZlLi40NDc2ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQxYjliYjAyMmU1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KQEAgLTEyOSw3ICsx
MjksNyBAQCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRyYWNrUmVwcmVzZW50
YXRpb25Db2NvYSgpCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSgp
CiB7CiAgICAgaWYgKGF1dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVUZXh0VHJh
Y2tSZXByZXNlbnRhdGlvbkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRl
bnRzOihpZClyZXByZXNlbnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAgW21fbGF5
ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFnZSgpLmdl
dCgpXTsKIH0KIAogdm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRDb250ZW50
U2NhbGUoZmxvYXQgc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvSW1hZ2VNYWMubW0KaW5kZXggMDFlYjZkZDMwMDQzYTIyNTI5MTc2ZmQ5MTIxMTdkYzU3
NzZjMTdiYS4uZGMxYzdjNzA5NWQ5NDRjNGM2MmYxZmUwOTM1NzAyYTEzYzdjN2E0MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAt
ODUsMzEgKzg1LDIyIEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0
aW9uKCkKICAgICBpZiAobV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgp
OwogCi0gICAgdW5zaWduZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1dG8gbmF0
aXZlSW1hZ2VzID0gdGhpcy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBudW1G
cmFtZXMgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2
ZSB2YWxpZCBkYXRhCisgICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3ZSBr
bm93IGZvciBjZXJ0YWluIHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKICAgICAv
LyBFdmVuIHRob3VnaCB0aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0
YSB3aWxsIGZhaWwgYW5kIHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8vIGluIGNl
cnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xlIHdpdGgg
YW4gZXJyb3IgbWVzc2FnZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFZlY3RvcjxDR0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUZyYW1lczsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBm
cmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0gICAgICAg
ICAgICBpbWFnZXMuYXBwZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bVZh
bGlkRnJhbWVzID0gaW1hZ2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFS
ZWY+IGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFp
blB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdl
RGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbnVtVmFs
aWRGcmFtZXMsIDApKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0
aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5n
ZXQoKSwga1VUVHlwZVRJRkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAgIGlmICgh
ZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytpKQotICAg
ICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2Vz
W2ldLCAwKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAg
ICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBuYXRpdmVJ
bWFnZS5nZXQoKSwgMCk7CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5h
dGlvbi5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCmluZGV4IDIxNzUzYmQwNzhhMWM1NWMzMjcxOWMx
NDg0NmYwZjZiOTk3NWY4ZmQuLmUzMDQ5ZjcyMGM0OWQ0YmQ5YTQwZGVlZmMyMDY4NTIwOTU4NzEw
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIEltYWdlRnJhbWUmIEltYWdl
RnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKICAgICAgICAgcmV0dXJu
ICp0aGlzOwogCiAgICAgY29weUJpdG1hcERhdGEob3RoZXIpOwotICAgIHNldE9yaWdpbmFsRnJh
bWVSZWN0KG90aGVyLm9yaWdpbmFsRnJhbWVSZWN0KCkpOworICAgIHNldEhhc0FscGhhKG90aGVy
Lm1faGFzQWxwaGEpOwogICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAgc2V0RHVy
YXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CiAgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlz
cG9zYWxNZXRob2QoKSk7CkBAIC0xNTIsOCArMTUyLDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFt
ZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQogCiB2b2lkIEltYWdlRnJhbWU6
OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1f
Ynl0ZXMgPSAwOworICAgIG1fcGl4ZWxzID0gbnVsbHB0cjsKICAgICBtX3N0YXR1cyA9IEZyYW1l
RW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xl
YXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwogICAgIC8vIHRvIGZyZWUgdGhlIGJpdG1h
cCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgaW5pdEZyYW1lQnVmZmVyKCkgYW5kCkBA
IC0xNjMsMjQgKzE2MiwxNiBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIAog
dm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7Ci0gICAgbWVtc2V0KG1fYnl0
ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6ZW9mKFBpeGVsRGF0
YSkpOworICAgIG1fcGl4ZWxzLT5jbGVhcigpOwogICAgIG1faGFzQWxwaGEgPSB0cnVlOwogfQog
CiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7Ci0gICAgQVNTRVJUKEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0
KSk7Ci0KICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNp
emVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSk7
Ci0gICAgUGl4ZWxEYXRhKiBzdGFydCA9IG1fYnl0ZXMgKyAocmVjdC55KCkgKiB3aWR0aCgpKSAr
IHJlY3QueCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5oZWlnaHQoKTsgKytpKSB7
Ci0gICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRoSW5CeXRlcyk7Ci0gICAgICAgIHN0
YXJ0ICs9IHdpZHRoKCk7Ci0gICAgfQotCisgICAgbV9waXhlbHMtPmNsZWFyUmVjdChyZWN0KTsK
ICAgICBzZXRIYXNBbHBoYSh0cnVlKTsKIH0KIApAQCAtMTg5LDI1ICsxODAsMjMgQEAgYm9vbCBJ
bWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKICAgICBp
ZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgbV9iYWNraW5n
U3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKLSAgICBtX2J5dGVzID0gbV9iYWNraW5nU3Rv
cmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBzZXRIYXNBbHBoYShv
dGhlci5tX2hhc0FscGhhKTsKKyAgICBpZiAob3RoZXIubV9waXhlbHMpCisgICAgICAgIG1fcGl4
ZWxzID0gQml0bWFwUGl4ZWxzOjpjcmVhdGUoKm90aGVyLm1fcGl4ZWxzLmdldCgpKTsKKyAgICBl
bHNlCisgICAgICAgIG1fcGl4ZWxzID0gbnVsbHB0cjsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ym9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKIHsK
LSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsKLSAgICBzaXplX3QgYmFja2luZ1N0
b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAgIGlmICghbV9iYWNraW5nU3RvcmUu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tpbmdTdG9yZVNpemUpOwotICAgIG1f
Ynl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gSW50U2l6ZShuZXdX
aWR0aCwgbmV3SGVpZ2h0KTsKKyAgICBBU1NFUlQoIW1fcGl4ZWxzKTsKKyAgICBtX3BpeGVscyA9
IEJpdG1hcFBpeGVsczo6Y3JlYXRlKEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCksIG1fcHJl
bXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1fcGl4ZWxzICE9IG51bGxwdHI7Cit9CiAKLSAg
ICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwotICAgIHJldHVybiB0cnVlOwordm9pZCBJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5k
WSkKK3sKKyAgICBtX3BpeGVscy0+cmVwZWF0Rmlyc3RSb3coSW50UmVjdChzdGFydFgsIHN0YXJ0
WSwgZW5kWCAtc3RhcnRYICwgZW5kWSAtIHN0YXJ0WSkpOwogfQogCiBib29sIEltYWdlRnJhbWU6
Omhhc0FscGhhKCkgY29uc3QKQEAgLTIyMCwxMSArMjA5LDYgQEAgdm9pZCBJbWFnZUZyYW1lOjpz
ZXRIYXNBbHBoYShib29sIGFscGhhKQogICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKIH0KIAotdm9p
ZCBJbWFnZUZyYW1lOjpzZXRDb2xvclByb2ZpbGUoY29uc3QgQ29sb3JQcm9maWxlJiBjb2xvclBy
b2ZpbGUpCi17Ci0gICAgbV9jb2xvclByb2ZpbGUgPSBjb2xvclByb2ZpbGU7Ci19Ci0KIHZvaWQg
SW1hZ2VGcmFtZTo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cykKIHsKICAgICBtX3N0YXR1
cyA9IHN0YXR1czsKQEAgLTI5MSw3ICsyNzUsNyBAQCB1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZy
YW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICBpZiAobV9mcmFtZUJ1ZmZl
ckNhY2hlLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gRklYTUU6
IFVzZSB0aGUgZGltZW5zaW9uIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUuCi0gICAgcmV0dXJuIG1f
c2l6ZS5hcmVhKCkgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKTsKKyAgICByZXR1cm4g
bV9zaXplLmFyZWEoKSAqIHNpemVvZihSR0JBMzIpOwogfQogCiBmbG9hdCBJbWFnZURlY29kZXI6
OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXggMmY4ZWVl
MTc4MWQxNjJkODZjNDlmZTFkYWM3MmEyZTdlNDBhNWQ2ZC4uMzZmMGRlNjllOTRkMzNlZTYzNGE2
OGVjOTk1MDRiN2U3NWY4MGMzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI3By
YWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCaXRtYXBQaXhlbHMuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5o
IgpAQCAtNTcsNyArNTgsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAg
ICAgICAgICAgICBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgIC8vIENsZWFyIGZyYW1lIHRvIHBy
ZXZpb3VzIGZyYW1lYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNvbnRlbnRzCiAgICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxE
YXRhOwogCiAgICAgICAgIEltYWdlRnJhbWUoKTsKIApAQCAtODAsMzggKzgwLDMwIEBAIHVzaW5n
IENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhl
bCBkYXRhIGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAg
ICAgIC8vIHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1
dCBub3QgaW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCi0gICAgICAgIHZvaWQgY29weVJvd05U
aW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFT
U0VSVChlbmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdo
dCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAg
IGNvbnN0IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEp
OwotICAgICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRy
KHN0YXJ0WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsg
MTsgZGVzdFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRy
KHN0YXJ0WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKLSAgICAgICAgfQorICAgICAg
ICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGlu
dCBlbmRZKTsKIAogICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRh
LiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0
ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlv
bgogICAgICAgICAvLyBzdWNjZWVkZWQuCiAgICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3V2lk
dGgsIGludCBuZXdIZWlnaHQpOworICAgICAgICAKKyAgICAgICAgSW50U2l6ZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9waXhlbHMtPnNpemUoKTsgfQogCiAgICAgICAgIC8vIFJldHVybnMgYSBj
YWxsZXItb3duZWQgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBuYXRpdmUgaW1hZ2UgZGF0YS4K
ICAgICAgICAgLy8gKEFjdHVhbCB1c2U6IFRoaXMgcG9pbnRlciB3aWxsIGJlIG93bmVkIGJ5IEJp
dG1hcEltYWdlIGFuZCBmcmVlZCBpbgogICAgICAgICAvLyBGcmFtZURhdGE6OmNsZWFyKCkpLgot
ICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3Q7CisgICAgICAg
IE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3BpeGVs
cy0+aW1hZ2UoKTsgfQorCisgICAgICAgIGlubGluZSBCaXRtYXBQaXhlbHMqIHBpeGVscygpIGNv
bnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9CisgICAg
ICAgIGlubGluZSBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVscygpOyB9CiAK
ICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OwotICAgICAgICBjb25zdCBJbnRSZWN0JiBv
cmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxGcmFtZVJlY3Q7IH0K
ICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0K
ICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9
CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJl
dHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CiAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQogCiAgICAgICAgIHZvaWQgc2V0
SGFzQWxwaGEoYm9vbCBhbHBoYSk7Ci0gICAgICAgIHZvaWQgc2V0Q29sb3JQcm9maWxlKGNvbnN0
IENvbG9yUHJvZmlsZSYpOwotICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmIHIpIHsgbV9vcmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KICAgICAgICAgdm9pZCBz
ZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKTsKICAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1
bnNpZ25lZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KICAgICAgICAgdm9p
ZCBzZXREaXNwb3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bv
c2FsTWV0aG9kID0gbWV0aG9kOyB9CkBAIC0xMTksMTA4ICsxMTEsMjkgQEAgdXNpbmcgQ29sb3JQ
cm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50
IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBh
KQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXRSR0JBKGdldEFkZHIoeCwgeSksIHIsIGcsIGIs
IGEpOworICAgICAgICAgICAgbV9waXhlbHMtPnNldFJHQkEoeCwgeSwgciwgZywgYiwgYSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBnZXRBZGRyKGludCB4LCBpbnQg
eSkKKyAgICAgICAgaW5saW5lIFJHQkEzMiogZ2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CisgICAg
ICAgICAgICByZXR1cm4gbV9waXhlbHMtPmF0KHgsIHkpOwogICAgICAgICB9CiAKLSAgICAgICAg
aW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0
UkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzOwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gVXNlIGZpeCBwb2ludCBtdWx0aXBsaWVyIGluc3RlYWQgb2YgaW50
ZWdlciBkaXZpc2lvbiBvciBmbG9hdGluZyBwb2ludCBtYXRoLgotICAgICAgICAvLyBUaGlzIG11
bHRpcGxlciBwcm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdCBmb3IgYWxsIHZhbHVlcyBp
biByYW5nZSAwIC0gMjU1LgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRT
aGlmdCA9IDI0OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRNdWx0ID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEuMCAvIDI1NS4wICogKDEgPDwgZml4UG9pbnRTaGlmdCkp
ICsgMTsKLSAgICAgICAgLy8gTXVsdGlwbGllcyB1bnNpZ25lZCB2YWx1ZSBieSBmaXhwb2ludCB2
YWx1ZSBhbmQgY29udmVydHMgYmFjayB0byB1bnNpZ25lZC4KLSAgICAgICAgc3RhdGljIHVuc2ln
bmVkIGZpeFBvaW50VW5zaWduZWRNdWx0aXBseSh1bnNpZ25lZCBmaXhlZCwgdW5zaWduZWQgdikK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNo
aWZ0OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShQaXhlbERhdGEq
IGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkg
ewotICAgICAgICAgICAgICAgIGlmICghYSkgewotICAgICAgICAgICAgICAgICAgICAqZGVzdCA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRNdWx0OwotICAg
ICAgICAgICAgICAgIHIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxwaGFNdWx0KTsK
LSAgICAgICAgICAgICAgICBnID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcsIGFscGhhTXVs
dCk7Ci0gICAgICAgICAgICAgICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShiLCBhbHBo
YU11bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIg
PDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKGRlc3Qs
IHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAgc3Rh
dGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIChhICsgKGEgPj4gOCkgKyAxKSA+PiA4OwotICAgICAgICB9Ci0KLSAg
ICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBv
dmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIs
IHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgYURlc3QgPSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFEZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0gKCgq
ZGVzdCkgPj4gMTYpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVzdCA9
ICgoKmRlc3QpID4+IDgpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiRGVz
dCA9ICgqZGVzdCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXggPSAy
NTUgLSBhOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVzdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFEZXN0
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICogYURl
c3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZp
ZGUyNTUociAqIGEgKyByRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2
aWRlMjU1KGcgKiBhICsgZ0Rlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRp
dmlkZTI1NShiICogYSArIGJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEgKz0g
ZGl2aWRlMjU1KGFEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVt
dWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUgKyBh
IC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAtIDEp
IC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAvIGE7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcHJl
bXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBh
KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4
IHwgYik7CisgICAgICAgICAgICBtX3BpeGVscy0+b3ZlclJHQkEoZGVzdCwgciwgZywgYiwgYSk7
CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IHdpZHRoKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8
UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAv
LyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6
ZSBtX3NpemU7Ci0gICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9maWxlIGFu
eW1vcmU/Ci0gICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJvZmlsZTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhlbHM7CiAgICAgICAgIGJvb2wgbV9oYXNB
bHBoYTsKLSAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwg
YWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRo
YW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBp
bWFnZSBzaXplLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWdu
ZWQgbV9kdXJhdGlvbjsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0
aG9kOwpAQCAtMzgxLDggKzI5NCw2IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFy
PjsKIAogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVk
IGRhdGEuCiAgICAgICAgIFZlY3RvcjxJbWFnZUZyYW1lLCAxPiBtX2ZyYW1lQnVmZmVyQ2FjaGU7
Ci0gICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9maWxlIGFueSBtb3JlLCBm
b3IgYW55IHBvcnQ/Ci0gICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJvZmlsZTsKICAgICAg
ICAgYm9vbCBtX3NjYWxlZCB7IGZhbHNlIH07CiAgICAgICAgIFZlY3RvcjxpbnQ+IG1fc2NhbGVk
Q29sdW1uczsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZVJlYWRlci5jcHAKaW5kZXggNWMwMDU1MzRlY2Q5MjEzNGExM2IzMjk1ODkyNzc5MGYwN2FkMGY4
MS4uZjkxOGNmMzI0Mjk2N2Y3MjdhNzUzN2EzYjRhNjVmMTI5NDljNzZjMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VSZWFkZXIuY3BwCkBAIC04Niw5ICs4Niw2IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRl
Y29kZUJNUChib29sIG9ubHlTaXplKQogICAgICAgICAvLyB0aGVzZSAwcyBjb3VsZCBhY3R1YWxs
eSBzaG93IHRocm91Z2guCiAgICAgICAgIG1fYnVmZmVyLT5zZXRIYXNBbHBoYShmYWxzZSk7CiAK
LSAgICAgICAgLy8gRm9yIEJNUHMsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBp
bWFnZS4KLSAgICAgICAgbV9idWZmZXItPnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgbV9wYXJlbnQtPnNpemUoKSkpOwotCiAgICAgICAgIGlmICghbV9pc1RvcERvd24p
CiAgICAgICAgICAgICBtX2Nvb3JkLnNldFkobV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSAtIDEp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
YWFmOGEwYTM2YjE4Y2JmNzI3N2QyYzJlMjZlYjQxNzEyNTYwMGQ1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4
ZWxzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaXRt
YXBQaXhlbHMuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworTmF0aXZlSW1hZ2VQdHIgQml0bWFwUGl4ZWxzOjppbWFnZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAorICAgICAg
ICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PFJHQkEzMio+KG1f
cGl4ZWxzKSksCisgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHNpemUoKS53aWR0aCgpLCBz
aXplKCkuaGVpZ2h0KCksIHNpemUoKS53aWR0aCgpICogc2l6ZW9mKFJHQkEzMikpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjQxMjk1Zjg1NzM1OGZiYmYzNWMxYjA1
MjVlOGQ2Y2MzNTIwZjU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdl
RGVjb2RlckNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRp
dmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlX2Zvcl9kYXRhKAotICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNo
YXIqPihjb25zdF9jYXN0PFBpeGVsRGF0YSo+KG1fYnl0ZXMpKSwKLSAgICAgICAgQ0FJUk9fRk9S
TUFUX0FSR0IzMiwgd2lkdGgoKSwgaGVpZ2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRh
KSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
Y3BwCmluZGV4IDlmOTkyYTdiZTFkNjY3MjI2NzVjMmU4NTRhZDE4OTFlNjBmODU3N2MuLmJkNDQ0
NTNkMWQ3NzA0N2FhNWZjOTNlOGYyMTc3MzQwOWM4MWM4NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURl
Y29kZXIuY3BwCkBAIC0yMTMsMTAgKzIxMywxMCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2
ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkCiAK
ICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuCiAgICAgSW1hZ2VGcmFt
ZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlmICgoKGJ1
ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVm
ZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc1BpeGVsRGF0YSgpKQorICAgIGlmICgoKGJ1
ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVm
ZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc1BpeGVscygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVm
ZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOworICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3Mg
PSBidWZmZXIuZ2V0QWRkcih4QmVnaW4sIHlCZWdpbik7CiAgICAgLy8gV3JpdGUgb25lIHJvdydz
IHdvcnRoIG9mIGRhdGEgaW50byB0aGUgZnJhbWUuICAKICAgICBmb3IgKGludCB4ID0geEJlZ2lu
OyB4IDwgeEVuZDsgKyt4KSB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFs
dWUgPSByb3dCdWZmZXJbKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFt
ZUNvbnRleHQtPnhPZmZzZXRdOwpAQCAtMjYwLDcgKzI2MCw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVy
YXRpb24sCiAgICAgaWYgKCFtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSkgewogICAgICAgICAvLyBU
aGUgd2hvbGUgZnJhbWUgd2FzIG5vbi10cmFuc3BhcmVudCwgc28gaXQncyBwb3NzaWJsZSB0aGF0
IHRoZSBlbnRpcmUKICAgICAgICAgLy8gcmVzdWx0aW5nIGJ1ZmZlciB3YXMgbm9uLXRyYW5zcGFy
ZW50LCBhbmQgd2UgY2FuIHNldEhhc0FscGhhKGZhbHNlKS4KLSAgICAgICAgaWYgKGJ1ZmZlci5v
cmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6
ZSgpKSkpCisgICAgICAgIGlmIChidWZmZXIucGl4ZWxzKCktPnJlY3QoKS5jb250YWlucyhJbnRS
ZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQogICAgICAgICAgICAgYnVmZmVyLnNldEhh
c0FscGhhKGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAoZnJhbWVJbmRleCkgewogICAgICAgICAg
ICAgLy8gVHJpY2t5IGNhc2UuICBUaGlzIGZyYW1lIGRvZXMgbm90IGhhdmUgYWxwaGEgb25seSBp
ZiBldmVyeXdoZXJlCkBAIC0yODMsNyArMjgzLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZy
YW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwK
ICAgICAgICAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyBjYXNlIGlzIGEgRGlzcG9zZU92ZXJ3
cml0ZUJnY29sb3IgZnJhbWUuICBJZgogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFscGhhLCBh
bmQgaXRzIHJlY3QgaXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAgICAgICAg
ICAgIC8vIHJlY3QsIHdlIGtub3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhhLgotICAg
ICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6
OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBi
dWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZy
YW1lUmVjdCgpKSkKKyAgICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2Qo
KSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xvcikgJiYgIXByZXZCdWZmZXIt
Pmhhc0FscGhhKCkgJiYgYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZl
ci0+cGl4ZWxzKCktPnJlY3QoKSkpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhh
KGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM1MywxMSArMzUzLDYgQEAgYm9vbCBHSUZJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogICAgICAg
ICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lQ29udGV4dC0+eU9m
ZnNldCk7CiAKICAgICBJbWFnZUZyYW1lKiBjb25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNh
Y2hlW2ZyYW1lSW5kZXhdOwotICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVS
ZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1h
eFgoKSwgbGVmdCk7Ci0gICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55
KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgp
LCB0b3ApOwotICAgIGJ1ZmZlci0+c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChsZWZ0LCB0
b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKICAgICBpZiAoIWZyYW1lSW5kZXgp
IHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5
aW5nIG9uIGFueSBwcmV2aW91cyBkYXRhLgpAQCAtMzg3LDcgKzM4Miw3IEBAIGJvb2wgR0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZy
YW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4
ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgICAgIGNvbnN0
IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAg
ICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+cGl4ZWxzKCkt
PnJlY3QoKTsKICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRT
aXplKCk7CiAgICAgICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMo
SW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewogICAgICAgICAgICAgICAgIC8v
IENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hv
bGUKQEAgLTQwMiw2ICszOTcsMTIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQorICAgIAorICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7
CisgICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVm
dCk7CisgICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOworICAg
IGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOwor
ICAgIGJ1ZmZlci0+cGl4ZWxzKCktPnNldFJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0g
bGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBw
YXJ0aWFsbHkgY29tcGxldGUuCiAgICAgYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJh
bWVQYXJ0aWFsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IGVlNjZhYzE0
ZDRiZTA3Y2E5YWZmYjJhM2FmZjg5ZWJmYTYyZmIxMmUuLmFkZGIwZGE0ZTg2ZDhlYzIxNDFiMzVj
MzcyNjQ1OTcwMGM2OWIyYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAt
MTk2LDM2ICsxOTYsNiBAQCBzdGF0aWMgSW1hZ2VPcmllbnRhdGlvbiByZWFkSW1hZ2VPcmllbnRh
dGlvbihqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvKQogICAgIHJldHVybiBJbWFnZU9yaWVu
dGF0aW9uKCk7CiB9CiAKLXN0YXRpYyBDb2xvclByb2ZpbGUgcmVhZENvbG9yUHJvZmlsZShqcGVn
X2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvKQotewotI2lmIFVTRShJQ0NKUEVHKQotICAgIEpPQ1RF
VCogcHJvZmlsZTsKLSAgICB1bnNpZ25lZCBpbnQgcHJvZmlsZUxlbmd0aDsKLQotICAgIGlmICgh
cmVhZF9pY2NfcHJvZmlsZShpbmZvLCAmcHJvZmlsZSwgJnByb2ZpbGVMZW5ndGgpKQotICAgICAg
ICByZXR1cm4gQ29sb3JQcm9maWxlKCk7Ci0KLSAgICAvLyBPbmx5IGFjY2VwdCBSR0IgY29sb3Ig
cHJvZmlsZXMgZnJvbSBpbnB1dCBjbGFzcyBkZXZpY2VzLgotICAgIGJvb2wgaWdub3JlUHJvZmls
ZSA9IGZhbHNlOwotICAgIGNoYXIqIHByb2ZpbGVEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4ocHJvZmlsZSk7Ci0gICAgaWYgKHByb2ZpbGVMZW5ndGggPCBJbWFnZURlY29kZXI6OmljY0Nv
bG9yUHJvZmlsZUhlYWRlckxlbmd0aCkKLSAgICAgICAgaWdub3JlUHJvZmlsZSA9IHRydWU7Ci0g
ICAgZWxzZSBpZiAoIUltYWdlRGVjb2Rlcjo6cmdiQ29sb3JQcm9maWxlKHByb2ZpbGVEYXRhLCBw
cm9maWxlTGVuZ3RoKSkKLSAgICAgICAgaWdub3JlUHJvZmlsZSA9IHRydWU7Ci0gICAgZWxzZSBp
ZiAoIUltYWdlRGVjb2Rlcjo6aW5wdXREZXZpY2VDb2xvclByb2ZpbGUocHJvZmlsZURhdGEsIHBy
b2ZpbGVMZW5ndGgpKQotICAgICAgICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsKLQotICAgIENvbG9y
UHJvZmlsZSBjb2xvclByb2ZpbGU7Ci0gICAgaWYgKCFpZ25vcmVQcm9maWxlKQotICAgICAgICBj
b2xvclByb2ZpbGUuYXBwZW5kKHByb2ZpbGVEYXRhLCBwcm9maWxlTGVuZ3RoKTsKLSAgICBmcmVl
KHByb2ZpbGUpOwotICAgIHJldHVybiBjb2xvclByb2ZpbGU7Ci0jZWxzZQotICAgIFVOVVNFRF9Q
QVJBTShpbmZvKTsKLSAgICByZXR1cm4gQ29sb3JQcm9maWxlKCk7Ci0jZW5kaWYKLX0KLQogY2xh
c3MgSlBFR0ltYWdlUmVhZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKQEAgLTM2MywxMyArMzMzLDYgQEAgcHVibGljOgogICAgICAgICAgICAgaWYgKG1fZGVjb2Rl
ci0+d2lsbERvd25TYW1wbGUoKSAmJiB0dXJib1N3aXp6bGVkKG1faW5mby5vdXRfY29sb3Jfc3Bh
Y2UpKQogICAgICAgICAgICAgICAgIG1faW5mby5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOwog
I2VuZGlmCi0gICAgICAgICAgICAvLyBBbGxvdyBjb2xvciBtYW5hZ2VtZW50IG9mIHRoZSBkZWNv
ZGVkIFJHQkEgcGl4ZWxzIGlmIHBvc3NpYmxlLgotICAgICAgICAgICAgaWYgKCFtX2RlY29kZXIt
Pmlnbm9yZXNHYW1tYUFuZENvbG9yUHJvZmlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgQ29sb3JQ
cm9maWxlIHJnYklucHV0RGV2aWNlQ29sb3JQcm9maWxlID0gcmVhZENvbG9yUHJvZmlsZShpbmZv
KCkpOwotICAgICAgICAgICAgICAgIGlmICghcmdiSW5wdXREZXZpY2VDb2xvclByb2ZpbGUuaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgICAgICBtX2RlY29kZXItPnNldENvbG9yUHJvZmlsZShy
Z2JJbnB1dERldmljZUNvbG9yUHJvZmlsZSk7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAg
IC8vIERvbid0IGFsbG9jYXRlIGEgZ2lhbnQgYW5kIHN1cGVyZmx1b3VzIG1lbW9yeSBidWZmZXIg
d2hlbiB0aGUKICAgICAgICAgICAgIC8vIGltYWdlIGlzIGEgc2VxdWVudGlhbCBKUEVHLgogICAg
ICAgICAgICAgbV9pbmZvLmJ1ZmZlcmVkX2ltYWdlID0ganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMo
Jm1faW5mbyk7CkBAIC01ODgsNyArNTUxLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRG
YWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgotdm9pZCBz
ZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVu
dEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3ZvaWQgc2V0UGl4ZWwo
SW1hZ2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNh
bXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9ICpzYW1wbGVzICsg
Y29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIApAQCAtNjMxLDcgKzU5
NCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEltYWdlRnJhbWUm
IGJ1ZmZlcikKICAgICAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIu
Z2V0QWRkcigwLCBkZXN0WSk7CisgICAgICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZm
ZXIuZ2V0QWRkcigwLCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7
ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJyZW50
QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KTsKICAg
ICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CkBAIC02NjAsMTAgKzYyMyw2IEBAIGJvb2wgSlBF
R0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAgLy8gVGhlIGJ1ZmZlciBp
cyB0cmFuc3BhcmVudCBvdXRzaWRlIHRoZSBkZWNvZGVkIGFyZWEgd2hpbGUgdGhlIGltYWdlIGlz
CiAgICAgICAgIC8vIGxvYWRpbmcuIFRoZSBjb21wbGV0ZWQgaW1hZ2Ugd2lsbCBiZSBtYXJrZWQg
ZnVsbHkgb3BhcXVlIGluIGpwZWdDb21wbGV0ZSgpLgogICAgICAgICBidWZmZXIuc2V0SGFzQWxw
aGEodHJ1ZSk7Ci0gICAgICAgIGJ1ZmZlci5zZXRDb2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUp
OwotCi0gICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50
aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0
KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKaW5k
ZXggNmMxZmMwNDI3MzIyMDM3NWJjNmEyNWVjMTk4ZjhjOGE1MTAxNDg2Yy4uNjIxZWQ1MTUxNjFm
YzczZDlhMWVhNjA2NjA0MDA1M2NkNThlZDg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVy
LmgKQEAgLTY2LDcgKzY2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG91
dHB1dFNjYW5saW5lcygpOwogICAgICAgICB2b2lkIGpwZWdDb21wbGV0ZSgpOwogCi0gICAgICAg
IHZvaWQgc2V0Q29sb3JQcm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKSB7
IG1fY29sb3JQcm9maWxlID0gY29sb3JQcm9maWxlOyB9CiAgICAgICAgIHZvaWQgc2V0T3JpZW50
YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3Jp
ZW50YXRpb247IH0KIAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCmlu
ZGV4IGU2NDRhNzExMGVmY2I1NDBkODljZTFiYTgxMTAwYmM0ODIzYjE4ZjIuLmMxMDg1MGI2Nzg3
M2UwMmZmNzY0YTkzMzliOWM2OGNjNTQ0MTllMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIu
Y3BwCkBAIC0yNzYsMzcgKzI3Niw2IEBAIGJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQo
KQogICAgIHJldHVybiBJbWFnZURlY29kZXI6OnNldEZhaWxlZCgpOwogfQogCi1zdGF0aWMgdm9p
ZCByZWFkQ29sb3JQcm9maWxlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2luZm9wIGluZm8sIENvbG9y
UHJvZmlsZSYgY29sb3JQcm9maWxlKQotewotICAgIEFTU0VSVChjb2xvclByb2ZpbGUuaXNFbXB0
eSgpKTsKLQotI2lmZGVmIFBOR19pQ0NQX1NVUFBPUlRFRAotICAgIGNoYXIqIHByb2ZpbGVOYW1l
OwotICAgIGludCBjb21wcmVzc2lvblR5cGU7Ci0jaWYgKFBOR19MSUJQTkdfVkVSIDwgMTA1MDAp
Ci0gICAgcG5nX2NoYXJwIHByb2ZpbGU7Ci0jZWxzZQotICAgIHBuZ19ieXRlcCBwcm9maWxlOwot
I2VuZGlmCi0gICAgcG5nX3VpbnRfMzIgcHJvZmlsZUxlbmd0aDsKLSAgICBpZiAoIXBuZ19nZXRf
aUNDUChwbmcsIGluZm8sICZwcm9maWxlTmFtZSwgJmNvbXByZXNzaW9uVHlwZSwgJnByb2ZpbGUs
ICZwcm9maWxlTGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25seSBhY2NlcHQg
UkdCIGNvbG9yIHByb2ZpbGVzIGZyb20gaW5wdXQgY2xhc3MgZGV2aWNlcy4KLSAgICBib29sIGln
bm9yZVByb2ZpbGUgPSBmYWxzZTsKLSAgICBjaGFyKiBwcm9maWxlRGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KHByb2ZpbGUpOwotICAgIGlmIChwcm9maWxlTGVuZ3RoIDwgSW1hZ2VEZWNv
ZGVyOjppY2NDb2xvclByb2ZpbGVIZWFkZXJMZW5ndGgpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUg
PSB0cnVlOwotICAgIGVsc2UgaWYgKCFJbWFnZURlY29kZXI6OnJnYkNvbG9yUHJvZmlsZShwcm9m
aWxlRGF0YSwgcHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwot
ICAgIGVsc2UgaWYgKCFJbWFnZURlY29kZXI6OmlucHV0RGV2aWNlQ29sb3JQcm9maWxlKHByb2Zp
bGVEYXRhLCBwcm9maWxlTGVuZ3RoKSkKLSAgICAgICAgaWdub3JlUHJvZmlsZSA9IHRydWU7Ci0K
LSAgICBpZiAoIWlnbm9yZVByb2ZpbGUpCi0gICAgICAgIGNvbG9yUHJvZmlsZS5hcHBlbmQocHJv
ZmlsZURhdGEsIHByb2ZpbGVMZW5ndGgpOwotI2VuZGlmCi19Ci0KIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogewogICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1fcmVhZGVy
LT5wbmdQdHIoKTsKQEAgLTQwNSwxNiArMzc0LDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6Omhl
YWRlckF2YWlsYWJsZSgpCiAgICAgaWYgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZ
IHx8IGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBKQogICAgICAgICBwbmdf
c2V0X2dyYXlfdG9fcmdiKHBuZyk7CiAKLSAgICBpZiAoKGNvbG9yVHlwZSAmIFBOR19DT0xPUl9N
QVNLX0NPTE9SKSAmJiAhbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkgewotICAgICAgICAv
LyBXZSBvbmx5IHN1cHBvcnQgY29sb3IgcHJvZmlsZXMgZm9yIGNvbG9yIFBBTEVUVEUgYW5kIFJH
QltBXSBQTkcuIFN1cHBvcnRpbmcKLSAgICAgICAgLy8gY29sb3IgcHJvZmlsZXMgZm9yIGdyYXkt
c2NhbGUgaW1hZ2VzIGlzIHNsaWdodGx5IHRyaWNreSwgYXQgbGVhc3QgdXNpbmcgdGhlCi0gICAg
ICAgIC8vIENvcmVHcmFwaGljcyBJQ0MgbGlicmFyeSwgYmVjYXVzZSB3ZSBleHBhbmQgZ3JheS1z
Y2FsZSBpbWFnZXMgdG8gUkdCIGJ1dCB3ZQotICAgICAgICAvLyBkbyBub3Qgc2ltaWxhcmx5IHRy
YW5zZm9ybSB0aGUgY29sb3IgcHJvZmlsZS4gV2UnZCBlaXRoZXIgbmVlZCB0byB0cmFuc2Zvcm0K
LSAgICAgICAgLy8gdGhlIGNvbG9yIHByb2ZpbGUgb3Igd2UnZCBuZWVkIHRvIGRlY29kZSBpbnRv
IGEgZ3JheS1zY2FsZSBpbWFnZSBidWZmZXIgYW5kCi0gICAgICAgIC8vIGhhbmQgdGhhdCB0byBD
b3JlR3JhcGhpY3MuCi0gICAgICAgIHJlYWRDb2xvclByb2ZpbGUocG5nLCBpbmZvLCBtX2NvbG9y
UHJvZmlsZSk7Ci0gICAgfQotCiAgICAgLy8gRGVhbCB3aXRoIGdhbW1hIGFuZCBrZWVwIGl0IHVu
ZGVyIG91ciBjb250cm9sLgogICAgIGRvdWJsZSBnYW1tYTsKICAgICBpZiAoIW1faWdub3JlR2Ft
bWFBbmRDb2xvclByb2ZpbGUgJiYgcG5nX2dldF9nQU1BKHBuZywgaW5mbywgJmdhbW1hKSkgewpA
QCAtNDUyLDE5ICs0MTEsMTkgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJs
ZSgpCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0IoSW1hZ2VGcmFt
ZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQg
c2V0UGl4ZWxSR0IoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwpCiB7CiAgICAgKmRlc3Qg
PSAweEZGMDAwMDAwVSB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJd
OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKEltYWdlRnJhbWU6OlBpeGVs
RGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxw
aGFNYXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCQShSR0JBMzIqIGRlc3QsIHBu
Z19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKIHsKICAg
ICB1bnNpZ25lZCBjaGFyIGEgPSBwaXhlbFszXTsKICAgICAqZGVzdCA9IGEgPDwgMjQgfCBwaXhl
bFswXSA8PCAxNiB8IHBpeGVsWzFdIDw8IDggfCBwaXhlbFsyXTsKICAgICBub25Ucml2aWFsQWxw
aGFNYXNrIHw9ICgyNTUgLSBhKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUHJl
bXVsdGlwbGllZFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4
ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZv
aWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhl
bCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKIHsKICAgICB1bnNpZ25lZCBj
aGFyIGEgPSBwaXhlbFszXTsKICAgICB1bnNpZ25lZCBjaGFyIHIgPSBmYXN0RGl2aWRlQnkyNTUo
cGl4ZWxbMF0gKiBhKTsKQEAgLTUwNiwxNSArNDY1LDExIEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
Ojpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRl
eCwKIAogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7
CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7Ci0gICAgICAgIGJ1ZmZlci5zZXRD
b2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUpOwogCiAjaWYgRU5BQkxFKEFQTkcpCiAgICAgICAg
IGlmIChtX2N1cnJlbnRGcmFtZSkKICAgICAgICAgICAgIGluaXRGcmFtZUJ1ZmZlcihtX2N1cnJl
bnRGcmFtZSk7Ci0gICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAvLyBGb3IgUE5HcywgdGhl
IGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0
T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAK
ICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUgdG8gZXhwbGFpbiB3aGF0IGZvbGxvd3MpLgpA
QCAtNTczLDcgKzUyOCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5z
aWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICB9CiAKICAgICAv
LyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIuCi0gICAg
SW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7Cisg
ICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CiAgICAgaW50IHdpZHRo
ID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAgICAgdW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxw
aGFNYXNrID0gMDsKIApAQCAtODM0LDExICs3ODksNiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
aW5pdEZyYW1lQnVmZmVyKHNpemVfdCBmcmFtZUluZGV4KQogICAgICAgICBmcmFtZVJlY3Quc2V0
SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIG1feU9mZnNldCk7CiAKICAgICBJbWFnZUZyYW1lJiBi
dWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaW50IGxlZnQgPSB1
cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmlnaHQgPSBsb3dlckJv
dW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKLSAgICBpbnQgdG9wID0gdXBwZXJC
b3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRT
Y2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVmZmVyLnNldE9yaWdpbmFsRnJh
bWVSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwog
CiAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMgb24gdGhl
IHByZXZpb3VzIGZyYW1lJ3MKICAgICAvLyBkaXNwb3NhbCBtZXRob2QuCkBAIC04NjIsNyArODEy
LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihzaXplX3QgZnJhbWVJ
bmRleCkKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2
aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAvLyBhZmZlY3Rpbmcg
cGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3Qg
SW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAg
ICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPnBpeGVscygpLT5yZWN0
KCk7CiAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0
KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAvLyBDbGVhcmluZyB0
aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xlCiAgICAgICAg
ICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCkBAIC04
NzMsNiArODIzLDEyIEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2l6
ZV90IGZyYW1lSW5kZXgpCiAgICAgICAgICAgICBidWZmZXIuemVyb0ZpbGxGcmFtZVJlY3QocHJl
dlJlY3QpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGludCBsZWZ0ID0gdXBwZXJCb3Vu
ZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7CisgICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxl
ZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7CisgICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2Fs
ZWRZKGZyYW1lUmVjdC55KCkpOworICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShm
cmFtZVJlY3QubWF4WSgpLCB0b3ApOworICAgIGJ1ZmZlci5waXhlbHMoKS0+c2V0UmVjdChJbnRS
ZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIH0KIAogdm9pZCBQ
TkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQpAQCAtODg2LDcgKzg0Miw3IEBAIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICBwbmdfYnl0ZXAgaW50ZXJsYWNl
QnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigpOwogCiAgICAgaWYgKG1fY3VycmVu
dEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0
ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgIGNvbnN0IEludFJlY3QmIHJl
Y3QgPSBidWZmZXIucGl4ZWxzKCktPnJlY3QoKTsKICAgICAgICAgYm9vbCBoYXNBbHBoYSA9IG1f
cmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xvckNoYW5uZWxzID0gaGFz
QWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEgPSBmYWxzZTsKQEAg
LTg5Niw3ICs4NTIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAj
aWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCByZWN0Lm1heFkoKSAtIHJlY3QueSgpOyArK3kpIHsKICAgICAgICAgICAgIHBu
Z19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZFJvd3Nb
eV0gOiB5KSAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKTsKLSAgICAgICAgICAgIElt
YWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5
ICsgcmVjdC55KCkpOworICAgICAgICAgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFk
ZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHJlY3QubWF4WCgpIC0gcmVjdC54KCk7ICsreCkgewogICAgICAgICAgICAgICAgIHBuZ19i
eXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpICog
Y29sb3JDaGFubmVsczsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhh
ID8gcGl4ZWxbM10gOiAyNTU7CkBAIC05MTIsNyArODY4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVm
ZmVyOwogICAgICAgICBmb3IgKGludCB5ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgKyt5
LCByb3cgKz0gY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpKSB7CiAgICAgICAgICAgICBw
bmdfYnl0ZXAgcGl4ZWwgPSByb3c7Ci0gICAgICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEq
IGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CisgICAgICAgICAgICBSR0JB
MzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CiAgICAgICAgICAgICBm
b3IgKGludCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsgKyt4LCBwaXhlbCArPSBjb2xv
ckNoYW5uZWxzKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/
IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBo
YSA8IDI1NTsKQEAgLTkyNSw3ICs4ODEsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSgpCiAjZW5kaWYKIAogICAgICAgICBpZiAoIW5vblRyaXZpYWxBbHBoYSkgewotICAg
ICAgICAgICAgaWYgKGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKEludFJlY3Qo
SW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisgICAgICAgICAgICBpZiAoYnVmZmVyLnBpeGVs
cygpLT5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkK
ICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGZyYW1lSW5kZXggPSBtX2N1cnJlbnRGcmFt
ZTsKQEAgLTkzMyw3ICs4ODksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0
ZSgpCiAgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZCdWZmZXItPmRp
c3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSkK
ICAgICAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1m
cmFtZUluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0
aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IpCi0gICAgICAgICAg
ICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5vcmlnaW5hbEZy
YW1lUmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCkpKQorICAg
ICAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucGl4
ZWxzKCktPnJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpKSkKICAg
ICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmICghbV9ibGVuZCAmJiAhYnVmZmVyLmhhc0FscGhhKCkpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dF
QlBJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAxMjRhMWIyZjE5OTdmZTY3OGM2MWI1
MmYzMDU4ZGI0ZDZiODg2NzlhLi4wMjJjNmYwYWIyNWU4MWMwYWNkZjZkNTQzOTQyYTdjMTI1YzA2
YjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93
ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKQEAgLTEzMiwxNCArMTMyLDEz
IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUpCiAgICAgICAg
ICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VG
cmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKG1faGFzQWxw
aGEpOwotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2lu
dCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAgICAgICBX
RUJQX0NTUF9NT0RFIG1vZGUgPSBvdXRwdXRNb2RlKG1faGFzQWxwaGEpOwogICAgICAgICBpZiAo
IW1fcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIG1vZGUgPSBvdXRwdXRNb2RlKGZhbHNl
KTsKLSAgICAgICAgaW50IHJvd1N0cmlkZSA9IHNpemUoKS53aWR0aCgpICogc2l6ZW9mKEltYWdl
RnJhbWU6OlBpeGVsRGF0YSk7CisgICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgo
KSAqIHNpemVvZihSR0JBMzIpOwogICAgICAgICB1aW50OF90KiBvdXRwdXQgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigwLCAwKSk7CiAgICAgICAgIGludCBvdXRw
dXRTaXplID0gc2l6ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBtX2RlY29kZXIg
PSBXZWJQSU5ld1JHQihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlkZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0
aW1lVmlkZW9Tb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KaW5kZXggMjE2Y2QwOTNmMjY0Njdj
YmE4OGE0M2Y2OTNhYmY0Y2Y1MWRkMWE0ZC4uZDExNDU0YjA1ZWY4ODk5M2E2Mjg5Mzg5NmJjMGMx
MTcyOGM1ZWQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQpA
QCAtODcsNyArODcsNyBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQ
bGF0Zm9ybUxheWVyKCkgY29uc3QKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIGJy
ZWFrOwogCi0gICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsK
KyAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2UoKTsKICAgICAgICAg
aWYgKCFtX3ByZXZpZXdJbWFnZSkKICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAppbmRleCAzNmNkNjUxNmU4MGYx
NzQ4YmZlYWI3N2E5MzAyNzFjMTIxZGU4MDE5Li40YjRlMzc3OWU5NmY3OGM2NTQwYTUzYzQ0Nzhj
M2JmZDkzNWY1M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJh
Z0ltYWdlQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1h
Z2VDR1dpbi5jcHAKQEAgLTEzNiw5ICsxMzYsOSBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbikKICAg
ICBDR0NvbnRleHRTY2FsZUNUTShkcmF3Q29udGV4dCwgMSwgLTEpOwogICAgIENHQ29udGV4dFNl
dEZpbGxDb2xvcihkcmF3Q29udGV4dCwgd2hpdGUpOwogICAgIENHQ29udGV4dEZpbGxSZWN0KGRy
YXdDb250ZXh0LCByZWN0KTsKLSAgICBpZiAoYXV0byBzcmNJbWFnZSA9IGltZy0+Z2V0Q0dJbWFn
ZVJlZigpKSB7CisgICAgaWYgKGF1dG8gc3JjSW1hZ2UgPSBpbWctPm5hdGl2ZUltYWdlKCkpIHsK
ICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRyYXdDb250ZXh0LCBrQ0dCbGVuZE1vZGVO
b3JtYWwpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZHJhd0NvbnRleHQsIHJlY3QsIHNy
Y0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRyYXdDb250ZXh0LCByZWN0LCBz
cmNJbWFnZS5nZXQoKSk7CiAgICAgfQogICAgIENHQ29udGV4dFJlbGVhc2UoZHJhd0NvbnRleHQp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tIGIvU291
cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQppbmRleCBiNjU5ZDZkYmY5YWQ2OTk5YzNh
Yzk2MmRlOTUxNTc4MDk3ZTFmM2IxLi43YzVlZDIxMGRkYjJhMzJhNzY2Njc0YzEyMGQ5OTRjMmZh
NDdlN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KQEAgLTIwNCw3ICsyMDQsNyBA
QCArIChDR0ltYWdlUmVmKWltYWdlRm9yVVJMOihOU1VSTCAqKXVybAogICAgIFdlYkNvcmU6OkNh
Y2hlZEltYWdlJiBjYWNoZWRJbWFnZSA9IGRvd25jYXN0PFdlYkNvcmU6OkNhY2hlZEltYWdlPigq
Y2FjaGVkUmVzb3VyY2UpOwogICAgIGlmICghY2FjaGVkSW1hZ2UuaGFzSW1hZ2UoKSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNhY2hlZEltYWdlLmltYWdlKCktPmdldENH
SW1hZ2VSZWYoKTsKKyAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+bmF0aXZlSW1hZ2Uo
KS5nZXQoKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAppbmRleCAw
ZjZkZTdhMTQ2YTYxMWE1MmFhMWU1MzkwMTlmYTZjMWM0NjcyNWFlLi4zMDU2MzM2Y2I2NmZlNGFm
MThiZGM1MjlhY2EyZjhmYzg4MWRmZTU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCkBAIC0zNywxMiArMzcsMjMg
QEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBDR0ltYWdlUmVmIFdLSWNvbkRhdGFiYXNlVHJ5
R2V0Q0dJbWFnZUZvclVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJM
UmVmIHVybFJlZiwgV0tTaXplIHNpemUpCiB7CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGlj
b25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAg
ICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKEludFNpemUo
c3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdo
dCkpKSA6IDA7CisgICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPm5hdGl2ZUltYWdlT2ZTaXplKElu
dFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXpl
LmhlaWdodCkpKS5nZXQoKSA6IG51bGxwdHI7CiB9CiAKIENGQXJyYXlSZWYgV0tJY29uRGF0YWJh
c2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFz
ZVJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewogICAgIEltYWdlKiBpbWFnZSA9IHRvSW1wbChpY29u
RGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZTdHJpbmcodXJsUmVmKSk7Ci0gICAg
cmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldENHSW1hZ2VBcnJheSgpLmxlYWtSZWYoKSA6IDA7Cisg
ICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG5hdGl2
ZUltYWdlcyA9IGltYWdlLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsKKyAgICBpZiAoIW5hdGl2ZUlt
YWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIENGTXV0YWJs
ZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUobnVsbHB0ciwgbmF0aXZlSW1h
Z2VzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7CisgICAgZm9yIChhdXRvIG5hdGl2
ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXks
IG5hdGl2ZUltYWdlLmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZBcnJh
eVJlZj4oQ0ZSZXRhaW4oYXJyYXkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQppbmRleCBkYzc5ODNh
Yjk4OGMyZDA0YTE3MzBlZTEzNzMwM2MyNDQxNjE1MTk3Li5mYmMzZTVkNGM1NDMwMWNlOTIxN2E0
MGY4ZDA4YmQ1ODM1Mjc4N2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAtNDA3MSw3ICs0MDcxLDcg
QEAgLSAoVUlJbWFnZSAqKV9wcmVzZW50YXRpb25TbmFwc2hvdEZvclByZXZpZXdJdGVtQ29udHJv
bGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2wKIHsKICAgICBpZiAoIV9wb3NpdGlvbkluZm9ybWF0
aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbklu
Zm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlLT5nZXRDR0ltYWdlUmVmKCldIGF1
dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdl
Ol9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlLT5uYXRpdmVJ
bWFnZSgpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9CiAKIC0gKE5TQXJyYXkgKilfcHJlc2VudGF0
aW9uUmVjdHNGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sbGVy
ICopY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVn
aW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpblZpZXcuY3BwCmluZGV4IDlhMzNmN2NjN2RjN2M3ZDcyZjlkYTc0MzA5OGI3ZGJjYTgyNDA5
Y2YuLmE1MzI1MTA2NzhiOWY1MzUxNDU4YTM4YTlmNDIzMzc0N2QwMzVmNWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKQEAgLTE3Mjcs
NjkgKzE3MjcsNiBAQCB2b2lkIFBsdWdpblZpZXc6OndpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURp
ZENoYW5nZShib29sIGlzVmlzaWJsZSwgdWludDY0X3Qgd2luZAogfQogI2VuZGlmCiAKLSNpZiBQ
TEFURk9STShDT0NPQSkKLXN0YXRpYyBib29sIGlzQWxtb3N0U29saWRDb2xvcihCaXRtYXBJbWFn
ZSogYml0bWFwKQotewotICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBiaXRtYXAtPmdldENHSW1hZ2VS
ZWYoKTsKLSAgICBBU1NFUlQoQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQoaW1hZ2UpID09IDgp
OwotCi0gICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGlt
YWdlKTsKLSAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkg
fHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2spICE9IGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkRmlyc3QpIHsKLSAgICAgICAgLy8gRklYTUU6IENvbnNpZGVyIGJlaW5nIGFi
bGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc2l6ZV90IHdpZHRo
ID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlKTsKLSAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdl
dEhlaWdodChpbWFnZSk7Ci0gICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVz
UGVyUm93KGltYWdlKTsKLQotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIoaW1hZ2Up
KSk7Ci0gICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFHZXRCeXRlUHRyKHByb3ZpZGVyLmdl
dCgpKTsKLQotICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNhbXBsaW5nIGRvdHMgb24gdG9wIG9m
IGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgotICAgIC8vIEZvciB0aGUgaW50ZXJp
b3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gbHVtaW5hbmNlIGFtb25nIHRo
ZSBzYW1wbGUgcG9pbnQKLSAgICAvLyBhbmQgaXRzIHN1cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBi
eSB0cmFuc3BhcmVuY3kuCi0gICAgY29uc3QgdW5zaWduZWQgc2FtcGxlUm93cyA9IDc7Ci0gICAg
Y29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7Ci0gICAgLy8gRklYTUU6IFJlZmluZSB0aGUg
cHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21tb2RhdGUgZGlmZmVyZW50IGFzcGVj
dCByYXRpb3MuCi0gICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29scyB8fCBoZWlnaHQgPCBzYW1wbGVS
b3dzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFz
dCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KLSAgICBjb25zdCBmbG9h
dCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNv
bHMgLSAxKTsKLSAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOwotICAgIGZsb2F0IHNhbXBsZXNbc2Ft
cGxlUm93c11bc2FtcGxlQ29sc107Ci0KLSAgICAvLyBGaW5kIHRoZSBsdW1pbmFuY2Ugb2YgdGhl
IHNhbXBsZSBwb2ludHMuCi0gICAgZmxvYXQgeSA9IDA7Ci0gICAgY29uc3QgVUludDgqIHJvdyA9
IGRhdGE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNhbXBsZVJvd3M7ICsraSkgewot
ICAgICAgICBmbG9hdCB4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNh
bXBsZUNvbHM7ICsraikgewotICAgICAgICAgICAgY29uc3QgVUludDgqIHAwID0gcm93ICsgKHN0
YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0OwotICAgICAgICAgICAgLy8gUiBHIEIgQQotICAg
ICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIxMjUgKiAqcDAgKyAwLjcxNTQgKiAqKHAwKzEp
ICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMpIC8gMjU1OwotICAgICAgICAgICAgeCArPSBz
dHJpZGVXaWR0aDsKLSAgICAgICAgfQotICAgICAgICB5ICs9IHN0cmlkZUhlaWdodDsKLSAgICAg
ICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxpbnQ+KHkgKyAuNSkpICogYnl0ZXNQZXJSb3c7
Ci0gICAgfQotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSBzY29yZS4KLSAgICBmbG9hdCBh
Y2N1bVNjb3JlID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAt
IDE7ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAt
IDE7ICsraikgewotICAgICAgICAgICAgZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsg
c2FtcGxlc1tpICsgMV1bal0gKyBzYW1wbGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFd
IC0gNCAqIHNhbXBsZXNbaV1bal07Ci0gICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBk
aWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHNjb3JlIGZvciBhIGdpdmVuIHNh
bXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4KLSAgICByZXR1cm4g
YWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBsZUNvbHMgLSAyKTsK
LX0KLSNlbmRpZgotCiB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGltZXJGaXJlZCgp
CiB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKQEAg
LTE4MDksNyArMTc0Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZp
cmVkKCkKIAogICAgICAgICBpZiAoc25hcHNob3RJbWFnZSkgewogI2lmIEVOQUJMRShQUklNQVJZ
X1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0gICAgICAgICAgICBib29sIHNuYXBzaG90
SXNBbG1vc3RTb2xpZENvbG9yID0gaXNBbG1vc3RTb2xpZENvbG9yKGRvd25jYXN0PEJpdG1hcElt
YWdlPihzbmFwc2hvdEltYWdlLmdldCgpKSk7CisgICAgICAgICAgICBib29sIHNuYXBzaG90SXNB
bG1vc3RTb2xpZENvbG9yID0gc3RhdGljX3BvaW50ZXJfY2FzdDxCaXRtYXBJbWFnZT4oc25hcHNo
b3RJbWFnZSktPmlzQWxtb3N0U29saWRDb2xvcigpOwogICAgICAgICAgICAgc25hcHNob3RGb3Vu
ZCA9ICFzbmFwc2hvdElzQWxtb3N0U29saWRDb2xvcjsKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283484</attachid>
            <date>2016-07-12 18:18:28 -0700</date>
            <delta_ts>2016-09-08 12:49:49 -0700</delta_ts>
            <desc>Patch for review</desc>
            <filename>159699.patch</filename>
            <type>text/plain</type>
            <size>8988</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmZThkMmY1Li4xY2UxODMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIg
QEAKIDIwMTYtMDctMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNv
bT4KIAorICAgICAgICBHZXQgcmlkIG9mIHRoZSBjb2xvciBwcm9maWxlIGZyb20gSW1hZ2VGcmFt
ZSBhbmQgSW1hZ2VEZWNvZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTk2OTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRDb2xvclByb2ZpbGUpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpyZWFkQ29sb3JQcm9maWxlKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OnJlYWRDb2xvclByb2ZpbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UE5H
SW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUpOiBEZWxldGVkLgorCisyMDE2LTA3LTEyICBT
YWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKICAgICAgICAgU3Bs
aXQgdGhlIHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzCiAgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTk2NzkKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5jcHAKaW5kZXggODYxMDI1MC4uZTMwNDlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0yMDks
MTEgKzIwOSw2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKICAg
ICBtX2hhc0FscGhhID0gYWxwaGE7CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6c2V0Q29sb3JQcm9m
aWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQotewotICAgIG1fY29sb3JQcm9m
aWxlID0gY29sb3JQcm9maWxlOwotfQotCiB2b2lkIEltYWdlRnJhbWU6OnNldFN0YXR1cyhGcmFt
ZVN0YXR1cyBzdGF0dXMpCiB7CiAgICAgbV9zdGF0dXMgPSBzdGF0dXM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4
IDNiZTNmZWUuLjM2ZjBkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0xMDQsNyArMTA0LDYgQEAgdXNpbmcg
Q29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICBib29sIHByZW11bHRpcGx5QWxw
aGEoKSBjb25zdCB7IHJldHVybiBtX3ByZW11bHRpcGx5QWxwaGE7IH0KIAogICAgICAgICB2b2lk
IHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwotICAgICAgICB2b2lkIHNldENvbG9yUHJvZmlsZShj
b25zdCBDb2xvclByb2ZpbGUmKTsKICAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0dXMg
c3RhdHVzKTsKICAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25lZCBkdXJhdGlvbikgeyBt
X2R1cmF0aW9uID0gZHVyYXRpb247IH0KICAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChG
cmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9
CkBAIC0xMzQsOSArMTMzLDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+Owog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9w
aXhlbHM7Ci0KLSAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgbV9jb2xvclByb2ZpbGUgYW55
bW9yZT8KLSAgICAgICAgQ29sb3JQcm9maWxlIG1fY29sb3JQcm9maWxlOwogICAgICAgICBib29s
IG1faGFzQWxwaGE7CiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOwogICAgICAgICB1bnNp
Z25lZCBtX2R1cmF0aW9uOwpAQCAtMjk4LDggKzI5NCw2IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9
IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8v
IFRoZSBlbmNvZGVkIGRhdGEuCiAgICAgICAgIFZlY3RvcjxJbWFnZUZyYW1lLCAxPiBtX2ZyYW1l
QnVmZmVyQ2FjaGU7Ci0gICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9maWxl
IGFueSBtb3JlLCBmb3IgYW55IHBvcnQ/Ci0gICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJv
ZmlsZTsKICAgICAgICAgYm9vbCBtX3NjYWxlZCB7IGZhbHNlIH07CiAgICAgICAgIFZlY3Rvcjxp
bnQ+IG1fc2NhbGVkQ29sdW1uczsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9K
UEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggOThmZmUwMi4uYWRkYjBkYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCkBAIC0xOTYsMzYgKzE5Niw2IEBAIHN0YXRp
YyBJbWFnZU9yaWVudGF0aW9uIHJlYWRJbWFnZU9yaWVudGF0aW9uKGpwZWdfZGVjb21wcmVzc19z
dHJ1Y3QqIGluZm8pCiAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIH0KIAotc3RhdGlj
IENvbG9yUHJvZmlsZSByZWFkQ29sb3JQcm9maWxlKGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGlu
Zm8pCi17Ci0jaWYgVVNFKElDQ0pQRUcpCi0gICAgSk9DVEVUKiBwcm9maWxlOwotICAgIHVuc2ln
bmVkIGludCBwcm9maWxlTGVuZ3RoOwotCi0gICAgaWYgKCFyZWFkX2ljY19wcm9maWxlKGluZm8s
ICZwcm9maWxlLCAmcHJvZmlsZUxlbmd0aCkpCi0gICAgICAgIHJldHVybiBDb2xvclByb2ZpbGUo
KTsKLQotICAgIC8vIE9ubHkgYWNjZXB0IFJHQiBjb2xvciBwcm9maWxlcyBmcm9tIGlucHV0IGNs
YXNzIGRldmljZXMuCi0gICAgYm9vbCBpZ25vcmVQcm9maWxlID0gZmFsc2U7Ci0gICAgY2hhciog
cHJvZmlsZURhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihwcm9maWxlKTsKLSAgICBpZiAo
cHJvZmlsZUxlbmd0aCA8IEltYWdlRGVjb2Rlcjo6aWNjQ29sb3JQcm9maWxlSGVhZGVyTGVuZ3Ro
KQotICAgICAgICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsKLSAgICBlbHNlIGlmICghSW1hZ2VEZWNv
ZGVyOjpyZ2JDb2xvclByb2ZpbGUocHJvZmlsZURhdGEsIHByb2ZpbGVMZW5ndGgpKQotICAgICAg
ICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsKLSAgICBlbHNlIGlmICghSW1hZ2VEZWNvZGVyOjppbnB1
dERldmljZUNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwgcHJvZmlsZUxlbmd0aCkpCi0gICAgICAg
IGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotCi0gICAgQ29sb3JQcm9maWxlIGNvbG9yUHJvZmlsZTsK
LSAgICBpZiAoIWlnbm9yZVByb2ZpbGUpCi0gICAgICAgIGNvbG9yUHJvZmlsZS5hcHBlbmQocHJv
ZmlsZURhdGEsIHByb2ZpbGVMZW5ndGgpOwotICAgIGZyZWUocHJvZmlsZSk7Ci0gICAgcmV0dXJu
IGNvbG9yUHJvZmlsZTsKLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKGluZm8pOwotICAgIHJldHVy
biBDb2xvclByb2ZpbGUoKTsKLSNlbmRpZgotfQotCiBjbGFzcyBKUEVHSW1hZ2VSZWFkZXIgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtMzYzLDEzICszMzMsNiBA
QCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAobV9kZWNvZGVyLT53aWxsRG93blNhbXBsZSgpICYm
IHR1cmJvU3dpenpsZWQobV9pbmZvLm91dF9jb2xvcl9zcGFjZSkpCiAgICAgICAgICAgICAgICAg
bV9pbmZvLm91dF9jb2xvcl9zcGFjZSA9IEpDU19SR0I7CiAjZW5kaWYKLSAgICAgICAgICAgIC8v
IEFsbG93IGNvbG9yIG1hbmFnZW1lbnQgb2YgdGhlIGRlY29kZWQgUkdCQSBwaXhlbHMgaWYgcG9z
c2libGUuCi0gICAgICAgICAgICBpZiAoIW1fZGVjb2Rlci0+aWdub3Jlc0dhbW1hQW5kQ29sb3JQ
cm9maWxlKCkpIHsKLSAgICAgICAgICAgICAgICBDb2xvclByb2ZpbGUgcmdiSW5wdXREZXZpY2VD
b2xvclByb2ZpbGUgPSByZWFkQ29sb3JQcm9maWxlKGluZm8oKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFyZ2JJbnB1dERldmljZUNvbG9yUHJvZmlsZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgICAgIG1fZGVjb2Rlci0+c2V0Q29sb3JQcm9maWxlKHJnYklucHV0RGV2aWNlQ29sb3JQcm9m
aWxlKTsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgLy8gRG9uJ3QgYWxsb2NhdGUgYSBn
aWFudCBhbmQgc3VwZXJmbHVvdXMgbWVtb3J5IGJ1ZmZlciB3aGVuIHRoZQogICAgICAgICAgICAg
Ly8gaW1hZ2UgaXMgYSBzZXF1ZW50aWFsIEpQRUcuCiAgICAgICAgICAgICBtX2luZm8uYnVmZmVy
ZWRfaW1hZ2UgPSBqcGVnX2hhc19tdWx0aXBsZV9zY2FucygmbV9pbmZvKTsKQEAgLTY2MCw3ICs2
MjMsNiBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgICAg
IC8vIFRoZSBidWZmZXIgaXMgdHJhbnNwYXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdo
aWxlIHRoZSBpbWFnZSBpcwogICAgICAgICAvLyBsb2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdl
IHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBpbiBqcGVnQ29tcGxldGUoKS4KICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotICAgICAgICBidWZmZXIuc2V0Q29sb3JQcm9maWxl
KG1fY29sb3JQcm9maWxlKTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBp
bmZvID0gbV9yZWFkZXItPmluZm8oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKaW5kZXgg
NmMxZmMwNC4uNjIxZWQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKQEAgLTY2LDcg
KzY2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG91dHB1dFNjYW5saW5l
cygpOwogICAgICAgICB2b2lkIGpwZWdDb21wbGV0ZSgpOwogCi0gICAgICAgIHZvaWQgc2V0Q29s
b3JQcm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKSB7IG1fY29sb3JQcm9m
aWxlID0gY29sb3JQcm9maWxlOyB9CiAgICAgICAgIHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29yaWVudGF0aW9uID0gb3JpZW50YXRpb247IH0K
IAogICAgIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCmluZGV4IDQ0NGQ0Mzgu
LmMxMDg1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCkBAIC0yNzYsMzcgKzI3Niw2
IEBAIGJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKQogICAgIHJldHVybiBJbWFnZURl
Y29kZXI6OnNldEZhaWxlZCgpOwogfQogCi1zdGF0aWMgdm9pZCByZWFkQ29sb3JQcm9maWxlKHBu
Z19zdHJ1Y3RwIHBuZywgcG5nX2luZm9wIGluZm8sIENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxl
KQotewotICAgIEFTU0VSVChjb2xvclByb2ZpbGUuaXNFbXB0eSgpKTsKLQotI2lmZGVmIFBOR19p
Q0NQX1NVUFBPUlRFRAotICAgIGNoYXIqIHByb2ZpbGVOYW1lOwotICAgIGludCBjb21wcmVzc2lv
blR5cGU7Ci0jaWYgKFBOR19MSUJQTkdfVkVSIDwgMTA1MDApCi0gICAgcG5nX2NoYXJwIHByb2Zp
bGU7Ci0jZWxzZQotICAgIHBuZ19ieXRlcCBwcm9maWxlOwotI2VuZGlmCi0gICAgcG5nX3VpbnRf
MzIgcHJvZmlsZUxlbmd0aDsKLSAgICBpZiAoIXBuZ19nZXRfaUNDUChwbmcsIGluZm8sICZwcm9m
aWxlTmFtZSwgJmNvbXByZXNzaW9uVHlwZSwgJnByb2ZpbGUsICZwcm9maWxlTGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25seSBhY2NlcHQgUkdCIGNvbG9yIHByb2ZpbGVzIGZy
b20gaW5wdXQgY2xhc3MgZGV2aWNlcy4KLSAgICBib29sIGlnbm9yZVByb2ZpbGUgPSBmYWxzZTsK
LSAgICBjaGFyKiBwcm9maWxlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHByb2ZpbGUp
OwotICAgIGlmIChwcm9maWxlTGVuZ3RoIDwgSW1hZ2VEZWNvZGVyOjppY2NDb2xvclByb2ZpbGVI
ZWFkZXJMZW5ndGgpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVsc2UgaWYg
KCFJbWFnZURlY29kZXI6OnJnYkNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwgcHJvZmlsZUxlbmd0
aCkpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVsc2UgaWYgKCFJbWFnZURl
Y29kZXI6OmlucHV0RGV2aWNlQ29sb3JQcm9maWxlKHByb2ZpbGVEYXRhLCBwcm9maWxlTGVuZ3Ro
KSkKLSAgICAgICAgaWdub3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICBpZiAoIWlnbm9yZVByb2Zp
bGUpCi0gICAgICAgIGNvbG9yUHJvZmlsZS5hcHBlbmQocHJvZmlsZURhdGEsIHByb2ZpbGVMZW5n
dGgpOwotI2VuZGlmCi19Ci0KIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUo
KQogewogICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsKQEAgLTQwNSwx
NiArMzc0LDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAg
aWYgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZIHx8IGNvbG9yVHlwZSA9PSBQTkdf
Q09MT1JfVFlQRV9HUkFZX0FMUEhBKQogICAgICAgICBwbmdfc2V0X2dyYXlfdG9fcmdiKHBuZyk7
CiAKLSAgICBpZiAoKGNvbG9yVHlwZSAmIFBOR19DT0xPUl9NQVNLX0NPTE9SKSAmJiAhbV9pZ25v
cmVHYW1tYUFuZENvbG9yUHJvZmlsZSkgewotICAgICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgY29s
b3IgcHJvZmlsZXMgZm9yIGNvbG9yIFBBTEVUVEUgYW5kIFJHQltBXSBQTkcuIFN1cHBvcnRpbmcK
LSAgICAgICAgLy8gY29sb3IgcHJvZmlsZXMgZm9yIGdyYXktc2NhbGUgaW1hZ2VzIGlzIHNsaWdo
dGx5IHRyaWNreSwgYXQgbGVhc3QgdXNpbmcgdGhlCi0gICAgICAgIC8vIENvcmVHcmFwaGljcyBJ
Q0MgbGlicmFyeSwgYmVjYXVzZSB3ZSBleHBhbmQgZ3JheS1zY2FsZSBpbWFnZXMgdG8gUkdCIGJ1
dCB3ZQotICAgICAgICAvLyBkbyBub3Qgc2ltaWxhcmx5IHRyYW5zZm9ybSB0aGUgY29sb3IgcHJv
ZmlsZS4gV2UnZCBlaXRoZXIgbmVlZCB0byB0cmFuc2Zvcm0KLSAgICAgICAgLy8gdGhlIGNvbG9y
IHByb2ZpbGUgb3Igd2UnZCBuZWVkIHRvIGRlY29kZSBpbnRvIGEgZ3JheS1zY2FsZSBpbWFnZSBi
dWZmZXIgYW5kCi0gICAgICAgIC8vIGhhbmQgdGhhdCB0byBDb3JlR3JhcGhpY3MuCi0gICAgICAg
IHJlYWRDb2xvclByb2ZpbGUocG5nLCBpbmZvLCBtX2NvbG9yUHJvZmlsZSk7Ci0gICAgfQotCiAg
ICAgLy8gRGVhbCB3aXRoIGdhbW1hIGFuZCBrZWVwIGl0IHVuZGVyIG91ciBjb250cm9sLgogICAg
IGRvdWJsZSBnYW1tYTsKICAgICBpZiAoIW1faWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUgJiYg
cG5nX2dldF9nQU1BKHBuZywgaW5mbywgJmdhbW1hKSkgewpAQCAtNTA2LDcgKzQ2NSw2IEBAIHZv
aWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVy
LCB1bnNpZ25lZCByb3dJbmRleCwKIAogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJh
bWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7Ci0g
ICAgICAgIGJ1ZmZlci5zZXRDb2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUpOwogCiAjaWYgRU5B
QkxFKEFQTkcpCiAgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288307</attachid>
            <date>2016-09-08 12:49:51 -0700</date>
            <delta_ts>2016-09-08 14:18:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159699-20160908124725.patch</filename>
            <type>text/plain</type>
            <size>9297</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTY1NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA5LTA4ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgR2V0IHJpZCBv
ZiB0aGUgY29sb3IgcHJvZmlsZSBmcm9tIEltYWdlRnJhbWUgYW5kIEltYWdlRGVjb2RlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njk5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNvbG9yIHBy
b2ZpbGUgaXMgc2V0IGJ1dCBpdCBpcyBuZXZlciB1c2VkLgorCisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNldENvbG9yUHJvZmlsZSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJ
bWFnZVJlYWRlcjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6
Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpyZWFkQ29sb3JQcm9maWxlKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVy
QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxh
YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRDb2xvclByb2ZpbGUpOiBEZWxldGVkLgorCiAy
MDE2LTA5LTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTW92
ZSBKU01hcC9KU1NldCBvdmVyIHRvIEF1eGlsaWFyeSBNYXJrZWRTcGFjZQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuY3BwCShyZXZpc2lvbiAyMDU1NzgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjAsMTEgKzIy
MCw2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKICAgICBtX2hh
c0FscGhhID0gYWxwaGE7CiB9CiAKLXZvaWQgSW1hZ2VGcmFtZTo6c2V0Q29sb3JQcm9maWxlKGNv
bnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQotewotICAgIG1fY29sb3JQcm9maWxlID0g
Y29sb3JQcm9maWxlOwotfQotCiB2b2lkIEltYWdlRnJhbWU6OnNldFN0YXR1cyhGcmFtZVN0YXR1
cyBzdGF0dXMpCiB7CiAgICAgbV9zdGF0dXMgPSBzdGF0dXM7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2
aXNpb24gMjA1NTc4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw3ICsxMTAsNiBAQCB1c2luZyBD
b2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQogCiAgICAgICAgIHZvaWQg
c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSk7Ci0gICAgICAgIHZvaWQgc2V0Q29sb3JQcm9maWxlKGNv
bnN0IENvbG9yUHJvZmlsZSYpOwogICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmIHIpIHsgbV9vcmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KICAgICAgICAgdm9p
ZCBzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKTsKICAgICAgICAgdm9pZCBzZXREdXJhdGlv
bih1bnNpZ25lZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KQEAgLTIxNCw4
ICsyMTMsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgIFZl
Y3RvcjxQaXhlbERhdGE+IG1fYmFja2luZ1N0b3JlOwogICAgICAgICBQaXhlbERhdGEqIG1fYnl0
ZXM7IC8vIFRoZSBtZW1vcnkgaXMgYmFja2VkIGJ5IG1fYmFja2luZ1N0b3JlLgogICAgICAgICBJ
bnRTaXplIG1fc2l6ZTsKLSAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgbV9jb2xvclByb2Zp
bGUgYW55bW9yZT8KLSAgICAgICAgQ29sb3JQcm9maWxlIG1fY29sb3JQcm9maWxlOwogICAgICAg
ICBib29sIG1faGFzQWxwaGE7CiAgICAgICAgIEludFJlY3QgbV9vcmlnaW5hbEZyYW1lUmVjdDsg
Ly8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzIHdob3Nl
CkBAIC0zODEsOCArMzc4LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+Owog
CiAgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IG1fZGF0YTsgLy8gVGhlIGVuY29kZWQgZGF0
YS4KICAgICAgICAgVmVjdG9yPEltYWdlRnJhbWUsIDE+IG1fZnJhbWVCdWZmZXJDYWNoZTsKLSAg
ICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgbV9jb2xvclByb2ZpbGUgYW55IG1vcmUsIGZvciBh
bnkgcG9ydD8KLSAgICAgICAgQ29sb3JQcm9maWxlIG1fY29sb3JQcm9maWxlOwogICAgICAgICBi
b29sIG1fc2NhbGVkIHsgZmFsc2UgfTsKICAgICAgICAgVmVjdG9yPGludD4gbV9zY2FsZWRDb2x1
bW5zOwogICAgICAgICBWZWN0b3I8aW50PiBtX3NjYWxlZFJvd3M7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcv
SlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE5NiwzNiArMTk2LDYgQEAgc3RhdGljIEltYWdlT3JpZW50YXRpb24gcmVh
ZEltYWdlT3JpZW50YQogICAgIHJldHVybiBJbWFnZU9yaWVudGF0aW9uKCk7CiB9CiAKLXN0YXRp
YyBDb2xvclByb2ZpbGUgcmVhZENvbG9yUHJvZmlsZShqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBp
bmZvKQotewotI2lmIFVTRShJQ0NKUEVHKQotICAgIEpPQ1RFVCogcHJvZmlsZTsKLSAgICB1bnNp
Z25lZCBpbnQgcHJvZmlsZUxlbmd0aDsKLQotICAgIGlmICghcmVhZF9pY2NfcHJvZmlsZShpbmZv
LCAmcHJvZmlsZSwgJnByb2ZpbGVMZW5ndGgpKQotICAgICAgICByZXR1cm4gQ29sb3JQcm9maWxl
KCk7Ci0KLSAgICAvLyBPbmx5IGFjY2VwdCBSR0IgY29sb3IgcHJvZmlsZXMgZnJvbSBpbnB1dCBj
bGFzcyBkZXZpY2VzLgotICAgIGJvb2wgaWdub3JlUHJvZmlsZSA9IGZhbHNlOwotICAgIGNoYXIq
IHByb2ZpbGVEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ocHJvZmlsZSk7Ci0gICAgaWYg
KHByb2ZpbGVMZW5ndGggPCBJbWFnZURlY29kZXI6OmljY0NvbG9yUHJvZmlsZUhlYWRlckxlbmd0
aCkKLSAgICAgICAgaWdub3JlUHJvZmlsZSA9IHRydWU7Ci0gICAgZWxzZSBpZiAoIUltYWdlRGVj
b2Rlcjo6cmdiQ29sb3JQcm9maWxlKHByb2ZpbGVEYXRhLCBwcm9maWxlTGVuZ3RoKSkKLSAgICAg
ICAgaWdub3JlUHJvZmlsZSA9IHRydWU7Ci0gICAgZWxzZSBpZiAoIUltYWdlRGVjb2Rlcjo6aW5w
dXREZXZpY2VDb2xvclByb2ZpbGUocHJvZmlsZURhdGEsIHByb2ZpbGVMZW5ndGgpKQotICAgICAg
ICBpZ25vcmVQcm9maWxlID0gdHJ1ZTsKLQotICAgIENvbG9yUHJvZmlsZSBjb2xvclByb2ZpbGU7
Ci0gICAgaWYgKCFpZ25vcmVQcm9maWxlKQotICAgICAgICBjb2xvclByb2ZpbGUuYXBwZW5kKHBy
b2ZpbGVEYXRhLCBwcm9maWxlTGVuZ3RoKTsKLSAgICBmcmVlKHByb2ZpbGUpOwotICAgIHJldHVy
biBjb2xvclByb2ZpbGU7Ci0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKLSAgICByZXR1
cm4gQ29sb3JQcm9maWxlKCk7Ci0jZW5kaWYKLX0KLQogY2xhc3MgSlBFR0ltYWdlUmVhZGVyIHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTM2MywxMyArMzMzLDYg
QEAgcHVibGljOgogICAgICAgICAgICAgaWYgKG1fZGVjb2Rlci0+d2lsbERvd25TYW1wbGUoKSAm
JiB0dXJib1N3aXp6bGVkKG1faW5mby5vdXRfY29sb3Jfc3BhY2UpKQogICAgICAgICAgICAgICAg
IG1faW5mby5vdXRfY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOwogI2VuZGlmCi0gICAgICAgICAgICAv
LyBBbGxvdyBjb2xvciBtYW5hZ2VtZW50IG9mIHRoZSBkZWNvZGVkIFJHQkEgcGl4ZWxzIGlmIHBv
c3NpYmxlLgotICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPmlnbm9yZXNHYW1tYUFuZENvbG9y
UHJvZmlsZSgpKSB7Ci0gICAgICAgICAgICAgICAgQ29sb3JQcm9maWxlIHJnYklucHV0RGV2aWNl
Q29sb3JQcm9maWxlID0gcmVhZENvbG9yUHJvZmlsZShpbmZvKCkpOwotICAgICAgICAgICAgICAg
IGlmICghcmdiSW5wdXREZXZpY2VDb2xvclByb2ZpbGUuaXNFbXB0eSgpKQotICAgICAgICAgICAg
ICAgICAgICBtX2RlY29kZXItPnNldENvbG9yUHJvZmlsZShyZ2JJbnB1dERldmljZUNvbG9yUHJv
ZmlsZSk7Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIC8vIERvbid0IGFsbG9jYXRlIGEg
Z2lhbnQgYW5kIHN1cGVyZmx1b3VzIG1lbW9yeSBidWZmZXIgd2hlbiB0aGUKICAgICAgICAgICAg
IC8vIGltYWdlIGlzIGEgc2VxdWVudGlhbCBKUEVHLgogICAgICAgICAgICAgbV9pbmZvLmJ1ZmZl
cmVkX2ltYWdlID0ganBlZ19oYXNfbXVsdGlwbGVfc2NhbnMoJm1faW5mbyk7CkBAIC02NjAsNyAr
NjIzLDYgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAg
ICAvLyBUaGUgYnVmZmVyIGlzIHRyYW5zcGFyZW50IG91dHNpZGUgdGhlIGRlY29kZWQgYXJlYSB3
aGlsZSB0aGUgaW1hZ2UgaXMKICAgICAgICAgLy8gbG9hZGluZy4gVGhlIGNvbXBsZXRlZCBpbWFn
ZSB3aWxsIGJlIG1hcmtlZCBmdWxseSBvcGFxdWUgaW4ganBlZ0NvbXBsZXRlKCkuCiAgICAgICAg
IGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKLSAgICAgICAgYnVmZmVyLnNldENvbG9yUHJvZmls
ZShtX2NvbG9yUHJvZmlsZSk7CiAKICAgICAgICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3
YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCiAgICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZy
YW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw3ICs2Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBvdXRw
dXRTY2FubGluZXMoKTsKICAgICAgICAgdm9pZCBqcGVnQ29tcGxldGUoKTsKIAotICAgICAgICB2
b2lkIHNldENvbG9yUHJvZmlsZShjb25zdCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmlsZSkgeyBt
X2NvbG9yUHJvZmlsZSA9IGNvbG9yUHJvZmlsZTsgfQogICAgICAgICB2b2lkIHNldE9yaWVudGF0
aW9uKEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24pIHsgbV9vcmllbnRhdGlvbiA9IG9yaWVu
dGF0aW9uOyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHAJKHJldmlzaW9uIDIwNTU3OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzYsMzcg
KzI3Niw2IEBAIGJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKQogICAgIHJldHVybiBJ
bWFnZURlY29kZXI6OnNldEZhaWxlZCgpOwogfQogCi1zdGF0aWMgdm9pZCByZWFkQ29sb3JQcm9m
aWxlKHBuZ19zdHJ1Y3RwIHBuZywgcG5nX2luZm9wIGluZm8sIENvbG9yUHJvZmlsZSYgY29sb3JQ
cm9maWxlKQotewotICAgIEFTU0VSVChjb2xvclByb2ZpbGUuaXNFbXB0eSgpKTsKLQotI2lmZGVm
IFBOR19pQ0NQX1NVUFBPUlRFRAotICAgIGNoYXIqIHByb2ZpbGVOYW1lOwotICAgIGludCBjb21w
cmVzc2lvblR5cGU7Ci0jaWYgKFBOR19MSUJQTkdfVkVSIDwgMTA1MDApCi0gICAgcG5nX2NoYXJw
IHByb2ZpbGU7Ci0jZWxzZQotICAgIHBuZ19ieXRlcCBwcm9maWxlOwotI2VuZGlmCi0gICAgcG5n
X3VpbnRfMzIgcHJvZmlsZUxlbmd0aDsKLSAgICBpZiAoIXBuZ19nZXRfaUNDUChwbmcsIGluZm8s
ICZwcm9maWxlTmFtZSwgJmNvbXByZXNzaW9uVHlwZSwgJnByb2ZpbGUsICZwcm9maWxlTGVuZ3Ro
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gT25seSBhY2NlcHQgUkdCIGNvbG9yIHByb2Zp
bGVzIGZyb20gaW5wdXQgY2xhc3MgZGV2aWNlcy4KLSAgICBib29sIGlnbm9yZVByb2ZpbGUgPSBm
YWxzZTsKLSAgICBjaGFyKiBwcm9maWxlRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHBy
b2ZpbGUpOwotICAgIGlmIChwcm9maWxlTGVuZ3RoIDwgSW1hZ2VEZWNvZGVyOjppY2NDb2xvclBy
b2ZpbGVIZWFkZXJMZW5ndGgpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVs
c2UgaWYgKCFJbWFnZURlY29kZXI6OnJnYkNvbG9yUHJvZmlsZShwcm9maWxlRGF0YSwgcHJvZmls
ZUxlbmd0aCkpCi0gICAgICAgIGlnbm9yZVByb2ZpbGUgPSB0cnVlOwotICAgIGVsc2UgaWYgKCFJ
bWFnZURlY29kZXI6OmlucHV0RGV2aWNlQ29sb3JQcm9maWxlKHByb2ZpbGVEYXRhLCBwcm9maWxl
TGVuZ3RoKSkKLSAgICAgICAgaWdub3JlUHJvZmlsZSA9IHRydWU7Ci0KLSAgICBpZiAoIWlnbm9y
ZVByb2ZpbGUpCi0gICAgICAgIGNvbG9yUHJvZmlsZS5hcHBlbmQocHJvZmlsZURhdGEsIHByb2Zp
bGVMZW5ndGgpOwotI2VuZGlmCi19Ci0KIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFp
bGFibGUoKQogewogICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsKQEAg
LTQwNSwxNiArMzc0LDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgp
CiAgICAgaWYgKGNvbG9yVHlwZSA9PSBQTkdfQ09MT1JfVFlQRV9HUkFZIHx8IGNvbG9yVHlwZSA9
PSBQTkdfQ09MT1JfVFlQRV9HUkFZX0FMUEhBKQogICAgICAgICBwbmdfc2V0X2dyYXlfdG9fcmdi
KHBuZyk7CiAKLSAgICBpZiAoKGNvbG9yVHlwZSAmIFBOR19DT0xPUl9NQVNLX0NPTE9SKSAmJiAh
bV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZSkgewotICAgICAgICAvLyBXZSBvbmx5IHN1cHBv
cnQgY29sb3IgcHJvZmlsZXMgZm9yIGNvbG9yIFBBTEVUVEUgYW5kIFJHQltBXSBQTkcuIFN1cHBv
cnRpbmcKLSAgICAgICAgLy8gY29sb3IgcHJvZmlsZXMgZm9yIGdyYXktc2NhbGUgaW1hZ2VzIGlz
IHNsaWdodGx5IHRyaWNreSwgYXQgbGVhc3QgdXNpbmcgdGhlCi0gICAgICAgIC8vIENvcmVHcmFw
aGljcyBJQ0MgbGlicmFyeSwgYmVjYXVzZSB3ZSBleHBhbmQgZ3JheS1zY2FsZSBpbWFnZXMgdG8g
UkdCIGJ1dCB3ZQotICAgICAgICAvLyBkbyBub3Qgc2ltaWxhcmx5IHRyYW5zZm9ybSB0aGUgY29s
b3IgcHJvZmlsZS4gV2UnZCBlaXRoZXIgbmVlZCB0byB0cmFuc2Zvcm0KLSAgICAgICAgLy8gdGhl
IGNvbG9yIHByb2ZpbGUgb3Igd2UnZCBuZWVkIHRvIGRlY29kZSBpbnRvIGEgZ3JheS1zY2FsZSBp
bWFnZSBidWZmZXIgYW5kCi0gICAgICAgIC8vIGhhbmQgdGhhdCB0byBDb3JlR3JhcGhpY3MuCi0g
ICAgICAgIHJlYWRDb2xvclByb2ZpbGUocG5nLCBpbmZvLCBtX2NvbG9yUHJvZmlsZSk7Ci0gICAg
fQotCiAgICAgLy8gRGVhbCB3aXRoIGdhbW1hIGFuZCBrZWVwIGl0IHVuZGVyIG91ciBjb250cm9s
LgogICAgIGRvdWJsZSBnYW1tYTsKICAgICBpZiAoIW1faWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUgJiYgcG5nX2dldF9nQU1BKHBuZywgaW5mbywgJmdhbW1hKSkgewpAQCAtNTA2LDcgKzQ2NSw2
IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKIAogICAgICAgICBi
dWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZl
ci5zZXRIYXNBbHBoYShmYWxzZSk7Ci0gICAgICAgIGJ1ZmZlci5zZXRDb2xvclByb2ZpbGUobV9j
b2xvclByb2ZpbGUpOwogCiAjaWYgRU5BQkxFKEFQTkcpCiAgICAgICAgIGlmIChtX2N1cnJlbnRG
cmFtZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>