<?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>102881</bug_id>
          
          <creation_ts>2012-11-20 22:32:50 -0800</creation_ts>
          <short_desc>[V8] Rename v8/custom/*Constructor.cpp to v8/custom/*Custom.cpp</short_desc>
          <delta_ts>2012-11-21 02:24:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kentaro Hara">haraken</reporter>
          <assigned_to name="Kentaro Hara">haraken</assigned_to>
          <cc>abarth</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>japhet</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>772485</commentid>
    <comment_count>0</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-20 22:32:50 -0800</bug_when>
    <thetext>Writing constructorCallback()s in *Custom.cpp is a convention of custom bindings of JSC and V8. We can rename v8/custom/*Constructor.cpp to v8/custom/*Custom.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772487</commentid>
    <comment_count>1</comment_count>
      <attachid>175343</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-20 22:35:54 -0800</bug_when>
    <thetext>Created attachment 175343
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772490</commentid>
    <comment_count>2</comment_count>
      <attachid>175343</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-20 22:41:51 -0800</bug_when>
    <thetext>Comment on attachment 175343
Patch

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

&gt; Source/WebCore/bindings/v8/custom/V8HTMLImageElementCustom.cpp:80
&gt; +    int width;
&gt; +    int height;
&gt; +    int* optionalWidth = 0;
&gt; +    int* optionalHeight = 0;
&gt; +    if (args.Length() &gt; 0) {
&gt; +        width = toInt32(args[0]);
&gt; +        optionalWidth = &amp;width;
&gt; +    }
&gt; +    if (args.Length() &gt; 1) {
&gt; +        height = toInt32(args[1]);
&gt; +        optionalHeight = &amp;height;
&gt; +    }
&gt; +
&gt; +    RefPtr&lt;HTMLImageElement&gt; image = HTMLImageElement::createForJSConstructor(document, optionalWidth, optionalHeight);

This weird logic prevents me from killing HTMLImageElement&apos;s custom constructor... We need to distinguish &apos;new Image()&apos; from &apos;new Image(null, null)&apos; and &apos;new Image(undefined, undefined)&apos;. Maybe we need to support overloaded constructors for NamedConstructor, which would be over-engineering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772545</commentid>
    <comment_count>3</comment_count>
      <attachid>175343</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-11-21 00:24:41 -0800</bug_when>
    <thetext>Comment on attachment 175343
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772584</commentid>
    <comment_count>4</comment_count>
      <attachid>175343</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 01:07:39 -0800</bug_when>
    <thetext>Comment on attachment 175343
Patch

Clearing flags on attachment: 175343

Committed r135358: &lt;http://trac.webkit.org/changeset/135358&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772586</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 01:07:45 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772603</commentid>
    <comment_count>6</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-21 01:26:48 -0800</bug_when>
    <thetext>Reverted r135358 for reason:

It broke Chromium/Linux build

Committed r135361: &lt;http://trac.webkit.org/changeset/135361&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772656</commentid>
    <comment_count>7</comment_count>
      <attachid>175382</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-21 01:58:13 -0800</bug_when>
    <thetext>Created attachment 175382
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772681</commentid>
    <comment_count>8</comment_count>
      <attachid>175382</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 02:24:52 -0800</bug_when>
    <thetext>Comment on attachment 175382
Patch

Clearing flags on attachment: 175382

Committed r135368: &lt;http://trac.webkit.org/changeset/135368&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772682</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 02:24:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175343</attachid>
            <date>2012-11-20 22:35:54 -0800</date>
            <delta_ts>2012-11-21 01:58:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102881-20121121153341.patch</filename>
            <type>text/plain</type>
            <size>40777</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY0ODcwNmFiMzJkMmM1
MmJhOTFkNjYzM2I4ZDU5YTRhMmNhNDc4Ny4uMWMwMGZjYWI4ZWJjYjA2MTM5YzFhNzhiODM5MWNh
ZjNhYTZjMmRmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDM3IEBACiAyMDEyLTExLTIwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbVjhdIFJlbmFtZSB2
OC9jdXN0b20vKkNvbnN0cnVjdG9yLmNwcCB0byB2OC9jdXN0b20vKkN1c3RvbS5jcHAKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjg4MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdyaXRpbmcgY29uc3Ry
dWN0b3JDYWxsYmFjaygpcyBpbiAqQ3VzdG9tLmNwcCBpcyBhIGNvbnZlbnRpb24gb2YKKyAgICAg
ICAgY3VzdG9tIGJpbmRpbmdzIG9mIEpTQyBhbmQgVjguIFdlIGNhbiByZW5hbWUgdjgvY3VzdG9t
LypDb25zdHJ1Y3Rvci5jcHAKKyAgICAgICAgdG8gdjgvY3VzdG9tLypDdXN0b20uY3BwLgorCisg
ICAgICAgIE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuCisKKyAgICAgICAgKiBVc2VW
OC5jbWFrZTogVGhpcyBmaWxlIGlzIGFscmVhZHkgb3V0IG9mIHN5bmMuCisgICAgICAgICogV2Vi
Q29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1l
bnRDdXN0b20uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6djhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0
VGVtcGxhdGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1l
bnRDdXN0b20uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5oLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChWOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvcik6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhJbnRlbnQ6OmNvbnN0cnVjdG9yQ2FsbGJh
Y2tDdXN0b20pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVs
Q3VzdG9tLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOE1lc3NhZ2VDaGFubmVsOjpjb25zdHJ1Y3RvckNhbGxiYWNrQ3Vz
dG9tKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRQb2ludEN1c3RvbS5j
cHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJL
aXRQb2ludENvbnN0cnVjdG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhXZWJLaXRQb2ludDo6Y29uc3RydWN0b3JDYWxsYmFja0N1c3RvbSk6CisKKzIwMTIt
MTEtMjAgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtW
OF0gSW50cm9kdWNlIGNvbnN0cnVjdG9yQ2FsbGJhY2tDdXN0b20oKQogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNzYzCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1VzZVY4LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UKaW5k
ZXggNzMyOTk0MjYyNDVhNDU3MTUxZjU1MjUzMTcxMTQ2YzIwZmQ0ZjhkNC4uZjFlN2NlMDIxNjZk
MjQ0MDlkNWNiOTU1NmE3MzU4MDBkZDIyNzEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
VXNlVjguY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UKQEAgLTExMCwxMCAr
MTEwLDkgQEAgTElTVChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxGcmFtZUVsZW1lbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAKLSAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
SW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEltYWdlRWxlbWVudEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW5w
dXRFbGVtZW50Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxMaW5rRWxl
bWVudEN1c3RvbS5jcHAKLSAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yLmNwcAogICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29s
bGVjdGlvbkN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3V0cHV0RWxl
bWVudEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVu
dEN1c3RvbS5jcHAKQEAgLTEyNiw3ICsxMjUsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCiAg
ICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAog
ICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAotICAgIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCisgICAgYmluZGluZ3Mv
djgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4TWVzc2FnZUV2ZW50Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1l
c3NhZ2VQb3J0Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1pY3JvRGF0YUl0
ZW1WYWx1ZUN1c3RvbS5jcHAKQEAgLTE0OSw3ICsxNDgsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3Jl
X1NPVVJDRVMKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5j
cHAKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0QW5pbWF0aW9uQ3VzdG9tLmNwcAot
ICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwCisgICAg
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0UG9pbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy92OC9jdXN0
b20vVjhXb3JrZXJDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJl
cXVlc3RDb25zdHJ1Y3Rvci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhOGIzZmVkYjY0MjI1ZWZh
NDQ5YThhMjA3ODFmNDgzODk3NmI0NWI4Li43MjZkOTUyZmExNWFmM2QyMzc3N2MyNzVjNDI4MWI3
NTdiNjE1OGQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yMzgzLDggKzIzODMsOCBAQAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVsZW1lbnRDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVt
ZW50Q3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElt
YWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmgnLAorICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDdXN0b20uY3BwJywKKyAgICAgICAgICAg
ICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q3VzdG9tLmgnLAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MTGlua0VsZW1lbnRDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MTWVkaWFFbGVtZW50
Q3VzdG9tLmNwcCcsCkBAIC0yNDAwLDEwICsyNDAwLDEwIEBACiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAg
ICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCcsCiAgICAg
ICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9t
LmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0
b3IuY3BwJywKKyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZy
YW1lQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRp
b25DdXN0b20uY3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdl
Q2hhbm5lbENvbnN0cnVjdG9yLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TWVzc2FnZUNoYW5uZWxDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9j
dXN0b20vVjhNZXNzYWdlRXZlbnRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92
OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOE1pY3JvRGF0YUl0ZW1WYWx1ZUN1c3RvbS5jcHAnLApAQCAtMjQzNCw3ICsy
NDM0LDcgQEAKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhUcmFja0V2ZW50Q3Vz
dG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJp
bmdDb250ZXh0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V2ViS2l0QW5pbWF0aW9uQ3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViS2l0UG9pbnRDb25zdHJ1Y3Rvci5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdlYktpdFBvaW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRD
b25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
SW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBjZmI5NzZmZDc3NjgzY2FlOWZkMDEwY2I1MzNhOTkxMmM4Y2M0MDIxLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJW
OEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5oIgotCi0jaW5jbHVkZSAiQmluZGluZ1N0YXRl
LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUg
IkhUTUxJbWFnZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOERvY3VtZW50LmgiCi0jaW5jbHVkZSAiVjhIVE1MSW1h
Z2VFbGVtZW50LmgiCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLVdyYXBwZXJUeXBlSW5mbyBWOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5m
byA9IHsgVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCBWOEhUTUxJ
bWFnZUVsZW1lbnQ6OmRlcmVmT2JqZWN0LCAwLCAwLCBWOEhUTUxJbWFnZUVsZW1lbnQ6Omluc3Rh
bGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcywgMCwgV3JhcHBlclR5cGVPYmplY3RQcm90
b3R5cGUgfTsKLQotc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxJbWFnZUVsZW1l
bnRDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAg
SU5DX1NUQVRTKCJET00uSFRNTEltYWdlRWxlbWVudC5Db250cnVjdG9yIik7Ci0KLSAgICBpZiAo
IWFyZ3MuSXNDb25zdHJ1Y3RDYWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcigi
RE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIiwg
YXJncy5HZXRJc29sYXRlKCkpOwotCi0gICAgaWYgKENvbnN0cnVjdG9yTW9kZTo6Y3VycmVudCgp
ID09IENvbnN0cnVjdG9yTW9kZTo6V3JhcEV4aXN0aW5nT2JqZWN0KQotICAgICAgICByZXR1cm4g
YXJncy5Ib2xkZXIoKTsKLQotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGN1cnJlbnREb2N1bWVu
dChCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCkpOwotCi0gICAgLy8gTWFrZSBzdXJlIHRoZSBkb2N1
bWVudCBpcyBhZGRlZCB0byB0aGUgRE9NIE5vZGUgbWFwLiBPdGhlcndpc2UsIHRoZSBIVE1MSW1h
Z2VFbGVtZW50IGluc3RhbmNlCi0gICAgLy8gbWF5IGVuZCB1cCBiZWluZyB0aGUgb25seSBub2Rl
IGluIHRoZSBtYXAgYW5kIGdldCBnYXJiYWdlLWNvbGxlY3RlZCBwcmVtYXR1cmVseS4KLSAgICAv
LyBGSVhNRTogVGhlIGNvcnJlY3Qgd2F5IHRvIGRvIHRoaXMgd291bGQgYmUgdG8gbWFrZSBIVE1M
SW1hZ2VFbGVtZW50IGRlcml2ZSBmcm9tCi0gICAgLy8gQWN0aXZlRE9NT2JqZWN0IGFuZCB1c2Ug
aXRzIGludGVyZmFjZSB0byBrZWVwIGl0cyB3cmFwcGVyIGFsaXZlLiBUaGVuIHdlIHdvdWxkCi0g
ICAgLy8gcmVtb3ZlIHRoaXMgY29kZSBhbmQgdGhlIHNwZWNpYWwgY2FzZSBpbiBpc09ic2VydmFi
bGVUaHJvdWdoRE9NLgotICAgIHRvVjgoZG9jdW1lbnQsIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKLQotICAgIGludCB3aWR0aDsKLSAgICBpbnQgaGVpZ2h0OwotICAgIGludCog
b3B0aW9uYWxXaWR0aCA9IDA7Ci0gICAgaW50KiBvcHRpb25hbEhlaWdodCA9IDA7Ci0gICAgaWYg
KGFyZ3MuTGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgIHdpZHRoID0gdG9JbnQzMihhcmdzWzBdKTsK
LSAgICAgICAgb3B0aW9uYWxXaWR0aCA9ICZ3aWR0aDsKLSAgICB9Ci0gICAgaWYgKGFyZ3MuTGVu
Z3RoKCkgPiAxKSB7Ci0gICAgICAgIGhlaWdodCA9IHRvSW50MzIoYXJnc1sxXSk7Ci0gICAgICAg
IG9wdGlvbmFsSGVpZ2h0ID0gJmhlaWdodDsKLSAgICB9Ci0KLSAgICBSZWZQdHI8SFRNTEltYWdl
RWxlbWVudD4gaW1hZ2UgPSBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGVGb3JKU0NvbnN0cnVjdG9y
KGRvY3VtZW50LCBvcHRpb25hbFdpZHRoLCBvcHRpb25hbEhlaWdodCk7Ci0gICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKLSAgICBWOERPTVdyYXBwZXI6
OmNyZWF0ZURPTVdyYXBwZXIoaW1hZ2UucmVsZWFzZSgpLCAmVjhIVE1MSW1hZ2VFbGVtZW50Q29u
c3RydWN0b3I6OmluZm8sIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwotfQotCi12ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3Ry
dWN0b3I6OkdldFRlbXBsYXRlKCkKLXsKLSAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1
bmN0aW9uVGVtcGxhdGU+IGNhY2hlZFRlbXBsYXRlOwotICAgIGlmICghY2FjaGVkVGVtcGxhdGUu
SXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gY2FjaGVkVGVtcGxhdGU7Ci0KLSAgICB2ODo6SGFu
ZGxlU2NvcGUgc2NvcGU7Ci0gICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvblRlbXBsYXRlPiByZXN1
bHQgPSB2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KHY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVj
dG9yQ2FsbGJhY2spOwotCi0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3RUZW1wbGF0ZT4gaW5zdGFu
Y2UgPSByZXN1bHQtPkluc3RhbmNlVGVtcGxhdGUoKTsKLSAgICBpbnN0YW5jZS0+U2V0SW50ZXJu
YWxGaWVsZENvdW50KFY4SFRNTEltYWdlRWxlbWVudDo6aW50ZXJuYWxGaWVsZENvdW50KTsKLSAg
ICByZXN1bHQtPlNldENsYXNzTmFtZSh2ODo6U3RyaW5nOjpOZXcoIkhUTUxJbWFnZUVsZW1lbnQi
KSk7Ci0gICAgcmVzdWx0LT5Jbmhlcml0KFY4SFRNTEltYWdlRWxlbWVudDo6R2V0VGVtcGxhdGUo
KSk7Ci0KLSAgICBjYWNoZWRUZW1wbGF0ZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRl
bXBsYXRlPjo6TmV3KHJlc3VsdCk7Ci0gICAgcmV0dXJuIGNhY2hlZFRlbXBsYXRlOwotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZGI0OTQ2NWY1OWEzZjNmZjVhMTc1MGMzZjU3
OGUwMzJhOGVjYmY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRD
b25zdHJ1Y3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVjhIVE1M
SW1hZ2VFbGVtZW50Q29uc3RydWN0b3JfaAotI2RlZmluZSBWOEhUTUxJbWFnZUVsZW1lbnRDb25z
dHJ1Y3Rvcl9oCi0KLSNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKLQotI2luY2x1ZGUgPHY4
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgVjhIVE1MSW1hZ2VFbGVtZW50Q29u
c3RydWN0b3IgewotcHVibGljOgotICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rp
b25UZW1wbGF0ZT4gR2V0VGVtcGxhdGUoKTsKLSAgICBzdGF0aWMgV3JhcHBlclR5cGVJbmZvIGlu
Zm87Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBWOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvcl9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1h
Z2VFbGVtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxJbWFnZUVsZW1lbnRDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjZTg3MzNkMWRkNjU4Y2Iw
ZDVlNzM4MzA5ZWQ0MDUxZDA1YjE5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q3VzdG9tLmNwcApAQCAtMCww
ICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOEhUTUxJbWFn
ZUVsZW1lbnRDdXN0b20uaCIKKworI2luY2x1ZGUgIkJpbmRpbmdTdGF0ZS5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisj
aW5jbHVkZSAiVjhEb2N1bWVudC5oIgorI2luY2x1ZGUgIlY4SFRNTEltYWdlRWxlbWVudC5oIgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXcmFwcGVy
VHlwZUluZm8gVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4SFRNTElt
YWdlRWxlbWVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgVjhIVE1MSW1hZ2VFbGVtZW50Ojpk
ZXJlZk9iamVjdCwgMCwgMCwgVjhIVE1MSW1hZ2VFbGVtZW50OjppbnN0YWxsUGVyQ29udGV4dFBy
b3RvdHlwZVByb3BlcnRpZXMsIDAsIFdyYXBwZXJUeXBlT2JqZWN0UHJvdG90eXBlIH07CisKK3N0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3JD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIElOQ19TVEFUUygiRE9N
LkhUTUxJbWFnZUVsZW1lbnQuQ29udHJ1Y3RvciIpOworCisgICAgaWYgKCFhcmdzLklzQ29uc3Ry
dWN0Q2FsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkRPTSBvYmplY3QgY29u
c3RydWN0b3IgY2Fubm90IGJlIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLiIsIGFyZ3MuR2V0SXNvbGF0
ZSgpKTsKKworICAgIGlmIChDb25zdHJ1Y3Rvck1vZGU6OmN1cnJlbnQoKSA9PSBDb25zdHJ1Y3Rv
ck1vZGU6OldyYXBFeGlzdGluZ09iamVjdCkKKyAgICAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7
CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjdXJyZW50RG9jdW1lbnQoQmluZGluZ1N0YXRl
OjppbnN0YW5jZSgpKTsKKworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZG9jdW1lbnQgaXMgYWRkZWQg
dG8gdGhlIERPTSBOb2RlIG1hcC4gT3RoZXJ3aXNlLCB0aGUgSFRNTEltYWdlRWxlbWVudCBpbnN0
YW5jZQorICAgIC8vIG1heSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkgbm9kZSBpbiB0aGUgbWFwIGFu
ZCBnZXQgZ2FyYmFnZS1jb2xsZWN0ZWQgcHJlbWF0dXJlbHkuCisgICAgLy8gRklYTUU6IFRoZSBj
b3JyZWN0IHdheSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIG1ha2UgSFRNTEltYWdlRWxlbWVudCBk
ZXJpdmUgZnJvbQorICAgIC8vIEFjdGl2ZURPTU9iamVjdCBhbmQgdXNlIGl0cyBpbnRlcmZhY2Ug
dG8ga2VlcCBpdHMgd3JhcHBlciBhbGl2ZS4gVGhlbiB3ZSB3b3VsZAorICAgIC8vIHJlbW92ZSB0
aGlzIGNvZGUgYW5kIHRoZSBzcGVjaWFsIGNhc2UgaW4gaXNPYnNlcnZhYmxlVGhyb3VnaERPTS4K
KyAgICB0b1Y4KGRvY3VtZW50LCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7CisK
KyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKyAgICBpbnQqIG9wdGlvbmFsV2lkdGgg
PSAwOworICAgIGludCogb3B0aW9uYWxIZWlnaHQgPSAwOworICAgIGlmIChhcmdzLkxlbmd0aCgp
ID4gMCkgeworICAgICAgICB3aWR0aCA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgICAgIG9wdGlv
bmFsV2lkdGggPSAmd2lkdGg7CisgICAgfQorICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkgewor
ICAgICAgICBoZWlnaHQgPSB0b0ludDMyKGFyZ3NbMV0pOworICAgICAgICBvcHRpb25hbEhlaWdo
dCA9ICZoZWlnaHQ7CisgICAgfQorCisgICAgUmVmUHRyPEhUTUxJbWFnZUVsZW1lbnQ+IGltYWdl
ID0gSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlRm9ySlNDb25zdHJ1Y3Rvcihkb2N1bWVudCwgb3B0
aW9uYWxXaWR0aCwgb3B0aW9uYWxIZWlnaHQpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7CisgICAgVjhET01XcmFwcGVyOjpjcmVhdGVET01XcmFw
cGVyKGltYWdlLnJlbGVhc2UoKSwgJlY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yOjppbmZv
LCB3cmFwcGVyKTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6
OkZ1bmN0aW9uVGVtcGxhdGU+IFY4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yOjpHZXRUZW1w
bGF0ZSgpCit7CisgICAgc3RhdGljIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRl
PiBjYWNoZWRUZW1wbGF0ZTsKKyAgICBpZiAoIWNhY2hlZFRlbXBsYXRlLklzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIGNhY2hlZFRlbXBsYXRlOworCisgICAgdjg6OkhhbmRsZVNjb3BlIHNjb3Bl
OworICAgIHY4OjpMb2NhbDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcmVzdWx0ID0gdjg6OkZ1bmN0
aW9uVGVtcGxhdGU6Ok5ldyh2OEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKTsK
KworICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0VGVtcGxhdGU+IGluc3RhbmNlID0gcmVzdWx0LT5J
bnN0YW5jZVRlbXBsYXRlKCk7CisgICAgaW5zdGFuY2UtPlNldEludGVybmFsRmllbGRDb3VudChW
OEhUTUxJbWFnZUVsZW1lbnQ6OmludGVybmFsRmllbGRDb3VudCk7CisgICAgcmVzdWx0LT5TZXRD
bGFzc05hbWUodjg6OlN0cmluZzo6TmV3KCJIVE1MSW1hZ2VFbGVtZW50IikpOworICAgIHJlc3Vs
dC0+SW5oZXJpdChWOEhUTUxJbWFnZUVsZW1lbnQ6OkdldFRlbXBsYXRlKCkpOworCisgICAgY2Fj
aGVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyhy
ZXN1bHQpOworICAgIHJldHVybiBjYWNoZWRUZW1wbGF0ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTEltYWdlRWxlbWVudEN1c3RvbS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEltYWdlRWxlbWVudEN1c3RvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwZTcxNjg2ODE4YTk5
MTY5MTk4ZmNhYzNmODI5ZDE4YTFhMDYyYTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q3VzdG9tLmgKQEAgLTAs
MCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgVjhIVE1MSW1hZ2VFbGVtZW50Q3VzdG9tX2gKKyNkZWZpbmUgVjhI
VE1MSW1hZ2VFbGVtZW50Q3VzdG9tX2gKKworI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5mby5oIgor
CisjaW5jbHVkZSA8djguaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBWOEhUTUxJ
bWFnZUVsZW1lbnRDb25zdHJ1Y3RvciB7CitwdWJsaWM6CisgICAgc3RhdGljIHY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBHZXRUZW1wbGF0ZSgpOworICAgIHN0YXRpYyBXcmFw
cGVyVHlwZUluZm8gaW5mbzsKK307CisKK30KKworI2VuZGlmIC8vIFY4SFRNTEltYWdlRWxlbWVu
dEN1c3RvbV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhJbnRlbnRDb25zdHJ1Y3Rvci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDEwZGE3OGQ4MjRkYTM0OTljMjA2MzhhNTg0MWU0YTdhNDcyODcwMWEuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlLCBJbmMuICgiR29vZ2xlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09H
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbnRlbnQuaCIKLQotI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgIlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVk
ZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVkZSAiVjhJbnRlbnQuaCIKLSNpbmNsdWRlICJWOE1l
c3NhZ2VQb3J0LmgiCi0jaW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpjb25zdHJ1Y3RvckNh
bGxiYWNrQ3VzdG9tKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPCAxKQotICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMSkgewotICAg
ICAgICAvLyBVc2UgdGhlIGRpY3Rpb25hcnkgY29uc3RydWN0b3IuIFRoaXMgYmxvY2sgd2lsbCBy
ZXR1cm4gaWYgdGhlCi0gICAgICAgIC8vIGFyZ3VtZW50IGlzbid0IGEgdmFsaWQgRGljdGlvbmFy
eS4KLSAgICAgICAgRVhDRVBUSU9OX0JMT0NLKERpY3Rpb25hcnksIG9wdGlvbnMsIERpY3Rpb25h
cnkoYXJnc1swXSwgYXJncy5HZXRJc29sYXRlKCkpKTsKLSAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7Ci0gICAgICAgIFJlZlB0cjxJbnRlbnQ+IGltcGwgPSBJbnRlbnQ6OmNyZWF0ZShTY3Jp
cHRTdGF0ZTo6Y3VycmVudCgpLCBvcHRpb25zLCBlYyk7Ci0gICAgICAgIGlmIChlYykKLSAgICAg
ICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLQot
ICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigpOwot
ICAgICAgICBWOERPTVdyYXBwZXI6OmNyZWF0ZURPTVdyYXBwZXIoaW1wbC5yZWxlYXNlKCksICZp
bmZvLCB3cmFwcGVyKTsKLSAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgfQotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9C
TE9DSyhWOFBhcmFtZXRlcjw+LCBhY3Rpb24sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3Ms
IDAsIERlZmF1bHRJc1VuZGVmaW5lZCkpOwotICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENF
UFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8PiwgdHlwZSwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIo
YXJncywgMSwgRGVmYXVsdElzVW5kZWZpbmVkKSk7Ci0gICAgTWVzc2FnZVBvcnRBcnJheSBtZXNz
YWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0OwotICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZm
ZXJBcnJheVRyYW5zZmVyTGlzdDsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDMpIHsKLSAgICAg
ICAgaWYgKCFleHRyYWN0VHJhbnNmZXJhYmxlcyhhcmdzWzNdLCBtZXNzYWdlUG9ydEFycmF5VHJh
bnNmZXJMaXN0LCBhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0LCBhcmdzLkdldElzb2xhdGUo
KSkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkNvdWxkIG5vdCBleHRyYWN0
IHRyYW5zZmVyYWJsZXMiLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0gICAgfQotICAgIGJvb2wgZGF0
YURpZFRocm93ID0gZmFsc2U7Ci0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0
YSA9IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMl0sICZtZXNzYWdlUG9ydEFy
cmF5VHJhbnNmZXJMaXN0LCAmYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdCwgZGF0YURpZFRo
cm93KTsKLSAgICBpZiAoZGF0YURpZFRocm93KQotICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0
aW9uKERBVEFfQ0xPTkVfRVJSLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0KLSAgICBSZWZQdHI8SW50
ZW50PiBpbXBsID0gSW50ZW50OjpjcmVhdGUoYWN0aW9uLCB0eXBlLCBkYXRhLCBtZXNzYWdlUG9y
dEFycmF5VHJhbnNmZXJMaXN0LCBlYyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm4gc2V0
RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElzb2xhdGUoKSk7Ci0KLSAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigpOwotICAgIFY4RE9NV3JhcHBlcjo6Y3Jl
YXRlRE9NV3JhcHBlcihpbXBsLnJlbGVhc2UoKSwgJmluZm8sIHdyYXBwZXIpOwotICAgIHJldHVy
biB3cmFwcGVyOwotfQotCi0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudEN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjEwZGE3OGQ4MjRkYTM0OTljMjA2MzhhNTg0MWU0YTdhNDcyODcwMWEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20u
Y3BwCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSwgSW5jLiAoIkdvb2dsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgR09PR0xFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW50ZW50Lmgi
CisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiTWVzc2FnZVBvcnQuaCIK
KyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKworI2luY2x1ZGUgIlY4QmluZGlu
Zy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIlY4SW50ZW50LmgiCisj
aW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgPHd0Zi9BcnJheUJ1ZmZlci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEludGVudDo6
Y29uc3RydWN0b3JDYWxsYmFja0N1c3RvbShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQorewor
ICAgIGlmIChhcmdzLkxlbmd0aCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93Tm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoYXJncy5HZXRJc29sYXRlKCkpOworICAgIGlmIChhcmdzLkxlbmd0aCgp
ID09IDEpIHsKKyAgICAgICAgLy8gVXNlIHRoZSBkaWN0aW9uYXJ5IGNvbnN0cnVjdG9yLiBUaGlz
IGJsb2NrIHdpbGwgcmV0dXJuIGlmIHRoZQorICAgICAgICAvLyBhcmd1bWVudCBpc24ndCBhIHZh
bGlkIERpY3Rpb25hcnkuCisgICAgICAgIEVYQ0VQVElPTl9CTE9DSyhEaWN0aW9uYXJ5LCBvcHRp
b25zLCBEaWN0aW9uYXJ5KGFyZ3NbMF0sIGFyZ3MuR2V0SXNvbGF0ZSgpKSk7CisgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50ZW50
OjpjcmVhdGUoU2NyaXB0U3RhdGU6OmN1cnJlbnQoKSwgb3B0aW9ucywgZWMpOworICAgICAgICBp
ZiAoZWMpCisgICAgICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBhcmdzLkdldElz
b2xhdGUoKSk7CisKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJn
cy5Ib2xkZXIoKTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpjcmVhdGVET01XcmFwcGVyKGltcGwu
cmVsZWFzZSgpLCAmaW5mbywgd3JhcHBlcik7CisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAg
IH0KKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFNUUklOR19UT19WOFBBUkFNRVRF
Ul9FWENFUFRJT05fQkxPQ0soVjhQYXJhbWV0ZXI8PiwgYWN0aW9uLCBNQVlCRV9NSVNTSU5HX1BB
UkFNRVRFUihhcmdzLCAwLCBEZWZhdWx0SXNVbmRlZmluZWQpKTsKKyAgICBTVFJJTkdfVE9fVjhQ
QVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIHR5cGUsIE1BWUJFX01JU1NJ
TkdfUEFSQU1FVEVSKGFyZ3MsIDEsIERlZmF1bHRJc1VuZGVmaW5lZCkpOworICAgIE1lc3NhZ2VQ
b3J0QXJyYXkgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdDsKKyAgICBBcnJheUJ1ZmZlckFy
cmF5IGFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxpc3Q7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkg
PiAzKSB7CisgICAgICAgIGlmICghZXh0cmFjdFRyYW5zZmVyYWJsZXMoYXJnc1szXSwgbWVzc2Fn
ZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdCwgYXJn
cy5HZXRJc29sYXRlKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKCJDb3Vs
ZCBub3QgZXh0cmFjdCB0cmFuc2ZlcmFibGVzIiwgYXJncy5HZXRJc29sYXRlKCkpOworICAgIH0K
KyAgICBib29sIGRhdGFEaWRUaHJvdyA9IGZhbHNlOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2Ny
aXB0VmFsdWU+IGRhdGEgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZShhcmdzWzJdLCAm
bWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgJmFycmF5QnVmZmVyQXJyYXlUcmFuc2Zlckxp
c3QsIGRhdGFEaWRUaHJvdyk7CisgICAgaWYgKGRhdGFEaWRUaHJvdykKKyAgICAgICAgcmV0dXJu
IHNldERPTUV4Y2VwdGlvbihEQVRBX0NMT05FX0VSUiwgYXJncy5HZXRJc29sYXRlKCkpOworCisg
ICAgUmVmUHRyPEludGVudD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKGFjdGlvbiwgdHlwZSwgZGF0
YSwgbWVzc2FnZVBvcnRBcnJheVRyYW5zZmVyTGlzdCwgZWMpOworICAgIGlmIChlYykKKyAgICAg
ICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgYXJncy5HZXRJc29sYXRlKCkpOworCisgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBWOERP
TVdyYXBwZXI6OmNyZWF0ZURPTVdyYXBwZXIoaW1wbC5yZWxlYXNlKCksICZpbmZvLCB3cmFwcGVy
KTsKKyAgICByZXR1cm4gd3JhcHBlcjsKK30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hh
bm5lbENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxZmRlOGRhY2Q1MjE0ZmE5YTU4NjIwMmZhODNlOGYyMWFlOWE1NzFmLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqIAotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhNZXNz
YWdlQ2hhbm5lbC5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5o
IgotI2luY2x1ZGUgIk1lc3NhZ2VDaGFubmVsLmgiCi0jaW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0j
aW5jbHVkZSAiVjhNZXNzYWdlUG9ydC5oIgotI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiV29ya2VyQ29udGV4dC5oIgotI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5oIgotCi0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOE1lc3NhZ2VDaGFubmVsOjpjb25zdHJ1Y3RvckNh
bGxiYWNrQ3VzdG9tKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17Ci0gICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLQot
ICAgIFJlZlB0cjxNZXNzYWdlQ2hhbm5lbD4gb2JqID0gTWVzc2FnZUNoYW5uZWw6OmNyZWF0ZShj
b250ZXh0KTsKLQotICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xk
ZXIoKTsKLQotICAgIC8vIENyZWF0ZSByZWZlcmVuY2VzIGZyb20gdGhlIE1lc3NhZ2VDaGFubmVs
IHdyYXBwZXIgdG8gdGhlIHR3bwotICAgIC8vIE1lc3NhZ2VQb3J0IHdyYXBwZXJzIHRvIG1ha2Ug
c3VyZSB0aGF0IHRoZSBNZXNzYWdlUG9ydCB3cmFwcGVycwotICAgIC8vIHN0YXkgYWxpdmUgYXMg
bG9uZyBhcyB0aGUgTWVzc2FnZUNoYW5uZWwgd3JhcHBlciBpcyBhcm91bmQuCi0gICAgVjhET01X
cmFwcGVyOjpzZXROYW1lZEhpZGRlblJlZmVyZW5jZSh3cmFwcGVyLCAicG9ydDEiLCB0b1Y4KG9i
ai0+cG9ydDEoKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpKTsKLSAgICBWOERP
TVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNlKHdyYXBwZXIsICJwb3J0MiIsIHRvVjgo
b2JqLT5wb3J0MigpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSkpOwotCi0gICAg
VjhET01XcmFwcGVyOjpjcmVhdGVET01XcmFwcGVyKG9iai5yZWxlYXNlKCksICZpbmZvLCB3cmFw
cGVyKTsKLSAgICByZXR1cm4gd3JhcHBlcjsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNo
YW5uZWxDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVz
c2FnZUNoYW5uZWxDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmZGU4ZGFjZDUyMTRmYTlhNTg2MjAy
ZmE4M2U4ZjIxYWU5YTU3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVjhNZXNzYWdlQ2hhbm5lbC5oIgorCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk1lc3Nh
Z2VDaGFubmVsLmgiCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhNZXNzYWdl
UG9ydC5oIgorI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4
dC5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgorCisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOE1lc3NhZ2VDaGFubmVsOjpjb25zdHJ1Y3RvckNhbGxiYWNrQ3VzdG9tKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKKworICAgIFJlZlB0cjxNZXNzYWdl
Q2hhbm5lbD4gb2JqID0gTWVzc2FnZUNoYW5uZWw6OmNyZWF0ZShjb250ZXh0KTsKKworICAgIHY4
OjpMb2NhbDx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKworICAgIC8vIENy
ZWF0ZSByZWZlcmVuY2VzIGZyb20gdGhlIE1lc3NhZ2VDaGFubmVsIHdyYXBwZXIgdG8gdGhlIHR3
bworICAgIC8vIE1lc3NhZ2VQb3J0IHdyYXBwZXJzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBNZXNz
YWdlUG9ydCB3cmFwcGVycworICAgIC8vIHN0YXkgYWxpdmUgYXMgbG9uZyBhcyB0aGUgTWVzc2Fn
ZUNoYW5uZWwgd3JhcHBlciBpcyBhcm91bmQuCisgICAgVjhET01XcmFwcGVyOjpzZXROYW1lZEhp
ZGRlblJlZmVyZW5jZSh3cmFwcGVyLCAicG9ydDEiLCB0b1Y4KG9iai0+cG9ydDEoKSwgYXJncy5I
b2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldE5hbWVk
SGlkZGVuUmVmZXJlbmNlKHdyYXBwZXIsICJwb3J0MiIsIHRvVjgob2JqLT5wb3J0MigpLCBhcmdz
LkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSkpOworCisgICAgVjhET01XcmFwcGVyOjpjcmVh
dGVET01XcmFwcGVyKG9iai5yZWxlYXNlKCksICZpbmZvLCB3cmFwcGVyKTsKKyAgICByZXR1cm4g
d3JhcHBlcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0UG9pbnRDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRQb2ludENvbnN0cnVj
dG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzkyMjViNDI5MTU3MmQ0ZWU4
YTY5ZGY0MDc0NDJmOWMwNzRlZmZmZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRQ
b2ludENvbnN0cnVjdG9yLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVjhXZWJLaXRQb2ludC5oIgotCi0j
aW5jbHVkZSAiVjhCaW5kaW5nLmgiCi0jaW5jbHVkZSAiVjhET01XcmFwcGVyLmgiCi0jaW5jbHVk
ZSAiV3JhcHBlclR5cGVJbmZvLmgiCi0KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdlYktpdFBvaW50
Ojpjb25zdHJ1Y3RvckNhbGxiYWNrQ3VzdG9tKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCi17
Ci0gICAgZmxvYXQgeCA9IDA7Ci0gICAgZmxvYXQgeSA9IDA7Ci0gICAgaWYgKGFyZ3MuTGVuZ3Ro
KCkgPiAxKSB7Ci0gICAgICAgIGlmICghYXJnc1swXS0+SXNVbmRlZmluZWQoKSkgewotICAgICAg
ICAgICAgeCA9IHRvRmxvYXQoYXJnc1swXSk7Ci0gICAgICAgICAgICBpZiAoaXNuYW4oeCkpCi0g
ICAgICAgICAgICAgICAgeCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFhcmdzWzFdLT5J
c1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICB5ID0gdG9GbG9hdChhcmdzWzFdKTsKLSAgICAg
ICAgICAgIGlmIChpc25hbih5KSkKLSAgICAgICAgICAgICAgICB5ID0gMDsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBSZWZQdHI8V2ViS2l0UG9pbnQ+IHBvaW50ID0gV2ViS2l0UG9pbnQ6OmNyZWF0
ZSh4LCB5KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRl
cigpOwotICAgIFY4RE9NV3JhcHBlcjo6Y3JlYXRlRE9NV3JhcHBlcihwb2ludC5yZWxlYXNlKCks
ICZpbmZvLCB3cmFwcGVyKTsKLSAgICByZXR1cm4gd3JhcHBlcjsKLX0KLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V2ViS2l0UG9pbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViS2l0UG9pbnRDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc5MjI1YjQyOTE1NzJkNGVl
OGE2OWRmNDA3NDQyZjljMDc0ZWZmZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRQb2ludEN1c3RvbS5jcHAKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWOFdlYktpdFBv
aW50LmgiCisKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERPTVdyYXBwZXIu
aCIKKyNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0
cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
V2ViS2l0UG9pbnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2tDdXN0b20oY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKK3sKKyAgICBmbG9hdCB4ID0gMDsKKyAgICBmbG9hdCB5ID0gMDsKKyAgICBpZiAo
YXJncy5MZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgaWYgKCFhcmdzWzBdLT5Jc1VuZGVmaW5lZCgp
KSB7CisgICAgICAgICAgICB4ID0gdG9GbG9hdChhcmdzWzBdKTsKKyAgICAgICAgICAgIGlmIChp
c25hbih4KSkKKyAgICAgICAgICAgICAgICB4ID0gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IWFyZ3NbMV0tPklzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIHkgPSB0b0Zsb2F0KGFyZ3Nb
MV0pOworICAgICAgICAgICAgaWYgKGlzbmFuKHkpKQorICAgICAgICAgICAgICAgIHkgPSAwOwor
ICAgICAgICB9CisgICAgfQorICAgIFJlZlB0cjxXZWJLaXRQb2ludD4gcG9pbnQgPSBXZWJLaXRQ
b2ludDo6Y3JlYXRlKHgsIHkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9
IGFyZ3MuSG9sZGVyKCk7CisgICAgVjhET01XcmFwcGVyOjpjcmVhdGVET01XcmFwcGVyKHBvaW50
LnJlbGVhc2UoKSwgJmluZm8sIHdyYXBwZXIpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175382</attachid>
            <date>2012-11-21 01:58:13 -0800</date>
            <delta_ts>2012-11-21 02:24:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102881-20121121185600.patch</filename>
            <type>text/plain</type>
            <size>25245</size>
            <attacher name="Kentaro Hara">haraken</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDY0ODcwNmFiMzJkMmM1
MmJhOTFkNjYzM2I4ZDU5YTRhMmNhNDc4Ny4uZTc3NTA4OWViN2NjYTYzMjk3ZDA4ZDgxNWJlNzAx
Y2EwNzliZjM4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMwIEBACiAyMDEyLTExLTIwICBLZW50
YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAorICAgICAgICBbVjhdIFJlbmFtZSB2
OC9jdXN0b20vKkNvbnN0cnVjdG9yLmNwcCB0byB2OC9jdXN0b20vKkN1c3RvbS5jcHAKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMjg4MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgV3JpdGluZyBjb25zdHJ1Y3Rv
ckNhbGxiYWNrKClzIGluICpDdXN0b20uY3BwIGlzIGEgY29udmVudGlvbiBvZgorICAgICAgICBj
dXN0b20gYmluZGluZ3Mgb2YgSlNDIGFuZCBWOC4gV2UgY2FuIHJlbmFtZSB2OC9jdXN0b20vKkNv
bnN0cnVjdG9yLmNwcAorICAgICAgICB0byB2OC9jdXN0b20vKkN1c3RvbS5jcHAuCisKKyAgICAg
ICAgTm8gdGVzdHMuIE5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFVzZVY4LmNt
YWtlOiBUaGlzIGZpbGUgaXMgYWxyZWFkeSBvdXQgb2Ygc3luYy4KKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q3VzdG9tLmNwcDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENv
bnN0cnVjdG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhJ
bnRlbnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2tDdXN0b20pOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ3VzdG9tLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3Bw
LgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE1lc3NhZ2VDaGFubmVs
Ojpjb25zdHJ1Y3RvckNhbGxiYWNrQ3VzdG9tKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJLaXRQb2ludEN1c3RvbS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRQb2ludENvbnN0cnVjdG9yLmNwcC4KKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhXZWJLaXRQb2ludDo6Y29uc3RydWN0b3JD
YWxsYmFja0N1c3RvbSk6CisKKzIwMTItMTEtMjAgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hy
b21pdW0ub3JnPgorCiAgICAgICAgIFtWOF0gSW50cm9kdWNlIGNvbnN0cnVjdG9yQ2FsbGJhY2tD
dXN0b20oKQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTAyNzYzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1VzZVY4LmNtYWtlIGIvU291cmNl
L1dlYkNvcmUvVXNlVjguY21ha2UKaW5kZXggNzMyOTk0MjYyNDVhNDU3MTUxZjU1MjUzMTcxMTQ2
YzIwZmQ0ZjhkNC4uODU2MzVhMTY3NzhhOGI5NTdmNGE0Zjk0ZmMzN2IxMjg0ZDgxOTg5NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVXNlVjguY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
VXNlVjguY21ha2UKQEAgLTExMSw5ICsxMTEsOCBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJD
RVMKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNwcAog
ICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNldEVsZW1lbnRDdXN0b20uY3BwCiAg
ICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcAot
ICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCisgICAg
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElucHV0RWxlbWVudENvbnN0cnVjdG9yLmNwcAogICAg
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxMaW5rRWxlbWVudEN1c3RvbS5jcHAKLSAgICBiaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcAogICAgIGJp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25zQ29sbGVjdGlvbkN1c3RvbS5jcHAKICAgICBi
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3V0cHV0RWxlbWVudEN1c3RvbS5jcHAKICAgICBiaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MUGx1Z0luRWxlbWVudEN1c3RvbS5jcHAKQEAgLTEyNiw3ICsx
MjUsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy92OC9jdXN0
b20vVjhJbmplY3RlZFNjcmlwdE1hbmFnZXIuY3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OExvY2F0aW9uQ3VzdG9tLmNwcAotICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFu
bmVsQ29uc3RydWN0b3IuY3BwCisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5u
ZWxDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUV2ZW50Q3VzdG9t
LmNwcAogICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VQb3J0Q3VzdG9tLmNwcAogICAg
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE1pY3JvRGF0YUl0ZW1WYWx1ZUN1c3RvbS5jcHAKQEAgLTE0
OSw3ICsxNDgsNyBAQCBMSVNUKEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy92
OC9jdXN0b20vVjhTdHlsZVNoZWV0TGlzdEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy92OC9jdXN0
b20vVjhXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViS2l0QW5pbWF0aW9uQ3VzdG9tLmNwcAotICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OFdlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwCisgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
S2l0UG9pbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4
dEN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCiAg
ICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBhOGIzZmVkYjY0MjI1ZWZhNDQ5YThhMjA3ODFmNDgzODk3NmI0NWI4
Li42MjlhMDMwYTkyODY5MTc4NjJkNWFlZWM1ZTQzYzYxNzlkMGIzMmUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC0yNDAwLDEwICsyNDAwLDEwIEBACiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW5qZWN0ZWRTY3JpcHRIb3N0Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SW5qZWN0ZWRTY3JpcHRNYW5hZ2VyLmNwcCcsCiAgICAgICAgICAgICAn
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVjdG9yRnJvbnRlbmRIb3N0Q3VzdG9tLmNwcCcsCi0g
ICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW50ZW50Q29uc3RydWN0b3IuY3BwJywK
KyAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhKYXZhU2NyaXB0Q2FsbEZyYW1lQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TG9jYXRpb25DdXN0b20u
Y3BwJywKLSAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENv
bnN0cnVjdG9yLmNwcCcsCisgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2Fn
ZUNoYW5uZWxDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhN
ZXNzYWdlRXZlbnRDdXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20v
VjhNZXNzYWdlUG9ydEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE1pY3JvRGF0YUl0ZW1WYWx1ZUN1c3RvbS5jcHAnLApAQCAtMjQzNCw3ICsyNDM0LDcgQEAK
ICAgICAgICAgICAgICdiaW5kaW5ncy92OC9jdXN0b20vVjhUcmFja0V2ZW50Q3VzdG9tLmNwcCcs
CiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViR0xSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0QW5p
bWF0aW9uQ3VzdG9tLmNwcCcsCi0gICAgICAgICAgICAnYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2Vi
S2l0UG9pbnRDb25zdHJ1Y3Rvci5jcHAnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdlYktpdFBvaW50Q3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEludGVudENvbnN0cnVjdG9yLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBkYTc4ZDgyNGRhMzQ5OWMyMDYzOGE1ODQx
ZTRhN2E0NzI4NzAxYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbnRlbnRDb25zdHJ1Y3Rv
ci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUsIEluYy4gKCJHb29nbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdPT0dMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkludGVudC5oIgotCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUg
Ik1lc3NhZ2VQb3J0LmgiCi0jaW5jbHVkZSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0KLSNp
bmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRl
ICJWOEludGVudC5oIgotI2luY2x1ZGUgIlY4TWVzc2FnZVBvcnQuaCIKLSNpbmNsdWRlIDx3dGYv
QXJyYXlCdWZmZXIuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi12ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gVjhJbnRlbnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2tDdXN0b20oY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKLXsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCi0gICAgICAgIHJldHVy
biB0aHJvd05vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGFyZ3MuR2V0SXNvbGF0ZSgpKTsKLSAgICBp
ZiAoYXJncy5MZW5ndGgoKSA9PSAxKSB7Ci0gICAgICAgIC8vIFVzZSB0aGUgZGljdGlvbmFyeSBj
b25zdHJ1Y3Rvci4gVGhpcyBibG9jayB3aWxsIHJldHVybiBpZiB0aGUKLSAgICAgICAgLy8gYXJn
dW1lbnQgaXNuJ3QgYSB2YWxpZCBEaWN0aW9uYXJ5LgotICAgICAgICBFWENFUFRJT05fQkxPQ0so
RGljdGlvbmFyeSwgb3B0aW9ucywgRGljdGlvbmFyeShhcmdzWzBdLCBhcmdzLkdldElzb2xhdGUo
KSkpOwotICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgUmVmUHRyPEludGVu
dD4gaW1wbCA9IEludGVudDo6Y3JlYXRlKFNjcmlwdFN0YXRlOjpjdXJyZW50KCksIG9wdGlvbnMs
IGVjKTsKLSAgICAgICAgaWYgKGVjKQotICAgICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlv
bihlYywgYXJncy5HZXRJc29sYXRlKCkpOwotCi0gICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgICAgIFY4RE9NV3JhcHBlcjo6Y3JlYXRl
RE9NV3JhcHBlcihpbXBsLnJlbGVhc2UoKSwgJmluZm8sIHdyYXBwZXIpOwotICAgICAgICByZXR1
cm4gd3JhcHBlcjsKLSAgICB9Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBTVFJJ
TkdfVE9fVjhQQVJBTUVURVJfRVhDRVBUSU9OX0JMT0NLKFY4UGFyYW1ldGVyPD4sIGFjdGlvbiwg
TUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMCwgRGVmYXVsdElzVW5kZWZpbmVkKSk7Ci0g
ICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRlcjw+LCB0
eXBlLCBNQVlCRV9NSVNTSU5HX1BBUkFNRVRFUihhcmdzLCAxLCBEZWZhdWx0SXNVbmRlZmluZWQp
KTsKLSAgICBNZXNzYWdlUG9ydEFycmF5IG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3Q7Ci0g
ICAgQXJyYXlCdWZmZXJBcnJheSBhcnJheUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0OwotICAgIGlm
IChhcmdzLkxlbmd0aCgpID4gMykgewotICAgICAgICBpZiAoIWV4dHJhY3RUcmFuc2ZlcmFibGVz
KGFyZ3NbM10sIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGFycmF5QnVmZmVyQXJyYXlU
cmFuc2Zlckxpc3QsIGFyZ3MuR2V0SXNvbGF0ZSgpKSkKLSAgICAgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcigiQ291bGQgbm90IGV4dHJhY3QgdHJhbnNmZXJhYmxlcyIsIGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKLSAgICB9Ci0gICAgYm9vbCBkYXRhRGlkVGhyb3cgPSBmYWxzZTsKLSAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBkYXRhID0gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpj
cmVhdGUoYXJnc1syXSwgJm1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsICZhcnJheUJ1ZmZl
ckFycmF5VHJhbnNmZXJMaXN0LCBkYXRhRGlkVGhyb3cpOwotICAgIGlmIChkYXRhRGlkVGhyb3cp
Ci0gICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oREFUQV9DTE9ORV9FUlIsIGFyZ3MuR2V0
SXNvbGF0ZSgpKTsKLQotICAgIFJlZlB0cjxJbnRlbnQ+IGltcGwgPSBJbnRlbnQ6OmNyZWF0ZShh
Y3Rpb24sIHR5cGUsIGRhdGEsIG1lc3NhZ2VQb3J0QXJyYXlUcmFuc2Zlckxpc3QsIGVjKTsKLSAg
ICBpZiAoZWMpCi0gICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNv
bGF0ZSgpKTsKLQotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9s
ZGVyKCk7Ci0gICAgVjhET01XcmFwcGVyOjpjcmVhdGVET01XcmFwcGVyKGltcGwucmVsZWFzZSgp
LCAmaW5mbywgd3JhcHBlcik7Ci0gICAgcmV0dXJuIHdyYXBwZXI7Ci19Ci0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SW50ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEludGVudEN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTBkYTc4ZDgyNGRhMzQ5OWMyMDYzOGE1
ODQxZTRhN2E0NzI4NzAxYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEludGVudEN1c3RvbS5jcHAKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlLCBJbmMuICgi
R29vZ2xlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHT09HTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJJbnRlbnQuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKyNpbmNsdWRlICJNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5oIgorCisjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhET01XcmFwcGVy
LmgiCisjaW5jbHVkZSAiVjhJbnRlbnQuaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0LmgiCisj
aW5jbHVkZSA8d3RmL0FycmF5QnVmZmVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4SW50ZW50Ojpjb25zdHJ1Y3RvckNhbGxiYWNrQ3VzdG9tKGNv
bnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQor
ICAgICAgICByZXR1cm4gdGhyb3dOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihhcmdzLkdldElzb2xh
dGUoKSk7CisgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPT0gMSkgeworICAgICAgICAvLyBVc2UgdGhl
IGRpY3Rpb25hcnkgY29uc3RydWN0b3IuIFRoaXMgYmxvY2sgd2lsbCByZXR1cm4gaWYgdGhlCisg
ICAgICAgIC8vIGFyZ3VtZW50IGlzbid0IGEgdmFsaWQgRGljdGlvbmFyeS4KKyAgICAgICAgRVhD
RVBUSU9OX0JMT0NLKERpY3Rpb25hcnksIG9wdGlvbnMsIERpY3Rpb25hcnkoYXJnc1swXSwgYXJn
cy5HZXRJc29sYXRlKCkpKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAg
IFJlZlB0cjxJbnRlbnQ+IGltcGwgPSBJbnRlbnQ6OmNyZWF0ZShTY3JpcHRTdGF0ZTo6Y3VycmVu
dCgpLCBvcHRpb25zLCBlYyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVybiBz
ZXRET01FeGNlcHRpb24oZWMsIGFyZ3MuR2V0SXNvbGF0ZSgpKTsKKworICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigpOworICAgICAgICBWOERPTVdy
YXBwZXI6OmNyZWF0ZURPTVdyYXBwZXIoaW1wbC5yZWxlYXNlKCksICZpbmZvLCB3cmFwcGVyKTsK
KyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgfQorCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgU1RSSU5HX1RPX1Y4UEFSQU1FVEVSX0VYQ0VQVElPTl9CTE9DSyhWOFBhcmFtZXRl
cjw+LCBhY3Rpb24sIE1BWUJFX01JU1NJTkdfUEFSQU1FVEVSKGFyZ3MsIDAsIERlZmF1bHRJc1Vu
ZGVmaW5lZCkpOworICAgIFNUUklOR19UT19WOFBBUkFNRVRFUl9FWENFUFRJT05fQkxPQ0soVjhQ
YXJhbWV0ZXI8PiwgdHlwZSwgTUFZQkVfTUlTU0lOR19QQVJBTUVURVIoYXJncywgMSwgRGVmYXVs
dElzVW5kZWZpbmVkKSk7CisgICAgTWVzc2FnZVBvcnRBcnJheSBtZXNzYWdlUG9ydEFycmF5VHJh
bnNmZXJMaXN0OworICAgIEFycmF5QnVmZmVyQXJyYXkgYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVy
TGlzdDsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDMpIHsKKyAgICAgICAgaWYgKCFleHRyYWN0
VHJhbnNmZXJhYmxlcyhhcmdzWzNdLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0LCBhcnJh
eUJ1ZmZlckFycmF5VHJhbnNmZXJMaXN0LCBhcmdzLkdldElzb2xhdGUoKSkpCisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoIkNvdWxkIG5vdCBleHRyYWN0IHRyYW5zZmVyYWJsZXMi
LCBhcmdzLkdldElzb2xhdGUoKSk7CisgICAgfQorICAgIGJvb2wgZGF0YURpZFRocm93ID0gZmFs
c2U7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gZGF0YSA9IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6Y3JlYXRlKGFyZ3NbMl0sICZtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJMaXN0
LCAmYXJyYXlCdWZmZXJBcnJheVRyYW5zZmVyTGlzdCwgZGF0YURpZFRocm93KTsKKyAgICBpZiAo
ZGF0YURpZFRocm93KQorICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKERBVEFfQ0xPTkVf
RVJSLCBhcmdzLkdldElzb2xhdGUoKSk7CisKKyAgICBSZWZQdHI8SW50ZW50PiBpbXBsID0gSW50
ZW50OjpjcmVhdGUoYWN0aW9uLCB0eXBlLCBkYXRhLCBtZXNzYWdlUG9ydEFycmF5VHJhbnNmZXJM
aXN0LCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVj
LCBhcmdzLkdldElzb2xhdGUoKSk7CisKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSBhcmdzLkhvbGRlcigpOworICAgIFY4RE9NV3JhcHBlcjo6Y3JlYXRlRE9NV3JhcHBlcihp
bXBsLnJlbGVhc2UoKSwgJmluZm8sIHdyYXBwZXIpOworICAgIHJldHVybiB3cmFwcGVyOworfQor
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmZGU4ZGFjZDUyMTRmYTlhNTg2MjAy
ZmE4M2U4ZjIxYWU5YTU3MWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5u
ZWxDb25zdHJ1Y3Rvci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3Ry
aWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICogCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLSNpbmNsdWRlICJWOE1lc3NhZ2VDaGFubmVsLmgiCi0KLSNpbmNsdWRlICJE
b2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiTWVzc2FnZUNoYW5uZWwu
aCIKLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0LmgiCi0j
aW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCi0jaW5j
bHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgiCi0KLSNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
TWVzc2FnZUNoYW5uZWw6OmNvbnN0cnVjdG9yQ2FsbGJhY2tDdXN0b20oY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKLXsKLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2V0
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotCi0gICAgUmVmUHRyPE1lc3NhZ2VDaGFubmVsPiBv
YmogPSBNZXNzYWdlQ2hhbm5lbDo6Y3JlYXRlKGNvbnRleHQpOwotCi0gICAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IHdyYXBwZXIgPSBhcmdzLkhvbGRlcigpOwotCi0gICAgLy8gQ3JlYXRlIHJlZmVy
ZW5jZXMgZnJvbSB0aGUgTWVzc2FnZUNoYW5uZWwgd3JhcHBlciB0byB0aGUgdHdvCi0gICAgLy8g
TWVzc2FnZVBvcnQgd3JhcHBlcnMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIE1lc3NhZ2VQb3J0IHdy
YXBwZXJzCi0gICAgLy8gc3RheSBhbGl2ZSBhcyBsb25nIGFzIHRoZSBNZXNzYWdlQ2hhbm5lbCB3
cmFwcGVyIGlzIGFyb3VuZC4KLSAgICBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJl
bmNlKHdyYXBwZXIsICJwb3J0MSIsIHRvVjgob2JqLT5wb3J0MSgpLCBhcmdzLkhvbGRlcigpLCBh
cmdzLkdldElzb2xhdGUoKSkpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZl
cmVuY2Uod3JhcHBlciwgInBvcnQyIiwgdG9WOChvYmotPnBvcnQyKCksIGFyZ3MuSG9sZGVyKCks
IGFyZ3MuR2V0SXNvbGF0ZSgpKSk7Ci0KLSAgICBWOERPTVdyYXBwZXI6OmNyZWF0ZURPTVdyYXBw
ZXIob2JqLnJlbGVhc2UoKSwgJmluZm8sIHdyYXBwZXIpOwotICAgIHJldHVybiB3cmFwcGVyOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbEN1c3RvbS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWZkZThkYWNkNTIxNGZhOWE1ODYyMDJmYTgzZThmMjFhZTlhNTcxZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFu
bmVsQ3VzdG9tLmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJWOE1lc3NhZ2VDaGFubmVsLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTWVzc2FnZUNoYW5uZWwuaCIKKyNpbmNsdWRlICJWOEJp
bmRpbmcuaCIKKyNpbmNsdWRlICJWOE1lc3NhZ2VQb3J0LmgiCisjaW5jbHVkZSAiVjhVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4
dEV4ZWN1dGlvblByb3h5LmgiCisKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4TWVzc2FnZUNoYW5uZWw6OmNv
bnN0cnVjdG9yQ2FsbGJhY2tDdXN0b20oY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKK3sKKyAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpOworCisgICAgUmVmUHRyPE1lc3NhZ2VDaGFubmVsPiBvYmogPSBNZXNzYWdlQ2hhbm5l
bDo6Y3JlYXRlKGNvbnRleHQpOworCisgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBhcmdzLkhvbGRlcigpOworCisgICAgLy8gQ3JlYXRlIHJlZmVyZW5jZXMgZnJvbSB0aGUgTWVz
c2FnZUNoYW5uZWwgd3JhcHBlciB0byB0aGUgdHdvCisgICAgLy8gTWVzc2FnZVBvcnQgd3JhcHBl
cnMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIE1lc3NhZ2VQb3J0IHdyYXBwZXJzCisgICAgLy8gc3Rh
eSBhbGl2ZSBhcyBsb25nIGFzIHRoZSBNZXNzYWdlQ2hhbm5lbCB3cmFwcGVyIGlzIGFyb3VuZC4K
KyAgICBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNlKHdyYXBwZXIsICJwb3J0
MSIsIHRvVjgob2JqLT5wb3J0MSgpLCBhcmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSkp
OworICAgIFY4RE9NV3JhcHBlcjo6c2V0TmFtZWRIaWRkZW5SZWZlcmVuY2Uod3JhcHBlciwgInBv
cnQyIiwgdG9WOChvYmotPnBvcnQyKCksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNvbGF0ZSgp
KSk7CisKKyAgICBWOERPTVdyYXBwZXI6OmNyZWF0ZURPTVdyYXBwZXIob2JqLnJlbGVhc2UoKSwg
JmluZm8sIHdyYXBwZXIpOworICAgIHJldHVybiB3cmFwcGVyOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXZWJLaXRQb2ludENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA3OTIyNWI0MjkxNTcyZDRlZThhNjlkZjQwNzQ0MmY5YzA3NGVmZmZlLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdFBvaW50Q29uc3RydWN0b3IuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwg
MjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJWOFdlYktpdFBvaW50LmgiCi0KLSNpbmNsdWRlICJWOEJpbmRpbmcuaCIKLSNpbmNs
dWRlICJWOERPTVdyYXBwZXIuaCIKLSNpbmNsdWRlICJXcmFwcGVyVHlwZUluZm8uaCIKLQotI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4V2ViS2l0UG9pbnQ6OmNvbnN0cnVjdG9yQ2FsbGJhY2tDdXN0b20o
Y29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKLXsKLSAgICBmbG9hdCB4ID0gMDsKLSAgICBmbG9h
dCB5ID0gMDsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgaWYgKCFhcmdz
WzBdLT5Jc1VuZGVmaW5lZCgpKSB7Ci0gICAgICAgICAgICB4ID0gdG9GbG9hdChhcmdzWzBdKTsK
LSAgICAgICAgICAgIGlmIChpc25hbih4KSkKLSAgICAgICAgICAgICAgICB4ID0gMDsKLSAgICAg
ICAgfQotICAgICAgICBpZiAoIWFyZ3NbMV0tPklzVW5kZWZpbmVkKCkpIHsKLSAgICAgICAgICAg
IHkgPSB0b0Zsb2F0KGFyZ3NbMV0pOwotICAgICAgICAgICAgaWYgKGlzbmFuKHkpKQotICAgICAg
ICAgICAgICAgIHkgPSAwOwotICAgICAgICB9Ci0gICAgfQotICAgIFJlZlB0cjxXZWJLaXRQb2lu
dD4gcG9pbnQgPSBXZWJLaXRQb2ludDo6Y3JlYXRlKHgsIHkpOwotICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgVjhET01XcmFwcGVyOjpjcmVh
dGVET01XcmFwcGVyKHBvaW50LnJlbGVhc2UoKSwgJmluZm8sIHdyYXBwZXIpOwotICAgIHJldHVy
biB3cmFwcGVyOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRQb2ludEN1c3RvbS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRQb2ludEN1c3RvbS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzkyMjViNDI5MTU3MmQ0ZWU4YTY5ZGY0MDc0NDJmOWMwNzRlZmZmZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktp
dFBvaW50Q3VzdG9tLmNwcApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDA4LCAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlY4V2ViS2l0UG9pbnQuaCIKKworI2luY2x1ZGUgIlY4QmluZGlu
Zy5oIgorI2luY2x1ZGUgIlY4RE9NV3JhcHBlci5oIgorI2luY2x1ZGUgIldyYXBwZXJUeXBlSW5m
by5oIgorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJLaXRQb2ludDo6Y29uc3RydWN0b3JDYWxs
YmFja0N1c3RvbShjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQoreworICAgIGZsb2F0IHggPSAw
OworICAgIGZsb2F0IHkgPSAwOworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkgeworICAgICAg
ICBpZiAoIWFyZ3NbMF0tPklzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIHggPSB0b0Zsb2F0
KGFyZ3NbMF0pOworICAgICAgICAgICAgaWYgKGlzbmFuKHgpKQorICAgICAgICAgICAgICAgIHgg
PSAwOworICAgICAgICB9CisgICAgICAgIGlmICghYXJnc1sxXS0+SXNVbmRlZmluZWQoKSkgewor
ICAgICAgICAgICAgeSA9IHRvRmxvYXQoYXJnc1sxXSk7CisgICAgICAgICAgICBpZiAoaXNuYW4o
eSkpCisgICAgICAgICAgICAgICAgeSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgUmVmUHRy
PFdlYktpdFBvaW50PiBwb2ludCA9IFdlYktpdFBvaW50OjpjcmVhdGUoeCwgeSk7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gYXJncy5Ib2xkZXIoKTsKKyAgICBWOERPTVdy
YXBwZXI6OmNyZWF0ZURPTVdyYXBwZXIocG9pbnQucmVsZWFzZSgpLCAmaW5mbywgd3JhcHBlcik7
CisgICAgcmV0dXJuIHdyYXBwZXI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>