<?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>109007</bug_id>
          
          <creation_ts>2013-02-05 21:52:24 -0800</creation_ts>
          <short_desc>Fix code style violations in GIFImageReader.{cc|h}</short_desc>
          <delta_ts>2013-02-11 15:23:14 -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>Images</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>
          
          <blocked>98098</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Hin-Chung Lam">hclam</assigned_to>
          <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>pkasting</cc>
    
    <cc>qinmin</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>826072</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-05 21:52:24 -0800</bug_when>
    <thetext>There&apos;s going to be a lot of changes in GIFImageReader.cpp.

This file doesn&apos;t use WebKit style and will add a lot of noise in future reviews. Fix the style violations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826074</commentid>
    <comment_count>1</comment_count>
      <attachid>186756</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-05 21:56:12 -0800</bug_when>
    <thetext>Created attachment 186756
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826076</commentid>
    <comment_count>2</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-05 21:57:55 -0800</bug_when>
    <thetext>senorblanco: can you review this?

There&apos;s no change in logic at all. I had to fix the style violations first because my subsequent changes touch a significant portion of GIFImageReader and style checks add a lot of noise to review.

I ran layout tests and ran this through a random set of 50K GIF images on the web to make sure it is bit-exact as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826077</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 22:00:04 -0800</bug_when>
    <thetext>Attachment 186756 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:62:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>826188</commentid>
    <comment_count>4</comment_count>
      <attachid>186756</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-06 01:01:00 -0800</bug_when>
    <thetext>Comment on attachment 186756
Patch

Attachment 186756 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16393094</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828670</commentid>
    <comment_count>5</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-08 10:36:56 -0800</bug_when>
    <thetext>senorblanco, jamesr: thoughts? It seems overkill to fix the entire file but later reviews will have a lot less noise from style-check violations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829976</commentid>
    <comment_count>6</comment_count>
      <attachid>186756</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2013-02-11 12:25:16 -0800</bug_when>
    <thetext>Comment on attachment 186756
Patch

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

Generally rubber-stamp LGTM

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:95
&gt; +    } \

Nit: Combine next line with this one?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:92
&gt; +    int ipass; // Interlace pass; Ranges 1-4 if interlaced.

Nit: Some members, like stackp and ipass, look like maybe they should be camelCase?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:166
&gt; +class GIFImageReader {

Why is GIFFrameContext a struct with all-public members and no accessors, but GIFImageReader is a class with private members and accessors?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830008</commentid>
    <comment_count>7</comment_count>
      <attachid>186756</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-11 13:01:29 -0800</bug_when>
    <thetext>Comment on attachment 186756
Patch

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

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:95
&gt;&gt; +    } \
&gt; 
&gt; Nit: Combine next line with this one?

done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:92
&gt;&gt; +    int ipass; // Interlace pass; Ranges 1-4 if interlaced.
&gt; 
&gt; Nit: Some members, like stackp and ipass, look like maybe they should be camelCase?

Those I just leave it. I&apos;ll remove / modify them in future patches anyway.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:166
&gt;&gt; +class GIFImageReader {
&gt; 
&gt; Why is GIFFrameContext a struct with all-public members and no accessors, but GIFImageReader is a class with private members and accessors?

I added some public methods to this class, hence I changed it from struct to class. GIFFrameContext is still a struct because we access the members directly (it will change though).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830010</commentid>
    <comment_count>8</comment_count>
      <attachid>187644</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-11 13:04:53 -0800</bug_when>
    <thetext>Created attachment 187644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830021</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 13:10:51 -0800</bug_when>
    <thetext>Attachment 187644 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp&apos;, u&apos;Source/WebCore/platform/image-decoders/gif/GIFImageReader.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:62:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 1 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830102</commentid>
    <comment_count>10</comment_count>
      <attachid>187644</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-02-11 14:07:02 -0800</bug_when>
    <thetext>Comment on attachment 187644
Patch

OK.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830117</commentid>
    <comment_count>11</comment_count>
      <attachid>187672</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-11 14:18:59 -0800</bug_when>
    <thetext>Created attachment 187672
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830201</commentid>
    <comment_count>12</comment_count>
      <attachid>187672</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 15:23:10 -0800</bug_when>
    <thetext>Comment on attachment 187672
Patch for landing

Clearing flags on attachment: 187672

Committed r142528: &lt;http://trac.webkit.org/changeset/142528&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830202</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 15:23:14 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186756</attachid>
            <date>2013-02-05 21:56:12 -0800</date>
            <delta_ts>2013-02-11 13:04:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109007-20130205215250.patch</filename>
            <type>text/plain</type>
            <size>78996</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQ4NmY5NzQxOTJmYTRm
NjZlNGYxYTdlOWI2NjIwMmY2YjQzNWY3ZS4uZmIzOWExNGQ4NDlkOTJhZTYwZDE5NGJhMmRhZTNk
NGI2ZTAwN2M0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAyLTA1ICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IGNvZGUgc3R5bGUgdmlv
bGF0aW9ucyBpbiBHSUZJbWFnZVJlYWRlci57Y2N8aH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTAwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMganVzdCBhIHN0eWxlIGNsZWFuIHVwIGZv
ciBHSUZJbWFnZVJlYWRlci57Y2N8aH0uCisKKyAgICAgICAgVGhlcmUncyBnb2luZyB0byBiZSBh
IGxvdCBjaGFuZ2VzIGluIHRoZXNlIHR3byBmaWxlcyBhbmQgc3R5bGUgY2hlY2sKKyAgICAgICAg
d2lsbCBhZGQgYSBsb3Qgb2Ygbm9pc2UgaW4gbGF0ZXIgcmV2aWV3cy4gRml4IHN0eWxlIHByb2Js
ZW1zIGZpcnN0LgorCisgICAgICAgIFRoZXJlIGlzIG5vIGNoYW5nZSBpbiBsb2dpYyBhdCBhbGwu
IEp1c3Qgc3R5bGUgZml4ZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKEdJRkltYWdlUmVhZGVy
OjpvdXRwdXRSb3cpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKToKKyAgICAgICAg
KEdJRkltYWdlUmVhZGVyOjpyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dCk6CisgICAg
ICAgIChHSUZGcmFtZUNvbnRleHQ6OkdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZGcmFt
ZUNvbnRleHQ6On5HSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OkdJ
RkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjp+R0lGSW1hZ2VSZWFkZXIp
OgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6Omlt
YWdlc0NvdW50KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpsb29wQ291bnQpOgorICAgICAg
ICAoR0lGSW1hZ2VSZWFkZXI6Omdsb2JhbENvbG9ybWFwKToKKyAgICAgICAgKEdJRkltYWdlUmVh
ZGVyOjpnbG9iYWxDb2xvcm1hcFNpemUpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmZyYW1l
Q29udGV4dCk6CisKIDIwMTMtMDItMDUgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtWOF0gUmVtb3ZlIGRlcHJlY2F0ZWRWOFN0cmluZygpIGFuZCBkZXBy
ZWNhdGVkVjhJbnRlZ2VyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggOGZjNGE5
YTUzMDlmZjgxOWQxZjg5OGIzMzgxYTkxZjc3OTEyYjFlNS4uMGNiMjI4ODVjZWIzZDZiMTZiMjM1
ZjgxOWI5OGEyNWI5M2JhZmQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTg3
LDggKzg3LDggQEAgc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiAgICAgICAg
IEdJRkltYWdlUmVhZGVyIHJlYWRlcigwKTsKICAgICAgICAgcmVhZGVyLnJlYWQoKGNvbnN0IHVu
c2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwgR0lGRnJhbWVDb3Vu
dFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpKTsKICAgICAgICAgbV9hbHJlYWR5U2Nh
bm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IHRydWU7Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJD
YWNoZS5yZXNpemUocmVhZGVyLmltYWdlc19jb3VudCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcmVhZGVyLmltYWdlc19jb3VudDsgKytpKQorICAgICAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGUucmVzaXplKHJlYWRlci5pbWFnZXNDb3VudCgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByZWFkZXIuaW1hZ2VzQ291bnQoKTsgKytpKQogICAgICAgICAgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKICAgICB9
CiAKQEAgLTExNiw4ICsxMTYsOCBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291
bnQoKSBjb25zdAogICAgIC8vIHNob3VsZCBjb250aW51ZSB0byB0cmVhdCBpdCBhcyBhICJsb29w
IG9uY2UiIGFuaW1hdGlvbi4gIFdlIGRvbid0IG5lZWQKICAgICAvLyBzcGVjaWFsIGNvZGUgaGVy
ZSBlaXRoZXIsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHdlJ2xsIG5ldmVyIGNoYW5nZQogICAgIC8v
IHxtX3JlcGV0aXRpb25Db3VudHwgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICBpZiAobV9y
ZWFkZXIgJiYgKG1fcmVhZGVyLT5sb29wX2NvdW50ICE9IGNMb29wQ291bnROb3RTZWVuKSkKLSAg
ICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+bG9vcF9jb3VudDsKKyAgICBpZiAo
bV9yZWFkZXIgJiYgKG1fcmVhZGVyLT5sb29wQ291bnQoKSAhPSBjTG9vcENvdW50Tm90U2Vlbikp
CisgICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0gbV9yZWFkZXItPmxvb3BDb3VudCgpOwogICAg
IHJldHVybiBtX3JlcGV0aXRpb25Db3VudDsKIH0KIApAQCAtMTk4LDI5ICsxOTgsMjkgQEAgdm9p
ZCBHSUZJbWFnZURlY29kZXI6OmRlY29kaW5nSGFsdGVkKHVuc2lnbmVkIGJ5dGVzTGVmdCkKIAog
Ym9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgs
IHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25l
ZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQ
aXhlbHMpCiB7Ci0gICAgY29uc3QgR0lGRnJhbWVSZWFkZXIqIGZyYW1lUmVhZGVyID0gbV9yZWFk
ZXItPmZyYW1lX3JlYWRlcjsKKyAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4
dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRleHQoKTsKICAgICAvLyBUaGUgcGl4ZWwgZGF0YSBhbmQg
Y29vcmRpbmF0ZXMgc3VwcGxpZWQgdG8gdXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSdzCiAg
ICAgLy8gb3JpZ2luIHdpdGhpbiB0aGUgZW50aXJlIGltYWdlIHNpemUsIGkuZS4KLSAgICAvLyAo
ZnJhbWVSZWFkZXItPnhfb2Zmc2V0LCBmcmFtZVJlYWRlci0+eV9vZmZzZXQpLiAgVGhlcmUgaXMg
bm8gZ3VhcmFudGVlCi0gICAgLy8gdGhhdCAocm93RW5kIC0gcm93QnVmZmVyKSA9PSAoc2l6ZSgp
LndpZHRoKCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQpLCBzbworICAgIC8vIChmcmFtZUNvbnRl
eHQtPnhPZmZzZXQsIGZyYW1lQ29udGV4dC0+eU9mZnNldCkuIFRoZXJlIGlzIG5vIGd1YXJhbnRl
ZQorICAgIC8vIHRoYXQgKHJvd0VuZCAtIHJvd0J1ZmZlcikgPT0gKHNpemUoKS53aWR0aCgpIC0g
ZnJhbWVDb250ZXh0LT54T2Zmc2V0KSwgc28KICAgICAvLyB3ZSBtdXN0IGVuc3VyZSB3ZSBkb24n
dCBydW4gb2ZmIHRoZSBlbmQgb2YgZWl0aGVyIHRoZSBzb3VyY2UgZGF0YSBvciB0aGUKICAgICAv
LyByb3cncyBYLWNvb3JkaW5hdGVzLgotICAgIGludCB4QmVnaW4gPSB1cHBlckJvdW5kU2NhbGVk
WChmcmFtZVJlYWRlci0+eF9vZmZzZXQpOwotICAgIGludCB5QmVnaW4gPSB1cHBlckJvdW5kU2Nh
bGVkWShmcmFtZVJlYWRlci0+eV9vZmZzZXQgKyByb3dOdW1iZXIpOwotICAgIGludCB4RW5kID0g
bG93ZXJCb3VuZFNjYWxlZFgoc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50PihmcmFtZVJlYWRlci0+
eF9vZmZzZXQgKyAocm93RW5kIC0gcm93QnVmZmVyKSksIHNpemUoKS53aWR0aCgpKSAtIDEsIHhC
ZWdpbiArIDEpICsgMTsKLSAgICBpbnQgeUVuZCA9IGxvd2VyQm91bmRTY2FsZWRZKHN0ZDo6bWlu
KHN0YXRpY19jYXN0PGludD4oZnJhbWVSZWFkZXItPnlfb2Zmc2V0ICsgcm93TnVtYmVyICsgcmVw
ZWF0Q291bnQpLCBzaXplKCkuaGVpZ2h0KCkpIC0gMSwgeUJlZ2luICsgMSkgKyAxOworICAgIGlu
dCB4QmVnaW4gPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZUNvbnRleHQtPnhPZmZzZXQpOworICAg
IGludCB5QmVnaW4gPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZUNvbnRleHQtPnlPZmZzZXQgKyBy
b3dOdW1iZXIpOworICAgIGludCB4RW5kID0gbG93ZXJCb3VuZFNjYWxlZFgoc3RkOjptaW4oc3Rh
dGljX2Nhc3Q8aW50PihmcmFtZUNvbnRleHQtPnhPZmZzZXQgKyAocm93RW5kIC0gcm93QnVmZmVy
KSksIHNpemUoKS53aWR0aCgpKSAtIDEsIHhCZWdpbiArIDEpICsgMTsKKyAgICBpbnQgeUVuZCA9
IGxvd2VyQm91bmRTY2FsZWRZKHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4oZnJhbWVDb250ZXh0
LT55T2Zmc2V0ICsgcm93TnVtYmVyICsgcmVwZWF0Q291bnQpLCBzaXplKCkuaGVpZ2h0KCkpIC0g
MSwgeUJlZ2luICsgMSkgKyAxOwogICAgIGlmICghcm93QnVmZmVyIHx8ICh4QmVnaW4gPCAwKSB8
fCAoeUJlZ2luIDwgMCkgfHwgKHhFbmQgPD0geEJlZ2luKSB8fCAoeUVuZCA8PSB5QmVnaW4pKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEdldCB0aGUgY29sb3JtYXAuCiAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogY29sb3JNYXA7CiAgICAgdW5zaWduZWQgY29sb3JNYXBTaXplOwot
ICAgIGlmIChmcmFtZVJlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCkgewotICAgICAg
ICBjb2xvck1hcCA9IGZyYW1lUmVhZGVyLT5sb2NhbF9jb2xvcm1hcDsKLSAgICAgICAgY29sb3JN
YXBTaXplID0gKHVuc2lnbmVkKWZyYW1lUmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplOworICAg
IGlmIChmcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQpIHsKKyAgICAgICAgY29s
b3JNYXAgPSBmcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXA7CisgICAgICAgIGNvbG9yTWFwU2l6
ZSA9ICh1bnNpZ25lZClmcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBTaXplOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGNvbG9yTWFwID0gbV9yZWFkZXItPmdsb2JhbF9jb2xvcm1hcDsKLSAgICAg
ICAgY29sb3JNYXBTaXplID0gbV9yZWFkZXItPmdsb2JhbF9jb2xvcm1hcF9zaXplOworICAgICAg
ICBjb2xvck1hcCA9IG1fcmVhZGVyLT5nbG9iYWxDb2xvcm1hcCgpOworICAgICAgICBjb2xvck1h
cFNpemUgPSBtX3JlYWRlci0+Z2xvYmFsQ29sb3JtYXBTaXplKCk7CiAgICAgfQogICAgIGlmICgh
Y29sb3JNYXApCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMzLDggKzIzMyw4IEBAIGJvb2wg
R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNp
Z25lZCBjaGFyKiByb3dCdWZmCiAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRk
cmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUg
cm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4
QmVnaW47IHggPCB4RW5kOyArK3gpIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3Vy
Y2VWYWx1ZSA9ICoocm93QnVmZmVyICsgKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDog
eCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQpOwotICAgICAgICBpZiAoKCFmcmFtZVJlYWRlci0+
aXNfdHJhbnNwYXJlbnQgfHwgKHNvdXJjZVZhbHVlICE9IGZyYW1lUmVhZGVyLT50cGl4ZWwpKSAm
JiAoc291cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29s
dW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0KTsKKyAgICAgICAgaWYgKCghZnJh
bWVDb250ZXh0LT5pc1RyYW5zcGFyZW50IHx8IChzb3VyY2VWYWx1ZSAhPSBmcmFtZUNvbnRleHQt
PnRwaXhlbCkpICYmIChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFwU2l6ZSkpIHsKICAgICAgICAgICAg
IGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3VyY2VWYWx1
ZSkgKiAzOwogICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoY3VycmVudEFkZHJlc3MsIGNvbG9y
TWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2NvbG9y
SW5kZXggKyAyXSwgMjU1KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMzMSwxNCArMzMxLDE0IEBA
IHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1
ZXJ5IHF1ZXJ5KQogYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25l
ZCBmcmFtZUluZGV4KQogewogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3Vy
IGJ1ZmZlci4KLSAgICBjb25zdCBHSUZGcmFtZVJlYWRlciogZnJhbWVSZWFkZXIgPSBtX3JlYWRl
ci0+ZnJhbWVfcmVhZGVyOwotICAgIEludFJlY3QgZnJhbWVSZWN0KGZyYW1lUmVhZGVyLT54X29m
ZnNldCwgZnJhbWVSZWFkZXItPnlfb2Zmc2V0LCBmcmFtZVJlYWRlci0+d2lkdGgsIGZyYW1lUmVh
ZGVyLT5oZWlnaHQpOworICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0ID0g
bV9yZWFkZXItPmZyYW1lQ29udGV4dCgpOworICAgIEludFJlY3QgZnJhbWVSZWN0KGZyYW1lQ29u
dGV4dC0+eE9mZnNldCwgZnJhbWVDb250ZXh0LT55T2Zmc2V0LCBmcmFtZUNvbnRleHQtPndpZHRo
LCBmcmFtZUNvbnRleHQtPmhlaWdodCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lUmVj
dCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIHRoZSBidWZmZXIuCiAgICAgaWYgKGZyYW1lUmVjdC5t
YXhYKCkgPiBzaXplKCkud2lkdGgoKSkKLSAgICAgICAgZnJhbWVSZWN0LnNldFdpZHRoKHNpemUo
KS53aWR0aCgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsKKyAgICAgICAgZnJhbWVSZWN0LnNl
dFdpZHRoKHNpemUoKS53aWR0aCgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0KTsKICAgICBpZiAo
ZnJhbWVSZWN0Lm1heFkoKSA+IHNpemUoKS5oZWlnaHQoKSkKLSAgICAgICAgZnJhbWVSZWN0LnNl
dEhlaWdodChzaXplKCkuaGVpZ2h0KCkgLSBmcmFtZVJlYWRlci0+eV9vZmZzZXQpOworICAgICAg
ICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lQ29udGV4dC0+eU9m
ZnNldCk7CiAKICAgICBJbWFnZUZyYW1lKiBjb25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNh
Y2hlW2ZyYW1lSW5kZXhdOwogICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVS
ZWN0LngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAppbmRleCA3NDE0ZTk4MTg1OTA3YzBm
Njg3YjM3YzkzNTA1MzE5MjdmZmI4ODNiLi4zMmFhMzg5MWFkNzBlODE1MzhjZDhkZWYwMzU0OWI3
ZjZhYzRiYmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKQEAgLTgxLDg2NCArODEsODIw
IEBAIG1haWxpbmcgYWRkcmVzcy4KIAogdXNpbmcgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOwog
Ci0vLyBEZWZpbmUgdGhlIE1vemlsbGEgbWFjcm8gc2V0dXAgc28gdGhhdCB3ZSBjYW4gbGVhdmUg
dGhlIG1hY3JvcyBhbG9uZS4KLSNkZWZpbmUgUFJfQkVHSU5fTUFDUk8gIGRvIHsKLSNkZWZpbmUg
UFJfRU5EX01BQ1JPICAgIH0gd2hpbGUgKDApCi0KLS8qCi0gKiBHRVROKG4sIHMpIHJlcXVlc3Rz
IGF0IGxlYXN0ICduJyBieXRlcyBhdmFpbGFibGUgZnJvbSAncScsIGF0IHN0YXJ0IG9mIHN0YXRl
ICdzJwotICoKLSAqIE5vdGUsIHRoZSBob2xkIHdpbGwgbmV2ZXIgbmVlZCB0byBiZSBiaWdnZXIg
dGhhbiAyNTYgYnl0ZXMgdG8gZ2F0aGVyIHVwIGluIHRoZSBob2xkLAotICogYXMgZWFjaCBHSUYg
YmxvY2sgKGV4Y2VwdCBjb2xvcm1hcHMpIGNhbiBuZXZlciBiZSBiaWdnZXIgdGhhbiAyNTYgYnl0
ZXMuCi0gKiBDb2xvcm1hcHMgYXJlIGRpcmVjdGx5IGNvcGllZCBpbiB0aGUgcmVzcC4gZ2xvYmFs
X2NvbG9ybWFwIG9yIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBsb2NhbF9jb2xvcm1hcC4KLSAqIFNv
IGEgZml4ZWQgYnVmZmVyIGluIEdJRkltYWdlUmVhZGVyIGlzIGdvb2QgZW5vdWdoLgotICogVGhp
cyBidWZmZXIgaXMgb25seSBuZWVkZWQgdG8gY29weSBsZWZ0LW92ZXIgZGF0YSBmcm9tIG9uZSBH
aWZXcml0ZSBjYWxsIHRvIHRoZSBuZXh0Ci0gKi8KLSNkZWZpbmUgR0VUTihuLHMpICAgICAgICAg
ICAgICAgICAgICBcCi0gIFBSX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGJ5dGVzX3RvX2NvbnN1bWUgPSAobik7ICAgICAgXAotICAgIHN0YXRlID0gKHMpOyAgICAgICAg
ICAgICAgICAgXAotICBQUl9FTkRfTUFDUk8KLQotLyogR2V0IGEgMTYtYml0IHZhbHVlIHN0b3Jl
ZCBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAqLworLy8gR0VUTihuLCBzKSByZXF1ZXN0cyBhdCBs
ZWFzdCAnbicgYnl0ZXMgYXZhaWxhYmxlIGZyb20gJ3EnLCBhdCBzdGFydCBvZiBzdGF0ZSAncycu
CisvLworLy8gTm90ZSwgdGhlIGhvbGQgd2lsbCBuZXZlciBuZWVkIHRvIGJlIGJpZ2dlciB0aGFu
IDI1NiBieXRlcyB0byBnYXRoZXIgdXAgaW4gdGhlIGhvbGQsCisvLyBhcyBlYWNoIEdJRiBibG9j
ayAoZXhjZXB0IGNvbG9ybWFwcykgY2FuIG5ldmVyIGJlIGJpZ2dlciB0aGFuIDI1NiBieXRlcy4K
Ky8vIENvbG9ybWFwcyBhcmUgZGlyZWN0bHkgY29waWVkIGluIHRoZSByZXNwLiBnbG9iYWxfY29s
b3JtYXAgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxvY2FsX2NvbG9ybWFwLgorLy8gU28gYSBm
aXhlZCBidWZmZXIgaW4gR0lGSW1hZ2VSZWFkZXIgaXMgZ29vZCBlbm91Z2guCisvLyBUaGlzIGJ1
ZmZlciBpcyBvbmx5IG5lZWRlZCB0byBjb3B5IGxlZnQtb3ZlciBkYXRhIGZyb20gb25lIEdpZldy
aXRlIGNhbGwgdG8gdGhlIG5leHQKKyNkZWZpbmUgR0VUTihuLCBzKSBcCisgICAgZG8geyBcCisg
ICAgICAgIG1fYnl0ZXNUb0NvbnN1bWUgPSAobik7IFwKKyAgICAgICAgbV9zdGF0ZSA9IChzKTsg
XAorICAgIH0gXAorICAgIHdoaWxlICgwKQorCisvLyBHZXQgYSAxNi1iaXQgdmFsdWUgc3RvcmVk
IGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0LgogI2RlZmluZSBHRVRJTlQxNihwKSAgICgocClbMV08
PDh8KHApWzBdKQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLy8gU2VuZCB0aGUgZGF0YSB0
byB0aGUgZGlzcGxheSBmcm9udC1lbmQuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpvdXRwdXRfcm93
KCkKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dFJvdygpCiB7Ci0gIEdJRkZyYW1lUmVhZGVy
KiBncyA9IGZyYW1lX3JlYWRlcjsKLQotICBpbnQgZHJvd19zdGFydCwgZHJvd19lbmQ7Ci0KLSAg
ZHJvd19zdGFydCA9IGRyb3dfZW5kID0gZ3MtPmlyb3c7Ci0KLSAgLyoKLSAgICogSGFlYmVybGkt
aW5zcGlyZWQgaGFjayBmb3IgaW50ZXJsYWNlZCBHSUZzOiBSZXBsaWNhdGUgbGluZXMgd2hpbGUK
LSAgICogZGlzcGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0aWFuLWJsaW5kIiBlZmZlY3Qg
YXMgdGhlIGltYWdlIGlzCi0gICAqIGxvYWRlZC4gQWRqdXN0IHBpeGVsIHZlcnRpY2FsIHBvc2l0
aW9ucyB0byBhdm9pZCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUKLSAgICogaW1hZ2UgY3Jhd2xpbmcg
dXAgdGhlIHNjcmVlbiBhcyBzdWNjZXNzaXZlIHBhc3NlcyBhcmUgZHJhd24uCi0gICAqLwotICBp
ZiAoZ3MtPnByb2dyZXNzaXZlX2Rpc3BsYXkgJiYgZ3MtPmludGVybGFjZWQgJiYgZ3MtPmlwYXNz
IDwgNCkgewotICAgIHVuc2lnbmVkIHJvd19kdXAgPSAwLCByb3dfc2hpZnQgPSAwOwotCi0gICAg
c3dpdGNoIChncy0+aXBhc3MpIHsKLSAgICBjYXNlIDE6Ci0gICAgICByb3dfZHVwID0gNzsKLSAg
ICAgIHJvd19zaGlmdCA9IDM7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICByb3df
ZHVwID0gMzsKLSAgICAgIHJvd19zaGlmdCA9IDE7Ci0gICAgICBicmVhazsKLSAgICBjYXNlIDM6
Ci0gICAgICByb3dfZHVwID0gMTsKLSAgICAgIHJvd19zaGlmdCA9IDA7Ci0gICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgYnJlYWs7Ci0gICAgfQorICAgIGludCBkcm93U3RhcnQgPSBt
X2ZyYW1lQ29udGV4dC0+aXJvdzsKKyAgICBpbnQgZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0LT5p
cm93OworCisgICAgLy8gSGFlYmVybGktaW5zcGlyZWQgaGFjayBmb3IgaW50ZXJsYWNlZCBHSUZz
OiBSZXBsaWNhdGUgbGluZXMgd2hpbGUKKyAgICAvLyBkaXNwbGF5aW5nIHRvIGRpbWluaXNoIHRo
ZSAidmVuZXRpYW4tYmxpbmQiIGVmZmVjdCBhcyB0aGUgaW1hZ2UgaXMKKyAgICAvLyBsb2FkZWQu
IEFkanVzdCBwaXhlbCB2ZXJ0aWNhbCBwb3NpdGlvbnMgdG8gYXZvaWQgdGhlIGFwcGVhcmFuY2Ug
b2YgdGhlCisgICAgLy8gaW1hZ2UgY3Jhd2xpbmcgdXAgdGhlIHNjcmVlbiBhcyBzdWNjZXNzaXZl
IHBhc3NlcyBhcmUgZHJhd24uCisgICAgaWYgKG1fZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURp
c3BsYXkgJiYgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQgJiYgbV9mcmFtZUNvbnRleHQtPmlw
YXNzIDwgNCkgeworICAgICAgICB1bnNpZ25lZCByb3dEdXAgPSAwOworICAgICAgICB1bnNpZ25l
ZCByb3dTaGlmdCA9IDA7CisKKyAgICAgICAgc3dpdGNoIChtX2ZyYW1lQ29udGV4dC0+aXBhc3Mp
IHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcm93RHVwID0gNzsKKyAgICAgICAgICAg
IHJvd1NoaWZ0ID0gMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAg
ICAgICAgICByb3dEdXAgPSAzOworICAgICAgICAgICAgcm93U2hpZnQgPSAxOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIHJvd0R1cCA9IDE7CisgICAg
ICAgICAgICByb3dTaGlmdCA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKLSAgICBkcm93X3N0YXJ0IC09IHJv
d19zaGlmdDsKLSAgICBkcm93X2VuZCA9IGRyb3dfc3RhcnQgKyByb3dfZHVwOworICAgICAgICBk
cm93U3RhcnQgLT0gcm93U2hpZnQ7CisgICAgICAgIGRyb3dFbmQgPSBkcm93U3RhcnQgKyByb3dE
dXA7CiAKLSAgICAvKiBFeHRlbmQgaWYgYm90dG9tIGVkZ2UgaXNuJ3QgY292ZXJlZCBiZWNhdXNl
IG9mIHRoZSBzaGlmdCB1cHdhcmQuICovCi0gICAgaWYgKCgoZ3MtPmhlaWdodCAtIDEpIC0gZHJv
d19lbmQpIDw9IHJvd19zaGlmdCkKLSAgICAgIGRyb3dfZW5kID0gZ3MtPmhlaWdodCAtIDE7Cisg
ICAgICAgIC8vIEV4dGVuZCBpZiBib3R0b20gZWRnZSBpc24ndCBjb3ZlcmVkIGJlY2F1c2Ugb2Yg
dGhlIHNoaWZ0IHVwd2FyZC4KKyAgICAgICAgaWYgKCgobV9mcmFtZUNvbnRleHQtPmhlaWdodCAt
IDEpIC0gZHJvd0VuZCkgPD0gcm93U2hpZnQpCisgICAgICAgICAgICBkcm93RW5kID0gbV9mcmFt
ZUNvbnRleHQtPmhlaWdodCAtIDE7CiAKLSAgICAvKiBDbGFtcCBmaXJzdCBhbmQgbGFzdCByb3dz
IHRvIHVwcGVyIGFuZCBsb3dlciBlZGdlIG9mIGltYWdlLiAqLwotICAgIGlmIChkcm93X3N0YXJ0
IDwgMCkKLSAgICAgIGRyb3dfc3RhcnQgPSAwOwotICAgIGlmICgodW5zaWduZWQpZHJvd19lbmQg
Pj0gZ3MtPmhlaWdodCkKLSAgICAgIGRyb3dfZW5kID0gZ3MtPmhlaWdodCAtIDE7Ci0gIH0KKyAg
ICAgICAgLy8gQ2xhbXAgZmlyc3QgYW5kIGxhc3Qgcm93cyB0byB1cHBlciBhbmQgbG93ZXIgZWRn
ZSBvZiBpbWFnZS4KKyAgICAgICAgaWYgKGRyb3dTdGFydCA8IDApCisgICAgICAgICAgICBkcm93
U3RhcnQgPSAwOwogCi0gIC8qIFByb3RlY3QgYWdhaW5zdCB0b28gbXVjaCBpbWFnZSBkYXRhICov
Ci0gIGlmICgodW5zaWduZWQpZHJvd19zdGFydCA+PSBncy0+aGVpZ2h0KQotICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoKHVuc2lnbmVkKWRyb3dFbmQgPj0gbV9mcmFtZUNvbnRleHQtPmhl
aWdodCkKKyAgICAgICAgICAgIGRyb3dFbmQgPSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0IC0gMTsK
KyAgICB9CiAKLSAgLy8gQ0FMTEJBQ0s6IExldCB0aGUgY2xpZW50IGtub3cgd2UgaGF2ZSBkZWNv
ZGVkIGEgcm93LgotICBpZiAoY2xpZW50cHRyICYmIGZyYW1lX3JlYWRlciAmJgotICAgICAgIWNs
aWVudHB0ci0+aGF2ZURlY29kZWRSb3coaW1hZ2VzX2NvdW50IC0gMSwgZnJhbWVfcmVhZGVyLT5y
b3didWYsIGZyYW1lX3JlYWRlci0+cm93ZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZHJvd19zdGFydCwgZHJvd19lbmQgLSBkcm93X3N0YXJ0ICsgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdzLT5wcm9ncmVzc2l2ZV9kaXNwbGF5ICYmIGdzLT5pbnRl
cmxhY2VkICYmIGdzLT5pcGFzcyA+IDEpKQotICAgIHJldHVybiBmYWxzZTsKKyAgICAvLyBQcm90
ZWN0IGFnYWluc3QgdG9vIG11Y2ggaW1hZ2UgZGF0YS4KKyAgICBpZiAoKHVuc2lnbmVkKWRyb3dT
dGFydCA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICBncy0+cm93cCA9IGdzLT5yb3didWY7CisgICAgLy8gQ0FMTEJBQ0s6IExldCB0aGUgY2xpZW50
IGtub3cgd2UgaGF2ZSBkZWNvZGVkIGEgcm93LgorICAgIGlmIChtX2NsaWVudCAmJiBtX2ZyYW1l
Q29udGV4dAorICAgICAgICAmJiAhbV9jbGllbnQtPmhhdmVEZWNvZGVkUm93KG1faW1hZ2VzQ291
bnQgLSAxLCBtX2ZyYW1lQ29udGV4dC0+cm93YnVmLCBtX2ZyYW1lQ29udGV4dC0+cm93ZW5kLAor
ICAgICAgICAgICAgZHJvd1N0YXJ0LCBkcm93RW5kIC0gZHJvd1N0YXJ0ICsgMSwgbV9mcmFtZUNv
bnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSAmJiBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCAm
JiBtX2ZyYW1lQ29udGV4dC0+aXBhc3MgPiAxKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
IGlmICghZ3MtPmludGVybGFjZWQpCi0gICAgZ3MtPmlyb3crKzsKLSAgZWxzZSB7Ci0gICAgZG8g
ewotICAgICAgc3dpdGNoIChncy0+aXBhc3MpCi0gICAgICB7Ci0gICAgICAgIGNhc2UgMToKLSAg
ICAgICAgICBncy0+aXJvdyArPSA4OwotICAgICAgICAgIGlmIChncy0+aXJvdyA+PSBncy0+aGVp
Z2h0KSB7Ci0gICAgICAgICAgICBncy0+aXBhc3MrKzsKLSAgICAgICAgICAgIGdzLT5pcm93ID0g
NDsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7CisgICAgbV9mcmFtZUNvbnRleHQtPnJv
d3AgPSBtX2ZyYW1lQ29udGV4dC0+cm93YnVmOworCisgICAgaWYgKCFtX2ZyYW1lQ29udGV4dC0+
aW50ZXJsYWNlZCkKKyAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3crKzsKKyAgICBlbHNlIHsK
KyAgICAgICAgZG8geworICAgICAgICAgICAgc3dpdGNoIChtX2ZyYW1lQ29udGV4dC0+aXBhc3Mp
IHsKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
aXJvdyArPSA4OworICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBt
X2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5pcGFzcysrOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9
IDQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gODsK
KyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRl
eHQtPmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3Mr
KzsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSAyOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAz
OgorICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDQ7CisgICAgICAgICAg
ICAgICAgaWYgKG1fZnJhbWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7CisgICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSAyOworICAgICAgICAgICAgICAgIGlmICht
X2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOworICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChtX2ZyYW1lQ29udGV4dC0+aXJv
dyA+IChtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0IC0gMSkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KIAotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgZ3MtPmlyb3cgKz0gODsKLSAgICAg
ICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdodCkgewotICAgICAgICAgICAgZ3MtPmlwYXNz
Kys7Ci0gICAgICAgICAgICBncy0+aXJvdyA9IDI7Ci0gICAgICAgICAgfQotICAgICAgICAgIGJy
ZWFrOworLy8gUGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29kaW5nLgorYm9vbCBHSUZJbWFn
ZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSkKK3sKKyAgICBpZiAoIW1fZnJh
bWVDb250ZXh0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICBjYXNlIDM6Ci0gICAg
ICAgICAgZ3MtPmlyb3cgKz0gNDsKLSAgICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdo
dCkgewotICAgICAgICAgICAgZ3MtPmlwYXNzKys7Ci0gICAgICAgICAgICBncy0+aXJvdyA9IDE7
Ci0gICAgICAgICAgfQotICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgNDoKLSAgICAg
ICAgICBncy0+aXJvdyArPSAyOwotICAgICAgICAgIGlmIChncy0+aXJvdyA+PSBncy0+aGVpZ2h0
KXsKLSAgICAgICAgICAgIGdzLT5pcGFzcysrOwotICAgICAgICAgICAgZ3MtPmlyb3cgPSAwOwot
ICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgaW5j
b2RlOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoOworCisgICAgLy8gQ29weSBhbGwgdGhl
IGRlY29kZXIgc3RhdGUgdmFyaWFibGVzIGludG8gbG9jYWxzIHNvIHRoZSBjb21waWxlcgorICAg
IC8vIHdvbid0IHdvcnJ5IGFib3V0IHRoZW0gYmVpbmcgYWxpYXNlZC4gVGhlIGxvY2FscyB3aWxs
IGJlIGhvbWVkCisgICAgLy8gYmFjayBpbnRvIHRoZSBHSUYgZGVjb2RlciBzdHJ1Y3R1cmUgd2hl
biB3ZSBleGl0LgorICAgIGludCBhdmFpbCA9IG1fZnJhbWVDb250ZXh0LT5hdmFpbDsKKyAgICBp
bnQgYml0cyA9IG1fZnJhbWVDb250ZXh0LT5iaXRzOworICAgIGludCBjbnQgPSBtX2NvdW50Owor
ICAgIGludCBjb2Rlc2l6ZSA9IG1fZnJhbWVDb250ZXh0LT5jb2Rlc2l6ZTsKKyAgICBpbnQgY29k
ZW1hc2sgPSBtX2ZyYW1lQ29udGV4dC0+Y29kZW1hc2s7CisgICAgaW50IG9sZGNvZGUgPSBtX2Zy
YW1lQ29udGV4dC0+b2xkY29kZTsKKyAgICBpbnQgY2xlYXJDb2RlID0gbV9mcmFtZUNvbnRleHQt
PmNsZWFyQ29kZTsKKyAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hhciA9IG1fZnJhbWVDb250ZXh0
LT5maXJzdGNoYXI7CisgICAgaW50IGRhdHVtID0gbV9mcmFtZUNvbnRleHQtPmRhdHVtOworCisg
ICAgaWYgKCFtX2ZyYW1lQ29udGV4dC0+cHJlZml4KSB7CisgICAgICAgIG1fZnJhbWVDb250ZXh0
LT5wcmVmaXggPSBuZXcgdW5zaWduZWQgc2hvcnRbTUFYX0JJVFNdOworICAgICAgICBtZW1zZXQo
bV9mcmFtZUNvbnRleHQtPnByZWZpeCwgMCwgTUFYX0JJVFMgKiBzaXplb2Yoc2hvcnQpKTsKKyAg
ICB9CiAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9
IHdoaWxlIChncy0+aXJvdyA+IChncy0+aGVpZ2h0IC0gMSkpOwotICB9CisgICAgdW5zaWduZWQg
c2hvcnQgKnByZWZpeCA9IG1fZnJhbWVDb250ZXh0LT5wcmVmaXg7CisgICAgdW5zaWduZWQgY2hh
ciAqc3RhY2twID0gbV9mcmFtZUNvbnRleHQtPnN0YWNrcDsKKyAgICB1bnNpZ25lZCBjaGFyICpz
dWZmaXggPSBtX2ZyYW1lQ29udGV4dC0+c3VmZml4OworICAgIHVuc2lnbmVkIGNoYXIgKnN0YWNr
ID0gbV9mcmFtZUNvbnRleHQtPnN0YWNrOworICAgIHVuc2lnbmVkIGNoYXIgKnJvd3AgPSBtX2Zy
YW1lQ29udGV4dC0+cm93cDsKKyAgICB1bnNpZ25lZCBjaGFyICpyb3dlbmQgPSBtX2ZyYW1lQ29u
dGV4dC0+cm93ZW5kOworICAgIHVuc2lnbmVkIHJvd3NSZW1haW5pbmcgPSBtX2ZyYW1lQ29udGV4
dC0+cm93c1JlbWFpbmluZzsKKworICAgIGlmIChyb3dwID09IHJvd2VuZCkKKyAgICAgICAgcmV0
dXJuIHRydWU7CiAKLSAgcmV0dXJuIHRydWU7CisjZGVmaW5lIE9VVFBVVF9ST1cgXAorICAgIGRv
IHsgXAorICAgICAgICBpZiAoIW91dHB1dFJvdygpKSBcCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7IFwKKyAgICAgICAgcm93c1JlbWFpbmluZy0tOyBcCisgICAgICAgIHJvd3AgPSBtX2ZyYW1l
Q29udGV4dC0+cm93cDsgXAorICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpIFwKKyAgICAgICAg
ICAgIGdvdG8gRU5EOyBcCisgICAgfSB3aGlsZSAoMCkKKworICAgIGZvciAoY2ggPSBxOyBjbnQt
LSA+IDA7IGNoKyspIHsKKyAgICAgICAgLy8gRmVlZCB0aGUgbmV4dCBieXRlIGludG8gdGhlIGRl
Y29kZXIncyAzMi1iaXQgaW5wdXQgYnVmZmVyLgorICAgICAgICBkYXR1bSArPSAoKGludCkgKmNo
KSA8PCBiaXRzOworICAgICAgICBiaXRzICs9IDg7CisKKyAgICAgICAgLy8gQ2hlY2sgZm9yIHVu
ZGVyZmxvdyBvZiBkZWNvZGVyJ3MgMzItYml0IGlucHV0IGJ1ZmZlci4KKyAgICAgICAgd2hpbGUg
KGJpdHMgPj0gY29kZXNpemUpIHsKKyAgICAgICAgICAgIC8vIEdldCB0aGUgbGVhZGluZyB2YXJp
YWJsZS1sZW5ndGggc3ltYm9sIGZyb20gdGhlIGRhdGEgc3RyZWFtLgorICAgICAgICAgICAgY29k
ZSA9IGRhdHVtICYgY29kZW1hc2s7CisgICAgICAgICAgICBkYXR1bSA+Pj0gY29kZXNpemU7Cisg
ICAgICAgICAgICBiaXRzIC09IGNvZGVzaXplOworCisgICAgICAgICAgICAvLyBSZXNldCB0aGUg
ZGljdGlvbmFyeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUsIGlmIHJlcXVlc3RlZC4KKyAgICAgICAg
ICAgIGlmIChjb2RlID09IGNsZWFyQ29kZSkgeworICAgICAgICAgICAgICAgIGNvZGVzaXplID0g
bV9mcmFtZUNvbnRleHQtPmRhdGFzaXplICsgMTsKKyAgICAgICAgICAgICAgICBjb2RlbWFzayA9
ICgxIDw8IGNvZGVzaXplKSAtIDE7CisgICAgICAgICAgICAgICAgYXZhaWwgPSBjbGVhckNvZGUg
KyAyOworICAgICAgICAgICAgICAgIG9sZGNvZGUgPSAtMTsKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGV4cGxpY2l0
IGVuZC1vZi1zdHJlYW0gY29kZS4KKyAgICAgICAgICAgIGlmIChjb2RlID09IChjbGVhckNvZGUg
KyAxKSkgeworICAgICAgICAgICAgICAgIC8vIGVuZC1vZi1zdHJlYW0gc2hvdWxkIG9ubHkgYXBw
ZWFyIGFmdGVyIGFsbCBpbWFnZSBkYXRhLgorICAgICAgICAgICAgICAgIGlmICghcm93c1JlbWFp
bmluZykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChvbGRjb2RlID09IC0xKSB7CisgICAgICAgICAgICAg
ICAgKnJvd3ArKyA9IHN1ZmZpeFtjb2RlXTsKKyAgICAgICAgICAgICAgICBpZiAocm93cCA9PSBy
b3dlbmQpCisgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9ST1c7CisKKyAgICAgICAgICAgICAg
ICBmaXJzdGNoYXIgPSBvbGRjb2RlID0gY29kZTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5jb2RlID0gY29kZTsKKyAgICAgICAgICAg
IGlmIChjb2RlID49IGF2YWlsKSB7CisgICAgICAgICAgICAgICAgKnN0YWNrcCsrID0gZmlyc3Rj
aGFyOworICAgICAgICAgICAgICAgIGNvZGUgPSBvbGRjb2RlOworCisgICAgICAgICAgICAgICAg
aWYgKHN0YWNrcCA9PSBzdGFjayArIE1BWF9CSVRTKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgd2hpbGUgKGNvZGUgPj0gY2xlYXJDb2RlKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNvZGUgPj0gTUFYX0JJVFMgfHwgY29kZSA9PSBwcmVmaXhbY29kZV0pCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6
IGZhbHNlOworCisgICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggc3VmZml4W10gb25seSBo
b2xkcyBjaGFyYWN0ZXJzIHRocm91Z2ggc3VmZml4W2F2YWlsIC0gMV0sCisgICAgICAgICAgICAg
ICAgLy8gYWxsb3dpbmcgY29kZSA+PSBhdmFpbCBoZXJlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFu
dCBvZiBtYWxmb3JtZWQKKyAgICAgICAgICAgICAgICAvLyBkYXRhLiBBcyBsb25nIGFzIGNvZGUg
PCBNQVhfQklUUywgdGhlIG9ubHkgcmlzayBpcyBhIGdhcmJsZWQgaW1hZ2UsCisgICAgICAgICAg
ICAgICAgLy8gd2hpY2ggaXMgbm8gd29yc2UgdGhhbiByZWZ1c2luZyB0byBkaXNwbGF5IGl0Lgor
ICAgICAgICAgICAgICAgICpzdGFja3ArKyA9IHN1ZmZpeFtjb2RlXTsKKyAgICAgICAgICAgICAg
ICBjb2RlID0gcHJlZml4W2NvZGVdOworCisgICAgICAgICAgICAgICAgaWYgKHN0YWNrcCA9PSBz
dGFjayArIE1BWF9CSVRTKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBt
X2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgKnN0YWNrcCsrID0gZmlyc3RjaGFyID0gc3VmZml4W2NvZGVdOworCisgICAgICAgICAgICAv
LyBEZWZpbmUgYSBuZXcgY29kZXdvcmQgaW4gdGhlIGRpY3Rpb25hcnkuCisgICAgICAgICAgICBp
ZiAoYXZhaWwgPCA0MDk2KSB7CisgICAgICAgICAgICAgICAgcHJlZml4W2F2YWlsXSA9IG9sZGNv
ZGU7CisgICAgICAgICAgICAgICAgc3VmZml4W2F2YWlsXSA9IGZpcnN0Y2hhcjsKKyAgICAgICAg
ICAgICAgICBhdmFpbCsrOworCisgICAgICAgICAgICAgICAgLy8gSWYgd2UndmUgdXNlZCB1cCBh
bGwgdGhlIGNvZGV3b3JkcyBvZiBhIGdpdmVuIGxlbmd0aAorICAgICAgICAgICAgICAgIC8vIGlu
Y3JlYXNlIHRoZSBsZW5ndGggb2YgY29kZXdvcmRzIGJ5IG9uZSBiaXQsIGJ1dCBkb24ndAorICAg
ICAgICAgICAgICAgIC8vIGV4Y2VlZCB0aGUgc3BlY2lmaWVkIG1heGltdW0gY29kZXdvcmQgc2l6
ZSBvZiAxMiBiaXRzLgorICAgICAgICAgICAgICAgIGlmICgoIShhdmFpbCAmIGNvZGVtYXNrKSkg
JiYgKGF2YWlsIDwgNDA5NikpIHsKKyAgICAgICAgICAgICAgICAgICAgY29kZXNpemUrKzsKKyAg
ICAgICAgICAgICAgICAgICAgY29kZW1hc2sgKz0gYXZhaWw7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgb2xkY29kZSA9IGluY29kZTsKKworICAgICAgICAg
ICAgLy8gQ29weSB0aGUgZGVjb2RlZCBkYXRhIG91dCB0byB0aGUgc2NhbmxpbmUgYnVmZmVyLgor
ICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICpyb3dwKysgPSAqLS1zdGFja3A7Cisg
ICAgICAgICAgICAgICAgaWYgKHJvd3AgPT0gcm93ZW5kKQorICAgICAgICAgICAgICAgICAgICBP
VVRQVVRfUk9XOworICAgICAgICAgICAgfSB3aGlsZSAoc3RhY2twID4gc3RhY2spOworICAgICAg
ICB9CisgICAgfQorCitFTkQ6CisgICAgLy8gSG9tZSB0aGUgbG9jYWwgY29waWVzIG9mIHRoZSBH
SUYgZGVjb2RlciBzdGF0ZSB2YXJpYWJsZXMuCisgICAgbV9mcmFtZUNvbnRleHQtPmF2YWlsID0g
YXZhaWw7CisgICAgbV9mcmFtZUNvbnRleHQtPmJpdHMgPSBiaXRzOworICAgIG1fZnJhbWVDb250
ZXh0LT5jb2Rlc2l6ZSA9IGNvZGVzaXplOworICAgIG1fZnJhbWVDb250ZXh0LT5jb2RlbWFzayA9
IGNvZGVtYXNrOworICAgIG1fY291bnQgPSBjbnQ7CisgICAgbV9mcmFtZUNvbnRleHQtPm9sZGNv
ZGUgPSBvbGRjb2RlOworICAgIG1fZnJhbWVDb250ZXh0LT5maXJzdGNoYXIgPSBmaXJzdGNoYXI7
CisgICAgbV9mcmFtZUNvbnRleHQtPmRhdHVtID0gZGF0dW07CisgICAgbV9mcmFtZUNvbnRleHQt
PnN0YWNrcCA9IHN0YWNrcDsKKyAgICBtX2ZyYW1lQ29udGV4dC0+cm93cCA9IHJvd3A7CisgICAg
bV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmcgPSByb3dzUmVtYWluaW5nOworICAgIHJldHVy
biB0cnVlOwogfQogCi0vLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotLyogUGVyZm9ybSBMZW1wZWwt
Wml2LVdlbGNoIGRlY29kaW5nICovCi1ib29sIEdJRkltYWdlUmVhZGVyOjpkb19sencoY29uc3Qg
dW5zaWduZWQgY2hhciAqcSkKKworLy8gUHJvY2VzcyBkYXRhIGFycml2aW5nIGZyb20gdGhlIHN0
cmVhbSBmb3IgdGhlIGdpZiBkZWNvZGVyLgorYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25z
dCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGVyOjpHSUZR
dWVyeSBxdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUpCiB7Ci0gIEdJRkZyYW1lUmVhZGVyKiBn
cyA9IGZyYW1lX3JlYWRlcjsKLSAgaWYgKCFncykKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
IWxlbikgeworICAgICAgICAvLyBObyBuZXcgZGF0YSBoYXMgY29tZSBpbiBzaW5jZSB0aGUgbGFz
dCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KIAotICBpbnQgY29kZTsKLSAgaW50IGluY29kZTsKLSAgY29uc3QgdW5zaWduZWQgY2hhciAq
Y2g7Ci0gIAotICAvKiBDb3B5IGFsbCB0aGUgZGVjb2RlciBzdGF0ZSB2YXJpYWJsZXMgaW50byBs
b2NhbHMgc28gdGhlIGNvbXBpbGVyCi0gICAqIHdvbid0IHdvcnJ5IGFib3V0IHRoZW0gYmVpbmcg
YWxpYXNlZC4gIFRoZSBsb2NhbHMgd2lsbCBiZSBob21lZAotICAgKiBiYWNrIGludG8gdGhlIEdJ
RiBkZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4aXQuCi0gICAqLwotICBpbnQgYXZhaWwgICAg
ICAgPSBncy0+YXZhaWw7Ci0gIGludCBiaXRzICAgICAgICA9IGdzLT5iaXRzOwotICBpbnQgY250
ICAgICAgICAgPSBjb3VudDsKLSAgaW50IGNvZGVzaXplICAgID0gZ3MtPmNvZGVzaXplOwotICBp
bnQgY29kZW1hc2sgICAgPSBncy0+Y29kZW1hc2s7Ci0gIGludCBvbGRjb2RlICAgICA9IGdzLT5v
bGRjb2RlOwotICBpbnQgY2xlYXJfY29kZSAgPSBncy0+Y2xlYXJfY29kZTsKLSAgdW5zaWduZWQg
Y2hhciBmaXJzdGNoYXIgPSBncy0+Zmlyc3RjaGFyOwotICBpbnQgZGF0dW0gICAgID0gZ3MtPmRh
dHVtOwotCi0gIGlmICghZ3MtPnByZWZpeCkgewotICAgIGdzLT5wcmVmaXggPSBuZXcgdW5zaWdu
ZWQgc2hvcnRbTUFYX0JJVFNdOwotICAgIG1lbXNldChncy0+cHJlZml4LCAwLCBNQVhfQklUUyAq
IHNpemVvZihzaG9ydCkpOwotICB9Ci0KLSAgdW5zaWduZWQgc2hvcnQgKnByZWZpeCAgPSBncy0+
cHJlZml4OwotICB1bnNpZ25lZCBjaGFyICpzdGFja3AgICA9IGdzLT5zdGFja3A7Ci0gIHVuc2ln
bmVkIGNoYXIgKnN1ZmZpeCAgID0gZ3MtPnN1ZmZpeDsKLSAgdW5zaWduZWQgY2hhciAqc3RhY2sg
ICAgPSBncy0+c3RhY2s7Ci0gIHVuc2lnbmVkIGNoYXIgKnJvd3AgICAgID0gZ3MtPnJvd3A7Ci0g
IHVuc2lnbmVkIGNoYXIgKnJvd2VuZCAgID0gZ3MtPnJvd2VuZDsKLSAgdW5zaWduZWQgcm93c19y
ZW1haW5pbmcgPSBncy0+cm93c19yZW1haW5pbmc7Ci0KLSAgaWYgKHJvd3AgPT0gcm93ZW5kKQot
ICAgIHJldHVybiB0cnVlOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEgPSBidWY7CisKKyAg
ICAvLyBBZGQgd2hhdCB3ZSBoYXZlIHNvIGZhciB0byB0aGUgYmxvY2suCisgICAgLy8gSWYgcHJl
dmlvdXMgY2FsbCB0byBtZSBsZWZ0IHNvbWV0aGluZyBpbiB0aGUgaG9sZCBmaXJzdCBjb21wbGV0
ZSBjdXJyZW50IGJsb2NrCisgICAgLy8gb3IgaWYgd2UgYXJlIGZpbGxpbmcgdGhlIGNvbG9ybWFw
cywgZmlyc3QgY29tcGxldGUgdGhlIGNvbG9ybWFwLgorICAgIHVuc2lnbmVkIGNoYXIqIHAgPSAw
OworICAgIGlmIChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKQorICAgICAgICBwID0gbV9n
bG9iYWxDb2xvcm1hcDsKKyAgICBlbHNlIGlmIChtX3N0YXRlID09IEdJRkltYWdlQ29sb3JtYXAp
CisgICAgICAgIHAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9y
bWFwIDogMDsKKyAgICBlbHNlIGlmIChtX2J5dGVzSW5Ib2xkKQorICAgICAgICBwID0gbV9ob2xk
OworICAgIGVsc2UKKyAgICAgICAgcCA9IDA7CisKKyAgICBpZiAocCB8fCAobV9zdGF0ZSA9PSBH
SUZHbG9iYWxDb2xvcm1hcCkgfHwgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1hcCkpIHsKKyAg
ICAgICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxvY2sKKyAgICAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbGVuIDwgbV9ieXRlc1RvQ29uc3VtZSA/IGxlbiA6IG1fYnl0ZXNUb0Nv
bnN1bWU7CisgICAgICAgIGlmIChwKQorICAgICAgICAgICAgbWVtY3B5KHAgKyBtX2J5dGVzSW5I
b2xkLCBidWYsIGxlbmd0aCk7CisKKyAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnl0ZXNUb0NvbnN1
bWUpIHsKKyAgICAgICAgICAgIC8vIE5vdCBlbm91Z2ggaW4gJ2J1ZicgdG8gY29tcGxldGUgY3Vy
cmVudCBibG9jaywgZ2V0IG1vcmUKKyAgICAgICAgICAgIG1fYnl0ZXNJbkhvbGQgKz0gbGVuZ3Ro
OworICAgICAgICAgICAgbV9ieXRlc1RvQ29uc3VtZSAtPSBsZW5ndGg7CisgICAgICAgICAgICBp
ZiAobV9jbGllbnQpCisgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKDAp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKLSNkZWZpbmUgT1VUUFVU
X1JPVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICBQUl9CRUdJTl9NQUNSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGlmICghb3V0cHV0X3JvdygpKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgcmV0dXJuIGZhbHNl
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHJvd3NfcmVtYWluaW5nLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHJvd3AgPSBmcmFtZV9yZWFkZXItPnJvd3A7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAo
IXJvd3NfcmVtYWluaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIGdvdG8gRU5EOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgUFJfRU5EX01BQ1JPCi0KLSAgZm9yIChjaCA9
IHE7IGNudC0tID4gMDsgY2grKykKLSAgewotICAgIC8qIEZlZWQgdGhlIG5leHQgYnl0ZSBpbnRv
IHRoZSBkZWNvZGVyJ3MgMzItYml0IGlucHV0IGJ1ZmZlci4gKi8KLSAgICBkYXR1bSArPSAoKGlu
dCkgKmNoKSA8PCBiaXRzOwotICAgIGJpdHMgKz0gODsKLQotICAgIC8qIENoZWNrIGZvciB1bmRl
cmZsb3cgb2YgZGVjb2RlcidzIDMyLWJpdCBpbnB1dCBidWZmZXIuICovCi0gICAgd2hpbGUgKGJp
dHMgPj0gY29kZXNpemUpCi0gICAgewotICAgICAgLyogR2V0IHRoZSBsZWFkaW5nIHZhcmlhYmxl
LWxlbmd0aCBzeW1ib2wgZnJvbSB0aGUgZGF0YSBzdHJlYW0gKi8KLSAgICAgIGNvZGUgPSBkYXR1
bSAmIGNvZGVtYXNrOwotICAgICAgZGF0dW0gPj49IGNvZGVzaXplOwotICAgICAgYml0cyAtPSBj
b2Rlc2l6ZTsKLQotICAgICAgLyogUmVzZXQgdGhlIGRpY3Rpb25hcnkgdG8gaXRzIG9yaWdpbmFs
IHN0YXRlLCBpZiByZXF1ZXN0ZWQgKi8KLSAgICAgIGlmIChjb2RlID09IGNsZWFyX2NvZGUpIHsK
LSAgICAgICAgY29kZXNpemUgPSBncy0+ZGF0YXNpemUgKyAxOwotICAgICAgICBjb2RlbWFzayA9
ICgxIDw8IGNvZGVzaXplKSAtIDE7Ci0gICAgICAgIGF2YWlsID0gY2xlYXJfY29kZSArIDI7Ci0g
ICAgICAgIG9sZGNvZGUgPSAtMTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAgICAg
IC8qIENoZWNrIGZvciBleHBsaWNpdCBlbmQtb2Ytc3RyZWFtIGNvZGUgKi8KLSAgICAgIGlmIChj
b2RlID09IChjbGVhcl9jb2RlICsgMSkpIHsKLSAgICAgICAgLyogZW5kLW9mLXN0cmVhbSBzaG91
bGQgb25seSBhcHBlYXIgYWZ0ZXIgYWxsIGltYWdlIGRhdGEgKi8KLSAgICAgICAgaWYgKCFyb3dz
X3JlbWFpbmluZykKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGNsaWVu
dHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAg
aWYgKG9sZGNvZGUgPT0gLTEpIHsKLSAgICAgICAgKnJvd3ArKyA9IHN1ZmZpeFtjb2RlXTsKLSAg
ICAgICAgaWYgKHJvd3AgPT0gcm93ZW5kKQotICAgICAgICAgIE9VVFBVVF9ST1c7Ci0KLSAgICAg
ICAgZmlyc3RjaGFyID0gb2xkY29kZSA9IGNvZGU7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAg
fQotCi0gICAgICBpbmNvZGUgPSBjb2RlOwotICAgICAgaWYgKGNvZGUgPj0gYXZhaWwpIHsKLSAg
ICAgICAgKnN0YWNrcCsrID0gZmlyc3RjaGFyOwotICAgICAgICBjb2RlID0gb2xkY29kZTsKLQot
ICAgICAgICBpZiAoc3RhY2twID09IHN0YWNrICsgTUFYX0JJVFMpCi0gICAgICAgICAgcmV0dXJu
IGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAgICAgIH0KLQot
ICAgICAgd2hpbGUgKGNvZGUgPj0gY2xlYXJfY29kZSkKLSAgICAgIHsKLSAgICAgICAgaWYgKGNv
ZGUgPj0gTUFYX0JJVFMgfHwgY29kZSA9PSBwcmVmaXhbY29kZV0pCi0gICAgICAgICAgcmV0dXJu
IGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLQotICAgICAgICAv
LyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5IGhvbGRzIGNoYXJhY3RlcnMgdGhyb3VnaCBzdWZm
aXhbYXZhaWwgLSAxXSwKLSAgICAgICAgLy8gYWxsb3dpbmcgY29kZSA+PSBhdmFpbCBoZXJlIGxl
dHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBtYWxmb3JtZWQKLSAgICAgICAgLy8gZGF0YS4gQXMg
bG9uZyBhcyBjb2RlIDwgTUFYX0JJVFMsIHRoZSBvbmx5IHJpc2sgaXMgYSBnYXJibGVkIGltYWdl
LAotICAgICAgICAvLyB3aGljaCBpcyBubyB3b3JzZSB0aGFuIHJlZnVzaW5nIHRvIGRpc3BsYXkg
aXQuCi0gICAgICAgICpzdGFja3ArKyA9IHN1ZmZpeFtjb2RlXTsKLSAgICAgICAgY29kZSA9IHBy
ZWZpeFtjb2RlXTsKLQotICAgICAgICBpZiAoc3RhY2twID09IHN0YWNrICsgTUFYX0JJVFMpCi0g
ICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKLSAgICAgIH0KLQotICAgICAgKnN0YWNrcCsrID0gZmlyc3RjaGFyID0gc3VmZml4W2NvZGVd
OwotCi0gICAgICAvKiBEZWZpbmUgYSBuZXcgY29kZXdvcmQgaW4gdGhlIGRpY3Rpb25hcnkuICov
Ci0gICAgICBpZiAoYXZhaWwgPCA0MDk2KSB7Ci0gICAgICAgIHByZWZpeFthdmFpbF0gPSBvbGRj
b2RlOwotICAgICAgICBzdWZmaXhbYXZhaWxdID0gZmlyc3RjaGFyOwotICAgICAgICBhdmFpbCsr
OwotCi0gICAgICAgIC8qIElmIHdlJ3ZlIHVzZWQgdXAgYWxsIHRoZSBjb2Rld29yZHMgb2YgYSBn
aXZlbiBsZW5ndGgKLSAgICAgICAgICogaW5jcmVhc2UgdGhlIGxlbmd0aCBvZiBjb2Rld29yZHMg
Ynkgb25lIGJpdCwgYnV0IGRvbid0Ci0gICAgICAgICAqIGV4Y2VlZCB0aGUgc3BlY2lmaWVkIG1h
eGltdW0gY29kZXdvcmQgc2l6ZSBvZiAxMiBiaXRzLgotICAgICAgICAgKi8KLSAgICAgICAgaWYg
KCgoYXZhaWwgJiBjb2RlbWFzaykgPT0gMCkgJiYgKGF2YWlsIDwgNDA5NikpIHsKLSAgICAgICAg
ICBjb2Rlc2l6ZSsrOwotICAgICAgICAgIGNvZGVtYXNrICs9IGF2YWlsOworICAgICAgICAvLyBS
ZXNldCBob2xkIGJ1ZmZlciBjb3VudAorICAgICAgICBtX2J5dGVzSW5Ib2xkID0gMDsKKworICAg
ICAgICAvLyBQb2ludCAncScgdG8gY29tcGxldGUgYmxvY2sgaW4gaG9sZCAob3IgaW4gY29sb3Jt
YXApCisgICAgICAgIHEgPSBwOworICAgIH0KKworICAgIC8vIEludmFyaWFudDoKKyAgICAvLyAg
ICAncScgaXMgc3RhcnQgb2YgY3VycmVudCB0byBiZSBwcm9jZXNzZWQgYmxvY2sgKGhvbGQsIGNv
bG9ybWFwIG9yIGJ1ZikKKyAgICAvLyAgICAnbV9ieXRlc1RvQ29uc3VtZScgaXMgbnVtYmVyIG9m
IGJ5dGVzIHRvIGNvbnN1bWUgZnJvbSAnYnVmJworICAgIC8vICAgICdidWYnIHBvaW50cyB0byB0
aGUgYnl0ZXMgdG8gYmUgY29uc3VtZWQgZnJvbSB0aGUgaW5wdXQgYnVmZmVyCisgICAgLy8gICAg
J2xlbicgaXMgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gaW5wdXQgYnVmZmVyIGZyb20gcG9zaXRp
b24gJ2J1ZicuCisgICAgLy8gICAgQXQgZW50cmFuY2Ugb2YgdGhlIGZvciBsb29wIHdpbGwgJ2J1
Zicgd2lsbCBiZSBtb3ZlZCAnbV9ieXRlc1RvQ29uc3VtZScKKyAgICAvLyAgICB0byBwb2ludCB0
byBuZXh0IGJ1ZmZlciwgJ2xlbicgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuCisgICAgLy8gICAg
U28gdGhhdCBuZXh0IHJvdW5kIGluIGZvciBsb29wLCBxIGdldHMgcG9pbnRlZCB0byB0aGUgbmV4
dCBidWZmZXIuCisgICAgZm9yICg7bGVuID49IG1fYnl0ZXNUb0NvbnN1bWU7IHEgPSBidWYpIHsK
KyAgICAgICAgLy8gRWF0IHRoZSBjdXJyZW50IGJsb2NrIGZyb20gdGhlIGJ1ZmZlciwgcSBrZWVw
cyBwb2ludGVkIGF0IGN1cnJlbnQgYmxvY2suCisgICAgICAgIGJ1ZiArPSBtX2J5dGVzVG9Db25z
dW1lOworICAgICAgICBsZW4gLT0gbV9ieXRlc1RvQ29uc3VtZTsKKworICAgICAgICBzd2l0Y2gg
KG1fc3RhdGUpIHsKKyAgICAgICAgY2FzZSBHSUZMWlc6CisgICAgICAgICAgICBpZiAoIWRvTFpX
KHEpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWYgZG9MWlcoKSBlbmNvdW50
ZXJlZCBhbiBlcnJvciwgaXQgaGFzIGFscmVhZHkgY2FsbGVkIG1fY2xpZW50LT5zZXRGYWlsZWQo
KS4KKyAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOworICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBHSUZMWldTdGFydDogeworICAgICAgICAgICAgLy8gSW5pdGlhbGl6
ZSBMWlcgcGFyc2VyL2RlY29kZXIuCisgICAgICAgICAgICBpbnQgZGF0YXNpemUgPSAqcTsKKwor
ICAgICAgICAgICAgLy8gU2luY2Ugd2UgdXNlIGEgY29kZXNpemUgb2YgMSBtb3JlIHRoYW4gdGhl
IGRhdGFzaXplLCB3ZSBuZWVkIHRvIGVuc3VyZQorICAgICAgICAgICAgLy8gdGhhdCBvdXIgZGF0
YXNpemUgaXMgc3RyaWN0bHkgbGVzcyB0aGFuIHRoZSBNQVhfTFpXX0JJVFMgdmFsdWUgKDEyKS4K
KyAgICAgICAgICAgIC8vIFRoaXMgc2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBjb2RlbWFzayBj
b3JyZWN0bHkgYXQgNDA5NS4KKyAgICAgICAgICAgIGlmIChkYXRhc2l6ZSA+PSBNQVhfTFpXX0JJ
VFMpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxl
ZCgpIDogZmFsc2U7CisgICAgICAgICAgICBpbnQgY2xlYXJDb2RlID0gMSA8PCBkYXRhc2l6ZTsK
KyAgICAgICAgICAgIGlmIChjbGVhckNvZGUgPj0gTUFYX0JJVFMpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisKKyAgICAg
ICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5kYXRhc2l6ZSA9IGRhdGFzaXplOworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT5jbGVhckNvZGUgPSBjbGVhckNvZGU7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
PmF2YWlsID0gbV9mcmFtZUNvbnRleHQtPmNsZWFyQ29kZSArIDI7CisgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPm9sZGNvZGUgPSAtMTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29u
dGV4dC0+Y29kZXNpemUgPSBtX2ZyYW1lQ29udGV4dC0+ZGF0YXNpemUgKyAxOworICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5jb2RlbWFzayA9ICgxIDw8IG1fZnJhbWVDb250ZXh0LT5j
b2Rlc2l6ZSkgLSAxOworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5kYXR1bSA9IG1f
ZnJhbWVDb250ZXh0LT5iaXRzID0gMDsKKworICAgICAgICAgICAgICAgIC8vIEluaXQgdGhlIHRh
Ymxlcy4KKyAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVDb250ZXh0LT5zdWZmaXgpCisgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5zdWZmaXggPSBuZXcgdW5zaWduZWQgY2hh
cltNQVhfQklUU107CisKKyAgICAgICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgd2hvbGUgc3Vm
Zml4IHRhYmxlIGxldHMgdXMgYmUgbW9yZSB0b2xlcmFudCBvZiBiYWQgZGF0YS4KKyAgICAgICAg
ICAgICAgICBtZW1zZXQobV9mcmFtZUNvbnRleHQtPnN1ZmZpeCwgMCwgTUFYX0JJVFMpOworICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9mcmFtZUNvbnRleHQtPmNsZWFyQ29k
ZTsgaSsrKQorICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+c3VmZml4W2ldID0g
aTsKKworICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZUNvbnRleHQtPnN0YWNrKQorICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+c3RhY2sgPSBuZXcgdW5zaWduZWQgY2hhcltN
QVhfQklUU107CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnN0YWNrcCA9IG1fZnJh
bWVDb250ZXh0LT5zdGFjazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgR0VUTigxLCBH
SUZTdWJCbG9jayk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgfQotICAg
ICAgb2xkY29kZSA9IGluY29kZTsKLQotICAgICAgICAvKiBDb3B5IHRoZSBkZWNvZGVkIGRhdGEg
b3V0IHRvIHRoZSBzY2FubGluZSBidWZmZXIuICovCi0gICAgICBkbyB7Ci0gICAgICAgICpyb3dw
KysgPSAqLS1zdGFja3A7Ci0gICAgICAgIGlmIChyb3dwID09IHJvd2VuZCkgewotICAgICAgICAg
IE9VVFBVVF9ST1c7CisKKyAgICAgICAgY2FzZSBHSUZUeXBlOiB7CisgICAgICAgICAgICAvLyBB
bGwgR0lGIGZpbGVzIGJlZ2luIHdpdGggIkdJRjg3YSIgb3IgIkdJRjg5YSIuCisgICAgICAgICAg
ICBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4OWEiLCA2KSkKKyAgICAgICAgICAgICAgICBt
X3ZlcnNpb24gPSA4OTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdHJuY21wKChjaGFyKilxLCAi
R0lGODdhIiwgNikpCisgICAgICAgICAgICAgICAgbV92ZXJzaW9uID0gODc7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZh
aWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICBHRVROKDcsIEdJRkdsb2JhbEhlYWRlcik7Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgfSB3aGlsZSAoc3RhY2twID4gc3Rh
Y2spOwotICAgIH0KLSAgfQotCi0gIEVORDoKLQotICAvKiBIb21lIHRoZSBsb2NhbCBjb3BpZXMg
b2YgdGhlIEdJRiBkZWNvZGVyIHN0YXRlIHZhcmlhYmxlcyAqLwotICBncy0+YXZhaWwgPSBhdmFp
bDsKLSAgZ3MtPmJpdHMgPSBiaXRzOwotICBncy0+Y29kZXNpemUgPSBjb2Rlc2l6ZTsKLSAgZ3Mt
PmNvZGVtYXNrID0gY29kZW1hc2s7Ci0gIGNvdW50ID0gY250OwotICBncy0+b2xkY29kZSA9IG9s
ZGNvZGU7Ci0gIGdzLT5maXJzdGNoYXIgPSBmaXJzdGNoYXI7Ci0gIGdzLT5kYXR1bSA9IGRhdHVt
OwotICBncy0+c3RhY2twID0gc3RhY2twOwotICBncy0+cm93cCA9IHJvd3A7Ci0gIGdzLT5yb3dz
X3JlbWFpbmluZyA9IHJvd3NfcmVtYWluaW5nOwotCi0gIHJldHVybiB0cnVlOwotfQogCisgICAg
ICAgIGNhc2UgR0lGR2xvYmFsSGVhZGVyOiB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBo
ZWlnaHQgYW5kIHdpZHRoIG9mIHRoZSAic2NyZWVuIiBvciBmcmFtZSBpbnRvIHdoaWNoIGltYWdl
cyBhcmUgcmVuZGVyZWQuIFRoZQorICAgICAgICAgICAgLy8gaW5kaXZpZHVhbCBpbWFnZXMgY2Fu
IGJlIHNtYWxsZXIgdGhhbiB0aGUgc2NyZWVuIHNpemUgYW5kIGxvY2F0ZWQgd2l0aCBhbiBvcmln
aW4gYW55d2hlcmUKKyAgICAgICAgICAgIC8vIHdpdGhpbiB0aGUgc2NyZWVuLgorICAgICAgICAg
ICAgbV9zY3JlZW5XaWR0aCA9IEdFVElOVDE2KHEpOworICAgICAgICAgICAgbV9zY3JlZW5IZWln
aHQgPSBHRVRJTlQxNihxICsgMik7CisKKyAgICAgICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0g
dGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCisgICAgICAgICAgICBpZiAobV9jbGllbnQg
JiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIG1fc2NyZWVuQmdjb2xv
ciA9IHFbNV07CisgICAgICAgICAgICBtX2dsb2JhbENvbG9ybWFwU2l6ZSA9IDIgPDwgKHFbNF0g
JiAweDA3KTsKKworICAgICAgICAgICAgaWYgKChxWzRdICYgMHg4MCkgJiYgbV9nbG9iYWxDb2xv
cm1hcFNpemUgPiAwKSB7IC8qIGdsb2JhbCBtYXAgKi8KKyAgICAgICAgICAgICAgICAvLyBHZXQg
dGhlIGdsb2JhbCBjb2xvcm1hcAorICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUg
PSAzKm1fZ2xvYmFsQ29sb3JtYXBTaXplOworCisgICAgICAgICAgICAgICAgLy8gTWFsbG9jIHRo
ZSBjb2xvciBtYXAsIGJ1dCBvbmx5IGlmIHdlJ3JlIG5vdCBqdXN0IGNvdW50aW5nIGZyYW1lcy4K
KyAgICAgICAgICAgICAgICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNv
dW50UXVlcnkpCisgICAgICAgICAgICAgICAgICAgIG1fZ2xvYmFsQ29sb3JtYXAgPSBuZXcgdW5z
aWduZWQgY2hhcltzaXplXTsKKworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBzaXplKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIFVzZSAnaG9sZCcgcGF0dGVybiB0byBnZXQgdGhlIGdsb2Jh
bCBjb2xvcm1hcAorICAgICAgICAgICAgICAgICAgICBHRVROKHNpemUsIEdJRkdsb2JhbENvbG9y
bWFwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFuZCBnbyBkaXJlY3RseSB0byBHSUZJ
bWFnZV9zdGFydC4KKyAgICAgICAgICAgICAgICBpZiAobV9nbG9iYWxDb2xvcm1hcCkKKyAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KG1fZ2xvYmFsQ29sb3JtYXAsIGJ1Ziwgc2l6ZSk7CisgICAg
ICAgICAgICAgICAgYnVmICs9IHNpemU7CisgICAgICAgICAgICAgICAgbGVuIC09IHNpemU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CisKKyAg
ICAgICAgICAgIC8vIHFbNl0gPSBQaXhlbCBBc3BlY3QgUmF0aW8KKyAgICAgICAgICAgIC8vICAg
Tm90IHVzZWQKKyAgICAgICAgICAgIC8vICAgZmxvYXQgYXNwZWN0ID0gKGZsb2F0KSgocVs2XSAr
IDE1KSAvIDY0LjApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KLS8qCi0gKiBwcm9jZXNzIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgc3Ry
ZWFtIGZvciB0aGUgZ2lmIGRlY29kZXIKLSAqLworICAgICAgICBjYXNlIEdJRkdsb2JhbENvbG9y
bWFwOiB7CisgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIGFscmVhZHkgY29waWVkIGludG8g
bV9nbG9iYWxDb2xvcm1hcAorICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKLWJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQo
Y29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIAotICAgICAgICAgICAgICAg
ICAgICAgR0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJh
bWUpCi17Ci0gIGlmICghbGVuKSB7Ci0gICAgLy8gTm8gbmV3IGRhdGEgaGFzIGNvbWUgaW4gc2lu
Y2UgdGhlIGxhc3QgY2FsbCwganVzdCBpZ25vcmUgdGhpcyBjYWxsLgotICAgIHJldHVybiB0cnVl
OwotICB9Ci0KLSAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9IGJ1ZjsKLQotICAvLyBBZGQgd2hh
dCB3ZSBoYXZlIHNvIGZhciB0byB0aGUgYmxvY2sKLSAgLy8gSWYgcHJldmlvdXMgY2FsbCB0byBt
ZSBsZWZ0IHNvbWV0aGluZyBpbiB0aGUgaG9sZCBmaXJzdCBjb21wbGV0ZSBjdXJyZW50IGJsb2Nr
Ci0gIC8vIE9yIGlmIHdlIGFyZSBmaWxsaW5nIHRoZSBjb2xvcm1hcHMsIGZpcnN0IGNvbXBsZXRl
IHRoZSBjb2xvcm1hcAotICB1bnNpZ25lZCBjaGFyKiBwID0gMDsKLSAgaWYgKHN0YXRlID09IGdp
Zl9nbG9iYWxfY29sb3JtYXApCi0gICAgcCA9IGdsb2JhbF9jb2xvcm1hcDsKLSAgZWxzZSBpZiAo
c3RhdGUgPT0gZ2lmX2ltYWdlX2NvbG9ybWFwKQotICAgIHAgPSBmcmFtZV9yZWFkZXIgPyBmcmFt
ZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwIDogMDsKLSAgZWxzZSBpZiAoYnl0ZXNfaW5faG9sZCkK
LSAgICBwID0gaG9sZDsKLSAgZWxzZQotICAgIHAgPSAwOwotCi0gIGlmIChwIHx8IChzdGF0ZSA9
PSBnaWZfZ2xvYmFsX2NvbG9ybWFwKSB8fCAoc3RhdGUgPT0gZ2lmX2ltYWdlX2NvbG9ybWFwKSkg
ewotICAgIC8vIEFkZCB3aGF0IHdlIGhhdmUgc29mYXIgdG8gdGhlIGJsb2NrCi0gICAgdW5zaWdu
ZWQgbCA9IGxlbiA8IGJ5dGVzX3RvX2NvbnN1bWUgPyBsZW4gOiBieXRlc190b19jb25zdW1lOwot
ICAgIGlmIChwKQotICAgICAgICBtZW1jcHkocCArIGJ5dGVzX2luX2hvbGQsIGJ1ZiwgbCk7Ci0K
LSAgICBpZiAobCA8IGJ5dGVzX3RvX2NvbnN1bWUpIHsKLSAgICAgIC8vIE5vdCBlbm91Z2ggaW4g
J2J1ZicgdG8gY29tcGxldGUgY3VycmVudCBibG9jaywgZ2V0IG1vcmUKLSAgICAgIGJ5dGVzX2lu
X2hvbGQgKz0gbDsKLSAgICAgIGJ5dGVzX3RvX2NvbnN1bWUgLT0gbDsKLSAgICAgIGlmIChjbGll
bnRwdHIpCi0gICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQoMCk7Ci0gICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIC8vIFJlc2V0IGhvbGQgYnVmZmVyIGNvdW50Ci0gICAgYnl0
ZXNfaW5faG9sZCA9IDA7Ci0gICAgLy8gUG9pbnQgJ3EnIHRvIGNvbXBsZXRlIGJsb2NrIGluIGhv
bGQgKG9yIGluIGNvbG9ybWFwKQotICAgIHEgPSBwOwotICB9Ci0KLSAgLy8gSW52YXJpYW50Ogot
ICAvLyAgICAncScgaXMgc3RhcnQgb2YgY3VycmVudCB0byBiZSBwcm9jZXNzZWQgYmxvY2sgKGhv
bGQsIGNvbG9ybWFwIG9yIGJ1ZikKLSAgLy8gICAgJ2J5dGVzX3RvX2NvbnN1bWUnIGlzIG51bWJl
ciBvZiBieXRlcyB0byBjb25zdW1lIGZyb20gJ2J1ZicKLSAgLy8gICAgJ2J1ZicgcG9pbnRzIHRv
IHRoZSBieXRlcyB0byBiZSBjb25zdW1lZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIKLSAgLy8gICAg
J2xlbicgaXMgbnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gaW5wdXQgYnVmZmVyIGZyb20gcG9zaXRp
b24gJ2J1ZicuCi0gIC8vICAgIEF0IGVudHJhbmNlIG9mIHRoZSBmb3IgbG9vcCB3aWxsICdidWYn
IHdpbGwgYmUgbW92ZWQgJ2J5dGVzX3RvX2NvbnN1bWUnCi0gIC8vICAgIHRvIHBvaW50IHRvIG5l
eHQgYnVmZmVyLCAnbGVuJyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KLSAgLy8gICAgU28gdGhh
dCBuZXh0IHJvdW5kIGluIGZvciBsb29wLCBxIGdldHMgcG9pbnRlZCB0byB0aGUgbmV4dCBidWZm
ZXIuCi0KLSAgZm9yICg7bGVuID49IGJ5dGVzX3RvX2NvbnN1bWU7IHE9YnVmKSB7Ci0gICAgLy8g
RWF0IHRoZSBjdXJyZW50IGJsb2NrIGZyb20gdGhlIGJ1ZmZlciwgcSBrZWVwcyBwb2ludGVkIGF0
IGN1cnJlbnQgYmxvY2sKLSAgICBidWYgKz0gYnl0ZXNfdG9fY29uc3VtZTsKLSAgICBsZW4gLT0g
Ynl0ZXNfdG9fY29uc3VtZTsKLQotICAgIHN3aXRjaCAoc3RhdGUpCi0gICAgewotICAgIGNhc2Ug
Z2lmX2x6dzoKLSAgICAgIGlmICghZG9fbHp3KHEpKQotICAgICAgICByZXR1cm4gZmFsc2U7IC8v
IElmIGRvX2x6dygpIGVuY291bnRlcmVkIGFuIGVycm9yLCBpdCBoYXMgYWxyZWFkeSBjYWxsZWQK
LSAgICAgICAgICAgICAgICAgICAgICAvLyBjbGllbnRwdHItPnNldEZhaWxlZCgpLgotICAgICAg
R0VUTigxLCBnaWZfc3ViX2Jsb2NrKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfbHp3
X3N0YXJ0OgotICAgIHsKLSAgICAgIC8qIEluaXRpYWxpemUgTFpXIHBhcnNlci9kZWNvZGVyICov
Ci0gICAgICBpbnQgZGF0YXNpemUgPSAqcTsKLSAgICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVz
aXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVlZCB0byBlbnN1cmUKLSAgICAg
IC8vIHRoYXQgb3VyIGRhdGFzaXplIGlzIHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgTUFYX0xaV19C
SVRTIHZhbHVlICgxMikuCi0gICAgICAvLyBUaGlzIHNldHMgdGhlIGxhcmdlc3QgcG9zc2libGUg
Y29kZW1hc2sgY29ycmVjdGx5IGF0IDQwOTUuCi0gICAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xa
V19CSVRTKQotICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQo
KSA6IGZhbHNlOwotICAgICAgaW50IGNsZWFyX2NvZGUgPSAxIDw8IGRhdGFzaXplOwotICAgICAg
aWYgKGNsZWFyX2NvZGUgPj0gTUFYX0JJVFMpCi0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBj
bGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0KLSAgICAgIGlmIChmcmFtZV9yZWFkZXIp
IHsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5kYXRhc2l6ZSA9IGRhdGFzaXplOwotICAgICAgICBm
cmFtZV9yZWFkZXItPmNsZWFyX2NvZGUgPSBjbGVhcl9jb2RlOwotICAgICAgICBmcmFtZV9yZWFk
ZXItPmF2YWlsID0gZnJhbWVfcmVhZGVyLT5jbGVhcl9jb2RlICsgMjsKLSAgICAgICAgZnJhbWVf
cmVhZGVyLT5vbGRjb2RlID0gLTE7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+Y29kZXNpemUgPSBm
cmFtZV9yZWFkZXItPmRhdGFzaXplICsgMTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5jb2RlbWFz
ayA9ICgxIDw8IGZyYW1lX3JlYWRlci0+Y29kZXNpemUpIC0gMTsKLQotICAgICAgICBmcmFtZV9y
ZWFkZXItPmRhdHVtID0gZnJhbWVfcmVhZGVyLT5iaXRzID0gMDsKLQotICAgICAgICAvKiBpbml0
IHRoZSB0YWJsZXMgKi8KLSAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXItPnN1ZmZpeCkKLSAgICAg
ICAgICBmcmFtZV9yZWFkZXItPnN1ZmZpeCA9IG5ldyB1bnNpZ25lZCBjaGFyW01BWF9CSVRTXTsK
LSAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIHdob2xlIHN1ZmZpeCB0YWJsZSBsZXRzIHVzIGJlIG1v
cmUgdG9sZXJhbnQgb2YgYmFkIGRhdGEuCi0gICAgICAgIG1lbXNldChmcmFtZV9yZWFkZXItPnN1
ZmZpeCwgMCwgTUFYX0JJVFMpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZyYW1lX3Jl
YWRlci0+Y2xlYXJfY29kZTsgaSsrKQotICAgICAgICAgIGZyYW1lX3JlYWRlci0+c3VmZml4W2ld
ID0gaTsKLQotICAgICAgICBpZiAoIWZyYW1lX3JlYWRlci0+c3RhY2spCi0gICAgICAgICAgZnJh
bWVfcmVhZGVyLT5zdGFjayA9IG5ldyB1bnNpZ25lZCBjaGFyW01BWF9CSVRTXTsKLSAgICAgICAg
ZnJhbWVfcmVhZGVyLT5zdGFja3AgPSBmcmFtZV9yZWFkZXItPnN0YWNrOwotICAgICAgfQotCi0g
ICAgICBHRVROKDEsIGdpZl9zdWJfYmxvY2spOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIC8q
IEFsbCBHSUYgZmlsZXMgYmVnaW4gd2l0aCAiR0lGODdhIiBvciAiR0lGODlhIiAqLwotICAgIGNh
c2UgZ2lmX3R5cGU6Ci0gICAgewotICAgICAgaWYgKCFzdHJuY21wKChjaGFyKilxLCAiR0lGODlh
IiwgNikpCi0gICAgICAgIHZlcnNpb24gPSA4OTsKLSAgICAgIGVsc2UgaWYgKCFzdHJuY21wKChj
aGFyKilxLCAiR0lGODdhIiwgNikpCi0gICAgICAgIHZlcnNpb24gPSA4NzsKLSAgICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKLSAgICAgIEdFVE4oNywgZ2lmX2dsb2JhbF9oZWFkZXIpOwotICAgIH0KLSAgICBicmVhazsK
LQotICAgIGNhc2UgZ2lmX2dsb2JhbF9oZWFkZXI6Ci0gICAgewotICAgICAgLyogVGhpcyBpcyB0
aGUgaGVpZ2h0IGFuZCB3aWR0aCBvZiB0aGUgInNjcmVlbiIgb3IKLSAgICAgICAqIGZyYW1lIGlu
dG8gd2hpY2ggaW1hZ2VzIGFyZSByZW5kZXJlZC4gIFRoZQotICAgICAgICogaW5kaXZpZHVhbCBp
bWFnZXMgY2FuIGJlIHNtYWxsZXIgdGhhbiB0aGUKLSAgICAgICAqIHNjcmVlbiBzaXplIGFuZCBs
b2NhdGVkIHdpdGggYW4gb3JpZ2luIGFueXdoZXJlCi0gICAgICAgKiB3aXRoaW4gdGhlIHNjcmVl
bi4KLSAgICAgICAqLwotCi0gICAgICBzY3JlZW5fd2lkdGggPSBHRVRJTlQxNihxKTsKLSAgICAg
IHNjcmVlbl9oZWlnaHQgPSBHRVRJTlQxNihxICsgMik7Ci0KLSAgICAgIC8vIENBTExCQUNLOiBJ
bmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCi0gICAgICBpZiAoY2xpZW50cHRy
ICYmICFjbGllbnRwdHItPnNldFNpemUoc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgCi0gICAgICBzY3JlZW5fYmdjb2xvciA9IHFbNV07
Ci0gICAgICBnbG9iYWxfY29sb3JtYXBfc2l6ZSA9IDI8PChxWzRdJjB4MDcpOwotCi0gICAgICBp
ZiAoKHFbNF0gJiAweDgwKSAmJiBnbG9iYWxfY29sb3JtYXBfc2l6ZSA+IDApIHsgLyogZ2xvYmFs
IG1hcCAqLwotICAgICAgICAvLyBHZXQgdGhlIGdsb2JhbCBjb2xvcm1hcAotICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaXplID0gMypnbG9iYWxfY29sb3JtYXBfc2l6ZTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIE1hbGxvYyB0aGUgY29sb3IgbWFwLCBidXQgb25seSBpZiB3ZSdyZSBub3QganVzdCBj
b3VudGluZyBmcmFtZXMuCi0gICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJ
RkZyYW1lQ291bnRRdWVyeSkKLSAgICAgICAgICBnbG9iYWxfY29sb3JtYXAgPSBuZXcgdW5zaWdu
ZWQgY2hhcltzaXplXTsKLQotICAgICAgICBpZiAobGVuIDwgc2l6ZSkgewotICAgICAgICAgIC8v
IFVzZSAnaG9sZCcgcGF0dGVybiB0byBnZXQgdGhlIGdsb2JhbCBjb2xvcm1hcAotICAgICAgICAg
IEdFVE4oc2l6ZSwgZ2lmX2dsb2JhbF9jb2xvcm1hcCk7Ci0gICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR0lGSW1hZ2VTdGFydDogeworICAgICAgICAgICAgaWYgKCpxID09ICc7JykgeyAv
LyB0ZXJtaW5hdG9yLgorICAgICAgICAgICAgICAgIEdFVE4oMCwgR0lGRG9uZSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgqcSA9PSAn
IScpIHsgLy8gZXh0ZW5zaW9uLgorICAgICAgICAgICAgICAgIEdFVE4oMiwgR0lGRXh0ZW5zaW9u
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gSWYgd2UgZ2V0IGFueXRoaW5nIG90aGVyIHRoYW4gJywnIChpbWFnZSBzZXBhcmF0b3IpLCAn
IScKKyAgICAgICAgICAgIC8vIChleHRlbnNpb24pLCBvciAnOycgKHRyYWlsZXIpLCB0aGVyZSBp
cyBleHRyYW5lb3VzIGRhdGEKKyAgICAgICAgICAgIC8vIGJldHdlZW4gYmxvY2tzLiBUaGUgR0lG
ODdhIHNwZWMgdGVsbHMgdXMgdG8ga2VlcCByZWFkaW5nCisgICAgICAgICAgICAvLyB1bnRpbCB3
ZSBmaW5kIGFuIGltYWdlIHNlcGFyYXRvciwgYnV0IEdJRjg5YSBzYXlzIHN1Y2gKKyAgICAgICAg
ICAgIC8vIGEgZmlsZSBpcyBjb3JydXB0LiBXZSBmb2xsb3cgR0lGODlhIGFuZCBiYWlsIG91dC4K
KyAgICAgICAgICAgIGlmICgqcSAhPSAnLCcpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xp
ZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisKKyAgICAgICAgICAgIEdFVE4o
OSwgR0lGSW1hZ2VIZWFkZXIpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIC8vIENvcHkgZXZlcnl0aGluZyBhbmQgZ28gZGlyZWN0bHkgdG8gZ2lmX2lt
YWdlX3N0YXJ0LgotICAgICAgICBpZiAoZ2xvYmFsX2NvbG9ybWFwKQotICAgICAgICAgICAgbWVt
Y3B5KGdsb2JhbF9jb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgYnVmICs9IHNpemU7Ci0g
ICAgICAgIGxlbiAtPSBzaXplOwotICAgICAgfQotCi0gICAgICBHRVROKDEsIGdpZl9pbWFnZV9z
dGFydCk7Ci0KLSAgICAgIC8vIHFbNl0gPSBQaXhlbCBBc3BlY3QgUmF0aW8KLSAgICAgIC8vICAg
Tm90IHVzZWQKLSAgICAgIC8vICAgZmxvYXQgYXNwZWN0ID0gKGZsb2F0KSgocVs2XSArIDE1KSAv
IDY0LjApOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2dsb2JhbF9jb2xvcm1h
cDoKLSAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50byBnbG9iYWxfY29s
b3JtYXAKLSAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLSAgICBicmVhazsKLQotICAg
IGNhc2UgZ2lmX2ltYWdlX3N0YXJ0OgotICAgIHsKLSAgICAgIGlmICgqcSA9PSAnOycpIHsgLyog
dGVybWluYXRvciAqLwotICAgICAgICBHRVROKDAsIGdpZl9kb25lKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgICB9Ci0KLSAgICAgIGlmICgqcSA9PSAnIScpIHsgLyogZXh0ZW5zaW9uICovCi0gICAg
ICAgIEdFVE4oMiwgZ2lmX2V4dGVuc2lvbik7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0g
ICAgICAvKiBJZiB3ZSBnZXQgYW55dGhpbmcgb3RoZXIgdGhhbiAnLCcgKGltYWdlIHNlcGFyYXRv
ciksICchJwotICAgICAgICogKGV4dGVuc2lvbiksIG9yICc7JyAodHJhaWxlciksIHRoZXJlIGlz
IGV4dHJhbmVvdXMgZGF0YQotICAgICAgICogYmV0d2VlbiBibG9ja3MuIFRoZSBHSUY4N2Egc3Bl
YyB0ZWxscyB1cyB0byBrZWVwIHJlYWRpbmcKLSAgICAgICAqIHVudGlsIHdlIGZpbmQgYW4gaW1h
Z2Ugc2VwYXJhdG9yLCBidXQgR0lGODlhIHNheXMgc3VjaAotICAgICAgICogYSBmaWxlIGlzIGNv
cnJ1cHQuIFdlIGZvbGxvdyBHSUY4OWEgYW5kIGJhaWwgb3V0LiAqLwotICAgICAgaWYgKCpxICE9
ICcsJykKLSAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKLQotICAgICAgR0VUTig5LCBnaWZfaW1hZ2VfaGVhZGVyKTsKLSAgICB9Ci0gICAg
YnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9leHRlbnNpb246Ci0gICAgewotICAgICAgY291bnQgPSBx
WzFdOwotICAgICAgZ3N0YXRlIGVzID0gZ2lmX3NraXBfYmxvY2s7Ci0KLSAgICAgIC8vIFRoZSBH
SUYgc3BlYyBtYW5kYXRlcyBsZW5ndGhzIGZvciB0aHJlZSBvZiB0aGUgZXh0ZW5zaW9ucyBiZWxv
dy4KLSAgICAgIC8vIEhvd2V2ZXIsIGl0J3MgcG9zc2libGUgZm9yIEdJRnMgaW4gdGhlIHdpbGQg
dG8gZGV2aWF0ZS4gRm9yIGV4YW1wbGUsCi0gICAgICAvLyBzb21lIEdJRnMgdGhhdCBlbWJlZCBJ
Q0MgY29sb3IgcHJvZmlsZXMgdXNpbmcgZ2lmX2FwcGxpY2F0aW9uX2V4dGVuc2lvbgotICAgICAg
Ly8gdmlvbGF0ZSB0aGUgc3BlYyBhbmQgdHJlYXQgdGhpcyBleHRlbnNpb24gYmxvY2sgbGlrZSBh
IHNvcnQgb2YKLSAgICAgIC8vICJleHRlbnNpb24gKyBkYXRhIiBibG9jaywgZ2l2aW5nIGEgc2l6
ZSBncmVhdGVyIHRoYW4gMTEgYW5kIGZpbGxpbmcgdGhlCi0gICAgICAvLyByZW1haW5pbmcgYnl0
ZXMgd2l0aCBkYXRhICh0aGVuIGZvbGxvd2luZyB3aXRoIG1vcmUgZGF0YSBibG9ja3MgYXMKLSAg
ICAgIC8vIG5lZWRlZCksIGluc3RlYWQgb2YgcGxhY2luZyBhIHRydWUgZGF0YSBibG9jayBqdXN0
IGFmdGVyIHRoZSAxMSBieXRlCi0gICAgICAvLyBleHRlbnNpb24gYmxvY2suCi0gICAgICAvLwot
ICAgICAgLy8gQWNjb3JkaW5nbHksIGlmIHRoZSBzcGVjaWZpZWQgbGVuZ3RoIGlzIGxhcmdlciB0
aGFuIHRoZSByZXF1aXJlZCB2YWx1ZSwKLSAgICAgIC8vIHdlIHVzZSBpdC4gSWYgaXQncyBzbWFs
bGVyLCB0aGVuIHdlIGVuZm9yY2UgdGhlIHNwZWMgdmFsdWUsIGJlY2F1c2UgdGhlCi0gICAgICAv
LyBwYXJzZXJzIGZvciB0aGVzZSBleHRlbnNpb25zIGV4cGVjdCB0byBoYXZlIHRoZSBzcGVjaWZp
ZWQgbnVtYmVyIG9mCi0gICAgICAvLyBieXRlcyBhdmFpbGFibGUsIGFuZCBpZiB3ZSBkb24ndCBl
bnN1cmUgdGhhdCwgdGhleSBjb3VsZCByZWFkIG9mZiB0aGUKLSAgICAgIC8vIGVuZCBvZiB0aGUg
aGVhcCBidWZmZXIuIChJbiB0aGlzIGNhc2UsIGl0J3MgbGlrZWx5IHRoZSBHSUYgaXMgY29ycnVw
dAotICAgICAgLy8gYW5kIHdlJ2xsIHNvb24gZmFpbCB0byBkZWNvZGUgYW55d2F5LikKLSAgICAg
IHN3aXRjaCAoKnEpCi0gICAgICB7Ci0gICAgICBjYXNlIDB4Zjk6Ci0gICAgICAgIGVzID0gZ2lm
X2NvbnRyb2xfZXh0ZW5zaW9uOwotICAgICAgICBjb3VudCA9IHN0ZDo6bWF4KGNvdW50LCA0KTsK
LSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMHgwMToKLSAgICAgICAgLy8gaWdub3Jpbmcg
cGxhaW4gdGV4dCBleHRlbnNpb24KLSAgICAgICAgY291bnQgPSBzdGQ6Om1heChjb3VudCwgMTIp
OwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSAweGZmOgotICAgICAgICBlcyA9IGdpZl9h
cHBsaWNhdGlvbl9leHRlbnNpb247Ci0gICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDEx
KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMHhmZToKLSAgICAgICAgZXMgPSBnaWZf
Y29uc3VtZV9jb21tZW50OwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgaWYgKGNv
dW50KQotICAgICAgICBHRVROKGNvdW50LCBlcyk7Ci0gICAgICBlbHNlCi0gICAgICAgIEdFVE4o
MSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9j
b25zdW1lX2Jsb2NrOgotICAgICAgaWYgKCEqcSkKLSAgICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vf
c3RhcnQpOwotICAgICAgZWxzZQotICAgICAgICBHRVROKCpxLCBnaWZfc2tpcF9ibG9jayk7Ci0g
ICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9za2lwX2Jsb2NrOgotICAgICAgR0VUTigxLCBnaWZf
Y29uc3VtZV9ibG9jayk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2NvbnRyb2xfZXh0
ZW5zaW9uOgotICAgIHsKLSAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJRkZy
YW1lQ291bnRRdWVyeSkgewotICAgICAgICAgIGlmICghZnJhbWVfcmVhZGVyKQotICAgICAgICAg
ICAgZnJhbWVfcmVhZGVyID0gbmV3IEdJRkZyYW1lUmVhZGVyKCk7Ci0gICAgICB9Ci0KLSAgICAg
IGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgaWYgKCpxICYgMHgxKSB7Ci0gICAgICAgICAg
ZnJhbWVfcmVhZGVyLT50cGl4ZWwgPSBxWzNdOwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aXNf
dHJhbnNwYXJlbnQgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZyYW1lX3Jl
YWRlci0+aXNfdHJhbnNwYXJlbnQgPSBmYWxzZTsKLSAgICAgICAgICAvLyBpZ25vcmluZyBnZngg
Y29udHJvbCBleHRlbnNpb24KKworICAgICAgICBjYXNlIEdJRkV4dGVuc2lvbjogeworICAgICAg
ICAgICAgbV9jb3VudCA9IHFbMV07CisgICAgICAgICAgICBHSUZTdGF0ZSBlcyA9IEdJRlNraXBC
bG9jazsKKworICAgICAgICAgICAgLy8gVGhlIEdJRiBzcGVjIG1hbmRhdGVzIGxlbmd0aHMgZm9y
IHRocmVlIG9mIHRoZSBleHRlbnNpb25zIGJlbG93LgorICAgICAgICAgICAgLy8gSG93ZXZlciwg
aXQncyBwb3NzaWJsZSBmb3IgR0lGcyBpbiB0aGUgd2lsZCB0byBkZXZpYXRlLiBGb3IgZXhhbXBs
ZSwKKyAgICAgICAgICAgIC8vIHNvbWUgR0lGcyB0aGF0IGVtYmVkIElDQyBjb2xvciBwcm9maWxl
cyB1c2luZyBHSUZBcHBsaWNhdGlvbkV4dGVuc2lvbgorICAgICAgICAgICAgLy8gdmlvbGF0ZSB0
aGUgc3BlYyBhbmQgdHJlYXQgdGhpcyBleHRlbnNpb24gYmxvY2sgbGlrZSBhIHNvcnQgb2YKKyAg
ICAgICAgICAgIC8vICJleHRlbnNpb24gKyBkYXRhIiBibG9jaywgZ2l2aW5nIGEgc2l6ZSBncmVh
dGVyIHRoYW4gMTEgYW5kIGZpbGxpbmcgdGhlCisgICAgICAgICAgICAvLyByZW1haW5pbmcgYnl0
ZXMgd2l0aCBkYXRhICh0aGVuIGZvbGxvd2luZyB3aXRoIG1vcmUgZGF0YSBibG9ja3MgYXMKKyAg
ICAgICAgICAgIC8vIG5lZWRlZCksIGluc3RlYWQgb2YgcGxhY2luZyBhIHRydWUgZGF0YSBibG9j
ayBqdXN0IGFmdGVyIHRoZSAxMSBieXRlCisgICAgICAgICAgICAvLyBleHRlbnNpb24gYmxvY2su
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gQWNjb3JkaW5nbHksIGlmIHRoZSBzcGVj
aWZpZWQgbGVuZ3RoIGlzIGxhcmdlciB0aGFuIHRoZSByZXF1aXJlZCB2YWx1ZSwKKyAgICAgICAg
ICAgIC8vIHdlIHVzZSBpdC4gSWYgaXQncyBzbWFsbGVyLCB0aGVuIHdlIGVuZm9yY2UgdGhlIHNw
ZWMgdmFsdWUsIGJlY2F1c2UgdGhlCisgICAgICAgICAgICAvLyBwYXJzZXJzIGZvciB0aGVzZSBl
eHRlbnNpb25zIGV4cGVjdCB0byBoYXZlIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mCisgICAgICAg
ICAgICAvLyBieXRlcyBhdmFpbGFibGUsIGFuZCBpZiB3ZSBkb24ndCBlbnN1cmUgdGhhdCwgdGhl
eSBjb3VsZCByZWFkIG9mZiB0aGUKKyAgICAgICAgICAgIC8vIGVuZCBvZiB0aGUgaGVhcCBidWZm
ZXIuIChJbiB0aGlzIGNhc2UsIGl0J3MgbGlrZWx5IHRoZSBHSUYgaXMgY29ycnVwdAorICAgICAg
ICAgICAgLy8gYW5kIHdlJ2xsIHNvb24gZmFpbCB0byBkZWNvZGUgYW55d2F5LikKKyAgICAgICAg
ICAgIHN3aXRjaCAoKnEpIHsKKyAgICAgICAgICAgIGNhc2UgMHhmOToKKyAgICAgICAgICAgICAg
ICBlcyA9IEdJRkNvbnRyb2xFeHRlbnNpb247CisgICAgICAgICAgICAgICAgbV9jb3VudCA9IHN0
ZDo6bWF4KG1fY291bnQsIDQpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICBjYXNlIDB4MDE6CisgICAgICAgICAgICAgICAgLy8gaWdub3JpbmcgcGxhaW4gdGV4dCBleHRl
bnNpb24KKyAgICAgICAgICAgICAgICBtX2NvdW50ID0gc3RkOjptYXgobV9jb3VudCwgMTIpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDB4ZmY6CisgICAgICAg
ICAgICAgICAgZXMgPSBHSUZBcHBsaWNhdGlvbkV4dGVuc2lvbjsKKyAgICAgICAgICAgICAgICBt
X2NvdW50ID0gc3RkOjptYXgobV9jb3VudCwgMTEpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgICAgICBjYXNlIDB4ZmU6CisgICAgICAgICAgICAgICAgZXMgPSBHSUZDb25zdW1l
Q29tbWVudDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG1fY291bnQpCisgICAgICAgICAgICAgICAgR0VUTihtX2NvdW50LCBlcyk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIC8vIE5PVEU6IFRoaXMgcmVs
aWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRob2QgZW51bQotICAgICAg
ICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCi0gICAgICAgIGludCBkaXNwb3Nh
bF9tZXRob2QgPSAoKCpxKSA+PiAyKSAmIDB4NzsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5kaXNw
b3NhbF9tZXRob2QgPSAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClk
aXNwb3NhbF9tZXRob2Q7Ci0gICAgICAgIC8vIFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQgKHZhbHVl
IDQpLCBvdGhlciBzcGVjcyBzYXkgdmFsdWUgMwotICAgICAgICAvLyBMZXQncyBjaG9vc2UgMyAo
dGhlIG1vcmUgcG9wdWxhcikKLSAgICAgICAgaWYgKGRpc3Bvc2FsX21ldGhvZCA9PSA0KQotICAg
ICAgICAgIGZyYW1lX3JlYWRlci0+ZGlzcG9zYWxfbWV0aG9kID0gV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzOwotICAgICAgICBmcmFtZV9yZWFkZXItPmRlbGF5
X3RpbWUgPSBHRVRJTlQxNihxICsgMSkgKiAxMDsKLSAgICAgIH0KLSAgICAgIEdFVE4oMSwgZ2lm
X2NvbnN1bWVfYmxvY2spOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2NvbW1l
bnRfZXh0ZW5zaW9uOgotICAgIHsKLSAgICAgIGlmICgqcSkKLSAgICAgICAgR0VUTigqcSwgZ2lm
X2NvbnN1bWVfY29tbWVudCk7Ci0gICAgICBlbHNlCi0gICAgICAgIEdFVE4oMSwgZ2lmX2ltYWdl
X3N0YXJ0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9jb25zdW1lX2NvbW1l
bnQ6Ci0gICAgICBHRVROKDEsIGdpZl9jb21tZW50X2V4dGVuc2lvbik7Ci0gICAgYnJlYWs7Ci0K
LSAgICBjYXNlIGdpZl9hcHBsaWNhdGlvbl9leHRlbnNpb246Ci0gICAgICAvKiBDaGVjayBmb3Ig
bmV0c2NhcGUgYXBwbGljYXRpb24gZXh0ZW5zaW9uICovCi0gICAgICBpZiAoIXN0cm5jbXAoKGNo
YXIqKXEsICJORVRTQ0FQRTIuMCIsIDExKSB8fAotICAgICAgICAhc3RybmNtcCgoY2hhciopcSwg
IkFOSU1FWFRTMS4wIiwgMTEpKQotICAgICAgICBHRVROKDEsIGdpZl9uZXRzY2FwZV9leHRlbnNp
b25fYmxvY2spOwotICAgICAgZWxzZQotICAgICAgICBHRVROKDEsIGdpZl9jb25zdW1lX2Jsb2Nr
KTsKLSAgICBicmVhazsKLQotICAgIC8qIE5ldHNjYXBlLXNwZWNpZmljIEdJRiBleHRlbnNpb246
IGFuaW1hdGlvbiBsb29waW5nICovCi0gICAgY2FzZSBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Js
b2NrOgotICAgICAgaWYgKCpxKQotICAgICAgICBHRVROKCpxLCBnaWZfY29uc3VtZV9uZXRzY2Fw
ZV9leHRlbnNpb24pOwotICAgICAgZWxzZQotICAgICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFy
dCk7Ci0gICAgYnJlYWs7Ci0KLSAgICAvKiBQYXJzZSBuZXRzY2FwZS1zcGVjaWZpYyBhcHBsaWNh
dGlvbiBleHRlbnNpb25zICovCi0gICAgY2FzZSBnaWZfY29uc3VtZV9uZXRzY2FwZV9leHRlbnNp
b246Ci0gICAgewotICAgICAgaW50IG5ldHNjYXBlX2V4dGVuc2lvbiA9IHFbMF0gJiA3OwotCi0g
ICAgICAvKiBMb29wIGVudGlyZSBhbmltYXRpb24gc3BlY2lmaWVkICMgb2YgdGltZXMuICBPbmx5
IHJlYWQgdGhlCi0gICAgICAgICBsb29wIGNvdW50IGR1cmluZyB0aGUgZmlyc3QgaXRlcmF0aW9u
LiAqLwotICAgICAgaWYgKG5ldHNjYXBlX2V4dGVuc2lvbiA9PSAxKSB7Ci0gICAgICAgIGxvb3Bf
Y291bnQgPSBHRVRJTlQxNihxICsgMSk7Ci0KLSAgICAgICAgLyogWmVybyBsb29wIGNvdW50IGlz
IGluZmluaXRlIGFuaW1hdGlvbiBsb29wIHJlcXVlc3QgKi8KLSAgICAgICAgaWYgKGxvb3BfY291
bnQgPT0gMCkKLSAgICAgICAgICBsb29wX2NvdW50ID0gV2ViQ29yZTo6Y0FuaW1hdGlvbkxvb3BJ
bmZpbml0ZTsKLQotICAgICAgICBHRVROKDEsIGdpZl9uZXRzY2FwZV9leHRlbnNpb25fYmxvY2sp
OwotICAgICAgfQotICAgICAgLyogV2FpdCBmb3Igc3BlY2lmaWVkICMgb2YgYnl0ZXMgdG8gZW50
ZXIgYnVmZmVyICovCi0gICAgICBlbHNlIGlmIChuZXRzY2FwZV9leHRlbnNpb24gPT0gMikgewot
ICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB0aGlzIGV4dGVuc2lvbiBkb2Vzbid0IGV4aXN0IChp
c24ndCB1c2VkIGF0IGFsbCkgCi0gICAgICAgIC8vIGFuZCBkb2Vzbid0IGRvIGFueXRoaW5nLCBh
cyBvdXIgc3RyZWFtaW5nL2J1ZmZlcmluZyB0YWtlcyBjYXJlIG9mIGl0IGFsbC4uLgotICAgICAg
ICAvLyBTZWU6IGh0dHA6Ly9zZW1taXgucGwvY29sb3IvZXhncmFmL2VlZzI0Lmh0bQotICAgICAg
ICBHRVROKDEsIGdpZl9uZXRzY2FwZV9leHRlbnNpb25fYmxvY2spOwotICAgICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gMCwzLTcgYXJlIHlldCB0byBiZSBkZWZpbmVkIG5ldHNjYXBlIGV4dGVuc2lv
biBjb2RlcwotICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQo
KSA6IGZhbHNlOwotICAgICAgfQotCi0gICAgICBicmVhazsKLSAgICB9CiAKLSAgICBjYXNlIGdp
Zl9pbWFnZV9oZWFkZXI6Ci0gICAgewotICAgICAgdW5zaWduZWQgaGVpZ2h0LCB3aWR0aCwgeF9v
ZmZzZXQsIHlfb2Zmc2V0OwotICAgICAgCi0gICAgICAvKiBHZXQgaW1hZ2Ugb2Zmc2V0cywgd2l0
aCByZXNwZWN0IHRvIHRoZSBzY3JlZW4gb3JpZ2luICovCi0gICAgICB4X29mZnNldCA9IEdFVElO
VDE2KHEpOwotICAgICAgeV9vZmZzZXQgPSBHRVRJTlQxNihxICsgMik7Ci0KLSAgICAgIC8qIEdl
dCBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0LiAqLwotICAgICAgd2lkdGggID0gR0VUSU5UMTYocSAr
IDQpOwotICAgICAgaGVpZ2h0ID0gR0VUSU5UMTYocSArIDYpOwotCi0gICAgICAvKiBXb3JrIGFy
b3VuZCBicm9rZW4gR0lGIGZpbGVzIHdoZXJlIHRoZSBsb2dpY2FsIHNjcmVlbgotICAgICAgICog
c2l6ZSBoYXMgd2VpcmQgd2lkdGggb3IgaGVpZ2h0LiAgV2UgYXNzdW1lIHRoYXQgR0lGODdhCi0g
ICAgICAgKiBmaWxlcyBkb24ndCBjb250YWluIGFuaW1hdGlvbnMuCi0gICAgICAgKi8KLSAgICAg
IGlmICgoaW1hZ2VzX2RlY29kZWQgPT0gMCkgJiYKLSAgICAgICAgICAoKHNjcmVlbl9oZWlnaHQg
PCBoZWlnaHQpIHx8IChzY3JlZW5fd2lkdGggPCB3aWR0aCkgfHwKLSAgICAgICAgICAgKHZlcnNp
b24gPT0gODcpKSkKLSAgICAgIHsKLSAgICAgICAgc2NyZWVuX2hlaWdodCA9IGhlaWdodDsKLSAg
ICAgICAgc2NyZWVuX3dpZHRoID0gd2lkdGg7Ci0gICAgICAgIHhfb2Zmc2V0ID0gMDsKLSAgICAg
ICAgeV9vZmZzZXQgPSAwOwotCi0gICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29k
ZXJwbHVnaW4gb2Ygb3VyIHNpemUuCi0gICAgICAgIGlmIChjbGllbnRwdHIgJiYgIWNsaWVudHB0
ci0+c2V0U2l6ZShzY3JlZW5fd2lkdGgsIHNjcmVlbl9oZWlnaHQpKQotICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgLyogV29yayBhcm91bmQgbW9yZSBicm9rZW4gR0lG
IGZpbGVzIHRoYXQgaGF2ZSB6ZXJvIGltYWdlCi0gICAgICAgICB3aWR0aCBvciBoZWlnaHQgKi8K
LSAgICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0aCkgewotICAgICAgICBoZWlnaHQgPSBzY3JlZW5f
aGVpZ2h0OwotICAgICAgICB3aWR0aCA9IHNjcmVlbl93aWR0aDsKLSAgICAgICAgaWYgKCFoZWln
aHQgfHwgIXdpZHRoKQotICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNl
dEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFn
ZURlY29kZXI6OkdJRlNpemVRdWVyeSB8fCBoYWx0QXRGcmFtZSA9PSBpbWFnZXNfZGVjb2RlZCkg
ewotICAgICAgICAvLyBUaGUgZGVjb2RlciBuZWVkcyB0byBzdG9wLiAgSGFuZCBiYWNrIHRoZSBu
dW1iZXIgb2YgYnl0ZXMgd2UgY29uc3VtZWQgZnJvbQotICAgICAgICAvLyBidWZmZXIgbWludXMg
OSAodGhlIGFtb3VudCB3ZSBjb25zdW1lZCB0byByZWFkIHRoZSBoZWFkZXIpLgotICAgICAgICBp
ZiAoY2xpZW50cHRyKQotICAgICAgICAgICAgY2xpZW50cHRyLT5kZWNvZGluZ0hhbHRlZChsZW4g
KyA5KTsKLSAgICAgICAgR0VUTig5LCBnaWZfaW1hZ2VfaGVhZGVyKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICB9Ci0gICAgICAKLSAgICAgIGltYWdlc19jb3VudCA9IGltYWdlc19kZWNv
ZGVkICsgMTsKLQotICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1
ZXJ5ICYmICFmcmFtZV9yZWFkZXIpCi0gICAgICAgIGZyYW1lX3JlYWRlciA9IG5ldyBHSUZGcmFt
ZVJlYWRlcigpOwotCi0gICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgIGZyYW1lX3Jl
YWRlci0+eF9vZmZzZXQgPSB4X29mZnNldDsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT55X29mZnNl
dCA9IHlfb2Zmc2V0OwotICAgICAgICBmcmFtZV9yZWFkZXItPmhlaWdodCA9IGhlaWdodDsKLSAg
ICAgICAgZnJhbWVfcmVhZGVyLT53aWR0aCA9IHdpZHRoOwotCi0gICAgICAgIC8qIFRoaXMgY2Fz
ZSB3aWxsIG5ldmVyIGJlIHRha2VuIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGltYWdlICovCi0gICAg
ICAgIC8qIGJlaW5nIGRlY29kZWQuIElmIGFueSBvZiB0aGUgbGF0ZXIgaW1hZ2VzIGFyZSBsYXJn
ZXIgICAgICovCi0gICAgICAgIC8qIHRoYW4gdGhlIHNjcmVlbiBzaXplLCB3ZSBuZWVkIHRvIHJl
YWxsb2NhdGUgYnVmZmVycy4gICAgICovCi0gICAgICAgIGlmIChzY3JlZW5fd2lkdGggPCB3aWR0
aCkgewotICAgICAgICAgIC8qIFhYWCBEZXZpYW50ISAqLwotCi0gICAgICAgICAgZGVsZXRlIFtd
ZnJhbWVfcmVhZGVyLT5yb3didWY7Ci0gICAgICAgICAgc2NyZWVuX3dpZHRoID0gd2lkdGg7Ci0g
ICAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3didWYgPSBuZXcgdW5zaWduZWQgY2hhcltzY3JlZW5f
d2lkdGhdOwotICAgICAgICB9IGVsc2UgaWYgKCFmcmFtZV9yZWFkZXItPnJvd2J1ZikgewotICAg
ICAgICAgIGZyYW1lX3JlYWRlci0+cm93YnVmID0gbmV3IHVuc2lnbmVkIGNoYXJbc2NyZWVuX3dp
ZHRoXTsKKyAgICAgICAgY2FzZSBHSUZDb25zdW1lQmxvY2s6IHsKKyAgICAgICAgICAgIGlmICgh
KnEpCisgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBHRVROKCpxLCBHSUZTa2lwQmxvY2spOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWZyYW1lX3JlYWRlci0+cm93YnVm
KQotICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDog
ZmFsc2U7Ci0gICAgICAgIGlmIChzY3JlZW5faGVpZ2h0IDwgaGVpZ2h0KQotICAgICAgICAgIHNj
cmVlbl9oZWlnaHQgPSBoZWlnaHQ7Ci0KLSAgICAgICAgaWYgKHFbOF0gJiAweDQwKSB7Ci0gICAg
ICAgICAgZnJhbWVfcmVhZGVyLT5pbnRlcmxhY2VkID0gdHJ1ZTsKLSAgICAgICAgICBmcmFtZV9y
ZWFkZXItPmlwYXNzID0gMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmcmFtZV9yZWFk
ZXItPmludGVybGFjZWQgPSBmYWxzZTsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlwYXNzID0g
MDsKKyAgICAgICAgY2FzZSBHSUZTa2lwQmxvY2s6IHsKKyAgICAgICAgICAgIEdFVE4oMSwgR0lG
Q29uc3VtZUJsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKGltYWdlc19kZWNvZGVkID09IDApIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnByb2dy
ZXNzaXZlX2Rpc3BsYXkgPSB0cnVlOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIC8qIE92
ZXJsYXlpbmcgaW50ZXJsYWNlZCwgdHJhbnNwYXJlbnQgR0lGcyBvdmVyCi0gICAgICAgICAgICAg
ZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFlYmVybGkgZGlzcGxheSBoYWNrCi0gICAg
ICAgICAgICAgcmVxdWlyZXMgc2F2aW5nIHRoZSB1bmRlcmx5aW5nIGltYWdlIGluIG9yZGVyIHRv
Ci0gICAgICAgICAgICAgYXZvaWQgamFnZ2llcyBhdCB0aGUgdHJhbnNwYXJlbmN5IGVkZ2VzLiAg
V2UgYXJlCi0gICAgICAgICAgICAgdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9u
J3QgZGlzcGxheSBzdWNoCi0gICAgICAgICAgICAgaW1hZ2VzIHByb2dyZXNzaXZlbHkgKi8KLSAg
ICAgICAgICBmcmFtZV9yZWFkZXItPnByb2dyZXNzaXZlX2Rpc3BsYXkgPSBmYWxzZTsKKyAgICAg
ICAgY2FzZSBHSUZDb250cm9sRXh0ZW5zaW9uOiB7CisgICAgICAgICAgICBpZiAocXVlcnkgIT0g
R0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50UXVlcnkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIW1fZnJhbWVDb250ZXh0KQorICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dCA9
IG5ldyBHSUZGcmFtZUNvbnRleHQoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKCpxICYgMHgxKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT50cGl4ZWwgPSBxWzNdOworICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlz
VHJhbnNwYXJlbnQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JpbmcgZ2Z4
IGNvbnRyb2wgZXh0ZW5zaW9uCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8v
IE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRo
b2QgZW51bQorICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3Bl
YyEKKyAgICAgICAgICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpxKSA+PiAyKSAmIDB4
NzsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxNZXRob2QgPSAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZClkaXNwb3NhbE1ldGhvZDsKKwor
ICAgICAgICAgICAgICAgIC8vIFNvbWUgc3BlY3Mgc2F5IDNyZCBiaXQgKHZhbHVlIDQpLCBvdGhl
ciBzcGVjcyBzYXkgdmFsdWUgMworICAgICAgICAgICAgICAgIC8vIExldCdzIGNob29zZSAzICh0
aGUgbW9yZSBwb3B1bGFyKQorICAgICAgICAgICAgICAgIGlmIChkaXNwb3NhbE1ldGhvZCA9PSA0
KQorICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxNZXRob2QgPSBX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXM7CisgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmRlbGF5VGltZSA9IEdFVElOVDE2KHEgKyAxKSAqIDEwOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUTigxLCBHSUZDb25zdW1lQmxvY2spOworICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBDbGVhciBzdGF0ZSBmcm9t
IGxhc3QgaW1hZ2UgKi8KLSAgICAgICAgZnJhbWVfcmVhZGVyLT5pcm93ID0gMDsKLSAgICAgICAg
ZnJhbWVfcmVhZGVyLT5yb3dzX3JlbWFpbmluZyA9IGZyYW1lX3JlYWRlci0+aGVpZ2h0OwotICAg
ICAgICBmcmFtZV9yZWFkZXItPnJvd2VuZCA9IGZyYW1lX3JlYWRlci0+cm93YnVmICsgZnJhbWVf
cmVhZGVyLT53aWR0aDsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5yb3dwID0gZnJhbWVfcmVhZGVy
LT5yb3didWY7Ci0KLSAgICAgICAgLyogYml0cyBwZXIgcGl4ZWwgaXMgcVs4XSYweDA3ICovCi0g
ICAgICB9Ci0gICAgICAKLSAgICAgIGlmIChxWzhdICYgMHg4MCkgLyogaGFzIGEgbG9jYWwgY29s
b3JtYXA/ICovCi0gICAgICB7Ci0gICAgICAgIGludCBudW1fY29sb3JzID0gMiA8PCAocVs4XSAm
IDB4Nyk7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSAzKm51bV9jb2xvcnM7Ci0gICAg
ICAgIHVuc2lnbmVkIGNoYXIgKm1hcCA9IGZyYW1lX3JlYWRlciA/IGZyYW1lX3JlYWRlci0+bG9j
YWxfY29sb3JtYXAgOiAwOwotICAgICAgICBpZiAoZnJhbWVfcmVhZGVyICYmICghbWFwIHx8IChu
dW1fY29sb3JzID4gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplKSkpIHsKLSAgICAg
ICAgICBkZWxldGUgW11tYXA7Ci0gICAgICAgICAgbWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6
ZV07Ci0gICAgICAgICAgaWYgKCFtYXApCi0gICAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8g
Y2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICBjYXNlIEdJRkNvbW1lbnRF
eHRlbnNpb246IHsKKyAgICAgICAgICAgIGlmICgqcSkKKyAgICAgICAgICAgICAgICBHRVROKCpx
LCBHSUZDb25zdW1lQ29tbWVudCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
R0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
LSAgICAgICAgLyogU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFsZXR0ZSBhZnRlciBpdCBsb2Fk
cyAqLwotICAgICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVy
LT5sb2NhbF9jb2xvcm1hcCA9IG1hcDsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmxvY2FsX2Nv
bG9ybWFwX3NpemUgPSBudW1fY29sb3JzOwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aXNfbG9j
YWxfY29sb3JtYXBfZGVmaW5lZCA9IHRydWU7CisgICAgICAgIGNhc2UgR0lGQ29uc3VtZUNvbW1l
bnQ6IHsKKyAgICAgICAgICAgIEdFVE4oMSwgR0lGQ29tbWVudEV4dGVuc2lvbik7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChsZW4gPCBzaXplKSB7Ci0gICAg
ICAgICAgLy8gVXNlICdob2xkJyBwYXR0ZXJuIHRvIGdldCB0aGUgaW1hZ2UgY29sb3JtYXAKLSAg
ICAgICAgICBHRVROKHNpemUsIGdpZl9pbWFnZV9jb2xvcm1hcCk7Ci0gICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgR0lGQXBwbGljYXRpb25FeHRlbnNpb246IHsKKyAgICAgICAgICAgIC8v
IENoZWNrIGZvciBuZXRzY2FwZSBhcHBsaWNhdGlvbiBleHRlbnNpb24uCisgICAgICAgICAgICBp
ZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJORVRTQ0FQRTIuMCIsIDExKSB8fCAhc3RybmNtcCgoY2hh
ciopcSwgIkFOSU1FWFRTMS4wIiwgMTEpKQorICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGTmV0
c2NhcGVFeHRlbnNpb25CbG9jayk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
R0VUTigxLCBHSUZDb25zdW1lQmxvY2spOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFuZCBkaXJlY3RseSBnbyB0byBnaWZfbHp3X3N0
YXJ0Ci0gICAgICAgIGlmIChmcmFtZV9yZWFkZXIpCi0gICAgICAgICAgbWVtY3B5KGZyYW1lX3Jl
YWRlci0+bG9jYWxfY29sb3JtYXAsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgIGJ1ZiArPSBzaXplOwot
ICAgICAgICBsZW4gLT0gc2l6ZTsKLSAgICAgIH0gZWxzZSBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0g
ICAgICAgIC8qIFN3aXRjaCBiYWNrIHRvIHRoZSBnbG9iYWwgcGFsZXR0ZSAqLwotICAgICAgICBm
cmFtZV9yZWFkZXItPmlzX2xvY2FsX2NvbG9ybWFwX2RlZmluZWQgPSBmYWxzZTsKLSAgICAgIH0K
LSAgICAgIEdFVE4oMSwgZ2lmX2x6d19zdGFydCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBnaWZfaW1hZ2VfY29sb3JtYXA6Ci0gICAgICAvLyBFdmVyeXRoaW5nIGlzIGFscmVhZHkg
Y29waWVkIGludG8gbG9jYWxfY29sb3JtYXAKLSAgICAgIEdFVE4oMSwgZ2lmX2x6d19zdGFydCk7
Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9zdWJfYmxvY2s6Ci0gICAgewotICAgICAgaWYg
KChjb3VudCA9ICpxKSAhPSAwKQotICAgICAgLyogU3RpbGwgd29ya2luZyBvbiB0aGUgc2FtZSBp
bWFnZTogUHJvY2VzcyBuZXh0IExaVyBkYXRhIGJsb2NrICovCi0gICAgICB7Ci0gICAgICAgIC8q
IE1ha2Ugc3VyZSB0aGVyZSBhcmUgc3RpbGwgcm93cyBsZWZ0LiBJZiB0aGUgR0lGIGRhdGEgKi8K
LSAgICAgICAgLyogaXMgY29ycnVwdCwgd2UgbWF5IG5vdCBnZXQgYW4gZXhwbGljaXQgdGVybWlu
YXRvci4gICAqLwotICAgICAgICBpZiAoZnJhbWVfcmVhZGVyICYmIGZyYW1lX3JlYWRlci0+cm93
c19yZW1haW5pbmcgPT0gMCkgewotICAgICAgICAgIC8qIFRoaXMgaXMgYW4gaWxsZWdhbCBHSUYs
IGJ1dCB3ZSByZW1haW4gdG9sZXJhbnQuICovCi0gICAgICAgICAgR0VUTigxLCBnaWZfc3ViX2Js
b2NrKTsKKworICAgICAgICAvLyBOZXRzY2FwZS1zcGVjaWZpYyBHSUYgZXh0ZW5zaW9uOiBhbmlt
YXRpb24gbG9vcGluZy4KKyAgICAgICAgY2FzZSBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrOiB7
CisgICAgICAgICAgICBpZiAoKnEpCisgICAgICAgICAgICAgICAgR0VUTigqcSwgR0lGQ29uc3Vt
ZU5ldHNjYXBlRXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBH
RVROKDEsIEdJRkltYWdlU3RhcnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBQYXJzZSBuZXRzY2FwZS1zcGVjaWZpYyBhcHBsaWNhdGlvbiBleHRlbnNpb25z
CisgICAgICAgIGNhc2UgR0lGQ29uc3VtZU5ldHNjYXBlRXh0ZW5zaW9uOiB7CisgICAgICAgICAg
ICBpbnQgbmV0c2NhcGVFeHRlbnNpb24gPSBxWzBdICYgNzsKKworICAgICAgICAgICAgLy8gTG9v
cCBlbnRpcmUgYW5pbWF0aW9uIHNwZWNpZmllZCAjIG9mIHRpbWVzLiBPbmx5IHJlYWQgdGhlIGxv
b3AgY291bnQgZHVyaW5nIHRoZSBmaXJzdCBpdGVyYXRpb24uCisgICAgICAgICAgICBpZiAobmV0
c2NhcGVFeHRlbnNpb24gPT0gMSkgeworICAgICAgICAgICAgICAgIG1fbG9vcENvdW50ID0gR0VU
SU5UMTYocSArIDEpOworCisgICAgICAgICAgICAgICAgLy8gWmVybyBsb29wIGNvdW50IGlzIGlu
ZmluaXRlIGFuaW1hdGlvbiBsb29wIHJlcXVlc3QuCisgICAgICAgICAgICAgICAgaWYgKCFtX2xv
b3BDb3VudCkKKyAgICAgICAgICAgICAgICAgICAgbV9sb29wQ291bnQgPSBXZWJDb3JlOjpjQW5p
bWF0aW9uTG9vcEluZmluaXRlOworCisgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZOZXRzY2Fw
ZUV4dGVuc2lvbkJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobmV0c2NhcGVFeHRlbnNp
b24gPT0gMikgeworICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHNwZWNpZmllZCAjIG9mIGJ5
dGVzIHRvIGVudGVyIGJ1ZmZlci4KKworICAgICAgICAgICAgICAgIC8vIERvbid0IGRvIHRoaXMs
IHRoaXMgZXh0ZW5zaW9uIGRvZXNuJ3QgZXhpc3QgKGlzbid0IHVzZWQgYXQgYWxsKQorICAgICAg
ICAgICAgICAgIC8vIGFuZCBkb2Vzbid0IGRvIGFueXRoaW5nLCBhcyBvdXIgc3RyZWFtaW5nL2J1
ZmZlcmluZyB0YWtlcyBjYXJlIG9mIGl0IGFsbC4uLgorICAgICAgICAgICAgICAgIC8vIFNlZTog
aHR0cDovL3NlbW1peC5wbC9jb2xvci9leGdyYWYvZWVnMjQuaHRtCisgICAgICAgICAgICAgICAg
R0VUTigxLCBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgLy8gMCwzLTcgYXJlIHlldCB0byBiZSBkZWZpbmVkIG5ldHNjYXBl
IGV4dGVuc2lvbiBjb2RlcworICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xp
ZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgR0VUTihjb3VudCwgZ2lmX2x6dyk7Ci0gICAgICB9Ci0g
ICAgICBlbHNlCi0gICAgICAvKiBTZWUgaWYgdGhlcmUgYXJlIGFueSBtb3JlIGltYWdlcyBpbiB0
aGlzIHNlcXVlbmNlLiAqLwotICAgICAgewotICAgICAgICBpbWFnZXNfZGVjb2RlZCsrOwotCi0g
ICAgICAgIC8vIENBTExCQUNLOiBUaGUgZnJhbWUgaXMgbm93IGNvbXBsZXRlLgotICAgICAgICBp
ZiAoY2xpZW50cHRyICYmIGZyYW1lX3JlYWRlciAmJiAhY2xpZW50cHRyLT5mcmFtZUNvbXBsZXRl
KGltYWdlc19kZWNvZGVkIC0gMSwgZnJhbWVfcmVhZGVyLT5kZWxheV90aW1lLCBmcmFtZV9yZWFk
ZXItPmRpc3Bvc2FsX21ldGhvZCkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBmcmFtZUNv
bXBsZXRlKCkgaGFzIGFscmVhZHkgY2FsbGVkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBj
bGllbnRwdHItPnNldEZhaWxlZCgpLgotCi0gICAgICAgIC8qIENsZWFyIHN0YXRlIGZyb20gdGhp
cyBpbWFnZSAqLwotICAgICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAgICAgICAgICBmcmFt
ZV9yZWFkZXItPmlzX2xvY2FsX2NvbG9ybWFwX2RlZmluZWQgPSBmYWxzZTsKLSAgICAgICAgICAg
IGZyYW1lX3JlYWRlci0+aXNfdHJhbnNwYXJlbnQgPSBmYWxzZTsKKworICAgICAgICBjYXNlIEdJ
RkltYWdlSGVhZGVyOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBoZWlnaHQsIHdpZHRoLCB4T2Zm
c2V0LCB5T2Zmc2V0OworCisgICAgICAgICAgICAvKiBHZXQgaW1hZ2Ugb2Zmc2V0cywgd2l0aCBy
ZXNwZWN0IHRvIHRoZSBzY3JlZW4gb3JpZ2luICovCisgICAgICAgICAgICB4T2Zmc2V0ID0gR0VU
SU5UMTYocSk7CisgICAgICAgICAgICB5T2Zmc2V0ID0gR0VUSU5UMTYocSArIDIpOworCisgICAg
ICAgICAgICAvKiBHZXQgaW1hZ2Ugd2lkdGggYW5kIGhlaWdodC4gKi8KKyAgICAgICAgICAgIHdp
ZHRoICA9IEdFVElOVDE2KHEgKyA0KTsKKyAgICAgICAgICAgIGhlaWdodCA9IEdFVElOVDE2KHEg
KyA2KTsKKworICAgICAgICAgICAgLyogV29yayBhcm91bmQgYnJva2VuIEdJRiBmaWxlcyB3aGVy
ZSB0aGUgbG9naWNhbCBzY3JlZW4KKyAgICAgICAgICAgICAqIHNpemUgaGFzIHdlaXJkIHdpZHRo
IG9yIGhlaWdodC4gIFdlIGFzc3VtZSB0aGF0IEdJRjg3YQorICAgICAgICAgICAgICogZmlsZXMg
ZG9uJ3QgY29udGFpbiBhbmltYXRpb25zLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBp
ZiAoIW1faW1hZ2VzRGVjb2RlZAorICAgICAgICAgICAgICAgICYmICgobV9zY3JlZW5IZWlnaHQg
PCBoZWlnaHQpIHx8IChtX3NjcmVlbldpZHRoIDwgd2lkdGgpIHx8IChtX3ZlcnNpb24gPT0gODcp
KSkgeworICAgICAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAg
ICAgICAgIG1fc2NyZWVuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgICAgICB4T2Zmc2V0ID0g
MDsKKyAgICAgICAgICAgICAgICB5T2Zmc2V0ID0gMDsKKworICAgICAgICAgICAgICAgIC8vIENB
TExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCisgICAgICAgICAg
ICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShtX3NjcmVlbldpZHRoLCBt
X3NjcmVlbkhlaWdodCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gV29yayBhcm91bmQgbW9yZSBicm9rZW4gR0lGIGZp
bGVzIHRoYXQgaGF2ZSB6ZXJvIGltYWdlIHdpZHRoIG9yIGhlaWdodAorICAgICAgICAgICAgaWYg
KCFoZWlnaHQgfHwgIXdpZHRoKSB7CisgICAgICAgICAgICAgICAgaGVpZ2h0ID0gbV9zY3JlZW5I
ZWlnaHQ7CisgICAgICAgICAgICAgICAgd2lkdGggPSBtX3NjcmVlbldpZHRoOworICAgICAgICAg
ICAgICAgIGlmICghaGVpZ2h0IHx8ICF3aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRlNpemVRdWVy
eSB8fCBoYWx0QXRGcmFtZSA9PSBtX2ltYWdlc0RlY29kZWQpIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGUgZGVjb2RlciBuZWVkcyB0byBzdG9wLiBIYW5kIGJhY2sgdGhlIG51bWJlciBvZiBieXRl
cyB3ZSBjb25zdW1lZCBmcm9tCisgICAgICAgICAgICAgICAgLy8gYnVmZmVyIG1pbnVzIDkgKHRo
ZSBhbW91bnQgd2UgY29uc3VtZWQgdG8gcmVhZCB0aGUgaGVhZGVyKS4KKyAgICAgICAgICAgICAg
ICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kZWNvZGluZ0hh
bHRlZChsZW4gKyA5KTsKKyAgICAgICAgICAgICAgICBHRVROKDksIEdJRkltYWdlSGVhZGVyKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgbV9pbWFnZXNDb3VudCA9IG1faW1hZ2VzRGVjb2RlZCArIDE7CisKKyAgICAgICAgICAgIGlm
IChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSAmJiAhbV9mcmFtZUNvbnRl
eHQpCisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQgPSBuZXcgR0lGRnJhbWVDb250ZXh0
KCk7CisKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT54T2Zmc2V0ID0geE9mZnNldDsKKyAgICAgICAgICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+eU9mZnNldCA9IHlPZmZzZXQ7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNv
bnRleHQtPmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
d2lkdGggPSB3aWR0aDsKKworICAgICAgICAgICAgICAgIC8qIFRoaXMgY2FzZSB3aWxsIG5ldmVy
IGJlIHRha2VuIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGltYWdlICovCisgICAgICAgICAgICAgICAg
LyogYmVpbmcgZGVjb2RlZC4gSWYgYW55IG9mIHRoZSBsYXRlciBpbWFnZXMgYXJlIGxhcmdlciAg
ICAgKi8KKyAgICAgICAgICAgICAgICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0
byByZWFsbG9jYXRlIGJ1ZmZlcnMuICAgICAqLworICAgICAgICAgICAgICAgIGlmIChtX3NjcmVl
bldpZHRoIDwgd2lkdGgpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogWFhYIERldmlhbnQhICov
CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXW1fZnJhbWVDb250ZXh0LT5yb3didWY7Cisg
ICAgICAgICAgICAgICAgICAgIG1fc2NyZWVuV2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW21fc2NyZWVu
V2lkdGhdOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIW1fZnJhbWVDb250ZXh0LT5yb3di
dWYpCisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5yb3didWYgPSBuZXcgdW5z
aWduZWQgY2hhclttX3NjcmVlbldpZHRoXTsKKworICAgICAgICAgICAgICAgIGlmICghbV9mcmFt
ZUNvbnRleHQtPnJvd2J1ZikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8g
bV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKG1fc2Ny
ZWVuSGVpZ2h0IDwgaGVpZ2h0KQorICAgICAgICAgICAgICAgICAgICBtX3NjcmVlbkhlaWdodCA9
IGhlaWdodDsKKworICAgICAgICAgICAgICAgIGlmIChxWzhdICYgMHg0MCkgeworICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA9IDE7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzID0gMDsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW1faW1hZ2VzRGVjb2RlZCkK
KyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSA9
IHRydWU7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE92
ZXJsYXlpbmcgaW50ZXJsYWNlZCwgdHJhbnNwYXJlbnQgR0lGcyBvdmVyCisgICAgICAgICAgICAg
ICAgICAgIC8vIGV4aXN0aW5nIGltYWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRpc3BsYXkg
aGFjaworICAgICAgICAgICAgICAgICAgICAvLyByZXF1aXJlcyBzYXZpbmcgdGhlIHVuZGVybHlp
bmcgaW1hZ2UgaW4gb3JkZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgamFnZ2ll
cyBhdCB0aGUgdHJhbnNwYXJlbmN5IGVkZ2VzLiBXZSBhcmUKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdW5wcmVwYXJlZCB0byBkZWFsIHdpdGggdGhhdCwgc28gZG9uJ3QgZGlzcGxheSBzdWNoCisg
ICAgICAgICAgICAgICAgICAgIC8vIGltYWdlcyBwcm9ncmVzc2l2ZWx5CisgICAgICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURpc3BsYXkgPSBmYWxzZTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDbGVhciBzdGF0ZSBmcm9tIGxhc3Qg
aW1hZ2UuCisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSAwOworICAgICAg
ICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5yb3dzUmVtYWluaW5nID0gbV9mcmFtZUNvbnRleHQt
PmhlaWdodDsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cm93ZW5kID0gbV9mcmFt
ZUNvbnRleHQtPnJvd2J1ZiArIG1fZnJhbWVDb250ZXh0LT53aWR0aDsKKyAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+cm93cCA9IG1fZnJhbWVDb250ZXh0LT5yb3didWY7CisKKyAgICAg
ICAgICAgICAgICAvLyBiaXRzIHBlciBwaXhlbCBpcyBxWzhdJjB4MDcKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gaGFzIGEgbG9jYWwgY29sb3JtYXA/CisgICAgICAgICAgICBpZiAo
cVs4XSAmIDB4ODApIHsKKyAgICAgICAgICAgICAgICBpbnQgbnVtQ29sb3JzID0gMiA8PCAocVs4
XSAmIDB4Nyk7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMgKiBudW1D
b2xvcnM7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbWFwID0gbV9mcmFtZUNvbnRl
eHQgPyBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA6IDA7CisgICAgICAgICAgICAgICAg
aWYgKG1fZnJhbWVDb250ZXh0ICYmICghbWFwIHx8IChudW1Db2xvcnMgPiBtX2ZyYW1lQ29udGV4
dC0+bG9jYWxDb2xvcm1hcFNpemUpKSkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgW11t
YXA7CisgICAgICAgICAgICAgICAgICAgIG1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbmV3IGxvY2FsIHBh
bGV0dGUgYWZ0ZXIgaXQgbG9hZHMKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgPSBt
YXA7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwU2l6
ZSA9IG51bUNvbG9yczsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9j
YWxDb2xvcm1hcERlZmluZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmIChsZW4gPCBzaXplKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFVzZSAnaG9s
ZCcgcGF0dGVybiB0byBnZXQgdGhlIGltYWdlIGNvbG9ybWFwCisgICAgICAgICAgICAgICAgICAg
IEdFVE4oc2l6ZSwgR0lGSW1hZ2VDb2xvcm1hcCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENvcHkgZXZlcnl0aGlu
ZyBhbmQgZGlyZWN0bHkgZ28gdG8gR0lGTFpXU3RhcnQKKyAgICAgICAgICAgICAgICBpZiAobV9m
cmFtZUNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIG1lbWNweShtX2ZyYW1lQ29udGV4dC0+
bG9jYWxDb2xvcm1hcCwgYnVmLCBzaXplKTsKKyAgICAgICAgICAgICAgICBidWYgKz0gc2l6ZTsK
KyAgICAgICAgICAgICAgICBsZW4gLT0gc2l6ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9m
cmFtZUNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggYmFjayB0byB0aGUgZ2xv
YmFsIHBhbGV0dGUKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9y
bWFwRGVmaW5lZCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR0VUTigxLCBH
SUZMWldTdGFydCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIEdF
VE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLSAgICAgIH0KLSAgICB9Ci0gICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgR0lGSW1hZ2VDb2xvcm1hcDogeworICAgICAgICAgICAgLy8gRXZlcnl0aGluZyBp
cyBhbHJlYWR5IGNvcGllZCBpbnRvIGxvY2FsQ29sb3JtYXAKKyAgICAgICAgICAgIEdFVE4oMSwg
R0lGTFpXU3RhcnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgIGNhc2Ug
Z2lmX2RvbmU6Ci0gICAgICAvLyBXaGVuIHRoZSBHSUYgaXMgZG9uZSwgd2UgY2FuIHN0b3AuCi0g
ICAgICBpZiAoY2xpZW50cHRyKQotICAgICAgICBjbGllbnRwdHItPmdpZkNvbXBsZXRlKCk7Ci0g
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBHSUZTdWJCbG9jazogeworICAgICAgICAg
ICAgLy8gU3RpbGwgd29ya2luZyBvbiB0aGUgc2FtZSBpbWFnZTogUHJvY2VzcyBuZXh0IExaVyBk
YXRhIGJsb2NrLgorICAgICAgICAgICAgaWYgKChtX2NvdW50ID0gKnEpKSB7CisgICAgICAgICAg
ICAgICAgLy8gTWFrZSBzdXJlIHRoZXJlIGFyZSBzdGlsbCByb3dzIGxlZnQuIElmIHRoZSBHSUYg
ZGF0YQorICAgICAgICAgICAgICAgIC8vIGlzIGNvcnJ1cHQsIHdlIG1heSBub3QgZ2V0IGFuIGV4
cGxpY2l0IHRlcm1pbmF0b3IuCisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0ICYm
ICFtX2ZyYW1lQ29udGV4dC0+cm93c1JlbWFpbmluZykgeworICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIGFuIGlsbGVnYWwgR0lGLCBidXQgd2UgcmVtYWluIHRvbGVyYW50LgorICAgICAg
ICAgICAgICAgICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgR0VUTihtX2NvdW50LCBHSUZMWlcpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYXJlIGFueSBtb3JlIGltYWdlcyBp
biB0aGlzIHNlcXVlbmNlLgorICAgICAgICAgICAgICAgIG1faW1hZ2VzRGVjb2RlZCsrOworCisg
ICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IFRoZSBmcmFtZSBpcyBub3cgY29tcGxldGUuCisg
ICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmIG1fZnJhbWVDb250ZXh0ICYmICFtX2NsaWVu
dC0+ZnJhbWVDb21wbGV0ZShtX2ltYWdlc0RlY29kZWQgLSAxLCBtX2ZyYW1lQ29udGV4dC0+ZGVs
YXlUaW1lLCBtX2ZyYW1lQ29udGV4dC0+ZGlzcG9zYWxNZXRob2QpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGZyYW1lQ29tcGxldGUoKSBoYXMgYWxyZWFkeSBjYWxsZWQg
bV9jbGllbnQtPnNldEZhaWxlZCgpLgorCisgICAgICAgICAgICAgICAgLy8gQ2xlYXIgc3RhdGUg
ZnJvbSB0aGlzIGltYWdlCisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFy
ZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgR0VUTigx
LCBHSUZJbWFnZVN0YXJ0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAKLSAgICAvLyBXZSBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZS4KLSAgICBkZWZhdWx0
OgotICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR0lGRG9uZTogeworICAgICAgICAgICAgLy8g
V2hlbiB0aGUgR0lGIGlzIGRvbmUsIHdlIGNhbiBzdG9wLgorICAgICAgICAgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT5naWZDb21wbGV0ZSgpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgLy8gV2Ugc2hvdWxkbid0IGV2ZXIgZ2V0IGhlcmUuCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQogICAgIH0KLSAgfQotCi0gIC8vIENvcHkgdGhlIGxlZnRvdmVyIGludG8gZ3MtPmhv
bGQKLSAgYnl0ZXNfaW5faG9sZCA9IGxlbjsKLSAgaWYgKGxlbikgewotICAgIC8vIEFkZCB3aGF0
IHdlIGhhdmUgc29mYXIgdG8gdGhlIGJsb2NrCi0gICAgdW5zaWduZWQgY2hhciogcDsKLSAgICBp
ZiAoc3RhdGUgPT0gZ2lmX2dsb2JhbF9jb2xvcm1hcCkKLSAgICAgIHAgPSBnbG9iYWxfY29sb3Jt
YXA7Ci0gICAgZWxzZSBpZiAoc3RhdGUgPT0gZ2lmX2ltYWdlX2NvbG9ybWFwKQotICAgICAgcCA9
IGZyYW1lX3JlYWRlciA/IGZyYW1lX3JlYWRlci0+bG9jYWxfY29sb3JtYXAgOiAwOwotICAgIGVs
c2UKLSAgICAgIHAgPSBob2xkOwotICAgIGlmIChwKQotICAgICAgbWVtY3B5KHAsIGJ1ZiwgbGVu
KTsKLSAgICBieXRlc190b19jb25zdW1lIC09IGxlbjsKLSAgfQotCi0gIGlmIChjbGllbnRwdHIp
Ci0gICAgY2xpZW50cHRyLT5kZWNvZGluZ0hhbHRlZCgwKTsKLSAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gQ29weSB0aGUgbGVmdG92ZXIgaW50byBtX2ZyYW1lQ29udGV4dC0+bV9ob2xkCisgICAg
bV9ieXRlc0luSG9sZCA9IGxlbjsKKyAgICBpZiAobGVuKSB7CisgICAgICAgIC8vIEFkZCB3aGF0
IHdlIGhhdmUgc29mYXIgdG8gdGhlIGJsb2NrCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIHA7Cisg
ICAgICAgIGlmIChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKQorICAgICAgICAgICAgcCA9
IG1fZ2xvYmFsQ29sb3JtYXA7CisgICAgICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gR0lGSW1hZ2VD
b2xvcm1hcCkKKyAgICAgICAgICAgIHAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250ZXh0
LT5sb2NhbENvbG9ybWFwIDogMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcCA9IG1faG9s
ZDsKKyAgICAgICAgaWYgKHApCisgICAgICAgICAgICBtZW1jcHkocCwgYnVmLCBsZW4pOworICAg
ICAgICBtX2J5dGVzVG9Db25zdW1lIC09IGxlbjsKKyAgICB9CisKKyAgICBpZiAobV9jbGllbnQp
CisgICAgICAgIG1fY2xpZW50LT5kZWNvZGluZ0hhbHRlZCgwKTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmluZGV4IDA1MjUzMmM2NDUzNjMxNDc3NDhmOWJhNjRl
YTc4YTE1MWZlZTNhZGUuLmMwODI5MThjNDMxNjZiMzgwMjllYmRmNGYyNGNmMzRkZTY5ZDc0OWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBAIC00OSwxNjUgKzQ5LDE4NiBAQAogCiBjb25zdCBp
bnQgY0xvb3BDb3VudE5vdFNlZW4gPSAtMjsKIAotLyogZ2lmMi5oICAKLSAgIFRoZSBpbnRlcmZh
Y2UgZm9yIHRoZSBHSUY4Ny84OWEgZGVjb2Rlci4gCi0qLwotLy8gTGlzdCBvZiBwb3NzaWJsZSBw
YXJzaW5nIHN0YXRlcwotdHlwZWRlZiBlbnVtIHsKLSAgICBnaWZfdHlwZSwKLSAgICBnaWZfZ2xv
YmFsX2hlYWRlciwKLSAgICBnaWZfZ2xvYmFsX2NvbG9ybWFwLAotICAgIGdpZl9pbWFnZV9zdGFy
dCwgICAgICAgICAgICAKLSAgICBnaWZfaW1hZ2VfaGVhZGVyLAotICAgIGdpZl9pbWFnZV9jb2xv
cm1hcCwKLSAgICBnaWZfaW1hZ2VfYm9keSwKLSAgICBnaWZfbHp3X3N0YXJ0LAotICAgIGdpZl9s
encsCi0gICAgZ2lmX3N1Yl9ibG9jaywKLSAgICBnaWZfZXh0ZW5zaW9uLAotICAgIGdpZl9jb250
cm9sX2V4dGVuc2lvbiwKLSAgICBnaWZfY29uc3VtZV9ibG9jaywKLSAgICBnaWZfc2tpcF9ibG9j
aywKLSAgICBnaWZfZG9uZSwKLSAgICBnaWZfY29tbWVudF9leHRlbnNpb24sCi0gICAgZ2lmX2Fw
cGxpY2F0aW9uX2V4dGVuc2lvbiwKLSAgICBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrLAot
ICAgIGdpZl9jb25zdW1lX25ldHNjYXBlX2V4dGVuc2lvbiwKLSAgICBnaWZfY29uc3VtZV9jb21t
ZW50Ci19IGdzdGF0ZTsKLQotc3RydWN0IEdJRkZyYW1lUmVhZGVyIHsKKy8vIExpc3Qgb2YgcG9z
c2libGUgcGFyc2luZyBzdGF0ZXMuCitlbnVtIEdJRlN0YXRlIHsKKyAgICBHSUZUeXBlLAorICAg
IEdJRkdsb2JhbEhlYWRlciwKKyAgICBHSUZHbG9iYWxDb2xvcm1hcCwKKyAgICBHSUZJbWFnZVN0
YXJ0LCAgICAgICAgICAgIAorICAgIEdJRkltYWdlSGVhZGVyLAorICAgIEdJRkltYWdlQ29sb3Jt
YXAsCisgICAgR0lGSW1hZ2VCb2R5LAorICAgIEdJRkxaV1N0YXJ0LAorICAgIEdJRkxaVywKKyAg
ICBHSUZTdWJCbG9jaywKKyAgICBHSUZFeHRlbnNpb24sCisgICAgR0lGQ29udHJvbEV4dGVuc2lv
biwKKyAgICBHSUZDb25zdW1lQmxvY2ssCisgICAgR0lGU2tpcEJsb2NrLAorICAgIEdJRkRvbmUs
CisgICAgR0lGQ29tbWVudEV4dGVuc2lvbiwKKyAgICBHSUZBcHBsaWNhdGlvbkV4dGVuc2lvbiwK
KyAgICBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrLAorICAgIEdJRkNvbnN1bWVOZXRzY2FwZUV4
dGVuc2lvbiwKKyAgICBHSUZDb25zdW1lQ29tbWVudAorfTsKKworc3RydWN0IEdJRkZyYW1lQ29u
dGV4dCB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLyogTFpX
IGRlY29kZXIgc3RhdGUgbWFjaGluZSAqLwotICAgIHVuc2lnbmVkIGNoYXIgKnN0YWNrcDsgICAg
ICAgICAgICAgIC8qIEN1cnJlbnQgc3RhY2sgcG9pbnRlciAqLworICAgIC8vIExaVyBkZWNvZGVy
IHN0YXRlIG1hY2hpbmUuCisgICAgdW5zaWduZWQgY2hhciAqc3RhY2twOyAvLyBDdXJyZW50IHN0
YWNrIHBvaW50ZXIuCiAgICAgaW50IGRhdGFzaXplOwogICAgIGludCBjb2Rlc2l6ZTsKICAgICBp
bnQgY29kZW1hc2s7Ci0gICAgaW50IGNsZWFyX2NvZGU7ICAgICAgICAgICAgIC8qIENvZGV3b3Jk
IHVzZWQgdG8gdHJpZ2dlciBkaWN0aW9uYXJ5IHJlc2V0ICovCi0gICAgaW50IGF2YWlsOyAgICAg
ICAgICAgICAgICAgIC8qIEluZGV4IG9mIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4gZGljdGlvbmFy
eSAqLworICAgIGludCBjbGVhckNvZGU7IC8vIENvZGV3b3JkIHVzZWQgdG8gdHJpZ2dlciBkaWN0
aW9uYXJ5IHJlc2V0LgorICAgIGludCBhdmFpbDsgLy8gSW5kZXggb2YgbmV4dCBhdmFpbGFibGUg
c2xvdCBpbiBkaWN0aW9uYXJ5LgogICAgIGludCBvbGRjb2RlOwogICAgIHVuc2lnbmVkIGNoYXIg
Zmlyc3RjaGFyOwotICAgIGludCBiaXRzOyAgICAgICAgICAgICAgICAgICAvKiBOdW1iZXIgb2Yg
dW5yZWFkIGJpdHMgaW4gImRhdHVtIiAqLwotICAgIGludCBkYXR1bTsgICAgICAgICAgICAgICAg
LyogMzItYml0IGlucHV0IGJ1ZmZlciAqLwotCi0gICAgLyogT3V0cHV0IHN0YXRlIG1hY2hpbmUg
Ki8KLSAgICBpbnQgaXBhc3M7ICAgICAgICAgICAgICAgICAgLyogSW50ZXJsYWNlIHBhc3M7IFJh
bmdlcyAxLTQgaWYgaW50ZXJsYWNlZC4gKi8KLSAgICB1bnNpZ25lZCBpbnQgcm93c19yZW1haW5p
bmc7ICAgICAgICAvKiBSb3dzIHJlbWFpbmluZyB0byBiZSBvdXRwdXQgKi8KLSAgICB1bnNpZ25l
ZCBpbnQgaXJvdzsgICAgICAgICAgICAgICAgICAvKiBDdXJyZW50IG91dHB1dCByb3csIHN0YXJ0
aW5nIGF0IHplcm8gKi8KLSAgICB1bnNpZ25lZCBjaGFyICpyb3didWY7ICAgICAgICAgICAgICAv
KiBTaW5nbGUgc2NhbmxpbmUgdGVtcG9yYXJ5IGJ1ZmZlciAqLwotICAgIHVuc2lnbmVkIGNoYXIg
KnJvd2VuZDsgICAgICAgICAgICAgIC8qIFBvaW50ZXIgdG8gZW5kIG9mIHJvd2J1ZiAqLwotICAg
IHVuc2lnbmVkIGNoYXIgKnJvd3A7ICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgb3V0cHV0IHBv
aW50ZXIgKi8KLQotICAgIC8qIFBhcmFtZXRlcnMgZm9yIGltYWdlIGZyYW1lIGN1cnJlbnRseSBi
ZWluZyBkZWNvZGVkICovCi0gICAgdW5zaWduZWQgaW50IHhfb2Zmc2V0LCB5X29mZnNldDsgICAg
LyogV2l0aCByZXNwZWN0IHRvICJzY3JlZW4iIG9yaWdpbiAqLwotICAgIHVuc2lnbmVkIGludCBo
ZWlnaHQsIHdpZHRoOwotICAgIGludCB0cGl4ZWw7ICAgICAgICAgICAgICAgICAvKiBJbmRleCBv
ZiB0cmFuc3BhcmVudCBwaXhlbCAqLwotICAgIFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlz
cG9zYWxNZXRob2QgZGlzcG9zYWxfbWV0aG9kOyAgIC8qIFJlc3RvcmUgdG8gYmFja2dyb3VuZCwg
bGVhdmUgaW4gcGxhY2UsIGV0Yy4qLwotICAgIHVuc2lnbmVkIGNoYXIgKmxvY2FsX2NvbG9ybWFw
OyAgICAvKiBQZXItaW1hZ2UgY29sb3JtYXAgKi8KLSAgICBpbnQgbG9jYWxfY29sb3JtYXBfc2l6
ZTsgICAgLyogU2l6ZSBvZiBsb2NhbCBjb2xvcm1hcCBhcnJheS4gKi8KKyAgICBpbnQgYml0czsg
Ly8gTnVtYmVyIG9mIHVucmVhZCBiaXRzIGluICJkYXR1bSIuCisgICAgaW50IGRhdHVtOyAvLyAz
Mi1iaXQgaW5wdXQgYnVmZmVyLgorCisgICAgLy8gT3V0cHV0IHN0YXRlIG1hY2hpbmUuCisgICAg
aW50IGlwYXNzOyAvLyBJbnRlcmxhY2UgcGFzczsgUmFuZ2VzIDEtNCBpZiBpbnRlcmxhY2VkLgor
ICAgIHVuc2lnbmVkIHJvd3NSZW1haW5pbmc7IC8vIFJvd3MgcmVtYWluaW5nIHRvIGJlIG91dHB1
dC4KKyAgICB1bnNpZ25lZCBpcm93OyAvLyBDdXJyZW50IG91dHB1dCByb3csIHN0YXJ0aW5nIGF0
IHplcm8uCisgICAgdW5zaWduZWQgY2hhciAqcm93YnVmOyAvLyBTaW5nbGUgc2NhbmxpbmUgdGVt
cG9yYXJ5IGJ1ZmZlci4KKyAgICB1bnNpZ25lZCBjaGFyICpyb3dlbmQ7IC8vIFBvaW50ZXIgdG8g
ZW5kIG9mIHJvd2J1Zi4KKyAgICB1bnNpZ25lZCBjaGFyICpyb3dwOyAvLyBDdXJyZW50IG91dHB1
dCBwb2ludGVyLgorCisgICAgLy8gUGFyYW1ldGVycyBmb3IgaW1hZ2UgZnJhbWUgY3VycmVudGx5
IGJlaW5nIGRlY29kZWQuCisgICAgdW5zaWduZWQgeE9mZnNldDsKKyAgICB1bnNpZ25lZCB5T2Zm
c2V0OyAvLyBXaXRoIHJlc3BlY3QgdG8gInNjcmVlbiIgb3JpZ2luLgorICAgIHVuc2lnbmVkIHdp
ZHRoOworICAgIHVuc2lnbmVkIGhlaWdodDsKKyAgICBpbnQgdHBpeGVsOyAvLyBJbmRleCBvZiB0
cmFuc3BhcmVudCBwaXhlbC4KKyAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2Fs
TWV0aG9kIGRpc3Bvc2FsTWV0aG9kOyAvLyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGlu
IHBsYWNlLCBldGMuCisgICAgdW5zaWduZWQgY2hhciAqbG9jYWxDb2xvcm1hcDsgLy8gUGVyLWlt
YWdlIGNvbG9ybWFwLgorICAgIGludCBsb2NhbENvbG9ybWFwU2l6ZTsgLy8gU2l6ZSBvZiBsb2Nh
bCBjb2xvcm1hcCBhcnJheS4KICAgICAKLSAgICBib29sIGlzX2xvY2FsX2NvbG9ybWFwX2RlZmlu
ZWQgOiAxOwotICAgIGJvb2wgcHJvZ3Jlc3NpdmVfZGlzcGxheSA6IDE7ICAgIC8qIElmIFRSVUUs
IGRvIEhhZWJlcmxpIGludGVybGFjZSBoYWNrICovCi0gICAgYm9vbCBpbnRlcmxhY2VkIDogMTsg
ICAgICAgICAgICAgLyogVFJVRSwgaWYgc2NhbmxpbmVzIGFycml2ZSBpbnRlcmxhY2VkIG9yZGVy
ICovCi0gICAgYm9vbCBpc190cmFuc3BhcmVudCA6IDE7ICAgICAgICAgLyogVFJVRSwgaWYgdHBp
eGVsIGlzIHZhbGlkICovCi0KLSAgICB1bnNpZ25lZCBkZWxheV90aW1lOyAgICAgICAgLyogRGlz
cGxheSB0aW1lLCBpbiBtaWxsaXNlY29uZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciB0aGlzIGltYWdlIGluIGEgbXVsdGktaW1hZ2UgR0lGICovCi0KLQotICAgIHVu
c2lnbmVkIHNob3J0KiAgcHJlZml4OyAgICAgICAgICAvKiBMWlcgZGVjb2RpbmcgdGFibGVzICov
Ci0gICAgdW5zaWduZWQgY2hhciogICBzdWZmaXg7ICAgICAgICAgIC8qIExaVyBkZWNvZGluZyB0
YWJsZXMgKi8KLSAgICB1bnNpZ25lZCBjaGFyKiAgIHN0YWNrOyAgICAgICAgICAgLyogQmFzZSBv
ZiBMWlcgZGVjb2RlciBzdGFjayAqLwotCi0KLSAgICBHSUZGcmFtZVJlYWRlcigpIHsKLSAgICAg
ICAgc3RhY2twID0gMDsKLSAgICAgICAgZGF0YXNpemUgPSBjb2Rlc2l6ZSA9IGNvZGVtYXNrID0g
Y2xlYXJfY29kZSA9IGF2YWlsID0gb2xkY29kZSA9IDA7Ci0gICAgICAgIGZpcnN0Y2hhciA9IDA7
Ci0gICAgICAgIGJpdHMgPSBkYXR1bSA9IDA7Ci0gICAgICAgIGlwYXNzID0gMDsKLSAgICAgICAg
cm93c19yZW1haW5pbmcgPSBpcm93ID0gMDsKLSAgICAgICAgcm93YnVmID0gcm93ZW5kID0gcm93
cCA9IDA7Ci0KLSAgICAgICAgeF9vZmZzZXQgPSB5X29mZnNldCA9IHdpZHRoID0gaGVpZ2h0ID0g
MDsKLSAgICAgICAgdHBpeGVsID0gMDsKLSAgICAgICAgZGlzcG9zYWxfbWV0aG9kID0gV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU5vdFNwZWNpZmllZDsKLQotICAgICAgICBsb2NhbF9jb2xv
cm1hcCA9IDA7Ci0gICAgICAgIGxvY2FsX2NvbG9ybWFwX3NpemUgPSAwOwotICAgICAgICBpc19s
b2NhbF9jb2xvcm1hcF9kZWZpbmVkID0gcHJvZ3Jlc3NpdmVfZGlzcGxheSA9IGlzX3RyYW5zcGFy
ZW50ID0gaW50ZXJsYWNlZCA9IGZhbHNlOwotCi0gICAgICAgIGRlbGF5X3RpbWUgPSAwOwotCi0g
ICAgICAgIHByZWZpeCA9IDA7Ci0gICAgICAgIHN1ZmZpeCA9IHN0YWNrID0gMDsKKyAgICBib29s
IGlzTG9jYWxDb2xvcm1hcERlZmluZWQgOiAxOworICAgIGJvb2wgcHJvZ3Jlc3NpdmVEaXNwbGF5
IDogMTsgLy8gSWYgdHJ1ZSwgZG8gSGFlYmVybGkgaW50ZXJsYWNlIGhhY2suCisgICAgYm9vbCBp
bnRlcmxhY2VkIDogMTsgLy8gVHJ1ZSwgaWYgc2NhbmxpbmVzIGFycml2ZSBpbnRlcmxhY2VkIG9y
ZGVyLgorICAgIGJvb2wgaXNUcmFuc3BhcmVudCA6IDE7IC8vIFRSVUUsIGlmIHRwaXhlbCBpcyB2
YWxpZC4KKworICAgIHVuc2lnbmVkIGRlbGF5VGltZTsgLy8gRGlzcGxheSB0aW1lLCBpbiBtaWxs
aXNlY29uZHMsIGZvciB0aGlzIGltYWdlIGluIGEgbXVsdGktaW1hZ2UgR0lGLgorCisgICAgdW5z
aWduZWQgc2hvcnQqIHByZWZpeDsgLy8gTFpXIGRlY29kaW5nIHRhYmxlcy4KKyAgICB1bnNpZ25l
ZCBjaGFyKiBzdWZmaXg7IC8vIExaVyBkZWNvZGluZyB0YWJsZXMuCisgICAgdW5zaWduZWQgY2hh
ciogc3RhY2s7IC8vIEJhc2Ugb2YgTFpXIGRlY29kZXIgc3RhY2suCisKKyAgICBHSUZGcmFtZUNv
bnRleHQoKQorICAgICAgICA6IHN0YWNrcCgwKQorICAgICAgICAsIGRhdGFzaXplKDApCisgICAg
ICAgICwgY29kZXNpemUoMCkKKyAgICAgICAgLCBjb2RlbWFzaygwKQorICAgICAgICAsIGNsZWFy
Q29kZSgwKQorICAgICAgICAsIGF2YWlsKDApCisgICAgICAgICwgb2xkY29kZSgwKQorICAgICAg
ICAsIGZpcnN0Y2hhcigwKQorICAgICAgICAsIGJpdHMoMCkKKyAgICAgICAgLCBkYXR1bSgwKQor
ICAgICAgICAsIGlwYXNzKDApCisgICAgICAgICwgcm93c1JlbWFpbmluZygwKQorICAgICAgICAs
IGlyb3coMCkKKyAgICAgICAgLCByb3didWYoMCkKKyAgICAgICAgLCByb3dlbmQoMCkKKyAgICAg
ICAgLCByb3dwKDApCisgICAgICAgICwgeE9mZnNldCgwKQorICAgICAgICAsIHlPZmZzZXQoMCkK
KyAgICAgICAgLCB3aWR0aCgwKQorICAgICAgICAsIGhlaWdodCgwKQorICAgICAgICAsIHRwaXhl
bCgwKQorICAgICAgICAsIGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bv
c2VOb3RTcGVjaWZpZWQpCisgICAgICAgICwgbG9jYWxDb2xvcm1hcCgwKQorICAgICAgICAsIGxv
Y2FsQ29sb3JtYXBTaXplKDApCisgICAgICAgICwgaXNMb2NhbENvbG9ybWFwRGVmaW5lZChmYWxz
ZSkKKyAgICAgICAgLCBwcm9ncmVzc2l2ZURpc3BsYXkoZmFsc2UpCisgICAgICAgICwgaW50ZXJs
YWNlZChmYWxzZSkKKyAgICAgICAgLCBpc1RyYW5zcGFyZW50KGZhbHNlKQorICAgICAgICAsIGRl
bGF5VGltZSgwKQorICAgICAgICAsIHByZWZpeCgwKQorICAgICAgICAsIHN1ZmZpeCgwKQorICAg
ICAgICAsIHN0YWNrKDApCisgICAgewogICAgIH0KICAgICAKLSAgICB+R0lGRnJhbWVSZWFkZXIo
KSB7Ci0gICAgICAgIGRlbGV0ZSBbXXJvd2J1ZjsKLSAgICAgICAgZGVsZXRlIFtdbG9jYWxfY29s
b3JtYXA7Ci0gICAgICAgIGRlbGV0ZSBbXXByZWZpeDsKLSAgICAgICAgZGVsZXRlIFtdc3VmZml4
OwotICAgICAgICBkZWxldGUgW11zdGFjazsKKyAgICB+R0lGRnJhbWVDb250ZXh0KCkKKyAgICB7
CisgICAgICAgIGRlbGV0ZSBbXSByb3didWY7CisgICAgICAgIGRlbGV0ZSBbXSBsb2NhbENvbG9y
bWFwOworICAgICAgICBkZWxldGUgW10gcHJlZml4OworICAgICAgICBkZWxldGUgW10gc3VmZml4
OworICAgICAgICBkZWxldGUgW10gc3RhY2s7CiAgICAgfQogfTsKIAotc3RydWN0IEdJRkltYWdl
UmVhZGVyIHsKK2NsYXNzIEdJRkltYWdlUmVhZGVyIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKIHB1YmxpYzoKLSAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudHB0cjsK
LSAgICAvKiBQYXJzaW5nIHN0YXRlIG1hY2hpbmUgKi8KLSAgICBnc3RhdGUgc3RhdGU7ICAgICAg
ICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgZGVjb2RlciBtYXN0ZXIgc3RhdGUgKi8KLSAgICB1
bnNpZ25lZCBieXRlc190b19jb25zdW1lOyAgICAgICAgIC8qIE51bWJlciBvZiBieXRlcyB0byBh
Y2N1bXVsYXRlICovCi0gICAgdW5zaWduZWQgYnl0ZXNfaW5faG9sZDsgICAgICAgICAgICAvKiBi
eXRlcyBhY2N1bXVsYXRlZCBzbyBmYXIqLwotICAgIHVuc2lnbmVkIGNoYXIgaG9sZFtNQVhfSE9M
RF9TSVpFXTsgLyogQWNjdW11bGF0aW9uIGJ1ZmZlciAqLwotICAgIHVuc2lnbmVkIGNoYXIqIGds
b2JhbF9jb2xvcm1hcDsgICAgLyogKDMqIE1BWF9DT0xPUlMgaW4gc2l6ZSkgRGVmYXVsdCBjb2xv
cm1hcCBpZiBsb2NhbCBub3Qgc3VwcGxpZWQsIDMgYnl0ZXMgZm9yIGVhY2ggY29sb3IgICovCi0g
ICAgCi0gICAgIC8qIEdsb2JhbCAobXVsdGktaW1hZ2UpIHN0YXRlICovCi0gICAgaW50IHNjcmVl
bl9iZ2NvbG9yOyAgICAgICAgIC8qIExvZ2ljYWwgc2NyZWVuIGJhY2tncm91bmQgY29sb3IgKi8K
LSAgICBpbnQgdmVyc2lvbjsgICAgICAgICAgICAgICAgLyogRWl0aGVyIDg5IGZvciBHSUY4OSBv
ciA4NyBmb3IgR0lGODcgKi8KLSAgICB1bnNpZ25lZCBzY3JlZW5fd2lkdGg7ICAgICAgIC8qIExv
Z2ljYWwgc2NyZWVuIHdpZHRoICYgaGVpZ2h0ICovCi0gICAgdW5zaWduZWQgc2NyZWVuX2hlaWdo
dDsKLSAgICBpbnQgZ2xvYmFsX2NvbG9ybWFwX3NpemU7ICAgLyogU2l6ZSBvZiBnbG9iYWwgY29s
b3JtYXAgYXJyYXkuICovCi0gICAgdW5zaWduZWQgaW1hZ2VzX2RlY29kZWQ7ICAgIC8qIENvdW50
cyBjb21wbGV0ZWQgZnJhbWVzIGZvciBhbmltYXRlZCBHSUZzICovCi0gICAgaW50IGltYWdlc19j
b3VudDsgICAgICAgICAgIC8qIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAoaW5jbHVk
aW5nIGluY29tcGxldGUgZnJhbWVzKSAqLwotICAgIGludCBsb29wX2NvdW50OyAgICAgICAgICAg
ICAvKiBOZXRzY2FwZSBzcGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJvbAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGFuaW1hdGlvbiBsb29w
cyBhIEdJRiByZW5kZXJzLiAqLwotICAgIAotICAgIC8vIE5vdCByZWFsbHkgZ2xvYmFsLCBidXQg
Y29udmVuaWVudCB0byBsb2NhdGUgaGVyZS4KLSAgICBpbnQgY291bnQ7ICAgICAgICAgICAgICAg
ICAgLyogUmVtYWluaW5nICMgYnl0ZXMgaW4gc3ViLWJsb2NrICovCi0gICAgCi0gICAgR0lGRnJh
bWVSZWFkZXIqIGZyYW1lX3JlYWRlcjsKLQotICAgIEdJRkltYWdlUmVhZGVyKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2RlciogY2xpZW50ID0gMCkgewotICAgICAgICBjbGllbnRwdHIgPSBjbGllbnQ7
Ci0gICAgICAgIHN0YXRlID0gZ2lmX3R5cGU7Ci0gICAgICAgIGJ5dGVzX3RvX2NvbnN1bWUgPSA2
OwotICAgICAgICBieXRlc19pbl9ob2xkID0gMDsKLSAgICAgICAgZnJhbWVfcmVhZGVyID0gMDsK
LSAgICAgICAgZ2xvYmFsX2NvbG9ybWFwID0gMDsKLQotICAgICAgICBzY3JlZW5fYmdjb2xvciA9
IHZlcnNpb24gPSAwOwotICAgICAgICBzY3JlZW5fd2lkdGggPSBzY3JlZW5faGVpZ2h0ID0gMDsK
LSAgICAgICAgZ2xvYmFsX2NvbG9ybWFwX3NpemUgPSBpbWFnZXNfZGVjb2RlZCA9IGltYWdlc19j
b3VudCA9IDA7Ci0gICAgICAgIGxvb3BfY291bnQgPSBjTG9vcENvdW50Tm90U2VlbjsKLSAgICAg
ICAgY291bnQgPSAwOworICAgIEdJRkltYWdlUmVhZGVyKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
ciogY2xpZW50ID0gMCkKKyAgICAgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgICAgICwgbV9z
dGF0ZShHSUZUeXBlKQorICAgICAgICAsIG1fYnl0ZXNUb0NvbnN1bWUoNikKKyAgICAgICAgLCBt
X2J5dGVzSW5Ib2xkKDApCisgICAgICAgICwgbV9nbG9iYWxDb2xvcm1hcCgwKQorICAgICAgICAs
IG1fc2NyZWVuQmdjb2xvcigwKQorICAgICAgICAsIG1fdmVyc2lvbigwKQorICAgICAgICAsIG1f
c2NyZWVuV2lkdGgoMCkKKyAgICAgICAgLCBtX3NjcmVlbkhlaWdodCgwKQorICAgICAgICAsIG1f
Z2xvYmFsQ29sb3JtYXBTaXplKDApCisgICAgICAgICwgbV9pbWFnZXNEZWNvZGVkKDApCisgICAg
ICAgICwgbV9pbWFnZXNDb3VudCgwKQorICAgICAgICAsIG1fbG9vcENvdW50KGNMb29wQ291bnRO
b3RTZWVuKQorICAgICAgICAsIG1fY291bnQoMCkKKyAgICAgICAgLCBtX2ZyYW1lQ29udGV4dCgw
KQorICAgIHsKICAgICB9CiAKLSAgICB+R0lGSW1hZ2VSZWFkZXIoKSB7Ci0gICAgICAgIGRlbGV0
ZSBbXWdsb2JhbF9jb2xvcm1hcDsKLSAgICAgICAgZ2xvYmFsX2NvbG9ybWFwID0gMDsKLSAgICAg
ICAgZGVsZXRlIGZyYW1lX3JlYWRlcjsKLSAgICAgICAgZnJhbWVfcmVhZGVyID0gMDsKKyAgICB+
R0lGSW1hZ2VSZWFkZXIoKQorICAgIHsKKyAgICAgICAgZGVsZXRlIFtdIG1fZ2xvYmFsQ29sb3Jt
YXA7CisgICAgICAgIG1fZ2xvYmFsQ29sb3JtYXAgPSAwOworCisgICAgICAgIGRlbGV0ZSBtX2Zy
YW1lQ29udGV4dDsKKyAgICAgICAgbV9mcmFtZUNvbnRleHQgPSAwOwogICAgIH0KIAotICAgIGJv
b2wgcmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmLCB1bnNpZ25lZCBpbnQgbnVtYnl0ZXMs
IAotICAgICAgICAgICAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5
ID0gV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksIHVuc2lnbmVkIGhhbHRB
dEZyYW1lID0gLTEpOworICAgIGJvb2wgcmVhZChjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYsIHVu
c2lnbmVkIG51bWJ5dGVzLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5ID0gV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1l
ID0gLTEpOworCisgICAgaW50IGltYWdlc0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZXND
b3VudDsgfQorICAgIGludCBsb29wQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2xvb3BDb3VudDsg
fQorICAgIHVuc2lnbmVkIGNoYXIqIGdsb2JhbENvbG9ybWFwKCkgY29uc3QgeyByZXR1cm4gbV9n
bG9iYWxDb2xvcm1hcDsgfQorICAgIGludCBnbG9iYWxDb2xvcm1hcFNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2dsb2JhbENvbG9ybWFwU2l6ZTsgfQorICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCog
ZnJhbWVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUNvbnRleHQ7IH0KIAogcHJpdmF0
ZToKLSAgICBib29sIG91dHB1dF9yb3coKTsKLSAgICBib29sIGRvX2x6dyhjb25zdCB1bnNpZ25l
ZCBjaGFyICpxKTsKKyAgICBib29sIG91dHB1dFJvdygpOworICAgIGJvb2wgZG9MWlcoY29uc3Qg
dW5zaWduZWQgY2hhciAqcSk7CisKKyAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIG1fY2xp
ZW50OworCisgICAgLy8gUGFyc2luZyBzdGF0ZSBtYWNoaW5lLgorICAgIEdJRlN0YXRlIG1fc3Rh
dGU7IC8vIEN1cnJlbnQgZGVjb2RlciBtYXN0ZXIgc3RhdGUuCisgICAgdW5zaWduZWQgbV9ieXRl
c1RvQ29uc3VtZTsgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGFjY3VtdWxhdGUuCisgICAgdW5zaWdu
ZWQgbV9ieXRlc0luSG9sZDsgLy8gYnl0ZXMgYWNjdW11bGF0ZWQgc28gZmFyLgorICAgIHVuc2ln
bmVkIGNoYXIgbV9ob2xkW01BWF9IT0xEX1NJWkVdOyAvLyBBY2N1bXVsYXRpb24gYnVmZmVyLgor
ICAgIHVuc2lnbmVkIGNoYXIqIG1fZ2xvYmFsQ29sb3JtYXA7IC8vICgzKiBNQVhfQ09MT1JTIGlu
IHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwgbm90IHN1cHBsaWVkLCAzIGJ5dGVzIGZv
ciBlYWNoIGNvbG9yLgorICAgIAorICAgIC8vIEdsb2JhbCAobXVsdGktaW1hZ2UpIHN0YXRlLgor
ICAgIGludCBtX3NjcmVlbkJnY29sb3I7IC8vIExvZ2ljYWwgc2NyZWVuIGJhY2tncm91bmQgY29s
b3IuCisgICAgaW50IG1fdmVyc2lvbjsgLy8gRWl0aGVyIDg5IGZvciBHSUY4OSBvciA4NyBmb3Ig
R0lGODcuCisgICAgdW5zaWduZWQgbV9zY3JlZW5XaWR0aDsgLy8gTG9naWNhbCBzY3JlZW4gd2lk
dGggJiBoZWlnaHQuCisgICAgdW5zaWduZWQgbV9zY3JlZW5IZWlnaHQ7CisgICAgaW50IG1fZ2xv
YmFsQ29sb3JtYXBTaXplOyAvLyBTaXplIG9mIGdsb2JhbCBjb2xvcm1hcCBhcnJheS4KKyAgICB1
bnNpZ25lZCBtX2ltYWdlc0RlY29kZWQ7IC8vIENvdW50cyBjb21wbGV0ZWQgZnJhbWVzIGZvciBh
bmltYXRlZCBHSUZzLgorICAgIGludCBtX2ltYWdlc0NvdW50OyAvLyBDb3VudGVkIGFsbCBmcmFt
ZXMgc2VlbiBzbyBmYXIgKGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1lcykuCisgICAgaW50IG1f
bG9vcENvdW50OyAvLyBOZXRzY2FwZSBzcGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJv
bCB0aGUgbnVtYmVyIG9mIGFuaW1hdGlvbiBsb29wcyBhIEdJRiByZW5kZXJzLgorICAgIAorICAg
IC8vIE5vdCByZWFsbHkgZ2xvYmFsLCBidXQgY29udmVuaWVudCB0byBsb2NhdGUgaGVyZS4KKyAg
ICBpbnQgbV9jb3VudDsgLy8gUmVtYWluaW5nICMgYnl0ZXMgaW4gc3ViLWJsb2NrLgorICAgIAor
ICAgIEdJRkZyYW1lQ29udGV4dCogbV9mcmFtZUNvbnRleHQ7CiB9OwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187644</attachid>
            <date>2013-02-11 13:04:53 -0800</date>
            <delta_ts>2013-02-11 14:18:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109007-20130211130123.patch</filename>
            <type>text/plain</type>
            <size>78989</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQ4NmY5NzQxOTJmYTRm
NjZlNGYxYTdlOWI2NjIwMmY2YjQzNWY3ZS4uZGU5M2E1YzAyMjU5OTI0OTNlNWY3OGMwNmI2NDcz
MGExZjUyMDIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAyLTExICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IGNvZGUgc3R5bGUgdmlv
bGF0aW9ucyBpbiBHSUZJbWFnZVJlYWRlci57Y2N8aH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTAwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgaXMganVzdCBhIHN0eWxlIGNsZWFuIHVwIGZv
ciBHSUZJbWFnZVJlYWRlci57Y2N8aH0uCisKKyAgICAgICAgVGhlcmUncyBnb2luZyB0byBiZSBh
IGxvdCBjaGFuZ2VzIGluIHRoZXNlIHR3byBmaWxlcyBhbmQgc3R5bGUgY2hlY2sKKyAgICAgICAg
d2lsbCBhZGQgYSBsb3Qgb2Ygbm9pc2UgaW4gbGF0ZXIgcmV2aWV3cy4gRml4IHN0eWxlIHByb2Js
ZW1zIGZpcnN0LgorCisgICAgICAgIFRoZXJlIGlzIG5vIGNoYW5nZSBpbiBsb2dpYyBhdCBhbGwu
IEp1c3Qgc3R5bGUgZml4ZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICog
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKEdJRkltYWdlUmVhZGVy
OjpvdXRwdXRSb3cpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKToKKyAgICAgICAg
KEdJRkltYWdlUmVhZGVyOjpyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dCk6CisgICAg
ICAgIChHSUZGcmFtZUNvbnRleHQ6OkdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZGcmFt
ZUNvbnRleHQ6On5HSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OkdJ
RkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjp+R0lGSW1hZ2VSZWFkZXIp
OgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6Omlt
YWdlc0NvdW50KToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpsb29wQ291bnQpOgorICAgICAg
ICAoR0lGSW1hZ2VSZWFkZXI6Omdsb2JhbENvbG9ybWFwKToKKyAgICAgICAgKEdJRkltYWdlUmVh
ZGVyOjpnbG9iYWxDb2xvcm1hcFNpemUpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmZyYW1l
Q29udGV4dCk6CisKIDIwMTMtMDItMDUgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFtWOF0gUmVtb3ZlIGRlcHJlY2F0ZWRWOFN0cmluZygpIGFuZCBkZXBy
ZWNhdGVkVjhJbnRlZ2VyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggOGZjNGE5
YTUzMDlmZjgxOWQxZjg5OGIzMzgxYTkxZjc3OTEyYjFlNS4uMGNiMjI4ODVjZWIzZDZiMTZiMjM1
ZjgxOWI5OGEyNWI5M2JhZmQ4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTg3
LDggKzg3LDggQEAgc2l6ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiAgICAgICAg
IEdJRkltYWdlUmVhZGVyIHJlYWRlcigwKTsKICAgICAgICAgcmVhZGVyLnJlYWQoKGNvbnN0IHVu
c2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwgR0lGRnJhbWVDb3Vu
dFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpKTsKICAgICAgICAgbV9hbHJlYWR5U2Nh
bm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IHRydWU7Ci0gICAgICAgIG1fZnJhbWVCdWZmZXJD
YWNoZS5yZXNpemUocmVhZGVyLmltYWdlc19jb3VudCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgcmVhZGVyLmltYWdlc19jb3VudDsgKytpKQorICAgICAgICBtX2ZyYW1lQnVmZmVyQ2Fj
aGUucmVzaXplKHJlYWRlci5pbWFnZXNDb3VudCgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByZWFkZXIuaW1hZ2VzQ291bnQoKTsgKytpKQogICAgICAgICAgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlW2ldLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKICAgICB9
CiAKQEAgLTExNiw4ICsxMTYsOCBAQCBpbnQgR0lGSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291
bnQoKSBjb25zdAogICAgIC8vIHNob3VsZCBjb250aW51ZSB0byB0cmVhdCBpdCBhcyBhICJsb29w
IG9uY2UiIGFuaW1hdGlvbi4gIFdlIGRvbid0IG5lZWQKICAgICAvLyBzcGVjaWFsIGNvZGUgaGVy
ZSBlaXRoZXIsIGJlY2F1c2UgaW4gdGhpcyBjYXNlIHdlJ2xsIG5ldmVyIGNoYW5nZQogICAgIC8v
IHxtX3JlcGV0aXRpb25Db3VudHwgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZS4KLSAgICBpZiAobV9y
ZWFkZXIgJiYgKG1fcmVhZGVyLT5sb29wX2NvdW50ICE9IGNMb29wQ291bnROb3RTZWVuKSkKLSAg
ICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+bG9vcF9jb3VudDsKKyAgICBpZiAo
bV9yZWFkZXIgJiYgKG1fcmVhZGVyLT5sb29wQ291bnQoKSAhPSBjTG9vcENvdW50Tm90U2Vlbikp
CisgICAgICAgIG1fcmVwZXRpdGlvbkNvdW50ID0gbV9yZWFkZXItPmxvb3BDb3VudCgpOwogICAg
IHJldHVybiBtX3JlcGV0aXRpb25Db3VudDsKIH0KIApAQCAtMTk4LDI5ICsxOTgsMjkgQEAgdm9p
ZCBHSUZJbWFnZURlY29kZXI6OmRlY29kaW5nSGFsdGVkKHVuc2lnbmVkIGJ5dGVzTGVmdCkKIAog
Ym9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgs
IHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25l
ZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQ
aXhlbHMpCiB7Ci0gICAgY29uc3QgR0lGRnJhbWVSZWFkZXIqIGZyYW1lUmVhZGVyID0gbV9yZWFk
ZXItPmZyYW1lX3JlYWRlcjsKKyAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4
dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRleHQoKTsKICAgICAvLyBUaGUgcGl4ZWwgZGF0YSBhbmQg
Y29vcmRpbmF0ZXMgc3VwcGxpZWQgdG8gdXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBmcmFtZSdzCiAg
ICAgLy8gb3JpZ2luIHdpdGhpbiB0aGUgZW50aXJlIGltYWdlIHNpemUsIGkuZS4KLSAgICAvLyAo
ZnJhbWVSZWFkZXItPnhfb2Zmc2V0LCBmcmFtZVJlYWRlci0+eV9vZmZzZXQpLiAgVGhlcmUgaXMg
bm8gZ3VhcmFudGVlCi0gICAgLy8gdGhhdCAocm93RW5kIC0gcm93QnVmZmVyKSA9PSAoc2l6ZSgp
LndpZHRoKCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQpLCBzbworICAgIC8vIChmcmFtZUNvbnRl
eHQtPnhPZmZzZXQsIGZyYW1lQ29udGV4dC0+eU9mZnNldCkuIFRoZXJlIGlzIG5vIGd1YXJhbnRl
ZQorICAgIC8vIHRoYXQgKHJvd0VuZCAtIHJvd0J1ZmZlcikgPT0gKHNpemUoKS53aWR0aCgpIC0g
ZnJhbWVDb250ZXh0LT54T2Zmc2V0KSwgc28KICAgICAvLyB3ZSBtdXN0IGVuc3VyZSB3ZSBkb24n
dCBydW4gb2ZmIHRoZSBlbmQgb2YgZWl0aGVyIHRoZSBzb3VyY2UgZGF0YSBvciB0aGUKICAgICAv
LyByb3cncyBYLWNvb3JkaW5hdGVzLgotICAgIGludCB4QmVnaW4gPSB1cHBlckJvdW5kU2NhbGVk
WChmcmFtZVJlYWRlci0+eF9vZmZzZXQpOwotICAgIGludCB5QmVnaW4gPSB1cHBlckJvdW5kU2Nh
bGVkWShmcmFtZVJlYWRlci0+eV9vZmZzZXQgKyByb3dOdW1iZXIpOwotICAgIGludCB4RW5kID0g
bG93ZXJCb3VuZFNjYWxlZFgoc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50PihmcmFtZVJlYWRlci0+
eF9vZmZzZXQgKyAocm93RW5kIC0gcm93QnVmZmVyKSksIHNpemUoKS53aWR0aCgpKSAtIDEsIHhC
ZWdpbiArIDEpICsgMTsKLSAgICBpbnQgeUVuZCA9IGxvd2VyQm91bmRTY2FsZWRZKHN0ZDo6bWlu
KHN0YXRpY19jYXN0PGludD4oZnJhbWVSZWFkZXItPnlfb2Zmc2V0ICsgcm93TnVtYmVyICsgcmVw
ZWF0Q291bnQpLCBzaXplKCkuaGVpZ2h0KCkpIC0gMSwgeUJlZ2luICsgMSkgKyAxOworICAgIGlu
dCB4QmVnaW4gPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZUNvbnRleHQtPnhPZmZzZXQpOworICAg
IGludCB5QmVnaW4gPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZUNvbnRleHQtPnlPZmZzZXQgKyBy
b3dOdW1iZXIpOworICAgIGludCB4RW5kID0gbG93ZXJCb3VuZFNjYWxlZFgoc3RkOjptaW4oc3Rh
dGljX2Nhc3Q8aW50PihmcmFtZUNvbnRleHQtPnhPZmZzZXQgKyAocm93RW5kIC0gcm93QnVmZmVy
KSksIHNpemUoKS53aWR0aCgpKSAtIDEsIHhCZWdpbiArIDEpICsgMTsKKyAgICBpbnQgeUVuZCA9
IGxvd2VyQm91bmRTY2FsZWRZKHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4oZnJhbWVDb250ZXh0
LT55T2Zmc2V0ICsgcm93TnVtYmVyICsgcmVwZWF0Q291bnQpLCBzaXplKCkuaGVpZ2h0KCkpIC0g
MSwgeUJlZ2luICsgMSkgKyAxOwogICAgIGlmICghcm93QnVmZmVyIHx8ICh4QmVnaW4gPCAwKSB8
fCAoeUJlZ2luIDwgMCkgfHwgKHhFbmQgPD0geEJlZ2luKSB8fCAoeUVuZCA8PSB5QmVnaW4pKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIC8vIEdldCB0aGUgY29sb3JtYXAuCiAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogY29sb3JNYXA7CiAgICAgdW5zaWduZWQgY29sb3JNYXBTaXplOwot
ICAgIGlmIChmcmFtZVJlYWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCkgewotICAgICAg
ICBjb2xvck1hcCA9IGZyYW1lUmVhZGVyLT5sb2NhbF9jb2xvcm1hcDsKLSAgICAgICAgY29sb3JN
YXBTaXplID0gKHVuc2lnbmVkKWZyYW1lUmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9zaXplOworICAg
IGlmIChmcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQpIHsKKyAgICAgICAgY29s
b3JNYXAgPSBmcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXA7CisgICAgICAgIGNvbG9yTWFwU2l6
ZSA9ICh1bnNpZ25lZClmcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBTaXplOwogICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGNvbG9yTWFwID0gbV9yZWFkZXItPmdsb2JhbF9jb2xvcm1hcDsKLSAgICAg
ICAgY29sb3JNYXBTaXplID0gbV9yZWFkZXItPmdsb2JhbF9jb2xvcm1hcF9zaXplOworICAgICAg
ICBjb2xvck1hcCA9IG1fcmVhZGVyLT5nbG9iYWxDb2xvcm1hcCgpOworICAgICAgICBjb2xvck1h
cFNpemUgPSBtX3JlYWRlci0+Z2xvYmFsQ29sb3JtYXBTaXplKCk7CiAgICAgfQogICAgIGlmICgh
Y29sb3JNYXApCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMzLDggKzIzMyw4IEBAIGJvb2wg
R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNp
Z25lZCBjaGFyKiByb3dCdWZmCiAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRk
cmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUg
cm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4
QmVnaW47IHggPCB4RW5kOyArK3gpIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3Vy
Y2VWYWx1ZSA9ICoocm93QnVmZmVyICsgKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDog
eCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQpOwotICAgICAgICBpZiAoKCFmcmFtZVJlYWRlci0+
aXNfdHJhbnNwYXJlbnQgfHwgKHNvdXJjZVZhbHVlICE9IGZyYW1lUmVhZGVyLT50cGl4ZWwpKSAm
JiAoc291cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGNoYXIgc291cmNlVmFsdWUgPSAqKHJvd0J1ZmZlciArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29s
dW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0KTsKKyAgICAgICAgaWYgKCghZnJh
bWVDb250ZXh0LT5pc1RyYW5zcGFyZW50IHx8IChzb3VyY2VWYWx1ZSAhPSBmcmFtZUNvbnRleHQt
PnRwaXhlbCkpICYmIChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFwU2l6ZSkpIHsKICAgICAgICAgICAg
IGNvbnN0IHNpemVfdCBjb2xvckluZGV4ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3VyY2VWYWx1
ZSkgKiAzOwogICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoY3VycmVudEFkZHJlc3MsIGNvbG9y
TWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2NvbG9y
SW5kZXggKyAyXSwgMjU1KTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMzMSwxNCArMzMxLDE0IEBA
IHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1
ZXJ5IHF1ZXJ5KQogYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25l
ZCBmcmFtZUluZGV4KQogewogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIHJlY3QgaW4gb3Vy
IGJ1ZmZlci4KLSAgICBjb25zdCBHSUZGcmFtZVJlYWRlciogZnJhbWVSZWFkZXIgPSBtX3JlYWRl
ci0+ZnJhbWVfcmVhZGVyOwotICAgIEludFJlY3QgZnJhbWVSZWN0KGZyYW1lUmVhZGVyLT54X29m
ZnNldCwgZnJhbWVSZWFkZXItPnlfb2Zmc2V0LCBmcmFtZVJlYWRlci0+d2lkdGgsIGZyYW1lUmVh
ZGVyLT5oZWlnaHQpOworICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0ID0g
bV9yZWFkZXItPmZyYW1lQ29udGV4dCgpOworICAgIEludFJlY3QgZnJhbWVSZWN0KGZyYW1lQ29u
dGV4dC0+eE9mZnNldCwgZnJhbWVDb250ZXh0LT55T2Zmc2V0LCBmcmFtZUNvbnRleHQtPndpZHRo
LCBmcmFtZUNvbnRleHQtPmhlaWdodCk7CiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGZyYW1lUmVj
dCBkb2Vzbid0IGV4dGVuZCBvdXRzaWRlIHRoZSBidWZmZXIuCiAgICAgaWYgKGZyYW1lUmVjdC5t
YXhYKCkgPiBzaXplKCkud2lkdGgoKSkKLSAgICAgICAgZnJhbWVSZWN0LnNldFdpZHRoKHNpemUo
KS53aWR0aCgpIC0gZnJhbWVSZWFkZXItPnhfb2Zmc2V0KTsKKyAgICAgICAgZnJhbWVSZWN0LnNl
dFdpZHRoKHNpemUoKS53aWR0aCgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0KTsKICAgICBpZiAo
ZnJhbWVSZWN0Lm1heFkoKSA+IHNpemUoKS5oZWlnaHQoKSkKLSAgICAgICAgZnJhbWVSZWN0LnNl
dEhlaWdodChzaXplKCkuaGVpZ2h0KCkgLSBmcmFtZVJlYWRlci0+eV9vZmZzZXQpOworICAgICAg
ICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lQ29udGV4dC0+eU9m
ZnNldCk7CiAKICAgICBJbWFnZUZyYW1lKiBjb25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNh
Y2hlW2ZyYW1lSW5kZXhdOwogICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVS
ZWN0LngoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAppbmRleCA3NDE0ZTk4MTg1OTA3YzBm
Njg3YjM3YzkzNTA1MzE5MjdmZmI4ODNiLi42OTlkM2M0N2ZiNDRhZjJjODI0ZmE1OWIwM2I0MmY1
MTA2NjBlZWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKQEAgLTgxLDg2NCArODEsODE5
IEBAIG1haWxpbmcgYWRkcmVzcy4KIAogdXNpbmcgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOwog
Ci0vLyBEZWZpbmUgdGhlIE1vemlsbGEgbWFjcm8gc2V0dXAgc28gdGhhdCB3ZSBjYW4gbGVhdmUg
dGhlIG1hY3JvcyBhbG9uZS4KLSNkZWZpbmUgUFJfQkVHSU5fTUFDUk8gIGRvIHsKLSNkZWZpbmUg
UFJfRU5EX01BQ1JPICAgIH0gd2hpbGUgKDApCi0KLS8qCi0gKiBHRVROKG4sIHMpIHJlcXVlc3Rz
IGF0IGxlYXN0ICduJyBieXRlcyBhdmFpbGFibGUgZnJvbSAncScsIGF0IHN0YXJ0IG9mIHN0YXRl
ICdzJwotICoKLSAqIE5vdGUsIHRoZSBob2xkIHdpbGwgbmV2ZXIgbmVlZCB0byBiZSBiaWdnZXIg
dGhhbiAyNTYgYnl0ZXMgdG8gZ2F0aGVyIHVwIGluIHRoZSBob2xkLAotICogYXMgZWFjaCBHSUYg
YmxvY2sgKGV4Y2VwdCBjb2xvcm1hcHMpIGNhbiBuZXZlciBiZSBiaWdnZXIgdGhhbiAyNTYgYnl0
ZXMuCi0gKiBDb2xvcm1hcHMgYXJlIGRpcmVjdGx5IGNvcGllZCBpbiB0aGUgcmVzcC4gZ2xvYmFs
X2NvbG9ybWFwIG9yIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBsb2NhbF9jb2xvcm1hcC4KLSAqIFNv
IGEgZml4ZWQgYnVmZmVyIGluIEdJRkltYWdlUmVhZGVyIGlzIGdvb2QgZW5vdWdoLgotICogVGhp
cyBidWZmZXIgaXMgb25seSBuZWVkZWQgdG8gY29weSBsZWZ0LW92ZXIgZGF0YSBmcm9tIG9uZSBH
aWZXcml0ZSBjYWxsIHRvIHRoZSBuZXh0Ci0gKi8KLSNkZWZpbmUgR0VUTihuLHMpICAgICAgICAg
ICAgICAgICAgICBcCi0gIFBSX0JFR0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGJ5dGVzX3RvX2NvbnN1bWUgPSAobik7ICAgICAgXAotICAgIHN0YXRlID0gKHMpOyAgICAgICAg
ICAgICAgICAgXAotICBQUl9FTkRfTUFDUk8KLQotLyogR2V0IGEgMTYtYml0IHZhbHVlIHN0b3Jl
ZCBpbiBsaXR0bGUtZW5kaWFuIGZvcm1hdCAqLworLy8gR0VUTihuLCBzKSByZXF1ZXN0cyBhdCBs
ZWFzdCAnbicgYnl0ZXMgYXZhaWxhYmxlIGZyb20gJ3EnLCBhdCBzdGFydCBvZiBzdGF0ZSAncycu
CisvLworLy8gTm90ZSwgdGhlIGhvbGQgd2lsbCBuZXZlciBuZWVkIHRvIGJlIGJpZ2dlciB0aGFu
IDI1NiBieXRlcyB0byBnYXRoZXIgdXAgaW4gdGhlIGhvbGQsCisvLyBhcyBlYWNoIEdJRiBibG9j
ayAoZXhjZXB0IGNvbG9ybWFwcykgY2FuIG5ldmVyIGJlIGJpZ2dlciB0aGFuIDI1NiBieXRlcy4K
Ky8vIENvbG9ybWFwcyBhcmUgZGlyZWN0bHkgY29waWVkIGluIHRoZSByZXNwLiBnbG9iYWxfY29s
b3JtYXAgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxvY2FsX2NvbG9ybWFwLgorLy8gU28gYSBm
aXhlZCBidWZmZXIgaW4gR0lGSW1hZ2VSZWFkZXIgaXMgZ29vZCBlbm91Z2guCisvLyBUaGlzIGJ1
ZmZlciBpcyBvbmx5IG5lZWRlZCB0byBjb3B5IGxlZnQtb3ZlciBkYXRhIGZyb20gb25lIEdpZldy
aXRlIGNhbGwgdG8gdGhlIG5leHQKKyNkZWZpbmUgR0VUTihuLCBzKSBcCisgICAgZG8geyBcCisg
ICAgICAgIG1fYnl0ZXNUb0NvbnN1bWUgPSAobik7IFwKKyAgICAgICAgbV9zdGF0ZSA9IChzKTsg
XAorICAgIH0gd2hpbGUgKDApCisKKy8vIEdldCBhIDE2LWJpdCB2YWx1ZSBzdG9yZWQgaW4gbGl0
dGxlLWVuZGlhbiBmb3JtYXQuCiAjZGVmaW5lIEdFVElOVDE2KHApICAgKChwKVsxXTw8OHwocClb
MF0pCiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAvLyBTZW5kIHRoZSBkYXRhIHRvIHRoZSBk
aXNwbGF5IGZyb250LWVuZC4KLWJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dF9yb3coKQorYm9v
bCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0Um93KCkKIHsKLSAgR0lGRnJhbWVSZWFkZXIqIGdzID0g
ZnJhbWVfcmVhZGVyOwotCi0gIGludCBkcm93X3N0YXJ0LCBkcm93X2VuZDsKLQotICBkcm93X3N0
YXJ0ID0gZHJvd19lbmQgPSBncy0+aXJvdzsKLQotICAvKgotICAgKiBIYWViZXJsaS1pbnNwaXJl
ZCBoYWNrIGZvciBpbnRlcmxhY2VkIEdJRnM6IFJlcGxpY2F0ZSBsaW5lcyB3aGlsZQotICAgKiBk
aXNwbGF5aW5nIHRvIGRpbWluaXNoIHRoZSAidmVuZXRpYW4tYmxpbmQiIGVmZmVjdCBhcyB0aGUg
aW1hZ2UgaXMKLSAgICogbG9hZGVkLiBBZGp1c3QgcGl4ZWwgdmVydGljYWwgcG9zaXRpb25zIHRv
IGF2b2lkIHRoZSBhcHBlYXJhbmNlIG9mIHRoZQotICAgKiBpbWFnZSBjcmF3bGluZyB1cCB0aGUg
c2NyZWVuIGFzIHN1Y2Nlc3NpdmUgcGFzc2VzIGFyZSBkcmF3bi4KLSAgICovCi0gIGlmIChncy0+
cHJvZ3Jlc3NpdmVfZGlzcGxheSAmJiBncy0+aW50ZXJsYWNlZCAmJiBncy0+aXBhc3MgPCA0KSB7
Ci0gICAgdW5zaWduZWQgcm93X2R1cCA9IDAsIHJvd19zaGlmdCA9IDA7Ci0KLSAgICBzd2l0Y2gg
KGdzLT5pcGFzcykgewotICAgIGNhc2UgMToKLSAgICAgIHJvd19kdXAgPSA3OwotICAgICAgcm93
X3NoaWZ0ID0gMzsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgIHJvd19kdXAgPSAz
OwotICAgICAgcm93X3NoaWZ0ID0gMTsKLSAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAg
IHJvd19kdXAgPSAxOwotICAgICAgcm93X3NoaWZ0ID0gMDsKLSAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICBicmVhazsKLSAgICB9CisgICAgaW50IGRyb3dTdGFydCA9IG1fZnJhbWVD
b250ZXh0LT5pcm93OworICAgIGludCBkcm93RW5kID0gbV9mcmFtZUNvbnRleHQtPmlyb3c7CisK
KyAgICAvLyBIYWViZXJsaS1pbnNwaXJlZCBoYWNrIGZvciBpbnRlcmxhY2VkIEdJRnM6IFJlcGxp
Y2F0ZSBsaW5lcyB3aGlsZQorICAgIC8vIGRpc3BsYXlpbmcgdG8gZGltaW5pc2ggdGhlICJ2ZW5l
dGlhbi1ibGluZCIgZWZmZWN0IGFzIHRoZSBpbWFnZSBpcworICAgIC8vIGxvYWRlZC4gQWRqdXN0
IHBpeGVsIHZlcnRpY2FsIHBvc2l0aW9ucyB0byBhdm9pZCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUK
KyAgICAvLyBpbWFnZSBjcmF3bGluZyB1cCB0aGUgc2NyZWVuIGFzIHN1Y2Nlc3NpdmUgcGFzc2Vz
IGFyZSBkcmF3bi4KKyAgICBpZiAobV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSAm
JiBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCAmJiBtX2ZyYW1lQ29udGV4dC0+aXBhc3MgPCA0
KSB7CisgICAgICAgIHVuc2lnbmVkIHJvd0R1cCA9IDA7CisgICAgICAgIHVuc2lnbmVkIHJvd1No
aWZ0ID0gMDsKKworICAgICAgICBzd2l0Y2ggKG1fZnJhbWVDb250ZXh0LT5pcGFzcykgeworICAg
ICAgICBjYXNlIDE6CisgICAgICAgICAgICByb3dEdXAgPSA3OworICAgICAgICAgICAgcm93U2hp
ZnQgPSAzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAg
IHJvd0R1cCA9IDM7CisgICAgICAgICAgICByb3dTaGlmdCA9IDE7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgcm93RHVwID0gMTsKKyAgICAgICAgICAg
IHJvd1NoaWZ0ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgIGRyb3dfc3RhcnQgLT0gcm93X3NoaWZ0
OwotICAgIGRyb3dfZW5kID0gZHJvd19zdGFydCArIHJvd19kdXA7CisgICAgICAgIGRyb3dTdGFy
dCAtPSByb3dTaGlmdDsKKyAgICAgICAgZHJvd0VuZCA9IGRyb3dTdGFydCArIHJvd0R1cDsKIAot
ICAgIC8qIEV4dGVuZCBpZiBib3R0b20gZWRnZSBpc24ndCBjb3ZlcmVkIGJlY2F1c2Ugb2YgdGhl
IHNoaWZ0IHVwd2FyZC4gKi8KLSAgICBpZiAoKChncy0+aGVpZ2h0IC0gMSkgLSBkcm93X2VuZCkg
PD0gcm93X3NoaWZ0KQotICAgICAgZHJvd19lbmQgPSBncy0+aGVpZ2h0IC0gMTsKKyAgICAgICAg
Ly8gRXh0ZW5kIGlmIGJvdHRvbSBlZGdlIGlzbid0IGNvdmVyZWQgYmVjYXVzZSBvZiB0aGUgc2hp
ZnQgdXB3YXJkLgorICAgICAgICBpZiAoKChtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0IC0gMSkgLSBk
cm93RW5kKSA8PSByb3dTaGlmdCkKKyAgICAgICAgICAgIGRyb3dFbmQgPSBtX2ZyYW1lQ29udGV4
dC0+aGVpZ2h0IC0gMTsKIAotICAgIC8qIENsYW1wIGZpcnN0IGFuZCBsYXN0IHJvd3MgdG8gdXBw
ZXIgYW5kIGxvd2VyIGVkZ2Ugb2YgaW1hZ2UuICovCi0gICAgaWYgKGRyb3dfc3RhcnQgPCAwKQot
ICAgICAgZHJvd19zdGFydCA9IDA7Ci0gICAgaWYgKCh1bnNpZ25lZClkcm93X2VuZCA+PSBncy0+
aGVpZ2h0KQotICAgICAgZHJvd19lbmQgPSBncy0+aGVpZ2h0IC0gMTsKLSAgfQorICAgICAgICAv
LyBDbGFtcCBmaXJzdCBhbmQgbGFzdCByb3dzIHRvIHVwcGVyIGFuZCBsb3dlciBlZGdlIG9mIGlt
YWdlLgorICAgICAgICBpZiAoZHJvd1N0YXJ0IDwgMCkKKyAgICAgICAgICAgIGRyb3dTdGFydCA9
IDA7CiAKLSAgLyogUHJvdGVjdCBhZ2FpbnN0IHRvbyBtdWNoIGltYWdlIGRhdGEgKi8KLSAgaWYg
KCh1bnNpZ25lZClkcm93X3N0YXJ0ID49IGdzLT5oZWlnaHQpCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICgodW5zaWduZWQpZHJvd0VuZCA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KQor
ICAgICAgICAgICAgZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQgLSAxOworICAgIH0K
IAotICAvLyBDQUxMQkFDSzogTGV0IHRoZSBjbGllbnQga25vdyB3ZSBoYXZlIGRlY29kZWQgYSBy
b3cuCi0gIGlmIChjbGllbnRwdHIgJiYgZnJhbWVfcmVhZGVyICYmCi0gICAgICAhY2xpZW50cHRy
LT5oYXZlRGVjb2RlZFJvdyhpbWFnZXNfY291bnQgLSAxLCBmcmFtZV9yZWFkZXItPnJvd2J1Ziwg
ZnJhbWVfcmVhZGVyLT5yb3dlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
cm93X3N0YXJ0LCBkcm93X2VuZCAtIGRyb3dfc3RhcnQgKyAxLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ3MtPnByb2dyZXNzaXZlX2Rpc3BsYXkgJiYgZ3MtPmludGVybGFjZWQg
JiYgZ3MtPmlwYXNzID4gMSkpCi0gICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFByb3RlY3QgYWdh
aW5zdCB0b28gbXVjaCBpbWFnZSBkYXRhLgorICAgIGlmICgodW5zaWduZWQpZHJvd1N0YXJ0ID49
IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gIGdzLT5y
b3dwID0gZ3MtPnJvd2J1ZjsKKyAgICAvLyBDQUxMQkFDSzogTGV0IHRoZSBjbGllbnQga25vdyB3
ZSBoYXZlIGRlY29kZWQgYSByb3cuCisgICAgaWYgKG1fY2xpZW50ICYmIG1fZnJhbWVDb250ZXh0
CisgICAgICAgICYmICFtX2NsaWVudC0+aGF2ZURlY29kZWRSb3cobV9pbWFnZXNDb3VudCAtIDEs
IG1fZnJhbWVDb250ZXh0LT5yb3didWYsIG1fZnJhbWVDb250ZXh0LT5yb3dlbmQsCisgICAgICAg
ICAgICBkcm93U3RhcnQsIGRyb3dFbmQgLSBkcm93U3RhcnQgKyAxLCBtX2ZyYW1lQ29udGV4dC0+
cHJvZ3Jlc3NpdmVEaXNwbGF5ICYmIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIG1fZnJh
bWVDb250ZXh0LT5pcGFzcyA+IDEpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgaWYgKCFn
cy0+aW50ZXJsYWNlZCkKLSAgICBncy0+aXJvdysrOwotICBlbHNlIHsKLSAgICBkbyB7Ci0gICAg
ICBzd2l0Y2ggKGdzLT5pcGFzcykKLSAgICAgIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAg
IGdzLT5pcm93ICs9IDg7Ci0gICAgICAgICAgaWYgKGdzLT5pcm93ID49IGdzLT5oZWlnaHQpIHsK
LSAgICAgICAgICAgIGdzLT5pcGFzcysrOwotICAgICAgICAgICAgZ3MtPmlyb3cgPSA0OwotICAg
ICAgICAgIH0KLSAgICAgICAgICBicmVhazsKKyAgICBtX2ZyYW1lQ29udGV4dC0+cm93cCA9IG1f
ZnJhbWVDb250ZXh0LT5yb3didWY7CisKKyAgICBpZiAoIW1fZnJhbWVDb250ZXh0LT5pbnRlcmxh
Y2VkKQorICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdysrOworICAgIGVsc2UgeworICAgICAg
ICBkbyB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fZnJhbWVDb250ZXh0LT5pcGFzcykgeworICAg
ICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9
IDg7CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVD
b250ZXh0LT5oZWlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlw
YXNzKys7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ID0gNDsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSA4OworICAgICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVp
Z2h0KSB7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOworICAg
ICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDI7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDM6CisgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gNDsKKyAgICAgICAgICAgICAgICBp
ZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgeworICAg
ICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKKyAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAg
IG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDI7CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVD
b250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7CisgICAgICAgICAgICAgICAgICAgIG1fZnJh
bWVDb250ZXh0LT5pcm93ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKG1fZnJhbWVDb250ZXh0LT5pcm93ID4gKG1f
ZnJhbWVDb250ZXh0LT5oZWlnaHQgLSAxKSk7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQog
Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICBncy0+aXJvdyArPSA4OwotICAgICAgICAgIGlm
IChncy0+aXJvdyA+PSBncy0+aGVpZ2h0KSB7Ci0gICAgICAgICAgICBncy0+aXBhc3MrKzsKLSAg
ICAgICAgICAgIGdzLT5pcm93ID0gMjsKLSAgICAgICAgICB9Ci0gICAgICAgICAgYnJlYWs7Cisv
LyBQZXJmb3JtIExlbXBlbC1aaXYtV2VsY2ggZGVjb2RpbmcuCitib29sIEdJRkltYWdlUmVhZGVy
Ojpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQoreworICAgIGlmICghbV9mcmFtZUNvbnRl
eHQpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICBn
cy0+aXJvdyArPSA0OwotICAgICAgICAgIGlmIChncy0+aXJvdyA+PSBncy0+aGVpZ2h0KSB7Ci0g
ICAgICAgICAgICBncy0+aXBhc3MrKzsKLSAgICAgICAgICAgIGdzLT5pcm93ID0gMTsKLSAgICAg
ICAgICB9Ci0gICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgIGdz
LT5pcm93ICs9IDI7Ci0gICAgICAgICAgaWYgKGdzLT5pcm93ID49IGdzLT5oZWlnaHQpewotICAg
ICAgICAgICAgZ3MtPmlwYXNzKys7Ci0gICAgICAgICAgICBncy0+aXJvdyA9IDA7Ci0gICAgICAg
ICAgfQotICAgICAgICAgIGJyZWFrOworICAgIGludCBjb2RlOworICAgIGludCBpbmNvZGU7Cisg
ICAgY29uc3QgdW5zaWduZWQgY2hhciAqY2g7CisKKyAgICAvLyBDb3B5IGFsbCB0aGUgZGVjb2Rl
ciBzdGF0ZSB2YXJpYWJsZXMgaW50byBsb2NhbHMgc28gdGhlIGNvbXBpbGVyCisgICAgLy8gd29u
J3Qgd29ycnkgYWJvdXQgdGhlbSBiZWluZyBhbGlhc2VkLiBUaGUgbG9jYWxzIHdpbGwgYmUgaG9t
ZWQKKyAgICAvLyBiYWNrIGludG8gdGhlIEdJRiBkZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4
aXQuCisgICAgaW50IGF2YWlsID0gbV9mcmFtZUNvbnRleHQtPmF2YWlsOworICAgIGludCBiaXRz
ID0gbV9mcmFtZUNvbnRleHQtPmJpdHM7CisgICAgaW50IGNudCA9IG1fY291bnQ7CisgICAgaW50
IGNvZGVzaXplID0gbV9mcmFtZUNvbnRleHQtPmNvZGVzaXplOworICAgIGludCBjb2RlbWFzayA9
IG1fZnJhbWVDb250ZXh0LT5jb2RlbWFzazsKKyAgICBpbnQgb2xkY29kZSA9IG1fZnJhbWVDb250
ZXh0LT5vbGRjb2RlOworICAgIGludCBjbGVhckNvZGUgPSBtX2ZyYW1lQ29udGV4dC0+Y2xlYXJD
b2RlOworICAgIHVuc2lnbmVkIGNoYXIgZmlyc3RjaGFyID0gbV9mcmFtZUNvbnRleHQtPmZpcnN0
Y2hhcjsKKyAgICBpbnQgZGF0dW0gPSBtX2ZyYW1lQ29udGV4dC0+ZGF0dW07CisKKyAgICBpZiAo
IW1fZnJhbWVDb250ZXh0LT5wcmVmaXgpIHsKKyAgICAgICAgbV9mcmFtZUNvbnRleHQtPnByZWZp
eCA9IG5ldyB1bnNpZ25lZCBzaG9ydFtNQVhfQklUU107CisgICAgICAgIG1lbXNldChtX2ZyYW1l
Q29udGV4dC0+cHJlZml4LCAwLCBNQVhfQklUUyAqIHNpemVvZihzaG9ydCkpOworICAgIH0KIAot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgIGJyZWFrOwotICAgICAgfQotICAgIH0gd2hpbGUg
KGdzLT5pcm93ID4gKGdzLT5oZWlnaHQgLSAxKSk7Ci0gIH0KKyAgICB1bnNpZ25lZCBzaG9ydCAq
cHJlZml4ID0gbV9mcmFtZUNvbnRleHQtPnByZWZpeDsKKyAgICB1bnNpZ25lZCBjaGFyICpzdGFj
a3AgPSBtX2ZyYW1lQ29udGV4dC0+c3RhY2twOworICAgIHVuc2lnbmVkIGNoYXIgKnN1ZmZpeCA9
IG1fZnJhbWVDb250ZXh0LT5zdWZmaXg7CisgICAgdW5zaWduZWQgY2hhciAqc3RhY2sgPSBtX2Zy
YW1lQ29udGV4dC0+c3RhY2s7CisgICAgdW5zaWduZWQgY2hhciAqcm93cCA9IG1fZnJhbWVDb250
ZXh0LT5yb3dwOworICAgIHVuc2lnbmVkIGNoYXIgKnJvd2VuZCA9IG1fZnJhbWVDb250ZXh0LT5y
b3dlbmQ7CisgICAgdW5zaWduZWQgcm93c1JlbWFpbmluZyA9IG1fZnJhbWVDb250ZXh0LT5yb3dz
UmVtYWluaW5nOworCisgICAgaWYgKHJvd3AgPT0gcm93ZW5kKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICByZXR1cm4gdHJ1ZTsKKyNkZWZpbmUgT1VUUFVUX1JPVyBcCisgICAgZG8geyBcCisg
ICAgICAgIGlmICghb3V0cHV0Um93KCkpIFwKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgXAor
ICAgICAgICByb3dzUmVtYWluaW5nLS07IFwKKyAgICAgICAgcm93cCA9IG1fZnJhbWVDb250ZXh0
LT5yb3dwOyBcCisgICAgICAgIGlmICghcm93c1JlbWFpbmluZykgXAorICAgICAgICAgICAgZ290
byBFTkQ7IFwKKyAgICB9IHdoaWxlICgwKQorCisgICAgZm9yIChjaCA9IHE7IGNudC0tID4gMDsg
Y2grKykgeworICAgICAgICAvLyBGZWVkIHRoZSBuZXh0IGJ5dGUgaW50byB0aGUgZGVjb2Rlcidz
IDMyLWJpdCBpbnB1dCBidWZmZXIuCisgICAgICAgIGRhdHVtICs9ICgoaW50KSAqY2gpIDw8IGJp
dHM7CisgICAgICAgIGJpdHMgKz0gODsKKworICAgICAgICAvLyBDaGVjayBmb3IgdW5kZXJmbG93
IG9mIGRlY29kZXIncyAzMi1iaXQgaW5wdXQgYnVmZmVyLgorICAgICAgICB3aGlsZSAoYml0cyA+
PSBjb2Rlc2l6ZSkgeworICAgICAgICAgICAgLy8gR2V0IHRoZSBsZWFkaW5nIHZhcmlhYmxlLWxl
bmd0aCBzeW1ib2wgZnJvbSB0aGUgZGF0YSBzdHJlYW0uCisgICAgICAgICAgICBjb2RlID0gZGF0
dW0gJiBjb2RlbWFzazsKKyAgICAgICAgICAgIGRhdHVtID4+PSBjb2Rlc2l6ZTsKKyAgICAgICAg
ICAgIGJpdHMgLT0gY29kZXNpemU7CisKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBkaWN0aW9u
YXJ5IHRvIGl0cyBvcmlnaW5hbCBzdGF0ZSwgaWYgcmVxdWVzdGVkLgorICAgICAgICAgICAgaWYg
KGNvZGUgPT0gY2xlYXJDb2RlKSB7CisgICAgICAgICAgICAgICAgY29kZXNpemUgPSBtX2ZyYW1l
Q29udGV4dC0+ZGF0YXNpemUgKyAxOworICAgICAgICAgICAgICAgIGNvZGVtYXNrID0gKDEgPDwg
Y29kZXNpemUpIC0gMTsKKyAgICAgICAgICAgICAgICBhdmFpbCA9IGNsZWFyQ29kZSArIDI7Cisg
ICAgICAgICAgICAgICAgb2xkY29kZSA9IC0xOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBDaGVjayBmb3IgZXhwbGljaXQgZW5kLW9m
LXN0cmVhbSBjb2RlLgorICAgICAgICAgICAgaWYgKGNvZGUgPT0gKGNsZWFyQ29kZSArIDEpKSB7
CisgICAgICAgICAgICAgICAgLy8gZW5kLW9mLXN0cmVhbSBzaG91bGQgb25seSBhcHBlYXIgYWZ0
ZXIgYWxsIGltYWdlIGRhdGEuCisgICAgICAgICAgICAgICAgaWYgKCFyb3dzUmVtYWluaW5nKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKG9sZGNvZGUgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAqcm93
cCsrID0gc3VmZml4W2NvZGVdOworICAgICAgICAgICAgICAgIGlmIChyb3dwID09IHJvd2VuZCkK
KyAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JPVzsKKworICAgICAgICAgICAgICAgIGZpcnN0
Y2hhciA9IG9sZGNvZGUgPSBjb2RlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpbmNvZGUgPSBjb2RlOworICAgICAgICAgICAgaWYgKGNv
ZGUgPj0gYXZhaWwpIHsKKyAgICAgICAgICAgICAgICAqc3RhY2twKysgPSBmaXJzdGNoYXI7Cisg
ICAgICAgICAgICAgICAgY29kZSA9IG9sZGNvZGU7CisKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
Y2twID09IHN0YWNrICsgTUFYX0JJVFMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2Ns
aWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB3aGlsZSAoY29kZSA+PSBjbGVhckNvZGUpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoY29kZSA+PSBNQVhfQklUUyB8fCBjb2RlID09IHByZWZpeFtjb2RlXSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7
CisKKyAgICAgICAgICAgICAgICAvLyBFdmVuIHRob3VnaCBzdWZmaXhbXSBvbmx5IGhvbGRzIGNo
YXJhY3RlcnMgdGhyb3VnaCBzdWZmaXhbYXZhaWwgLSAxXSwKKyAgICAgICAgICAgICAgICAvLyBh
bGxvd2luZyBjb2RlID49IGF2YWlsIGhlcmUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIG1h
bGZvcm1lZAorICAgICAgICAgICAgICAgIC8vIGRhdGEuIEFzIGxvbmcgYXMgY29kZSA8IE1BWF9C
SVRTLCB0aGUgb25seSByaXNrIGlzIGEgZ2FyYmxlZCBpbWFnZSwKKyAgICAgICAgICAgICAgICAv
LyB3aGljaCBpcyBubyB3b3JzZSB0aGFuIHJlZnVzaW5nIHRvIGRpc3BsYXkgaXQuCisgICAgICAg
ICAgICAgICAgKnN0YWNrcCsrID0gc3VmZml4W2NvZGVdOworICAgICAgICAgICAgICAgIGNvZGUg
PSBwcmVmaXhbY29kZV07CisKKyAgICAgICAgICAgICAgICBpZiAoc3RhY2twID09IHN0YWNrICsg
TUFYX0JJVFMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50
LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqc3Rh
Y2twKysgPSBmaXJzdGNoYXIgPSBzdWZmaXhbY29kZV07CisKKyAgICAgICAgICAgIC8vIERlZmlu
ZSBhIG5ldyBjb2Rld29yZCBpbiB0aGUgZGljdGlvbmFyeS4KKyAgICAgICAgICAgIGlmIChhdmFp
bCA8IDQwOTYpIHsKKyAgICAgICAgICAgICAgICBwcmVmaXhbYXZhaWxdID0gb2xkY29kZTsKKyAg
ICAgICAgICAgICAgICBzdWZmaXhbYXZhaWxdID0gZmlyc3RjaGFyOworICAgICAgICAgICAgICAg
IGF2YWlsKys7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSd2ZSB1c2VkIHVwIGFsbCB0aGUg
Y29kZXdvcmRzIG9mIGEgZ2l2ZW4gbGVuZ3RoCisgICAgICAgICAgICAgICAgLy8gaW5jcmVhc2Ug
dGhlIGxlbmd0aCBvZiBjb2Rld29yZHMgYnkgb25lIGJpdCwgYnV0IGRvbid0CisgICAgICAgICAg
ICAgICAgLy8gZXhjZWVkIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBjb2Rld29yZCBzaXplIG9mIDEy
IGJpdHMuCisgICAgICAgICAgICAgICAgaWYgKCghKGF2YWlsICYgY29kZW1hc2spKSAmJiAoYXZh
aWwgPCA0MDk2KSkgeworICAgICAgICAgICAgICAgICAgICBjb2Rlc2l6ZSsrOworICAgICAgICAg
ICAgICAgICAgICBjb2RlbWFzayArPSBhdmFpbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBvbGRjb2RlID0gaW5jb2RlOworCisgICAgICAgICAgICAvLyBD
b3B5IHRoZSBkZWNvZGVkIGRhdGEgb3V0IHRvIHRoZSBzY2FubGluZSBidWZmZXIuCisgICAgICAg
ICAgICBkbyB7CisgICAgICAgICAgICAgICAgKnJvd3ArKyA9ICotLXN0YWNrcDsKKyAgICAgICAg
ICAgICAgICBpZiAocm93cCA9PSByb3dlbmQpCisgICAgICAgICAgICAgICAgICAgIE9VVFBVVF9S
T1c7CisgICAgICAgICAgICB9IHdoaWxlIChzdGFja3AgPiBzdGFjayk7CisgICAgICAgIH0KKyAg
ICB9CisKK0VORDoKKyAgICAvLyBIb21lIHRoZSBsb2NhbCBjb3BpZXMgb2YgdGhlIEdJRiBkZWNv
ZGVyIHN0YXRlIHZhcmlhYmxlcy4KKyAgICBtX2ZyYW1lQ29udGV4dC0+YXZhaWwgPSBhdmFpbDsK
KyAgICBtX2ZyYW1lQ29udGV4dC0+Yml0cyA9IGJpdHM7CisgICAgbV9mcmFtZUNvbnRleHQtPmNv
ZGVzaXplID0gY29kZXNpemU7CisgICAgbV9mcmFtZUNvbnRleHQtPmNvZGVtYXNrID0gY29kZW1h
c2s7CisgICAgbV9jb3VudCA9IGNudDsKKyAgICBtX2ZyYW1lQ29udGV4dC0+b2xkY29kZSA9IG9s
ZGNvZGU7CisgICAgbV9mcmFtZUNvbnRleHQtPmZpcnN0Y2hhciA9IGZpcnN0Y2hhcjsKKyAgICBt
X2ZyYW1lQ29udGV4dC0+ZGF0dW0gPSBkYXR1bTsKKyAgICBtX2ZyYW1lQ29udGV4dC0+c3RhY2tw
ID0gc3RhY2twOworICAgIG1fZnJhbWVDb250ZXh0LT5yb3dwID0gcm93cDsKKyAgICBtX2ZyYW1l
Q29udGV4dC0+cm93c1JlbWFpbmluZyA9IHJvd3NSZW1haW5pbmc7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLS8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0vKiBQZXJmb3JtIExlbXBlbC1aaXYtV2Vs
Y2ggZGVjb2RpbmcgKi8KLWJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvX2x6dyhjb25zdCB1bnNpZ25l
ZCBjaGFyICpxKQorCisvLyBQcm9jZXNzIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgc3RyZWFtIGZv
ciB0aGUgZ2lmIGRlY29kZXIuCitib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2ln
bmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1
ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKIHsKLSAgR0lGRnJhbWVSZWFkZXIqIGdzID0gZnJh
bWVfcmVhZGVyOwotICBpZiAoIWdzKQotICAgIHJldHVybiB0cnVlOworICAgIGlmICghbGVuKSB7
CisgICAgICAgIC8vIE5vIG5ldyBkYXRhIGhhcyBjb21lIGluIHNpbmNlIHRoZSBsYXN0IGNhbGws
IGp1c3QgaWdub3JlIHRoaXMgY2FsbC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0g
IGludCBjb2RlOwotICBpbnQgaW5jb2RlOwotICBjb25zdCB1bnNpZ25lZCBjaGFyICpjaDsKLSAg
Ci0gIC8qIENvcHkgYWxsIHRoZSBkZWNvZGVyIHN0YXRlIHZhcmlhYmxlcyBpbnRvIGxvY2FscyBz
byB0aGUgY29tcGlsZXIKLSAgICogd29uJ3Qgd29ycnkgYWJvdXQgdGhlbSBiZWluZyBhbGlhc2Vk
LiAgVGhlIGxvY2FscyB3aWxsIGJlIGhvbWVkCi0gICAqIGJhY2sgaW50byB0aGUgR0lGIGRlY29k
ZXIgc3RydWN0dXJlIHdoZW4gd2UgZXhpdC4KLSAgICovCi0gIGludCBhdmFpbCAgICAgICA9IGdz
LT5hdmFpbDsKLSAgaW50IGJpdHMgICAgICAgID0gZ3MtPmJpdHM7Ci0gIGludCBjbnQgICAgICAg
ICA9IGNvdW50OwotICBpbnQgY29kZXNpemUgICAgPSBncy0+Y29kZXNpemU7Ci0gIGludCBjb2Rl
bWFzayAgICA9IGdzLT5jb2RlbWFzazsKLSAgaW50IG9sZGNvZGUgICAgID0gZ3MtPm9sZGNvZGU7
Ci0gIGludCBjbGVhcl9jb2RlICA9IGdzLT5jbGVhcl9jb2RlOwotICB1bnNpZ25lZCBjaGFyIGZp
cnN0Y2hhciA9IGdzLT5maXJzdGNoYXI7Ci0gIGludCBkYXR1bSAgICAgPSBncy0+ZGF0dW07Ci0K
LSAgaWYgKCFncy0+cHJlZml4KSB7Ci0gICAgZ3MtPnByZWZpeCA9IG5ldyB1bnNpZ25lZCBzaG9y
dFtNQVhfQklUU107Ci0gICAgbWVtc2V0KGdzLT5wcmVmaXgsIDAsIE1BWF9CSVRTICogc2l6ZW9m
KHNob3J0KSk7Ci0gIH0KLQotICB1bnNpZ25lZCBzaG9ydCAqcHJlZml4ICA9IGdzLT5wcmVmaXg7
Ci0gIHVuc2lnbmVkIGNoYXIgKnN0YWNrcCAgID0gZ3MtPnN0YWNrcDsKLSAgdW5zaWduZWQgY2hh
ciAqc3VmZml4ICAgPSBncy0+c3VmZml4OwotICB1bnNpZ25lZCBjaGFyICpzdGFjayAgICA9IGdz
LT5zdGFjazsKLSAgdW5zaWduZWQgY2hhciAqcm93cCAgICAgPSBncy0+cm93cDsKLSAgdW5zaWdu
ZWQgY2hhciAqcm93ZW5kICAgPSBncy0+cm93ZW5kOwotICB1bnNpZ25lZCByb3dzX3JlbWFpbmlu
ZyA9IGdzLT5yb3dzX3JlbWFpbmluZzsKLQotICBpZiAocm93cCA9PSByb3dlbmQpCi0gICAgcmV0
dXJuIHRydWU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9IGJ1ZjsKKworICAgIC8vIEFk
ZCB3aGF0IHdlIGhhdmUgc28gZmFyIHRvIHRoZSBibG9jay4KKyAgICAvLyBJZiBwcmV2aW91cyBj
YWxsIHRvIG1lIGxlZnQgc29tZXRoaW5nIGluIHRoZSBob2xkIGZpcnN0IGNvbXBsZXRlIGN1cnJl
bnQgYmxvY2sKKyAgICAvLyBvciBpZiB3ZSBhcmUgZmlsbGluZyB0aGUgY29sb3JtYXBzLCBmaXJz
dCBjb21wbGV0ZSB0aGUgY29sb3JtYXAuCisgICAgdW5zaWduZWQgY2hhciogcCA9IDA7CisgICAg
aWYgKG1fc3RhdGUgPT0gR0lGR2xvYmFsQ29sb3JtYXApCisgICAgICAgIHAgPSBtX2dsb2JhbENv
bG9ybWFwOworICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1hcCkKKyAgICAg
ICAgcCA9IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAw
OworICAgIGVsc2UgaWYgKG1fYnl0ZXNJbkhvbGQpCisgICAgICAgIHAgPSBtX2hvbGQ7CisgICAg
ZWxzZQorICAgICAgICBwID0gMDsKKworICAgIGlmIChwIHx8IChtX3N0YXRlID09IEdJRkdsb2Jh
bENvbG9ybWFwKSB8fCAobV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKSkgeworICAgICAgICAv
LyBBZGQgd2hhdCB3ZSBoYXZlIHNvZmFyIHRvIHRoZSBibG9jaworICAgICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBsZW4gPCBtX2J5dGVzVG9Db25zdW1lID8gbGVuIDogbV9ieXRlc1RvQ29uc3VtZTsK
KyAgICAgICAgaWYgKHApCisgICAgICAgICAgICBtZW1jcHkocCArIG1fYnl0ZXNJbkhvbGQsIGJ1
ZiwgbGVuZ3RoKTsKKworICAgICAgICBpZiAobGVuZ3RoIDwgbV9ieXRlc1RvQ29uc3VtZSkgewor
ICAgICAgICAgICAgLy8gTm90IGVub3VnaCBpbiAnYnVmJyB0byBjb21wbGV0ZSBjdXJyZW50IGJs
b2NrLCBnZXQgbW9yZQorICAgICAgICAgICAgbV9ieXRlc0luSG9sZCArPSBsZW5ndGg7CisgICAg
ICAgICAgICBtX2J5dGVzVG9Db25zdW1lIC09IGxlbmd0aDsKKyAgICAgICAgICAgIGlmIChtX2Ns
aWVudCkKKyAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGVjb2RpbmdIYWx0ZWQoMCk7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KIAotI2RlZmluZSBPVVRQVVRfUk9XICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIFBSX0JF
R0lOX01BQ1JPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgaWYgKCFvdXRwdXRfcm93KCkpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICByZXR1cm4gZmFsc2U7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
cm93c19yZW1haW5pbmctLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgcm93cCA9IGZyYW1lX3JlYWRlci0+cm93cDsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICghcm93c19y
ZW1haW5pbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgICAgZ290byBFTkQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICBQUl9FTkRfTUFDUk8KLQotICBmb3IgKGNoID0gcTsgY250
LS0gPiAwOyBjaCsrKQotICB7Ci0gICAgLyogRmVlZCB0aGUgbmV4dCBieXRlIGludG8gdGhlIGRl
Y29kZXIncyAzMi1iaXQgaW5wdXQgYnVmZmVyLiAqLwotICAgIGRhdHVtICs9ICgoaW50KSAqY2gp
IDw8IGJpdHM7Ci0gICAgYml0cyArPSA4OwotCi0gICAgLyogQ2hlY2sgZm9yIHVuZGVyZmxvdyBv
ZiBkZWNvZGVyJ3MgMzItYml0IGlucHV0IGJ1ZmZlci4gKi8KLSAgICB3aGlsZSAoYml0cyA+PSBj
b2Rlc2l6ZSkKLSAgICB7Ci0gICAgICAvKiBHZXQgdGhlIGxlYWRpbmcgdmFyaWFibGUtbGVuZ3Ro
IHN5bWJvbCBmcm9tIHRoZSBkYXRhIHN0cmVhbSAqLwotICAgICAgY29kZSA9IGRhdHVtICYgY29k
ZW1hc2s7Ci0gICAgICBkYXR1bSA+Pj0gY29kZXNpemU7Ci0gICAgICBiaXRzIC09IGNvZGVzaXpl
OwotCi0gICAgICAvKiBSZXNldCB0aGUgZGljdGlvbmFyeSB0byBpdHMgb3JpZ2luYWwgc3RhdGUs
IGlmIHJlcXVlc3RlZCAqLwotICAgICAgaWYgKGNvZGUgPT0gY2xlYXJfY29kZSkgewotICAgICAg
ICBjb2Rlc2l6ZSA9IGdzLT5kYXRhc2l6ZSArIDE7Ci0gICAgICAgIGNvZGVtYXNrID0gKDEgPDwg
Y29kZXNpemUpIC0gMTsKLSAgICAgICAgYXZhaWwgPSBjbGVhcl9jb2RlICsgMjsKLSAgICAgICAg
b2xkY29kZSA9IC0xOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAgICAgLyogQ2hl
Y2sgZm9yIGV4cGxpY2l0IGVuZC1vZi1zdHJlYW0gY29kZSAqLwotICAgICAgaWYgKGNvZGUgPT0g
KGNsZWFyX2NvZGUgKyAxKSkgewotICAgICAgICAvKiBlbmQtb2Ytc3RyZWFtIHNob3VsZCBvbmx5
IGFwcGVhciBhZnRlciBhbGwgaW1hZ2UgZGF0YSAqLwotICAgICAgICBpZiAoIXJvd3NfcmVtYWlu
aW5nKQotICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gY2xpZW50cHRyID8g
Y2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgfQotCi0gICAgICBpZiAob2xk
Y29kZSA9PSAtMSkgewotICAgICAgICAqcm93cCsrID0gc3VmZml4W2NvZGVdOwotICAgICAgICBp
ZiAocm93cCA9PSByb3dlbmQpCi0gICAgICAgICAgT1VUUFVUX1JPVzsKLQotICAgICAgICBmaXJz
dGNoYXIgPSBvbGRjb2RlID0gY29kZTsKLSAgICAgICAgY29udGludWU7Ci0gICAgICB9Ci0KLSAg
ICAgIGluY29kZSA9IGNvZGU7Ci0gICAgICBpZiAoY29kZSA+PSBhdmFpbCkgewotICAgICAgICAq
c3RhY2twKysgPSBmaXJzdGNoYXI7Ci0gICAgICAgIGNvZGUgPSBvbGRjb2RlOwotCi0gICAgICAg
IGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAgICByZXR1cm4gY2xpZW50
cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgfQotCi0gICAgICB3
aGlsZSAoY29kZSA+PSBjbGVhcl9jb2RlKQotICAgICAgewotICAgICAgICBpZiAoY29kZSA+PSBN
QVhfQklUUyB8fCBjb2RlID09IHByZWZpeFtjb2RlXSkKLSAgICAgICAgICByZXR1cm4gY2xpZW50
cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotCi0gICAgICAgIC8vIEV2ZW4g
dGhvdWdoIHN1ZmZpeFtdIG9ubHkgaG9sZHMgY2hhcmFjdGVycyB0aHJvdWdoIHN1ZmZpeFthdmFp
bCAtIDFdLAotICAgICAgICAvLyBhbGxvd2luZyBjb2RlID49IGF2YWlsIGhlcmUgbGV0cyB1cyBi
ZSBtb3JlIHRvbGVyYW50IG9mIG1hbGZvcm1lZAotICAgICAgICAvLyBkYXRhLiBBcyBsb25nIGFz
IGNvZGUgPCBNQVhfQklUUywgdGhlIG9ubHkgcmlzayBpcyBhIGdhcmJsZWQgaW1hZ2UsCi0gICAg
ICAgIC8vIHdoaWNoIGlzIG5vIHdvcnNlIHRoYW4gcmVmdXNpbmcgdG8gZGlzcGxheSBpdC4KLSAg
ICAgICAgKnN0YWNrcCsrID0gc3VmZml4W2NvZGVdOwotICAgICAgICBjb2RlID0gcHJlZml4W2Nv
ZGVdOwotCi0gICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBNQVhfQklUUykKLSAgICAgICAg
ICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAg
ICAgfQotCi0gICAgICAqc3RhY2twKysgPSBmaXJzdGNoYXIgPSBzdWZmaXhbY29kZV07Ci0KLSAg
ICAgIC8qIERlZmluZSBhIG5ldyBjb2Rld29yZCBpbiB0aGUgZGljdGlvbmFyeS4gKi8KLSAgICAg
IGlmIChhdmFpbCA8IDQwOTYpIHsKLSAgICAgICAgcHJlZml4W2F2YWlsXSA9IG9sZGNvZGU7Ci0g
ICAgICAgIHN1ZmZpeFthdmFpbF0gPSBmaXJzdGNoYXI7Ci0gICAgICAgIGF2YWlsKys7Ci0KLSAg
ICAgICAgLyogSWYgd2UndmUgdXNlZCB1cCBhbGwgdGhlIGNvZGV3b3JkcyBvZiBhIGdpdmVuIGxl
bmd0aAotICAgICAgICAgKiBpbmNyZWFzZSB0aGUgbGVuZ3RoIG9mIGNvZGV3b3JkcyBieSBvbmUg
Yml0LCBidXQgZG9uJ3QKLSAgICAgICAgICogZXhjZWVkIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBj
b2Rld29yZCBzaXplIG9mIDEyIGJpdHMuCi0gICAgICAgICAqLwotICAgICAgICBpZiAoKChhdmFp
bCAmIGNvZGVtYXNrKSA9PSAwKSAmJiAoYXZhaWwgPCA0MDk2KSkgewotICAgICAgICAgIGNvZGVz
aXplKys7Ci0gICAgICAgICAgY29kZW1hc2sgKz0gYXZhaWw7CisgICAgICAgIC8vIFJlc2V0IGhv
bGQgYnVmZmVyIGNvdW50CisgICAgICAgIG1fYnl0ZXNJbkhvbGQgPSAwOworCisgICAgICAgIC8v
IFBvaW50ICdxJyB0byBjb21wbGV0ZSBibG9jayBpbiBob2xkIChvciBpbiBjb2xvcm1hcCkKKyAg
ICAgICAgcSA9IHA7CisgICAgfQorCisgICAgLy8gSW52YXJpYW50OgorICAgIC8vICAgICdxJyBp
cyBzdGFydCBvZiBjdXJyZW50IHRvIGJlIHByb2Nlc3NlZCBibG9jayAoaG9sZCwgY29sb3JtYXAg
b3IgYnVmKQorICAgIC8vICAgICdtX2J5dGVzVG9Db25zdW1lJyBpcyBudW1iZXIgb2YgYnl0ZXMg
dG8gY29uc3VtZSBmcm9tICdidWYnCisgICAgLy8gICAgJ2J1ZicgcG9pbnRzIHRvIHRoZSBieXRl
cyB0byBiZSBjb25zdW1lZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIKKyAgICAvLyAgICAnbGVuJyBp
cyBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiBpbnB1dCBidWZmZXIgZnJvbSBwb3NpdGlvbiAnYnVm
Jy4KKyAgICAvLyAgICBBdCBlbnRyYW5jZSBvZiB0aGUgZm9yIGxvb3Agd2lsbCAnYnVmJyB3aWxs
IGJlIG1vdmVkICdtX2J5dGVzVG9Db25zdW1lJworICAgIC8vICAgIHRvIHBvaW50IHRvIG5leHQg
YnVmZmVyLCAnbGVuJyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KKyAgICAvLyAgICBTbyB0aGF0
IG5leHQgcm91bmQgaW4gZm9yIGxvb3AsIHEgZ2V0cyBwb2ludGVkIHRvIHRoZSBuZXh0IGJ1ZmZl
ci4KKyAgICBmb3IgKDtsZW4gPj0gbV9ieXRlc1RvQ29uc3VtZTsgcSA9IGJ1ZikgeworICAgICAg
ICAvLyBFYXQgdGhlIGN1cnJlbnQgYmxvY2sgZnJvbSB0aGUgYnVmZmVyLCBxIGtlZXBzIHBvaW50
ZWQgYXQgY3VycmVudCBibG9jay4KKyAgICAgICAgYnVmICs9IG1fYnl0ZXNUb0NvbnN1bWU7Cisg
ICAgICAgIGxlbiAtPSBtX2J5dGVzVG9Db25zdW1lOworCisgICAgICAgIHN3aXRjaCAobV9zdGF0
ZSkgeworICAgICAgICBjYXNlIEdJRkxaVzoKKyAgICAgICAgICAgIGlmICghZG9MWlcocSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiBkb0xaVygpIGVuY291bnRlcmVkIGFu
IGVycm9yLCBpdCBoYXMgYWxyZWFkeSBjYWxsZWQgbV9jbGllbnQtPnNldEZhaWxlZCgpLgorICAg
ICAgICAgICAgR0VUTigxLCBHSUZTdWJCbG9jayk7CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIEdJRkxaV1N0YXJ0OiB7CisgICAgICAgICAgICAvLyBJbml0aWFsaXplIExaVyBw
YXJzZXIvZGVjb2Rlci4KKyAgICAgICAgICAgIGludCBkYXRhc2l6ZSA9ICpxOworCisgICAgICAg
ICAgICAvLyBTaW5jZSB3ZSB1c2UgYSBjb2Rlc2l6ZSBvZiAxIG1vcmUgdGhhbiB0aGUgZGF0YXNp
emUsIHdlIG5lZWQgdG8gZW5zdXJlCisgICAgICAgICAgICAvLyB0aGF0IG91ciBkYXRhc2l6ZSBp
cyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1ZSAoMTIpLgorICAgICAg
ICAgICAgLy8gVGhpcyBzZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNrIGNvcnJlY3Rs
eSBhdCA0MDk1LgorICAgICAgICAgICAgaWYgKGRhdGFzaXplID49IE1BWF9MWldfQklUUykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBm
YWxzZTsKKyAgICAgICAgICAgIGludCBjbGVhckNvZGUgPSAxIDw8IGRhdGFzaXplOworICAgICAg
ICAgICAgaWYgKGNsZWFyQ29kZSA+PSBNQVhfQklUUykKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKworICAgICAgICAgICAg
aWYgKG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRh
dGFzaXplID0gZGF0YXNpemU7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmNsZWFy
Q29kZSA9IGNsZWFyQ29kZTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+YXZhaWwg
PSBtX2ZyYW1lQ29udGV4dC0+Y2xlYXJDb2RlICsgMjsKKyAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+b2xkY29kZSA9IC0xOworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5j
b2Rlc2l6ZSA9IG1fZnJhbWVDb250ZXh0LT5kYXRhc2l6ZSArIDE7CisgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPmNvZGVtYXNrID0gKDEgPDwgbV9mcmFtZUNvbnRleHQtPmNvZGVzaXpl
KSAtIDE7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRhdHVtID0gbV9mcmFtZUNv
bnRleHQtPmJpdHMgPSAwOworCisgICAgICAgICAgICAgICAgLy8gSW5pdCB0aGUgdGFibGVzLgor
ICAgICAgICAgICAgICAgIGlmICghbV9mcmFtZUNvbnRleHQtPnN1ZmZpeCkKKyAgICAgICAgICAg
ICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnN1ZmZpeCA9IG5ldyB1bnNpZ25lZCBjaGFyW01BWF9C
SVRTXTsKKworICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSB3aG9sZSBzdWZmaXggdGFi
bGUgbGV0cyB1cyBiZSBtb3JlIHRvbGVyYW50IG9mIGJhZCBkYXRhLgorICAgICAgICAgICAgICAg
IG1lbXNldChtX2ZyYW1lQ29udGV4dC0+c3VmZml4LCAwLCBNQVhfQklUUyk7CisgICAgICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2ZyYW1lQ29udGV4dC0+Y2xlYXJDb2RlOyBpKysp
CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5zdWZmaXhbaV0gPSBpOworCisg
ICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQ29udGV4dC0+c3RhY2spCisgICAgICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5zdGFjayA9IG5ldyB1bnNpZ25lZCBjaGFyW01BWF9CSVRT
XTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+c3RhY2twID0gbV9mcmFtZUNvbnRl
eHQtPnN0YWNrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBHRVROKDEsIEdJRlN1YkJs
b2NrKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICB9Ci0gICAgICBvbGRj
b2RlID0gaW5jb2RlOwotCi0gICAgICAgIC8qIENvcHkgdGhlIGRlY29kZWQgZGF0YSBvdXQgdG8g
dGhlIHNjYW5saW5lIGJ1ZmZlci4gKi8KLSAgICAgIGRvIHsKLSAgICAgICAgKnJvd3ArKyA9ICot
LXN0YWNrcDsKLSAgICAgICAgaWYgKHJvd3AgPT0gcm93ZW5kKSB7Ci0gICAgICAgICAgT1VUUFVU
X1JPVzsKKworICAgICAgICBjYXNlIEdJRlR5cGU6IHsKKyAgICAgICAgICAgIC8vIEFsbCBHSUYg
ZmlsZXMgYmVnaW4gd2l0aCAiR0lGODdhIiBvciAiR0lGODlhIi4KKyAgICAgICAgICAgIGlmICgh
c3RybmNtcCgoY2hhciopcSwgIkdJRjg5YSIsIDYpKQorICAgICAgICAgICAgICAgIG1fdmVyc2lv
biA9IDg5OworICAgICAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4N2Ei
LCA2KSkKKyAgICAgICAgICAgICAgICBtX3ZlcnNpb24gPSA4NzsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkg
OiBmYWxzZTsKKyAgICAgICAgICAgIEdFVE4oNywgR0lGR2xvYmFsSGVhZGVyKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICB9IHdoaWxlIChzdGFja3AgPiBzdGFjayk7Ci0g
ICAgfQotICB9Ci0KLSAgRU5EOgotCi0gIC8qIEhvbWUgdGhlIGxvY2FsIGNvcGllcyBvZiB0aGUg
R0lGIGRlY29kZXIgc3RhdGUgdmFyaWFibGVzICovCi0gIGdzLT5hdmFpbCA9IGF2YWlsOwotICBn
cy0+Yml0cyA9IGJpdHM7Ci0gIGdzLT5jb2Rlc2l6ZSA9IGNvZGVzaXplOwotICBncy0+Y29kZW1h
c2sgPSBjb2RlbWFzazsKLSAgY291bnQgPSBjbnQ7Ci0gIGdzLT5vbGRjb2RlID0gb2xkY29kZTsK
LSAgZ3MtPmZpcnN0Y2hhciA9IGZpcnN0Y2hhcjsKLSAgZ3MtPmRhdHVtID0gZGF0dW07Ci0gIGdz
LT5zdGFja3AgPSBzdGFja3A7Ci0gIGdzLT5yb3dwID0gcm93cDsKLSAgZ3MtPnJvd3NfcmVtYWlu
aW5nID0gcm93c19yZW1haW5pbmc7Ci0KLSAgcmV0dXJuIHRydWU7Ci19CiAKKyAgICAgICAgY2Fz
ZSBHSUZHbG9iYWxIZWFkZXI6IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGhlaWdodCBh
bmQgd2lkdGggb2YgdGhlICJzY3JlZW4iIG9yIGZyYW1lIGludG8gd2hpY2ggaW1hZ2VzIGFyZSBy
ZW5kZXJlZC4gVGhlCisgICAgICAgICAgICAvLyBpbmRpdmlkdWFsIGltYWdlcyBjYW4gYmUgc21h
bGxlciB0aGFuIHRoZSBzY3JlZW4gc2l6ZSBhbmQgbG9jYXRlZCB3aXRoIGFuIG9yaWdpbiBhbnl3
aGVyZQorICAgICAgICAgICAgLy8gd2l0aGluIHRoZSBzY3JlZW4uCisgICAgICAgICAgICBtX3Nj
cmVlbldpZHRoID0gR0VUSU5UMTYocSk7CisgICAgICAgICAgICBtX3NjcmVlbkhlaWdodCA9IEdF
VElOVDE2KHEgKyAyKTsKKworICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVj
b2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9j
bGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgbV9zY3JlZW5CZ2NvbG9yID0gcVs1
XTsKKyAgICAgICAgICAgIG1fZ2xvYmFsQ29sb3JtYXBTaXplID0gMiA8PCAocVs0XSAmIDB4MDcp
OworCisgICAgICAgICAgICBpZiAoKHFbNF0gJiAweDgwKSAmJiBtX2dsb2JhbENvbG9ybWFwU2l6
ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLworICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZ2xv
YmFsIGNvbG9ybWFwCisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMqbV9n
bG9iYWxDb2xvcm1hcFNpemU7CisKKyAgICAgICAgICAgICAgICAvLyBNYWxsb2MgdGhlIGNvbG9y
IG1hcCwgYnV0IG9ubHkgaWYgd2UncmUgbm90IGp1c3QgY291bnRpbmcgZnJhbWVzLgorICAgICAg
ICAgICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVy
eSkKKyAgICAgICAgICAgICAgICAgICAgbV9nbG9iYWxDb2xvcm1hcCA9IG5ldyB1bnNpZ25lZCBj
aGFyW3NpemVdOworCisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gVXNlICdob2xkJyBwYXR0ZXJuIHRvIGdldCB0aGUgZ2xvYmFsIGNvbG9y
bWFwCisgICAgICAgICAgICAgICAgICAgIEdFVE4oc2l6ZSwgR0lGR2xvYmFsQ29sb3JtYXApOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGdvIGRpcmVjdGx5IHRvIEdJRkltYWdlX3N0
YXJ0LgorICAgICAgICAgICAgICAgIGlmIChtX2dsb2JhbENvbG9ybWFwKQorICAgICAgICAgICAg
ICAgICAgICBtZW1jcHkobV9nbG9iYWxDb2xvcm1hcCwgYnVmLCBzaXplKTsKKyAgICAgICAgICAg
ICAgICBidWYgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICBsZW4gLT0gc2l6ZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0YXJ0KTsKKworICAgICAgICAg
ICAgLy8gcVs2XSA9IFBpeGVsIEFzcGVjdCBSYXRpbworICAgICAgICAgICAgLy8gICBOb3QgdXNl
ZAorICAgICAgICAgICAgLy8gICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpKChxWzZdICsgMTUpIC8g
NjQuMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0vKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwotLyoKLSAqIHByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9y
IHRoZSBnaWYgZGVjb2RlcgotICovCisgICAgICAgIGNhc2UgR0lGR2xvYmFsQ29sb3JtYXA6IHsK
KyAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50byBtX2dsb2Jh
bENvbG9ybWFwCisgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KIAotYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1
bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgCi0gICAgICAgICAgICAgICAgICAgICBH
SUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKLXsK
LSAgaWYgKCFsZW4pIHsKLSAgICAvLyBObyBuZXcgZGF0YSBoYXMgY29tZSBpbiBzaW5jZSB0aGUg
bGFzdCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LQotICBjb25zdCB1bnNpZ25lZCBjaGFyICpxID0gYnVmOwotCi0gIC8vIEFkZCB3aGF0IHdlIGhh
dmUgc28gZmFyIHRvIHRoZSBibG9jawotICAvLyBJZiBwcmV2aW91cyBjYWxsIHRvIG1lIGxlZnQg
c29tZXRoaW5nIGluIHRoZSBob2xkIGZpcnN0IGNvbXBsZXRlIGN1cnJlbnQgYmxvY2sKLSAgLy8g
T3IgaWYgd2UgYXJlIGZpbGxpbmcgdGhlIGNvbG9ybWFwcywgZmlyc3QgY29tcGxldGUgdGhlIGNv
bG9ybWFwCi0gIHVuc2lnbmVkIGNoYXIqIHAgPSAwOwotICBpZiAoc3RhdGUgPT0gZ2lmX2dsb2Jh
bF9jb2xvcm1hcCkKLSAgICBwID0gZ2xvYmFsX2NvbG9ybWFwOwotICBlbHNlIGlmIChzdGF0ZSA9
PSBnaWZfaW1hZ2VfY29sb3JtYXApCi0gICAgcCA9IGZyYW1lX3JlYWRlciA/IGZyYW1lX3JlYWRl
ci0+bG9jYWxfY29sb3JtYXAgOiAwOwotICBlbHNlIGlmIChieXRlc19pbl9ob2xkKQotICAgIHAg
PSBob2xkOwotICBlbHNlCi0gICAgcCA9IDA7Ci0KLSAgaWYgKHAgfHwgKHN0YXRlID09IGdpZl9n
bG9iYWxfY29sb3JtYXApIHx8IChzdGF0ZSA9PSBnaWZfaW1hZ2VfY29sb3JtYXApKSB7Ci0gICAg
Ly8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxvY2sKLSAgICB1bnNpZ25lZCBsID0g
bGVuIDwgYnl0ZXNfdG9fY29uc3VtZSA/IGxlbiA6IGJ5dGVzX3RvX2NvbnN1bWU7Ci0gICAgaWYg
KHApCi0gICAgICAgIG1lbWNweShwICsgYnl0ZXNfaW5faG9sZCwgYnVmLCBsKTsKLQotICAgIGlm
IChsIDwgYnl0ZXNfdG9fY29uc3VtZSkgewotICAgICAgLy8gTm90IGVub3VnaCBpbiAnYnVmJyB0
byBjb21wbGV0ZSBjdXJyZW50IGJsb2NrLCBnZXQgbW9yZQotICAgICAgYnl0ZXNfaW5faG9sZCAr
PSBsOwotICAgICAgYnl0ZXNfdG9fY29uc3VtZSAtPSBsOwotICAgICAgaWYgKGNsaWVudHB0cikK
LSAgICAgICAgY2xpZW50cHRyLT5kZWNvZGluZ0hhbHRlZCgwKTsKLSAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgLy8gUmVzZXQgaG9sZCBidWZmZXIgY291bnQKLSAgICBieXRlc19pbl9o
b2xkID0gMDsKLSAgICAvLyBQb2ludCAncScgdG8gY29tcGxldGUgYmxvY2sgaW4gaG9sZCAob3Ig
aW4gY29sb3JtYXApCi0gICAgcSA9IHA7Ci0gIH0KLQotICAvLyBJbnZhcmlhbnQ6Ci0gIC8vICAg
ICdxJyBpcyBzdGFydCBvZiBjdXJyZW50IHRvIGJlIHByb2Nlc3NlZCBibG9jayAoaG9sZCwgY29s
b3JtYXAgb3IgYnVmKQotICAvLyAgICAnYnl0ZXNfdG9fY29uc3VtZScgaXMgbnVtYmVyIG9mIGJ5
dGVzIHRvIGNvbnN1bWUgZnJvbSAnYnVmJwotICAvLyAgICAnYnVmJyBwb2ludHMgdG8gdGhlIGJ5
dGVzIHRvIGJlIGNvbnN1bWVkIGZyb20gdGhlIGlucHV0IGJ1ZmZlcgotICAvLyAgICAnbGVuJyBp
cyBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiBpbnB1dCBidWZmZXIgZnJvbSBwb3NpdGlvbiAnYnVm
Jy4KLSAgLy8gICAgQXQgZW50cmFuY2Ugb2YgdGhlIGZvciBsb29wIHdpbGwgJ2J1Zicgd2lsbCBi
ZSBtb3ZlZCAnYnl0ZXNfdG9fY29uc3VtZScKLSAgLy8gICAgdG8gcG9pbnQgdG8gbmV4dCBidWZm
ZXIsICdsZW4nIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgotICAvLyAgICBTbyB0aGF0IG5leHQg
cm91bmQgaW4gZm9yIGxvb3AsIHEgZ2V0cyBwb2ludGVkIHRvIHRoZSBuZXh0IGJ1ZmZlci4KLQot
ICBmb3IgKDtsZW4gPj0gYnl0ZXNfdG9fY29uc3VtZTsgcT1idWYpIHsKLSAgICAvLyBFYXQgdGhl
IGN1cnJlbnQgYmxvY2sgZnJvbSB0aGUgYnVmZmVyLCBxIGtlZXBzIHBvaW50ZWQgYXQgY3VycmVu
dCBibG9jawotICAgIGJ1ZiArPSBieXRlc190b19jb25zdW1lOwotICAgIGxlbiAtPSBieXRlc190
b19jb25zdW1lOwotCi0gICAgc3dpdGNoIChzdGF0ZSkKLSAgICB7Ci0gICAgY2FzZSBnaWZfbHp3
OgotICAgICAgaWYgKCFkb19sencocSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWYgZG9f
bHp3KCkgZW5jb3VudGVyZWQgYW4gZXJyb3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxlZAotICAgICAg
ICAgICAgICAgICAgICAgIC8vIGNsaWVudHB0ci0+c2V0RmFpbGVkKCkuCi0gICAgICBHRVROKDEs
IGdpZl9zdWJfYmxvY2spOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9sendfc3RhcnQ6
Ci0gICAgewotICAgICAgLyogSW5pdGlhbGl6ZSBMWlcgcGFyc2VyL2RlY29kZXIgKi8KLSAgICAg
IGludCBkYXRhc2l6ZSA9ICpxOwotICAgICAgLy8gU2luY2Ugd2UgdXNlIGEgY29kZXNpemUgb2Yg
MSBtb3JlIHRoYW4gdGhlIGRhdGFzaXplLCB3ZSBuZWVkIHRvIGVuc3VyZQotICAgICAgLy8gdGhh
dCBvdXIgZGF0YXNpemUgaXMgc3RyaWN0bHkgbGVzcyB0aGFuIHRoZSBNQVhfTFpXX0JJVFMgdmFs
dWUgKDEyKS4KLSAgICAgIC8vIFRoaXMgc2V0cyB0aGUgbGFyZ2VzdCBwb3NzaWJsZSBjb2RlbWFz
ayBjb3JyZWN0bHkgYXQgNDA5NS4KLSAgICAgIGlmIChkYXRhc2l6ZSA+PSBNQVhfTFpXX0JJVFMp
Ci0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFs
c2U7Ci0gICAgICBpbnQgY2xlYXJfY29kZSA9IDEgPDwgZGF0YXNpemU7Ci0gICAgICBpZiAoY2xl
YXJfY29kZSA+PSBNQVhfQklUUykKLSAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0
ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLQotICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAg
ICAgICBmcmFtZV9yZWFkZXItPmRhdGFzaXplID0gZGF0YXNpemU7Ci0gICAgICAgIGZyYW1lX3Jl
YWRlci0+Y2xlYXJfY29kZSA9IGNsZWFyX2NvZGU7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+YXZh
aWwgPSBmcmFtZV9yZWFkZXItPmNsZWFyX2NvZGUgKyAyOwotICAgICAgICBmcmFtZV9yZWFkZXIt
Pm9sZGNvZGUgPSAtMTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5jb2Rlc2l6ZSA9IGZyYW1lX3Jl
YWRlci0+ZGF0YXNpemUgKyAxOwotICAgICAgICBmcmFtZV9yZWFkZXItPmNvZGVtYXNrID0gKDEg
PDwgZnJhbWVfcmVhZGVyLT5jb2Rlc2l6ZSkgLSAxOwotCi0gICAgICAgIGZyYW1lX3JlYWRlci0+
ZGF0dW0gPSBmcmFtZV9yZWFkZXItPmJpdHMgPSAwOwotCi0gICAgICAgIC8qIGluaXQgdGhlIHRh
YmxlcyAqLwotICAgICAgICBpZiAoIWZyYW1lX3JlYWRlci0+c3VmZml4KQotICAgICAgICAgIGZy
YW1lX3JlYWRlci0+c3VmZml4ID0gbmV3IHVuc2lnbmVkIGNoYXJbTUFYX0JJVFNdOwotICAgICAg
ICAvLyBDbGVhcmluZyB0aGUgd2hvbGUgc3VmZml4IHRhYmxlIGxldHMgdXMgYmUgbW9yZSB0b2xl
cmFudCBvZiBiYWQgZGF0YS4KLSAgICAgICAgbWVtc2V0KGZyYW1lX3JlYWRlci0+c3VmZml4LCAw
LCBNQVhfQklUUyk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnJhbWVfcmVhZGVyLT5j
bGVhcl9jb2RlOyBpKyspCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5zdWZmaXhbaV0gPSBpOwot
Ci0gICAgICAgIGlmICghZnJhbWVfcmVhZGVyLT5zdGFjaykKLSAgICAgICAgICBmcmFtZV9yZWFk
ZXItPnN0YWNrID0gbmV3IHVuc2lnbmVkIGNoYXJbTUFYX0JJVFNdOwotICAgICAgICBmcmFtZV9y
ZWFkZXItPnN0YWNrcCA9IGZyYW1lX3JlYWRlci0+c3RhY2s7Ci0gICAgICB9Ci0KLSAgICAgIEdF
VE4oMSwgZ2lmX3N1Yl9ibG9jayk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgLyogQWxsIEdJ
RiBmaWxlcyBiZWdpbiB3aXRoICJHSUY4N2EiIG9yICJHSUY4OWEiICovCi0gICAgY2FzZSBnaWZf
dHlwZToKLSAgICB7Ci0gICAgICBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJHSUY4OWEiLCA2KSkK
LSAgICAgICAgdmVyc2lvbiA9IDg5OwotICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoKGNoYXIqKXEs
ICJHSUY4N2EiLCA2KSkKLSAgICAgICAgdmVyc2lvbiA9IDg3OwotICAgICAgZWxzZQotICAgICAg
ICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAg
ICAgR0VUTig3LCBnaWZfZ2xvYmFsX2hlYWRlcik7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAg
Y2FzZSBnaWZfZ2xvYmFsX2hlYWRlcjoKLSAgICB7Ci0gICAgICAvKiBUaGlzIGlzIHRoZSBoZWln
aHQgYW5kIHdpZHRoIG9mIHRoZSAic2NyZWVuIiBvcgotICAgICAgICogZnJhbWUgaW50byB3aGlj
aCBpbWFnZXMgYXJlIHJlbmRlcmVkLiAgVGhlCi0gICAgICAgKiBpbmRpdmlkdWFsIGltYWdlcyBj
YW4gYmUgc21hbGxlciB0aGFuIHRoZQotICAgICAgICogc2NyZWVuIHNpemUgYW5kIGxvY2F0ZWQg
d2l0aCBhbiBvcmlnaW4gYW55d2hlcmUKLSAgICAgICAqIHdpdGhpbiB0aGUgc2NyZWVuLgotICAg
ICAgICovCi0KLSAgICAgIHNjcmVlbl93aWR0aCA9IEdFVElOVDE2KHEpOwotICAgICAgc2NyZWVu
X2hlaWdodCA9IEdFVElOVDE2KHEgKyAyKTsKLQotICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0
aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KLSAgICAgIGlmIChjbGllbnRwdHIgJiYgIWNs
aWVudHB0ci0+c2V0U2l6ZShzY3JlZW5fd2lkdGgsIHNjcmVlbl9oZWlnaHQpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAKLSAgICAgIHNjcmVlbl9iZ2NvbG9yID0gcVs1XTsKLSAgICAg
IGdsb2JhbF9jb2xvcm1hcF9zaXplID0gMjw8KHFbNF0mMHgwNyk7Ci0KLSAgICAgIGlmICgocVs0
XSAmIDB4ODApICYmIGdsb2JhbF9jb2xvcm1hcF9zaXplID4gMCkgeyAvKiBnbG9iYWwgbWFwICov
Ci0gICAgICAgIC8vIEdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNpemUgPSAzKmdsb2JhbF9jb2xvcm1hcF9zaXplOwotICAgICAgICAKLSAgICAgICAgLy8g
TWFsbG9jIHRoZSBjb2xvciBtYXAsIGJ1dCBvbmx5IGlmIHdlJ3JlIG5vdCBqdXN0IGNvdW50aW5n
IGZyYW1lcy4KLSAgICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVD
b3VudFF1ZXJ5KQotICAgICAgICAgIGdsb2JhbF9jb2xvcm1hcCA9IG5ldyB1bnNpZ25lZCBjaGFy
W3NpemVdOwotCi0gICAgICAgIGlmIChsZW4gPCBzaXplKSB7Ci0gICAgICAgICAgLy8gVXNlICdo
b2xkJyBwYXR0ZXJuIHRvIGdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAgICAgR0VUTihz
aXplLCBnaWZfZ2xvYmFsX2NvbG9ybWFwKTsKLSAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHSUZJbWFnZVN0YXJ0OiB7CisgICAgICAgICAgICBpZiAoKnEgPT0gJzsnKSB7IC8vIHRlcm1p
bmF0b3IuCisgICAgICAgICAgICAgICAgR0VUTigwLCBHSUZEb25lKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCpxID09ICchJykgeyAv
LyBleHRlbnNpb24uCisgICAgICAgICAgICAgICAgR0VUTigyLCBHSUZFeHRlbnNpb24pOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZiB3
ZSBnZXQgYW55dGhpbmcgb3RoZXIgdGhhbiAnLCcgKGltYWdlIHNlcGFyYXRvciksICchJworICAg
ICAgICAgICAgLy8gKGV4dGVuc2lvbiksIG9yICc7JyAodHJhaWxlciksIHRoZXJlIGlzIGV4dHJh
bmVvdXMgZGF0YQorICAgICAgICAgICAgLy8gYmV0d2VlbiBibG9ja3MuIFRoZSBHSUY4N2Egc3Bl
YyB0ZWxscyB1cyB0byBrZWVwIHJlYWRpbmcKKyAgICAgICAgICAgIC8vIHVudGlsIHdlIGZpbmQg
YW4gaW1hZ2Ugc2VwYXJhdG9yLCBidXQgR0lGODlhIHNheXMgc3VjaAorICAgICAgICAgICAgLy8g
YSBmaWxlIGlzIGNvcnJ1cHQuIFdlIGZvbGxvdyBHSUY4OWEgYW5kIGJhaWwgb3V0LgorICAgICAg
ICAgICAgaWYgKCpxICE9ICcsJykKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBt
X2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKworICAgICAgICAgICAgR0VUTig5LCBHSUZJ
bWFnZUhlYWRlcik7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKLSAg
ICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFuZCBnbyBkaXJlY3RseSB0byBnaWZfaW1hZ2Vfc3Rh
cnQuCi0gICAgICAgIGlmIChnbG9iYWxfY29sb3JtYXApCi0gICAgICAgICAgICBtZW1jcHkoZ2xv
YmFsX2NvbG9ybWFwLCBidWYsIHNpemUpOwotICAgICAgICBidWYgKz0gc2l6ZTsKLSAgICAgICAg
bGVuIC09IHNpemU7Ci0gICAgICB9Ci0KLSAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsK
LQotICAgICAgLy8gcVs2XSA9IFBpeGVsIEFzcGVjdCBSYXRpbwotICAgICAgLy8gICBOb3QgdXNl
ZAotICAgICAgLy8gICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpKChxWzZdICsgMTUpIC8gNjQuMCk7
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfZ2xvYmFsX2NvbG9ybWFwOgotICAg
ICAgLy8gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGNvcGllZCBpbnRvIGdsb2JhbF9jb2xvcm1hcAot
ICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQpOwotICAgIGJyZWFrOwotCi0gICAgY2FzZSBn
aWZfaW1hZ2Vfc3RhcnQ6Ci0gICAgewotICAgICAgaWYgKCpxID09ICc7JykgeyAvKiB0ZXJtaW5h
dG9yICovCi0gICAgICAgIEdFVE4oMCwgZ2lmX2RvbmUpOwotICAgICAgICBicmVhazsKLSAgICAg
IH0KLQotICAgICAgaWYgKCpxID09ICchJykgeyAvKiBleHRlbnNpb24gKi8KLSAgICAgICAgR0VU
TigyLCBnaWZfZXh0ZW5zaW9uKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIC8q
IElmIHdlIGdldCBhbnl0aGluZyBvdGhlciB0aGFuICcsJyAoaW1hZ2Ugc2VwYXJhdG9yKSwgJyEn
Ci0gICAgICAgKiAoZXh0ZW5zaW9uKSwgb3IgJzsnICh0cmFpbGVyKSwgdGhlcmUgaXMgZXh0cmFu
ZW91cyBkYXRhCi0gICAgICAgKiBiZXR3ZWVuIGJsb2Nrcy4gVGhlIEdJRjg3YSBzcGVjIHRlbGxz
IHVzIHRvIGtlZXAgcmVhZGluZwotICAgICAgICogdW50aWwgd2UgZmluZCBhbiBpbWFnZSBzZXBh
cmF0b3IsIGJ1dCBHSUY4OWEgc2F5cyBzdWNoCi0gICAgICAgKiBhIGZpbGUgaXMgY29ycnVwdC4g
V2UgZm9sbG93IEdJRjg5YSBhbmQgYmFpbCBvdXQuICovCi0gICAgICBpZiAoKnEgIT0gJywnKQot
ICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNl
OwotCi0gICAgICBHRVROKDksIGdpZl9pbWFnZV9oZWFkZXIpOwotICAgIH0KLSAgICBicmVhazsK
LQotICAgIGNhc2UgZ2lmX2V4dGVuc2lvbjoKLSAgICB7Ci0gICAgICBjb3VudCA9IHFbMV07Ci0g
ICAgICBnc3RhdGUgZXMgPSBnaWZfc2tpcF9ibG9jazsKLQotICAgICAgLy8gVGhlIEdJRiBzcGVj
IG1hbmRhdGVzIGxlbmd0aHMgZm9yIHRocmVlIG9mIHRoZSBleHRlbnNpb25zIGJlbG93LgotICAg
ICAgLy8gSG93ZXZlciwgaXQncyBwb3NzaWJsZSBmb3IgR0lGcyBpbiB0aGUgd2lsZCB0byBkZXZp
YXRlLiBGb3IgZXhhbXBsZSwKLSAgICAgIC8vIHNvbWUgR0lGcyB0aGF0IGVtYmVkIElDQyBjb2xv
ciBwcm9maWxlcyB1c2luZyBnaWZfYXBwbGljYXRpb25fZXh0ZW5zaW9uCi0gICAgICAvLyB2aW9s
YXRlIHRoZSBzcGVjIGFuZCB0cmVhdCB0aGlzIGV4dGVuc2lvbiBibG9jayBsaWtlIGEgc29ydCBv
ZgotICAgICAgLy8gImV4dGVuc2lvbiArIGRhdGEiIGJsb2NrLCBnaXZpbmcgYSBzaXplIGdyZWF0
ZXIgdGhhbiAxMSBhbmQgZmlsbGluZyB0aGUKLSAgICAgIC8vIHJlbWFpbmluZyBieXRlcyB3aXRo
IGRhdGEgKHRoZW4gZm9sbG93aW5nIHdpdGggbW9yZSBkYXRhIGJsb2NrcyBhcwotICAgICAgLy8g
bmVlZGVkKSwgaW5zdGVhZCBvZiBwbGFjaW5nIGEgdHJ1ZSBkYXRhIGJsb2NrIGp1c3QgYWZ0ZXIg
dGhlIDExIGJ5dGUKLSAgICAgIC8vIGV4dGVuc2lvbiBibG9jay4KLSAgICAgIC8vCi0gICAgICAv
LyBBY2NvcmRpbmdseSwgaWYgdGhlIHNwZWNpZmllZCBsZW5ndGggaXMgbGFyZ2VyIHRoYW4gdGhl
IHJlcXVpcmVkIHZhbHVlLAotICAgICAgLy8gd2UgdXNlIGl0LiBJZiBpdCdzIHNtYWxsZXIsIHRo
ZW4gd2UgZW5mb3JjZSB0aGUgc3BlYyB2YWx1ZSwgYmVjYXVzZSB0aGUKLSAgICAgIC8vIHBhcnNl
cnMgZm9yIHRoZXNlIGV4dGVuc2lvbnMgZXhwZWN0IHRvIGhhdmUgdGhlIHNwZWNpZmllZCBudW1i
ZXIgb2YKLSAgICAgIC8vIGJ5dGVzIGF2YWlsYWJsZSwgYW5kIGlmIHdlIGRvbid0IGVuc3VyZSB0
aGF0LCB0aGV5IGNvdWxkIHJlYWQgb2ZmIHRoZQotICAgICAgLy8gZW5kIG9mIHRoZSBoZWFwIGJ1
ZmZlci4gKEluIHRoaXMgY2FzZSwgaXQncyBsaWtlbHkgdGhlIEdJRiBpcyBjb3JydXB0Ci0gICAg
ICAvLyBhbmQgd2UnbGwgc29vbiBmYWlsIHRvIGRlY29kZSBhbnl3YXkuKQotICAgICAgc3dpdGNo
ICgqcSkKLSAgICAgIHsKLSAgICAgIGNhc2UgMHhmOToKLSAgICAgICAgZXMgPSBnaWZfY29udHJv
bF9leHRlbnNpb247Ci0gICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDQpOwotICAgICAg
ICBicmVhazsKLQotICAgICAgY2FzZSAweDAxOgotICAgICAgICAvLyBpZ25vcmluZyBwbGFpbiB0
ZXh0IGV4dGVuc2lvbgotICAgICAgICBjb3VudCA9IHN0ZDo6bWF4KGNvdW50LCAxMik7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDB4ZmY6Ci0gICAgICAgIGVzID0gZ2lmX2FwcGxpY2F0
aW9uX2V4dGVuc2lvbjsKLSAgICAgICAgY291bnQgPSBzdGQ6Om1heChjb3VudCwgMTEpOwotICAg
ICAgICBicmVhazsKLQotICAgICAgY2FzZSAweGZlOgotICAgICAgICBlcyA9IGdpZl9jb25zdW1l
X2NvbW1lbnQ7Ci0gICAgICAgIGJyZWFrOwotICAgICAgfQotCi0gICAgICBpZiAoY291bnQpCi0g
ICAgICAgIEdFVE4oY291bnQsIGVzKTsKLSAgICAgIGVsc2UKLSAgICAgICAgR0VUTigxLCBnaWZf
aW1hZ2Vfc3RhcnQpOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2NvbnN1bWVf
YmxvY2s6Ci0gICAgICBpZiAoISpxKQotICAgICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7
Ci0gICAgICBlbHNlCi0gICAgICAgIEdFVE4oKnEsIGdpZl9za2lwX2Jsb2NrKTsKLSAgICBicmVh
azsKLQotICAgIGNhc2UgZ2lmX3NraXBfYmxvY2s6Ci0gICAgICBHRVROKDEsIGdpZl9jb25zdW1l
X2Jsb2NrKTsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfY29udHJvbF9leHRlbnNpb246
Ci0gICAgewotICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3Vu
dFF1ZXJ5KSB7Ci0gICAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXIpCi0gICAgICAgICAgICBmcmFt
ZV9yZWFkZXIgPSBuZXcgR0lGRnJhbWVSZWFkZXIoKTsKLSAgICAgIH0KLQotICAgICAgaWYgKGZy
YW1lX3JlYWRlcikgewotICAgICAgICBpZiAoKnEgJiAweDEpIHsKLSAgICAgICAgICBmcmFtZV9y
ZWFkZXItPnRwaXhlbCA9IHFbM107Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc190cmFuc3Bh
cmVudCA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5p
c190cmFuc3BhcmVudCA9IGZhbHNlOwotICAgICAgICAgIC8vIGlnbm9yaW5nIGdmeCBjb250cm9s
IGV4dGVuc2lvbgorCisgICAgICAgIGNhc2UgR0lGRXh0ZW5zaW9uOiB7CisgICAgICAgICAgICBt
X2NvdW50ID0gcVsxXTsKKyAgICAgICAgICAgIEdJRlN0YXRlIGVzID0gR0lGU2tpcEJsb2NrOwor
CisgICAgICAgICAgICAvLyBUaGUgR0lGIHNwZWMgbWFuZGF0ZXMgbGVuZ3RocyBmb3IgdGhyZWUg
b2YgdGhlIGV4dGVuc2lvbnMgYmVsb3cuCisgICAgICAgICAgICAvLyBIb3dldmVyLCBpdCdzIHBv
c3NpYmxlIGZvciBHSUZzIGluIHRoZSB3aWxkIHRvIGRldmlhdGUuIEZvciBleGFtcGxlLAorICAg
ICAgICAgICAgLy8gc29tZSBHSUZzIHRoYXQgZW1iZWQgSUNDIGNvbG9yIHByb2ZpbGVzIHVzaW5n
IEdJRkFwcGxpY2F0aW9uRXh0ZW5zaW9uCisgICAgICAgICAgICAvLyB2aW9sYXRlIHRoZSBzcGVj
IGFuZCB0cmVhdCB0aGlzIGV4dGVuc2lvbiBibG9jayBsaWtlIGEgc29ydCBvZgorICAgICAgICAg
ICAgLy8gImV4dGVuc2lvbiArIGRhdGEiIGJsb2NrLCBnaXZpbmcgYSBzaXplIGdyZWF0ZXIgdGhh
biAxMSBhbmQgZmlsbGluZyB0aGUKKyAgICAgICAgICAgIC8vIHJlbWFpbmluZyBieXRlcyB3aXRo
IGRhdGEgKHRoZW4gZm9sbG93aW5nIHdpdGggbW9yZSBkYXRhIGJsb2NrcyBhcworICAgICAgICAg
ICAgLy8gbmVlZGVkKSwgaW5zdGVhZCBvZiBwbGFjaW5nIGEgdHJ1ZSBkYXRhIGJsb2NrIGp1c3Qg
YWZ0ZXIgdGhlIDExIGJ5dGUKKyAgICAgICAgICAgIC8vIGV4dGVuc2lvbiBibG9jay4KKyAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAvLyBBY2NvcmRpbmdseSwgaWYgdGhlIHNwZWNpZmllZCBs
ZW5ndGggaXMgbGFyZ2VyIHRoYW4gdGhlIHJlcXVpcmVkIHZhbHVlLAorICAgICAgICAgICAgLy8g
d2UgdXNlIGl0LiBJZiBpdCdzIHNtYWxsZXIsIHRoZW4gd2UgZW5mb3JjZSB0aGUgc3BlYyB2YWx1
ZSwgYmVjYXVzZSB0aGUKKyAgICAgICAgICAgIC8vIHBhcnNlcnMgZm9yIHRoZXNlIGV4dGVuc2lv
bnMgZXhwZWN0IHRvIGhhdmUgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YKKyAgICAgICAgICAgIC8v
IGJ5dGVzIGF2YWlsYWJsZSwgYW5kIGlmIHdlIGRvbid0IGVuc3VyZSB0aGF0LCB0aGV5IGNvdWxk
IHJlYWQgb2ZmIHRoZQorICAgICAgICAgICAgLy8gZW5kIG9mIHRoZSBoZWFwIGJ1ZmZlci4gKElu
IHRoaXMgY2FzZSwgaXQncyBsaWtlbHkgdGhlIEdJRiBpcyBjb3JydXB0CisgICAgICAgICAgICAv
LyBhbmQgd2UnbGwgc29vbiBmYWlsIHRvIGRlY29kZSBhbnl3YXkuKQorICAgICAgICAgICAgc3dp
dGNoICgqcSkgeworICAgICAgICAgICAgY2FzZSAweGY5OgorICAgICAgICAgICAgICAgIGVzID0g
R0lGQ29udHJvbEV4dGVuc2lvbjsKKyAgICAgICAgICAgICAgICBtX2NvdW50ID0gc3RkOjptYXgo
bV9jb3VudCwgNCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2Ug
MHgwMToKKyAgICAgICAgICAgICAgICAvLyBpZ25vcmluZyBwbGFpbiB0ZXh0IGV4dGVuc2lvbgor
ICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1heChtX2NvdW50LCAxMik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMHhmZjoKKyAgICAgICAgICAgICAg
ICBlcyA9IEdJRkFwcGxpY2F0aW9uRXh0ZW5zaW9uOworICAgICAgICAgICAgICAgIG1fY291bnQg
PSBzdGQ6Om1heChtX2NvdW50LCAxMSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIGNhc2UgMHhmZToKKyAgICAgICAgICAgICAgICBlcyA9IEdJRkNvbnN1bWVDb21tZW50
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAobV9jb3VudCkKKyAgICAgICAgICAgICAgICBHRVROKG1fY291bnQsIGVzKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOworICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24g
dGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBlbnVtCi0gICAgICAgIC8vIG1h
dGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3BlYyEKLSAgICAgICAgaW50IGRpc3Bvc2FsX21ldGhv
ZCA9ICgoKnEpID4+IDIpICYgMHg3OwotICAgICAgICBmcmFtZV9yZWFkZXItPmRpc3Bvc2FsX21l
dGhvZCA9IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kKWRpc3Bvc2Fs
X21ldGhvZDsKLSAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgM3JkIGJpdCAodmFsdWUgNCksIG90
aGVyIHNwZWNzIHNheSB2YWx1ZSAzCi0gICAgICAgIC8vIExldCdzIGNob29zZSAzICh0aGUgbW9y
ZSBwb3B1bGFyKQotICAgICAgICBpZiAoZGlzcG9zYWxfbWV0aG9kID09IDQpCi0gICAgICAgICAg
ZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QgPSBXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNw
b3NlT3ZlcndyaXRlUHJldmlvdXM7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSA9
IEdFVElOVDE2KHEgKyAxKSAqIDEwOwotICAgICAgfQotICAgICAgR0VUTigxLCBnaWZfY29uc3Vt
ZV9ibG9jayk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfY29tbWVudF9leHRl
bnNpb246Ci0gICAgewotICAgICAgaWYgKCpxKQotICAgICAgICBHRVROKCpxLCBnaWZfY29uc3Vt
ZV9jb21tZW50KTsKLSAgICAgIGVsc2UKLSAgICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQp
OwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2NvbnN1bWVfY29tbWVudDoKLSAg
ICAgIEdFVE4oMSwgZ2lmX2NvbW1lbnRfZXh0ZW5zaW9uKTsKLSAgICBicmVhazsKLQotICAgIGNh
c2UgZ2lmX2FwcGxpY2F0aW9uX2V4dGVuc2lvbjoKLSAgICAgIC8qIENoZWNrIGZvciBuZXRzY2Fw
ZSBhcHBsaWNhdGlvbiBleHRlbnNpb24gKi8KLSAgICAgIGlmICghc3RybmNtcCgoY2hhciopcSwg
Ik5FVFNDQVBFMi4wIiwgMTEpIHx8Ci0gICAgICAgICFzdHJuY21wKChjaGFyKilxLCAiQU5JTUVY
VFMxLjAiLCAxMSkpCi0gICAgICAgIEdFVE4oMSwgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9j
ayk7Ci0gICAgICBlbHNlCi0gICAgICAgIEdFVE4oMSwgZ2lmX2NvbnN1bWVfYmxvY2spOwotICAg
IGJyZWFrOwotCi0gICAgLyogTmV0c2NhcGUtc3BlY2lmaWMgR0lGIGV4dGVuc2lvbjogYW5pbWF0
aW9uIGxvb3BpbmcgKi8KLSAgICBjYXNlIGdpZl9uZXRzY2FwZV9leHRlbnNpb25fYmxvY2s6Ci0g
ICAgICBpZiAoKnEpCi0gICAgICAgIEdFVE4oKnEsIGdpZl9jb25zdW1lX25ldHNjYXBlX2V4dGVu
c2lvbik7Ci0gICAgICBlbHNlCi0gICAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsKLSAg
ICBicmVhazsKLQotICAgIC8qIFBhcnNlIG5ldHNjYXBlLXNwZWNpZmljIGFwcGxpY2F0aW9uIGV4
dGVuc2lvbnMgKi8KLSAgICBjYXNlIGdpZl9jb25zdW1lX25ldHNjYXBlX2V4dGVuc2lvbjoKLSAg
ICB7Ci0gICAgICBpbnQgbmV0c2NhcGVfZXh0ZW5zaW9uID0gcVswXSAmIDc7Ci0KLSAgICAgIC8q
IExvb3AgZW50aXJlIGFuaW1hdGlvbiBzcGVjaWZpZWQgIyBvZiB0aW1lcy4gIE9ubHkgcmVhZCB0
aGUKLSAgICAgICAgIGxvb3AgY291bnQgZHVyaW5nIHRoZSBmaXJzdCBpdGVyYXRpb24uICovCi0g
ICAgICBpZiAobmV0c2NhcGVfZXh0ZW5zaW9uID09IDEpIHsKLSAgICAgICAgbG9vcF9jb3VudCA9
IEdFVElOVDE2KHEgKyAxKTsKLQotICAgICAgICAvKiBaZXJvIGxvb3AgY291bnQgaXMgaW5maW5p
dGUgYW5pbWF0aW9uIGxvb3AgcmVxdWVzdCAqLwotICAgICAgICBpZiAobG9vcF9jb3VudCA9PSAw
KQotICAgICAgICAgIGxvb3BfY291bnQgPSBXZWJDb3JlOjpjQW5pbWF0aW9uTG9vcEluZmluaXRl
OwotCi0gICAgICAgIEdFVE4oMSwgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jayk7Ci0gICAg
ICB9Ci0gICAgICAvKiBXYWl0IGZvciBzcGVjaWZpZWQgIyBvZiBieXRlcyB0byBlbnRlciBidWZm
ZXIgKi8KLSAgICAgIGVsc2UgaWYgKG5ldHNjYXBlX2V4dGVuc2lvbiA9PSAyKSB7Ci0gICAgICAg
IC8vIERvbid0IGRvIHRoaXMsIHRoaXMgZXh0ZW5zaW9uIGRvZXNuJ3QgZXhpc3QgKGlzbid0IHVz
ZWQgYXQgYWxsKSAKLSAgICAgICAgLy8gYW5kIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGFzIG91ciBz
dHJlYW1pbmcvYnVmZmVyaW5nIHRha2VzIGNhcmUgb2YgaXQgYWxsLi4uCi0gICAgICAgIC8vIFNl
ZTogaHR0cDovL3NlbW1peC5wbC9jb2xvci9leGdyYWYvZWVnMjQuaHRtCi0gICAgICAgIEdFVE4o
MSwgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jayk7Ci0gICAgICB9IGVsc2UgewotICAgICAg
ICAvLyAwLDMtNyBhcmUgeWV0IHRvIGJlIGRlZmluZWQgbmV0c2NhcGUgZXh0ZW5zaW9uIGNvZGVz
Ci0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFs
c2U7Ci0gICAgICB9Ci0KLSAgICAgIGJyZWFrOwotICAgIH0KIAotICAgIGNhc2UgZ2lmX2ltYWdl
X2hlYWRlcjoKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBoZWlnaHQsIHdpZHRoLCB4X29mZnNldCwg
eV9vZmZzZXQ7Ci0gICAgICAKLSAgICAgIC8qIEdldCBpbWFnZSBvZmZzZXRzLCB3aXRoIHJlc3Bl
Y3QgdG8gdGhlIHNjcmVlbiBvcmlnaW4gKi8KLSAgICAgIHhfb2Zmc2V0ID0gR0VUSU5UMTYocSk7
Ci0gICAgICB5X29mZnNldCA9IEdFVElOVDE2KHEgKyAyKTsKLQotICAgICAgLyogR2V0IGltYWdl
IHdpZHRoIGFuZCBoZWlnaHQuICovCi0gICAgICB3aWR0aCAgPSBHRVRJTlQxNihxICsgNCk7Ci0g
ICAgICBoZWlnaHQgPSBHRVRJTlQxNihxICsgNik7Ci0KLSAgICAgIC8qIFdvcmsgYXJvdW5kIGJy
b2tlbiBHSUYgZmlsZXMgd2hlcmUgdGhlIGxvZ2ljYWwgc2NyZWVuCi0gICAgICAgKiBzaXplIGhh
cyB3ZWlyZCB3aWR0aCBvciBoZWlnaHQuICBXZSBhc3N1bWUgdGhhdCBHSUY4N2EKLSAgICAgICAq
IGZpbGVzIGRvbid0IGNvbnRhaW4gYW5pbWF0aW9ucy4KLSAgICAgICAqLwotICAgICAgaWYgKChp
bWFnZXNfZGVjb2RlZCA9PSAwKSAmJgotICAgICAgICAgICgoc2NyZWVuX2hlaWdodCA8IGhlaWdo
dCkgfHwgKHNjcmVlbl93aWR0aCA8IHdpZHRoKSB8fAotICAgICAgICAgICAodmVyc2lvbiA9PSA4
NykpKQotICAgICAgewotICAgICAgICBzY3JlZW5faGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBz
Y3JlZW5fd2lkdGggPSB3aWR0aDsKLSAgICAgICAgeF9vZmZzZXQgPSAwOwotICAgICAgICB5X29m
ZnNldCA9IDA7Ci0KLSAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdp
biBvZiBvdXIgc2l6ZS4KLSAgICAgICAgaWYgKGNsaWVudHB0ciAmJiAhY2xpZW50cHRyLT5zZXRT
aXplKHNjcmVlbl93aWR0aCwgc2NyZWVuX2hlaWdodCkpCi0gICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgfQotCi0gICAgICAvKiBXb3JrIGFyb3VuZCBtb3JlIGJyb2tlbiBHSUYgZmlsZXMg
dGhhdCBoYXZlIHplcm8gaW1hZ2UKLSAgICAgICAgIHdpZHRoIG9yIGhlaWdodCAqLwotICAgICAg
aWYgKCFoZWlnaHQgfHwgIXdpZHRoKSB7Ci0gICAgICAgIGhlaWdodCA9IHNjcmVlbl9oZWlnaHQ7
Ci0gICAgICAgIHdpZHRoID0gc2NyZWVuX3dpZHRoOwotICAgICAgICBpZiAoIWhlaWdodCB8fCAh
d2lkdGgpCi0gICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVk
KCkgOiBmYWxzZTsKLSAgICAgIH0KLQotICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rl
cjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRBdEZyYW1lID09IGltYWdlc19kZWNvZGVkKSB7Ci0gICAg
ICAgIC8vIFRoZSBkZWNvZGVyIG5lZWRzIHRvIHN0b3AuICBIYW5kIGJhY2sgdGhlIG51bWJlciBv
ZiBieXRlcyB3ZSBjb25zdW1lZCBmcm9tCi0gICAgICAgIC8vIGJ1ZmZlciBtaW51cyA5ICh0aGUg
YW1vdW50IHdlIGNvbnN1bWVkIHRvIHJlYWQgdGhlIGhlYWRlcikuCi0gICAgICAgIGlmIChjbGll
bnRwdHIpCi0gICAgICAgICAgICBjbGllbnRwdHItPmRlY29kaW5nSGFsdGVkKGxlbiArIDkpOwot
ICAgICAgICBHRVROKDksIGdpZl9pbWFnZV9oZWFkZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgIH0KLSAgICAgIAotICAgICAgaW1hZ2VzX2NvdW50ID0gaW1hZ2VzX2RlY29kZWQgKyAx
OwotCi0gICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkgJiYg
IWZyYW1lX3JlYWRlcikKLSAgICAgICAgZnJhbWVfcmVhZGVyID0gbmV3IEdJRkZyYW1lUmVhZGVy
KCk7Ci0KLSAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT54
X29mZnNldCA9IHhfb2Zmc2V0OwotICAgICAgICBmcmFtZV9yZWFkZXItPnlfb2Zmc2V0ID0geV9v
ZmZzZXQ7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+aGVpZ2h0ID0gaGVpZ2h0OwotICAgICAgICBm
cmFtZV9yZWFkZXItPndpZHRoID0gd2lkdGg7Ci0KLSAgICAgICAgLyogVGhpcyBjYXNlIHdpbGwg
bmV2ZXIgYmUgdGFrZW4gaWYgdGhpcyBpcyB0aGUgZmlyc3QgaW1hZ2UgKi8KLSAgICAgICAgLyog
YmVpbmcgZGVjb2RlZC4gSWYgYW55IG9mIHRoZSBsYXRlciBpbWFnZXMgYXJlIGxhcmdlciAgICAg
Ki8KLSAgICAgICAgLyogdGhhbiB0aGUgc2NyZWVuIHNpemUsIHdlIG5lZWQgdG8gcmVhbGxvY2F0
ZSBidWZmZXJzLiAgICAgKi8KLSAgICAgICAgaWYgKHNjcmVlbl93aWR0aCA8IHdpZHRoKSB7Ci0g
ICAgICAgICAgLyogWFhYIERldmlhbnQhICovCi0KLSAgICAgICAgICBkZWxldGUgW11mcmFtZV9y
ZWFkZXItPnJvd2J1ZjsKLSAgICAgICAgICBzY3JlZW5fd2lkdGggPSB3aWR0aDsKLSAgICAgICAg
ICBmcmFtZV9yZWFkZXItPnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW3NjcmVlbl93aWR0aF07
Ci0gICAgICAgIH0gZWxzZSBpZiAoIWZyYW1lX3JlYWRlci0+cm93YnVmKSB7Ci0gICAgICAgICAg
ZnJhbWVfcmVhZGVyLT5yb3didWYgPSBuZXcgdW5zaWduZWQgY2hhcltzY3JlZW5fd2lkdGhdOwor
ICAgICAgICBjYXNlIEdJRkNvbnN1bWVCbG9jazogeworICAgICAgICAgICAgaWYgKCEqcSkKKyAg
ICAgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIEdFVE4oKnEsIEdJRlNraXBCbG9jayk7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghZnJhbWVfcmVhZGVyLT5yb3didWYpCi0gICAg
ICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsK
LSAgICAgICAgaWYgKHNjcmVlbl9oZWlnaHQgPCBoZWlnaHQpCi0gICAgICAgICAgc2NyZWVuX2hl
aWdodCA9IGhlaWdodDsKLQotICAgICAgICBpZiAocVs4XSAmIDB4NDApIHsKLSAgICAgICAgICBm
cmFtZV9yZWFkZXItPmludGVybGFjZWQgPSB0cnVlOwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+
aXBhc3MgPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aW50
ZXJsYWNlZCA9IGZhbHNlOwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+aXBhc3MgPSAwOworICAg
ICAgICBjYXNlIEdJRlNraXBCbG9jazogeworICAgICAgICAgICAgR0VUTigxLCBHSUZDb25zdW1l
QmxvY2spOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoaW1h
Z2VzX2RlY29kZWQgPT0gMCkgewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+cHJvZ3Jlc3NpdmVf
ZGlzcGxheSA9IHRydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgLyogT3ZlcmxheWlu
ZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKLSAgICAgICAgICAgICBleGlzdGlu
ZyBpbWFnZSBkYXRhIHVzaW5nIHRoZSBIYWViZXJsaSBkaXNwbGF5IGhhY2sKLSAgICAgICAgICAg
ICByZXF1aXJlcyBzYXZpbmcgdGhlIHVuZGVybHlpbmcgaW1hZ2UgaW4gb3JkZXIgdG8KLSAgICAg
ICAgICAgICBhdm9pZCBqYWdnaWVzIGF0IHRoZSB0cmFuc3BhcmVuY3kgZWRnZXMuICBXZSBhcmUK
LSAgICAgICAgICAgICB1bnByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0LCBzbyBkb24ndCBkaXNw
bGF5IHN1Y2gKLSAgICAgICAgICAgICBpbWFnZXMgcHJvZ3Jlc3NpdmVseSAqLwotICAgICAgICAg
IGZyYW1lX3JlYWRlci0+cHJvZ3Jlc3NpdmVfZGlzcGxheSA9IGZhbHNlOworICAgICAgICBjYXNl
IEdJRkNvbnRyb2xFeHRlbnNpb246IHsKKyAgICAgICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFn
ZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVyeSkgeworICAgICAgICAgICAgICAgIGlmICghbV9m
cmFtZUNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gbmV3IEdJ
RkZyYW1lQ29udGV4dCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobV9mcmFt
ZUNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBpZiAoKnEgJiAweDEpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnRwaXhlbCA9IHFbM107CisgICAgICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3Bh
cmVudCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmluZyBnZnggY29udHJv
bCBleHRlbnNpb24KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gTk9URTog
VGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3NhbE1ldGhvZCBlbnVt
CisgICAgICAgICAgICAgICAgLy8gbWF0Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVjIQorICAg
ICAgICAgICAgICAgIGludCBkaXNwb3NhbE1ldGhvZCA9ICgoKnEpID4+IDIpICYgMHg3OworICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5kaXNwb3NhbE1ldGhvZCA9IChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kKWRpc3Bvc2FsTWV0aG9kOworCisgICAgICAg
ICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgM3JkIGJpdCAodmFsdWUgNCksIG90aGVyIHNwZWNz
IHNheSB2YWx1ZSAzCisgICAgICAgICAgICAgICAgLy8gTGV0J3MgY2hvb3NlIDMgKHRoZSBtb3Jl
IHBvcHVsYXIpCisgICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2FsTWV0aG9kID09IDQpCisgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5kaXNwb3NhbE1ldGhvZCA9IFdlYkNvcmU6
OkltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91czsKKyAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+ZGVsYXlUaW1lID0gR0VUSU5UMTYocSArIDEpICogMTA7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9jayk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIC8qIENsZWFyIHN0YXRlIGZyb20gbGFzdCBp
bWFnZSAqLwotICAgICAgICBmcmFtZV9yZWFkZXItPmlyb3cgPSAwOwotICAgICAgICBmcmFtZV9y
ZWFkZXItPnJvd3NfcmVtYWluaW5nID0gZnJhbWVfcmVhZGVyLT5oZWlnaHQ7Ci0gICAgICAgIGZy
YW1lX3JlYWRlci0+cm93ZW5kID0gZnJhbWVfcmVhZGVyLT5yb3didWYgKyBmcmFtZV9yZWFkZXIt
PndpZHRoOwotICAgICAgICBmcmFtZV9yZWFkZXItPnJvd3AgPSBmcmFtZV9yZWFkZXItPnJvd2J1
ZjsKLQotICAgICAgICAvKiBiaXRzIHBlciBwaXhlbCBpcyBxWzhdJjB4MDcgKi8KLSAgICAgIH0K
LSAgICAgIAotICAgICAgaWYgKHFbOF0gJiAweDgwKSAvKiBoYXMgYSBsb2NhbCBjb2xvcm1hcD8g
Ki8KLSAgICAgIHsKLSAgICAgICAgaW50IG51bV9jb2xvcnMgPSAyIDw8IChxWzhdICYgMHg3KTsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMqbnVtX2NvbG9yczsKLSAgICAgICAgdW5z
aWduZWQgY2hhciAqbWFwID0gZnJhbWVfcmVhZGVyID8gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xv
cm1hcCA6IDA7Ci0gICAgICAgIGlmIChmcmFtZV9yZWFkZXIgJiYgKCFtYXAgfHwgKG51bV9jb2xv
cnMgPiBmcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwX3NpemUpKSkgewotICAgICAgICAgIGRl
bGV0ZSBbXW1hcDsKLSAgICAgICAgICBtYXAgPSBuZXcgdW5zaWduZWQgY2hhcltzaXplXTsKLSAg
ICAgICAgICBpZiAoIW1hcCkKLSAgICAgICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRw
dHItPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgIGNhc2UgR0lGQ29tbWVudEV4dGVuc2lv
bjogeworICAgICAgICAgICAgaWYgKCpxKQorICAgICAgICAgICAgICAgIEdFVE4oKnEsIEdJRkNv
bnN1bWVDb21tZW50KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBHRVROKDEs
IEdJRkltYWdlU3RhcnQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAg
ICAvKiBTd2l0Y2ggdG8gdGhlIG5ldyBsb2NhbCBwYWxldHRlIGFmdGVyIGl0IGxvYWRzICovCi0g
ICAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmxvY2Fs
X2NvbG9ybWFwID0gbWFwOwotICAgICAgICAgIGZyYW1lX3JlYWRlci0+bG9jYWxfY29sb3JtYXBf
c2l6ZSA9IG51bV9jb2xvcnM7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pc19sb2NhbF9jb2xv
cm1hcF9kZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgY2FzZSBHSUZDb25zdW1lQ29tbWVudDogewor
ICAgICAgICAgICAgR0VUTigxLCBHSUZDb21tZW50RXh0ZW5zaW9uKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAv
LyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBpbWFnZSBjb2xvcm1hcAotICAgICAgICAg
IEdFVE4oc2l6ZSwgZ2lmX2ltYWdlX2NvbG9ybWFwKTsKLSAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBHSUZBcHBsaWNhdGlvbkV4dGVuc2lvbjogeworICAgICAgICAgICAgLy8gQ2hlY2sg
Zm9yIG5ldHNjYXBlIGFwcGxpY2F0aW9uIGV4dGVuc2lvbi4KKyAgICAgICAgICAgIGlmICghc3Ry
bmNtcCgoY2hhciopcSwgIk5FVFNDQVBFMi4wIiwgMTEpIHx8ICFzdHJuY21wKChjaGFyKilxLCAi
QU5JTUVYVFMxLjAiLCAxMSkpCisgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZOZXRzY2FwZUV4
dGVuc2lvbkJsb2NrKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBHRVROKDEs
IEdJRkNvbnN1bWVCbG9jayk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGRpcmVjdGx5IGdvIHRvIGdpZl9sendfc3RhcnQKLSAg
ICAgICAgaWYgKGZyYW1lX3JlYWRlcikKLSAgICAgICAgICBtZW1jcHkoZnJhbWVfcmVhZGVyLT5s
b2NhbF9jb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgYnVmICs9IHNpemU7Ci0gICAgICAg
IGxlbiAtPSBzaXplOwotICAgICAgfSBlbHNlIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAg
LyogU3dpdGNoIGJhY2sgdG8gdGhlIGdsb2JhbCBwYWxldHRlICovCi0gICAgICAgIGZyYW1lX3Jl
YWRlci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9IGZhbHNlOwotICAgICAgfQotICAgICAg
R0VUTigxLCBnaWZfbHp3X3N0YXJ0KTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdp
Zl9pbWFnZV9jb2xvcm1hcDoKLSAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQg
aW50byBsb2NhbF9jb2xvcm1hcAotICAgICAgR0VUTigxLCBnaWZfbHp3X3N0YXJ0KTsKLSAgICBi
cmVhazsKLQotICAgIGNhc2UgZ2lmX3N1Yl9ibG9jazoKLSAgICB7Ci0gICAgICBpZiAoKGNvdW50
ID0gKnEpICE9IDApCi0gICAgICAvKiBTdGlsbCB3b3JraW5nIG9uIHRoZSBzYW1lIGltYWdlOiBQ
cm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2sgKi8KLSAgICAgIHsKLSAgICAgICAgLyogTWFrZSBz
dXJlIHRoZXJlIGFyZSBzdGlsbCByb3dzIGxlZnQuIElmIHRoZSBHSUYgZGF0YSAqLwotICAgICAg
ICAvKiBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBhbiBleHBsaWNpdCB0ZXJtaW5hdG9yLiAg
ICovCi0gICAgICAgIGlmIChmcmFtZV9yZWFkZXIgJiYgZnJhbWVfcmVhZGVyLT5yb3dzX3JlbWFp
bmluZyA9PSAwKSB7Ci0gICAgICAgICAgLyogVGhpcyBpcyBhbiBpbGxlZ2FsIEdJRiwgYnV0IHdl
IHJlbWFpbiB0b2xlcmFudC4gKi8KLSAgICAgICAgICBHRVROKDEsIGdpZl9zdWJfYmxvY2spOwor
CisgICAgICAgIC8vIE5ldHNjYXBlLXNwZWNpZmljIEdJRiBleHRlbnNpb246IGFuaW1hdGlvbiBs
b29waW5nLgorICAgICAgICBjYXNlIEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2s6IHsKKyAgICAg
ICAgICAgIGlmICgqcSkKKyAgICAgICAgICAgICAgICBHRVROKCpxLCBHSUZDb25zdW1lTmV0c2Nh
cGVFeHRlbnNpb24pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEdFVE4oMSwg
R0lGSW1hZ2VTdGFydCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIFBhcnNlIG5ldHNjYXBlLXNwZWNpZmljIGFwcGxpY2F0aW9uIGV4dGVuc2lvbnMKKyAgICAg
ICAgY2FzZSBHSUZDb25zdW1lTmV0c2NhcGVFeHRlbnNpb246IHsKKyAgICAgICAgICAgIGludCBu
ZXRzY2FwZUV4dGVuc2lvbiA9IHFbMF0gJiA3OworCisgICAgICAgICAgICAvLyBMb29wIGVudGly
ZSBhbmltYXRpb24gc3BlY2lmaWVkICMgb2YgdGltZXMuIE9ubHkgcmVhZCB0aGUgbG9vcCBjb3Vu
dCBkdXJpbmcgdGhlIGZpcnN0IGl0ZXJhdGlvbi4KKyAgICAgICAgICAgIGlmIChuZXRzY2FwZUV4
dGVuc2lvbiA9PSAxKSB7CisgICAgICAgICAgICAgICAgbV9sb29wQ291bnQgPSBHRVRJTlQxNihx
ICsgMSk7CisKKyAgICAgICAgICAgICAgICAvLyBaZXJvIGxvb3AgY291bnQgaXMgaW5maW5pdGUg
YW5pbWF0aW9uIGxvb3AgcmVxdWVzdC4KKyAgICAgICAgICAgICAgICBpZiAoIW1fbG9vcENvdW50
KQorICAgICAgICAgICAgICAgICAgICBtX2xvb3BDb3VudCA9IFdlYkNvcmU6OmNBbmltYXRpb25M
b29wSW5maW5pdGU7CisKKyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRk5ldHNjYXBlRXh0ZW5z
aW9uQmxvY2spOworICAgICAgICAgICAgfSBlbHNlIGlmIChuZXRzY2FwZUV4dGVuc2lvbiA9PSAy
KSB7CisgICAgICAgICAgICAgICAgLy8gV2FpdCBmb3Igc3BlY2lmaWVkICMgb2YgYnl0ZXMgdG8g
ZW50ZXIgYnVmZmVyLgorCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgZG8gdGhpcywgdGhpcyBl
eHRlbnNpb24gZG9lc24ndCBleGlzdCAoaXNuJ3QgdXNlZCBhdCBhbGwpCisgICAgICAgICAgICAg
ICAgLy8gYW5kIGRvZXNuJ3QgZG8gYW55dGhpbmcsIGFzIG91ciBzdHJlYW1pbmcvYnVmZmVyaW5n
IHRha2VzIGNhcmUgb2YgaXQgYWxsLi4uCisgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwOi8v
c2VtbWl4LnBsL2NvbG9yL2V4Z3JhZi9lZWcyNC5odG0KKyAgICAgICAgICAgICAgICBHRVROKDEs
IEdJRk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2spOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyAwLDMtNyBhcmUgeWV0IHRvIGJlIGRlZmluZWQgbmV0c2NhcGUgZXh0ZW5z
aW9uIGNvZGVzCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQtPnNl
dEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBHRVROKGNvdW50LCBnaWZfbHp3KTsKLSAgICAgIH0KLSAgICAgIGVs
c2UKLSAgICAgIC8qIFNlZSBpZiB0aGVyZSBhcmUgYW55IG1vcmUgaW1hZ2VzIGluIHRoaXMgc2Vx
dWVuY2UuICovCi0gICAgICB7Ci0gICAgICAgIGltYWdlc19kZWNvZGVkKys7Ci0KLSAgICAgICAg
Ly8gQ0FMTEJBQ0s6IFRoZSBmcmFtZSBpcyBub3cgY29tcGxldGUuCi0gICAgICAgIGlmIChjbGll
bnRwdHIgJiYgZnJhbWVfcmVhZGVyICYmICFjbGllbnRwdHItPmZyYW1lQ29tcGxldGUoaW1hZ2Vz
X2RlY29kZWQgLSAxLCBmcmFtZV9yZWFkZXItPmRlbGF5X3RpbWUsIGZyYW1lX3JlYWRlci0+ZGlz
cG9zYWxfbWV0aG9kKSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGZyYW1lQ29tcGxldGUo
KSBoYXMgYWxyZWFkeSBjYWxsZWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsaWVudHB0
ci0+c2V0RmFpbGVkKCkuCi0KLSAgICAgICAgLyogQ2xlYXIgc3RhdGUgZnJvbSB0aGlzIGltYWdl
ICovCi0gICAgICAgIGlmIChmcmFtZV9yZWFkZXIpIHsKLSAgICAgICAgICAgIGZyYW1lX3JlYWRl
ci0+aXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA9IGZhbHNlOwotICAgICAgICAgICAgZnJhbWVf
cmVhZGVyLT5pc190cmFuc3BhcmVudCA9IGZhbHNlOworCisgICAgICAgIGNhc2UgR0lGSW1hZ2VI
ZWFkZXI6IHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGhlaWdodCwgd2lkdGgsIHhPZmZzZXQsIHlP
ZmZzZXQ7CisKKyAgICAgICAgICAgIC8qIEdldCBpbWFnZSBvZmZzZXRzLCB3aXRoIHJlc3BlY3Qg
dG8gdGhlIHNjcmVlbiBvcmlnaW4gKi8KKyAgICAgICAgICAgIHhPZmZzZXQgPSBHRVRJTlQxNihx
KTsKKyAgICAgICAgICAgIHlPZmZzZXQgPSBHRVRJTlQxNihxICsgMik7CisKKyAgICAgICAgICAg
IC8qIEdldCBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0LiAqLworICAgICAgICAgICAgd2lkdGggID0g
R0VUSU5UMTYocSArIDQpOworICAgICAgICAgICAgaGVpZ2h0ID0gR0VUSU5UMTYocSArIDYpOwor
CisgICAgICAgICAgICAvKiBXb3JrIGFyb3VuZCBicm9rZW4gR0lGIGZpbGVzIHdoZXJlIHRoZSBs
b2dpY2FsIHNjcmVlbgorICAgICAgICAgICAgICogc2l6ZSBoYXMgd2VpcmQgd2lkdGggb3IgaGVp
Z2h0LiAgV2UgYXNzdW1lIHRoYXQgR0lGODdhCisgICAgICAgICAgICAgKiBmaWxlcyBkb24ndCBj
b250YWluIGFuaW1hdGlvbnMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICghbV9p
bWFnZXNEZWNvZGVkCisgICAgICAgICAgICAgICAgJiYgKChtX3NjcmVlbkhlaWdodCA8IGhlaWdo
dCkgfHwgKG1fc2NyZWVuV2lkdGggPCB3aWR0aCkgfHwgKG1fdmVyc2lvbiA9PSA4NykpKSB7Cisg
ICAgICAgICAgICAgICAgbV9zY3JlZW5IZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICAgICAg
bV9zY3JlZW5XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgICAgIHhPZmZzZXQgPSAwOworICAg
ICAgICAgICAgICAgIHlPZmZzZXQgPSAwOworCisgICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6
IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KKyAgICAgICAgICAgICAgICBp
ZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVu
SGVpZ2h0KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAvLyBXb3JrIGFyb3VuZCBtb3JlIGJyb2tlbiBHSUYgZmlsZXMgdGhh
dCBoYXZlIHplcm8gaW1hZ2Ugd2lkdGggb3IgaGVpZ2h0CisgICAgICAgICAgICBpZiAoIWhlaWdo
dCB8fCAhd2lkdGgpIHsKKyAgICAgICAgICAgICAgICBoZWlnaHQgPSBtX3NjcmVlbkhlaWdodDsK
KyAgICAgICAgICAgICAgICB3aWR0aCA9IG1fc2NyZWVuV2lkdGg7CisgICAgICAgICAgICAgICAg
aWYgKCFoZWlnaHQgfHwgIXdpZHRoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGll
bnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5IHx8IGhh
bHRBdEZyYW1lID09IG1faW1hZ2VzRGVjb2RlZCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBk
ZWNvZGVyIG5lZWRzIHRvIHN0b3AuIEhhbmQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNv
bnN1bWVkIGZyb20KKyAgICAgICAgICAgICAgICAvLyBidWZmZXIgbWludXMgOSAodGhlIGFtb3Vu
dCB3ZSBjb25zdW1lZCB0byByZWFkIHRoZSBoZWFkZXIpLgorICAgICAgICAgICAgICAgIGlmICht
X2NsaWVudCkKKyAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKGxl
biArIDkpOworICAgICAgICAgICAgICAgIEdFVE4oOSwgR0lGSW1hZ2VIZWFkZXIpOworICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2lt
YWdlc0NvdW50ID0gbV9pbWFnZXNEZWNvZGVkICsgMTsKKworICAgICAgICAgICAgaWYgKHF1ZXJ5
ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5ICYmICFtX2ZyYW1lQ29udGV4dCkKKyAg
ICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dCA9IG5ldyBHSUZGcmFtZUNvbnRleHQoKTsKKwor
ICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPnhPZmZzZXQgPSB4T2Zmc2V0OworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT55T2Zmc2V0ID0geU9mZnNldDsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+
aGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT53aWR0aCA9
IHdpZHRoOworCisgICAgICAgICAgICAgICAgLyogVGhpcyBjYXNlIHdpbGwgbmV2ZXIgYmUgdGFr
ZW4gaWYgdGhpcyBpcyB0aGUgZmlyc3QgaW1hZ2UgKi8KKyAgICAgICAgICAgICAgICAvKiBiZWlu
ZyBkZWNvZGVkLiBJZiBhbnkgb2YgdGhlIGxhdGVyIGltYWdlcyBhcmUgbGFyZ2VyICAgICAqLwor
ICAgICAgICAgICAgICAgIC8qIHRoYW4gdGhlIHNjcmVlbiBzaXplLCB3ZSBuZWVkIHRvIHJlYWxs
b2NhdGUgYnVmZmVycy4gICAgICovCisgICAgICAgICAgICAgICAgaWYgKG1fc2NyZWVuV2lkdGgg
PCB3aWR0aCkgeworICAgICAgICAgICAgICAgICAgICAvKiBYWFggRGV2aWFudCEgKi8KKyAgICAg
ICAgICAgICAgICAgICAgZGVsZXRlIFtdbV9mcmFtZUNvbnRleHQtPnJvd2J1ZjsKKyAgICAgICAg
ICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IHdpZHRoOworICAgICAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+cm93YnVmID0gbmV3IHVuc2lnbmVkIGNoYXJbbV9zY3JlZW5XaWR0aF07
CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbV9mcmFtZUNvbnRleHQtPnJvd2J1ZikKKyAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBj
aGFyW21fc2NyZWVuV2lkdGhdOworCisgICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQ29udGV4
dC0+cm93YnVmKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVu
dC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAobV9zY3JlZW5IZWln
aHQgPCBoZWlnaHQpCisgICAgICAgICAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gaGVpZ2h0
OworCisgICAgICAgICAgICAgICAgaWYgKHFbOF0gJiAweDQwKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MgPSAwOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghbV9pbWFnZXNEZWNvZGVkKQorICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcmxheWlu
ZyBpbnRlcmxhY2VkLCB0cmFuc3BhcmVudCBHSUZzIG92ZXIKKyAgICAgICAgICAgICAgICAgICAg
Ly8gZXhpc3RpbmcgaW1hZ2UgZGF0YSB1c2luZyB0aGUgSGFlYmVybGkgZGlzcGxheSBoYWNrCisg
ICAgICAgICAgICAgICAgICAgIC8vIHJlcXVpcmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBpbWFn
ZSBpbiBvcmRlciB0bworICAgICAgICAgICAgICAgICAgICAvLyBhdm9pZCBqYWdnaWVzIGF0IHRo
ZSB0cmFuc3BhcmVuY3kgZWRnZXMuIFdlIGFyZQorICAgICAgICAgICAgICAgICAgICAvLyB1bnBy
ZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGF0LCBzbyBkb24ndCBkaXNwbGF5IHN1Y2gKKyAgICAgICAg
ICAgICAgICAgICAgLy8gaW1hZ2VzIHByb2dyZXNzaXZlbHkKKyAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPnByb2dyZXNzaXZlRGlzcGxheSA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIC8vIENsZWFyIHN0YXRlIGZyb20gbGFzdCBpbWFnZS4K
KyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDA7CisgICAgICAgICAgICAg
ICAgbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmcgPSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0
OworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5yb3dlbmQgPSBtX2ZyYW1lQ29udGV4
dC0+cm93YnVmICsgbV9mcmFtZUNvbnRleHQtPndpZHRoOworICAgICAgICAgICAgICAgIG1fZnJh
bWVDb250ZXh0LT5yb3dwID0gbV9mcmFtZUNvbnRleHQtPnJvd2J1ZjsKKworICAgICAgICAgICAg
ICAgIC8vIGJpdHMgcGVyIHBpeGVsIGlzIHFbOF0mMHgwNworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBoYXMgYSBsb2NhbCBjb2xvcm1hcD8KKyAgICAgICAgICAgIGlmIChxWzhdICYg
MHg4MCkgeworICAgICAgICAgICAgICAgIGludCBudW1Db2xvcnMgPSAyIDw8IChxWzhdICYgMHg3
KTsKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gMyAqIG51bUNvbG9yczsK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICptYXAgPSBtX2ZyYW1lQ29udGV4dCA/IG1f
ZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwIDogMDsKKyAgICAgICAgICAgICAgICBpZiAobV9m
cmFtZUNvbnRleHQgJiYgKCFtYXAgfHwgKG51bUNvbG9ycyA+IG1fZnJhbWVDb250ZXh0LT5sb2Nh
bENvbG9ybWFwU2l6ZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXW1hcDsKKyAg
ICAgICAgICAgICAgICAgICAgbWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07CisgICAgICAg
ICAgICAgICAgICAgIGlmICghbWFwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1f
Y2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFsZXR0ZSBh
ZnRlciBpdCBsb2FkcworICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAg
ICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA9IG1hcDsKKyAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBTaXplID0gbnVt
Q29sb3JzOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9y
bWFwRGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKGxlbiA8IHNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXNlICdob2xkJyBwYXR0
ZXJuIHRvIGdldCB0aGUgaW1hZ2UgY29sb3JtYXAKKyAgICAgICAgICAgICAgICAgICAgR0VUTihz
aXplLCBHSUZJbWFnZUNvbG9ybWFwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFuZCBk
aXJlY3RseSBnbyB0byBHSUZMWldTdGFydAorICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29u
dGV4dCkKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG1fZnJhbWVDb250ZXh0LT5sb2NhbENv
bG9ybWFwLCBidWYsIHNpemUpOworICAgICAgICAgICAgICAgIGJ1ZiArPSBzaXplOworICAgICAg
ICAgICAgICAgIGxlbiAtPSBzaXplOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZyYW1lQ29u
dGV4dCkgeworICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBiYWNrIHRvIHRoZSBnbG9iYWwgcGFs
ZXR0ZQorICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZp
bmVkID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBHRVROKDEsIEdJRkxaV1N0
YXJ0KTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgR0VUTigxLCBn
aWZfaW1hZ2Vfc3RhcnQpOwotICAgICAgfQotICAgIH0KLSAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBHSUZJbWFnZUNvbG9ybWFwOiB7CisgICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIGFscmVh
ZHkgY29waWVkIGludG8gbG9jYWxDb2xvcm1hcAorICAgICAgICAgICAgR0VUTigxLCBHSUZMWldT
dGFydCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgY2FzZSBnaWZfZG9u
ZToKLSAgICAgIC8vIFdoZW4gdGhlIEdJRiBpcyBkb25lLCB3ZSBjYW4gc3RvcC4KLSAgICAgIGlm
IChjbGllbnRwdHIpCi0gICAgICAgIGNsaWVudHB0ci0+Z2lmQ29tcGxldGUoKTsKLSAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIEdJRlN1YkJsb2NrOiB7CisgICAgICAgICAgICAvLyBT
dGlsbCB3b3JraW5nIG9uIHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxv
Y2suCisgICAgICAgICAgICBpZiAoKG1fY291bnQgPSAqcSkpIHsKKyAgICAgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlcmUgYXJlIHN0aWxsIHJvd3MgbGVmdC4gSWYgdGhlIEdJRiBkYXRhCisg
ICAgICAgICAgICAgICAgLy8gaXMgY29ycnVwdCwgd2UgbWF5IG5vdCBnZXQgYW4gZXhwbGljaXQg
dGVybWluYXRvci4KKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQgJiYgIW1fZnJh
bWVDb250ZXh0LT5yb3dzUmVtYWluaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgYW4gaWxsZWdhbCBHSUYsIGJ1dCB3ZSByZW1haW4gdG9sZXJhbnQuCisgICAgICAgICAgICAg
ICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBHRVROKG1fY291bnQsIEdJRkxaVyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhcmUgYW55IG1vcmUgaW1hZ2VzIGluIHRoaXMg
c2VxdWVuY2UuCisgICAgICAgICAgICAgICAgbV9pbWFnZXNEZWNvZGVkKys7CisKKyAgICAgICAg
ICAgICAgICAvLyBDQUxMQkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KKyAgICAgICAg
ICAgICAgICBpZiAobV9jbGllbnQgJiYgbV9mcmFtZUNvbnRleHQgJiYgIW1fY2xpZW50LT5mcmFt
ZUNvbXBsZXRlKG1faW1hZ2VzRGVjb2RlZCAtIDEsIG1fZnJhbWVDb250ZXh0LT5kZWxheVRpbWUs
IG1fZnJhbWVDb250ZXh0LT5kaXNwb3NhbE1ldGhvZCkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gZnJhbWVDb21wbGV0ZSgpIGhhcyBhbHJlYWR5IGNhbGxlZCBtX2NsaWVu
dC0+c2V0RmFpbGVkKCkuCisKKyAgICAgICAgICAgICAgICAvLyBDbGVhciBzdGF0ZSBmcm9tIHRo
aXMgaW1hZ2UKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRklt
YWdlU3RhcnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
IAotICAgIC8vIFdlIHNob3VsZG4ndCBldmVyIGdldCBoZXJlLgotICAgIGRlZmF1bHQ6Ci0gICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBHSUZEb25lOiB7CisgICAgICAgICAgICAvLyBXaGVuIHRo
ZSBHSUYgaXMgZG9uZSwgd2UgY2FuIHN0b3AuCisgICAgICAgICAgICBpZiAobV9jbGllbnQpCisg
ICAgICAgICAgICAgICAgbV9jbGllbnQtPmdpZkNvbXBsZXRlKCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBX
ZSBzaG91bGRuJ3QgZXZlciBnZXQgaGVyZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CiAgICAgfQotICB9Ci0KLSAgLy8gQ29weSB0aGUgbGVmdG92ZXIgaW50byBncy0+aG9sZAotICBi
eXRlc19pbl9ob2xkID0gbGVuOwotICBpZiAobGVuKSB7Ci0gICAgLy8gQWRkIHdoYXQgd2UgaGF2
ZSBzb2ZhciB0byB0aGUgYmxvY2sKLSAgICB1bnNpZ25lZCBjaGFyKiBwOwotICAgIGlmIChzdGF0
ZSA9PSBnaWZfZ2xvYmFsX2NvbG9ybWFwKQotICAgICAgcCA9IGdsb2JhbF9jb2xvcm1hcDsKLSAg
ICBlbHNlIGlmIChzdGF0ZSA9PSBnaWZfaW1hZ2VfY29sb3JtYXApCi0gICAgICBwID0gZnJhbWVf
cmVhZGVyID8gZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcCA6IDA7Ci0gICAgZWxzZQotICAg
ICAgcCA9IGhvbGQ7Ci0gICAgaWYgKHApCi0gICAgICBtZW1jcHkocCwgYnVmLCBsZW4pOwotICAg
IGJ5dGVzX3RvX2NvbnN1bWUgLT0gbGVuOwotICB9Ci0KLSAgaWYgKGNsaWVudHB0cikKLSAgICBj
bGllbnRwdHItPmRlY29kaW5nSGFsdGVkKDApOwotICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBD
b3B5IHRoZSBsZWZ0b3ZlciBpbnRvIG1fZnJhbWVDb250ZXh0LT5tX2hvbGQKKyAgICBtX2J5dGVz
SW5Ib2xkID0gbGVuOworICAgIGlmIChsZW4pIHsKKyAgICAgICAgLy8gQWRkIHdoYXQgd2UgaGF2
ZSBzb2ZhciB0byB0aGUgYmxvY2sKKyAgICAgICAgdW5zaWduZWQgY2hhciogcDsKKyAgICAgICAg
aWYgKG1fc3RhdGUgPT0gR0lGR2xvYmFsQ29sb3JtYXApCisgICAgICAgICAgICBwID0gbV9nbG9i
YWxDb2xvcm1hcDsKKyAgICAgICAgZWxzZSBpZiAobV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFw
KQorICAgICAgICAgICAgcCA9IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2Fs
Q29sb3JtYXAgOiAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwID0gbV9ob2xkOworICAg
ICAgICBpZiAocCkKKyAgICAgICAgICAgIG1lbWNweShwLCBidWYsIGxlbik7CisgICAgICAgIG1f
Ynl0ZXNUb0NvbnN1bWUgLT0gbGVuOworICAgIH0KKworICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgbV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKDApOworICAgIHJldHVybiBmYWxzZTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZVJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlUmVhZGVyLmgKaW5kZXggMDUyNTMyYzY0NTM2MzE0Nzc0OGY5YmE2NGVhNzhhMTUx
ZmVlM2FkZS4uYzA4MjkxOGM0MzE2NmIzODAyOWViZGY0ZjI0Y2YzNGRlNjlkNzQ5YiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
UmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlUmVhZGVyLmgKQEAgLTQ5LDE2NSArNDksMTg2IEBACiAKIGNvbnN0IGludCBjTG9v
cENvdW50Tm90U2VlbiA9IC0yOwogCi0vKiBnaWYyLmggIAotICAgVGhlIGludGVyZmFjZSBmb3Ig
dGhlIEdJRjg3Lzg5YSBkZWNvZGVyLiAKLSovCi0vLyBMaXN0IG9mIHBvc3NpYmxlIHBhcnNpbmcg
c3RhdGVzCi10eXBlZGVmIGVudW0gewotICAgIGdpZl90eXBlLAotICAgIGdpZl9nbG9iYWxfaGVh
ZGVyLAotICAgIGdpZl9nbG9iYWxfY29sb3JtYXAsCi0gICAgZ2lmX2ltYWdlX3N0YXJ0LCAgICAg
ICAgICAgIAotICAgIGdpZl9pbWFnZV9oZWFkZXIsCi0gICAgZ2lmX2ltYWdlX2NvbG9ybWFwLAot
ICAgIGdpZl9pbWFnZV9ib2R5LAotICAgIGdpZl9sendfc3RhcnQsCi0gICAgZ2lmX2x6dywKLSAg
ICBnaWZfc3ViX2Jsb2NrLAotICAgIGdpZl9leHRlbnNpb24sCi0gICAgZ2lmX2NvbnRyb2xfZXh0
ZW5zaW9uLAotICAgIGdpZl9jb25zdW1lX2Jsb2NrLAotICAgIGdpZl9za2lwX2Jsb2NrLAotICAg
IGdpZl9kb25lLAotICAgIGdpZl9jb21tZW50X2V4dGVuc2lvbiwKLSAgICBnaWZfYXBwbGljYXRp
b25fZXh0ZW5zaW9uLAotICAgIGdpZl9uZXRzY2FwZV9leHRlbnNpb25fYmxvY2ssCi0gICAgZ2lm
X2NvbnN1bWVfbmV0c2NhcGVfZXh0ZW5zaW9uLAotICAgIGdpZl9jb25zdW1lX2NvbW1lbnQKLX0g
Z3N0YXRlOwotCi1zdHJ1Y3QgR0lGRnJhbWVSZWFkZXIgeworLy8gTGlzdCBvZiBwb3NzaWJsZSBw
YXJzaW5nIHN0YXRlcy4KK2VudW0gR0lGU3RhdGUgeworICAgIEdJRlR5cGUsCisgICAgR0lGR2xv
YmFsSGVhZGVyLAorICAgIEdJRkdsb2JhbENvbG9ybWFwLAorICAgIEdJRkltYWdlU3RhcnQsICAg
ICAgICAgICAgCisgICAgR0lGSW1hZ2VIZWFkZXIsCisgICAgR0lGSW1hZ2VDb2xvcm1hcCwKKyAg
ICBHSUZJbWFnZUJvZHksCisgICAgR0lGTFpXU3RhcnQsCisgICAgR0lGTFpXLAorICAgIEdJRlN1
YkJsb2NrLAorICAgIEdJRkV4dGVuc2lvbiwKKyAgICBHSUZDb250cm9sRXh0ZW5zaW9uLAorICAg
IEdJRkNvbnN1bWVCbG9jaywKKyAgICBHSUZTa2lwQmxvY2ssCisgICAgR0lGRG9uZSwKKyAgICBH
SUZDb21tZW50RXh0ZW5zaW9uLAorICAgIEdJRkFwcGxpY2F0aW9uRXh0ZW5zaW9uLAorICAgIEdJ
Rk5ldHNjYXBlRXh0ZW5zaW9uQmxvY2ssCisgICAgR0lGQ29uc3VtZU5ldHNjYXBlRXh0ZW5zaW9u
LAorICAgIEdJRkNvbnN1bWVDb21tZW50Cit9OworCitzdHJ1Y3QgR0lGRnJhbWVDb250ZXh0IHsK
ICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICAvKiBMWlcgZGVjb2Rl
ciBzdGF0ZSBtYWNoaW5lICovCi0gICAgdW5zaWduZWQgY2hhciAqc3RhY2twOyAgICAgICAgICAg
ICAgLyogQ3VycmVudCBzdGFjayBwb2ludGVyICovCisgICAgLy8gTFpXIGRlY29kZXIgc3RhdGUg
bWFjaGluZS4KKyAgICB1bnNpZ25lZCBjaGFyICpzdGFja3A7IC8vIEN1cnJlbnQgc3RhY2sgcG9p
bnRlci4KICAgICBpbnQgZGF0YXNpemU7CiAgICAgaW50IGNvZGVzaXplOwogICAgIGludCBjb2Rl
bWFzazsKLSAgICBpbnQgY2xlYXJfY29kZTsgICAgICAgICAgICAgLyogQ29kZXdvcmQgdXNlZCB0
byB0cmlnZ2VyIGRpY3Rpb25hcnkgcmVzZXQgKi8KLSAgICBpbnQgYXZhaWw7ICAgICAgICAgICAg
ICAgICAgLyogSW5kZXggb2YgbmV4dCBhdmFpbGFibGUgc2xvdCBpbiBkaWN0aW9uYXJ5ICovCisg
ICAgaW50IGNsZWFyQ29kZTsgLy8gQ29kZXdvcmQgdXNlZCB0byB0cmlnZ2VyIGRpY3Rpb25hcnkg
cmVzZXQuCisgICAgaW50IGF2YWlsOyAvLyBJbmRleCBvZiBuZXh0IGF2YWlsYWJsZSBzbG90IGlu
IGRpY3Rpb25hcnkuCiAgICAgaW50IG9sZGNvZGU7CiAgICAgdW5zaWduZWQgY2hhciBmaXJzdGNo
YXI7Ci0gICAgaW50IGJpdHM7ICAgICAgICAgICAgICAgICAgIC8qIE51bWJlciBvZiB1bnJlYWQg
Yml0cyBpbiAiZGF0dW0iICovCi0gICAgaW50IGRhdHVtOyAgICAgICAgICAgICAgICAvKiAzMi1i
aXQgaW5wdXQgYnVmZmVyICovCi0KLSAgICAvKiBPdXRwdXQgc3RhdGUgbWFjaGluZSAqLwotICAg
IGludCBpcGFzczsgICAgICAgICAgICAgICAgICAvKiBJbnRlcmxhY2UgcGFzczsgUmFuZ2VzIDEt
NCBpZiBpbnRlcmxhY2VkLiAqLwotICAgIHVuc2lnbmVkIGludCByb3dzX3JlbWFpbmluZzsgICAg
ICAgIC8qIFJvd3MgcmVtYWluaW5nIHRvIGJlIG91dHB1dCAqLwotICAgIHVuc2lnbmVkIGludCBp
cm93OyAgICAgICAgICAgICAgICAgIC8qIEN1cnJlbnQgb3V0cHV0IHJvdywgc3RhcnRpbmcgYXQg
emVybyAqLwotICAgIHVuc2lnbmVkIGNoYXIgKnJvd2J1ZjsgICAgICAgICAgICAgIC8qIFNpbmds
ZSBzY2FubGluZSB0ZW1wb3JhcnkgYnVmZmVyICovCi0gICAgdW5zaWduZWQgY2hhciAqcm93ZW5k
OyAgICAgICAgICAgICAgLyogUG9pbnRlciB0byBlbmQgb2Ygcm93YnVmICovCi0gICAgdW5zaWdu
ZWQgY2hhciAqcm93cDsgICAgICAgICAgICAgICAgLyogQ3VycmVudCBvdXRwdXQgcG9pbnRlciAq
LwotCi0gICAgLyogUGFyYW1ldGVycyBmb3IgaW1hZ2UgZnJhbWUgY3VycmVudGx5IGJlaW5nIGRl
Y29kZWQgKi8KLSAgICB1bnNpZ25lZCBpbnQgeF9vZmZzZXQsIHlfb2Zmc2V0OyAgICAvKiBXaXRo
IHJlc3BlY3QgdG8gInNjcmVlbiIgb3JpZ2luICovCi0gICAgdW5zaWduZWQgaW50IGhlaWdodCwg
d2lkdGg7Ci0gICAgaW50IHRwaXhlbDsgICAgICAgICAgICAgICAgIC8qIEluZGV4IG9mIHRyYW5z
cGFyZW50IHBpeGVsICovCi0gICAgV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1l
dGhvZCBkaXNwb3NhbF9tZXRob2Q7ICAgLyogUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBp
biBwbGFjZSwgZXRjLiovCi0gICAgdW5zaWduZWQgY2hhciAqbG9jYWxfY29sb3JtYXA7ICAgIC8q
IFBlci1pbWFnZSBjb2xvcm1hcCAqLwotICAgIGludCBsb2NhbF9jb2xvcm1hcF9zaXplOyAgICAv
KiBTaXplIG9mIGxvY2FsIGNvbG9ybWFwIGFycmF5LiAqLworICAgIGludCBiaXRzOyAvLyBOdW1i
ZXIgb2YgdW5yZWFkIGJpdHMgaW4gImRhdHVtIi4KKyAgICBpbnQgZGF0dW07IC8vIDMyLWJpdCBp
bnB1dCBidWZmZXIuCisKKyAgICAvLyBPdXRwdXQgc3RhdGUgbWFjaGluZS4KKyAgICBpbnQgaXBh
c3M7IC8vIEludGVybGFjZSBwYXNzOyBSYW5nZXMgMS00IGlmIGludGVybGFjZWQuCisgICAgdW5z
aWduZWQgcm93c1JlbWFpbmluZzsgLy8gUm93cyByZW1haW5pbmcgdG8gYmUgb3V0cHV0LgorICAg
IHVuc2lnbmVkIGlyb3c7IC8vIEN1cnJlbnQgb3V0cHV0IHJvdywgc3RhcnRpbmcgYXQgemVyby4K
KyAgICB1bnNpZ25lZCBjaGFyICpyb3didWY7IC8vIFNpbmdsZSBzY2FubGluZSB0ZW1wb3Jhcnkg
YnVmZmVyLgorICAgIHVuc2lnbmVkIGNoYXIgKnJvd2VuZDsgLy8gUG9pbnRlciB0byBlbmQgb2Yg
cm93YnVmLgorICAgIHVuc2lnbmVkIGNoYXIgKnJvd3A7IC8vIEN1cnJlbnQgb3V0cHV0IHBvaW50
ZXIuCisKKyAgICAvLyBQYXJhbWV0ZXJzIGZvciBpbWFnZSBmcmFtZSBjdXJyZW50bHkgYmVpbmcg
ZGVjb2RlZC4KKyAgICB1bnNpZ25lZCB4T2Zmc2V0OworICAgIHVuc2lnbmVkIHlPZmZzZXQ7IC8v
IFdpdGggcmVzcGVjdCB0byAic2NyZWVuIiBvcmlnaW4uCisgICAgdW5zaWduZWQgd2lkdGg7Cisg
ICAgdW5zaWduZWQgaGVpZ2h0OworICAgIGludCB0cGl4ZWw7IC8vIEluZGV4IG9mIHRyYW5zcGFy
ZW50IHBpeGVsLgorICAgIFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2Qg
ZGlzcG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2Us
IGV0Yy4KKyAgICB1bnNpZ25lZCBjaGFyICpsb2NhbENvbG9ybWFwOyAvLyBQZXItaW1hZ2UgY29s
b3JtYXAuCisgICAgaW50IGxvY2FsQ29sb3JtYXBTaXplOyAvLyBTaXplIG9mIGxvY2FsIGNvbG9y
bWFwIGFycmF5LgogICAgIAotICAgIGJvb2wgaXNfbG9jYWxfY29sb3JtYXBfZGVmaW5lZCA6IDE7
Ci0gICAgYm9vbCBwcm9ncmVzc2l2ZV9kaXNwbGF5IDogMTsgICAgLyogSWYgVFJVRSwgZG8gSGFl
YmVybGkgaW50ZXJsYWNlIGhhY2sgKi8KLSAgICBib29sIGludGVybGFjZWQgOiAxOyAgICAgICAg
ICAgICAvKiBUUlVFLCBpZiBzY2FubGluZXMgYXJyaXZlIGludGVybGFjZWQgb3JkZXIgKi8KLSAg
ICBib29sIGlzX3RyYW5zcGFyZW50IDogMTsgICAgICAgICAvKiBUUlVFLCBpZiB0cGl4ZWwgaXMg
dmFsaWQgKi8KLQotICAgIHVuc2lnbmVkIGRlbGF5X3RpbWU7ICAgICAgICAvKiBEaXNwbGF5IHRp
bWUsIGluIG1pbGxpc2Vjb25kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHRoaXMgaW1hZ2UgaW4gYSBtdWx0aS1pbWFnZSBHSUYgKi8KLQotCi0gICAgdW5zaWduZWQg
c2hvcnQqICBwcmVmaXg7ICAgICAgICAgIC8qIExaVyBkZWNvZGluZyB0YWJsZXMgKi8KLSAgICB1
bnNpZ25lZCBjaGFyKiAgIHN1ZmZpeDsgICAgICAgICAgLyogTFpXIGRlY29kaW5nIHRhYmxlcyAq
LwotICAgIHVuc2lnbmVkIGNoYXIqICAgc3RhY2s7ICAgICAgICAgICAvKiBCYXNlIG9mIExaVyBk
ZWNvZGVyIHN0YWNrICovCi0KLQotICAgIEdJRkZyYW1lUmVhZGVyKCkgewotICAgICAgICBzdGFj
a3AgPSAwOwotICAgICAgICBkYXRhc2l6ZSA9IGNvZGVzaXplID0gY29kZW1hc2sgPSBjbGVhcl9j
b2RlID0gYXZhaWwgPSBvbGRjb2RlID0gMDsKLSAgICAgICAgZmlyc3RjaGFyID0gMDsKLSAgICAg
ICAgYml0cyA9IGRhdHVtID0gMDsKLSAgICAgICAgaXBhc3MgPSAwOwotICAgICAgICByb3dzX3Jl
bWFpbmluZyA9IGlyb3cgPSAwOwotICAgICAgICByb3didWYgPSByb3dlbmQgPSByb3dwID0gMDsK
LQotICAgICAgICB4X29mZnNldCA9IHlfb2Zmc2V0ID0gd2lkdGggPSBoZWlnaHQgPSAwOwotICAg
ICAgICB0cGl4ZWwgPSAwOwotICAgICAgICBkaXNwb3NhbF9tZXRob2QgPSBXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpEaXNwb3NlTm90U3BlY2lmaWVkOwotCi0gICAgICAgIGxvY2FsX2NvbG9ybWFwID0g
MDsKLSAgICAgICAgbG9jYWxfY29sb3JtYXBfc2l6ZSA9IDA7Ci0gICAgICAgIGlzX2xvY2FsX2Nv
bG9ybWFwX2RlZmluZWQgPSBwcm9ncmVzc2l2ZV9kaXNwbGF5ID0gaXNfdHJhbnNwYXJlbnQgPSBp
bnRlcmxhY2VkID0gZmFsc2U7Ci0KLSAgICAgICAgZGVsYXlfdGltZSA9IDA7Ci0KLSAgICAgICAg
cHJlZml4ID0gMDsKLSAgICAgICAgc3VmZml4ID0gc3RhY2sgPSAwOworICAgIGJvb2wgaXNMb2Nh
bENvbG9ybWFwRGVmaW5lZCA6IDE7CisgICAgYm9vbCBwcm9ncmVzc2l2ZURpc3BsYXkgOiAxOyAv
LyBJZiB0cnVlLCBkbyBIYWViZXJsaSBpbnRlcmxhY2UgaGFjay4KKyAgICBib29sIGludGVybGFj
ZWQgOiAxOyAvLyBUcnVlLCBpZiBzY2FubGluZXMgYXJyaXZlIGludGVybGFjZWQgb3JkZXIuCisg
ICAgYm9vbCBpc1RyYW5zcGFyZW50IDogMTsgLy8gVFJVRSwgaWYgdHBpeGVsIGlzIHZhbGlkLgor
CisgICAgdW5zaWduZWQgZGVsYXlUaW1lOyAvLyBEaXNwbGF5IHRpbWUsIGluIG1pbGxpc2Vjb25k
cywgZm9yIHRoaXMgaW1hZ2UgaW4gYSBtdWx0aS1pbWFnZSBHSUYuCisKKyAgICB1bnNpZ25lZCBz
aG9ydCogcHJlZml4OyAvLyBMWlcgZGVjb2RpbmcgdGFibGVzLgorICAgIHVuc2lnbmVkIGNoYXIq
IHN1ZmZpeDsgLy8gTFpXIGRlY29kaW5nIHRhYmxlcy4KKyAgICB1bnNpZ25lZCBjaGFyKiBzdGFj
azsgLy8gQmFzZSBvZiBMWlcgZGVjb2RlciBzdGFjay4KKworICAgIEdJRkZyYW1lQ29udGV4dCgp
CisgICAgICAgIDogc3RhY2twKDApCisgICAgICAgICwgZGF0YXNpemUoMCkKKyAgICAgICAgLCBj
b2Rlc2l6ZSgwKQorICAgICAgICAsIGNvZGVtYXNrKDApCisgICAgICAgICwgY2xlYXJDb2RlKDAp
CisgICAgICAgICwgYXZhaWwoMCkKKyAgICAgICAgLCBvbGRjb2RlKDApCisgICAgICAgICwgZmly
c3RjaGFyKDApCisgICAgICAgICwgYml0cygwKQorICAgICAgICAsIGRhdHVtKDApCisgICAgICAg
ICwgaXBhc3MoMCkKKyAgICAgICAgLCByb3dzUmVtYWluaW5nKDApCisgICAgICAgICwgaXJvdygw
KQorICAgICAgICAsIHJvd2J1ZigwKQorICAgICAgICAsIHJvd2VuZCgwKQorICAgICAgICAsIHJv
d3AoMCkKKyAgICAgICAgLCB4T2Zmc2V0KDApCisgICAgICAgICwgeU9mZnNldCgwKQorICAgICAg
ICAsIHdpZHRoKDApCisgICAgICAgICwgaGVpZ2h0KDApCisgICAgICAgICwgdHBpeGVsKDApCisg
ICAgICAgICwgZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU5vdFNw
ZWNpZmllZCkKKyAgICAgICAgLCBsb2NhbENvbG9ybWFwKDApCisgICAgICAgICwgbG9jYWxDb2xv
cm1hcFNpemUoMCkKKyAgICAgICAgLCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVkKGZhbHNlKQorICAg
ICAgICAsIHByb2dyZXNzaXZlRGlzcGxheShmYWxzZSkKKyAgICAgICAgLCBpbnRlcmxhY2VkKGZh
bHNlKQorICAgICAgICAsIGlzVHJhbnNwYXJlbnQoZmFsc2UpCisgICAgICAgICwgZGVsYXlUaW1l
KDApCisgICAgICAgICwgcHJlZml4KDApCisgICAgICAgICwgc3VmZml4KDApCisgICAgICAgICwg
c3RhY2soMCkKKyAgICB7CiAgICAgfQogICAgIAotICAgIH5HSUZGcmFtZVJlYWRlcigpIHsKLSAg
ICAgICAgZGVsZXRlIFtdcm93YnVmOwotICAgICAgICBkZWxldGUgW11sb2NhbF9jb2xvcm1hcDsK
LSAgICAgICAgZGVsZXRlIFtdcHJlZml4OwotICAgICAgICBkZWxldGUgW11zdWZmaXg7Ci0gICAg
ICAgIGRlbGV0ZSBbXXN0YWNrOworICAgIH5HSUZGcmFtZUNvbnRleHQoKQorICAgIHsKKyAgICAg
ICAgZGVsZXRlIFtdIHJvd2J1ZjsKKyAgICAgICAgZGVsZXRlIFtdIGxvY2FsQ29sb3JtYXA7Cisg
ICAgICAgIGRlbGV0ZSBbXSBwcmVmaXg7CisgICAgICAgIGRlbGV0ZSBbXSBzdWZmaXg7CisgICAg
ICAgIGRlbGV0ZSBbXSBzdGFjazsKICAgICB9CiB9OwogCi1zdHJ1Y3QgR0lGSW1hZ2VSZWFkZXIg
eworY2xhc3MgR0lGSW1hZ2VSZWFkZXIgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogY2xpZW50cHRyOwotICAgIC8q
IFBhcnNpbmcgc3RhdGUgbWFjaGluZSAqLwotICAgIGdzdGF0ZSBzdGF0ZTsgICAgICAgICAgICAg
ICAgICAgICAgLyogQ3VycmVudCBkZWNvZGVyIG1hc3RlciBzdGF0ZSAqLwotICAgIHVuc2lnbmVk
IGJ5dGVzX3RvX2NvbnN1bWU7ICAgICAgICAgLyogTnVtYmVyIG9mIGJ5dGVzIHRvIGFjY3VtdWxh
dGUgKi8KLSAgICB1bnNpZ25lZCBieXRlc19pbl9ob2xkOyAgICAgICAgICAgIC8qIGJ5dGVzIGFj
Y3VtdWxhdGVkIHNvIGZhciovCi0gICAgdW5zaWduZWQgY2hhciBob2xkW01BWF9IT0xEX1NJWkVd
OyAvKiBBY2N1bXVsYXRpb24gYnVmZmVyICovCi0gICAgdW5zaWduZWQgY2hhciogZ2xvYmFsX2Nv
bG9ybWFwOyAgICAvKiAoMyogTUFYX0NPTE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFwIGlm
IGxvY2FsIG5vdCBzdXBwbGllZCwgMyBieXRlcyBmb3IgZWFjaCBjb2xvciAgKi8KLSAgICAKLSAg
ICAgLyogR2xvYmFsIChtdWx0aS1pbWFnZSkgc3RhdGUgKi8KLSAgICBpbnQgc2NyZWVuX2JnY29s
b3I7ICAgICAgICAgLyogTG9naWNhbCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvciAqLwotICAgIGlu
dCB2ZXJzaW9uOyAgICAgICAgICAgICAgICAvKiBFaXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZv
ciBHSUY4NyAqLwotICAgIHVuc2lnbmVkIHNjcmVlbl93aWR0aDsgICAgICAgLyogTG9naWNhbCBz
Y3JlZW4gd2lkdGggJiBoZWlnaHQgKi8KLSAgICB1bnNpZ25lZCBzY3JlZW5faGVpZ2h0OwotICAg
IGludCBnbG9iYWxfY29sb3JtYXBfc2l6ZTsgICAvKiBTaXplIG9mIGdsb2JhbCBjb2xvcm1hcCBh
cnJheS4gKi8KLSAgICB1bnNpZ25lZCBpbWFnZXNfZGVjb2RlZDsgICAgLyogQ291bnRzIGNvbXBs
ZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMgKi8KLSAgICBpbnQgaW1hZ2VzX2NvdW50OyAg
ICAgICAgICAgLyogQ291bnRlZCBhbGwgZnJhbWVzIHNlZW4gc28gZmFyIChpbmNsdWRpbmcgaW5j
b21wbGV0ZSBmcmFtZXMpICovCi0gICAgaW50IGxvb3BfY291bnQ7ICAgICAgICAgICAgIC8qIE5l
dHNjYXBlIHNwZWNpZmljIGV4dGVuc2lvbiBibG9jayB0byBjb250cm9sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYW5pbWF0aW9uIGxvb3BzIGEgR0lG
IHJlbmRlcnMuICovCi0gICAgCi0gICAgLy8gTm90IHJlYWxseSBnbG9iYWwsIGJ1dCBjb252ZW5p
ZW50IHRvIGxvY2F0ZSBoZXJlLgotICAgIGludCBjb3VudDsgICAgICAgICAgICAgICAgICAvKiBS
ZW1haW5pbmcgIyBieXRlcyBpbiBzdWItYmxvY2sgKi8KLSAgICAKLSAgICBHSUZGcmFtZVJlYWRl
ciogZnJhbWVfcmVhZGVyOwotCi0gICAgR0lGSW1hZ2VSZWFkZXIoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyKiBjbGllbnQgPSAwKSB7Ci0gICAgICAgIGNsaWVudHB0ciA9IGNsaWVudDsKLSAgICAg
ICAgc3RhdGUgPSBnaWZfdHlwZTsKLSAgICAgICAgYnl0ZXNfdG9fY29uc3VtZSA9IDY7Ci0gICAg
ICAgIGJ5dGVzX2luX2hvbGQgPSAwOwotICAgICAgICBmcmFtZV9yZWFkZXIgPSAwOwotICAgICAg
ICBnbG9iYWxfY29sb3JtYXAgPSAwOwotCi0gICAgICAgIHNjcmVlbl9iZ2NvbG9yID0gdmVyc2lv
biA9IDA7Ci0gICAgICAgIHNjcmVlbl93aWR0aCA9IHNjcmVlbl9oZWlnaHQgPSAwOwotICAgICAg
ICBnbG9iYWxfY29sb3JtYXBfc2l6ZSA9IGltYWdlc19kZWNvZGVkID0gaW1hZ2VzX2NvdW50ID0g
MDsKLSAgICAgICAgbG9vcF9jb3VudCA9IGNMb29wQ291bnROb3RTZWVuOwotICAgICAgICBjb3Vu
dCA9IDA7CisgICAgR0lGSW1hZ2VSZWFkZXIoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGll
bnQgPSAwKQorICAgICAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAgICAgLCBtX3N0YXRlKEdJ
RlR5cGUpCisgICAgICAgICwgbV9ieXRlc1RvQ29uc3VtZSg2KQorICAgICAgICAsIG1fYnl0ZXNJ
bkhvbGQoMCkKKyAgICAgICAgLCBtX2dsb2JhbENvbG9ybWFwKDApCisgICAgICAgICwgbV9zY3Jl
ZW5CZ2NvbG9yKDApCisgICAgICAgICwgbV92ZXJzaW9uKDApCisgICAgICAgICwgbV9zY3JlZW5X
aWR0aCgwKQorICAgICAgICAsIG1fc2NyZWVuSGVpZ2h0KDApCisgICAgICAgICwgbV9nbG9iYWxD
b2xvcm1hcFNpemUoMCkKKyAgICAgICAgLCBtX2ltYWdlc0RlY29kZWQoMCkKKyAgICAgICAgLCBt
X2ltYWdlc0NvdW50KDApCisgICAgICAgICwgbV9sb29wQ291bnQoY0xvb3BDb3VudE5vdFNlZW4p
CisgICAgICAgICwgbV9jb3VudCgwKQorICAgICAgICAsIG1fZnJhbWVDb250ZXh0KDApCisgICAg
ewogICAgIH0KIAotICAgIH5HSUZJbWFnZVJlYWRlcigpIHsKLSAgICAgICAgZGVsZXRlIFtdZ2xv
YmFsX2NvbG9ybWFwOwotICAgICAgICBnbG9iYWxfY29sb3JtYXAgPSAwOwotICAgICAgICBkZWxl
dGUgZnJhbWVfcmVhZGVyOwotICAgICAgICBmcmFtZV9yZWFkZXIgPSAwOworICAgIH5HSUZJbWFn
ZVJlYWRlcigpCisgICAgeworICAgICAgICBkZWxldGUgW10gbV9nbG9iYWxDb2xvcm1hcDsKKyAg
ICAgICAgbV9nbG9iYWxDb2xvcm1hcCA9IDA7CisKKyAgICAgICAgZGVsZXRlIG1fZnJhbWVDb250
ZXh0OworICAgICAgICBtX2ZyYW1lQ29udGV4dCA9IDA7CiAgICAgfQogCi0gICAgYm9vbCByZWFk
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWYsIHVuc2lnbmVkIGludCBudW1ieXRlcywgCi0gICAg
ICAgICAgICAgIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnkgPSBXZWJD
b3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUg
PSAtMSk7CisgICAgYm9vbCByZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQg
bnVtYnl0ZXMsIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgPSBXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUgPSAtMSk7
CisKKyAgICBpbnQgaW1hZ2VzQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlc0NvdW50OyB9
CisgICAgaW50IGxvb3BDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcENvdW50OyB9CisgICAg
dW5zaWduZWQgY2hhciogZ2xvYmFsQ29sb3JtYXAoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbENv
bG9ybWFwOyB9CisgICAgaW50IGdsb2JhbENvbG9ybWFwU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsQ29sb3JtYXBTaXplOyB9CisgICAgY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lQ29udGV4dDsgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgb3V0cHV0X3JvdygpOwotICAgIGJvb2wgZG9fbHp3KGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnEpOworICAgIGJvb2wgb3V0cHV0Um93KCk7CisgICAgYm9vbCBkb0xaVyhjb25zdCB1bnNpZ25l
ZCBjaGFyICpxKTsKKworICAgIFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogbV9jbGllbnQ7CisK
KyAgICAvLyBQYXJzaW5nIHN0YXRlIG1hY2hpbmUuCisgICAgR0lGU3RhdGUgbV9zdGF0ZTsgLy8g
Q3VycmVudCBkZWNvZGVyIG1hc3RlciBzdGF0ZS4KKyAgICB1bnNpZ25lZCBtX2J5dGVzVG9Db25z
dW1lOyAvLyBOdW1iZXIgb2YgYnl0ZXMgdG8gYWNjdW11bGF0ZS4KKyAgICB1bnNpZ25lZCBtX2J5
dGVzSW5Ib2xkOyAvLyBieXRlcyBhY2N1bXVsYXRlZCBzbyBmYXIuCisgICAgdW5zaWduZWQgY2hh
ciBtX2hvbGRbTUFYX0hPTERfU0laRV07IC8vIEFjY3VtdWxhdGlvbiBidWZmZXIuCisgICAgdW5z
aWduZWQgY2hhciogbV9nbG9iYWxDb2xvcm1hcDsgLy8gKDMqIE1BWF9DT0xPUlMgaW4gc2l6ZSkg
RGVmYXVsdCBjb2xvcm1hcCBpZiBsb2NhbCBub3Qgc3VwcGxpZWQsIDMgYnl0ZXMgZm9yIGVhY2gg
Y29sb3IuCisgICAgCisgICAgLy8gR2xvYmFsIChtdWx0aS1pbWFnZSkgc3RhdGUuCisgICAgaW50
IG1fc2NyZWVuQmdjb2xvcjsgLy8gTG9naWNhbCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvci4KKyAg
ICBpbnQgbV92ZXJzaW9uOyAvLyBFaXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZvciBHSUY4Ny4K
KyAgICB1bnNpZ25lZCBtX3NjcmVlbldpZHRoOyAvLyBMb2dpY2FsIHNjcmVlbiB3aWR0aCAmIGhl
aWdodC4KKyAgICB1bnNpZ25lZCBtX3NjcmVlbkhlaWdodDsKKyAgICBpbnQgbV9nbG9iYWxDb2xv
cm1hcFNpemU7IC8vIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LgorICAgIHVuc2lnbmVk
IG1faW1hZ2VzRGVjb2RlZDsgLy8gQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVk
IEdJRnMuCisgICAgaW50IG1faW1hZ2VzQ291bnQ7IC8vIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVu
IHNvIGZhciAoaW5jbHVkaW5nIGluY29tcGxldGUgZnJhbWVzKS4KKyAgICBpbnQgbV9sb29wQ291
bnQ7IC8vIE5ldHNjYXBlIHNwZWNpZmljIGV4dGVuc2lvbiBibG9jayB0byBjb250cm9sIHRoZSBu
dW1iZXIgb2YgYW5pbWF0aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuCisgICAgCisgICAgLy8gTm90
IHJlYWxseSBnbG9iYWwsIGJ1dCBjb252ZW5pZW50IHRvIGxvY2F0ZSBoZXJlLgorICAgIGludCBt
X2NvdW50OyAvLyBSZW1haW5pbmcgIyBieXRlcyBpbiBzdWItYmxvY2suCisgICAgCisgICAgR0lG
RnJhbWVDb250ZXh0KiBtX2ZyYW1lQ29udGV4dDsKIH07CiAKICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187672</attachid>
            <date>2013-02-11 14:18:59 -0800</date>
            <delta_ts>2013-02-11 15:23:10 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-109007-20130211141530.patch</filename>
            <type>text/plain</type>
            <size>78988</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQ4NmY5NzQxOTJmYTRm
NjZlNGYxYTdlOWI2NjIwMmY2YjQzNWY3ZS4uZTNmNGE0MGRlZmU1MDBhZjVjMjc2N2ZlODk0NWFl
NjNmN2U3NDA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEzLTAyLTExICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgRml4IGNvZGUgc3R5bGUgdmlv
bGF0aW9ucyBpbiBHSUZJbWFnZVJlYWRlci57Y2N8aH0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTAwNworCisgICAgICAgIFJldmlld2VkIGJ5IFN0
ZXBoZW4gV2hpdGUuCisKKyAgICAgICAgVGhpcyBpcyBqdXN0IGEgc3R5bGUgY2xlYW4gdXAgZm9y
IEdJRkltYWdlUmVhZGVyLntjY3xofS4KKworICAgICAgICBUaGVyZSdzIGdvaW5nIHRvIGJlIGEg
bG90IGNoYW5nZXMgaW4gdGhlc2UgdHdvIGZpbGVzIGFuZCBzdHlsZSBjaGVjaworICAgICAgICB3
aWxsIGFkZCBhIGxvdCBvZiBub2lzZSBpbiBsYXRlciByZXZpZXdzLiBGaXggc3R5bGUgcHJvYmxl
bXMgZmlyc3QuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gY2hhbmdlIGluIGxvZ2ljIGF0IGFsbC4g
SnVzdCBzdHlsZSBmaXhlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3VudCk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6
Om91dHB1dFJvdyk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6ZG9MWlcpOgorICAgICAgICAo
R0lGSW1hZ2VSZWFkZXI6OnJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0KToKKyAgICAg
ICAgKEdJRkZyYW1lQ29udGV4dDo6R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAgKEdJRkZyYW1l
Q29udGV4dDo6fkdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6R0lG
SW1hZ2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6On5HSUZJbWFnZVJlYWRlcik6
CisgICAgICAgIChHSUZJbWFnZVJlYWRlcik6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6aW1h
Z2VzQ291bnQpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6Omxvb3BDb3VudCk6CisgICAgICAg
IChHSUZJbWFnZVJlYWRlcjo6Z2xvYmFsQ29sb3JtYXApOgorICAgICAgICAoR0lGSW1hZ2VSZWFk
ZXI6Omdsb2JhbENvbG9ybWFwU2l6ZSk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6ZnJhbWVD
b250ZXh0KToKKwogMjAxMy0wMi0wNSAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW1Y4XSBSZW1vdmUgZGVwcmVjYXRlZFY4U3RyaW5nKCkgYW5kIGRlcHJl
Y2F0ZWRWOEludGVnZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA4ZmM0YTlh
NTMwOWZmODE5ZDFmODk4YjMzODFhOTFmNzc5MTJiMWU1Li4wY2IyMjg4NWNlYjNkNmIxNmIyMzVm
ODE5Yjk4YTI1YjkzYmFmZDhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtODcs
OCArODcsOCBAQCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKICAgICAgICAg
R0lGSW1hZ2VSZWFkZXIgcmVhZGVyKDApOwogICAgICAgICByZWFkZXIucmVhZCgoY29uc3QgdW5z
aWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgpLCBHSUZGcmFtZUNvdW50
UXVlcnksIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkpOwogICAgICAgICBtX2FscmVhZHlTY2Fu
bmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gdHJ1ZTsKLSAgICAgICAgbV9mcmFtZUJ1ZmZlckNh
Y2hlLnJlc2l6ZShyZWFkZXIuaW1hZ2VzX2NvdW50KTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCByZWFkZXIuaW1hZ2VzX2NvdW50OyArK2kpCisgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNo
ZS5yZXNpemUocmVhZGVyLmltYWdlc0NvdW50KCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJlYWRlci5pbWFnZXNDb3VudCgpOyArK2kpCiAgICAgICAgICAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGVbaV0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwogICAgIH0K
IApAQCAtMTE2LDggKzExNiw4IEBAIGludCBHSUZJbWFnZURlY29kZXI6OnJlcGV0aXRpb25Db3Vu
dCgpIGNvbnN0CiAgICAgLy8gc2hvdWxkIGNvbnRpbnVlIHRvIHRyZWF0IGl0IGFzIGEgImxvb3Ag
b25jZSIgYW5pbWF0aW9uLiAgV2UgZG9uJ3QgbmVlZAogICAgIC8vIHNwZWNpYWwgY29kZSBoZXJl
IGVpdGhlciwgYmVjYXVzZSBpbiB0aGlzIGNhc2Ugd2UnbGwgbmV2ZXIgY2hhbmdlCiAgICAgLy8g
fG1fcmVwZXRpdGlvbkNvdW50fCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVlLgotICAgIGlmIChtX3Jl
YWRlciAmJiAobV9yZWFkZXItPmxvb3BfY291bnQgIT0gY0xvb3BDb3VudE5vdFNlZW4pKQotICAg
ICAgICBtX3JlcGV0aXRpb25Db3VudCA9IG1fcmVhZGVyLT5sb29wX2NvdW50OworICAgIGlmICht
X3JlYWRlciAmJiAobV9yZWFkZXItPmxvb3BDb3VudCgpICE9IGNMb29wQ291bnROb3RTZWVuKSkK
KyAgICAgICAgbV9yZXBldGl0aW9uQ291bnQgPSBtX3JlYWRlci0+bG9vcENvdW50KCk7CiAgICAg
cmV0dXJuIG1fcmVwZXRpdGlvbkNvdW50OwogfQogCkBAIC0xOTgsMjkgKzE5OCwyOSBAQCB2b2lk
IEdJRkltYWdlRGVjb2Rlcjo6ZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KQogCiBi
b29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwg
dW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVuc2lnbmVk
IHJvd051bWJlciwgdW5zaWduZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBp
eGVscykKIHsKLSAgICBjb25zdCBHSUZGcmFtZVJlYWRlciogZnJhbWVSZWFkZXIgPSBtX3JlYWRl
ci0+ZnJhbWVfcmVhZGVyOworICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0
ID0gbV9yZWFkZXItPmZyYW1lQ29udGV4dCgpOwogICAgIC8vIFRoZSBwaXhlbCBkYXRhIGFuZCBj
b29yZGluYXRlcyBzdXBwbGllZCB0byB1cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGZyYW1lJ3MKICAg
ICAvLyBvcmlnaW4gd2l0aGluIHRoZSBlbnRpcmUgaW1hZ2Ugc2l6ZSwgaS5lLgotICAgIC8vIChm
cmFtZVJlYWRlci0+eF9vZmZzZXQsIGZyYW1lUmVhZGVyLT55X29mZnNldCkuICBUaGVyZSBpcyBu
byBndWFyYW50ZWUKLSAgICAvLyB0aGF0IChyb3dFbmQgLSByb3dCdWZmZXIpID09IChzaXplKCku
d2lkdGgoKSAtIGZyYW1lUmVhZGVyLT54X29mZnNldCksIHNvCisgICAgLy8gKGZyYW1lQ29udGV4
dC0+eE9mZnNldCwgZnJhbWVDb250ZXh0LT55T2Zmc2V0KS4gVGhlcmUgaXMgbm8gZ3VhcmFudGVl
CisgICAgLy8gdGhhdCAocm93RW5kIC0gcm93QnVmZmVyKSA9PSAoc2l6ZSgpLndpZHRoKCkgLSBm
cmFtZUNvbnRleHQtPnhPZmZzZXQpLCBzbwogICAgIC8vIHdlIG11c3QgZW5zdXJlIHdlIGRvbid0
IHJ1biBvZmYgdGhlIGVuZCBvZiBlaXRoZXIgdGhlIHNvdXJjZSBkYXRhIG9yIHRoZQogICAgIC8v
IHJvdydzIFgtY29vcmRpbmF0ZXMuCi0gICAgaW50IHhCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRY
KGZyYW1lUmVhZGVyLT54X29mZnNldCk7Ci0gICAgaW50IHlCZWdpbiA9IHVwcGVyQm91bmRTY2Fs
ZWRZKGZyYW1lUmVhZGVyLT55X29mZnNldCArIHJvd051bWJlcik7Ci0gICAgaW50IHhFbmQgPSBs
b3dlckJvdW5kU2NhbGVkWChzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lUmVhZGVyLT54
X29mZnNldCArIChyb3dFbmQgLSByb3dCdWZmZXIpKSwgc2l6ZSgpLndpZHRoKCkpIC0gMSwgeEJl
Z2luICsgMSkgKyAxOwotICAgIGludCB5RW5kID0gbG93ZXJCb3VuZFNjYWxlZFkoc3RkOjptaW4o
c3RhdGljX2Nhc3Q8aW50PihmcmFtZVJlYWRlci0+eV9vZmZzZXQgKyByb3dOdW1iZXIgKyByZXBl
YXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSkgLSAxLCB5QmVnaW4gKyAxKSArIDE7CisgICAgaW50
IHhCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lQ29udGV4dC0+eE9mZnNldCk7CisgICAg
aW50IHlCZWdpbiA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lQ29udGV4dC0+eU9mZnNldCArIHJv
d051bWJlcik7CisgICAgaW50IHhFbmQgPSBsb3dlckJvdW5kU2NhbGVkWChzdGQ6Om1pbihzdGF0
aWNfY2FzdDxpbnQ+KGZyYW1lQ29udGV4dC0+eE9mZnNldCArIChyb3dFbmQgLSByb3dCdWZmZXIp
KSwgc2l6ZSgpLndpZHRoKCkpIC0gMSwgeEJlZ2luICsgMSkgKyAxOworICAgIGludCB5RW5kID0g
bG93ZXJCb3VuZFNjYWxlZFkoc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50PihmcmFtZUNvbnRleHQt
PnlPZmZzZXQgKyByb3dOdW1iZXIgKyByZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSkgLSAx
LCB5QmVnaW4gKyAxKSArIDE7CiAgICAgaWYgKCFyb3dCdWZmZXIgfHwgKHhCZWdpbiA8IDApIHx8
ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8ICh5RW5kIDw9IHlCZWdpbikpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gR2V0IHRoZSBjb2xvcm1hcC4KICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyKiBjb2xvck1hcDsKICAgICB1bnNpZ25lZCBjb2xvck1hcFNpemU7Ci0g
ICAgaWYgKGZyYW1lUmVhZGVyLT5pc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkKSB7Ci0gICAgICAg
IGNvbG9yTWFwID0gZnJhbWVSZWFkZXItPmxvY2FsX2NvbG9ybWFwOwotICAgICAgICBjb2xvck1h
cFNpemUgPSAodW5zaWduZWQpZnJhbWVSZWFkZXItPmxvY2FsX2NvbG9ybWFwX3NpemU7CisgICAg
aWYgKGZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCkgeworICAgICAgICBjb2xv
ck1hcCA9IGZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcDsKKyAgICAgICAgY29sb3JNYXBTaXpl
ID0gKHVuc2lnbmVkKWZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcFNpemU7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgY29sb3JNYXAgPSBtX3JlYWRlci0+Z2xvYmFsX2NvbG9ybWFwOwotICAgICAg
ICBjb2xvck1hcFNpemUgPSBtX3JlYWRlci0+Z2xvYmFsX2NvbG9ybWFwX3NpemU7CisgICAgICAg
IGNvbG9yTWFwID0gbV9yZWFkZXItPmdsb2JhbENvbG9ybWFwKCk7CisgICAgICAgIGNvbG9yTWFw
U2l6ZSA9IG1fcmVhZGVyLT5nbG9iYWxDb2xvcm1hcFNpemUoKTsKICAgICB9CiAgICAgaWYgKCFj
b2xvck1hcCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzMsOCArMjMzLDggQEAgYm9vbCBH
SUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2ln
bmVkIGNoYXIqIHJvd0J1ZmYKICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRy
ZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOwogICAgIC8vIFdyaXRlIG9uZSBy
b3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAgCiAgICAgZm9yIChpbnQgeCA9IHhC
ZWdpbjsgeCA8IHhFbmQ7ICsreCkgewotICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyIHNvdXJj
ZVZhbHVlID0gKihyb3dCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4
KSAtIGZyYW1lUmVhZGVyLT54X29mZnNldCk7Ci0gICAgICAgIGlmICgoIWZyYW1lUmVhZGVyLT5p
c190cmFuc3BhcmVudCB8fCAoc291cmNlVmFsdWUgIT0gZnJhbWVSZWFkZXItPnRwaXhlbCkpICYm
IChzb3VyY2VWYWx1ZSA8IGNvbG9yTWFwU2l6ZSkpIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciBzb3VyY2VWYWx1ZSA9ICoocm93QnVmZmVyICsgKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1
bW5zW3hdIDogeCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXQpOworICAgICAgICBpZiAoKCFmcmFt
ZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgfHwgKHNvdXJjZVZhbHVlICE9IGZyYW1lQ29udGV4dC0+
dHBpeGVsKSkgJiYgKHNvdXJjZVZhbHVlIDwgY29sb3JNYXBTaXplKSkgewogICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IGNvbG9ySW5kZXggPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHNvdXJjZVZhbHVl
KSAqIDM7CiAgICAgICAgICAgICBidWZmZXIuc2V0UkdCQShjdXJyZW50QWRkcmVzcywgY29sb3JN
YXBbY29sb3JJbmRleF0sIGNvbG9yTWFwW2NvbG9ySW5kZXggKyAxXSwgY29sb3JNYXBbY29sb3JJ
bmRleCArIDJdLCAyNTUpOwogICAgICAgICB9IGVsc2UgewpAQCAtMzMxLDE0ICszMzEsMTQgQEAg
dm9pZCBHSUZJbWFnZURlY29kZXI6OmRlY29kZSh1bnNpZ25lZCBoYWx0QXRGcmFtZSwgR0lGUXVl
cnkgcXVlcnkpCiBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVk
IGZyYW1lSW5kZXgpCiB7CiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgcmVjdCBpbiBvdXIg
YnVmZmVyLgotICAgIGNvbnN0IEdJRkZyYW1lUmVhZGVyKiBmcmFtZVJlYWRlciA9IG1fcmVhZGVy
LT5mcmFtZV9yZWFkZXI7Ci0gICAgSW50UmVjdCBmcmFtZVJlY3QoZnJhbWVSZWFkZXItPnhfb2Zm
c2V0LCBmcmFtZVJlYWRlci0+eV9vZmZzZXQsIGZyYW1lUmVhZGVyLT53aWR0aCwgZnJhbWVSZWFk
ZXItPmhlaWdodCk7CisgICAgY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQgPSBt
X3JlYWRlci0+ZnJhbWVDb250ZXh0KCk7CisgICAgSW50UmVjdCBmcmFtZVJlY3QoZnJhbWVDb250
ZXh0LT54T2Zmc2V0LCBmcmFtZUNvbnRleHQtPnlPZmZzZXQsIGZyYW1lQ29udGV4dC0+d2lkdGgs
IGZyYW1lQ29udGV4dC0+aGVpZ2h0KTsKIAogICAgIC8vIE1ha2Ugc3VyZSB0aGUgZnJhbWVSZWN0
IGRvZXNuJ3QgZXh0ZW5kIG91dHNpZGUgdGhlIGJ1ZmZlci4KICAgICBpZiAoZnJhbWVSZWN0Lm1h
eFgoKSA+IHNpemUoKS53aWR0aCgpKQotICAgICAgICBmcmFtZVJlY3Quc2V0V2lkdGgoc2l6ZSgp
LndpZHRoKCkgLSBmcmFtZVJlYWRlci0+eF9vZmZzZXQpOworICAgICAgICBmcmFtZVJlY3Quc2V0
V2lkdGgoc2l6ZSgpLndpZHRoKCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXQpOwogICAgIGlmIChm
cmFtZVJlY3QubWF4WSgpID4gc2l6ZSgpLmhlaWdodCgpKQotICAgICAgICBmcmFtZVJlY3Quc2V0
SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lUmVhZGVyLT55X29mZnNldCk7CisgICAgICAg
IGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpIC0gZnJhbWVDb250ZXh0LT55T2Zm
c2V0KTsKIAogICAgIEltYWdlRnJhbWUqIGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2Fj
aGVbZnJhbWVJbmRleF07CiAgICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJl
Y3QueCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IDc0MTRlOTgxODU5MDdjMGY2
ODdiMzdjOTM1MDUzMTkyN2ZmYjg4M2IuLjY5OWQzYzQ3ZmI0NGFmMmM4MjRmYTU5YjAzYjQyZjUx
MDY2MGVlZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtODEsODY0ICs4MSw4MTkg
QEAgbWFpbGluZyBhZGRyZXNzLgogCiB1c2luZyBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI7CiAK
LS8vIERlZmluZSB0aGUgTW96aWxsYSBtYWNybyBzZXR1cCBzbyB0aGF0IHdlIGNhbiBsZWF2ZSB0
aGUgbWFjcm9zIGFsb25lLgotI2RlZmluZSBQUl9CRUdJTl9NQUNSTyAgZG8gewotI2RlZmluZSBQ
Ul9FTkRfTUFDUk8gICAgfSB3aGlsZSAoMCkKLQotLyoKLSAqIEdFVE4obiwgcykgcmVxdWVzdHMg
YXQgbGVhc3QgJ24nIGJ5dGVzIGF2YWlsYWJsZSBmcm9tICdxJywgYXQgc3RhcnQgb2Ygc3RhdGUg
J3MnCi0gKgotICogTm90ZSwgdGhlIGhvbGQgd2lsbCBuZXZlciBuZWVkIHRvIGJlIGJpZ2dlciB0
aGFuIDI1NiBieXRlcyB0byBnYXRoZXIgdXAgaW4gdGhlIGhvbGQsCi0gKiBhcyBlYWNoIEdJRiBi
bG9jayAoZXhjZXB0IGNvbG9ybWFwcykgY2FuIG5ldmVyIGJlIGJpZ2dlciB0aGFuIDI1NiBieXRl
cy4KLSAqIENvbG9ybWFwcyBhcmUgZGlyZWN0bHkgY29waWVkIGluIHRoZSByZXNwLiBnbG9iYWxf
Y29sb3JtYXAgb3IgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGxvY2FsX2NvbG9ybWFwLgotICogU28g
YSBmaXhlZCBidWZmZXIgaW4gR0lGSW1hZ2VSZWFkZXIgaXMgZ29vZCBlbm91Z2guCi0gKiBUaGlz
IGJ1ZmZlciBpcyBvbmx5IG5lZWRlZCB0byBjb3B5IGxlZnQtb3ZlciBkYXRhIGZyb20gb25lIEdp
ZldyaXRlIGNhbGwgdG8gdGhlIG5leHQKLSAqLwotI2RlZmluZSBHRVROKG4scykgICAgICAgICAg
ICAgICAgICAgIFwKLSAgUFJfQkVHSU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICBcCi0gICAg
Ynl0ZXNfdG9fY29uc3VtZSA9IChuKTsgICAgICBcCi0gICAgc3RhdGUgPSAocyk7ICAgICAgICAg
ICAgICAgICBcCi0gIFBSX0VORF9NQUNSTwotCi0vKiBHZXQgYSAxNi1iaXQgdmFsdWUgc3RvcmVk
IGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0ICovCisvLyBHRVROKG4sIHMpIHJlcXVlc3RzIGF0IGxl
YXN0ICduJyBieXRlcyBhdmFpbGFibGUgZnJvbSAncScsIGF0IHN0YXJ0IG9mIHN0YXRlICdzJy4K
Ky8vCisvLyBOb3RlLCB0aGUgaG9sZCB3aWxsIG5ldmVyIG5lZWQgdG8gYmUgYmlnZ2VyIHRoYW4g
MjU2IGJ5dGVzIHRvIGdhdGhlciB1cCBpbiB0aGUgaG9sZCwKKy8vIGFzIGVhY2ggR0lGIGJsb2Nr
IChleGNlcHQgY29sb3JtYXBzKSBjYW4gbmV2ZXIgYmUgYmlnZ2VyIHRoYW4gMjU2IGJ5dGVzLgor
Ly8gQ29sb3JtYXBzIGFyZSBkaXJlY3RseSBjb3BpZWQgaW4gdGhlIHJlc3AuIGdsb2JhbF9jb2xv
cm1hcCBvciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgbG9jYWxfY29sb3JtYXAuCisvLyBTbyBhIGZp
eGVkIGJ1ZmZlciBpbiBHSUZJbWFnZVJlYWRlciBpcyBnb29kIGVub3VnaC4KKy8vIFRoaXMgYnVm
ZmVyIGlzIG9ubHkgbmVlZGVkIHRvIGNvcHkgbGVmdC1vdmVyIGRhdGEgZnJvbSBvbmUgR2lmV3Jp
dGUgY2FsbCB0byB0aGUgbmV4dAorI2RlZmluZSBHRVROKG4sIHMpIFwKKyAgICBkbyB7IFwKKyAg
ICAgICAgbV9ieXRlc1RvQ29uc3VtZSA9IChuKTsgXAorICAgICAgICBtX3N0YXRlID0gKHMpOyBc
CisgICAgfSB3aGlsZSAoMCkKKworLy8gR2V0IGEgMTYtYml0IHZhbHVlIHN0b3JlZCBpbiBsaXR0
bGUtZW5kaWFuIGZvcm1hdC4KICNkZWZpbmUgR0VUSU5UMTYocCkgICAoKHApWzFdPDw4fChwKVsw
XSkKIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC8vIFNlbmQgdGhlIGRhdGEgdG8gdGhlIGRp
c3BsYXkgZnJvbnQtZW5kLgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0X3JvdygpCitib29s
IEdJRkltYWdlUmVhZGVyOjpvdXRwdXRSb3coKQogewotICBHSUZGcmFtZVJlYWRlciogZ3MgPSBm
cmFtZV9yZWFkZXI7Ci0KLSAgaW50IGRyb3dfc3RhcnQsIGRyb3dfZW5kOwotCi0gIGRyb3dfc3Rh
cnQgPSBkcm93X2VuZCA9IGdzLT5pcm93OwotCi0gIC8qCi0gICAqIEhhZWJlcmxpLWluc3BpcmVk
IGhhY2sgZm9yIGludGVybGFjZWQgR0lGczogUmVwbGljYXRlIGxpbmVzIHdoaWxlCi0gICAqIGRp
c3BsYXlpbmcgdG8gZGltaW5pc2ggdGhlICJ2ZW5ldGlhbi1ibGluZCIgZWZmZWN0IGFzIHRoZSBp
bWFnZSBpcwotICAgKiBsb2FkZWQuIEFkanVzdCBwaXhlbCB2ZXJ0aWNhbCBwb3NpdGlvbnMgdG8g
YXZvaWQgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlCi0gICAqIGltYWdlIGNyYXdsaW5nIHVwIHRoZSBz
Y3JlZW4gYXMgc3VjY2Vzc2l2ZSBwYXNzZXMgYXJlIGRyYXduLgotICAgKi8KLSAgaWYgKGdzLT5w
cm9ncmVzc2l2ZV9kaXNwbGF5ICYmIGdzLT5pbnRlcmxhY2VkICYmIGdzLT5pcGFzcyA8IDQpIHsK
LSAgICB1bnNpZ25lZCByb3dfZHVwID0gMCwgcm93X3NoaWZ0ID0gMDsKLQotICAgIHN3aXRjaCAo
Z3MtPmlwYXNzKSB7Ci0gICAgY2FzZSAxOgotICAgICAgcm93X2R1cCA9IDc7Ci0gICAgICByb3df
c2hpZnQgPSAzOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgcm93X2R1cCA9IDM7
Ci0gICAgICByb3dfc2hpZnQgPSAxOwotICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAg
cm93X2R1cCA9IDE7Ci0gICAgICByb3dfc2hpZnQgPSAwOwotICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpbnQgZHJvd1N0YXJ0ID0gbV9mcmFtZUNv
bnRleHQtPmlyb3c7CisgICAgaW50IGRyb3dFbmQgPSBtX2ZyYW1lQ29udGV4dC0+aXJvdzsKKwor
ICAgIC8vIEhhZWJlcmxpLWluc3BpcmVkIGhhY2sgZm9yIGludGVybGFjZWQgR0lGczogUmVwbGlj
YXRlIGxpbmVzIHdoaWxlCisgICAgLy8gZGlzcGxheWluZyB0byBkaW1pbmlzaCB0aGUgInZlbmV0
aWFuLWJsaW5kIiBlZmZlY3QgYXMgdGhlIGltYWdlIGlzCisgICAgLy8gbG9hZGVkLiBBZGp1c3Qg
cGl4ZWwgdmVydGljYWwgcG9zaXRpb25zIHRvIGF2b2lkIHRoZSBhcHBlYXJhbmNlIG9mIHRoZQor
ICAgIC8vIGltYWdlIGNyYXdsaW5nIHVwIHRoZSBzY3JlZW4gYXMgc3VjY2Vzc2l2ZSBwYXNzZXMg
YXJlIGRyYXduLgorICAgIGlmIChtX2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ICYm
IG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkICYmIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA8IDQp
IHsKKyAgICAgICAgdW5zaWduZWQgcm93RHVwID0gMDsKKyAgICAgICAgdW5zaWduZWQgcm93U2hp
ZnQgPSAwOworCisgICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJvd0R1cCA9IDc7CisgICAgICAgICAgICByb3dTaGlm
dCA9IDM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAg
cm93RHVwID0gMzsKKyAgICAgICAgICAgIHJvd1NoaWZ0ID0gMTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICByb3dEdXAgPSAxOworICAgICAgICAgICAg
cm93U2hpZnQgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAgZHJvd19zdGFydCAtPSByb3dfc2hpZnQ7
Ci0gICAgZHJvd19lbmQgPSBkcm93X3N0YXJ0ICsgcm93X2R1cDsKKyAgICAgICAgZHJvd1N0YXJ0
IC09IHJvd1NoaWZ0OworICAgICAgICBkcm93RW5kID0gZHJvd1N0YXJ0ICsgcm93RHVwOwogCi0g
ICAgLyogRXh0ZW5kIGlmIGJvdHRvbSBlZGdlIGlzbid0IGNvdmVyZWQgYmVjYXVzZSBvZiB0aGUg
c2hpZnQgdXB3YXJkLiAqLwotICAgIGlmICgoKGdzLT5oZWlnaHQgLSAxKSAtIGRyb3dfZW5kKSA8
PSByb3dfc2hpZnQpCi0gICAgICBkcm93X2VuZCA9IGdzLT5oZWlnaHQgLSAxOworICAgICAgICAv
LyBFeHRlbmQgaWYgYm90dG9tIGVkZ2UgaXNuJ3QgY292ZXJlZCBiZWNhdXNlIG9mIHRoZSBzaGlm
dCB1cHdhcmQuCisgICAgICAgIGlmICgoKG1fZnJhbWVDb250ZXh0LT5oZWlnaHQgLSAxKSAtIGRy
b3dFbmQpIDw9IHJvd1NoaWZ0KQorICAgICAgICAgICAgZHJvd0VuZCA9IG1fZnJhbWVDb250ZXh0
LT5oZWlnaHQgLSAxOwogCi0gICAgLyogQ2xhbXAgZmlyc3QgYW5kIGxhc3Qgcm93cyB0byB1cHBl
ciBhbmQgbG93ZXIgZWRnZSBvZiBpbWFnZS4gKi8KLSAgICBpZiAoZHJvd19zdGFydCA8IDApCi0g
ICAgICBkcm93X3N0YXJ0ID0gMDsKLSAgICBpZiAoKHVuc2lnbmVkKWRyb3dfZW5kID49IGdzLT5o
ZWlnaHQpCi0gICAgICBkcm93X2VuZCA9IGdzLT5oZWlnaHQgLSAxOwotICB9CisgICAgICAgIC8v
IENsYW1wIGZpcnN0IGFuZCBsYXN0IHJvd3MgdG8gdXBwZXIgYW5kIGxvd2VyIGVkZ2Ugb2YgaW1h
Z2UuCisgICAgICAgIGlmIChkcm93U3RhcnQgPCAwKQorICAgICAgICAgICAgZHJvd1N0YXJ0ID0g
MDsKIAotICAvKiBQcm90ZWN0IGFnYWluc3QgdG9vIG11Y2ggaW1hZ2UgZGF0YSAqLwotICBpZiAo
KHVuc2lnbmVkKWRyb3dfc3RhcnQgPj0gZ3MtPmhlaWdodCkKLSAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgaWYgKCh1bnNpZ25lZClkcm93RW5kID49IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQpCisg
ICAgICAgICAgICBkcm93RW5kID0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCAtIDE7CisgICAgfQog
Ci0gIC8vIENBTExCQUNLOiBMZXQgdGhlIGNsaWVudCBrbm93IHdlIGhhdmUgZGVjb2RlZCBhIHJv
dy4KLSAgaWYgKGNsaWVudHB0ciAmJiBmcmFtZV9yZWFkZXIgJiYKLSAgICAgICFjbGllbnRwdHIt
PmhhdmVEZWNvZGVkUm93KGltYWdlc19jb3VudCAtIDEsIGZyYW1lX3JlYWRlci0+cm93YnVmLCBm
cmFtZV9yZWFkZXItPnJvd2VuZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRy
b3dfc3RhcnQsIGRyb3dfZW5kIC0gZHJvd19zdGFydCArIDEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncy0+cHJvZ3Jlc3NpdmVfZGlzcGxheSAmJiBncy0+aW50ZXJsYWNlZCAm
JiBncy0+aXBhc3MgPiAxKSkKLSAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gUHJvdGVjdCBhZ2Fp
bnN0IHRvbyBtdWNoIGltYWdlIGRhdGEuCisgICAgaWYgKCh1bnNpZ25lZClkcm93U3RhcnQgPj0g
bV9mcmFtZUNvbnRleHQtPmhlaWdodCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgZ3MtPnJv
d3AgPSBncy0+cm93YnVmOworICAgIC8vIENBTExCQUNLOiBMZXQgdGhlIGNsaWVudCBrbm93IHdl
IGhhdmUgZGVjb2RlZCBhIHJvdy4KKyAgICBpZiAobV9jbGllbnQgJiYgbV9mcmFtZUNvbnRleHQK
KyAgICAgICAgJiYgIW1fY2xpZW50LT5oYXZlRGVjb2RlZFJvdyhtX2ltYWdlc0NvdW50IC0gMSwg
bV9mcmFtZUNvbnRleHQtPnJvd2J1ZiwgbV9mcmFtZUNvbnRleHQtPnJvd2VuZCwKKyAgICAgICAg
ICAgIGRyb3dTdGFydCwgZHJvd0VuZCAtIGRyb3dTdGFydCArIDEsIG1fZnJhbWVDb250ZXh0LT5w
cm9ncmVzc2l2ZURpc3BsYXkgJiYgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQgJiYgbV9mcmFt
ZUNvbnRleHQtPmlwYXNzID4gMSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICBpZiAoIWdz
LT5pbnRlcmxhY2VkKQotICAgIGdzLT5pcm93Kys7Ci0gIGVsc2UgewotICAgIGRvIHsKLSAgICAg
IHN3aXRjaCAoZ3MtPmlwYXNzKQotICAgICAgewotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAg
Z3MtPmlyb3cgKz0gODsKLSAgICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdodCkgewot
ICAgICAgICAgICAgZ3MtPmlwYXNzKys7Ci0gICAgICAgICAgICBncy0+aXJvdyA9IDQ7Ci0gICAg
ICAgICAgfQotICAgICAgICAgIGJyZWFrOworICAgIG1fZnJhbWVDb250ZXh0LT5yb3dwID0gbV9m
cmFtZUNvbnRleHQtPnJvd2J1ZjsKKworICAgIGlmICghbV9mcmFtZUNvbnRleHQtPmludGVybGFj
ZWQpCisgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93Kys7CisgICAgZWxzZSB7CisgICAgICAg
IGRvIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9mcmFtZUNvbnRleHQtPmlwYXNzKSB7CisgICAg
ICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgKz0g
ODsKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQtPmlyb3cgPj0gbV9mcmFtZUNv
bnRleHQtPmhlaWdodCkgeworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXBh
c3MrKzsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlyb3cgPSA0OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2Fz
ZSAyOgorICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ICs9IDg7CisgICAgICAg
ICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0LT5pcm93ID49IG1fZnJhbWVDb250ZXh0LT5oZWln
aHQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlwYXNzKys7CisgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMzoKKyAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyArPSA0OworICAgICAgICAgICAgICAgIGlm
IChtX2ZyYW1lQ29udGV4dC0+aXJvdyA+PSBtX2ZyYW1lQ29udGV4dC0+aGVpZ2h0KSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcysrOworICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+aXJvdyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPmlyb3cgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNv
bnRleHQtPmlyb3cgPj0gbV9mcmFtZUNvbnRleHQtPmhlaWdodCkgeworICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MrKzsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPmlyb3cgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAobV9mcmFtZUNvbnRleHQtPmlyb3cgPiAobV9m
cmFtZUNvbnRleHQtPmhlaWdodCAtIDEpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAK
LSAgICAgICAgY2FzZSAyOgotICAgICAgICAgIGdzLT5pcm93ICs9IDg7Ci0gICAgICAgICAgaWYg
KGdzLT5pcm93ID49IGdzLT5oZWlnaHQpIHsKLSAgICAgICAgICAgIGdzLT5pcGFzcysrOwotICAg
ICAgICAgICAgZ3MtPmlyb3cgPSAyOwotICAgICAgICAgIH0KLSAgICAgICAgICBicmVhazsKKy8v
IFBlcmZvcm0gTGVtcGVsLVppdi1XZWxjaCBkZWNvZGluZy4KK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6
OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpCit7CisgICAgaWYgKCFtX2ZyYW1lQ29udGV4
dCkKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAgY2FzZSAzOgotICAgICAgICAgIGdz
LT5pcm93ICs9IDQ7Ci0gICAgICAgICAgaWYgKGdzLT5pcm93ID49IGdzLT5oZWlnaHQpIHsKLSAg
ICAgICAgICAgIGdzLT5pcGFzcysrOwotICAgICAgICAgICAgZ3MtPmlyb3cgPSAxOwotICAgICAg
ICAgIH0KLSAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgZ3Mt
Pmlyb3cgKz0gMjsKLSAgICAgICAgICBpZiAoZ3MtPmlyb3cgPj0gZ3MtPmhlaWdodCl7Ci0gICAg
ICAgICAgICBncy0+aXBhc3MrKzsKLSAgICAgICAgICAgIGdzLT5pcm93ID0gMDsKLSAgICAgICAg
ICB9Ci0gICAgICAgICAgYnJlYWs7CisgICAgaW50IGNvZGU7CisgICAgaW50IGluY29kZTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBjaGFyICpjaDsKKworICAgIC8vIENvcHkgYWxsIHRoZSBkZWNvZGVy
IHN0YXRlIHZhcmlhYmxlcyBpbnRvIGxvY2FscyBzbyB0aGUgY29tcGlsZXIKKyAgICAvLyB3b24n
dCB3b3JyeSBhYm91dCB0aGVtIGJlaW5nIGFsaWFzZWQuIFRoZSBsb2NhbHMgd2lsbCBiZSBob21l
ZAorICAgIC8vIGJhY2sgaW50byB0aGUgR0lGIGRlY29kZXIgc3RydWN0dXJlIHdoZW4gd2UgZXhp
dC4KKyAgICBpbnQgYXZhaWwgPSBtX2ZyYW1lQ29udGV4dC0+YXZhaWw7CisgICAgaW50IGJpdHMg
PSBtX2ZyYW1lQ29udGV4dC0+Yml0czsKKyAgICBpbnQgY250ID0gbV9jb3VudDsKKyAgICBpbnQg
Y29kZXNpemUgPSBtX2ZyYW1lQ29udGV4dC0+Y29kZXNpemU7CisgICAgaW50IGNvZGVtYXNrID0g
bV9mcmFtZUNvbnRleHQtPmNvZGVtYXNrOworICAgIGludCBvbGRjb2RlID0gbV9mcmFtZUNvbnRl
eHQtPm9sZGNvZGU7CisgICAgaW50IGNsZWFyQ29kZSA9IG1fZnJhbWVDb250ZXh0LT5jbGVhckNv
ZGU7CisgICAgdW5zaWduZWQgY2hhciBmaXJzdGNoYXIgPSBtX2ZyYW1lQ29udGV4dC0+Zmlyc3Rj
aGFyOworICAgIGludCBkYXR1bSA9IG1fZnJhbWVDb250ZXh0LT5kYXR1bTsKKworICAgIGlmICgh
bV9mcmFtZUNvbnRleHQtPnByZWZpeCkgeworICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cHJlZml4
ID0gbmV3IHVuc2lnbmVkIHNob3J0W01BWF9CSVRTXTsKKyAgICAgICAgbWVtc2V0KG1fZnJhbWVD
b250ZXh0LT5wcmVmaXgsIDAsIE1BWF9CSVRTICogc2l6ZW9mKHNob3J0KSk7CisgICAgfQogCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfSB3aGlsZSAo
Z3MtPmlyb3cgPiAoZ3MtPmhlaWdodCAtIDEpKTsKLSAgfQorICAgIHVuc2lnbmVkIHNob3J0ICpw
cmVmaXggPSBtX2ZyYW1lQ29udGV4dC0+cHJlZml4OworICAgIHVuc2lnbmVkIGNoYXIgKnN0YWNr
cCA9IG1fZnJhbWVDb250ZXh0LT5zdGFja3A7CisgICAgdW5zaWduZWQgY2hhciAqc3VmZml4ID0g
bV9mcmFtZUNvbnRleHQtPnN1ZmZpeDsKKyAgICB1bnNpZ25lZCBjaGFyICpzdGFjayA9IG1fZnJh
bWVDb250ZXh0LT5zdGFjazsKKyAgICB1bnNpZ25lZCBjaGFyICpyb3dwID0gbV9mcmFtZUNvbnRl
eHQtPnJvd3A7CisgICAgdW5zaWduZWQgY2hhciAqcm93ZW5kID0gbV9mcmFtZUNvbnRleHQtPnJv
d2VuZDsKKyAgICB1bnNpZ25lZCByb3dzUmVtYWluaW5nID0gbV9mcmFtZUNvbnRleHQtPnJvd3NS
ZW1haW5pbmc7CisKKyAgICBpZiAocm93cCA9PSByb3dlbmQpCisgICAgICAgIHJldHVybiB0cnVl
OwogCi0gIHJldHVybiB0cnVlOworI2RlZmluZSBPVVRQVVRfUk9XIFwKKyAgICBkbyB7IFwKKyAg
ICAgICAgaWYgKCFvdXRwdXRSb3coKSkgXAorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyBcCisg
ICAgICAgIHJvd3NSZW1haW5pbmctLTsgXAorICAgICAgICByb3dwID0gbV9mcmFtZUNvbnRleHQt
PnJvd3A7IFwKKyAgICAgICAgaWYgKCFyb3dzUmVtYWluaW5nKSBcCisgICAgICAgICAgICBnb3Rv
IEVORDsgXAorICAgIH0gd2hpbGUgKDApCisKKyAgICBmb3IgKGNoID0gcTsgY250LS0gPiAwOyBj
aCsrKSB7CisgICAgICAgIC8vIEZlZWQgdGhlIG5leHQgYnl0ZSBpbnRvIHRoZSBkZWNvZGVyJ3Mg
MzItYml0IGlucHV0IGJ1ZmZlci4KKyAgICAgICAgZGF0dW0gKz0gKChpbnQpICpjaCkgPDwgYml0
czsKKyAgICAgICAgYml0cyArPSA4OworCisgICAgICAgIC8vIENoZWNrIGZvciB1bmRlcmZsb3cg
b2YgZGVjb2RlcidzIDMyLWJpdCBpbnB1dCBidWZmZXIuCisgICAgICAgIHdoaWxlIChiaXRzID49
IGNvZGVzaXplKSB7CisgICAgICAgICAgICAvLyBHZXQgdGhlIGxlYWRpbmcgdmFyaWFibGUtbGVu
Z3RoIHN5bWJvbCBmcm9tIHRoZSBkYXRhIHN0cmVhbS4KKyAgICAgICAgICAgIGNvZGUgPSBkYXR1
bSAmIGNvZGVtYXNrOworICAgICAgICAgICAgZGF0dW0gPj49IGNvZGVzaXplOworICAgICAgICAg
ICAgYml0cyAtPSBjb2Rlc2l6ZTsKKworICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGRpY3Rpb25h
cnkgdG8gaXRzIG9yaWdpbmFsIHN0YXRlLCBpZiByZXF1ZXN0ZWQuCisgICAgICAgICAgICBpZiAo
Y29kZSA9PSBjbGVhckNvZGUpIHsKKyAgICAgICAgICAgICAgICBjb2Rlc2l6ZSA9IG1fZnJhbWVD
b250ZXh0LT5kYXRhc2l6ZSArIDE7CisgICAgICAgICAgICAgICAgY29kZW1hc2sgPSAoMSA8PCBj
b2Rlc2l6ZSkgLSAxOworICAgICAgICAgICAgICAgIGF2YWlsID0gY2xlYXJDb2RlICsgMjsKKyAg
ICAgICAgICAgICAgICBvbGRjb2RlID0gLTE7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIENoZWNrIGZvciBleHBsaWNpdCBlbmQtb2Yt
c3RyZWFtIGNvZGUuCisgICAgICAgICAgICBpZiAoY29kZSA9PSAoY2xlYXJDb2RlICsgMSkpIHsK
KyAgICAgICAgICAgICAgICAvLyBlbmQtb2Ytc3RyZWFtIHNob3VsZCBvbmx5IGFwcGVhciBhZnRl
ciBhbGwgaW1hZ2UgZGF0YS4KKyAgICAgICAgICAgICAgICBpZiAoIXJvd3NSZW1haW5pbmcpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIHJldHVybiBt
X2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpZiAob2xkY29kZSA9PSAtMSkgeworICAgICAgICAgICAgICAgICpyb3dw
KysgPSBzdWZmaXhbY29kZV07CisgICAgICAgICAgICAgICAgaWYgKHJvd3AgPT0gcm93ZW5kKQor
ICAgICAgICAgICAgICAgICAgICBPVVRQVVRfUk9XOworCisgICAgICAgICAgICAgICAgZmlyc3Rj
aGFyID0gb2xkY29kZSA9IGNvZGU7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGluY29kZSA9IGNvZGU7CisgICAgICAgICAgICBpZiAoY29k
ZSA+PSBhdmFpbCkgeworICAgICAgICAgICAgICAgICpzdGFja3ArKyA9IGZpcnN0Y2hhcjsKKyAg
ICAgICAgICAgICAgICBjb2RlID0gb2xkY29kZTsKKworICAgICAgICAgICAgICAgIGlmIChzdGFj
a3AgPT0gc3RhY2sgKyBNQVhfQklUUykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xp
ZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHdoaWxlIChjb2RlID49IGNsZWFyQ29kZSkgeworICAgICAgICAgICAgICAgIGlm
IChjb2RlID49IE1BWF9CSVRTIHx8IGNvZGUgPT0gcHJlZml4W2NvZGVdKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsK
KworICAgICAgICAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHN1ZmZpeFtdIG9ubHkgaG9sZHMgY2hh
cmFjdGVycyB0aHJvdWdoIHN1ZmZpeFthdmFpbCAtIDFdLAorICAgICAgICAgICAgICAgIC8vIGFs
bG93aW5nIGNvZGUgPj0gYXZhaWwgaGVyZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgbWFs
Zm9ybWVkCisgICAgICAgICAgICAgICAgLy8gZGF0YS4gQXMgbG9uZyBhcyBjb2RlIDwgTUFYX0JJ
VFMsIHRoZSBvbmx5IHJpc2sgaXMgYSBnYXJibGVkIGltYWdlLAorICAgICAgICAgICAgICAgIC8v
IHdoaWNoIGlzIG5vIHdvcnNlIHRoYW4gcmVmdXNpbmcgdG8gZGlzcGxheSBpdC4KKyAgICAgICAg
ICAgICAgICAqc3RhY2twKysgPSBzdWZmaXhbY29kZV07CisgICAgICAgICAgICAgICAgY29kZSA9
IHByZWZpeFtjb2RlXTsKKworICAgICAgICAgICAgICAgIGlmIChzdGFja3AgPT0gc3RhY2sgKyBN
QVhfQklUUykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQt
PnNldEZhaWxlZCgpIDogZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpzdGFj
a3ArKyA9IGZpcnN0Y2hhciA9IHN1ZmZpeFtjb2RlXTsKKworICAgICAgICAgICAgLy8gRGVmaW5l
IGEgbmV3IGNvZGV3b3JkIGluIHRoZSBkaWN0aW9uYXJ5LgorICAgICAgICAgICAgaWYgKGF2YWls
IDwgNDA5NikgeworICAgICAgICAgICAgICAgIHByZWZpeFthdmFpbF0gPSBvbGRjb2RlOworICAg
ICAgICAgICAgICAgIHN1ZmZpeFthdmFpbF0gPSBmaXJzdGNoYXI7CisgICAgICAgICAgICAgICAg
YXZhaWwrKzsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIHVzZWQgdXAgYWxsIHRoZSBj
b2Rld29yZHMgb2YgYSBnaXZlbiBsZW5ndGgKKyAgICAgICAgICAgICAgICAvLyBpbmNyZWFzZSB0
aGUgbGVuZ3RoIG9mIGNvZGV3b3JkcyBieSBvbmUgYml0LCBidXQgZG9uJ3QKKyAgICAgICAgICAg
ICAgICAvLyBleGNlZWQgdGhlIHNwZWNpZmllZCBtYXhpbXVtIGNvZGV3b3JkIHNpemUgb2YgMTIg
Yml0cy4KKyAgICAgICAgICAgICAgICBpZiAoKCEoYXZhaWwgJiBjb2RlbWFzaykpICYmIChhdmFp
bCA8IDQwOTYpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvZGVzaXplKys7CisgICAgICAgICAg
ICAgICAgICAgIGNvZGVtYXNrICs9IGF2YWlsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG9sZGNvZGUgPSBpbmNvZGU7CisKKyAgICAgICAgICAgIC8vIENv
cHkgdGhlIGRlY29kZWQgZGF0YSBvdXQgdG8gdGhlIHNjYW5saW5lIGJ1ZmZlci4KKyAgICAgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqcm93cCsrID0gKi0tc3RhY2twOworICAgICAgICAg
ICAgICAgIGlmIChyb3dwID09IHJvd2VuZCkKKyAgICAgICAgICAgICAgICAgICAgT1VUUFVUX1JP
VzsKKyAgICAgICAgICAgIH0gd2hpbGUgKHN0YWNrcCA+IHN0YWNrKTsKKyAgICAgICAgfQorICAg
IH0KKworRU5EOgorICAgIC8vIEhvbWUgdGhlIGxvY2FsIGNvcGllcyBvZiB0aGUgR0lGIGRlY29k
ZXIgc3RhdGUgdmFyaWFibGVzLgorICAgIG1fZnJhbWVDb250ZXh0LT5hdmFpbCA9IGF2YWlsOwor
ICAgIG1fZnJhbWVDb250ZXh0LT5iaXRzID0gYml0czsKKyAgICBtX2ZyYW1lQ29udGV4dC0+Y29k
ZXNpemUgPSBjb2Rlc2l6ZTsKKyAgICBtX2ZyYW1lQ29udGV4dC0+Y29kZW1hc2sgPSBjb2RlbWFz
azsKKyAgICBtX2NvdW50ID0gY250OworICAgIG1fZnJhbWVDb250ZXh0LT5vbGRjb2RlID0gb2xk
Y29kZTsKKyAgICBtX2ZyYW1lQ29udGV4dC0+Zmlyc3RjaGFyID0gZmlyc3RjaGFyOworICAgIG1f
ZnJhbWVDb250ZXh0LT5kYXR1bSA9IGRhdHVtOworICAgIG1fZnJhbWVDb250ZXh0LT5zdGFja3Ag
PSBzdGFja3A7CisgICAgbV9mcmFtZUNvbnRleHQtPnJvd3AgPSByb3dwOworICAgIG1fZnJhbWVD
b250ZXh0LT5yb3dzUmVtYWluaW5nID0gcm93c1JlbWFpbmluZzsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS8qIFBlcmZvcm0gTGVtcGVsLVppdi1XZWxj
aCBkZWNvZGluZyAqLwotYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9fbHp3KGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnEpCisKKy8vIFByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9y
IHRoZSBnaWYgZGVjb2Rlci4KK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWdu
ZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVl
cnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKQogewotICBHSUZGcmFtZVJlYWRlciogZ3MgPSBmcmFt
ZV9yZWFkZXI7Ci0gIGlmICghZ3MpCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCFsZW4pIHsK
KyAgICAgICAgLy8gTm8gbmV3IGRhdGEgaGFzIGNvbWUgaW4gc2luY2UgdGhlIGxhc3QgY2FsbCwg
anVzdCBpZ25vcmUgdGhpcyBjYWxsLgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAKLSAg
aW50IGNvZGU7Ci0gIGludCBpbmNvZGU7Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoOwotICAK
LSAgLyogQ29weSBhbGwgdGhlIGRlY29kZXIgc3RhdGUgdmFyaWFibGVzIGludG8gbG9jYWxzIHNv
IHRoZSBjb21waWxlcgotICAgKiB3b24ndCB3b3JyeSBhYm91dCB0aGVtIGJlaW5nIGFsaWFzZWQu
ICBUaGUgbG9jYWxzIHdpbGwgYmUgaG9tZWQKLSAgICogYmFjayBpbnRvIHRoZSBHSUYgZGVjb2Rl
ciBzdHJ1Y3R1cmUgd2hlbiB3ZSBleGl0LgotICAgKi8KLSAgaW50IGF2YWlsICAgICAgID0gZ3Mt
PmF2YWlsOwotICBpbnQgYml0cyAgICAgICAgPSBncy0+Yml0czsKLSAgaW50IGNudCAgICAgICAg
ID0gY291bnQ7Ci0gIGludCBjb2Rlc2l6ZSAgICA9IGdzLT5jb2Rlc2l6ZTsKLSAgaW50IGNvZGVt
YXNrICAgID0gZ3MtPmNvZGVtYXNrOwotICBpbnQgb2xkY29kZSAgICAgPSBncy0+b2xkY29kZTsK
LSAgaW50IGNsZWFyX2NvZGUgID0gZ3MtPmNsZWFyX2NvZGU7Ci0gIHVuc2lnbmVkIGNoYXIgZmly
c3RjaGFyID0gZ3MtPmZpcnN0Y2hhcjsKLSAgaW50IGRhdHVtICAgICA9IGdzLT5kYXR1bTsKLQot
ICBpZiAoIWdzLT5wcmVmaXgpIHsKLSAgICBncy0+cHJlZml4ID0gbmV3IHVuc2lnbmVkIHNob3J0
W01BWF9CSVRTXTsKLSAgICBtZW1zZXQoZ3MtPnByZWZpeCwgMCwgTUFYX0JJVFMgKiBzaXplb2Yo
c2hvcnQpKTsKLSAgfQotCi0gIHVuc2lnbmVkIHNob3J0ICpwcmVmaXggID0gZ3MtPnByZWZpeDsK
LSAgdW5zaWduZWQgY2hhciAqc3RhY2twICAgPSBncy0+c3RhY2twOwotICB1bnNpZ25lZCBjaGFy
ICpzdWZmaXggICA9IGdzLT5zdWZmaXg7Ci0gIHVuc2lnbmVkIGNoYXIgKnN0YWNrICAgID0gZ3Mt
PnN0YWNrOwotICB1bnNpZ25lZCBjaGFyICpyb3dwICAgICA9IGdzLT5yb3dwOwotICB1bnNpZ25l
ZCBjaGFyICpyb3dlbmQgICA9IGdzLT5yb3dlbmQ7Ci0gIHVuc2lnbmVkIHJvd3NfcmVtYWluaW5n
ID0gZ3MtPnJvd3NfcmVtYWluaW5nOwotCi0gIGlmIChyb3dwID09IHJvd2VuZCkKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxID0gYnVmOworCisgICAgLy8gQWRk
IHdoYXQgd2UgaGF2ZSBzbyBmYXIgdG8gdGhlIGJsb2NrLgorICAgIC8vIElmIHByZXZpb3VzIGNh
bGwgdG8gbWUgbGVmdCBzb21ldGhpbmcgaW4gdGhlIGhvbGQgZmlyc3QgY29tcGxldGUgY3VycmVu
dCBibG9jaworICAgIC8vIG9yIGlmIHdlIGFyZSBmaWxsaW5nIHRoZSBjb2xvcm1hcHMsIGZpcnN0
IGNvbXBsZXRlIHRoZSBjb2xvcm1hcC4KKyAgICB1bnNpZ25lZCBjaGFyKiBwID0gMDsKKyAgICBp
ZiAobV9zdGF0ZSA9PSBHSUZHbG9iYWxDb2xvcm1hcCkKKyAgICAgICAgcCA9IG1fZ2xvYmFsQ29s
b3JtYXA7CisgICAgZWxzZSBpZiAobV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKQorICAgICAg
ICBwID0gbV9mcmFtZUNvbnRleHQgPyBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA6IDA7
CisgICAgZWxzZSBpZiAobV9ieXRlc0luSG9sZCkKKyAgICAgICAgcCA9IG1faG9sZDsKKyAgICBl
bHNlCisgICAgICAgIHAgPSAwOworCisgICAgaWYgKHAgfHwgKG1fc3RhdGUgPT0gR0lGR2xvYmFs
Q29sb3JtYXApIHx8IChtX3N0YXRlID09IEdJRkltYWdlQ29sb3JtYXApKSB7CisgICAgICAgIC8v
IEFkZCB3aGF0IHdlIGhhdmUgc29mYXIgdG8gdGhlIGJsb2NrCisgICAgICAgIHVuc2lnbmVkIGxl
bmd0aCA9IGxlbiA8IG1fYnl0ZXNUb0NvbnN1bWUgPyBsZW4gOiBtX2J5dGVzVG9Db25zdW1lOwor
ICAgICAgICBpZiAocCkKKyAgICAgICAgICAgIG1lbWNweShwICsgbV9ieXRlc0luSG9sZCwgYnVm
LCBsZW5ndGgpOworCisgICAgICAgIGlmIChsZW5ndGggPCBtX2J5dGVzVG9Db25zdW1lKSB7Cisg
ICAgICAgICAgICAvLyBOb3QgZW5vdWdoIGluICdidWYnIHRvIGNvbXBsZXRlIGN1cnJlbnQgYmxv
Y2ssIGdldCBtb3JlCisgICAgICAgICAgICBtX2J5dGVzSW5Ib2xkICs9IGxlbmd0aDsKKyAgICAg
ICAgICAgIG1fYnl0ZXNUb0NvbnN1bWUgLT0gbGVuZ3RoOworICAgICAgICAgICAgaWYgKG1fY2xp
ZW50KQorICAgICAgICAgICAgICAgIG1fY2xpZW50LT5kZWNvZGluZ0hhbHRlZCgwKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogCi0jZGVmaW5lIE9VVFBVVF9ST1cgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgUFJfQkVH
SU5fTUFDUk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICBpZiAoIW91dHB1dF9yb3coKSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHJldHVybiBmYWxzZTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBy
b3dzX3JlbWFpbmluZy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICByb3dwID0gZnJhbWVfcmVhZGVyLT5yb3dwOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCFyb3dzX3Jl
bWFpbmluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICBnb3RvIEVORDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gIFBSX0VORF9NQUNSTwotCi0gIGZvciAoY2ggPSBxOyBjbnQt
LSA+IDA7IGNoKyspCi0gIHsKLSAgICAvKiBGZWVkIHRoZSBuZXh0IGJ5dGUgaW50byB0aGUgZGVj
b2RlcidzIDMyLWJpdCBpbnB1dCBidWZmZXIuICovCi0gICAgZGF0dW0gKz0gKChpbnQpICpjaCkg
PDwgYml0czsKLSAgICBiaXRzICs9IDg7Ci0KLSAgICAvKiBDaGVjayBmb3IgdW5kZXJmbG93IG9m
IGRlY29kZXIncyAzMi1iaXQgaW5wdXQgYnVmZmVyLiAqLwotICAgIHdoaWxlIChiaXRzID49IGNv
ZGVzaXplKQotICAgIHsKLSAgICAgIC8qIEdldCB0aGUgbGVhZGluZyB2YXJpYWJsZS1sZW5ndGgg
c3ltYm9sIGZyb20gdGhlIGRhdGEgc3RyZWFtICovCi0gICAgICBjb2RlID0gZGF0dW0gJiBjb2Rl
bWFzazsKLSAgICAgIGRhdHVtID4+PSBjb2Rlc2l6ZTsKLSAgICAgIGJpdHMgLT0gY29kZXNpemU7
Ci0KLSAgICAgIC8qIFJlc2V0IHRoZSBkaWN0aW9uYXJ5IHRvIGl0cyBvcmlnaW5hbCBzdGF0ZSwg
aWYgcmVxdWVzdGVkICovCi0gICAgICBpZiAoY29kZSA9PSBjbGVhcl9jb2RlKSB7Ci0gICAgICAg
IGNvZGVzaXplID0gZ3MtPmRhdGFzaXplICsgMTsKLSAgICAgICAgY29kZW1hc2sgPSAoMSA8PCBj
b2Rlc2l6ZSkgLSAxOwotICAgICAgICBhdmFpbCA9IGNsZWFyX2NvZGUgKyAyOwotICAgICAgICBv
bGRjb2RlID0gLTE7Ci0gICAgICAgIGNvbnRpbnVlOwotICAgICAgfQotCi0gICAgICAvKiBDaGVj
ayBmb3IgZXhwbGljaXQgZW5kLW9mLXN0cmVhbSBjb2RlICovCi0gICAgICBpZiAoY29kZSA9PSAo
Y2xlYXJfY29kZSArIDEpKSB7Ci0gICAgICAgIC8qIGVuZC1vZi1zdHJlYW0gc2hvdWxkIG9ubHkg
YXBwZWFyIGFmdGVyIGFsbCBpbWFnZSBkYXRhICovCi0gICAgICAgIGlmICghcm93c19yZW1haW5p
bmcpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBj
bGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChvbGRj
b2RlID09IC0xKSB7Ci0gICAgICAgICpyb3dwKysgPSBzdWZmaXhbY29kZV07Ci0gICAgICAgIGlm
IChyb3dwID09IHJvd2VuZCkKLSAgICAgICAgICBPVVRQVVRfUk9XOwotCi0gICAgICAgIGZpcnN0
Y2hhciA9IG9sZGNvZGUgPSBjb2RlOwotICAgICAgICBjb250aW51ZTsKLSAgICAgIH0KLQotICAg
ICAgaW5jb2RlID0gY29kZTsKLSAgICAgIGlmIChjb2RlID49IGF2YWlsKSB7Ci0gICAgICAgICpz
dGFja3ArKyA9IGZpcnN0Y2hhcjsKLSAgICAgICAgY29kZSA9IG9sZGNvZGU7Ci0KLSAgICAgICAg
aWYgKHN0YWNrcCA9PSBzdGFjayArIE1BWF9CSVRTKQotICAgICAgICAgIHJldHVybiBjbGllbnRw
dHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICB9Ci0KLSAgICAgIHdo
aWxlIChjb2RlID49IGNsZWFyX2NvZGUpCi0gICAgICB7Ci0gICAgICAgIGlmIChjb2RlID49IE1B
WF9CSVRTIHx8IGNvZGUgPT0gcHJlZml4W2NvZGVdKQotICAgICAgICAgIHJldHVybiBjbGllbnRw
dHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0KLSAgICAgICAgLy8gRXZlbiB0
aG91Z2ggc3VmZml4W10gb25seSBob2xkcyBjaGFyYWN0ZXJzIHRocm91Z2ggc3VmZml4W2F2YWls
IC0gMV0sCi0gICAgICAgIC8vIGFsbG93aW5nIGNvZGUgPj0gYXZhaWwgaGVyZSBsZXRzIHVzIGJl
IG1vcmUgdG9sZXJhbnQgb2YgbWFsZm9ybWVkCi0gICAgICAgIC8vIGRhdGEuIEFzIGxvbmcgYXMg
Y29kZSA8IE1BWF9CSVRTLCB0aGUgb25seSByaXNrIGlzIGEgZ2FyYmxlZCBpbWFnZSwKLSAgICAg
ICAgLy8gd2hpY2ggaXMgbm8gd29yc2UgdGhhbiByZWZ1c2luZyB0byBkaXNwbGF5IGl0LgotICAg
ICAgICAqc3RhY2twKysgPSBzdWZmaXhbY29kZV07Ci0gICAgICAgIGNvZGUgPSBwcmVmaXhbY29k
ZV07Ci0KLSAgICAgICAgaWYgKHN0YWNrcCA9PSBzdGFjayArIE1BWF9CSVRTKQotICAgICAgICAg
IHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAg
ICB9Ci0KLSAgICAgICpzdGFja3ArKyA9IGZpcnN0Y2hhciA9IHN1ZmZpeFtjb2RlXTsKLQotICAg
ICAgLyogRGVmaW5lIGEgbmV3IGNvZGV3b3JkIGluIHRoZSBkaWN0aW9uYXJ5LiAqLwotICAgICAg
aWYgKGF2YWlsIDwgNDA5NikgewotICAgICAgICBwcmVmaXhbYXZhaWxdID0gb2xkY29kZTsKLSAg
ICAgICAgc3VmZml4W2F2YWlsXSA9IGZpcnN0Y2hhcjsKLSAgICAgICAgYXZhaWwrKzsKLQotICAg
ICAgICAvKiBJZiB3ZSd2ZSB1c2VkIHVwIGFsbCB0aGUgY29kZXdvcmRzIG9mIGEgZ2l2ZW4gbGVu
Z3RoCi0gICAgICAgICAqIGluY3JlYXNlIHRoZSBsZW5ndGggb2YgY29kZXdvcmRzIGJ5IG9uZSBi
aXQsIGJ1dCBkb24ndAotICAgICAgICAgKiBleGNlZWQgdGhlIHNwZWNpZmllZCBtYXhpbXVtIGNv
ZGV3b3JkIHNpemUgb2YgMTIgYml0cy4KLSAgICAgICAgICovCi0gICAgICAgIGlmICgoKGF2YWls
ICYgY29kZW1hc2spID09IDApICYmIChhdmFpbCA8IDQwOTYpKSB7Ci0gICAgICAgICAgY29kZXNp
emUrKzsKLSAgICAgICAgICBjb2RlbWFzayArPSBhdmFpbDsKKyAgICAgICAgLy8gUmVzZXQgaG9s
ZCBidWZmZXIgY291bnQKKyAgICAgICAgbV9ieXRlc0luSG9sZCA9IDA7CisKKyAgICAgICAgLy8g
UG9pbnQgJ3EnIHRvIGNvbXBsZXRlIGJsb2NrIGluIGhvbGQgKG9yIGluIGNvbG9ybWFwKQorICAg
ICAgICBxID0gcDsKKyAgICB9CisKKyAgICAvLyBJbnZhcmlhbnQ6CisgICAgLy8gICAgJ3EnIGlz
IHN0YXJ0IG9mIGN1cnJlbnQgdG8gYmUgcHJvY2Vzc2VkIGJsb2NrIChob2xkLCBjb2xvcm1hcCBv
ciBidWYpCisgICAgLy8gICAgJ21fYnl0ZXNUb0NvbnN1bWUnIGlzIG51bWJlciBvZiBieXRlcyB0
byBjb25zdW1lIGZyb20gJ2J1ZicKKyAgICAvLyAgICAnYnVmJyBwb2ludHMgdG8gdGhlIGJ5dGVz
IHRvIGJlIGNvbnN1bWVkIGZyb20gdGhlIGlucHV0IGJ1ZmZlcgorICAgIC8vICAgICdsZW4nIGlz
IG51bWJlciBvZiBieXRlcyBsZWZ0IGluIGlucHV0IGJ1ZmZlciBmcm9tIHBvc2l0aW9uICdidWYn
LgorICAgIC8vICAgIEF0IGVudHJhbmNlIG9mIHRoZSBmb3IgbG9vcCB3aWxsICdidWYnIHdpbGwg
YmUgbW92ZWQgJ21fYnl0ZXNUb0NvbnN1bWUnCisgICAgLy8gICAgdG8gcG9pbnQgdG8gbmV4dCBi
dWZmZXIsICdsZW4nIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgorICAgIC8vICAgIFNvIHRoYXQg
bmV4dCByb3VuZCBpbiBmb3IgbG9vcCwgcSBnZXRzIHBvaW50ZWQgdG8gdGhlIG5leHQgYnVmZmVy
LgorICAgIGZvciAoO2xlbiA+PSBtX2J5dGVzVG9Db25zdW1lOyBxID0gYnVmKSB7CisgICAgICAg
IC8vIEVhdCB0aGUgY3VycmVudCBibG9jayBmcm9tIHRoZSBidWZmZXIsIHEga2VlcHMgcG9pbnRl
ZCBhdCBjdXJyZW50IGJsb2NrLgorICAgICAgICBidWYgKz0gbV9ieXRlc1RvQ29uc3VtZTsKKyAg
ICAgICAgbGVuIC09IG1fYnl0ZXNUb0NvbnN1bWU7CisKKyAgICAgICAgc3dpdGNoIChtX3N0YXRl
KSB7CisgICAgICAgIGNhc2UgR0lGTFpXOgorICAgICAgICAgICAgaWYgKCFkb0xaVyhxKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIElmIGRvTFpXKCkgZW5jb3VudGVyZWQgYW4g
ZXJyb3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxlZCBtX2NsaWVudC0+c2V0RmFpbGVkKCkuCisgICAg
ICAgICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIGNhc2UgR0lGTFpXU3RhcnQ6IHsKKyAgICAgICAgICAgIC8vIEluaXRpYWxpemUgTFpXIHBh
cnNlci9kZWNvZGVyLgorICAgICAgICAgICAgaW50IGRhdGFzaXplID0gKnE7CisKKyAgICAgICAg
ICAgIC8vIFNpbmNlIHdlIHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6
ZSwgd2UgbmVlZCB0byBlbnN1cmUKKyAgICAgICAgICAgIC8vIHRoYXQgb3VyIGRhdGFzaXplIGlz
IHN0cmljdGx5IGxlc3MgdGhhbiB0aGUgTUFYX0xaV19CSVRTIHZhbHVlICgxMikuCisgICAgICAg
ICAgICAvLyBUaGlzIHNldHMgdGhlIGxhcmdlc3QgcG9zc2libGUgY29kZW1hc2sgY29ycmVjdGx5
IGF0IDQwOTUuCisgICAgICAgICAgICBpZiAoZGF0YXNpemUgPj0gTUFYX0xaV19CSVRTKQorICAg
ICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZh
bHNlOworICAgICAgICAgICAgaW50IGNsZWFyQ29kZSA9IDEgPDwgZGF0YXNpemU7CisgICAgICAg
ICAgICBpZiAoY2xlYXJDb2RlID49IE1BWF9CSVRTKQorICAgICAgICAgICAgICAgIHJldHVybiBt
X2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworCisgICAgICAgICAgICBp
ZiAobV9mcmFtZUNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGF0
YXNpemUgPSBkYXRhc2l6ZTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+Y2xlYXJD
b2RlID0gY2xlYXJDb2RlOworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5hdmFpbCA9
IG1fZnJhbWVDb250ZXh0LT5jbGVhckNvZGUgKyAyOworICAgICAgICAgICAgICAgIG1fZnJhbWVD
b250ZXh0LT5vbGRjb2RlID0gLTE7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmNv
ZGVzaXplID0gbV9mcmFtZUNvbnRleHQtPmRhdGFzaXplICsgMTsKKyAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+Y29kZW1hc2sgPSAoMSA8PCBtX2ZyYW1lQ29udGV4dC0+Y29kZXNpemUp
IC0gMTsKKyAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGF0dW0gPSBtX2ZyYW1lQ29u
dGV4dC0+Yml0cyA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBJbml0IHRoZSB0YWJsZXMuCisg
ICAgICAgICAgICAgICAgaWYgKCFtX2ZyYW1lQ29udGV4dC0+c3VmZml4KQorICAgICAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+c3VmZml4ID0gbmV3IHVuc2lnbmVkIGNoYXJbTUFYX0JJ
VFNdOworCisgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIHdob2xlIHN1ZmZpeCB0YWJs
ZSBsZXRzIHVzIGJlIG1vcmUgdG9sZXJhbnQgb2YgYmFkIGRhdGEuCisgICAgICAgICAgICAgICAg
bWVtc2V0KG1fZnJhbWVDb250ZXh0LT5zdWZmaXgsIDAsIE1BWF9CSVRTKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fZnJhbWVDb250ZXh0LT5jbGVhckNvZGU7IGkrKykK
KyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnN1ZmZpeFtpXSA9IGk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVDb250ZXh0LT5zdGFjaykKKyAgICAgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPnN0YWNrID0gbmV3IHVuc2lnbmVkIGNoYXJbTUFYX0JJVFNd
OworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5zdGFja3AgPSBtX2ZyYW1lQ29udGV4
dC0+c3RhY2s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxv
Y2spOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgIH0KLSAgICAgIG9sZGNv
ZGUgPSBpbmNvZGU7Ci0KLSAgICAgICAgLyogQ29weSB0aGUgZGVjb2RlZCBkYXRhIG91dCB0byB0
aGUgc2NhbmxpbmUgYnVmZmVyLiAqLwotICAgICAgZG8gewotICAgICAgICAqcm93cCsrID0gKi0t
c3RhY2twOwotICAgICAgICBpZiAocm93cCA9PSByb3dlbmQpIHsKLSAgICAgICAgICBPVVRQVVRf
Uk9XOworCisgICAgICAgIGNhc2UgR0lGVHlwZTogeworICAgICAgICAgICAgLy8gQWxsIEdJRiBm
aWxlcyBiZWdpbiB3aXRoICJHSUY4N2EiIG9yICJHSUY4OWEiLgorICAgICAgICAgICAgaWYgKCFz
dHJuY21wKChjaGFyKilxLCAiR0lGODlhIiwgNikpCisgICAgICAgICAgICAgICAgbV92ZXJzaW9u
ID0gODk7CisgICAgICAgICAgICBlbHNlIGlmICghc3RybmNtcCgoY2hhciopcSwgIkdJRjg3YSIs
IDYpKQorICAgICAgICAgICAgICAgIG1fdmVyc2lvbiA9IDg3OworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6
IGZhbHNlOworICAgICAgICAgICAgR0VUTig3LCBHSUZHbG9iYWxIZWFkZXIpOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgIH0gd2hpbGUgKHN0YWNrcCA+IHN0YWNrKTsKLSAg
ICB9Ci0gIH0KLQotICBFTkQ6Ci0KLSAgLyogSG9tZSB0aGUgbG9jYWwgY29waWVzIG9mIHRoZSBH
SUYgZGVjb2RlciBzdGF0ZSB2YXJpYWJsZXMgKi8KLSAgZ3MtPmF2YWlsID0gYXZhaWw7Ci0gIGdz
LT5iaXRzID0gYml0czsKLSAgZ3MtPmNvZGVzaXplID0gY29kZXNpemU7Ci0gIGdzLT5jb2RlbWFz
ayA9IGNvZGVtYXNrOwotICBjb3VudCA9IGNudDsKLSAgZ3MtPm9sZGNvZGUgPSBvbGRjb2RlOwot
ICBncy0+Zmlyc3RjaGFyID0gZmlyc3RjaGFyOwotICBncy0+ZGF0dW0gPSBkYXR1bTsKLSAgZ3Mt
PnN0YWNrcCA9IHN0YWNrcDsKLSAgZ3MtPnJvd3AgPSByb3dwOwotICBncy0+cm93c19yZW1haW5p
bmcgPSByb3dzX3JlbWFpbmluZzsKLQotICByZXR1cm4gdHJ1ZTsKLX0KIAorICAgICAgICBjYXNl
IEdJRkdsb2JhbEhlYWRlcjogeworICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgaGVpZ2h0IGFu
ZCB3aWR0aCBvZiB0aGUgInNjcmVlbiIgb3IgZnJhbWUgaW50byB3aGljaCBpbWFnZXMgYXJlIHJl
bmRlcmVkLiBUaGUKKyAgICAgICAgICAgIC8vIGluZGl2aWR1YWwgaW1hZ2VzIGNhbiBiZSBzbWFs
bGVyIHRoYW4gdGhlIHNjcmVlbiBzaXplIGFuZCBsb2NhdGVkIHdpdGggYW4gb3JpZ2luIGFueXdo
ZXJlCisgICAgICAgICAgICAvLyB3aXRoaW4gdGhlIHNjcmVlbi4KKyAgICAgICAgICAgIG1fc2Ny
ZWVuV2lkdGggPSBHRVRJTlQxNihxKTsKKyAgICAgICAgICAgIG1fc2NyZWVuSGVpZ2h0ID0gR0VU
SU5UMTYocSArIDIpOworCisgICAgICAgICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNv
ZGVycGx1Z2luIG9mIG91ciBzaXplLgorICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2Ns
aWVudC0+c2V0U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBtX3NjcmVlbkJnY29sb3IgPSBxWzVd
OworICAgICAgICAgICAgbV9nbG9iYWxDb2xvcm1hcFNpemUgPSAyIDw8IChxWzRdICYgMHgwNyk7
CisKKyAgICAgICAgICAgIGlmICgocVs0XSAmIDB4ODApICYmIG1fZ2xvYmFsQ29sb3JtYXBTaXpl
ID4gMCkgeyAvKiBnbG9iYWwgbWFwICovCisgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBnbG9i
YWwgY29sb3JtYXAKKyAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gMyptX2ds
b2JhbENvbG9ybWFwU2l6ZTsKKworICAgICAgICAgICAgICAgIC8vIE1hbGxvYyB0aGUgY29sb3Ig
bWFwLCBidXQgb25seSBpZiB3ZSdyZSBub3QganVzdCBjb3VudGluZyBmcmFtZXMuCisgICAgICAg
ICAgICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5
KQorICAgICAgICAgICAgICAgICAgICBtX2dsb2JhbENvbG9ybWFwID0gbmV3IHVuc2lnbmVkIGNo
YXJbc2l6ZV07CisKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgc2l6ZSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBnbG9iYWwgY29sb3Jt
YXAKKyAgICAgICAgICAgICAgICAgICAgR0VUTihzaXplLCBHSUZHbG9iYWxDb2xvcm1hcCk7Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIC8vIENvcHkgZXZlcnl0aGluZyBhbmQgZ28gZGlyZWN0bHkgdG8gR0lGSW1hZ2Vfc3Rh
cnQuCisgICAgICAgICAgICAgICAgaWYgKG1fZ2xvYmFsQ29sb3JtYXApCisgICAgICAgICAgICAg
ICAgICAgIG1lbWNweShtX2dsb2JhbENvbG9ybWFwLCBidWYsIHNpemUpOworICAgICAgICAgICAg
ICAgIGJ1ZiArPSBzaXplOworICAgICAgICAgICAgICAgIGxlbiAtPSBzaXplOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOworCisgICAgICAgICAg
ICAvLyBxWzZdID0gUGl4ZWwgQXNwZWN0IFJhdGlvCisgICAgICAgICAgICAvLyAgIE5vdCB1c2Vk
CisgICAgICAgICAgICAvLyAgIGZsb2F0IGFzcGVjdCA9IChmbG9hdCkoKHFbNl0gKyAxNSkgLyA2
NC4wKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKLS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCi0vKgotICogcHJvY2VzcyBkYXRhIGFycml2aW5nIGZyb20gdGhlIHN0cmVhbSBmb3Ig
dGhlIGdpZiBkZWNvZGVyCi0gKi8KKyAgICAgICAgY2FzZSBHSUZHbG9iYWxDb2xvcm1hcDogewor
ICAgICAgICAgICAgLy8gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGNvcGllZCBpbnRvIG1fZ2xvYmFs
Q29sb3JtYXAKKyAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQogCi1ib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVu
c2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCAKLSAgICAgICAgICAgICAgICAgICAgIEdJ
RkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKQotewot
ICBpZiAoIWxlbikgewotICAgIC8vIE5vIG5ldyBkYXRhIGhhcyBjb21lIGluIHNpbmNlIHRoZSBs
YXN0IGNhbGwsIGp1c3QgaWdub3JlIHRoaXMgY2FsbC4KLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQot
Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEgPSBidWY7Ci0KLSAgLy8gQWRkIHdoYXQgd2UgaGF2
ZSBzbyBmYXIgdG8gdGhlIGJsb2NrCi0gIC8vIElmIHByZXZpb3VzIGNhbGwgdG8gbWUgbGVmdCBz
b21ldGhpbmcgaW4gdGhlIGhvbGQgZmlyc3QgY29tcGxldGUgY3VycmVudCBibG9jawotICAvLyBP
ciBpZiB3ZSBhcmUgZmlsbGluZyB0aGUgY29sb3JtYXBzLCBmaXJzdCBjb21wbGV0ZSB0aGUgY29s
b3JtYXAKLSAgdW5zaWduZWQgY2hhciogcCA9IDA7Ci0gIGlmIChzdGF0ZSA9PSBnaWZfZ2xvYmFs
X2NvbG9ybWFwKQotICAgIHAgPSBnbG9iYWxfY29sb3JtYXA7Ci0gIGVsc2UgaWYgKHN0YXRlID09
IGdpZl9pbWFnZV9jb2xvcm1hcCkKLSAgICBwID0gZnJhbWVfcmVhZGVyID8gZnJhbWVfcmVhZGVy
LT5sb2NhbF9jb2xvcm1hcCA6IDA7Ci0gIGVsc2UgaWYgKGJ5dGVzX2luX2hvbGQpCi0gICAgcCA9
IGhvbGQ7Ci0gIGVsc2UKLSAgICBwID0gMDsKLQotICBpZiAocCB8fCAoc3RhdGUgPT0gZ2lmX2ds
b2JhbF9jb2xvcm1hcCkgfHwgKHN0YXRlID09IGdpZl9pbWFnZV9jb2xvcm1hcCkpIHsKLSAgICAv
LyBBZGQgd2hhdCB3ZSBoYXZlIHNvZmFyIHRvIHRoZSBibG9jawotICAgIHVuc2lnbmVkIGwgPSBs
ZW4gPCBieXRlc190b19jb25zdW1lID8gbGVuIDogYnl0ZXNfdG9fY29uc3VtZTsKLSAgICBpZiAo
cCkKLSAgICAgICAgbWVtY3B5KHAgKyBieXRlc19pbl9ob2xkLCBidWYsIGwpOwotCi0gICAgaWYg
KGwgPCBieXRlc190b19jb25zdW1lKSB7Ci0gICAgICAvLyBOb3QgZW5vdWdoIGluICdidWYnIHRv
IGNvbXBsZXRlIGN1cnJlbnQgYmxvY2ssIGdldCBtb3JlCi0gICAgICBieXRlc19pbl9ob2xkICs9
IGw7Ci0gICAgICBieXRlc190b19jb25zdW1lIC09IGw7Ci0gICAgICBpZiAoY2xpZW50cHRyKQot
ICAgICAgICBjbGllbnRwdHItPmRlY29kaW5nSGFsdGVkKDApOwotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAvLyBSZXNldCBob2xkIGJ1ZmZlciBjb3VudAotICAgIGJ5dGVzX2luX2hv
bGQgPSAwOwotICAgIC8vIFBvaW50ICdxJyB0byBjb21wbGV0ZSBibG9jayBpbiBob2xkIChvciBp
biBjb2xvcm1hcCkKLSAgICBxID0gcDsKLSAgfQotCi0gIC8vIEludmFyaWFudDoKLSAgLy8gICAg
J3EnIGlzIHN0YXJ0IG9mIGN1cnJlbnQgdG8gYmUgcHJvY2Vzc2VkIGJsb2NrIChob2xkLCBjb2xv
cm1hcCBvciBidWYpCi0gIC8vICAgICdieXRlc190b19jb25zdW1lJyBpcyBudW1iZXIgb2YgYnl0
ZXMgdG8gY29uc3VtZSBmcm9tICdidWYnCi0gIC8vICAgICdidWYnIHBvaW50cyB0byB0aGUgYnl0
ZXMgdG8gYmUgY29uc3VtZWQgZnJvbSB0aGUgaW5wdXQgYnVmZmVyCi0gIC8vICAgICdsZW4nIGlz
IG51bWJlciBvZiBieXRlcyBsZWZ0IGluIGlucHV0IGJ1ZmZlciBmcm9tIHBvc2l0aW9uICdidWYn
LgotICAvLyAgICBBdCBlbnRyYW5jZSBvZiB0aGUgZm9yIGxvb3Agd2lsbCAnYnVmJyB3aWxsIGJl
IG1vdmVkICdieXRlc190b19jb25zdW1lJwotICAvLyAgICB0byBwb2ludCB0byBuZXh0IGJ1ZmZl
ciwgJ2xlbicgaXMgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuCi0gIC8vICAgIFNvIHRoYXQgbmV4dCBy
b3VuZCBpbiBmb3IgbG9vcCwgcSBnZXRzIHBvaW50ZWQgdG8gdGhlIG5leHQgYnVmZmVyLgotCi0g
IGZvciAoO2xlbiA+PSBieXRlc190b19jb25zdW1lOyBxPWJ1ZikgewotICAgIC8vIEVhdCB0aGUg
Y3VycmVudCBibG9jayBmcm9tIHRoZSBidWZmZXIsIHEga2VlcHMgcG9pbnRlZCBhdCBjdXJyZW50
IGJsb2NrCi0gICAgYnVmICs9IGJ5dGVzX3RvX2NvbnN1bWU7Ci0gICAgbGVuIC09IGJ5dGVzX3Rv
X2NvbnN1bWU7Ci0KLSAgICBzd2l0Y2ggKHN0YXRlKQotICAgIHsKLSAgICBjYXNlIGdpZl9senc6
Ci0gICAgICBpZiAoIWRvX2x6dyhxKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiBkb19s
encoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQgaGFzIGFscmVhZHkgY2FsbGVkCi0gICAgICAg
ICAgICAgICAgICAgICAgLy8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKS4KLSAgICAgIEdFVE4oMSwg
Z2lmX3N1Yl9ibG9jayk7Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgZ2lmX2x6d19zdGFydDoK
LSAgICB7Ci0gICAgICAvKiBJbml0aWFsaXplIExaVyBwYXJzZXIvZGVjb2RlciAqLwotICAgICAg
aW50IGRhdGFzaXplID0gKnE7Ci0gICAgICAvLyBTaW5jZSB3ZSB1c2UgYSBjb2Rlc2l6ZSBvZiAx
IG1vcmUgdGhhbiB0aGUgZGF0YXNpemUsIHdlIG5lZWQgdG8gZW5zdXJlCi0gICAgICAvLyB0aGF0
IG91ciBkYXRhc2l6ZSBpcyBzdHJpY3RseSBsZXNzIHRoYW4gdGhlIE1BWF9MWldfQklUUyB2YWx1
ZSAoMTIpLgotICAgICAgLy8gVGhpcyBzZXRzIHRoZSBsYXJnZXN0IHBvc3NpYmxlIGNvZGVtYXNr
IGNvcnJlY3RseSBhdCA0MDk1LgotICAgICAgaWYgKGRhdGFzaXplID49IE1BWF9MWldfQklUUykK
LSAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKLSAgICAgIGludCBjbGVhcl9jb2RlID0gMSA8PCBkYXRhc2l6ZTsKLSAgICAgIGlmIChjbGVh
cl9jb2RlID49IE1BWF9CSVRTKQotICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRy
LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotCi0gICAgICBpZiAoZnJhbWVfcmVhZGVyKSB7Ci0gICAg
ICAgIGZyYW1lX3JlYWRlci0+ZGF0YXNpemUgPSBkYXRhc2l6ZTsKLSAgICAgICAgZnJhbWVfcmVh
ZGVyLT5jbGVhcl9jb2RlID0gY2xlYXJfY29kZTsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5hdmFp
bCA9IGZyYW1lX3JlYWRlci0+Y2xlYXJfY29kZSArIDI7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+
b2xkY29kZSA9IC0xOwotICAgICAgICBmcmFtZV9yZWFkZXItPmNvZGVzaXplID0gZnJhbWVfcmVh
ZGVyLT5kYXRhc2l6ZSArIDE7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+Y29kZW1hc2sgPSAoMSA8
PCBmcmFtZV9yZWFkZXItPmNvZGVzaXplKSAtIDE7Ci0KLSAgICAgICAgZnJhbWVfcmVhZGVyLT5k
YXR1bSA9IGZyYW1lX3JlYWRlci0+Yml0cyA9IDA7Ci0KLSAgICAgICAgLyogaW5pdCB0aGUgdGFi
bGVzICovCi0gICAgICAgIGlmICghZnJhbWVfcmVhZGVyLT5zdWZmaXgpCi0gICAgICAgICAgZnJh
bWVfcmVhZGVyLT5zdWZmaXggPSBuZXcgdW5zaWduZWQgY2hhcltNQVhfQklUU107Ci0gICAgICAg
IC8vIENsZWFyaW5nIHRoZSB3aG9sZSBzdWZmaXggdGFibGUgbGV0cyB1cyBiZSBtb3JlIHRvbGVy
YW50IG9mIGJhZCBkYXRhLgotICAgICAgICBtZW1zZXQoZnJhbWVfcmVhZGVyLT5zdWZmaXgsIDAs
IE1BWF9CSVRTKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZV9yZWFkZXItPmNs
ZWFyX2NvZGU7IGkrKykKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPnN1ZmZpeFtpXSA9IGk7Ci0K
LSAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXItPnN0YWNrKQotICAgICAgICAgIGZyYW1lX3JlYWRl
ci0+c3RhY2sgPSBuZXcgdW5zaWduZWQgY2hhcltNQVhfQklUU107Ci0gICAgICAgIGZyYW1lX3Jl
YWRlci0+c3RhY2twID0gZnJhbWVfcmVhZGVyLT5zdGFjazsKLSAgICAgIH0KLQotICAgICAgR0VU
TigxLCBnaWZfc3ViX2Jsb2NrKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICAvKiBBbGwgR0lG
IGZpbGVzIGJlZ2luIHdpdGggIkdJRjg3YSIgb3IgIkdJRjg5YSIgKi8KLSAgICBjYXNlIGdpZl90
eXBlOgotICAgIHsKLSAgICAgIGlmICghc3RybmNtcCgoY2hhciopcSwgIkdJRjg5YSIsIDYpKQot
ICAgICAgICB2ZXJzaW9uID0gODk7Ci0gICAgICBlbHNlIGlmICghc3RybmNtcCgoY2hhciopcSwg
IkdJRjg3YSIsIDYpKQotICAgICAgICB2ZXJzaW9uID0gODc7Ci0gICAgICBlbHNlCi0gICAgICAg
IHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAg
ICBHRVROKDcsIGdpZl9nbG9iYWxfaGVhZGVyKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBj
YXNlIGdpZl9nbG9iYWxfaGVhZGVyOgotICAgIHsKLSAgICAgIC8qIFRoaXMgaXMgdGhlIGhlaWdo
dCBhbmQgd2lkdGggb2YgdGhlICJzY3JlZW4iIG9yCi0gICAgICAgKiBmcmFtZSBpbnRvIHdoaWNo
IGltYWdlcyBhcmUgcmVuZGVyZWQuICBUaGUKLSAgICAgICAqIGluZGl2aWR1YWwgaW1hZ2VzIGNh
biBiZSBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAgKiBzY3JlZW4gc2l6ZSBhbmQgbG9jYXRlZCB3
aXRoIGFuIG9yaWdpbiBhbnl3aGVyZQotICAgICAgICogd2l0aGluIHRoZSBzY3JlZW4uCi0gICAg
ICAgKi8KLQotICAgICAgc2NyZWVuX3dpZHRoID0gR0VUSU5UMTYocSk7Ci0gICAgICBzY3JlZW5f
aGVpZ2h0ID0gR0VUSU5UMTYocSArIDIpOwotCi0gICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRo
ZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgotICAgICAgaWYgKGNsaWVudHB0ciAmJiAhY2xp
ZW50cHRyLT5zZXRTaXplKHNjcmVlbl93aWR0aCwgc2NyZWVuX2hlaWdodCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgIAotICAgICAgc2NyZWVuX2JnY29sb3IgPSBxWzVdOwotICAgICAg
Z2xvYmFsX2NvbG9ybWFwX3NpemUgPSAyPDwocVs0XSYweDA3KTsKLQotICAgICAgaWYgKChxWzRd
ICYgMHg4MCkgJiYgZ2xvYmFsX2NvbG9ybWFwX3NpemUgPiAwKSB7IC8qIGdsb2JhbCBtYXAgKi8K
LSAgICAgICAgLy8gR2V0IHRoZSBnbG9iYWwgY29sb3JtYXAKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2l6ZSA9IDMqZ2xvYmFsX2NvbG9ybWFwX3NpemU7Ci0gICAgICAgIAotICAgICAgICAvLyBN
YWxsb2MgdGhlIGNvbG9yIG1hcCwgYnV0IG9ubHkgaWYgd2UncmUgbm90IGp1c3QgY291bnRpbmcg
ZnJhbWVzLgotICAgICAgICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNv
dW50UXVlcnkpCi0gICAgICAgICAgZ2xvYmFsX2NvbG9ybWFwID0gbmV3IHVuc2lnbmVkIGNoYXJb
c2l6ZV07Ci0KLSAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAvLyBVc2UgJ2hv
bGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBnbG9iYWwgY29sb3JtYXAKLSAgICAgICAgICBHRVROKHNp
emUsIGdpZl9nbG9iYWxfY29sb3JtYXApOwotICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdJRkltYWdlU3RhcnQ6IHsKKyAgICAgICAgICAgIGlmICgqcSA9PSAnOycpIHsgLy8gdGVybWlu
YXRvci4KKyAgICAgICAgICAgICAgICBHRVROKDAsIEdJRkRvbmUpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKnEgPT0gJyEnKSB7IC8v
IGV4dGVuc2lvbi4KKyAgICAgICAgICAgICAgICBHRVROKDIsIEdJRkV4dGVuc2lvbik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIHdl
IGdldCBhbnl0aGluZyBvdGhlciB0aGFuICcsJyAoaW1hZ2Ugc2VwYXJhdG9yKSwgJyEnCisgICAg
ICAgICAgICAvLyAoZXh0ZW5zaW9uKSwgb3IgJzsnICh0cmFpbGVyKSwgdGhlcmUgaXMgZXh0cmFu
ZW91cyBkYXRhCisgICAgICAgICAgICAvLyBiZXR3ZWVuIGJsb2Nrcy4gVGhlIEdJRjg3YSBzcGVj
IHRlbGxzIHVzIHRvIGtlZXAgcmVhZGluZworICAgICAgICAgICAgLy8gdW50aWwgd2UgZmluZCBh
biBpbWFnZSBzZXBhcmF0b3IsIGJ1dCBHSUY4OWEgc2F5cyBzdWNoCisgICAgICAgICAgICAvLyBh
IGZpbGUgaXMgY29ycnVwdC4gV2UgZm9sbG93IEdJRjg5YSBhbmQgYmFpbCBvdXQuCisgICAgICAg
ICAgICBpZiAoKnEgIT0gJywnKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1f
Y2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworCisgICAgICAgICAgICBHRVROKDksIEdJRklt
YWdlSGVhZGVyKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGdvIGRpcmVjdGx5IHRvIGdpZl9pbWFnZV9zdGFy
dC4KLSAgICAgICAgaWYgKGdsb2JhbF9jb2xvcm1hcCkKLSAgICAgICAgICAgIG1lbWNweShnbG9i
YWxfY29sb3JtYXAsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgIGJ1ZiArPSBzaXplOwotICAgICAgICBs
ZW4gLT0gc2l6ZTsKLSAgICAgIH0KLQotICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQpOwot
Ci0gICAgICAvLyBxWzZdID0gUGl4ZWwgQXNwZWN0IFJhdGlvCi0gICAgICAvLyAgIE5vdCB1c2Vk
Ci0gICAgICAvLyAgIGZsb2F0IGFzcGVjdCA9IChmbG9hdCkoKHFbNl0gKyAxNSkgLyA2NC4wKTsK
LSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9nbG9iYWxfY29sb3JtYXA6Ci0gICAg
ICAvLyBFdmVyeXRoaW5nIGlzIGFscmVhZHkgY29waWVkIGludG8gZ2xvYmFsX2NvbG9ybWFwCi0g
ICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdp
Zl9pbWFnZV9zdGFydDoKLSAgICB7Ci0gICAgICBpZiAoKnEgPT0gJzsnKSB7IC8qIHRlcm1pbmF0
b3IgKi8KLSAgICAgICAgR0VUTigwLCBnaWZfZG9uZSk7Ci0gICAgICAgIGJyZWFrOwotICAgICAg
fQotCi0gICAgICBpZiAoKnEgPT0gJyEnKSB7IC8qIGV4dGVuc2lvbiAqLwotICAgICAgICBHRVRO
KDIsIGdpZl9leHRlbnNpb24pOwotICAgICAgICBicmVhazsKLSAgICAgIH0KLQotICAgICAgLyog
SWYgd2UgZ2V0IGFueXRoaW5nIG90aGVyIHRoYW4gJywnIChpbWFnZSBzZXBhcmF0b3IpLCAnIScK
LSAgICAgICAqIChleHRlbnNpb24pLCBvciAnOycgKHRyYWlsZXIpLCB0aGVyZSBpcyBleHRyYW5l
b3VzIGRhdGEKLSAgICAgICAqIGJldHdlZW4gYmxvY2tzLiBUaGUgR0lGODdhIHNwZWMgdGVsbHMg
dXMgdG8ga2VlcCByZWFkaW5nCi0gICAgICAgKiB1bnRpbCB3ZSBmaW5kIGFuIGltYWdlIHNlcGFy
YXRvciwgYnV0IEdJRjg5YSBzYXlzIHN1Y2gKLSAgICAgICAqIGEgZmlsZSBpcyBjb3JydXB0LiBX
ZSBmb2xsb3cgR0lGODlhIGFuZCBiYWlsIG91dC4gKi8KLSAgICAgIGlmICgqcSAhPSAnLCcpCi0g
ICAgICAgIHJldHVybiBjbGllbnRwdHIgPyBjbGllbnRwdHItPnNldEZhaWxlZCgpIDogZmFsc2U7
Ci0KLSAgICAgIEdFVE4oOSwgZ2lmX2ltYWdlX2hlYWRlcik7Ci0gICAgfQotICAgIGJyZWFrOwot
Ci0gICAgY2FzZSBnaWZfZXh0ZW5zaW9uOgotICAgIHsKLSAgICAgIGNvdW50ID0gcVsxXTsKLSAg
ICAgIGdzdGF0ZSBlcyA9IGdpZl9za2lwX2Jsb2NrOwotCi0gICAgICAvLyBUaGUgR0lGIHNwZWMg
bWFuZGF0ZXMgbGVuZ3RocyBmb3IgdGhyZWUgb2YgdGhlIGV4dGVuc2lvbnMgYmVsb3cuCi0gICAg
ICAvLyBIb3dldmVyLCBpdCdzIHBvc3NpYmxlIGZvciBHSUZzIGluIHRoZSB3aWxkIHRvIGRldmlh
dGUuIEZvciBleGFtcGxlLAotICAgICAgLy8gc29tZSBHSUZzIHRoYXQgZW1iZWQgSUNDIGNvbG9y
IHByb2ZpbGVzIHVzaW5nIGdpZl9hcHBsaWNhdGlvbl9leHRlbnNpb24KLSAgICAgIC8vIHZpb2xh
dGUgdGhlIHNwZWMgYW5kIHRyZWF0IHRoaXMgZXh0ZW5zaW9uIGJsb2NrIGxpa2UgYSBzb3J0IG9m
Ci0gICAgICAvLyAiZXh0ZW5zaW9uICsgZGF0YSIgYmxvY2ssIGdpdmluZyBhIHNpemUgZ3JlYXRl
ciB0aGFuIDExIGFuZCBmaWxsaW5nIHRoZQotICAgICAgLy8gcmVtYWluaW5nIGJ5dGVzIHdpdGgg
ZGF0YSAodGhlbiBmb2xsb3dpbmcgd2l0aCBtb3JlIGRhdGEgYmxvY2tzIGFzCi0gICAgICAvLyBu
ZWVkZWQpLCBpbnN0ZWFkIG9mIHBsYWNpbmcgYSB0cnVlIGRhdGEgYmxvY2sganVzdCBhZnRlciB0
aGUgMTEgYnl0ZQotICAgICAgLy8gZXh0ZW5zaW9uIGJsb2NrLgotICAgICAgLy8KLSAgICAgIC8v
IEFjY29yZGluZ2x5LCBpZiB0aGUgc3BlY2lmaWVkIGxlbmd0aCBpcyBsYXJnZXIgdGhhbiB0aGUg
cmVxdWlyZWQgdmFsdWUsCi0gICAgICAvLyB3ZSB1c2UgaXQuIElmIGl0J3Mgc21hbGxlciwgdGhl
biB3ZSBlbmZvcmNlIHRoZSBzcGVjIHZhbHVlLCBiZWNhdXNlIHRoZQotICAgICAgLy8gcGFyc2Vy
cyBmb3IgdGhlc2UgZXh0ZW5zaW9ucyBleHBlY3QgdG8gaGF2ZSB0aGUgc3BlY2lmaWVkIG51bWJl
ciBvZgotICAgICAgLy8gYnl0ZXMgYXZhaWxhYmxlLCBhbmQgaWYgd2UgZG9uJ3QgZW5zdXJlIHRo
YXQsIHRoZXkgY291bGQgcmVhZCBvZmYgdGhlCi0gICAgICAvLyBlbmQgb2YgdGhlIGhlYXAgYnVm
ZmVyLiAoSW4gdGhpcyBjYXNlLCBpdCdzIGxpa2VseSB0aGUgR0lGIGlzIGNvcnJ1cHQKLSAgICAg
IC8vIGFuZCB3ZSdsbCBzb29uIGZhaWwgdG8gZGVjb2RlIGFueXdheS4pCi0gICAgICBzd2l0Y2gg
KCpxKQotICAgICAgewotICAgICAgY2FzZSAweGY5OgotICAgICAgICBlcyA9IGdpZl9jb250cm9s
X2V4dGVuc2lvbjsKLSAgICAgICAgY291bnQgPSBzdGQ6Om1heChjb3VudCwgNCk7Ci0gICAgICAg
IGJyZWFrOwotCi0gICAgICBjYXNlIDB4MDE6Ci0gICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRl
eHQgZXh0ZW5zaW9uCi0gICAgICAgIGNvdW50ID0gc3RkOjptYXgoY291bnQsIDEyKTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgMHhmZjoKLSAgICAgICAgZXMgPSBnaWZfYXBwbGljYXRp
b25fZXh0ZW5zaW9uOwotICAgICAgICBjb3VudCA9IHN0ZDo6bWF4KGNvdW50LCAxMSk7Ci0gICAg
ICAgIGJyZWFrOwotCi0gICAgICBjYXNlIDB4ZmU6Ci0gICAgICAgIGVzID0gZ2lmX2NvbnN1bWVf
Y29tbWVudDsKLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGlmIChjb3VudCkKLSAg
ICAgICAgR0VUTihjb3VudCwgZXMpOwotICAgICAgZWxzZQotICAgICAgICBHRVROKDEsIGdpZl9p
bWFnZV9zdGFydCk7Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfY29uc3VtZV9i
bG9jazoKLSAgICAgIGlmICghKnEpCi0gICAgICAgIEdFVE4oMSwgZ2lmX2ltYWdlX3N0YXJ0KTsK
LSAgICAgIGVsc2UKLSAgICAgICAgR0VUTigqcSwgZ2lmX3NraXBfYmxvY2spOwotICAgIGJyZWFr
OwotCi0gICAgY2FzZSBnaWZfc2tpcF9ibG9jazoKLSAgICAgIEdFVE4oMSwgZ2lmX2NvbnN1bWVf
YmxvY2spOwotICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9jb250cm9sX2V4dGVuc2lvbjoK
LSAgICB7Ci0gICAgICBpZiAocXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50
UXVlcnkpIHsKLSAgICAgICAgICBpZiAoIWZyYW1lX3JlYWRlcikKLSAgICAgICAgICAgIGZyYW1l
X3JlYWRlciA9IG5ldyBHSUZGcmFtZVJlYWRlcigpOwotICAgICAgfQotCi0gICAgICBpZiAoZnJh
bWVfcmVhZGVyKSB7Ci0gICAgICAgIGlmICgqcSAmIDB4MSkgewotICAgICAgICAgIGZyYW1lX3Jl
YWRlci0+dHBpeGVsID0gcVszXTsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlzX3RyYW5zcGFy
ZW50ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlz
X3RyYW5zcGFyZW50ID0gZmFsc2U7Ci0gICAgICAgICAgLy8gaWdub3JpbmcgZ2Z4IGNvbnRyb2wg
ZXh0ZW5zaW9uCisKKyAgICAgICAgY2FzZSBHSUZFeHRlbnNpb246IHsKKyAgICAgICAgICAgIG1f
Y291bnQgPSBxWzFdOworICAgICAgICAgICAgR0lGU3RhdGUgZXMgPSBHSUZTa2lwQmxvY2s7CisK
KyAgICAgICAgICAgIC8vIFRoZSBHSUYgc3BlYyBtYW5kYXRlcyBsZW5ndGhzIGZvciB0aHJlZSBv
ZiB0aGUgZXh0ZW5zaW9ucyBiZWxvdy4KKyAgICAgICAgICAgIC8vIEhvd2V2ZXIsIGl0J3MgcG9z
c2libGUgZm9yIEdJRnMgaW4gdGhlIHdpbGQgdG8gZGV2aWF0ZS4gRm9yIGV4YW1wbGUsCisgICAg
ICAgICAgICAvLyBzb21lIEdJRnMgdGhhdCBlbWJlZCBJQ0MgY29sb3IgcHJvZmlsZXMgdXNpbmcg
R0lGQXBwbGljYXRpb25FeHRlbnNpb24KKyAgICAgICAgICAgIC8vIHZpb2xhdGUgdGhlIHNwZWMg
YW5kIHRyZWF0IHRoaXMgZXh0ZW5zaW9uIGJsb2NrIGxpa2UgYSBzb3J0IG9mCisgICAgICAgICAg
ICAvLyAiZXh0ZW5zaW9uICsgZGF0YSIgYmxvY2ssIGdpdmluZyBhIHNpemUgZ3JlYXRlciB0aGFu
IDExIGFuZCBmaWxsaW5nIHRoZQorICAgICAgICAgICAgLy8gcmVtYWluaW5nIGJ5dGVzIHdpdGgg
ZGF0YSAodGhlbiBmb2xsb3dpbmcgd2l0aCBtb3JlIGRhdGEgYmxvY2tzIGFzCisgICAgICAgICAg
ICAvLyBuZWVkZWQpLCBpbnN0ZWFkIG9mIHBsYWNpbmcgYSB0cnVlIGRhdGEgYmxvY2sganVzdCBh
ZnRlciB0aGUgMTEgYnl0ZQorICAgICAgICAgICAgLy8gZXh0ZW5zaW9uIGJsb2NrLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIEFjY29yZGluZ2x5LCBpZiB0aGUgc3BlY2lmaWVkIGxl
bmd0aCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVxdWlyZWQgdmFsdWUsCisgICAgICAgICAgICAvLyB3
ZSB1c2UgaXQuIElmIGl0J3Mgc21hbGxlciwgdGhlbiB3ZSBlbmZvcmNlIHRoZSBzcGVjIHZhbHVl
LCBiZWNhdXNlIHRoZQorICAgICAgICAgICAgLy8gcGFyc2VycyBmb3IgdGhlc2UgZXh0ZW5zaW9u
cyBleHBlY3QgdG8gaGF2ZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZgorICAgICAgICAgICAgLy8g
Ynl0ZXMgYXZhaWxhYmxlLCBhbmQgaWYgd2UgZG9uJ3QgZW5zdXJlIHRoYXQsIHRoZXkgY291bGQg
cmVhZCBvZmYgdGhlCisgICAgICAgICAgICAvLyBlbmQgb2YgdGhlIGhlYXAgYnVmZmVyLiAoSW4g
dGhpcyBjYXNlLCBpdCdzIGxpa2VseSB0aGUgR0lGIGlzIGNvcnJ1cHQKKyAgICAgICAgICAgIC8v
IGFuZCB3ZSdsbCBzb29uIGZhaWwgdG8gZGVjb2RlIGFueXdheS4pCisgICAgICAgICAgICBzd2l0
Y2ggKCpxKSB7CisgICAgICAgICAgICBjYXNlIDB4Zjk6CisgICAgICAgICAgICAgICAgZXMgPSBH
SUZDb250cm9sRXh0ZW5zaW9uOworICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1heCht
X2NvdW50LCA0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAw
eDAxOgorICAgICAgICAgICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRleHQgZXh0ZW5zaW9uCisg
ICAgICAgICAgICAgICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1fY291bnQsIDEyKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAweGZmOgorICAgICAgICAgICAgICAg
IGVzID0gR0lGQXBwbGljYXRpb25FeHRlbnNpb247CisgICAgICAgICAgICAgICAgbV9jb3VudCA9
IHN0ZDo6bWF4KG1fY291bnQsIDExKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgICAgY2FzZSAweGZlOgorICAgICAgICAgICAgICAgIGVzID0gR0lGQ29uc3VtZUNvbW1lbnQ7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChtX2NvdW50KQorICAgICAgICAgICAgICAgIEdFVE4obV9jb3VudCwgZXMpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CisgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAvLyBOT1RFOiBUaGlzIHJlbGllcyBvbiB0
aGUgdmFsdWVzIGluIHRoZSBGcmFtZURpc3Bvc2FsTWV0aG9kIGVudW0KLSAgICAgICAgLy8gbWF0
Y2hpbmcgdGhvc2UgaW4gdGhlIEdJRiBzcGVjIQotICAgICAgICBpbnQgZGlzcG9zYWxfbWV0aG9k
ID0gKCgqcSkgPj4gMikgJiAweDc7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+ZGlzcG9zYWxfbWV0
aG9kID0gKFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QpZGlzcG9zYWxf
bWV0aG9kOwotICAgICAgICAvLyBTb21lIHNwZWNzIHNheSAzcmQgYml0ICh2YWx1ZSA0KSwgb3Ro
ZXIgc3BlY3Mgc2F5IHZhbHVlIDMKLSAgICAgICAgLy8gTGV0J3MgY2hvb3NlIDMgKHRoZSBtb3Jl
IHBvcHVsYXIpCi0gICAgICAgIGlmIChkaXNwb3NhbF9tZXRob2QgPT0gNCkKLSAgICAgICAgICBm
cmFtZV9yZWFkZXItPmRpc3Bvc2FsX21ldGhvZCA9IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bv
c2VPdmVyd3JpdGVQcmV2aW91czsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5kZWxheV90aW1lID0g
R0VUSU5UMTYocSArIDEpICogMTA7Ci0gICAgICB9Ci0gICAgICBHRVROKDEsIGdpZl9jb25zdW1l
X2Jsb2NrKTsKLSAgICB9Ci0gICAgYnJlYWs7Ci0KLSAgICBjYXNlIGdpZl9jb21tZW50X2V4dGVu
c2lvbjoKLSAgICB7Ci0gICAgICBpZiAoKnEpCi0gICAgICAgIEdFVE4oKnEsIGdpZl9jb25zdW1l
X2NvbW1lbnQpOwotICAgICAgZWxzZQotICAgICAgICBHRVROKDEsIGdpZl9pbWFnZV9zdGFydCk7
Ci0gICAgfQotICAgIGJyZWFrOwotCi0gICAgY2FzZSBnaWZfY29uc3VtZV9jb21tZW50OgotICAg
ICAgR0VUTigxLCBnaWZfY29tbWVudF9leHRlbnNpb24pOwotICAgIGJyZWFrOwotCi0gICAgY2Fz
ZSBnaWZfYXBwbGljYXRpb25fZXh0ZW5zaW9uOgotICAgICAgLyogQ2hlY2sgZm9yIG5ldHNjYXBl
IGFwcGxpY2F0aW9uIGV4dGVuc2lvbiAqLwotICAgICAgaWYgKCFzdHJuY21wKChjaGFyKilxLCAi
TkVUU0NBUEUyLjAiLCAxMSkgfHwKLSAgICAgICAgIXN0cm5jbXAoKGNoYXIqKXEsICJBTklNRVhU
UzEuMCIsIDExKSkKLSAgICAgICAgR0VUTigxLCBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2Nr
KTsKLSAgICAgIGVsc2UKLSAgICAgICAgR0VUTigxLCBnaWZfY29uc3VtZV9ibG9jayk7Ci0gICAg
YnJlYWs7Ci0KLSAgICAvKiBOZXRzY2FwZS1zcGVjaWZpYyBHSUYgZXh0ZW5zaW9uOiBhbmltYXRp
b24gbG9vcGluZyAqLwotICAgIGNhc2UgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jazoKLSAg
ICAgIGlmICgqcSkKLSAgICAgICAgR0VUTigqcSwgZ2lmX2NvbnN1bWVfbmV0c2NhcGVfZXh0ZW5z
aW9uKTsKLSAgICAgIGVsc2UKLSAgICAgICAgR0VUTigxLCBnaWZfaW1hZ2Vfc3RhcnQpOwotICAg
IGJyZWFrOwotCi0gICAgLyogUGFyc2UgbmV0c2NhcGUtc3BlY2lmaWMgYXBwbGljYXRpb24gZXh0
ZW5zaW9ucyAqLwotICAgIGNhc2UgZ2lmX2NvbnN1bWVfbmV0c2NhcGVfZXh0ZW5zaW9uOgotICAg
IHsKLSAgICAgIGludCBuZXRzY2FwZV9leHRlbnNpb24gPSBxWzBdICYgNzsKLQotICAgICAgLyog
TG9vcCBlbnRpcmUgYW5pbWF0aW9uIHNwZWNpZmllZCAjIG9mIHRpbWVzLiAgT25seSByZWFkIHRo
ZQotICAgICAgICAgbG9vcCBjb3VudCBkdXJpbmcgdGhlIGZpcnN0IGl0ZXJhdGlvbi4gKi8KLSAg
ICAgIGlmIChuZXRzY2FwZV9leHRlbnNpb24gPT0gMSkgewotICAgICAgICBsb29wX2NvdW50ID0g
R0VUSU5UMTYocSArIDEpOwotCi0gICAgICAgIC8qIFplcm8gbG9vcCBjb3VudCBpcyBpbmZpbml0
ZSBhbmltYXRpb24gbG9vcCByZXF1ZXN0ICovCi0gICAgICAgIGlmIChsb29wX2NvdW50ID09IDAp
Ci0gICAgICAgICAgbG9vcF9jb3VudCA9IFdlYkNvcmU6OmNBbmltYXRpb25Mb29wSW5maW5pdGU7
Ci0KLSAgICAgICAgR0VUTigxLCBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrKTsKLSAgICAg
IH0KLSAgICAgIC8qIFdhaXQgZm9yIHNwZWNpZmllZCAjIG9mIGJ5dGVzIHRvIGVudGVyIGJ1ZmZl
ciAqLwotICAgICAgZWxzZSBpZiAobmV0c2NhcGVfZXh0ZW5zaW9uID09IDIpIHsKLSAgICAgICAg
Ly8gRG9uJ3QgZG8gdGhpcywgdGhpcyBleHRlbnNpb24gZG9lc24ndCBleGlzdCAoaXNuJ3QgdXNl
ZCBhdCBhbGwpIAotICAgICAgICAvLyBhbmQgZG9lc24ndCBkbyBhbnl0aGluZywgYXMgb3VyIHN0
cmVhbWluZy9idWZmZXJpbmcgdGFrZXMgY2FyZSBvZiBpdCBhbGwuLi4KLSAgICAgICAgLy8gU2Vl
OiBodHRwOi8vc2VtbWl4LnBsL2NvbG9yL2V4Z3JhZi9lZWcyNC5odG0KLSAgICAgICAgR0VUTigx
LCBnaWZfbmV0c2NhcGVfZXh0ZW5zaW9uX2Jsb2NrKTsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAg
IC8vIDAsMy03IGFyZSB5ZXQgdG8gYmUgZGVmaW5lZCBuZXRzY2FwZSBleHRlbnNpb24gY29kZXMK
LSAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0ci0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKLSAgICAgIH0KLQotICAgICAgYnJlYWs7Ci0gICAgfQogCi0gICAgY2FzZSBnaWZfaW1hZ2Vf
aGVhZGVyOgotICAgIHsKLSAgICAgIHVuc2lnbmVkIGhlaWdodCwgd2lkdGgsIHhfb2Zmc2V0LCB5
X29mZnNldDsKLSAgICAgIAotICAgICAgLyogR2V0IGltYWdlIG9mZnNldHMsIHdpdGggcmVzcGVj
dCB0byB0aGUgc2NyZWVuIG9yaWdpbiAqLwotICAgICAgeF9vZmZzZXQgPSBHRVRJTlQxNihxKTsK
LSAgICAgIHlfb2Zmc2V0ID0gR0VUSU5UMTYocSArIDIpOwotCi0gICAgICAvKiBHZXQgaW1hZ2Ug
d2lkdGggYW5kIGhlaWdodC4gKi8KLSAgICAgIHdpZHRoICA9IEdFVElOVDE2KHEgKyA0KTsKLSAg
ICAgIGhlaWdodCA9IEdFVElOVDE2KHEgKyA2KTsKLQotICAgICAgLyogV29yayBhcm91bmQgYnJv
a2VuIEdJRiBmaWxlcyB3aGVyZSB0aGUgbG9naWNhbCBzY3JlZW4KLSAgICAgICAqIHNpemUgaGFz
IHdlaXJkIHdpZHRoIG9yIGhlaWdodC4gIFdlIGFzc3VtZSB0aGF0IEdJRjg3YQotICAgICAgICog
ZmlsZXMgZG9uJ3QgY29udGFpbiBhbmltYXRpb25zLgotICAgICAgICovCi0gICAgICBpZiAoKGlt
YWdlc19kZWNvZGVkID09IDApICYmCi0gICAgICAgICAgKChzY3JlZW5faGVpZ2h0IDwgaGVpZ2h0
KSB8fCAoc2NyZWVuX3dpZHRoIDwgd2lkdGgpIHx8Ci0gICAgICAgICAgICh2ZXJzaW9uID09IDg3
KSkpCi0gICAgICB7Ci0gICAgICAgIHNjcmVlbl9oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIHNj
cmVlbl93aWR0aCA9IHdpZHRoOwotICAgICAgICB4X29mZnNldCA9IDA7Ci0gICAgICAgIHlfb2Zm
c2V0ID0gMDsKLQotICAgICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2lu
IG9mIG91ciBzaXplLgotICAgICAgICBpZiAoY2xpZW50cHRyICYmICFjbGllbnRwdHItPnNldFNp
emUoc2NyZWVuX3dpZHRoLCBzY3JlZW5faGVpZ2h0KSkKLSAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICB9Ci0KLSAgICAgIC8qIFdvcmsgYXJvdW5kIG1vcmUgYnJva2VuIEdJRiBmaWxlcyB0
aGF0IGhhdmUgemVybyBpbWFnZQotICAgICAgICAgd2lkdGggb3IgaGVpZ2h0ICovCi0gICAgICBp
ZiAoIWhlaWdodCB8fCAhd2lkdGgpIHsKLSAgICAgICAgaGVpZ2h0ID0gc2NyZWVuX2hlaWdodDsK
LSAgICAgICAgd2lkdGggPSBzY3JlZW5fd2lkdGg7Ci0gICAgICAgIGlmICghaGVpZ2h0IHx8ICF3
aWR0aCkKLSAgICAgICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQo
KSA6IGZhbHNlOwotICAgICAgfQotCi0gICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVy
OjpHSUZTaXplUXVlcnkgfHwgaGFsdEF0RnJhbWUgPT0gaW1hZ2VzX2RlY29kZWQpIHsKLSAgICAg
ICAgLy8gVGhlIGRlY29kZXIgbmVlZHMgdG8gc3RvcC4gIEhhbmQgYmFjayB0aGUgbnVtYmVyIG9m
IGJ5dGVzIHdlIGNvbnN1bWVkIGZyb20KLSAgICAgICAgLy8gYnVmZmVyIG1pbnVzIDkgKHRoZSBh
bW91bnQgd2UgY29uc3VtZWQgdG8gcmVhZCB0aGUgaGVhZGVyKS4KLSAgICAgICAgaWYgKGNsaWVu
dHB0cikKLSAgICAgICAgICAgIGNsaWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQobGVuICsgOSk7Ci0g
ICAgICAgIEdFVE4oOSwgZ2lmX2ltYWdlX2hlYWRlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgfQotICAgICAgCi0gICAgICBpbWFnZXNfY291bnQgPSBpbWFnZXNfZGVjb2RlZCArIDE7
Ci0KLSAgICAgIGlmIChxdWVyeSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSAmJiAh
ZnJhbWVfcmVhZGVyKQotICAgICAgICBmcmFtZV9yZWFkZXIgPSBuZXcgR0lGRnJhbWVSZWFkZXIo
KTsKLQotICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICBmcmFtZV9yZWFkZXItPnhf
b2Zmc2V0ID0geF9vZmZzZXQ7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+eV9vZmZzZXQgPSB5X29m
ZnNldDsKLSAgICAgICAgZnJhbWVfcmVhZGVyLT5oZWlnaHQgPSBoZWlnaHQ7Ci0gICAgICAgIGZy
YW1lX3JlYWRlci0+d2lkdGggPSB3aWR0aDsKLQotICAgICAgICAvKiBUaGlzIGNhc2Ugd2lsbCBu
ZXZlciBiZSB0YWtlbiBpZiB0aGlzIGlzIHRoZSBmaXJzdCBpbWFnZSAqLwotICAgICAgICAvKiBi
ZWluZyBkZWNvZGVkLiBJZiBhbnkgb2YgdGhlIGxhdGVyIGltYWdlcyBhcmUgbGFyZ2VyICAgICAq
LwotICAgICAgICAvKiB0aGFuIHRoZSBzY3JlZW4gc2l6ZSwgd2UgbmVlZCB0byByZWFsbG9jYXRl
IGJ1ZmZlcnMuICAgICAqLwotICAgICAgICBpZiAoc2NyZWVuX3dpZHRoIDwgd2lkdGgpIHsKLSAg
ICAgICAgICAvKiBYWFggRGV2aWFudCEgKi8KLQotICAgICAgICAgIGRlbGV0ZSBbXWZyYW1lX3Jl
YWRlci0+cm93YnVmOwotICAgICAgICAgIHNjcmVlbl93aWR0aCA9IHdpZHRoOwotICAgICAgICAg
IGZyYW1lX3JlYWRlci0+cm93YnVmID0gbmV3IHVuc2lnbmVkIGNoYXJbc2NyZWVuX3dpZHRoXTsK
LSAgICAgICAgfSBlbHNlIGlmICghZnJhbWVfcmVhZGVyLT5yb3didWYpIHsKLSAgICAgICAgICBm
cmFtZV9yZWFkZXItPnJvd2J1ZiA9IG5ldyB1bnNpZ25lZCBjaGFyW3NjcmVlbl93aWR0aF07Cisg
ICAgICAgIGNhc2UgR0lGQ29uc3VtZUJsb2NrOiB7CisgICAgICAgICAgICBpZiAoISpxKQorICAg
ICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgR0VUTigqcSwgR0lGU2tpcEJsb2NrKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmcmFtZV9yZWFkZXItPnJvd2J1ZikKLSAgICAg
ICAgICByZXR1cm4gY2xpZW50cHRyID8gY2xpZW50cHRyLT5zZXRGYWlsZWQoKSA6IGZhbHNlOwot
ICAgICAgICBpZiAoc2NyZWVuX2hlaWdodCA8IGhlaWdodCkKLSAgICAgICAgICBzY3JlZW5faGVp
Z2h0ID0gaGVpZ2h0OwotCi0gICAgICAgIGlmIChxWzhdICYgMHg0MCkgewotICAgICAgICAgIGZy
YW1lX3JlYWRlci0+aW50ZXJsYWNlZCA9IHRydWU7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5p
cGFzcyA9IDE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pbnRl
cmxhY2VkID0gZmFsc2U7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5pcGFzcyA9IDA7CisgICAg
ICAgIGNhc2UgR0lGU2tpcEJsb2NrOiB7CisgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVC
bG9jayk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChpbWFn
ZXNfZGVjb2RlZCA9PSAwKSB7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5wcm9ncmVzc2l2ZV9k
aXNwbGF5ID0gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAvKiBPdmVybGF5aW5n
IGludGVybGFjZWQsIHRyYW5zcGFyZW50IEdJRnMgb3ZlcgotICAgICAgICAgICAgIGV4aXN0aW5n
IGltYWdlIGRhdGEgdXNpbmcgdGhlIEhhZWJlcmxpIGRpc3BsYXkgaGFjawotICAgICAgICAgICAg
IHJlcXVpcmVzIHNhdmluZyB0aGUgdW5kZXJseWluZyBpbWFnZSBpbiBvcmRlciB0bwotICAgICAg
ICAgICAgIGF2b2lkIGphZ2dpZXMgYXQgdGhlIHRyYW5zcGFyZW5jeSBlZGdlcy4gIFdlIGFyZQot
ICAgICAgICAgICAgIHVucHJlcGFyZWQgdG8gZGVhbCB3aXRoIHRoYXQsIHNvIGRvbid0IGRpc3Bs
YXkgc3VjaAotICAgICAgICAgICAgIGltYWdlcyBwcm9ncmVzc2l2ZWx5ICovCi0gICAgICAgICAg
ZnJhbWVfcmVhZGVyLT5wcm9ncmVzc2l2ZV9kaXNwbGF5ID0gZmFsc2U7CisgICAgICAgIGNhc2Ug
R0lGQ29udHJvbEV4dGVuc2lvbjogeworICAgICAgICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdl
RGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5KSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2Zy
YW1lQ29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQgPSBuZXcgR0lG
RnJhbWVDb250ZXh0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtX2ZyYW1l
Q29udGV4dCkgeworICAgICAgICAgICAgICAgIGlmICgqcSAmIDB4MSkgeworICAgICAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+dHBpeGVsID0gcVszXTsKKyAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZUNvbnRleHQtPmlzVHJhbnNwYXJlbnQgPSB0cnVlOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFy
ZW50ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yaW5nIGdmeCBjb250cm9s
IGV4dGVuc2lvbgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvLyBOT1RFOiBU
aGlzIHJlbGllcyBvbiB0aGUgdmFsdWVzIGluIHRoZSBGcmFtZURpc3Bvc2FsTWV0aG9kIGVudW0K
KyAgICAgICAgICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCisgICAg
ICAgICAgICAgICAgaW50IGRpc3Bvc2FsTWV0aG9kID0gKCgqcSkgPj4gMikgJiAweDc7CisgICAg
ICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRpc3Bvc2FsTWV0aG9kID0gKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QpZGlzcG9zYWxNZXRob2Q7CisKKyAgICAgICAg
ICAgICAgICAvLyBTb21lIHNwZWNzIHNheSAzcmQgYml0ICh2YWx1ZSA0KSwgb3RoZXIgc3BlY3Mg
c2F5IHZhbHVlIDMKKyAgICAgICAgICAgICAgICAvLyBMZXQncyBjaG9vc2UgMyAodGhlIG1vcmUg
cG9wdWxhcikKKyAgICAgICAgICAgICAgICBpZiAoZGlzcG9zYWxNZXRob2QgPT0gNCkKKyAgICAg
ICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRpc3Bvc2FsTWV0aG9kID0gV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzOworICAgICAgICAgICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5kZWxheVRpbWUgPSBHRVRJTlQxNihxICsgMSkgKiAxMDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIEdFVE4oMSwgR0lGQ29uc3VtZUJsb2NrKTsKKyAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgLyogQ2xlYXIgc3RhdGUgZnJvbSBsYXN0IGlt
YWdlICovCi0gICAgICAgIGZyYW1lX3JlYWRlci0+aXJvdyA9IDA7Ci0gICAgICAgIGZyYW1lX3Jl
YWRlci0+cm93c19yZW1haW5pbmcgPSBmcmFtZV9yZWFkZXItPmhlaWdodDsKLSAgICAgICAgZnJh
bWVfcmVhZGVyLT5yb3dlbmQgPSBmcmFtZV9yZWFkZXItPnJvd2J1ZiArIGZyYW1lX3JlYWRlci0+
d2lkdGg7Ci0gICAgICAgIGZyYW1lX3JlYWRlci0+cm93cCA9IGZyYW1lX3JlYWRlci0+cm93YnVm
OwotCi0gICAgICAgIC8qIGJpdHMgcGVyIHBpeGVsIGlzIHFbOF0mMHgwNyAqLwotICAgICAgfQot
ICAgICAgCi0gICAgICBpZiAocVs4XSAmIDB4ODApIC8qIGhhcyBhIGxvY2FsIGNvbG9ybWFwPyAq
LwotICAgICAgewotICAgICAgICBpbnQgbnVtX2NvbG9ycyA9IDIgPDwgKHFbOF0gJiAweDcpOwot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gMypudW1fY29sb3JzOwotICAgICAgICB1bnNp
Z25lZCBjaGFyICptYXAgPSBmcmFtZV9yZWFkZXIgPyBmcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9y
bWFwIDogMDsKLSAgICAgICAgaWYgKGZyYW1lX3JlYWRlciAmJiAoIW1hcCB8fCAobnVtX2NvbG9y
cyA+IGZyYW1lX3JlYWRlci0+bG9jYWxfY29sb3JtYXBfc2l6ZSkpKSB7Ci0gICAgICAgICAgZGVs
ZXRlIFtdbWFwOwotICAgICAgICAgIG1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwotICAg
ICAgICAgIGlmICghbWFwKQotICAgICAgICAgICAgcmV0dXJuIGNsaWVudHB0ciA/IGNsaWVudHB0
ci0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgY2FzZSBHSUZDb21tZW50RXh0ZW5zaW9u
OiB7CisgICAgICAgICAgICBpZiAoKnEpCisgICAgICAgICAgICAgICAgR0VUTigqcSwgR0lGQ29u
c3VtZUNvbW1lbnQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEdFVE4oMSwg
R0lGSW1hZ2VTdGFydCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAg
IC8qIFN3aXRjaCB0byB0aGUgbmV3IGxvY2FsIHBhbGV0dGUgYWZ0ZXIgaXQgbG9hZHMgKi8KLSAg
ICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICAgIGZyYW1lX3JlYWRlci0+bG9jYWxf
Y29sb3JtYXAgPSBtYXA7Ci0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5sb2NhbF9jb2xvcm1hcF9z
aXplID0gbnVtX2NvbG9yczsKLSAgICAgICAgICBmcmFtZV9yZWFkZXItPmlzX2xvY2FsX2NvbG9y
bWFwX2RlZmluZWQgPSB0cnVlOworICAgICAgICBjYXNlIEdJRkNvbnN1bWVDb21tZW50OiB7Cisg
ICAgICAgICAgICBHRVROKDEsIEdJRkNvbW1lbnRFeHRlbnNpb24pOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGVuIDwgc2l6ZSkgewotICAgICAgICAgIC8v
IFVzZSAnaG9sZCcgcGF0dGVybiB0byBnZXQgdGhlIGltYWdlIGNvbG9ybWFwCi0gICAgICAgICAg
R0VUTihzaXplLCBnaWZfaW1hZ2VfY29sb3JtYXApOwotICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEdJRkFwcGxpY2F0aW9uRXh0ZW5zaW9uOiB7CisgICAgICAgICAgICAvLyBDaGVjayBm
b3IgbmV0c2NhcGUgYXBwbGljYXRpb24gZXh0ZW5zaW9uLgorICAgICAgICAgICAgaWYgKCFzdHJu
Y21wKChjaGFyKilxLCAiTkVUU0NBUEUyLjAiLCAxMSkgfHwgIXN0cm5jbXAoKGNoYXIqKXEsICJB
TklNRVhUUzEuMCIsIDExKSkKKyAgICAgICAgICAgICAgICBHRVROKDEsIEdJRk5ldHNjYXBlRXh0
ZW5zaW9uQmxvY2spOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIEdFVE4oMSwg
R0lGQ29uc3VtZUJsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IC8vIENvcHkgZXZlcnl0aGluZyBhbmQgZGlyZWN0bHkgZ28gdG8gZ2lmX2x6d19zdGFydAotICAg
ICAgICBpZiAoZnJhbWVfcmVhZGVyKQotICAgICAgICAgIG1lbWNweShmcmFtZV9yZWFkZXItPmxv
Y2FsX2NvbG9ybWFwLCBidWYsIHNpemUpOwotICAgICAgICBidWYgKz0gc2l6ZTsKLSAgICAgICAg
bGVuIC09IHNpemU7Ci0gICAgICB9IGVsc2UgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICAv
KiBTd2l0Y2ggYmFjayB0byB0aGUgZ2xvYmFsIHBhbGV0dGUgKi8KLSAgICAgICAgZnJhbWVfcmVh
ZGVyLT5pc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkID0gZmFsc2U7Ci0gICAgICB9Ci0gICAgICBH
RVROKDEsIGdpZl9sendfc3RhcnQpOwotICAgIH0KLSAgICBicmVhazsKLQotICAgIGNhc2UgZ2lm
X2ltYWdlX2NvbG9ybWFwOgotICAgICAgLy8gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGNvcGllZCBp
bnRvIGxvY2FsX2NvbG9ybWFwCi0gICAgICBHRVROKDEsIGdpZl9sendfc3RhcnQpOwotICAgIGJy
ZWFrOwotCi0gICAgY2FzZSBnaWZfc3ViX2Jsb2NrOgotICAgIHsKLSAgICAgIGlmICgoY291bnQg
PSAqcSkgIT0gMCkKLSAgICAgIC8qIFN0aWxsIHdvcmtpbmcgb24gdGhlIHNhbWUgaW1hZ2U6IFBy
b2Nlc3MgbmV4dCBMWlcgZGF0YSBibG9jayAqLwotICAgICAgewotICAgICAgICAvKiBNYWtlIHN1
cmUgdGhlcmUgYXJlIHN0aWxsIHJvd3MgbGVmdC4gSWYgdGhlIEdJRiBkYXRhICovCi0gICAgICAg
IC8qIGlzIGNvcnJ1cHQsIHdlIG1heSBub3QgZ2V0IGFuIGV4cGxpY2l0IHRlcm1pbmF0b3IuICAg
Ki8KLSAgICAgICAgaWYgKGZyYW1lX3JlYWRlciAmJiBmcmFtZV9yZWFkZXItPnJvd3NfcmVtYWlu
aW5nID09IDApIHsKLSAgICAgICAgICAvKiBUaGlzIGlzIGFuIGlsbGVnYWwgR0lGLCBidXQgd2Ug
cmVtYWluIHRvbGVyYW50LiAqLwotICAgICAgICAgIEdFVE4oMSwgZ2lmX3N1Yl9ibG9jayk7CisK
KyAgICAgICAgLy8gTmV0c2NhcGUtc3BlY2lmaWMgR0lGIGV4dGVuc2lvbjogYW5pbWF0aW9uIGxv
b3BpbmcuCisgICAgICAgIGNhc2UgR0lGTmV0c2NhcGVFeHRlbnNpb25CbG9jazogeworICAgICAg
ICAgICAgaWYgKCpxKQorICAgICAgICAgICAgICAgIEdFVE4oKnEsIEdJRkNvbnN1bWVOZXRzY2Fw
ZUV4dGVuc2lvbik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgR0VUTigxLCBH
SUZJbWFnZVN0YXJ0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gUGFyc2UgbmV0c2NhcGUtc3BlY2lmaWMgYXBwbGljYXRpb24gZXh0ZW5zaW9ucworICAgICAg
ICBjYXNlIEdJRkNvbnN1bWVOZXRzY2FwZUV4dGVuc2lvbjogeworICAgICAgICAgICAgaW50IG5l
dHNjYXBlRXh0ZW5zaW9uID0gcVswXSAmIDc7CisKKyAgICAgICAgICAgIC8vIExvb3AgZW50aXJl
IGFuaW1hdGlvbiBzcGVjaWZpZWQgIyBvZiB0aW1lcy4gT25seSByZWFkIHRoZSBsb29wIGNvdW50
IGR1cmluZyB0aGUgZmlyc3QgaXRlcmF0aW9uLgorICAgICAgICAgICAgaWYgKG5ldHNjYXBlRXh0
ZW5zaW9uID09IDEpIHsKKyAgICAgICAgICAgICAgICBtX2xvb3BDb3VudCA9IEdFVElOVDE2KHEg
KyAxKTsKKworICAgICAgICAgICAgICAgIC8vIFplcm8gbG9vcCBjb3VudCBpcyBpbmZpbml0ZSBh
bmltYXRpb24gbG9vcCByZXF1ZXN0LgorICAgICAgICAgICAgICAgIGlmICghbV9sb29wQ291bnQp
CisgICAgICAgICAgICAgICAgICAgIG1fbG9vcENvdW50ID0gV2ViQ29yZTo6Y0FuaW1hdGlvbkxv
b3BJbmZpbml0ZTsKKworICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGTmV0c2NhcGVFeHRlbnNp
b25CbG9jayk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5ldHNjYXBlRXh0ZW5zaW9uID09IDIp
IHsKKyAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciBzcGVjaWZpZWQgIyBvZiBieXRlcyB0byBl
bnRlciBidWZmZXIuCisKKyAgICAgICAgICAgICAgICAvLyBEb24ndCBkbyB0aGlzLCB0aGlzIGV4
dGVuc2lvbiBkb2Vzbid0IGV4aXN0IChpc24ndCB1c2VkIGF0IGFsbCkKKyAgICAgICAgICAgICAg
ICAvLyBhbmQgZG9lc24ndCBkbyBhbnl0aGluZywgYXMgb3VyIHN0cmVhbWluZy9idWZmZXJpbmcg
dGFrZXMgY2FyZSBvZiBpdCBhbGwuLi4KKyAgICAgICAgICAgICAgICAvLyBTZWU6IGh0dHA6Ly9z
ZW1taXgucGwvY29sb3IvZXhncmFmL2VlZzI0Lmh0bQorICAgICAgICAgICAgICAgIEdFVE4oMSwg
R0lGTmV0c2NhcGVFeHRlbnNpb25CbG9jayk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIDAsMy03IGFyZSB5ZXQgdG8gYmUgZGVmaW5lZCBuZXRzY2FwZSBleHRlbnNp
b24gY29kZXMKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0
RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIEdFVE4oY291bnQsIGdpZl9sencpOwotICAgICAgfQotICAgICAgZWxz
ZQotICAgICAgLyogU2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMgaW4gdGhpcyBzZXF1
ZW5jZS4gKi8KLSAgICAgIHsKLSAgICAgICAgaW1hZ2VzX2RlY29kZWQrKzsKLQotICAgICAgICAv
LyBDQUxMQkFDSzogVGhlIGZyYW1lIGlzIG5vdyBjb21wbGV0ZS4KLSAgICAgICAgaWYgKGNsaWVu
dHB0ciAmJiBmcmFtZV9yZWFkZXIgJiYgIWNsaWVudHB0ci0+ZnJhbWVDb21wbGV0ZShpbWFnZXNf
ZGVjb2RlZCAtIDEsIGZyYW1lX3JlYWRlci0+ZGVsYXlfdGltZSwgZnJhbWVfcmVhZGVyLT5kaXNw
b3NhbF9tZXRob2QpKQotICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gZnJhbWVDb21wbGV0ZSgp
IGhhcyBhbHJlYWR5IGNhbGxlZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xpZW50cHRy
LT5zZXRGYWlsZWQoKS4KLQotICAgICAgICAvKiBDbGVhciBzdGF0ZSBmcm9tIHRoaXMgaW1hZ2Ug
Ki8KLSAgICAgICAgaWYgKGZyYW1lX3JlYWRlcikgewotICAgICAgICAgICAgZnJhbWVfcmVhZGVy
LT5pc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkID0gZmFsc2U7Ci0gICAgICAgICAgICBmcmFtZV9y
ZWFkZXItPmlzX3RyYW5zcGFyZW50ID0gZmFsc2U7CisKKyAgICAgICAgY2FzZSBHSUZJbWFnZUhl
YWRlcjogeworICAgICAgICAgICAgdW5zaWduZWQgaGVpZ2h0LCB3aWR0aCwgeE9mZnNldCwgeU9m
ZnNldDsKKworICAgICAgICAgICAgLyogR2V0IGltYWdlIG9mZnNldHMsIHdpdGggcmVzcGVjdCB0
byB0aGUgc2NyZWVuIG9yaWdpbiAqLworICAgICAgICAgICAgeE9mZnNldCA9IEdFVElOVDE2KHEp
OworICAgICAgICAgICAgeU9mZnNldCA9IEdFVElOVDE2KHEgKyAyKTsKKworICAgICAgICAgICAg
LyogR2V0IGltYWdlIHdpZHRoIGFuZCBoZWlnaHQuICovCisgICAgICAgICAgICB3aWR0aCAgPSBH
RVRJTlQxNihxICsgNCk7CisgICAgICAgICAgICBoZWlnaHQgPSBHRVRJTlQxNihxICsgNik7CisK
KyAgICAgICAgICAgIC8qIFdvcmsgYXJvdW5kIGJyb2tlbiBHSUYgZmlsZXMgd2hlcmUgdGhlIGxv
Z2ljYWwgc2NyZWVuCisgICAgICAgICAgICAgKiBzaXplIGhhcyB3ZWlyZCB3aWR0aCBvciBoZWln
aHQuICBXZSBhc3N1bWUgdGhhdCBHSUY4N2EKKyAgICAgICAgICAgICAqIGZpbGVzIGRvbid0IGNv
bnRhaW4gYW5pbWF0aW9ucy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCFtX2lt
YWdlc0RlY29kZWQKKyAgICAgICAgICAgICAgICAmJiAoKG1fc2NyZWVuSGVpZ2h0IDwgaGVpZ2h0
KSB8fCAobV9zY3JlZW5XaWR0aCA8IHdpZHRoKSB8fCAobV92ZXJzaW9uID09IDg3KSkpIHsKKyAg
ICAgICAgICAgICAgICBtX3NjcmVlbkhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgICAgICBt
X3NjcmVlbldpZHRoID0gd2lkdGg7CisgICAgICAgICAgICAgICAgeE9mZnNldCA9IDA7CisgICAg
ICAgICAgICAgICAgeU9mZnNldCA9IDA7CisKKyAgICAgICAgICAgICAgICAvLyBDQUxMQkFDSzog
SW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgorICAgICAgICAgICAgICAgIGlm
IChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5I
ZWlnaHQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIC8vIFdvcmsgYXJvdW5kIG1vcmUgYnJva2VuIEdJRiBmaWxlcyB0aGF0
IGhhdmUgemVybyBpbWFnZSB3aWR0aCBvciBoZWlnaHQKKyAgICAgICAgICAgIGlmICghaGVpZ2h0
IHx8ICF3aWR0aCkgeworICAgICAgICAgICAgICAgIGhlaWdodCA9IG1fc2NyZWVuSGVpZ2h0Owor
ICAgICAgICAgICAgICAgIHdpZHRoID0gbV9zY3JlZW5XaWR0aDsKKyAgICAgICAgICAgICAgICBp
ZiAoIWhlaWdodCB8fCAhd2lkdGgpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVu
dCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZTaXplUXVlcnkgfHwgaGFs
dEF0RnJhbWUgPT0gbV9pbWFnZXNEZWNvZGVkKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIGRl
Y29kZXIgbmVlZHMgdG8gc3RvcC4gSGFuZCBiYWNrIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY29u
c3VtZWQgZnJvbQorICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciBtaW51cyA5ICh0aGUgYW1vdW50
IHdlIGNvbnN1bWVkIHRvIHJlYWQgdGhlIGhlYWRlcikuCisgICAgICAgICAgICAgICAgaWYgKG1f
Y2xpZW50KQorICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGVjb2RpbmdIYWx0ZWQobGVu
ICsgOSk7CisgICAgICAgICAgICAgICAgR0VUTig5LCBHSUZJbWFnZUhlYWRlcik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1faW1h
Z2VzQ291bnQgPSBtX2ltYWdlc0RlY29kZWQgKyAxOworCisgICAgICAgICAgICBpZiAocXVlcnkg
PT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnkgJiYgIW1fZnJhbWVDb250ZXh0KQorICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gbmV3IEdJRkZyYW1lQ29udGV4dCgpOworCisg
ICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+eE9mZnNldCA9IHhPZmZzZXQ7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPnlPZmZzZXQgPSB5T2Zmc2V0OworICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5o
ZWlnaHQgPSBoZWlnaHQ7CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPndpZHRoID0g
d2lkdGg7CisKKyAgICAgICAgICAgICAgICAvKiBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSB0YWtl
biBpZiB0aGlzIGlzIHRoZSBmaXJzdCBpbWFnZSAqLworICAgICAgICAgICAgICAgIC8qIGJlaW5n
IGRlY29kZWQuIElmIGFueSBvZiB0aGUgbGF0ZXIgaW1hZ2VzIGFyZSBsYXJnZXIgICAgICovCisg
ICAgICAgICAgICAgICAgLyogdGhhbiB0aGUgc2NyZWVuIHNpemUsIHdlIG5lZWQgdG8gcmVhbGxv
Y2F0ZSBidWZmZXJzLiAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAobV9zY3JlZW5XaWR0aCA8
IHdpZHRoKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFhYWCBEZXZpYW50ISAqLworICAgICAg
ICAgICAgICAgICAgICBkZWxldGUgW11tX2ZyYW1lQ29udGV4dC0+cm93YnVmOworICAgICAgICAg
ICAgICAgICAgICBtX3NjcmVlbldpZHRoID0gd2lkdGg7CisgICAgICAgICAgICAgICAgICAgIG1f
ZnJhbWVDb250ZXh0LT5yb3didWYgPSBuZXcgdW5zaWduZWQgY2hhclttX3NjcmVlbldpZHRoXTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFtX2ZyYW1lQ29udGV4dC0+cm93YnVmKQorICAg
ICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+cm93YnVmID0gbmV3IHVuc2lnbmVkIGNo
YXJbbV9zY3JlZW5XaWR0aF07CisKKyAgICAgICAgICAgICAgICBpZiAoIW1fZnJhbWVDb250ZXh0
LT5yb3didWYpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50
LT5zZXRGYWlsZWQoKSA6IGZhbHNlOworICAgICAgICAgICAgICAgIGlmIChtX3NjcmVlbkhlaWdo
dCA8IGhlaWdodCkKKyAgICAgICAgICAgICAgICAgICAgbV9zY3JlZW5IZWlnaHQgPSBoZWlnaHQ7
CisKKyAgICAgICAgICAgICAgICBpZiAocVs4XSAmIDB4NDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9mcmFtZUNvbnRleHQtPmludGVybGFjZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+aXBhc3MgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pbnRlcmxhY2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA9IDA7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFtX2ltYWdlc0RlY29kZWQpCisgICAgICAg
ICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5wcm9ncmVzc2l2ZURpc3BsYXkgPSB0cnVlOwor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBPdmVybGF5aW5n
IGludGVybGFjZWQsIHRyYW5zcGFyZW50IEdJRnMgb3ZlcgorICAgICAgICAgICAgICAgICAgICAv
LyBleGlzdGluZyBpbWFnZSBkYXRhIHVzaW5nIHRoZSBIYWViZXJsaSBkaXNwbGF5IGhhY2sKKyAg
ICAgICAgICAgICAgICAgICAgLy8gcmVxdWlyZXMgc2F2aW5nIHRoZSB1bmRlcmx5aW5nIGltYWdl
IGluIG9yZGVyIHRvCisgICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIGphZ2dpZXMgYXQgdGhl
IHRyYW5zcGFyZW5jeSBlZGdlcy4gV2UgYXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHVucHJl
cGFyZWQgdG8gZGVhbCB3aXRoIHRoYXQsIHNvIGRvbid0IGRpc3BsYXkgc3VjaAorICAgICAgICAg
ICAgICAgICAgICAvLyBpbWFnZXMgcHJvZ3Jlc3NpdmVseQorICAgICAgICAgICAgICAgICAgICBt
X2ZyYW1lQ29udGV4dC0+cHJvZ3Jlc3NpdmVEaXNwbGF5ID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgLy8gQ2xlYXIgc3RhdGUgZnJvbSBsYXN0IGltYWdlLgor
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcm93ID0gMDsKKyAgICAgICAgICAgICAg
ICBtX2ZyYW1lQ29udGV4dC0+cm93c1JlbWFpbmluZyA9IG1fZnJhbWVDb250ZXh0LT5oZWlnaHQ7
CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnJvd2VuZCA9IG1fZnJhbWVDb250ZXh0
LT5yb3didWYgKyBtX2ZyYW1lQ29udGV4dC0+d2lkdGg7CisgICAgICAgICAgICAgICAgbV9mcmFt
ZUNvbnRleHQtPnJvd3AgPSBtX2ZyYW1lQ29udGV4dC0+cm93YnVmOworCisgICAgICAgICAgICAg
ICAgLy8gYml0cyBwZXIgcGl4ZWwgaXMgcVs4XSYweDA3CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIGhhcyBhIGxvY2FsIGNvbG9ybWFwPworICAgICAgICAgICAgaWYgKHFbOF0gJiAw
eDgwKSB7CisgICAgICAgICAgICAgICAgaW50IG51bUNvbG9ycyA9IDIgPDwgKHFbOF0gJiAweDcp
OworICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSAzICogbnVtQ29sb3JzOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm1hcCA9IG1fZnJhbWVDb250ZXh0ID8gbV9m
cmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOworICAgICAgICAgICAgICAgIGlmIChtX2Zy
YW1lQ29udGV4dCAmJiAoIW1hcCB8fCAobnVtQ29sb3JzID4gbV9mcmFtZUNvbnRleHQtPmxvY2Fs
Q29sb3JtYXBTaXplKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdbWFwOworICAg
ICAgICAgICAgICAgICAgICBtYXAgPSBuZXcgdW5zaWduZWQgY2hhcltzaXplXTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtYXApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9j
bGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG5ldyBsb2NhbCBwYWxldHRlIGFm
dGVyIGl0IGxvYWRzCisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwID0gbWFwOworICAg
ICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcFNpemUgPSBudW1D
b2xvcnM7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3Jt
YXBEZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAobGVuIDwgc2l6ZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRl
cm4gdG8gZ2V0IHRoZSBpbWFnZSBjb2xvcm1hcAorICAgICAgICAgICAgICAgICAgICBHRVROKHNp
emUsIEdJRkltYWdlQ29sb3JtYXApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGRp
cmVjdGx5IGdvIHRvIEdJRkxaV1N0YXJ0CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250
ZXh0KQorICAgICAgICAgICAgICAgICAgICBtZW1jcHkobV9mcmFtZUNvbnRleHQtPmxvY2FsQ29s
b3JtYXAsIGJ1Ziwgc2l6ZSk7CisgICAgICAgICAgICAgICAgYnVmICs9IHNpemU7CisgICAgICAg
ICAgICAgICAgbGVuIC09IHNpemU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZnJhbWVDb250
ZXh0KSB7CisgICAgICAgICAgICAgICAgLy8gU3dpdGNoIGJhY2sgdG8gdGhlIGdsb2JhbCBwYWxl
dHRlCisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmlu
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdFVE4oMSwgR0lGTFpXU3Rh
cnQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBHRVROKDEsIGdp
Zl9pbWFnZV9zdGFydCk7Ci0gICAgICB9Ci0gICAgfQotICAgIGJyZWFrOworICAgICAgICBjYXNl
IEdJRkltYWdlQ29sb3JtYXA6IHsKKyAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgYWxyZWFk
eSBjb3BpZWQgaW50byBsb2NhbENvbG9ybWFwCisgICAgICAgICAgICBHRVROKDEsIEdJRkxaV1N0
YXJ0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKLSAgICBjYXNlIGdpZl9kb25l
OgotICAgICAgLy8gV2hlbiB0aGUgR0lGIGlzIGRvbmUsIHdlIGNhbiBzdG9wLgotICAgICAgaWYg
KGNsaWVudHB0cikKLSAgICAgICAgY2xpZW50cHRyLT5naWZDb21wbGV0ZSgpOwotICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGNhc2UgR0lGU3ViQmxvY2s6IHsKKyAgICAgICAgICAgIC8vIFN0
aWxsIHdvcmtpbmcgb24gdGhlIHNhbWUgaW1hZ2U6IFByb2Nlc3MgbmV4dCBMWlcgZGF0YSBibG9j
ay4KKyAgICAgICAgICAgIGlmICgobV9jb3VudCA9ICpxKSkgeworICAgICAgICAgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGVyZSBhcmUgc3RpbGwgcm93cyBsZWZ0LiBJZiB0aGUgR0lGIGRhdGEKKyAg
ICAgICAgICAgICAgICAvLyBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBhbiBleHBsaWNpdCB0
ZXJtaW5hdG9yLgorICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCAmJiAhbV9mcmFt
ZUNvbnRleHQtPnJvd3NSZW1haW5pbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBp
cyBhbiBpbGxlZ2FsIEdJRiwgYnV0IHdlIHJlbWFpbiB0b2xlcmFudC4KKyAgICAgICAgICAgICAg
ICAgICAgR0VUTigxLCBHSUZTdWJCbG9jayk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIEdFVE4obV9jb3VudCwgR0lGTFpXKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMgaW4gdGhpcyBz
ZXF1ZW5jZS4KKyAgICAgICAgICAgICAgICBtX2ltYWdlc0RlY29kZWQrKzsKKworICAgICAgICAg
ICAgICAgIC8vIENBTExCQUNLOiBUaGUgZnJhbWUgaXMgbm93IGNvbXBsZXRlLgorICAgICAgICAg
ICAgICAgIGlmIChtX2NsaWVudCAmJiBtX2ZyYW1lQ29udGV4dCAmJiAhbV9jbGllbnQtPmZyYW1l
Q29tcGxldGUobV9pbWFnZXNEZWNvZGVkIC0gMSwgbV9mcmFtZUNvbnRleHQtPmRlbGF5VGltZSwg
bV9mcmFtZUNvbnRleHQtPmRpc3Bvc2FsTWV0aG9kKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBmcmFtZUNvbXBsZXRlKCkgaGFzIGFscmVhZHkgY2FsbGVkIG1fY2xpZW50
LT5zZXRGYWlsZWQoKS4KKworICAgICAgICAgICAgICAgIC8vIENsZWFyIHN0YXRlIGZyb20gdGhp
cyBpbWFnZQorICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgeworICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1h
Z2VTdGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
Ci0gICAgLy8gV2Ugc2hvdWxkbid0IGV2ZXIgZ2V0IGhlcmUuCi0gICAgZGVmYXVsdDoKLSAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdJRkRvbmU6IHsKKyAgICAgICAgICAgIC8vIFdoZW4gdGhl
IEdJRiBpcyBkb25lLCB3ZSBjYW4gc3RvcC4KKyAgICAgICAgICAgIGlmIChtX2NsaWVudCkKKyAg
ICAgICAgICAgICAgICBtX2NsaWVudC0+Z2lmQ29tcGxldGUoKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIFdl
IHNob3VsZG4ndCBldmVyIGdldCBoZXJlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
ICAgICB9Ci0gIH0KLQotICAvLyBDb3B5IHRoZSBsZWZ0b3ZlciBpbnRvIGdzLT5ob2xkCi0gIGJ5
dGVzX2luX2hvbGQgPSBsZW47Ci0gIGlmIChsZW4pIHsKLSAgICAvLyBBZGQgd2hhdCB3ZSBoYXZl
IHNvZmFyIHRvIHRoZSBibG9jawotICAgIHVuc2lnbmVkIGNoYXIqIHA7Ci0gICAgaWYgKHN0YXRl
ID09IGdpZl9nbG9iYWxfY29sb3JtYXApCi0gICAgICBwID0gZ2xvYmFsX2NvbG9ybWFwOwotICAg
IGVsc2UgaWYgKHN0YXRlID09IGdpZl9pbWFnZV9jb2xvcm1hcCkKLSAgICAgIHAgPSBmcmFtZV9y
ZWFkZXIgPyBmcmFtZV9yZWFkZXItPmxvY2FsX2NvbG9ybWFwIDogMDsKLSAgICBlbHNlCi0gICAg
ICBwID0gaG9sZDsKLSAgICBpZiAocCkKLSAgICAgIG1lbWNweShwLCBidWYsIGxlbik7Ci0gICAg
Ynl0ZXNfdG9fY29uc3VtZSAtPSBsZW47Ci0gIH0KLQotICBpZiAoY2xpZW50cHRyKQotICAgIGNs
aWVudHB0ci0+ZGVjb2RpbmdIYWx0ZWQoMCk7Ci0gIHJldHVybiBmYWxzZTsKKworICAgIC8vIENv
cHkgdGhlIGxlZnRvdmVyIGludG8gbV9mcmFtZUNvbnRleHQtPm1faG9sZAorICAgIG1fYnl0ZXNJ
bkhvbGQgPSBsZW47CisgICAgaWYgKGxlbikgeworICAgICAgICAvLyBBZGQgd2hhdCB3ZSBoYXZl
IHNvZmFyIHRvIHRoZSBibG9jaworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwOworICAgICAgICBp
ZiAobV9zdGF0ZSA9PSBHSUZHbG9iYWxDb2xvcm1hcCkKKyAgICAgICAgICAgIHAgPSBtX2dsb2Jh
bENvbG9ybWFwOworICAgICAgICBlbHNlIGlmIChtX3N0YXRlID09IEdJRkltYWdlQ29sb3JtYXAp
CisgICAgICAgICAgICBwID0gbV9mcmFtZUNvbnRleHQgPyBtX2ZyYW1lQ29udGV4dC0+bG9jYWxD
b2xvcm1hcCA6IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHAgPSBtX2hvbGQ7CisgICAg
ICAgIGlmIChwKQorICAgICAgICAgICAgbWVtY3B5KHAsIGJ1ZiwgbGVuKTsKKyAgICAgICAgbV9i
eXRlc1RvQ29uc3VtZSAtPSBsZW47CisgICAgfQorCisgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICBtX2NsaWVudC0+ZGVjb2RpbmdIYWx0ZWQoMCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VSZWFkZXIuaAppbmRleCAwNTI1MzJjNjQ1MzYzMTQ3NzQ4ZjliYTY0ZWE3OGExNTFm
ZWUzYWRlLi5jMDgyOTE4YzQzMTY2YjM4MDI5ZWJkZjRmMjRjZjM0ZGU2OWQ3NDliIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VSZWFkZXIuaApAQCAtNDksMTY1ICs0OSwxODYgQEAKIAogY29uc3QgaW50IGNMb29w
Q291bnROb3RTZWVuID0gLTI7CiAKLS8qIGdpZjIuaCAgCi0gICBUaGUgaW50ZXJmYWNlIGZvciB0
aGUgR0lGODcvODlhIGRlY29kZXIuIAotKi8KLS8vIExpc3Qgb2YgcG9zc2libGUgcGFyc2luZyBz
dGF0ZXMKLXR5cGVkZWYgZW51bSB7Ci0gICAgZ2lmX3R5cGUsCi0gICAgZ2lmX2dsb2JhbF9oZWFk
ZXIsCi0gICAgZ2lmX2dsb2JhbF9jb2xvcm1hcCwKLSAgICBnaWZfaW1hZ2Vfc3RhcnQsICAgICAg
ICAgICAgCi0gICAgZ2lmX2ltYWdlX2hlYWRlciwKLSAgICBnaWZfaW1hZ2VfY29sb3JtYXAsCi0g
ICAgZ2lmX2ltYWdlX2JvZHksCi0gICAgZ2lmX2x6d19zdGFydCwKLSAgICBnaWZfbHp3LAotICAg
IGdpZl9zdWJfYmxvY2ssCi0gICAgZ2lmX2V4dGVuc2lvbiwKLSAgICBnaWZfY29udHJvbF9leHRl
bnNpb24sCi0gICAgZ2lmX2NvbnN1bWVfYmxvY2ssCi0gICAgZ2lmX3NraXBfYmxvY2ssCi0gICAg
Z2lmX2RvbmUsCi0gICAgZ2lmX2NvbW1lbnRfZXh0ZW5zaW9uLAotICAgIGdpZl9hcHBsaWNhdGlv
bl9leHRlbnNpb24sCi0gICAgZ2lmX25ldHNjYXBlX2V4dGVuc2lvbl9ibG9jaywKLSAgICBnaWZf
Y29uc3VtZV9uZXRzY2FwZV9leHRlbnNpb24sCi0gICAgZ2lmX2NvbnN1bWVfY29tbWVudAotfSBn
c3RhdGU7Ci0KLXN0cnVjdCBHSUZGcmFtZVJlYWRlciB7CisvLyBMaXN0IG9mIHBvc3NpYmxlIHBh
cnNpbmcgc3RhdGVzLgorZW51bSBHSUZTdGF0ZSB7CisgICAgR0lGVHlwZSwKKyAgICBHSUZHbG9i
YWxIZWFkZXIsCisgICAgR0lGR2xvYmFsQ29sb3JtYXAsCisgICAgR0lGSW1hZ2VTdGFydCwgICAg
ICAgICAgICAKKyAgICBHSUZJbWFnZUhlYWRlciwKKyAgICBHSUZJbWFnZUNvbG9ybWFwLAorICAg
IEdJRkltYWdlQm9keSwKKyAgICBHSUZMWldTdGFydCwKKyAgICBHSUZMWlcsCisgICAgR0lGU3Vi
QmxvY2ssCisgICAgR0lGRXh0ZW5zaW9uLAorICAgIEdJRkNvbnRyb2xFeHRlbnNpb24sCisgICAg
R0lGQ29uc3VtZUJsb2NrLAorICAgIEdJRlNraXBCbG9jaywKKyAgICBHSUZEb25lLAorICAgIEdJ
RkNvbW1lbnRFeHRlbnNpb24sCisgICAgR0lGQXBwbGljYXRpb25FeHRlbnNpb24sCisgICAgR0lG
TmV0c2NhcGVFeHRlbnNpb25CbG9jaywKKyAgICBHSUZDb25zdW1lTmV0c2NhcGVFeHRlbnNpb24s
CisgICAgR0lGQ29uc3VtZUNvbW1lbnQKK307CisKK3N0cnVjdCBHSUZGcmFtZUNvbnRleHQgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIC8qIExaVyBkZWNvZGVy
IHN0YXRlIG1hY2hpbmUgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpzdGFja3A7ICAgICAgICAgICAg
ICAvKiBDdXJyZW50IHN0YWNrIHBvaW50ZXIgKi8KKyAgICAvLyBMWlcgZGVjb2RlciBzdGF0ZSBt
YWNoaW5lLgorICAgIHVuc2lnbmVkIGNoYXIgKnN0YWNrcDsgLy8gQ3VycmVudCBzdGFjayBwb2lu
dGVyLgogICAgIGludCBkYXRhc2l6ZTsKICAgICBpbnQgY29kZXNpemU7CiAgICAgaW50IGNvZGVt
YXNrOwotICAgIGludCBjbGVhcl9jb2RlOyAgICAgICAgICAgICAvKiBDb2Rld29yZCB1c2VkIHRv
IHRyaWdnZXIgZGljdGlvbmFyeSByZXNldCAqLwotICAgIGludCBhdmFpbDsgICAgICAgICAgICAg
ICAgICAvKiBJbmRleCBvZiBuZXh0IGF2YWlsYWJsZSBzbG90IGluIGRpY3Rpb25hcnkgKi8KKyAg
ICBpbnQgY2xlYXJDb2RlOyAvLyBDb2Rld29yZCB1c2VkIHRvIHRyaWdnZXIgZGljdGlvbmFyeSBy
ZXNldC4KKyAgICBpbnQgYXZhaWw7IC8vIEluZGV4IG9mIG5leHQgYXZhaWxhYmxlIHNsb3QgaW4g
ZGljdGlvbmFyeS4KICAgICBpbnQgb2xkY29kZTsKICAgICB1bnNpZ25lZCBjaGFyIGZpcnN0Y2hh
cjsKLSAgICBpbnQgYml0czsgICAgICAgICAgICAgICAgICAgLyogTnVtYmVyIG9mIHVucmVhZCBi
aXRzIGluICJkYXR1bSIgKi8KLSAgICBpbnQgZGF0dW07ICAgICAgICAgICAgICAgIC8qIDMyLWJp
dCBpbnB1dCBidWZmZXIgKi8KLQotICAgIC8qIE91dHB1dCBzdGF0ZSBtYWNoaW5lICovCi0gICAg
aW50IGlwYXNzOyAgICAgICAgICAgICAgICAgIC8qIEludGVybGFjZSBwYXNzOyBSYW5nZXMgMS00
IGlmIGludGVybGFjZWQuICovCi0gICAgdW5zaWduZWQgaW50IHJvd3NfcmVtYWluaW5nOyAgICAg
ICAgLyogUm93cyByZW1haW5pbmcgdG8gYmUgb3V0cHV0ICovCi0gICAgdW5zaWduZWQgaW50IGly
b3c7ICAgICAgICAgICAgICAgICAgLyogQ3VycmVudCBvdXRwdXQgcm93LCBzdGFydGluZyBhdCB6
ZXJvICovCi0gICAgdW5zaWduZWQgY2hhciAqcm93YnVmOyAgICAgICAgICAgICAgLyogU2luZ2xl
IHNjYW5saW5lIHRlbXBvcmFyeSBidWZmZXIgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpyb3dlbmQ7
ICAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGVuZCBvZiByb3didWYgKi8KLSAgICB1bnNpZ25l
ZCBjaGFyICpyb3dwOyAgICAgICAgICAgICAgICAvKiBDdXJyZW50IG91dHB1dCBwb2ludGVyICov
Ci0KLSAgICAvKiBQYXJhbWV0ZXJzIGZvciBpbWFnZSBmcmFtZSBjdXJyZW50bHkgYmVpbmcgZGVj
b2RlZCAqLwotICAgIHVuc2lnbmVkIGludCB4X29mZnNldCwgeV9vZmZzZXQ7ICAgIC8qIFdpdGgg
cmVzcGVjdCB0byAic2NyZWVuIiBvcmlnaW4gKi8KLSAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LCB3
aWR0aDsKLSAgICBpbnQgdHBpeGVsOyAgICAgICAgICAgICAgICAgLyogSW5kZXggb2YgdHJhbnNw
YXJlbnQgcGl4ZWwgKi8KLSAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0
aG9kIGRpc3Bvc2FsX21ldGhvZDsgICAvKiBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGlu
IHBsYWNlLCBldGMuKi8KLSAgICB1bnNpZ25lZCBjaGFyICpsb2NhbF9jb2xvcm1hcDsgICAgLyog
UGVyLWltYWdlIGNvbG9ybWFwICovCi0gICAgaW50IGxvY2FsX2NvbG9ybWFwX3NpemU7ICAgIC8q
IFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuICovCisgICAgaW50IGJpdHM7IC8vIE51bWJl
ciBvZiB1bnJlYWQgYml0cyBpbiAiZGF0dW0iLgorICAgIGludCBkYXR1bTsgLy8gMzItYml0IGlu
cHV0IGJ1ZmZlci4KKworICAgIC8vIE91dHB1dCBzdGF0ZSBtYWNoaW5lLgorICAgIGludCBpcGFz
czsgLy8gSW50ZXJsYWNlIHBhc3M7IFJhbmdlcyAxLTQgaWYgaW50ZXJsYWNlZC4KKyAgICB1bnNp
Z25lZCByb3dzUmVtYWluaW5nOyAvLyBSb3dzIHJlbWFpbmluZyB0byBiZSBvdXRwdXQuCisgICAg
dW5zaWduZWQgaXJvdzsgLy8gQ3VycmVudCBvdXRwdXQgcm93LCBzdGFydGluZyBhdCB6ZXJvLgor
ICAgIHVuc2lnbmVkIGNoYXIgKnJvd2J1ZjsgLy8gU2luZ2xlIHNjYW5saW5lIHRlbXBvcmFyeSBi
dWZmZXIuCisgICAgdW5zaWduZWQgY2hhciAqcm93ZW5kOyAvLyBQb2ludGVyIHRvIGVuZCBvZiBy
b3didWYuCisgICAgdW5zaWduZWQgY2hhciAqcm93cDsgLy8gQ3VycmVudCBvdXRwdXQgcG9pbnRl
ci4KKworICAgIC8vIFBhcmFtZXRlcnMgZm9yIGltYWdlIGZyYW1lIGN1cnJlbnRseSBiZWluZyBk
ZWNvZGVkLgorICAgIHVuc2lnbmVkIHhPZmZzZXQ7CisgICAgdW5zaWduZWQgeU9mZnNldDsgLy8g
V2l0aCByZXNwZWN0IHRvICJzY3JlZW4iIG9yaWdpbi4KKyAgICB1bnNpZ25lZCB3aWR0aDsKKyAg
ICB1bnNpZ25lZCBoZWlnaHQ7CisgICAgaW50IHRwaXhlbDsgLy8gSW5kZXggb2YgdHJhbnNwYXJl
bnQgcGl4ZWwuCisgICAgV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBk
aXNwb3NhbE1ldGhvZDsgLy8gUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFjZSwg
ZXRjLgorICAgIHVuc2lnbmVkIGNoYXIgKmxvY2FsQ29sb3JtYXA7IC8vIFBlci1pbWFnZSBjb2xv
cm1hcC4KKyAgICBpbnQgbG9jYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3Jt
YXAgYXJyYXkuCiAgICAgCi0gICAgYm9vbCBpc19sb2NhbF9jb2xvcm1hcF9kZWZpbmVkIDogMTsK
LSAgICBib29sIHByb2dyZXNzaXZlX2Rpc3BsYXkgOiAxOyAgICAvKiBJZiBUUlVFLCBkbyBIYWVi
ZXJsaSBpbnRlcmxhY2UgaGFjayAqLwotICAgIGJvb2wgaW50ZXJsYWNlZCA6IDE7ICAgICAgICAg
ICAgIC8qIFRSVUUsIGlmIHNjYW5saW5lcyBhcnJpdmUgaW50ZXJsYWNlZCBvcmRlciAqLwotICAg
IGJvb2wgaXNfdHJhbnNwYXJlbnQgOiAxOyAgICAgICAgIC8qIFRSVUUsIGlmIHRwaXhlbCBpcyB2
YWxpZCAqLwotCi0gICAgdW5zaWduZWQgZGVsYXlfdGltZTsgICAgICAgIC8qIERpc3BsYXkgdGlt
ZSwgaW4gbWlsbGlzZWNvbmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3IgdGhpcyBpbWFnZSBpbiBhIG11bHRpLWltYWdlIEdJRiAqLwotCi0KLSAgICB1bnNpZ25lZCBz
aG9ydCogIHByZWZpeDsgICAgICAgICAgLyogTFpXIGRlY29kaW5nIHRhYmxlcyAqLwotICAgIHVu
c2lnbmVkIGNoYXIqICAgc3VmZml4OyAgICAgICAgICAvKiBMWlcgZGVjb2RpbmcgdGFibGVzICov
Ci0gICAgdW5zaWduZWQgY2hhciogICBzdGFjazsgICAgICAgICAgIC8qIEJhc2Ugb2YgTFpXIGRl
Y29kZXIgc3RhY2sgKi8KLQotCi0gICAgR0lGRnJhbWVSZWFkZXIoKSB7Ci0gICAgICAgIHN0YWNr
cCA9IDA7Ci0gICAgICAgIGRhdGFzaXplID0gY29kZXNpemUgPSBjb2RlbWFzayA9IGNsZWFyX2Nv
ZGUgPSBhdmFpbCA9IG9sZGNvZGUgPSAwOwotICAgICAgICBmaXJzdGNoYXIgPSAwOwotICAgICAg
ICBiaXRzID0gZGF0dW0gPSAwOwotICAgICAgICBpcGFzcyA9IDA7Ci0gICAgICAgIHJvd3NfcmVt
YWluaW5nID0gaXJvdyA9IDA7Ci0gICAgICAgIHJvd2J1ZiA9IHJvd2VuZCA9IHJvd3AgPSAwOwot
Ci0gICAgICAgIHhfb2Zmc2V0ID0geV9vZmZzZXQgPSB3aWR0aCA9IGhlaWdodCA9IDA7Ci0gICAg
ICAgIHRwaXhlbCA9IDA7Ci0gICAgICAgIGRpc3Bvc2FsX21ldGhvZCA9IFdlYkNvcmU6OkltYWdl
RnJhbWU6OkRpc3Bvc2VOb3RTcGVjaWZpZWQ7Ci0KLSAgICAgICAgbG9jYWxfY29sb3JtYXAgPSAw
OwotICAgICAgICBsb2NhbF9jb2xvcm1hcF9zaXplID0gMDsKLSAgICAgICAgaXNfbG9jYWxfY29s
b3JtYXBfZGVmaW5lZCA9IHByb2dyZXNzaXZlX2Rpc3BsYXkgPSBpc190cmFuc3BhcmVudCA9IGlu
dGVybGFjZWQgPSBmYWxzZTsKLQotICAgICAgICBkZWxheV90aW1lID0gMDsKLQotICAgICAgICBw
cmVmaXggPSAwOwotICAgICAgICBzdWZmaXggPSBzdGFjayA9IDA7CisgICAgYm9vbCBpc0xvY2Fs
Q29sb3JtYXBEZWZpbmVkIDogMTsKKyAgICBib29sIHByb2dyZXNzaXZlRGlzcGxheSA6IDE7IC8v
IElmIHRydWUsIGRvIEhhZWJlcmxpIGludGVybGFjZSBoYWNrLgorICAgIGJvb2wgaW50ZXJsYWNl
ZCA6IDE7IC8vIFRydWUsIGlmIHNjYW5saW5lcyBhcnJpdmUgaW50ZXJsYWNlZCBvcmRlci4KKyAg
ICBib29sIGlzVHJhbnNwYXJlbnQgOiAxOyAvLyBUUlVFLCBpZiB0cGl4ZWwgaXMgdmFsaWQuCisK
KyAgICB1bnNpZ25lZCBkZWxheVRpbWU7IC8vIERpc3BsYXkgdGltZSwgaW4gbWlsbGlzZWNvbmRz
LCBmb3IgdGhpcyBpbWFnZSBpbiBhIG11bHRpLWltYWdlIEdJRi4KKworICAgIHVuc2lnbmVkIHNo
b3J0KiBwcmVmaXg7IC8vIExaVyBkZWNvZGluZyB0YWJsZXMuCisgICAgdW5zaWduZWQgY2hhciog
c3VmZml4OyAvLyBMWlcgZGVjb2RpbmcgdGFibGVzLgorICAgIHVuc2lnbmVkIGNoYXIqIHN0YWNr
OyAvLyBCYXNlIG9mIExaVyBkZWNvZGVyIHN0YWNrLgorCisgICAgR0lGRnJhbWVDb250ZXh0KCkK
KyAgICAgICAgOiBzdGFja3AoMCkKKyAgICAgICAgLCBkYXRhc2l6ZSgwKQorICAgICAgICAsIGNv
ZGVzaXplKDApCisgICAgICAgICwgY29kZW1hc2soMCkKKyAgICAgICAgLCBjbGVhckNvZGUoMCkK
KyAgICAgICAgLCBhdmFpbCgwKQorICAgICAgICAsIG9sZGNvZGUoMCkKKyAgICAgICAgLCBmaXJz
dGNoYXIoMCkKKyAgICAgICAgLCBiaXRzKDApCisgICAgICAgICwgZGF0dW0oMCkKKyAgICAgICAg
LCBpcGFzcygwKQorICAgICAgICAsIHJvd3NSZW1haW5pbmcoMCkKKyAgICAgICAgLCBpcm93KDAp
CisgICAgICAgICwgcm93YnVmKDApCisgICAgICAgICwgcm93ZW5kKDApCisgICAgICAgICwgcm93
cCgwKQorICAgICAgICAsIHhPZmZzZXQoMCkKKyAgICAgICAgLCB5T2Zmc2V0KDApCisgICAgICAg
ICwgd2lkdGgoMCkKKyAgICAgICAgLCBoZWlnaHQoMCkKKyAgICAgICAgLCB0cGl4ZWwoMCkKKyAg
ICAgICAgLCBkaXNwb3NhbE1ldGhvZChXZWJDb3JlOjpJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3Bl
Y2lmaWVkKQorICAgICAgICAsIGxvY2FsQ29sb3JtYXAoMCkKKyAgICAgICAgLCBsb2NhbENvbG9y
bWFwU2l6ZSgwKQorICAgICAgICAsIGlzTG9jYWxDb2xvcm1hcERlZmluZWQoZmFsc2UpCisgICAg
ICAgICwgcHJvZ3Jlc3NpdmVEaXNwbGF5KGZhbHNlKQorICAgICAgICAsIGludGVybGFjZWQoZmFs
c2UpCisgICAgICAgICwgaXNUcmFuc3BhcmVudChmYWxzZSkKKyAgICAgICAgLCBkZWxheVRpbWUo
MCkKKyAgICAgICAgLCBwcmVmaXgoMCkKKyAgICAgICAgLCBzdWZmaXgoMCkKKyAgICAgICAgLCBz
dGFjaygwKQorICAgIHsKICAgICB9CiAgICAgCi0gICAgfkdJRkZyYW1lUmVhZGVyKCkgewotICAg
ICAgICBkZWxldGUgW11yb3didWY7Ci0gICAgICAgIGRlbGV0ZSBbXWxvY2FsX2NvbG9ybWFwOwot
ICAgICAgICBkZWxldGUgW11wcmVmaXg7Ci0gICAgICAgIGRlbGV0ZSBbXXN1ZmZpeDsKLSAgICAg
ICAgZGVsZXRlIFtdc3RhY2s7CisgICAgfkdJRkZyYW1lQ29udGV4dCgpCisgICAgeworICAgICAg
ICBkZWxldGUgW10gcm93YnVmOworICAgICAgICBkZWxldGUgW10gbG9jYWxDb2xvcm1hcDsKKyAg
ICAgICAgZGVsZXRlIFtdIHByZWZpeDsKKyAgICAgICAgZGVsZXRlIFtdIHN1ZmZpeDsKKyAgICAg
ICAgZGVsZXRlIFtdIHN0YWNrOwogICAgIH0KIH07CiAKLXN0cnVjdCBHSUZJbWFnZVJlYWRlciB7
CitjbGFzcyBHSUZJbWFnZVJlYWRlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6Ci0gICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnRwdHI7Ci0gICAgLyog
UGFyc2luZyBzdGF0ZSBtYWNoaW5lICovCi0gICAgZ3N0YXRlIHN0YXRlOyAgICAgICAgICAgICAg
ICAgICAgICAvKiBDdXJyZW50IGRlY29kZXIgbWFzdGVyIHN0YXRlICovCi0gICAgdW5zaWduZWQg
Ynl0ZXNfdG9fY29uc3VtZTsgICAgICAgICAvKiBOdW1iZXIgb2YgYnl0ZXMgdG8gYWNjdW11bGF0
ZSAqLwotICAgIHVuc2lnbmVkIGJ5dGVzX2luX2hvbGQ7ICAgICAgICAgICAgLyogYnl0ZXMgYWNj
dW11bGF0ZWQgc28gZmFyKi8KLSAgICB1bnNpZ25lZCBjaGFyIGhvbGRbTUFYX0hPTERfU0laRV07
IC8qIEFjY3VtdWxhdGlvbiBidWZmZXIgKi8KLSAgICB1bnNpZ25lZCBjaGFyKiBnbG9iYWxfY29s
b3JtYXA7ICAgIC8qICgzKiBNQVhfQ09MT1JTIGluIHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYg
bG9jYWwgbm90IHN1cHBsaWVkLCAzIGJ5dGVzIGZvciBlYWNoIGNvbG9yICAqLwotICAgIAotICAg
ICAvKiBHbG9iYWwgKG11bHRpLWltYWdlKSBzdGF0ZSAqLwotICAgIGludCBzY3JlZW5fYmdjb2xv
cjsgICAgICAgICAvKiBMb2dpY2FsIHNjcmVlbiBiYWNrZ3JvdW5kIGNvbG9yICovCi0gICAgaW50
IHZlcnNpb247ICAgICAgICAgICAgICAgIC8qIEVpdGhlciA4OSBmb3IgR0lGODkgb3IgODcgZm9y
IEdJRjg3ICovCi0gICAgdW5zaWduZWQgc2NyZWVuX3dpZHRoOyAgICAgICAvKiBMb2dpY2FsIHNj
cmVlbiB3aWR0aCAmIGhlaWdodCAqLwotICAgIHVuc2lnbmVkIHNjcmVlbl9oZWlnaHQ7Ci0gICAg
aW50IGdsb2JhbF9jb2xvcm1hcF9zaXplOyAgIC8qIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFy
cmF5LiAqLwotICAgIHVuc2lnbmVkIGltYWdlc19kZWNvZGVkOyAgICAvKiBDb3VudHMgY29tcGxl
dGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQgR0lGcyAqLwotICAgIGludCBpbWFnZXNfY291bnQ7ICAg
ICAgICAgICAvKiBDb3VudGVkIGFsbCBmcmFtZXMgc2VlbiBzbyBmYXIgKGluY2x1ZGluZyBpbmNv
bXBsZXRlIGZyYW1lcykgKi8KLSAgICBpbnQgbG9vcF9jb3VudDsgICAgICAgICAgICAgLyogTmV0
c2NhcGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGhlIG51bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYg
cmVuZGVycy4gKi8KLSAgICAKLSAgICAvLyBOb3QgcmVhbGx5IGdsb2JhbCwgYnV0IGNvbnZlbmll
bnQgdG8gbG9jYXRlIGhlcmUuCi0gICAgaW50IGNvdW50OyAgICAgICAgICAgICAgICAgIC8qIFJl
bWFpbmluZyAjIGJ5dGVzIGluIHN1Yi1ibG9jayAqLwotICAgIAotICAgIEdJRkZyYW1lUmVhZGVy
KiBmcmFtZV9yZWFkZXI7Ci0KLSAgICBHSUZJbWFnZVJlYWRlcihXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXIqIGNsaWVudCA9IDApIHsKLSAgICAgICAgY2xpZW50cHRyID0gY2xpZW50OwotICAgICAg
ICBzdGF0ZSA9IGdpZl90eXBlOwotICAgICAgICBieXRlc190b19jb25zdW1lID0gNjsKLSAgICAg
ICAgYnl0ZXNfaW5faG9sZCA9IDA7Ci0gICAgICAgIGZyYW1lX3JlYWRlciA9IDA7Ci0gICAgICAg
IGdsb2JhbF9jb2xvcm1hcCA9IDA7Ci0KLSAgICAgICAgc2NyZWVuX2JnY29sb3IgPSB2ZXJzaW9u
ID0gMDsKLSAgICAgICAgc2NyZWVuX3dpZHRoID0gc2NyZWVuX2hlaWdodCA9IDA7Ci0gICAgICAg
IGdsb2JhbF9jb2xvcm1hcF9zaXplID0gaW1hZ2VzX2RlY29kZWQgPSBpbWFnZXNfY291bnQgPSAw
OwotICAgICAgICBsb29wX2NvdW50ID0gY0xvb3BDb3VudE5vdFNlZW47Ci0gICAgICAgIGNvdW50
ID0gMDsKKyAgICBHSUZJbWFnZVJlYWRlcihXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVu
dCA9IDApCisgICAgICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICAgICAsIG1fc3RhdGUoR0lG
VHlwZSkKKyAgICAgICAgLCBtX2J5dGVzVG9Db25zdW1lKDYpCisgICAgICAgICwgbV9ieXRlc0lu
SG9sZCgwKQorICAgICAgICAsIG1fZ2xvYmFsQ29sb3JtYXAoMCkKKyAgICAgICAgLCBtX3NjcmVl
bkJnY29sb3IoMCkKKyAgICAgICAgLCBtX3ZlcnNpb24oMCkKKyAgICAgICAgLCBtX3NjcmVlbldp
ZHRoKDApCisgICAgICAgICwgbV9zY3JlZW5IZWlnaHQoMCkKKyAgICAgICAgLCBtX2dsb2JhbENv
bG9ybWFwU2l6ZSgwKQorICAgICAgICAsIG1faW1hZ2VzRGVjb2RlZCgwKQorICAgICAgICAsIG1f
aW1hZ2VzQ291bnQoMCkKKyAgICAgICAgLCBtX2xvb3BDb3VudChjTG9vcENvdW50Tm90U2VlbikK
KyAgICAgICAgLCBtX2NvdW50KDApCisgICAgICAgICwgbV9mcmFtZUNvbnRleHQoMCkKKyAgICB7
CiAgICAgfQogCi0gICAgfkdJRkltYWdlUmVhZGVyKCkgewotICAgICAgICBkZWxldGUgW11nbG9i
YWxfY29sb3JtYXA7Ci0gICAgICAgIGdsb2JhbF9jb2xvcm1hcCA9IDA7Ci0gICAgICAgIGRlbGV0
ZSBmcmFtZV9yZWFkZXI7Ci0gICAgICAgIGZyYW1lX3JlYWRlciA9IDA7CisgICAgfkdJRkltYWdl
UmVhZGVyKCkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBbXSBtX2dsb2JhbENvbG9ybWFwOworICAg
ICAgICBtX2dsb2JhbENvbG9ybWFwID0gMDsKKworICAgICAgICBkZWxldGUgbV9mcmFtZUNvbnRl
eHQ7CisgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gMDsKICAgICB9CiAKLSAgICBib29sIHJlYWQo
Y29uc3QgdW5zaWduZWQgY2hhciAqIGJ1ZiwgdW5zaWduZWQgaW50IG51bWJ5dGVzLCAKLSAgICAg
ICAgICAgICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSA9IFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9
IC0xKTsKKyAgICBib29sIHJlYWQoY29uc3QgdW5zaWduZWQgY2hhciogYnVmLCB1bnNpZ25lZCBu
dW1ieXRlcywgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSA9IFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9IC0xKTsK
KworICAgIGludCBpbWFnZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VzQ291bnQ7IH0K
KyAgICBpbnQgbG9vcENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sb29wQ291bnQ7IH0KKyAgICB1
bnNpZ25lZCBjaGFyKiBnbG9iYWxDb2xvcm1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsQ29s
b3JtYXA7IH0KKyAgICBpbnQgZ2xvYmFsQ29sb3JtYXBTaXplKCkgY29uc3QgeyByZXR1cm4gbV9n
bG9iYWxDb2xvcm1hcFNpemU7IH0KKyAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDb250ZXh0OyB9CiAKIHByaXZhdGU6Ci0gICAg
Ym9vbCBvdXRwdXRfcm93KCk7Ci0gICAgYm9vbCBkb19sencoY29uc3QgdW5zaWduZWQgY2hhciAq
cSk7CisgICAgYm9vbCBvdXRwdXRSb3coKTsKKyAgICBib29sIGRvTFpXKGNvbnN0IHVuc2lnbmVk
IGNoYXIgKnEpOworCisgICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBtX2NsaWVudDsKKwor
ICAgIC8vIFBhcnNpbmcgc3RhdGUgbWFjaGluZS4KKyAgICBHSUZTdGF0ZSBtX3N0YXRlOyAvLyBD
dXJyZW50IGRlY29kZXIgbWFzdGVyIHN0YXRlLgorICAgIHVuc2lnbmVkIG1fYnl0ZXNUb0NvbnN1
bWU7IC8vIE51bWJlciBvZiBieXRlcyB0byBhY2N1bXVsYXRlLgorICAgIHVuc2lnbmVkIG1fYnl0
ZXNJbkhvbGQ7IC8vIGJ5dGVzIGFjY3VtdWxhdGVkIHNvIGZhci4KKyAgICB1bnNpZ25lZCBjaGFy
IG1faG9sZFtNQVhfSE9MRF9TSVpFXTsgLy8gQWNjdW11bGF0aW9uIGJ1ZmZlci4KKyAgICB1bnNp
Z25lZCBjaGFyKiBtX2dsb2JhbENvbG9ybWFwOyAvLyAoMyogTUFYX0NPTE9SUyBpbiBzaXplKSBE
ZWZhdWx0IGNvbG9ybWFwIGlmIGxvY2FsIG5vdCBzdXBwbGllZCwgMyBieXRlcyBmb3IgZWFjaCBj
b2xvci4KKyAgICAKKyAgICAvLyBHbG9iYWwgKG11bHRpLWltYWdlKSBzdGF0ZS4KKyAgICBpbnQg
bV9zY3JlZW5CZ2NvbG9yOyAvLyBMb2dpY2FsIHNjcmVlbiBiYWNrZ3JvdW5kIGNvbG9yLgorICAg
IGludCBtX3ZlcnNpb247IC8vIEVpdGhlciA4OSBmb3IgR0lGODkgb3IgODcgZm9yIEdJRjg3Lgor
ICAgIHVuc2lnbmVkIG1fc2NyZWVuV2lkdGg7IC8vIExvZ2ljYWwgc2NyZWVuIHdpZHRoICYgaGVp
Z2h0LgorICAgIHVuc2lnbmVkIG1fc2NyZWVuSGVpZ2h0OworICAgIGludCBtX2dsb2JhbENvbG9y
bWFwU2l6ZTsgLy8gU2l6ZSBvZiBnbG9iYWwgY29sb3JtYXAgYXJyYXkuCisgICAgdW5zaWduZWQg
bV9pbWFnZXNEZWNvZGVkOyAvLyBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQg
R0lGcy4KKyAgICBpbnQgbV9pbWFnZXNDb3VudDsgLy8gQ291bnRlZCBhbGwgZnJhbWVzIHNlZW4g
c28gZmFyIChpbmNsdWRpbmcgaW5jb21wbGV0ZSBmcmFtZXMpLgorICAgIGludCBtX2xvb3BDb3Vu
dDsgLy8gTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wgdGhlIG51
bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVuZGVycy4KKyAgICAKKyAgICAvLyBOb3Qg
cmVhbGx5IGdsb2JhbCwgYnV0IGNvbnZlbmllbnQgdG8gbG9jYXRlIGhlcmUuCisgICAgaW50IG1f
Y291bnQ7IC8vIFJlbWFpbmluZyAjIGJ5dGVzIGluIHN1Yi1ibG9jay4KKyAgICAKKyAgICBHSUZG
cmFtZUNvbnRleHQqIG1fZnJhbWVDb250ZXh0OwogfTsKIAogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>