<?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>68599</bug_id>
          
          <creation_ts>2011-09-22 01:13:51 -0700</creation_ts>
          <short_desc>[EFL] Rename ewk_tiled_*.c to ewk_tiled_*.cpp</short_desc>
          <delta_ts>2011-10-03 07:12:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</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>
          <dependson>68994</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>leandro</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>471419</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-22 01:13:51 -0700</bug_when>
    <thetext>Patch will be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474391</commentid>
    <comment_count>1</comment_count>
      <attachid>108939</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-27 17:28:12 -0700</bug_when>
    <thetext>Created attachment 108939
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474395</commentid>
    <comment_count>2</comment_count>
      <attachid>108939</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-27 17:33:02 -0700</bug_when>
    <thetext>Comment on attachment 108939
Patch

Attachment 108939 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9879510</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474399</commentid>
    <comment_count>3</comment_count>
      <attachid>108942</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-27 17:35:59 -0700</bug_when>
    <thetext>Created attachment 108942
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474404</commentid>
    <comment_count>4</comment_count>
      <attachid>108942</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-27 17:40:04 -0700</bug_when>
    <thetext>Comment on attachment 108942
Patch

Attachment 108942 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9883420</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474408</commentid>
    <comment_count>5</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-27 17:55:06 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 108942 [details])
&gt; Attachment 108942 [details] did not pass efl-ews (efl):
&gt; Output: http://queues.webkit.org/results/9883420

It&apos;s because of old eina.
I&apos;ll bump eina at different bug.

Gyuyoung, Could you update build bot?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474589</commentid>
    <comment_count>6</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-28 01:12:12 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 108942 [details] [details])
&gt; &gt; Attachment 108942 [details] [details] did not pass efl-ews (efl):
&gt; &gt; Output: http://queues.webkit.org/results/9883420
&gt; 
&gt; It&apos;s because of old eina.
&gt; I&apos;ll bump eina at different bug.
&gt; 
&gt; Gyuyoung, Could you update build bot?

I update eina both ews and buildbot. Please submit your patch again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474656</commentid>
    <comment_count>7</comment_count>
      <attachid>108999</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-28 04:03:37 -0700</bug_when>
    <thetext>Created attachment 108999
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474657</commentid>
    <comment_count>8</comment_count>
      <attachid>109000</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-28 04:09:41 -0700</bug_when>
    <thetext>Created attachment 109000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475211</commentid>
    <comment_count>9</comment_count>
      <attachid>109117</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-28 20:42:29 -0700</bug_when>
    <thetext>Created attachment 109117
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475213</commentid>
    <comment_count>10</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-28 20:46:38 -0700</bug_when>
    <thetext>I wonder which codes are changed to fix compile errors. Because, it is difficult to find the changes in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475217</commentid>
    <comment_count>11</comment_count>
      <attachid>109119</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-28 21:00:15 -0700</bug_when>
    <thetext>Created attachment 109119
diff_for_easy_review

Attached file is diff after renamed for easy review.
It is same with 109117 without renaming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475758</commentid>
    <comment_count>12</comment_count>
      <attachid>109119</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-29 16:54:21 -0700</bug_when>
    <thetext>Comment on attachment 109119
diff_for_easy_review

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

&gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:834
&gt; +    void* newItems = realloc(priv-&gt;view.items, sizeof(Eina_Inlist*) * (int)rows);

Missing to use C++ casting in (int)rows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475771</commentid>
    <comment_count>13</comment_count>
      <attachid>109225</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-29 17:31:08 -0700</bug_when>
    <thetext>Created attachment 109225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475773</commentid>
    <comment_count>14</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-29 17:32:32 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 109119 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109119&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:834
&gt; &gt; +    void* newItems = realloc(priv-&gt;view.items, sizeof(Eina_Inlist*) * (int)rows);
&gt; 
&gt; Missing to use C++ casting in (int)rows.

I fixed it by removing (int). Other is same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476769</commentid>
    <comment_count>15</comment_count>
      <attachid>109225</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-10-02 22:16:44 -0700</bug_when>
    <thetext>Comment on attachment 109225
Patch

Rubberstamping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476951</commentid>
    <comment_count>16</comment_count>
      <attachid>109225</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-03 07:12:28 -0700</bug_when>
    <thetext>Comment on attachment 109225
Patch

Clearing flags on attachment: 109225

Committed r96495: &lt;http://trac.webkit.org/changeset/96495&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476952</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-03 07:12:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108939</attachid>
            <date>2011-09-27 17:28:12 -0700</date>
            <delta_ts>2011-09-27 17:35:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68599-20110928092810.patch</filename>
            <type>text/plain</type>
            <size>219181</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYxNjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
aW5kZXggZjlkYjM1Yzk0MzE3MjUzOTJiMWNjNjcxMThmNDUxZjJiNWFkNGU2OS4uNzZkY2RkOTdh
YmRiMzNjZTcxZjc3NTU5MDUyY2RiYjhkODgxZDAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKQEAgLTc0LDkgKzc0LDkgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBlZmwvZXdrL2V3a19uZXR3b3JrLmNwcAogICAgIGVmbC9ld2svZXdrX3NldHRpbmdzLmNwcAog
ICAgIGVmbC9ld2svZXdrX3Byb3RvY29sX2hhbmRsZXIuY3BwCi0gICAgZWZsL2V3ay9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZS5jCi0gICAgZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKLSAgICBl
ZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZS5jcHAKKyAgICBlZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCisgICAgZWZsL2V3ay9l
d2tfdGlsZWRfbW9kZWwuY3BwCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAgICBlZmwvZXdr
L2V3a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCmluZGV4IGZlMWI5MDI4YjNjNTRlNGE4YWY2NGY1YzY2OGRkYzFjMTJkZWJhNzkuLjNiOWNh
MWUwNGY4Zjc4MWE1YzExOWM5OTYwNTBiODk5Y2JlMDk0ZTQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMS0wOS0yNyAgQ2hvaSBSeXVhbiAgPHJ5dWFuLmNob2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0VGTF0gUmVuYW1lIGV3a190aWxlZF8qLmMgdG8gZXdrX3RpbGVk
XyouY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODU5OQorCisgICAgICAgIFVzZSBhIEMrKyBjb21waWxlciBmb3IgdGhlc2UgZmlsZXMgYW5kIGZp
eCBjb21waWxlIGlzc3VlcyBhbmQgY29kaW5nIHN0eWxlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jLgorICAgICAgICAqIGV3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbWF0cml4
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4
LmMuCisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2RlbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMuCisKIDIwMTEtMDktMjcgIFJhcGhh
ZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgW0VGTF0g
TWFrZSBld2tfdmlldyBlbWl0IHRoZSAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgc2lnbmFsLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
LmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhOTlmOGFiZWI0ZGViMzRmZjg5ZjgzMGM2Nzhk
ZWU2ZGYyY2Q1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYworKysgL2Rl
di9udWxsCkBAIC0xLDE5MTggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKLQotI2RlZmluZSBfR05VX1NPVVJDRQotI2luY2x1
ZGUgImV3a190aWxlZF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RWNvcmUuaD4KLSNpbmNsdWRlIDxF
aW5hLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8
c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIElEWChjb2wsIHJvdywgcm93c3BhbikgKGNvbCAr
IChyb3cgKiByb3dzcGFuKSkKLQotI2lmICFkZWZpbmVkKE1JTikKLSMgZGVmaW5lIE1JTihhLCBi
KSAoKGEgPCBiKSA/IGEgOiBiKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChNQVgpCi0jIGRlZmlu
ZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKLSNlbmRpZgotCi10eXBlZGVmIGVudW0gX0V3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eTsKLXR5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGE7Ci10eXBlZGVm
IHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtOwotdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9S
ZW5kZXJfUmVxdWVzdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Q7
Ci0KLWVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgewot
ICAgIFBSRV9SRU5ERVJfUFJJT1JJVFlfTE9XID0gMCwgLyoqPCBBcHBlbmQgdGhlIHJlcXVlc3Qg
dG8gdGhlIGxpc3QgKi8KLSAgICBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0ggICAgIC8qKjwgUHJl
cGVuZCB0aGUgcmVxdWVzdCB0byB0aGUgbGlzdCAqLwotfTsKLQotc3RydWN0IF9Fd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtIHsKLSAgICBFSU5BX0lOTElTVDsKLSAgICBFd2tfVGlsZSAqdGls
ZTsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0gICAgfSBn
ZW9tZXRyeTsKLSAgICBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlOwotfTsKLQotc3RydWN0IF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgewotICAgIEVJTkFfSU5MSVNU
OwotICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Ci0gICAgZmxvYXQgem9vbTsKLX07Ci0KLXN0
cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSB7Ci0gICAgRXZhc19PYmplY3RfU21h
cnRfQ2xpcHBlZF9EYXRhIGJhc2U7Ci0gICAgRXZhc19PYmplY3QgKnNlbGY7Ci0gICAgRXZhc19P
YmplY3QgKmNvbnRlbnRzX2NsaXBwZXI7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Jbmxp
c3QgKippdGVtczsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwotICAgICAgICBsb25n
IGNvbHMsIHJvd3M7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBFdmFzX0Nvb3JkIHcs
IGg7Ci0gICAgICAgICAgICBmbG9hdCB6b29tOwotICAgICAgICAgICAgRWluYV9Cb29sIHpvb21f
d2Vha19zbW9vdGhfc2NhbGU6MTsKLSAgICAgICAgfSB0aWxlOwotICAgICAgICBzdHJ1Y3Qgewot
ICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0g
ICAgICAgICAgICB9IGN1ciwgb2xkLCBiYXNlLCB6b29tX2NlbnRlcjsKLSAgICAgICAgfSBvZmZz
ZXQ7Ci0gICAgfSB2aWV3OwotICAgIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7Ci0gICAgc3RydWN0
IHsKLSAgICAgICAgRXdrX1RpbGVfTWF0cml4ICptYXRyaXg7Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgICAgICB9IGJhc2U7Ci0gICAg
ICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7Ci0gICAg
ICAgIH0gY3VyLCBvbGQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKLSAgICB9
IG1vZGVsOwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRh
LCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOwotICAgICAgICB2b2lk
ICpkYXRhOwotICAgICAgICBFaW5hX0lubGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAgICAg
ICAgRWNvcmVfSWRsZXIgKmlkbGVyOwotICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7Ci0gICAg
ICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7Ci0gICAgfSByZW5kZXI7Ci0gICAgc3RydWN0IHsKLSAg
ICAgICAgdm9pZCAqKCpwcmVfY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAg
ICAgdm9pZCAqcHJlX2RhdGE7Ci0gICAgICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwg
dm9pZCAqcHJlX2RhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAgICAgdm9pZCAqcG9zdF9kYXRh
OwotICAgIH0gcHJvY2VzczsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgYW55OjE7
Ci0gICAgICAgIEVpbmFfQm9vbCBwb3M6MTsKLSAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKLSAg
ICAgICAgRWluYV9Cb29sIG1vZGVsOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKLSAg
ICB9IGNoYW5nZWQ7Ci0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgRWNvcmVfRXZlbnRfSGFu
ZGxlciAqc2lnX3VzcjsKLSNlbmRpZgotfTsKLQotc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3Bh
cmVudF9zYyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwotaW50IF9ld2tfdGlsZWRfbG9n
X2RvbSA9IC0xOwotCi0jZGVmaW5lIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAu
Li4pICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHRyID0gZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQob2JqKTsgXAotICAgIGlmICgh
cHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBDUklUSUNBTCgibm8gcHJpdmF0ZSBkYXRhIGluIG9iaj0lcCIsIG9iaik7
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpOwotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKLQotc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICB2b2lkICpkYXRhID0gTlVMTDsKLQotICAgIC8q
IERvIG5vdCBwcm9jZXNzIHVwZGF0ZXMuIE5vdGUgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGdldCB1
cGRhdGVzIHJlcXVlc3RzCi0gICAgICogaW4gdGhlIHF1ZXVlIGluIG9yZGVyIHRvIG5vdCBtaXNz
IGFueSB1cGRhdGVzIGFmdGVyIHRoZSByZW5kZXIgaXMKLSAgICAgKiByZXN1bWVkLgotICAgICAq
LwotICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9n
ZXQocHJpdi0+c2VsZikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcml2LT5wcm9jZXNz
LnByZV9jYikKLSAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nl
c3MucHJlX2RhdGEsIHByaXYtPnNlbGYpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNf
cHJvY2Vzcyhwcml2LT5tb2RlbC5tYXRyaXgpOwotCi0gICAgaWYgKHByaXYtPnByb2Nlc3MucG9z
dF9jYikKLSAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9k
YXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKLX0KLQotc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmx1c2godm9pZCAqZGF0YSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2ID0gZGF0YTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAg
ICBpZiAodHVjKSB7Ci0gICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7Ci0g
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIEVSUigibm8gY2FjaGU/ISIpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBFd2tfVGlsZSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25n
IHJvdywgZmxvYXQgem9vbSkKLXsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFdmFzICpldmFzID0g
ZXZhc19vYmplY3RfZXZhc19nZXQocHJpdi0+c2VsZik7Ci0gICAgaWYgKCFldmFzKSB7Ci0gICAg
ICAgIENSSVRJQ0FMKCJldmFzX29iamVjdF9ldmFzX2dldCBmYWlsZWQhIik7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcKLSAg
ICAgICAgKHByaXYtPm1vZGVsLm1hdHJpeCwgZXZhcywgY29sLCByb3csIHpvb20pOwotCi0gICAg
aWYgKCF0KSB7Ci0gICAgICAgIENSSVRJQ0FMKCJld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcgZmFp
bGVkISIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17
Ci0gICAgaXQtPmdlb21ldHJ5LnggPSB4OwotICAgIGl0LT5nZW9tZXRyeS55ID0geTsKLQotICAg
IGlmIChpdC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2Us
IHgsIHkpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9y
ZXNpemUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoKQotewotICAgIGl0LT5nZW9tZXRyeS53ID0gdzsKLSAgICBpdC0+Z2VvbWV0cnku
aCA9IGg7Ci0KLSAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXpl
KGl0LT50aWxlLT5pbWFnZSwgdywgaCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxf
c2V0KGl0LT50aWxlLT5pbWFnZSwgMCwgMCwgdywgaCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGUgKnQsIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0KQotewotICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgQ1JJVElDQUwoIml0LT50
aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIE5VTEwhIiwgaXQtPnRpbGUpOwotICAgIGl0LT50aWxl
ID0gdDsKLSAgICBldmFzX29iamVjdF9tb3ZlKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5
LngsIGl0LT5nZW9tZXRyeS55KTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmlt
YWdlLCBpdC0+Z2VvbWV0cnkudywgaXQtPmdlb21ldHJ5LmgpOwotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX2ZpbGxfc2V0Ci0gICAgICAgIChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRy
eS53LCBpdC0+Z2VvbWV0cnkuaCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxl
X3NldChpdC0+dGlsZS0+aW1hZ2UsIGl0LT5zbW9vdGhfc2NhbGUpOwotCi0gICAgaWYgKCFld2tf
dGlsZV92aXNpYmxlX2dldCh0KSkKLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Fk
ZCh0LT5pbWFnZSwgcHJpdi0+c2VsZik7Ci0KLSAgICBld2tfdGlsZV9zaG93KHQpOwotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0gKml0LCBkb3VibGUgbGFzdF91c2VkKQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjOwotICAgIGV3a190aWxlX2hpZGUoaXQtPnRpbGUpOwotICAgIGlmICghZXdrX3RpbGVfdmlz
aWJsZV9nZXQoaXQtPnRpbGUpKQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVs
KGl0LT50aWxlLT5pbWFnZSk7Ci0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1v
ZGVsLm1hdHJpeCwgaXQtPnRpbGUsIGxhc3RfdXNlZCk7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwotCi0gICAgaXQtPnRpbGUgPSBOVUxMOwotfQot
Ci1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2Fs
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIEVpbmFfSW5saXN0
ICppdDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdGVtOwotICAgIGludCBp
OwotICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICBm
b3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKLSAgICAgICAgaXQgPSBwcml2
LT52aWV3Lml0ZW1zW2ldOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQot
ICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOwotICAg
IH0KLX0KLQotc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tLCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHByaW9yaXR5KQotewotICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKLQotICAgIE1B
TExPQ19PUl9PT01fUkVUKHIsIHNpemVvZigqciksIEVJTkFfRkFMU0UpOwotCi0gICAgaWYgKHBy
aW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKLSAgICAgICAgcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCi0gICAgICAgICAgICAo
cHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7Ci0g
ICAgZWxzZQotICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFf
aW5saXN0X2FwcGVuZAotICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwotCi0gICAgci0+Y29sID0gY29sOwotICAgIHItPnJv
dyA9IHJvdzsKLSAgICByLT56b29tID0gem9vbTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCi17Ci0gICAgcHJpdi0+cmVu
ZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUKLSAgICAgICAgKHBy
aXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwotICAg
IGZyZWUocik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0g
ICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCi0gICAgICAgIHByaXYtPnJlbmRl
ci5wcmVfcmVuZGVyX3JlcXVlc3RzLAotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3Jl
bmRlcl9yZXF1ZXN0czsKLSAgICB3aGlsZSAoKnBsKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKLSAgICAgICAgciA9IF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7Ci0gICAgICAgICpw
bCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7Ci0gICAgICAgIGZyZWUocik7Ci0gICAg
fQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9y
ZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAg
RWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAg
ICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKLSAgICB3aGlsZSAoaXRlcikgewotICAg
ICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIgPQotICAg
ICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKLSAgICAgICAgICAgICAgICBpdGVy
LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwotICAgICAgICB0
bXAgPSBpdGVyLT5uZXh0OwotICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCBp
dGVyKTsKLSAgICAgICAgaXRlciA9IHRtcDsKLSAgICAgICAgZnJlZShyKTsKLSAgICB9Ci19Ci0K
LS8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEg
Ki8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnJlcTsKLSAg
ICBFaW5hX1JlY3RhbmdsZSBhcmVhOwotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBwcml2LT5t
b2RlbC5tYXRyaXg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWM7Ci0gICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKLSAgICBmbG9hdCB6b29tOwotICAg
IGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICByZXEgPSBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwot
ICAgIGlmICghcmVxKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb2wgPSByZXEtPmNvbDsKLSAg
ICByb3cgPSByZXEtPnJvdzsKLSAgICB6b29tID0gcmVxLT56b29tOwotCi0gICAgaWYgKGV3a190
aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpvb20pKSB7Ci0gICAg
ICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwg
Y29sLCByb3csIHpvb20pOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0KLSAgICB0ID0gX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93LCB6b29tKTsKLSAg
ICBpZiAoIXQpCi0gICAgICAgIGdvdG8gZW5kOwotCi0gICAgYXJlYS54ID0gMDsKLSAgICBhcmVh
LnkgPSAwOwotICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIGFyZWEuaCA9IHBy
aXYtPnZpZXcudGlsZS5oOwotCi0gICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRh
LCB0LCAmYXJlYSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKAotICAg
ICAgICB0LT5pbWFnZSwKLSAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywgYXJlYS5oKTsK
LSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0KTsKLQotICAgIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKLQotZW5kOgotICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHByaXYsIHJlcSk7
Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwotfQot
Ci1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3Nf
aWRsZXJfY2Iodm9pZCAqZGF0YSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2ID0gZGF0YTsKLQotICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKLSAgICAgICAg
ZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEsIHByaXYt
PnNlbGYpOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9wcm9jZXNzX3NpbmdsZShwcml2KTsKLQotICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RfY2Ip
Ci0gICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSwg
ZGF0YSwgcHJpdi0+c2VsZik7Ci0KLSAgICBpZiAoIXByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3Jl
cXVlc3RzKSB7Ci0gICAgICAgIHByaXYtPnJlbmRlci5pZGxlciA9IE5VTEw7Ci0gICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0b3AoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAo
IXByaXYtPnJlbmRlci5pZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWNvcmVfaWRsZXJf
ZGVsKHByaXYtPnJlbmRlci5pZGxlcik7Ci0gICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gTlVMTDsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3By
b2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBpZiAocHJpdi0+cmVuZGVyLmlkbGVyKQotICAgICAgICByZXR1cm47Ci0gICAgcHJpdi0+
cmVuZGVyLmlkbGVyID0gZWNvcmVfaWRsZXJfYWRkKAotICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiLCBwcml2KTsKLX0KLQotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAocHJpdi0+cmVuZGVyLnN1c3BlbmQp
Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfVFJVRTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0b3AocHJpdik7Ci0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQp
Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfRkFMU0U7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxl
cl9zdGFydChwcml2KTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKLXsKLSAgICB1bnNpZ25l
ZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBjb2w7Ci0gICAgdW5zaWduZWQg
bG9uZyBtX3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OwotICAgIGRvdWJsZSBsYXN0
X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICBpZiAobV9jb2wgPj0gcHJpdi0+
bW9kZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJpdi0+bW9kZWwuY3VyLnJvd3MpIHsKLSAgICAg
ICAgaWYgKGl0LT50aWxlKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBFd2tfVGlsZSAqdDsKLSAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYtPnZpZXcudGls
ZS56b29tOwotCi0gICAgICAgIGlmIChpdC0+dGlsZSkgewotICAgICAgICAgICAgRXdrX1RpbGUg
Km9sZCA9IGl0LT50aWxlOwotICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9s
ZC0+Y29sICE9IG1fY29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQotICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNl
ZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChvbGQtPnJvdyA9PSBtX3JvdyAmJiBvbGQtPmNvbCA9
PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0gem9vbSkKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsK
LSAgICAgICAgfQotCi0gICAgICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQo
cHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOwotCi0gICAgICAgIGlmICgh
dCkgewotICAgICAgICAgICAgLyogTk9URTogaXQgbmV2ZXIgcmV0dXJucyBOVUxMIGlmIGl0LT50
aWxlIHdhcyBzZXQhICovCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAgICAgICAg
ICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgTlVMTCEiLCBpdC0+
dGlsZSk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZShwcml2LCBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8KLSAg
ICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKLSAgICAgICAgICAgICAgICB0
ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jvdywg
em9vbSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKHQgIT0gaXQtPnRpbGUpIHsKLSAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKLSAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXQsIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOwotICAgICAgICB9Ci0KLSAgICAgIGVuZDoK
LQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RS
VUU7Ci19Ci0KLXN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQotewotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRoOwot
Ci0gICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChp
dCwgc2l6ZW9mKCppdCksIE5VTEwpOwotCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAg
ICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggKyBwcml2LT52aWV3LnggKyB0dyAgKmNvbDsKLSAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICsgcHJpdi0+dmlldy55ICsgdGggICpyb3c7Ci0KLSAgICBpdC0+dGlsZSA9IE5VTEw7
Ci0KLSAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9v
dGhfc2NhbGU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgeCwg
eSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgp
OwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwg
Y29sLCByb3cpKSB7Ci0gICAgICAgIGZyZWUoaXQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gaXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkKLXsKLSAgICBpZiAoaXQtPnRpbGUpIHsKLSAg
ICAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKLSAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91
c2VkKTsKLSAgICB9Ci0KLSAgICBmcmVlKGl0KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKLXsKLSAgICBpZiAoaXQtPnNt
b290aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChp
dC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+
dGlsZS0+aW1hZ2UsIHNtb290aF9zY2FsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KQotewotICAgIGlmIChwcml2LT5jaGFuZ2VkLmFueSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5nZWQocHJpdi0+c2VsZik7Ci0gICAgcHJpdi0+Y2hh
bmdlZC5hbnkgPSBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0gICAgRWlu
YV9Jbmxpc3QgKm47Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0KLSAgICBpZiAoIWNvdW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBuID0gKCpwX3JvdyktPmxhc3Q7Ci0KLSAgICBmb3IgKGkgPSAw
OyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdDsKLSAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICBuID0gbi0+cHJldjsKLSAgICAgICAgKnBf
cm93ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7Ci0g
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7Ci0gICAg
fQotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlz
dCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkKLXsK
LSAgICB1bnNpZ25lZCBpbnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKLQotICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7Ci0gICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotCi0gICAgICAgIGl0ID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKLSAgICAgICAgaWYgKCFp
dCkgewotICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1
IGluIHJvdyAldS4iLCBpLCBjb3VudCwgcik7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOwotICAgICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICAqcF9yb3cgPSBlaW5hX2lu
bGlzdF9hcHBlbmQoKnBfcm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfcm93X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lu
bGlzdCAqcm93KQotewotICAgIHdoaWxlIChyb3cpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICByb3cgPSByb3ct
Pm5leHQ7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBp
dCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5h
X0lubGlzdCAqKnN0YXJ0LCBFaW5hX0lubGlzdCAqKmVuZCkKLXsKLSAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cm93X2RlbChwcml2LCAqc3RhcnQpOwotICAgICAgICAqc3RhcnQgPSBOVUxMOwotICAgIH0KLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3Qg
KipzdGFydDsKLSAgICBFaW5hX0lubGlzdCAqKmVuZDsKLQotICAgIHN0YXJ0ID0gcHJpdi0+dmll
dy5pdGVtczsKLSAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOwot
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0
YXJ0LCBlbmQpOwotCi0gICAgZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKLSAgICBwcml2LT52aWV3
Lml0ZW1zID0gTlVMTDsKLSAgICBwcml2LT52aWV3LmNvbHMgPSAwOwotICAgIHByaXYtPnZpZXcu
cm93cyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5k
ZXIodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQot
ewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSBkYXRhOwotCi0gICAg
SU5GKCJUT0RPICVwICh2aXNpYmxlPyAlZCkgWyVsdSwlbHVdICVkLCVkICsgJWR4JWQiLAotICAg
ICAgICB0LCB0LT52aXNpYmxlLCB0LT5jb2wsIHQtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJl
YS0+dywgYXJlYS0+aCk7Ci0KLSAgICBpZiAoIXQtPnZpc2libGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChwcml2LT52aWV3LnRpbGUudyAhPSB0LT53IHx8IHByaXYtPnZpZXcudGlsZS5o
ICE9IHQtPmgpCi0gICAgICAgIHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24n
dCBldmVuIGZsYWcgYXMgZGlydHkhCi0KLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihw
cml2LT5yZW5kZXIuY2IpOwotICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5k
YXRhLCB0LCBhcmVhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
ZGF0YV91cGRhdGVfYWRkKHQtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVh
LT5oKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9t
b2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgp
IHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHBy
aXYpOwotCi0gICAgICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9GQUxTRTsKLSAgICAg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwotCi0gICAgICAgIGV3a190aWxlX21h
dHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgfQotCi0gICAgcHJpdi0+bW9kZWwu
bWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0dWMsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBw
cml2LT5tb2RlbC5jdXIucm93cywgcHJpdi0+Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcmVuZGVyLCBwcml2KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICptZW1iZXIp
Ci17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgaWYgKCFwcml2
LT5jb250ZW50c19jbGlwcGVyKQotICAgICAgICByZXR1cm47Ci0gICAgZXZhc19vYmplY3RfY2xp
cF91bnNldChtZW1iZXIpOwotICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+
Y29udGVudHNfY2xpcHBlcikpCi0gICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVu
dHNfY2xpcHBlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQotewot
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIGlmICghcHJpdi0+Y29u
dGVudHNfY2xpcHBlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0
KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgaWYgKGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KG8pKQotICAgICAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIpOwotfQotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1zdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2KQotewotICAgIHN0YXRpYyBpbnQgcnVuID0gMDsKLQotICAgIHJ1bisrOwotCi0gICAgcHJp
bnRmKCJcbi0tLSBCRUdJTiBERUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0t
XG4iCi0gICAgICAgICAgICJ0PSUwLjJmLCBvYmo9JXAsIHByaXY9JXAsIHZpZXcuaXRlbXM9JXAs
IG1hdHJpeD0lcFxuIiwKLSAgICAgICAgICAgcnVuLCBlY29yZV9sb29wX3RpbWVfZ2V0KCksCi0g
ICAgICAgICAgIHByaXYtPnNlbGYsIHByaXYsIHByaXYtPnZpZXcuaXRlbXMsIHByaXYtPm1vZGVs
Lm1hdHJpeCk7Ci0KLSAgICBld2tfdGlsZV9tYXRyaXhfZGJnKHByaXYtPm1vZGVsLm1hdHJpeCk7
Ci0gICAgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcoKTsKLQotICAgIHByaW50ZigiLS0tIEVORCBE
RUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0tXG5cbiIsIHJ1bik7Ci19Ci0K
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCAq
ZGF0YSwgaW50IHR5cGUsIHZvaWQgKmV2ZW50KQotewotICAgIEVjb3JlX0V2ZW50X1NpZ25hbF9V
c2VyICpzaWcgPSAoRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50OwotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSopZGF0YTsKLQotICAgIGlmIChzaWctPm51bWJlciA9PSAyKSB7Ci0gICAgICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOwotICAgICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2Vk
X2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgICAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfYXV0b19mbHVzaCh0dWMpOwotICAgIH0KLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2RiZyhwcml2KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2Ri
Zyhwcml2KTsKLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCi17Ci0g
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdjsKLQotICAgIERCRygibz0lcCIs
IG8pOwotCi0gICAgQ0FMTE9DX09SX09PTV9SRVQocHJpdiwgc2l6ZW9mKCpwcml2KSk7Ci0KLSAg
ICBwcml2LT5zZWxmID0gbzsKLSAgICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEuMDsKLSAgICBw
cml2LT52aWV3LnRpbGUudyA9IERFRkFVTFRfVElMRV9XOwotICAgIHByaXYtPnZpZXcudGlsZS5o
ID0gREVGQVVMVF9USUxFX0g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwotICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSAwOwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKLQot
ICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IDA7Ci0gICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5y
b3dzID0gMTsKLSAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwu
b2xkLnJvd3MgPSAwOwotICAgIHByaXYtPm1vZGVsLndpZHRoID0gMDsKLSAgICBwcml2LT5tb2Rl
bC5oZWlnaHQgPSAwOwotICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKLSAg
ICBwcml2LT5jc3BhY2UgPSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVj
dCBpdC4KLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHByaXYpOwotICAgIF9w
YXJlbnRfc2MuYWRkKG8pOwotCi0gICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2Jq
ZWN0X3JlY3RhbmdsZV9hZGQoCi0gICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pKTsKLSAg
ICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOwotICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKLSAgICBldmFz
X29iamVjdF9jb2xvcl9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwg
MjU1KTsKLSAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbyk7
Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2
LCBOVUxMKTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7
Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7Ci0gICAg
ZXZhc19vYmplY3RfY2xpcF9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5j
bGlwcGVyKTsKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHByaXYtPnNpZ191c3IgPSBl
Y29yZV9ldmVudF9oYW5kbGVyX2FkZAotICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIs
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyLCBwcml2KTsKLSNlbmRpZgotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0
ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIERCRygi
bz0lcCIsIG8pOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOwotCi0gICAgdHVjID0g
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKLQotICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9mbHVzaChwcml2KTsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKHByaXYpOwotICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChwcml2KTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOwotICAg
IGlmIChwcml2LT5zaWdfdXNyKQotICAgICAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRf
aGFuZGxlcl9kZWwocHJpdi0+c2lnX3Vzcik7Ci0jZW5kaWYKLQotICAgIGV3a190aWxlX21hdHJp
eF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2RlbChwcml2LT5jb250ZW50c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9kZWwocHJpdi0+
Y29udGVudHNfY2xpcHBlcik7Ci0KLSAgICBfcGFyZW50X3NjLmRlbChvKTsKLQotI2lmZGVmIERF
QlVHX01FTV9MRUFLUwotICAgIHByaW50ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RP
UkUgREVMRVRFRCAobWF5IGJlIHJlYWwgbGVha3MpXG4iKTsKLSAgICBld2tfdGlsZV9hY2NvdW50
aW5nX2RiZygpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQg
eSkKLXsKLSAgICBEQkcoIm89JXAsIG5ldyBwb3M6ICVkeCVkIiwgbywgeCwgeSk7Ci0KLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQotICAgIGlmIChwcml2LT5jaGFuZ2Vk
LnBvcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHBy
aXYtPnZpZXcueSA9PSB5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5jaGFuZ2VkLnBv
cyA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6
ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCi17Ci0gICAgREJH
KCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBvLCB3LCBoKTsKLQotICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHByaXYtPnZpZXcudyA9PSB3ICYmIHByaXYtPnZpZXcuaCA9
PSBoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RS
VUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Ci19Ci0KLXN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBo
LCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nvb3JkIHRoKQotewotICAgIGxvbmcgY29scywgcm93cywg
b2xkX3Jvd3MsIG9sZF9jb2xzOwotICAgIElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJp
di0+c2VsZiwgdywgaCk7Ci0KLSAgICBjb2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChm
bG9hdCl0dyk7Ci0gICAgcm93cyA9IDEgKyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgp
OwotCi0gICAgSU5GKCJvPSVwIG5ldyBncmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQsIHdh
cyAlbGQsICVsZCIsCi0gICAgICAgIHByaXYtPnNlbGYsIGNvbHMsIHJvd3MsIHByaXYtPnZpZXcu
Y29scywgcHJpdi0+dmlldy5yb3dzKTsKLQotICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29s
cyAmJiBwcml2LT52aWV3LnJvd3MgPT0gcm93cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgb2xk
X2NvbHMgPSBwcml2LT52aWV3LmNvbHM7Ci0gICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7
Ci0KLSAgICBpZiAocm93cyA8IG9sZF9yb3dzKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqc3Rh
cnQsICoqZW5kOwotICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAg
ICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7Ci0gICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOwot
ICAgIH0KLSAgICBSRUFMTE9DX09SX09PTV9SRVQocHJpdi0+dmlldy5pdGVtcywgc2l6ZW9mKEVp
bmFfSW5saXN0KikgKiAoaW50KXJvd3MpOwotICAgIHByaXYtPnZpZXcucm93cyA9IHJvd3M7Ci0g
ICAgcHJpdi0+dmlldy5jb2xzID0gY29sczsKLSAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0g
ICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOwotICAgICAgICBzdGFydCA9IHByaXYt
PnZpZXcuaXRlbXMgKyBvbGRfcm93czsKLSAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyAr
IHJvd3M7Ci0gICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAgICAg
ICAgRWluYV9Cb29sIHI7Ci0gICAgICAgICAgICAqc3RhcnQgPSBOVUxMOwotICAgICAgICAgICAg
ciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAotICAgICAgICAg
ICAgICAgIChwcml2LCBzdGFydCwgMCwgY29scyk7Ci0gICAgICAgICAgICBpZiAoIXIpIHsKLSAg
ICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwg
Y29scyk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93
c19yYW5nZV9kZWwKLSAgICAgICAgICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcuaXRlbXMg
KyBvbGRfcm93cywgc3RhcnQpOwotICAgICAgICAgICAgICAgIHByaXYtPnZpZXcucm93cyA9IG9s
ZF9yb3dzOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChjb2xzICE9IG9sZF9jb2xzKSB7Ci0gICAgICAgIEVpbmFfSW5s
aXN0ICoqc3RhcnQsICoqZW5kOwotICAgICAgICBpbnQgdG9kbyA9IGNvbHMgLSBvbGRfY29sczsK
LSAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgICAgICBlbmQgPSBzdGFydCAr
IE1JTihvbGRfcm93cywgcm93cyk7Ci0gICAgICAgIGlmICh0b2RvID4gMCkgewotICAgICAgICAg
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgICAgICAgICAgRWluYV9C
b29sIHI7Ci0gICAgICAgICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2FkZAotICAgICAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xz
LCB0b2RvKTsKLSAgICAgICAgICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
Q1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1bW5zISIsIHRvZG8pOwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoc3RhcnQtLTsgc3RhcnQgPj0gcHJpdi0+dmlldy5pdGVtczsg
c3RhcnQtLSkKLSAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0
b2RvKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHRv
ZG8gPCAwKSB7Ci0gICAgICAgICAgICB0b2RvID0gLXRvZG87Ci0gICAgICAgICAgICBmb3IgKDsg
c3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQotewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNs
aXBwZXIsIHcsIGgpOwotCi0gICAgcHJpdi0+dmlldy53ID0gdzsKLSAgICBwcml2LT52aWV3Lmgg
PSBoOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCi0g
ICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZpZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7
Ci19Ci0KLS8vIFRPRE86IHJlbW92ZSBtZSBsYXRlci4KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSAqcHJpdikKLXsKLSAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICBw
cmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9kZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNs
ZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9sZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIs
Ci0gICAgICAgICAgIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzLAotICAgICAgICAg
ICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsCi0gICAgICAgICAg
IHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQsCi0gICAgICAgICAgIHByaXYt
Pm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2RlbC5iYXNlLnJvdywKLSAgICAgICAgICAgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55LAotICAgICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJpdi0+dmlldy5vZmZzZXQub2xkLnksCi0gICAgICAg
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsK
LQotICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBlbmQgPSBwcml2LT52aWV3Lml0
ZW1zICsgcHJpdi0+dmlldy5yb3dzOwotICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykg
ewotICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLQotICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFydCwgaXQpIHsKLSAgICAgICAgICAgIHByaW50
ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0cnkueCwgaXQtPmdlb21ldHJ5LnkpOwotCi0gICAg
ICAgICAgICBpZiAoIWl0LT50aWxlKQotICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAg
ICAgOyIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVs
dSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxlLT5jb2wsIGl0LT50aWxlLT5yb3cpOwotICAgICAg
ICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9Ci0gICAgcHJpbnRmKCItLS1cbiIpOwot
fQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92ZSB0b3Agcm93IGRvd24gYXMgbGFzdC4KLSAq
Ci0gKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZpc3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5
IHRoZSB0b3AgdGhhdAotICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBib3R0b20gYW5k
IGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0gKiBUaGlzIGlzIHdvcnRoIGp1c3Qg
d2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAqIHByaXYtPnZpZXcucm93cywgYWZ0
ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKLSAqIGlzIGJl
dHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAqIEBwYXJhbSBjb3VudCB0aGUgbnVt
YmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KLSAqLwotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNv
dW50KQotewotICAgIHVuc2lnbmVkIGludCBsYXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7
Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQg
dGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0aDsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIChs
YXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCArIG9mZl95OwotICAgIEVpbmFfSW5saXN0ICoqaXRy
X3N0YXJ0LCAqKml0cl9lbmQ7Ci0KLSAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwot
ICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBsYXN0X3JvdzsKLQotICAgIGZvciAoOyBjb3VudCA+
IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVpbmFf
SW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtICppdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLng7Ci0gICAgICAgIGludCBjID0gMDsKLQotICAgICAgICBmb3IgKGl0ciA9IGl0cl9z
dGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspCi0gICAgICAgICAgICAqaXRyID0gKihpdHIgKyAx
KTsKLSAgICAgICAgKml0ciA9IHRtcDsKLQotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysr
OwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAg
ICBveCArPSB0dzsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Zp
bGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsKLSAgICAgICAgICAgIGMrKzsKLSAgICAgICAgfQot
ICAgICAgICBveSArPSB0aDsKLSAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0g
b2ZmX3k7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBNb3ZlIGJvdHRvbSByb3cgdXAgYXMg
Zmlyc3QuCi0gKgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0
IGxvZ2ljYWxseSB0aGUgYm90dG9tIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cg
YXQgdG9wIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMuCi0gKgotICogVGhpcyBpcyB3
b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFuIEBjCi0gKiBwcml2LT52aWV3
LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0
Ci0gKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4KLSAqCi0gKiBAcGFyYW0gY291
bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCi0gKi8KLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5z
aWduZWQgaW50IGNvdW50KQotewotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUu
dzsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29y
ZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGNvdW50ICogdGg7Ci0gICAgRXZh
c19Db29yZCBveSA9IHkgKyBvZmZfeSArIChjb3VudCAtIDEpICogdGg7Ci0gICAgRWluYV9Jbmxp
c3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsKLQotICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcu
aXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAxOwotICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0
ZW1zOwotCi0gICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewotICAgICAgICBFaW5hX0lu
bGlzdCAqKml0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7Ci0gICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFdmFzX0Nvb3Jk
IG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICAgICAgaW50IGMgPSAwOwot
Ci0gICAgICAgIGZvciAoaXRyID0gaXRyX3N0YXJ0OyBpdHIgPiBpdHJfZW5kOyBpdHItLSkKLSAg
ICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEpOwotICAgICAgICAqaXRyID0gdG1wOwotCi0gICAg
ICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
dG1wLCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92
ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgMCk7Ci0gICAgICAgICAg
ICBjKys7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgLT0gdGg7Ci0gICAgfQotICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95OwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92
ZSBsZWZ0LW1vc3QgKGZpcnN0KSBjb2x1bW4gcmlnaHQgYXMgbGFzdCAocmlnaHQtbW9zdCkuCi0g
KgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxs
eSB0aGUgZmlyc3QgY29sIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgbGFz
dCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgotICoKLSAqIFRoaXMgaXMgd29ydGgg
anVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYwotICogcHJpdi0+dmlldy5jb2xz
LCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAotICog
aXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCi0gKgotICogQHBhcmFtIGNvdW50IHRo
ZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVk
IGludCBjb3VudCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2LT52aWV3
LmNvbHMgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICBF
dmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29yZCBvZmZfeCA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICogdHc7Ci0gICAgRXZhc19Db29yZCBv
eSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3QgKippdHI7
Ci0gICAgRWluYV9Jbmxpc3QgKippdHJfZW5kOwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVt
czsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIHIgPSAwOwotCi0g
ICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0gY291bnQ7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRy
X2VuZDsgaXRyKyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2Nv
bCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9
IGxhc3RfY29sIC0gY291bnQgKyAxOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrLCBjKyssIG94ICs9IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtICppdDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgq
aXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAgICAgICppdHIgPSBl
aW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0cik7Ci0KLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsKLSAgICAgICAgfQot
ICAgICAgICBveSArPSB0aDsKLSAgICB9Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
PSBvZmZfeDsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIE1vdmUgcmlnaHQtbW9zdCAobGFz
dCkgY29sdW1uIGxlZnQgYXMgZmlyc3QgKGxlZnQtbW9zdCkuCi0gKgotICogVGhlIGZpbmFsIHJl
c3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgbGFzdCBjb2wgdGhh
dAotICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBmaXJzdCBhbmQgZmlsbGVkIHdpdGgg
bmV3IG1vZGVsIGl0ZW1zLgotICoKLSAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50
IGlzIHNtYWxsZXIgdGhhbiBAYwotICogcHJpdi0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBp
cyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAotICogaXMgYmV0dGVyIHRvIHRyaWdn
ZXIgZnVsbCByZWZpbGwuCi0gKgotICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMg
dG8gcmVwZWF0IHRoZSBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0g
ICAgdW5zaWduZWQgaW50IHI7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53
OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICBFdmFzX0Nvb3Jk
IG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IC0gY291bnQgKiB0dzsKLSAgICBFdmFz
X0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFaW5hX0lubGlz
dCAqKml0ciwgKippdHJfZW5kOwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBp
dHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIHIgPSAwOwotCi0gICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRy
KyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChjb3VudCAtIDEpICogdHcg
KyBvZmZfeDsKLSAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBjb3VudCAtIDE7Ci0KLSAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwgb3ggLT0gdHcpIHsKLSAgICAgICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICAgICAgaXQgPSBF
SU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSk7Ci0gICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRy
LCAoKml0ciktPmxhc3QpOwotCi0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0g
dGg7Ci0gICAgfQotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Ci19Ci0K
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
aW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKLXsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJf
ZW5kOwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKLSAgICB1bnNpZ25lZCBp
bnQgcjsKLQotICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsK
LQotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKLQotICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgIG95
ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcu
aXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICByID0gMDsK
LQotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sIC09IHN0ZXBfeDsKLSAgICBwcml2LT5tb2RlbC5i
YXNlLnJvdyAtPSBzdGVwX3k7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIr
KykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICAgICAg
RXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKLSAg
ICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAg
ICAgICAgYysrOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAgICAgb3kg
Kz0gdGg7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2Vu
ZDsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7Ci0KLSAgICBldmFzX29iamVj
dF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7Ci0KLSAgICB0dyA9IHByaXYtPnZpZXcu
dGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAgICBiYXNlX294ID0geCAr
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnk7Ci0KLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBp
dHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFdmFz
X0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBp
dCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICB9Ci0gICAgICAgIG95ICs9
IHRoOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdikKLXsKLSAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBw
cml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAgICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKLSAgICBFdmFzX0Nvb3JkIHR3
LCB0aDsKLSAgICBpbnQgc3RlcF95LCBzdGVwX3g7Ci0KLSAgICBJTkYoIm89JXAsIG9mZnNldDog
JSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAotICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7Ci0KLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAg
ICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBzdGVw
X3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93ID0g
LXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9kZWwu
YmFzZS5yb3cgLSBuZXdfcm93OwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55OwotICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJp
di0+dmlldy54LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcu
eSk7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKLQotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAocHJpdiwgcHJp
di0+dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBfeCwgc3RlcF95KTsKLX0KLQotc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkp
Ci17Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+
dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7
Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OwotCi0gICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQs
ICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwotCi0gICAgaWYgKCFk
eCAmJiAhZHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7
Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2
LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OwotICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2Uu
Y29sIC0gbmV3X2NvbDsKLSAgICBsb25nIG5ld19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgLyB0aDsKLSAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7Ci0K
LSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54Owot
ICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Ci0g
ICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAg
ICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCi0gICAgICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKLQotICAgIGlmICgoc3RlcF94
IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeCA+
IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeSA8IDAg
JiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJvd3MpCi0gICAgICAgIHx8IChzdGVwX3kgPiAwICYm
IHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3MpKSB7Ci0KLSAgICAgICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICogdHc7Ci0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRoOwotCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJp
di0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICs9IGR5OwotCi0gICAgaWYgKHN0ZXBfeSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAocHJpdiwgeCwgeSwgLXN0ZXBfeSk7Ci0gICAgZWxz
ZSBpZiAoc3RlcF95ID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBfeSk7Ci0KLSAgICBpZiAoc3RlcF94IDwgMCkKLSAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHks
IC1zdGVwX3gpOwotICAgIGVsc2UgaWYgKHN0ZXBfeCA+IDApCi0gICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcF94KTsKLQotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9w
b3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpCi17Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5
KHByaXYsIHgsIHkpOwotICAgIHByaXYtPnZpZXcueCA9IHg7Ci0gICAgcHJpdi0+dmlldy55ID0g
eTsKLSAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVy
LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKLSAgICAg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2LT52aWV3LnkpOwotfQotCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBFaW5hX0lubGlzdCAqaXQ7Ci0gICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKLSAgICBpbnQgaSwgajsKLQotICAgIGZv
ciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgewotICAgICAgICBpdCA9IHByaXYt
PnZpZXcuaXRlbXNbaV07Ci0gICAgICAgIGogPSAwOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKGl0LCBpdGVtKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
ZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKLXsKLSAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0KLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
bywgJngsICZ5LCAmdywgJmgpOwotICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgbywg
eCwgeSwgdywgaCk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQot
ICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlOQV9GQUxTRTsKLQotICAgIGV3a190aWxlX21hdHJp
eF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4KTsKLQotICAgIGlmICghcHJpdi0+cmVuZGVyLnN1
c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewotICAgICAgICB1bnNpZ25lZCBsb25nIGNv
bHMsIHJvd3M7Ci0KLSAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmll
dy50aWxlLncgKyAxOwotICAgICAgICByb3dzID0gcHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+
dmlldy50aWxlLmggKyAxOwotCi0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+
bW9kZWwuY3VyLmNvbHM7Ci0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9k
ZWwuY3VyLnJvd3M7Ci0gICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gY29sczsKLSAgICAg
ICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSByb3dzOwotICAgICAgICBpZiAocHJpdi0+bW9kZWwu
b2xkLmNvbHMgPiBjb2xzKQotICAgICAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xz
OwotICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLnJvd3MgPiByb3dzKQotICAgICAgICAgICAg
cm93cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dzOwotICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVz
aXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29scywgcm93cyk7Ci0gICAgfQotCi0gICAgaWYgKHBy
aXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0g
eSkpIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9w
b3MocHJpdiwgeCwgeSk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQucG9zID0gRUlOQV9GQUxTRTsK
LSAgICB9Ci0gICAgaWYgKHByaXYtPmNoYW5nZWQub2Zmc2V0KSB7Ci0gICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KHByaXYsIHgsIHkpOwotICAg
ICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYg
KHByaXYtPmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgdywgaCk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQu
c2l6ZSA9IEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVu
ZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7
Ci0gICAgICAgIHJlY3QueCA9IDA7Ci0gICAgICAgIHJlY3QueSA9IDA7Ci0gICAgICAgIHJlY3Qu
dyA9IHByaXYtPm1vZGVsLndpZHRoOwotICAgICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWln
aHQ7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKLSAgICAgICAgcHJpdi0+
Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShw
cml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVp
Z2h0KTsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9v
ZmZzZXRfZm9yY2UocHJpdik7Ci0KLSAgICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNz
IGFueSBpbXBvcnRhbnQgcmVwYWludCBieQotICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9s
ZSB2aWV3cG9ydCAqLwotICAgICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSByID0KLSAgICAgICAg
ICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OwotICAg
ICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwotICAgIH0K
LQotICAgIGV3a190aWxlX21hdHJpeF90aGF3KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwotCi0gICAgaWYg
KHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLncKLSAgICAgICAgfHwgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID4gMAotICAgICAgICB8fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0g
LSBwcml2LT52aWV3LnRpbGUuaCkKLSAgICAgICAgRVJSKCJpbmNvcnJlY3QgYmFzZSBvZmZzZXQg
JSs0ZCwlKzRkLCB0aWxlPSVkeCVkLCBjdXI9JSs0ZCwlKzRkXG4iLAotICAgICAgICAgICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnksCi0gICAgICAg
ICAgICBwcml2LT52aWV3LnRpbGUudywgcHJpdi0+dmlldy50aWxlLmgsCi0gICAgICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwotCi19Ci0K
LUV2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoRXZhcyAqZSkKLXsKLSAg
ICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQgPSBOVUxMOwotCi0gICAgaWYgKF9ld2tfdGlsZWRf
bG9nX2RvbSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFp
bl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiLCBOVUxMKTsKLQotICAgIGlmICgh
c21hcnQpIHsKLSAgICAgICAgc3RhdGljIEV2YXNfU21hcnRfQ2xhc3Mgc2MgPQotICAgICAgICAg
ICAgRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmUiKTsKLQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3NldCgm
c2MpOwotICAgICAgICBfcGFyZW50X3NjID0gc2M7Ci0KLSAgICAgICAgc2MuYWRkID0gX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZDsKLSAgICAgICAgc2MuZGVsID0gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbDsKLSAgICAgICAgc2MucmVzaXplID0gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZTsKLSAgICAgICAgc2MubW92ZSA9IF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlOwotICAgICAgICBzYy5jYWxjdWxhdGUgPSBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlOwotICAgICAgICBzYy5tZW1iZXJf
YWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQ7Ci0gICAgICAg
IHNjLm1lbWJlcl9kZWwgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2Rl
bDsKLQotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBzbWFydCk7Ci19Ci0KLXZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldChFdmFzX09iamVjdCAqbywgRWlu
YV9Cb29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqYXJlYSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oY2IpOwotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIHBy
aXYtPnJlbmRlci5jYiA9IGNiOwotICAgIHByaXYtPnJlbmRlci5kYXRhID0gKHZvaWQqKWRhdGE7
Ci19Ci0KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIE5VTEwpOwotICAgIHJldHVybiBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotfQotCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBpZiAoZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIHR1Yyk7Ci19Ci0K
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29m
ZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgLyogVE9ETzogY2hlY2sgb2Zmc2V0IGdv
IG91dCBvZiBib3VuZHMsIGNsYW1wICovCi0gICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkK
LSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCA9IHg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSB5OwotCi0gICAgcHJpdi0+Y2hh
bmdlZC5vZmZzZXQgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2No
YW5nZWQocHJpdik7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCAq
bywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgREJHKCJvPSVwLCB4PSVkLCB5
PSVkIiwgbywgeCwgeSk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBF
SU5BX0ZBTFNFKTsKLSAgICBpZiAoeCA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5ID09
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotCi0g
ICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0
X2ludGVybmFsKHByaXYsIHgsIHkpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCBk
eCwgRXZhc19Db29yZCBkeSkKLXsKLSAgICBEQkcoIm89JXAsIGR4PSVkLCBkeT0lZCIsIG8sIGR4
LCBkeSk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNF
KTsKLSAgICBpZiAoIWR4ICYmICFkeSkKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLQotICAg
IHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9p
bnRlcm5hbAotICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkeCwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5
LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQotewotICAgICpvZmZ4ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7Ci0gICAgKm9mZnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eTsKLQotICAgIGlmIChmYWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6b29tKSA8IFpPT01f
U1RFUF9NSU4pIHsKLSAgICAgICAgREJHKCJpZ25vcmVkIGFzIHpvb20gZGlmZmVyZW5jZSBpcyA8
ICVmOiAlZiIsCi0gICAgICAgICAgICAoZG91YmxlKVpPT01fU1RFUF9NSU4sIGZhYnNmKHByaXYt
PnZpZXcudGlsZS56b29tIC0gKnpvb20pKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAg
ICB9Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zs
dXNoKHByaXYpOwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotCi0gICAgKnpvb20gPSBST1VOREVE
X1pPT00ocHJpdi0+dmlldy50aWxlLncsICp6b29tKTsKLQotICAgIHR3ID0gcHJpdi0+dmlldy50
aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIGZsb2F0IHNjYWxlID0g
Knpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKLQotICAgIHByaXYtPnZpZXcudGlsZS56b29t
ID0gKnpvb207Ci0gICAgLy8gdG9kbzogY2hlY2sgY3ggWzAsIHddLi4uCi0gICAgcHJpdi0+dmll
dy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21f
Y2VudGVyLnkgPSBjeTsKLQotCi0gICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcu
aCkgewotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwotICAgICAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAg
IH0KLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0OwotCi0gICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9
IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7Ci0gICAgRXZhc19D
b29yZCBieCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGN4KSAqIHNjYWxlOwot
ICAgIEV2YXNfQ29vcmQgYnkgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgLSBjeSkg
KiBzY2FsZTsKLQotICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lkdGggPSBwcml2LT5tb2RlbC53aWR0
aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVp
Z2h0ICogc2NhbGU7Ci0KLSAgICBpZiAobW9kZWxfd2lkdGggPCBwcml2LT52aWV3LncgfHwgbmV3
X3ggPj0gMCkKLSAgICAgICAgbmV3X3ggPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeCArIHByaXYt
PnZpZXcudyA+PSBtb2RlbF93aWR0aCkKLSAgICAgICAgbmV3X3ggPSAtbW9kZWxfd2lkdGggKyBw
cml2LT52aWV3Lnc7Ci0KLSAgICBpZiAobW9kZWxfaGVpZ2h0IDwgcHJpdi0+dmlldy5oIHx8IG5l
d195ID49IDApCi0gICAgICAgIG5ld195ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3kgKyBwcml2
LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0KQotICAgICAgICBuZXdfeSA9IC1tb2RlbF9oZWlnaHQg
KyBwcml2LT52aWV3Lmg7Ci0KLSAgICBieCA9IG5ld194ICUgdHc7Ci0gICAgcHJpdi0+bW9kZWwu
YmFzZS5jb2wgPSAtIG5ld194IC8gdHc7Ci0gICAgYnkgPSBuZXdfeSAlIHRoOwotICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93ID0gLSBuZXdfeSAvIHRoOwotCi0gICAgcHJpdi0+Y2hhbmdlZC5zaXpl
ID0gRUlOQV9UUlVFOwotICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7Ci0gICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Ci0KLSAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3
X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gYng7Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID0gYnk7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnk7Ci0gICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsK
LSAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwotCi0gICAgZXZhc19vYmplY3Rf
bW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgbmV3X3ggKyBw
cml2LT52aWV3LngsCi0gICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKLQotICAgIEV2YXNfQ29v
cmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAgRXZh
c19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
OwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOwotCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAg
ICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0g
Kml0cjsKLQotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7
Ci0gICAgICAgICAgICBveCArPSB0dzsKLSAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0ICp6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5
KQotewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpKnpvb20pOwotCi0gICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0KLSAgICByZXR1
cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKHByaXYsIHpvb20s
IGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3Jk
IGN4LCBFdmFzX0Nvb3JkIGN5KQotewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3Vi
bGUpem9vbSk7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxT
RSk7Ci0gICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcuaCkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsK
LSAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsKLQotICAgIGZsb2F0IHNjYWxlID0g
em9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwotCi0gICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9P
TShwcml2LT52aWV3LnRpbGUudywgc2NhbGUpOwotICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJ
WkUodHcsIHByaXYtPnZpZXcudGlsZS53KTsKLSAgICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKHBy
aXYtPnZpZXcudGlsZS5oLCBzY2FsZSk7Ci0gICAgem9vbSA9IHNjYWxlICogcHJpdi0+dmlldy50
aWxlLnpvb207Ci0KLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3dpZHRoID0gcHJpdi0+bW9kZWwud2lk
dGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX2hlaWdodCA9IHByaXYtPm1vZGVsLmhl
aWdodCAqIHNjYWxlOwotCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIsIG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOwotCi0gICAgaW50IHZyb3dzID0gY2Vp
bCgoZmxvYXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSArIDE7Ci0gICAgaW50IHZjb2xzID0g
Y2VpbCgoZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3KSArIDE7Ci0gICAgRXZhc19Db29y
ZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0g
ICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kp
ICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBieCA9IG5ld194ICUgdHc7Ci0gICAgRXZhc19Db29y
ZCBieSA9IG5ld195ICUgdGg7Ci0gICAgdW5zaWduZWQgbG9uZyBiYXNlX3JvdyA9IC1uZXdfeSAv
IHRoOwotICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAtbmV3X3ggLyB0dzsKLQotICAgIGlm
IChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlX2NvbCAhPSBwcml2LT5t
b2RlbC5iYXNlLmNvbCkgewotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IGJhc2Vfcm93
OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJhc2VfY29sOwotICAgICAgICByZWNh
bGMgPSBFSU5BX1RSVUU7Ci0gICAgfQotCi0gICAgaWYgKHZyb3dzID4gcHJpdi0+dmlldy5yb3dz
IHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQotICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7
Ci0KLSAgICBpZiAocmVjYWxjKSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgdywgaDsKLSAgICAgICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIE5VTEwsIE5VTEwsICZ3LCAmaCk7Ci0gICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKHByaXYsIHcsIGgsIHR3
LCB0aCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhw
cml2KTsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhw
cml2KTsKLSAgICB9Ci0KLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBieCArIHByaXYtPnZpZXcu
eDsKLSAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7Ci0KLSAgICBldmFzX29i
amVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICBu
ZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+
dmlldy55KTsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0
ciArIHByaXYtPnZpZXcucm93czsKLQotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykg
ewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRWluYV9Jbmxpc3Qg
KmxzdCA9ICppdHI7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7Ci0g
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kp
OwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0
dywgdGgpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0g
dGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBF
dmFzX0Nvb3JkIGgpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0g
ICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLng7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55Owot
ICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgRXZhc19D
b29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0g
cHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OwotCi0gICAgaWYgKC1uZXdfeCA+IHcpIHsKLSAgICAgICAgbmV3X3ggPSAtdzsKLSAgICAgICAg
YnggPSBuZXdfeCAlIHR3OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAv
IHR3OwotICAgIH0KLQotICAgIGlmICgtbmV3X3kgPiBoKSB7Ci0gICAgICAgIG5ld195ID0gLWg7
Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cg
PSAtbmV3X3kgLyB0aDsKLSAgICB9Ci0KLSAgICBpZiAoYnggPj0gMCB8fCBieCA8PSAtMiAqIHBy
aXYtPnZpZXcudGlsZS53KSB7Ci0gICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKLSAgICB9Ci0KLSAgICBpZiAoYnkgPj0g
MCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKSB7Ci0gICAgICAgIGJ5ID0gbmV3X3kg
JSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKLSAgICB9
Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdf
eDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IGJ4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5Owot
ICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgICAg
ICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAgICAgICAgICAgICAgICAgICAgbmV3
X3kgKyBwcml2LT52aWV3LnkpOwotCi0gICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2
LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0KLSAgICBpdHIgPSBwcml2LT52
aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0KLSAgICBm
b3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJh
c2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwotCi0gICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3
OwotICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLX0KLQotdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAq
bywgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotCi0gICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OwotICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoX3Nj
YWxlOwotCi0gICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
Kml0ciwgaXQpCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldAotICAgICAgICAgICAg
ICAgICAgICAoaXQsIHNtb290aF9zY2FsZSk7Ci0gICAgfQotfQotCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqdXBkYXRlKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJ
TkFfRkFMU0UpOwotCi0gICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICByZXR1cm4gZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2
LT5tb2RlbC5tYXRyaXgsIHVwZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcml2LT52aWV3LnRpbGUuem9vbSk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLSAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9jYiA9
IGNiOwotICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0YTsKLX0KLQotdm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19P
YmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09i
amVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2I7Ci0gICAgcHJpdi0+
cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8pCi17Ci0gICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIocHJp
di0+bW9kZWwubWF0cml4KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250
ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQg
aGVpZ2h0KQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAg
aWYgKHdpZHRoID09IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9PSBwcml2LT5tb2RlbC5o
ZWlnaHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByaXYtPm1vZGVsLndpZHRoID0gd2lkdGg7
Ci0gICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX1RSVUU7Ci0KLSAgICBEQkcoIndpZHRoLGhlaWdodD0lZCwgJWQiLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKLX0K
LQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KEV2YXNf
T2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVuZGVyLmRpc2FibGVkKQot
ICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKLX0KLQotdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9
IE5VTEw7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7Ci0gICAgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkgPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gMDsKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgIHByaXYtPm1v
ZGVsLmJhc2UuY29sID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7Ci0gICAgcHJp
di0+bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKLSAg
ICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAw
OwotICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUsIFNUQVRVUyBCRUZP
UkUgREVMRVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfbWVtX2RiZyhwcml2KTsKLSNlbmRpZgotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2KTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9jbGVhcih0dWMpOwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgcHJp
bnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJFQ1JFQVRJTkcgVElM
RSBNQVRSSVg6XG4iKTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2
KTsKLSNlbmRpZgotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKLXsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBFaW5hX1RpbGVfR3JpZF9T
bGljZXIgc2xpY2VyOwotICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8gKmluZm87Ci0gICAg
RXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0KLSAg
ICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0g
ICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7Ci0KLSAgICBp
ZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywg
dGgpKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xpY2VyIGZvciAlZCwl
ZCslZHglZCB0aWxlPSVkeCVkIiwKLSAgICAgICAgICAgIHgsIHksIHcsIGgsIHR3LCB0aCk7Ci0g
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIHdoaWxlIChlaW5hX3RpbGVf
Z3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBjID0gaW5mby0+Y29sOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIHIgPSBp
bmZvLT5yb3c7Ci0gICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9hZGQocHJpdiwgYywgciwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKLQotICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpvb20pOwotICAgIHJl
dHVybiBFSU5BX1RSVUU7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5zaWduZWQgaW50IG4s
IGZsb2F0IHpvb20pCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlO
QV9GQUxTRSk7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2Nv
bCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
LQotICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBwcml2LT52aWV3LnJv
d3M9JWx1IiwKLSAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBuLCBwcml2LT52aWV3
LnJvd3MpOwotICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVsLmJhc2Uucm93IC0gbjsK
LSAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG47Ci0gICAgZW5k
X3JvdyA9IE1JTihwcml2LT5tb2RlbC5jdXIucm93cyAtIDEsCi0gICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC5iYXNlLnJvdyArIHByaXYtPnZpZXcucm93cyArIG4gLSAxKTsKLSAgICBlbmRf
Y29sID0gTUlOKHByaXYtPm1vZGVsLmN1ci5jb2xzIC0gMSwKLSAgICAgICAgICAgICAgICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAtIDEpOwotCi0gICAgSU5G
KCJzdGFydF9yb3c9JWx1LCBlbmRfcm93PSVsdSwgc3RhcnRfY29sPSVsdSwgZW5kX2NvbD0lbHUi
LAotICAgICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOwotCi0g
ICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7Ci0KLSAgICBm
b3IgKGkgPSBzdGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsrKQotICAgICAgICBmb3IgKGogPSBz
dGFydF9jb2w7IGogPD0gZW5kX2NvbDsgaisrKQotICAgICAgICAgICAgaWYgKCFfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChwcml2LCBqLCBpLCB6b29tLCBQ
UkVfUkVOREVSX1BSSU9SSVRZX0xPVykpCi0gICAgICAgICAgICAgICAgZ290byBzdGFydF9wcm9j
ZXNzaW5nOwotCi1zdGFydF9wcm9jZXNzaW5nOgotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0KLSAgICB0dWMgPSBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGggPSAoZW5k
X3JvdyAtIHN0YXJ0X3JvdyArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxl
LmgsIHpvb20pOwotICAgIHcgPSAoZW5kX2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpF
X0FUX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pOwotICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9sb2NrX2FyZWEodHVjLAotICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpFX0FU
X1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pLAotICAgICAgICAgICAgc3RhcnRfcm93ICog
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHpvb20pLCB3LCBoLCB6b29tKTsK
LQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pCi17Ci0gICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0K
LSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKHBy
aXYpOwotCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+
bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVj
KTsKLX0KLQotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVy
KEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYs
IEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJs
ZV9yZW5kZXIocHJpdik7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9l
bmFibGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9j
aGFuZ2VkKHByaXYpOwotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxl
X3JlbmRlcihwcml2KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1YjljZWExMGVkMmI1YjQyZTg5MDk4NGU2
YjliMmMxODNlN2U5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCkBAIC0wLDAgKzEsMTkyMiBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKKworI2luY2x1
ZGUgImV3a190aWxlZF9tYXRyaXguaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgor
I2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRp
by5oPiAvLyBYWFggUkVNT1ZFIE1FIExBVEVSCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgSURYKGNvbCwgcm93LCByb3dzcGFuKSAoY29sICsgKHJv
dyAqIHJvd3NwYW4pKQorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbTsKK3R5
cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0OworCitlbnVtIF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHsKKyAgICBQUkVfUkVOREVS
X1BSSU9SSVRZX0xPVyA9IDAsIC8qKjwgQXBwZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0ICov
CisgICAgUFJFX1JFTkRFUl9QUklPUklUWV9ISUdIICAgICAvKio8IFByZXBlbmQgdGhlIHJlcXVl
c3QgdG8gdGhlIGxpc3QgKi8KK307Cit0eXBlZGVmIGVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0
b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRl
cl9Qcmlvcml0eTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIHsKKyAg
ICBFSU5BX0lOTElTVDsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBzdHJ1Y3QgeworICAgICAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgfSBnZW9tZXRyeTsKKyAgICBFaW5hX0Jvb2wg
c21vb3RoX3NjYWxlOworfTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVf
UmVuZGVyX1JlcXVlc3QgeworICAgIEVJTkFfSU5MSVNUOworICAgIHVuc2lnbmVkIGxvbmcgY29s
LCByb3c7CisgICAgZmxvYXQgem9vbTsKK307CisKK3N0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSB7CisgICAgRXZhc19PYmplY3RfU21hcnRfQ2xpcHBlZF9EYXRhIGJhc2U7Cisg
ICAgRXZhc19PYmplY3QgKnNlbGY7CisgICAgRXZhc19PYmplY3QgKmNvbnRlbnRzX2NsaXBwZXI7
CisgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9Jbmxpc3QgKippdGVtczsKKyAgICAgICAgRXZh
c19Db29yZCB4LCB5LCB3LCBoOworICAgICAgICBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgICAgICAgICBmbG9hdCB6
b29tOworICAgICAgICAgICAgRWluYV9Cb29sIHpvb21fd2Vha19zbW9vdGhfc2NhbGU6MTsKKyAg
ICAgICAgfSB0aWxlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CisgICAgICAgICAgICB9IGN1ciwgb2xkLCBi
YXNlLCB6b29tX2NlbnRlcjsKKyAgICAgICAgfSBvZmZzZXQ7CisgICAgfSB2aWV3OworICAgIEV2
YXNfQ29sb3JzcGFjZSBjc3BhY2U7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXdrX1RpbGVfTWF0
cml4ICptYXRyaXg7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGNvbCwgcm93OworICAgICAgICB9IGJhc2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIH0gY3VyLCBvbGQ7CisgICAgICAg
IEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKKyAgICB9IG1vZGVsOworICAgIHN0cnVjdCB7Cisg
ICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWlu
YV9SZWN0YW5nbGUgKmFyZWEpOworICAgICAgICB2b2lkICpkYXRhOworICAgICAgICBFaW5hX0lu
bGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICAgICAgRWNvcmVfSWRsZXIgKmlkbGVyOwor
ICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7CisgICAgICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7
CisgICAgfSByZW5kZXI7CisgICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAqKCpwcmVfY2IpKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcHJlX2RhdGE7CisgICAg
ICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEsIEV2YXNfT2Jq
ZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcG9zdF9kYXRhOworICAgIH0gcHJvY2VzczsKKyAgICBz
dHJ1Y3QgeworICAgICAgICBFaW5hX0Jvb2wgYW55OjE7CisgICAgICAgIEVpbmFfQm9vbCBwb3M6
MTsKKyAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKKyAgICAgICAgRWluYV9Cb29sIG1vZGVsOjE7
CisgICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKKyAgICB9IGNoYW5nZWQ7CisjaWZkZWYgREVC
VUdfTUVNX0xFQUtTCisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciAqc2lnX3VzcjsKKyNlbmRpZgor
fTsKKworc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVWQVNfU01BUlRfQ0xB
U1NfSU5JVF9OVUxMOworaW50IF9ld2tfdGlsZWRfbG9nX2RvbSA9IC0xOworCisjZGVmaW5lIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAuLi4pICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0
KG9iaikpOyBcCisgICAgaWYgKCFwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENSSVRJQ0FMKCJubyBwcml2YXRlIGRh
dGEgaW4gb2JqPSVwIiwgb2JqKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBf
X1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7CitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpOworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpOwor
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIHZvaWQgKmRh
dGEgPSAwOworCisgICAgLyogRG8gbm90IHByb2Nlc3MgdXBkYXRlcy4gTm90ZSB0aGF0IHdlIHN0
aWxsIHdhbnQgdG8gZ2V0IHVwZGF0ZXMgcmVxdWVzdHMKKyAgICAgKiBpbiB0aGUgcXVldWUgaW4g
b3JkZXIgdG8gbm90IG1pc3MgYW55IHVwZGF0ZXMgYWZ0ZXIgdGhlIHJlbmRlciBpcworICAgICAq
IHJlc3VtZWQuCisgICAgICovCisgICAgaWYgKHByaXYtPnJlbmRlci5zdXNwZW5kIHx8ICFldmFz
X29iamVjdF92aXNpYmxlX2dldChwcml2LT5zZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQorICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5w
cmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+c2VsZik7CisKKyAgICBld2tfdGls
ZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBpZiAo
cHJpdi0+cHJvY2Vzcy5wb3N0X2NiKQorICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IocHJp
di0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOworfQorCitzdGF0aWMgaW50
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lkICpkYXRhKQoreworICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMg
PSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwor
CisgICAgaWYgKHR1YykgeworICAgICAgICBEQkcoImZsdXNoIHVudXNlZCB0aWxlIGNhY2hlLiIp
OworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgIH0g
ZWxzZQorICAgICAgICBFUlIoIm5vIGNhY2hlPyEiKTsKKworICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgRXdrX1RpbGUgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQg
bG9uZyByb3csIGZsb2F0IHpvb20pCit7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRXZhcyAqZXZh
cyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYpOworICAgIGlmICghZXZhcykgewor
ICAgICAgICBDUklUSUNBTCgiZXZhc19vYmplY3RfZXZhc19nZXQgZmFpbGVkISIpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0ID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3Cisg
ICAgICAgIChwcml2LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93LCB6b29tKTsKKworICAg
IGlmICghdCkgeworICAgICAgICBDUklUSUNBTCgiZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3IGZh
aWxlZCEiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorewor
ICAgIGl0LT5nZW9tZXRyeS54ID0geDsKKyAgICBpdC0+Z2VvbWV0cnkueSA9IHk7CisKKyAgICBp
ZiAoaXQtPnRpbGUpCisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCB4
LCB5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVz
aXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCkKK3sKKyAgICBpdC0+Z2VvbWV0cnkudyA9IHc7CisgICAgaXQtPmdlb21ldHJ5Lmgg
PSBoOworCisgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShp
dC0+dGlsZS0+aW1hZ2UsIHcsIGgpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3Nl
dChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIHcsIGgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlICp0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdCkKK3sKKyAgICBpZiAoaXQtPnRpbGUpCisgICAgICAgIENSSVRJQ0FMKCJpdC0+dGls
ZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKKyAgICBpdC0+dGlsZSA9IHQ7
CisgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS54LCBp
dC0+Z2VvbWV0cnkueSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5pbWFnZSwg
aXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9m
aWxsX3NldAorICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCBpdC0+Z2VvbWV0cnkudywg
aXQtPmdlb21ldHJ5LmgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQo
aXQtPnRpbGUtPmltYWdlLCBpdC0+c21vb3RoX3NjYWxlKTsKKworICAgIGlmICghZXdrX3RpbGVf
dmlzaWJsZV9nZXQodCkpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQodC0+
aW1hZ2UsIHByaXYtPnNlbGYpOworCisgICAgZXdrX3RpbGVfc2hvdyh0KTsKK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpp
dCwgZG91YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
KyAgICBld2tfdGlsZV9oaWRlKGl0LT50aWxlKTsKKyAgICBpZiAoIWV3a190aWxlX3Zpc2libGVf
Z2V0KGl0LT50aWxlKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChpdC0+
dGlsZS0+aW1hZ2UpOworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChwcml2LT5tb2RlbC5t
YXRyaXgsIGl0LT50aWxlLCBsYXN0X3VzZWQpOworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKworICAgIGl0LT50aWxlID0gMDsKK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5hX0lubGlzdCAqaXQ7Cisg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKKyAgICBpbnQgaTsKKyAgICBk
b3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworCisgICAgZm9yIChpID0g
MDsgaSA8IHByaXYtPnZpZXcucm93czsgaSsrKSB7CisgICAgICAgIGl0ID0gcHJpdi0+dmlldy5p
dGVtc1tpXTsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAgICAg
ICAgIGlmIChpdGVtLT50aWxlKQorICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2ln
bmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSwgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7CisKKyAgICByID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0Kj4obWFsbG9j
KHNpemVvZigqcikpKTsKKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwor
CisgICAgaWYgKHByaW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKKyAgICAgICAg
cHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCisg
ICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNU
X0dFVChyKSk7CisgICAgZWxzZQorICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1
ZXN0cyA9IGVpbmFfaW5saXN0X2FwcGVuZAorICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVf
cmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworCisgICAgci0+Y29sID0gY29s
OworICAgIHItPnJvdyA9IHJvdzsKKyAgICByLT56b29tID0gem9vbTsKKworICAgIHJldHVybiBF
SU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCit7Cisg
ICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUK
KyAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9H
RVQocikpOworICAgIGZyZWUocik7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXYpCit7CisgICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCisgICAgICAg
IHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLAorICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5y
ZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICB3aGlsZSAoKnBsKSB7CisgICAgICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKKyAgICAgICAgciA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7
CisgICAgICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7CisgICAgICAgIGZy
ZWUocik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9y
ZXF1ZXN0czsKKyAgICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKKyAgICB3aGlsZSAo
aXRlcikgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnIgPQorICAgICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKKyAgICAgICAg
ICAgICAgICBpdGVyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qp
OworICAgICAgICB0bXAgPSBpdGVyLT5uZXh0OworICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9y
ZW1vdmUoKnBsLCBpdGVyKTsKKyAgICAgICAgaXRlciA9IHRtcDsKKyAgICAgICAgZnJlZShyKTsK
KyAgICB9Cit9CisKKy8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBp
ZiByZXF1aXJlZCEgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnJlcTsKKyAgICBFaW5hX1JlY3RhbmdsZSBhcmVhOworICAgIEV3a19UaWxlX01hdHJpeCAq
dG0gPSBwcml2LT5tb2RlbC5tYXRyaXg7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWM7CisgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICBmbG9h
dCB6b29tOworICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisK
KyAgICByZXEgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zp
cnN0KHByaXYpOworICAgIGlmICghcmVxKQorICAgICAgICByZXR1cm47CisKKyAgICBjb2wgPSBy
ZXEtPmNvbDsKKyAgICByb3cgPSByZXEtPnJvdzsKKyAgICB6b29tID0gcmVxLT56b29tOworCisg
ICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpv
b20pKSB7CisgICAgICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUs
JWx1IEAgJWYuIiwgY29sLCByb3csIHpvb20pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisK
KyAgICB0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93
LCB6b29tKTsKKyAgICBpZiAoIXQpCisgICAgICAgIGdvdG8gZW5kOworCisgICAgYXJlYS54ID0g
MDsKKyAgICBhcmVhLnkgPSAwOworICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53OworICAg
IGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgcHJpdi0+cmVuZGVyLmNiKHByaXYt
PnJlbmRlci5kYXRhLCB0LCAmYXJlYSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRh
dGVfYWRkKAorICAgICAgICB0LT5pbWFnZSwKKyAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEu
dywgYXJlYS5oKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0
KTsKKworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKKwor
ZW5kOgorICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVs
KHByaXYsIHJlcSk7CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aCh0dWMpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSo+KGRhdGEpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQorICAgICAgICBk
YXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+
c2VsZik7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X3Byb2Nlc3Nfc2luZ2xlKHByaXYpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikK
KyAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBk
YXRhLCBwcml2LT5zZWxmKTsKKworICAgIGlmICghcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVx
dWVzdHMpIHsKKyAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gMDsKKyAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJf
c3RvcChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlmICghcHJp
di0+cmVuZGVyLmlkbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBlY29yZV9pZGxlcl9kZWwo
cHJpdi0+cmVuZGVyLmlkbGVyKTsKKyAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSAwOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlm
IChwcml2LT5yZW5kZXIuaWRsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBwcml2LT5yZW5kZXIu
aWRsZXIgPSBlY29yZV9pZGxlcl9hZGQoCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2IsIHByaXYpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQoreworICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9U
UlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rv
cChwcml2KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYpCit7CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9G
QUxTRTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0
KHByaXYpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGljIGlubGluZSBFaW5h
X0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgdW5z
aWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQoreworICAgIHVuc2lnbmVkIGxvbmcg
bV9jb2wgPSBwcml2LT5tb2RlbC5iYXNlLmNvbCArIGNvbDsKKyAgICB1bnNpZ25lZCBsb25nIG1f
cm93ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyByb3c7CisgICAgZG91YmxlIGxhc3RfdXNlZCA9
IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKworICAgIGlmIChtX2NvbCA+PSBwcml2LT5tb2RlbC5j
dXIuY29scyB8fCBtX3JvdyA+PSBwcml2LT5tb2RlbC5jdXIucm93cykgeworICAgICAgICBpZiAo
aXQtPnRpbGUpCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNz
b2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEV3a19U
aWxlICp0OworICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207
CisKKyAgICAgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgICAgICBFd2tfVGlsZSAqb2xkID0g
aXQtPnRpbGU7CisgICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gbV9yb3cgfHwgb2xkLT5jb2wg
IT0gbV9jb2wgfHwgb2xkLT56b29tICE9IHpvb20pCisgICAgICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09IG1fY29s
ICYmIG9sZC0+em9vbSA9PSB6b29tKQorICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAg
ICB9CisKKyAgICAgICAgdCA9IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChwcml2LT5t
b2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jvdywgem9vbSk7CisKKyAgICAgICAgaWYgKCF0KSB7Cisg
ICAgICAgICAgICAvKiBOT1RFOiBpdCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNl
dCEgKi8KKyAgICAgICAgICAgIGlmIChpdC0+dGlsZSkgeworICAgICAgICAgICAgICAgIENSSVRJ
Q0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKKyAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
IGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdF91c2VkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRG8gbm90
IGFkZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRlciBxdWV1ZSAqLworICAgICAgICAgICAgaWYg
KCFwcml2LT5yZW5kZXIuc3VzcGVuZCkgeworICAgICAgICAgICAgICAgIHQgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0
ZShwcml2LCB0LCBpdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodCAhPSBp
dC0+dGlsZSkgeworICAgICAgICAgICAgaWYgKGl0LT50aWxlKQorICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgbGFz
dF91c2VkKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29j
aWF0ZShwcml2LCB0LCBpdCk7CisgICAgICAgIH0KKworICAgICAgZW5kOgorCisgICAgICAgIHJl
dHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3Rh
dGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBs
b25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqaXQ7CisgICAgRXZhc19Db29yZCB4LCB5LCB0dywgdGg7CisKKyAgICBEQkcoIm89
JXAiLCBwcml2LT5zZWxmKTsKKworICAgIGl0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSo+KG1hbGxvYyhzaXplb2YoKml0KSkpOworICAgIGlmICghaXQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2
LT52aWV3LnggKyB0dyAgKmNvbDsKKyAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsg
cHJpdi0+dmlldy55ICsgdGggICpyb3c7CisKKyAgICBpdC0+dGlsZSA9IDA7CisKKyAgICBpdC0+
c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGU7Cisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgeCwgeSk7CisgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgIGlmICgh
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgY29sLCByb3cpKSB7
CisgICAgICAgIGZyZWUoaXQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1
cm4gaXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Rl
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCkKK3sKKyAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAgICAgZG91YmxlIGxh
c3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAgICB9CisK
KyAgICBmcmVlKGl0KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwg
RWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBpZiAoaXQtPnNtb290aF9zY2FsZSA9PSBz
bW9vdGhfc2NhbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpdC0+dGlsZSkKKyAgICAg
ICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGlsZS0+aW1hZ2UsIHNt
b290aF9zY2FsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAg
IGlmIChwcml2LT5jaGFuZ2VkLmFueSkKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NoYW5nZWQocHJpdi0+c2VsZik7CisgICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBFSU5B
X1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlz
dCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgRWluYV9Jbmxpc3QgKm47Cisg
ICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBuID0gKCpwX3JvdyktPmxhc3Q7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KykgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAg
aXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0pOworICAgICAgICBuID0gbi0+cHJldjsKKyAgICAgICAgKnBfcm93ID0gZWluYV9pbmxp
c3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CisgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgfQorfQorCitzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNp
Z25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKKworICAgIGZvciAoaSA9IDA7IGkg
PCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKml0OworCisgICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKKyAgICAgICAgaWYgKCFpdCkgeworICAgICAgICAg
ICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1IGluIHJvdyAldS4iLCBp
LCBjb3VudCwgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19j
b2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOworICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CisgICAgICAgIH0KKworICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnBf
cm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKKyAgICB9CisgICAgcmV0dXJuIEVJTkFfVFJVRTsK
K30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqcm93KQorewor
ICAgIHdoaWxlIChyb3cpIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQ7CisgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICByb3cgPSByb3ctPm5leHQ7CisgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2Rl
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnN0YXJ0
LCBFaW5hX0lubGlzdCAqKmVuZCkKK3sKKyAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0Kysp
IHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChwcml2LCAq
c3RhcnQpOworICAgICAgICAqc3RhcnQgPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipzdGFydDsKKyAgICBFaW5h
X0lubGlzdCAqKmVuZDsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBlbmQg
PSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOworCisgICAg
ZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKKyAgICBwcml2LT52aWV3Lml0ZW1zID0gMDsKKyAgICBw
cml2LT52aWV3LmNvbHMgPSAwOworICAgIHByaXYtPnZpZXcucm93cyA9IDA7Cit9CisKK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIodm9pZCAqZGF0YSwgRXdrX1Rp
bGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQoreworICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKj4oZGF0YSk7CisKKyAgICBJTkYoIlRPRE8gJXAgKHZpc2libGU/ICVkKSBbJWx1LCVs
dV0gJWQsJWQgKyAlZHglZCIsCisgICAgICAgIHQsIHQtPnZpc2libGUsIHQtPmNvbCwgdC0+cm93
LCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKKworICAgIGlmICghdC0+dmlz
aWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByaXYtPnZpZXcudGlsZS53ICE9IHQt
PncgfHwgcHJpdi0+dmlldy50aWxlLmggIT0gdC0+aCkKKyAgICAgICAgcmV0dXJuOyAvLyB0b2Rv
OiByZW1vdmUgbWUgbGF0ZXIsIGRvbid0IGV2ZW4gZmxhZyBhcyBkaXJ0eSEKKworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5jYik7CisgICAgaWYgKCFwcml2LT5y
ZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHQsIGFyZWEpKQorICAgICAgICByZXR1cm47CisK
KyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQodC0+aW1hZ2UsIGFyZWEtPngs
IGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAg
aWYgKHByaXYtPm1vZGVsLm1hdHJpeCkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7CisKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5vZmZz
ZXQgPSBFSU5BX0ZBTFNFOworICAgICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7
CisKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWUocHJpdi0+bW9kZWwubWF0cml4KTsKKyAg
ICB9CisKKyAgICBwcml2LT5tb2RlbC5tYXRyaXggPSBld2tfdGlsZV9tYXRyaXhfbmV3KHR1Yywg
cHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLCBwcml2LT5jc3BhY2Us
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIsIHByaXYpOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbChFdmFzX09iamVjdCAq
bywgRXZhc19PYmplY3QgKm1lbWJlcikKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKyAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBldmFzX29iamVjdF9jbGlwX3Vuc2V0KG1lbWJlcik7CisgICAgaWYgKCFldmFzX29i
amVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c19jbGlwcGVyKSkKKyAgICAgICAgZXZhc19v
YmplY3RfaGlkZShwcml2LT5jb250ZW50c19jbGlwcGVyKTsKK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQoRXZhc19PYmplY3QgKm8sIEV2
YXNfT2JqZWN0ICptZW1iZXIpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
dik7CisgICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgZXZhc19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c19jbGlwcGVyKTsK
KyAgICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQobykpCisgICAgICAgIGV2YXNfb2JqZWN0
X3Nob3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cit9CisKKyNpZmRlZiBERUJVR19NRU1fTEVB
S1MKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgc3RhdGljIGludCBydW4gPSAwOwor
CisgICAgcnVuKys7CisKKyAgICBwcmludGYoIlxuLS0tIEJFR0lOIERFQlVHIFRJTEVEIEJBQ0tJ
TkcgU1RPUkUgTUVNT1JZIFslZF0gLS1cbiIKKyAgICAgICAgICAgInQ9JTAuMmYsIG9iaj0lcCwg
cHJpdj0lcCwgdmlldy5pdGVtcz0lcCwgbWF0cml4PSVwXG4iLAorICAgICAgICAgICBydW4sIGVj
b3JlX2xvb3BfdGltZV9nZXQoKSwKKyAgICAgICAgICAgcHJpdi0+c2VsZiwgcHJpdiwgcHJpdi0+
dmlldy5pdGVtcywgcHJpdi0+bW9kZWwubWF0cml4KTsKKworICAgIGV3a190aWxlX21hdHJpeF9k
YmcocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOwor
CisgICAgcHJpbnRmKCItLS0gRU5EIERFQlVHIFRJTEVEIEJBQ0tJTkcgU1RPUkUgTUVNT1JZIFsl
ZF0gLS1cblxuIiwgcnVuKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc2lnX3Vzcih2b2lkICpkYXRhLCBpbnQgdHlwZSwgdm9pZCAqZXZlbnQpCit7Cisg
ICAgRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIgKnNpZyA9IChFY29yZV9FdmVudF9TaWduYWxfVXNl
ciopZXZlbnQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKilkYXRhOworCisgICAgaWYgKHNpZy0+bnVtYmVyID09
IDIpIHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgICAgIHR1YyA9
IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Cisg
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgfQorCisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKHByaXYpOworICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9
CisjZW5kaWYKKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCAqbykKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2OworCisgICAgREJHKCJvPSVwIiwgbyk7CisKKyAgICBwcml2ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoKnByaXYpKSk7Cisg
ICAgaWYgKCFwcml2KQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5zZWxmID0gbzsKKyAg
ICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEuMDsKKyAgICBwcml2LT52aWV3LnRpbGUudyA9IERF
RkFVTFRfVElMRV9XOworICAgIHByaXYtPnZpZXcudGlsZS5oID0gREVGQVVMVF9USUxFX0g7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IDA7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQub2xkLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2Uu
Y29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7CisgICAgcHJpdi0+bW9kZWwu
Y3VyLmNvbHMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKKyAgICBwcml2LT5t
b2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAwOworICAgIHBy
aXYtPm1vZGVsLndpZHRoID0gMDsKKyAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSAwOworICAgIHBy
aXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKKyAgICBwcml2LT5jc3BhY2UgPSBFVkFT
X0NPTE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KKworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHByaXYpOworICAgIF9wYXJlbnRfc2MuYWRkKG8pOworCisg
ICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoCisg
ICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pKTsKKyAgICBldmFzX29iamVjdF9tb3ZlKHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2
LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC53
aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9zZXQocHJp
di0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBldmFzX29iamVj
dF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21l
bWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbyk7CisKKyAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCAwKTsKKyAgICBldmFzX29iamVj
dF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfcmVzaXpl
KHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfY2xpcF9zZXQocHJp
di0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsKKworI2lmZGVmIERFQlVH
X01FTV9MRUFLUworICAgIHByaXYtPnNpZ191c3IgPSBlY29yZV9ldmVudF9oYW5kbGVyX2FkZAor
ICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zaWdfdXNyLCBwcml2KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIERCRygibz0lcCIsIG8pOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5sb2NrX2FyZWEodHVjKTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChw
cml2KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3Rf
Zmx1c2gocHJpdik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdG9wKHByaXYpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3Nf
YWxsX2RlbChwcml2KTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworICAgIGlmIChwcml2LT5zaWdfdXNyKQorICAg
ICAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9kZWwocHJpdi0+c2lnX3Vz
cik7CisjZW5kaWYKKworICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJp
eCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c19jbGlw
cGVyKTsKKyAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisKKyAg
ICBfcGFyZW50X3NjLmRlbChvKTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50
ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RPUkUgREVMRVRFRCAobWF5IGJlIHJlYWwg
bGVha3MpXG4iKTsKKyAgICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOworI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2Jq
ZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBEQkcoIm89JXAsIG5l
dyBwb3M6ICVkeCVkIiwgbywgeCwgeSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKworICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHByaXYtPnZpZXcueSA9PSB5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBwcml2LT5jaGFuZ2VkLnBvcyA9IEVJTkFfVFJVRTsKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19D
b29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgREJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQi
LCBvLCB3LCBoKTsKKworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisg
ICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBy
aXYtPnZpZXcudyA9PSB3ICYmIHByaXYtPnZpZXcuaCA9PSBoKQorICAgICAgICByZXR1cm47CisK
KyAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nv
b3JkIHRoKQoreworICAgIGxvbmcgY29scywgcm93cywgb2xkX3Jvd3MsIG9sZF9jb2xzOworICAg
IElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgdywgaCk7CisKKyAgICBj
b2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChmbG9hdCl0dyk7CisgICAgcm93cyA9IDEg
KyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgpOworCisgICAgSU5GKCJvPSVwIG5ldyBn
cmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQsIHdhcyAlbGQsICVsZCIsCisgICAgICAgIHBy
aXYtPnNlbGYsIGNvbHMsIHJvd3MsIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsK
KworICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29scyAmJiBwcml2LT52aWV3LnJvd3MgPT0g
cm93cykKKyAgICAgICAgcmV0dXJuOworCisgICAgb2xkX2NvbHMgPSBwcml2LT52aWV3LmNvbHM7
CisgICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7CisKKyAgICBpZiAocm93cyA8IG9sZF9y
b3dzKSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgICAgICBzdGFy
dCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0
ZW1zICsgb2xkX3Jvd3M7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jv
d3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOworICAgIH0KKworICAgIHZvaWQqIG5ld0l0
ZW1zID0gcmVhbGxvYyhwcml2LT52aWV3Lml0ZW1zLCBzaXplb2YoRWluYV9Jbmxpc3QqKSAqIChp
bnQpcm93cyk7CisgICAgaWYgKCFuZXdJdGVtcykKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJp
di0+dmlldy5pdGVtcyA9IHN0YXRpY19jYXN0PEVpbmFfSW5saXN0Kio+KG5ld0l0ZW1zKTsKKyAg
ICBwcml2LT52aWV3LnJvd3MgPSByb3dzOworICAgIHByaXYtPnZpZXcuY29scyA9IGNvbHM7Cisg
ICAgaWYgKHJvd3MgPiBvbGRfcm93cykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAq
KmVuZDsKKyAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAg
ICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAgICAgIEVpbmFfQm9vbCByOworICAgICAgICAgICAg
KnN0YXJ0ID0gMDsKKyAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19jb2xzX2VuZF9hZGQKKyAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOwor
ICAgICAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0
byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMpOworICAgICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsCisgICAgICAgICAgICAgICAgICAg
IChwcml2LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRfcm93czsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29scyAhPSBvbGRf
Y29scykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICAgICAgaW50
IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CisgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVt
czsKKyAgICAgICAgZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywgcm93cyk7CisgICAg
ICAgIGlmICh0b2RvID4gMCkgeworICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFy
dCsrKSB7CisgICAgICAgICAgICAgICAgRWluYV9Cb29sIHI7CisgICAgICAgICAgICAgICAgciA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAorICAgICAgICAgICAg
ICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXIpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0
ZSAlZCBjb2x1bW5zISIsIHRvZG8pOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhcnQt
LTsgc3RhcnQgPj0gcHJpdi0+dmlldy5pdGVtczsgc3RhcnQtLSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBz
dGFydCwgdG9kbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9y
b3dzOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJv
d3M7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0Kysp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRvZG8gPCAwKSB7CisgICAgICAgICAgICB0b2Rv
ID0gLXRvZG87CisgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCisgICAg
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHBy
aXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIHcsIGgpOworCisgICAgcHJpdi0+
dmlldy53ID0gdzsKKyAgICBwcml2LT52aWV3LmggPSBoOworCisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCisgICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZp
ZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7Cit9CisKKy8vIFRPRE86IHJlbW92ZSBtZSBs
YXRlci4KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19k
YmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5h
X0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICBwcmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9k
ZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNsZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9s
ZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIsCisgICAgICAgICAgIHByaXYtPnZpZXcuY29s
cywgcHJpdi0+dmlldy5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJp
di0+bW9kZWwuY3VyLnJvd3MsCisgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5t
b2RlbC5oZWlnaHQsCisgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2Rl
bC5iYXNlLnJvdywKKyAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55LAorICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJp
di0+dmlldy5vZmZzZXQub2xkLnksCisgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5p
dGVtczsKKyAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOworICAg
IGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgeworICAgICAgICBjb25zdCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdDsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpz
dGFydCwgaXQpIHsKKyAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0
cnkueCwgaXQtPmdlb21ldHJ5LnkpOworCisgICAgICAgICAgICBpZiAoIWl0LT50aWxlKQorICAg
ICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAgICAgOyIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVsdSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxl
LT5jb2wsIGl0LT50aWxlLT5yb3cpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsK
KyAgICB9CisgICAgcHJpbnRmKCItLS1cbiIpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
TW92ZSB0b3Agcm93IGRvd24gYXMgbGFzdC4KKyAqCisgKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZp
c3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSB0b3AgdGhhdAorICogd2VudCBvdXQg
b2Ygc2NyZWVuIGlzIG5vdyBhdCBib3R0b20gYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVt
cy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRo
YW4gQGMKKyAqIHByaXYtPnZpZXcucm93cywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRo
ZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxs
LgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUg
cHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHVuc2lnbmVkIGludCBs
YXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYt
PnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAg
ICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0
aDsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCAr
IG9mZl95OworICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisKKyAgICBp
dHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBs
YXN0X3JvdzsKKworICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKyAgICAgICAgRWlu
YV9Jbmxpc3QgKippdHI7CisgICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0Owor
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19D
b29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgICAgIGludCBjID0g
MDsKKworICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKysp
CisgICAgICAgICAgICAqaXRyID0gKihpdHIgKyAxKTsKKyAgICAgICAgKml0ciA9IHRtcDsKKwor
ICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysrOworICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKHRtcCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsK
KyAgICAgICAgICAgIGMrKzsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7Cit9CisKKy8qKgorICogQGludGVy
bmFsCisgKiBNb3ZlIGJvdHRvbSByb3cgdXAgYXMgZmlyc3QuCisgKgorICogVGhlIGZpbmFsIHJl
c3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgYm90dG9tIHRoYXQK
KyAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgdG9wIGFuZCBmaWxsZWQgd2l0aCBuZXcg
bW9kZWwgaXRlbXMuCisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMg
c21hbGxlciB0aGFuIEBjCisgKiBwcml2LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJl
ZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBm
dWxsIHJlZmlsbC4KKyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byBy
ZXBlYXQgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIEV2
YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJp
di0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSAtIGNvdW50ICogdGg7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyBvZmZfeSArIChj
b3VudCAtIDEpICogdGg7CisgICAgRWluYV9Jbmxpc3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsK
KworICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAx
OworICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0ZW1zOworCisgICAgZm9yICg7IGNvdW50ID4g
MDsgY291bnQtLSkgeworICAgICAgICBFaW5hX0lubGlzdCAqKml0cjsKKyAgICAgICAgRWluYV9J
bmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKKyAgICAgICAgaW50IGMgPSAwOworCisgICAgICAgIGZvciAoaXRyID0gaXRyX3N0
YXJ0OyBpdHIgPiBpdHJfZW5kOyBpdHItLSkKKyAgICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEp
OworICAgICAgICAqaXRyID0gdG1wOworCisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godG1wLCBpdCkgeworICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAg
IG94ICs9IHR3OworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdCwgYywgMCk7CisgICAgICAgICAgICBjKys7CisgICAgICAgIH0KKyAgICAgICAg
b3kgLT0gdGg7CisgICAgfQorICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95Owor
fQorCisvKioKKyAqIEBpbnRlcm5hbAorICogTW92ZSBsZWZ0LW1vc3QgKGZpcnN0KSBjb2x1bW4g
cmlnaHQgYXMgbGFzdCAocmlnaHQtbW9zdCkuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2
aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgZmlyc3QgY29sIHRoYXQKKyAqIHdl
bnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgbGFzdCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVs
IGl0ZW1zLgorICoKKyAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxs
ZXIgdGhhbiBAYworICogcHJpdi0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxp
bmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCBy
ZWZpbGwuCisgKgorICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0
IHRoZSBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2LT52aWV3LmNvbHMgLSAxOworICAgIEV2YXNfQ29vcmQg
dHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50
aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAr
IGNvdW50ICogdHc7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnk7CisgICAgRWluYV9Jbmxpc3QgKippdHI7CisgICAgRWluYV9Jbmxpc3QgKippdHJfZW5k
OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0g
Y291bnQ7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAg
ICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2NvbCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94
OworICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGxhc3RfY29sIC0gY291bnQgKyAxOworCisg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjKyssIG94ICs9IHR3KSB7CisgICAg
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgICAgIGl0
ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgqaXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKTsKKyAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0
cik7CisKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxs
KHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisK
KyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKK30KKworLyoqCisgKiBAaW50
ZXJuYWwKKyAqIE1vdmUgcmlnaHQtbW9zdCAobGFzdCkgY29sdW1uIGxlZnQgYXMgZmlyc3QgKGxl
ZnQtbW9zdCkuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwg
YnV0IGxvZ2ljYWxseSB0aGUgbGFzdCBjb2wgdGhhdAorICogd2VudCBvdXQgb2Ygc2NyZWVuIGlz
IG5vdyBhdCBmaXJzdCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgorICoKKyAqIFRo
aXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYworICogcHJp
di0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJp
eCBzbyBpdAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCisgKgorICogQHBh
cmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgorICov
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgdW5zaWduZWQgaW50IHI7CisgICAgRXZh
c19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2
LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54IC0gY291bnQgKiB0dzsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworCisgICAg
aXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5y
b3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7CisK
KyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFdmFzX0Nv
b3JkIG94ID0geCArIChjb3VudCAtIDEpICogdHcgKyBvZmZfeDsKKyAgICAgICAgdW5zaWduZWQg
aW50IGksIGMgPSBjb3VudCAtIDE7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyssIGMtLSwgb3ggLT0gdHcpIHsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgq
aXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgICAgICAq
aXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOworCisgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgaW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKK3sK
KyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV2YXNfQ29vcmQgYmFzZV9v
eCwgb3ksIHR3LCB0aDsKKyAgICB1bnNpZ25lZCBpbnQgcjsKKworICAgIGV2YXNfb2JqZWN0X21v
dmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxl
Lnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIGJhc2Vfb3ggPSB4ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciAr
IHByaXYtPnZpZXcucm93czsKKyAgICByID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
IC09IHN0ZXBfeDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyAtPSBzdGVwX3k7CisKKyAgICBm
b3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgq
aXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgYysrOworICAgICAgICAgICAgb3gg
Kz0gdHc7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gs
IG95LCB0dywgdGg7CisKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwg
eCwgeSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmg7CisKKyAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsK
KyAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisKKyAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAg
Zm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAg
ICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIG94ICs9
IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2Uo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFdmFzX0Nvb3JkIGR4
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKKyAg
ICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9m
ZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBpbnQgc3RlcF95LCBzdGVw
X3g7CisKKyAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAor
ICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnggLyB0dzsKKyAgICBzdGVwX3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAt
IG5ld19jb2w7CisgICAgbG9uZyBuZXdfcm93ID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8g
dGg7CisgICAgc3RlcF95ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuZXdfcm93OworCisgICAg
cHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgIGV2
YXNfb2JqZWN0X21vdmUoCisgICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAorICAgICAgICBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CisKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3JlZmlsbAorICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0
ZXBfeCwgc3RlcF95KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgRXZhc19Db29yZCBkeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7CisgICAgRXZh
c19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnk7CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgaW50IHN0ZXBfeSwgc3RlcF94Owor
CisgICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKKyAgICAg
ICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkpOworCisgICAgaWYgKCFkeCAmJiAhZHkpCisgICAgICAgIHJldHVybjsK
KworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKKworICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3Owor
ICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKKyAgICBsb25nIG5l
d19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0aDsKKyAgICBzdGVwX3kgPSBwcml2
LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAg
ICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnggKyBwcml2LT52aWV3LngsCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJp
di0+dmlldy55KTsKKworICAgIGlmICgoc3RlcF94IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZp
ZXcuY29scykKKyAgICAgICAgfHwgKHN0ZXBfeCA+IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcu
Y29scykKKyAgICAgICAgfHwgKHN0ZXBfeSA8IDAgJiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJv
d3MpCisgICAgICAgIHx8IChzdGVwX3kgPiAwICYmIHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3Mp
KSB7CisKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICog
dHc7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRo
OworCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAorICAgICAg
ICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
Kz0gZHg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5OworCisgICAgaWYgKHN0
ZXBfeSA8IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAo
cHJpdiwgeCwgeSwgLXN0ZXBfeSk7CisgICAgZWxzZSBpZiAoc3RlcF95ID4gMCkKKyAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBf
eSk7CisKKyAgICBpZiAoc3RlcF94IDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHksIC1zdGVwX3gpOworICAgIGVsc2UgaWYgKHN0
ZXBfeCA+IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmln
aHQocHJpdiwgeCwgeSwgc3RlcF94KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOworICAgIHByaXYtPnZp
ZXcueCA9IHg7CisgICAgcHJpdi0+dmlldy55ID0geTsKKyAgICBldmFzX29iamVjdF9tb3ZlKAor
ICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
KyBwcml2LT52aWV3LnkpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sK
KyAgICBFaW5hX0lubGlzdCAqaXQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXRlbTsKKyAgICBpbnQgaSwgajsKKworICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJv
d3M7IGkrKykgeworICAgICAgICBpdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CisgICAgICAgIGog
PSAwOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZShFdmFzX09iamVjdCAqbykKK3sKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisK
KyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgJngsICZ5LCAmdywgJmgpOworICAgIERC
Rygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgbywgeCwgeSwgdywgaCk7CisKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlO
QV9GQUxTRTsKKworICAgIGV3a190aWxlX21hdHJpeF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4
KTsKKworICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2Rl
bCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisKKyAgICAgICAgY29scyA9
IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLncgKyAxOworICAgICAgICByb3dz
ID0gcHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmggKyAxOworCisgICAgICAg
IHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+bW9kZWwuY3VyLmNvbHM7CisgICAgICAgIHBy
aXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VyLnJvd3M7CisgICAgICAgIHByaXYt
Pm1vZGVsLmN1ci5jb2xzID0gY29sczsKKyAgICAgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSBy
b3dzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLmNvbHMgPiBjb2xzKQorICAgICAgICAg
ICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwu
b2xkLnJvd3MgPiByb3dzKQorICAgICAgICAgICAgcm93cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dz
OworICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29s
cywgcm93cyk7CisgICAgfQorCisgICAgaWYgKHByaXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52
aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0geSkpIHsKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MocHJpdiwgeCwgeSk7CisgICAgICAgIHBy
aXYtPmNoYW5nZWQucG9zID0gRUlOQV9GQUxTRTsKKyAgICB9CisgICAgaWYgKHByaXYtPmNoYW5n
ZWQub2Zmc2V0KSB7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGVfb2Zmc2V0KHByaXYsIHgsIHkpOworICAgICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9
IEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkgeworICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwg
dywgaCk7CisgICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CisgICAgfQor
CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7
CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7CisgICAgICAgIHJlY3QueCA9IDA7CisgICAg
ICAgIHJlY3QueSA9IDA7CisgICAgICAgIHJlY3QudyA9IHByaXYtPm1vZGVsLndpZHRoOworICAg
ICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWlnaHQ7CisgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4
X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC5jdXIuY29scywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1v
ZGVsLmN1ci5yb3dzKTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7
CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2
LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UocHJpdik7CisKKyAgICAg
ICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBieQor
ICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAqLworICAgICAgICBjb25z
dCBFaW5hX1JlY3RhbmdsZSByID0KKyAgICAgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lk
dGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OworICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRl
KHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpdi0+dmlldy50aWxlLnpvb20pOworICAgIH0KKworICAgIGV3a190aWxlX21hdHJpeF90aGF3
KHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlc19wcm9jZXNzKHByaXYpOworCisgICAgaWYgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+
IDAKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50
aWxlLncKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID4gMAorICAgICAgICB8
fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0gLSBwcml2LT52aWV3LnRpbGUuaCkKKyAgICAg
ICAgRVJSKCJpbmNvcnJlY3QgYmFzZSBvZmZzZXQgJSs0ZCwlKzRkLCB0aWxlPSVkeCVkLCBjdXI9
JSs0ZCwlKzRkXG4iLAorICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnksCisgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUudywgcHJp
di0+dmlldy50aWxlLmgsCisgICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkpOworCit9CisKK0V2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9hZGQoRXZhcyAqZSkKK3sKKyAgICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQg
PSAwOworCisgICAgaWYgKF9ld2tfdGlsZWRfbG9nX2RvbSA8IDApCisgICAgICAgIF9ld2tfdGls
ZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFpbl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmUiLCAwKTsKKworICAgIGlmICghc21hcnQpIHsKKyAgICAgICAgc3RhdGljIEV2YXNfU21h
cnRfQ2xhc3Mgc2MgPQorICAgICAgICAgICAgRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVS
U0lPTigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiKTsKKworICAgICAgICBldmFzX29iamVjdF9z
bWFydF9jbGlwcGVkX3NtYXJ0X3NldCgmc2MpOworICAgICAgICBfcGFyZW50X3NjID0gc2M7CisK
KyAgICAgICAgc2MuYWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZDsKKyAg
ICAgICAgc2MuZGVsID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbDsKKyAgICAg
ICAgc2MucmVzaXplID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZTsKKyAg
ICAgICAgc2MubW92ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlOworICAg
ICAgICBzYy5jYWxjdWxhdGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3Vs
YXRlOworICAgICAgICBzYy5tZW1iZXJfYWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X21lbWJlcl9hZGQ7CisgICAgICAgIHNjLm1lbWJlcl9kZWwgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbDsKKworICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRf
Y2xhc3NfbmV3KCZzYyk7CisgICAgfQorCisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChlLCBzbWFydCk7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2Ni
X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxl
ICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSksIGNvbnN0IHZvaWQgKmRhdGEpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2IpOworICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOworICAgIHByaXYtPnJlbmRlci5jYiA9IGNiOworICAgIHByaXYtPnJl
bmRlci5kYXRhID0gKHZvaWQqKWRhdGE7Cit9CisKK0V3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIDApOworICAg
IHJldHVybiBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hl
X3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAoZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCisgICAgICAg
IHJldHVybjsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3Jl
YXRlKHByaXYsIHR1Yyk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgLyog
VE9ETzogY2hlY2sgb2Zmc2V0IGdvIG91dCBvZiBib3VuZHMsIGNsYW1wICovCisgICAgaWYgKHBy
aXYtPnJlbmRlci5kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCA9IHg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
PSB5OworCisgICAgcHJpdi0+Y2hhbmdlZC5vZmZzZXQgPSBFSU5BX1RSVUU7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CisKKyAgICByZXR1cm4gRUlOQV9UUlVF
OworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zm
c2V0X3NldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgREJHKCJvPSVwLCB4PSVkLCB5PSVkIiwgbywgeCwgeSk7CisKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoeCA9PSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCAmJiB5ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQorICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworCisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
Y3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKHByaXYsIHgsIHkpOworfQorCitFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSkKK3sKKyAgICBEQkcoIm89JXAs
IGR4PSVkLCBkeT0lZCIsIG8sIGR4LCBkeSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoIWR4ICYmICFkeSkKKyAgICAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKKworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbAorICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnggKyBkeCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7Cit9CisKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5
KQoreworICAgICpvZmZ4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgKm9mZnkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueTsKKworICAgIGlmIChmYWJzZihwcml2LT52aWV3LnRpbGUu
em9vbSAtICp6b29tKSA8IFpPT01fU1RFUF9NSU4pIHsKKyAgICAgICAgREJHKCJpZ25vcmVkIGFz
IHpvb20gZGlmZmVyZW5jZSBpcyA8ICVmOiAlZiIsCisgICAgICAgICAgICAoZG91YmxlKVpPT01f
U1RFUF9NSU4sIGZhYnNmKHByaXYtPnZpZXcudGlsZS56b29tIC0gKnpvb20pKTsKKyAgICAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOworICAgIEV2YXNfQ29vcmQgdHcsIHRoOwor
CisgICAgKnpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncsICp6b29tKTsKKwor
ICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsK
KworICAgIGZsb2F0IHNjYWxlID0gKnpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKKworICAg
IHByaXYtPnZpZXcudGlsZS56b29tID0gKnpvb207CisgICAgLy8gdG9kbzogY2hlY2sgY3ggWzAs
IHddLi4uCisgICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OworICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnkgPSBjeTsKKworCisgICAgaWYgKCFwcml2LT52
aWV3LncgfHwgIXByaXYtPnZpZXcuaCkgeworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggPSAwOworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOworICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5k
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworCisgICAgRXZhc19Db29y
ZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Cisg
ICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kp
ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBieCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCAtIGN4KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgYnkgPSBjeSArIChwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgLSBjeSkgKiBzY2FsZTsKKworICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lk
dGggPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVp
Z2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CisKKyAgICBpZiAobW9kZWxfd2lkdGgg
PCBwcml2LT52aWV3LncgfHwgbmV3X3ggPj0gMCkKKyAgICAgICAgbmV3X3ggPSAwOworICAgIGVs
c2UgaWYgKC1uZXdfeCArIHByaXYtPnZpZXcudyA+PSBtb2RlbF93aWR0aCkKKyAgICAgICAgbmV3
X3ggPSAtbW9kZWxfd2lkdGggKyBwcml2LT52aWV3Lnc7CisKKyAgICBpZiAobW9kZWxfaGVpZ2h0
IDwgcHJpdi0+dmlldy5oIHx8IG5ld195ID49IDApCisgICAgICAgIG5ld195ID0gMDsKKyAgICBl
bHNlIGlmICgtbmV3X3kgKyBwcml2LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0KQorICAgICAgICBu
ZXdfeSA9IC1tb2RlbF9oZWlnaHQgKyBwcml2LT52aWV3Lmg7CisKKyAgICBieCA9IG5ld194ICUg
dHc7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtIG5ld194IC8gdHc7CisgICAgYnkgPSBu
ZXdfeSAlIHRoOworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLSBuZXdfeSAvIHRoOworCisg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJp
dik7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OworICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0g
Yng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisKKyAgICBwcml2LT52aWV3
Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIHByaXYtPnZpZXcu
b2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgKm9mZnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
OworCisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCisgICAgICAgIG5ld195ICsgcHJpdi0+
dmlldy55KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhw
cml2KTsKKworICAgIEV2YXNfQ29vcmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBw
cml2LT52aWV3Lnk7CisgICAgRXZhc19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAg
ICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9yICg7IGl0ciA8IGl0
cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OworICAgICAg
ICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KGxzdCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21v
dmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9yZXNpemUoaXQsIHR3LCB0aCk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgfQor
ICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitF
aW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QgKm8s
IGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpv
ZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQoreworICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChk
b3VibGUpKnpvb20pOworCisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlO
QV9GQUxTRSk7CisKKyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0
X2ludGVybmFsKHByaXYsIHpvb20sIGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Cit9CisKK0VpbmFfQm9v
bCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBm
bG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQoreworICAgIERCRygibz0l
cCwgem9vbT0lZiIsIG8sIChkb3VibGUpem9vbSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYt
PnZpZXcuaCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgRWluYV9Jbmxpc3QgKipp
dHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAg
ICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsK
KworICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOworCisgICAg
dHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUudywgc2NhbGUpOworICAgIHNj
YWxlID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGlsZS53KTsKKyAgICB0aCA9
IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCBzY2FsZSk7CisgICAgem9vbSA9
IHNjYWxlICogcHJpdi0+dmlldy50aWxlLnpvb207CisKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3dp
ZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX2hl
aWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOworCisgICAgZXZhc19vYmplY3RfcmVz
aXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOwor
CisgICAgaW50IHZyb3dzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSAr
IDE7CisgICAgaW50IHZjb2xzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3
KSArIDE7CisgICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC0gY3gpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBieCA9IG5ld194
ICUgdHc7CisgICAgRXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7CisgICAgdW5zaWduZWQgbG9u
ZyBiYXNlX3JvdyA9IC1uZXdfeSAvIHRoOworICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAt
bmV3X3ggLyB0dzsKKworICAgIGlmIChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8
fCBiYXNlX2NvbCAhPSBwcml2LT5tb2RlbC5iYXNlLmNvbCkgeworICAgICAgICBwcml2LT5tb2Rl
bC5iYXNlLnJvdyA9IGJhc2Vfcm93OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJh
c2VfY29sOworICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7CisgICAgfQorCisgICAgaWYgKHZy
b3dzID4gcHJpdi0+dmlldy5yb3dzIHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQorICAgICAg
ICByZWNhbGMgPSBFSU5BX1RSVUU7CisKKyAgICBpZiAocmVjYWxjKSB7CisgICAgICAgIEV2YXNf
Q29vcmQgdywgaDsKKyAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIDAsIDAsICZ3
LCAmaCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJz
KHByaXYsIHcsIGgsIHR3LCB0aCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9m
aWxsX3JlbmRlcmVycyhwcml2KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Vw
ZGF0ZXNfcHJvY2Vzcyhwcml2KTsKKyAgICB9CisKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBi
eCArIHByaXYtPnZpZXcueDsKKyAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7
CisKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAg
ICAgICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAg
IG5ld195ICsgcHJpdi0+dmlldy55KTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Cisg
ICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKworICAgIGZvciAoOyBpdHIgPCBp
dHJfZW5kOyBpdHIrKykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAg
ICAgRWluYV9Jbmxpc3QgKmxzdCA9ICppdHI7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFD
SChsc3QsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9t
b3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIH0K
KyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwor
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55OworICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lng7CisgICAgRXZhc19Db29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBF
dmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZhc19Db29yZCB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworCisgICAgaWYgKC1uZXdfeCA+IHcpIHsKKyAgICAgICAgbmV3X3gg
PSAtdzsKKyAgICAgICAgYnggPSBuZXdfeCAlIHR3OworICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbCA9IC1uZXdfeCAvIHR3OworICAgIH0KKworICAgIGlmICgtbmV3X3kgPiBoKSB7CisgICAg
ICAgIG5ld195ID0gLWg7CisgICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICB9CisKKyAgICBpZiAoYnggPj0gMCB8
fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53KSB7CisgICAgICAgIGJ4ID0gbmV3X3ggJSB0
dzsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKKyAgICB9CisK
KyAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKSB7CisgICAg
ICAgIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3
X3kgLyB0aDsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194Owor
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnggPSBuZXdfeDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195Owor
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJ4OworICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSA9IGJ5OworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgICAgICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAorICAgICAgICAg
ICAgICAgICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOworCisgICAgRXZhc19Db29yZCBveSA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3Jk
IGJhc2Vfb3ggPSBwcml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisKKyAg
ICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3
LnJvd3M7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXZh
c19Db29yZCBveCA9IGJhc2Vfb3g7CisgICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwor
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgeworICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKKyAgICAg
ICAgICAgIG94ICs9IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30K
Kwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3Nl
dChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJf
ZW5kOworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsg
cHJpdi0+dmlldy5yb3dzOworICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3Nj
YWxlID0gc21vb3RoX3NjYWxlOworCisgICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsK
KyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpCisgICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAg
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3Nl
dAorICAgICAgICAgICAgICAgICAgICAoaXQsIHNtb290aF9zY2FsZSk7CisgICAgfQorfQorCitF
aW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworCisgICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxl
ZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICByZXR1cm4gZXdrX3RpbGVfbWF0
cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsIHVwZGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUuem9vbSk7Cit9CisKK3ZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8s
IHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0
YSkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBwcml2LT5w
cm9jZXNzLnByZV9jYiA9IGNiOworICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCop
ZGF0YTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Nf
cG9zdF9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnBy
ZV9kYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0g
Y2I7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKK30KKwordm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8p
Cit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKK30KKwordm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgZXdrX3RpbGVfbWF0cml4X3Vw
ZGF0ZXNfY2xlYXIocHJpdi0+bW9kZWwubWF0cml4KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9jb250ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYpOworCisgICAgaWYgKHdpZHRoID09IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9
PSBwcml2LT5tb2RlbC5oZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPm1vZGVs
LndpZHRoID0gd2lkdGg7CisgICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHBy
aXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7CisKKyAgICBEQkcoIndpZHRoLGhlaWdodD0l
ZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hh
bmdlZChwcml2KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91
cGRhdGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCit7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVu
ZGVyLmRpc2FibGVkKQorICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKK30K
Kwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKK3sK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YyA9IDA7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IDA7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwor
ICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IDA7CisgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1ci5y
b3dzID0gMTsKKyAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwu
b2xkLnJvd3MgPSAwOworICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUs
IFNUQVRVUyBCRUZPUkUgREVMRVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKKyAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2KTsKKyNlbmRpZgorCisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2KTsKKyAgICB0dWMgPSBl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOworCisjaWZkZWYgREVCVUdfTUVNX0xF
QUtTCisgICAgcHJpbnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJF
Q1JFQVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
bWVtX2RiZyhwcml2KTsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK3sKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFaW5h
X1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOworICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8g
KmluZm87CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWM7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmg7CisgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9v
bSk7CisKKyAgICBpZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5
LCB3LCBoLCB0dywgdGgpKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xp
Y2VyIGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwKKyAgICAgICAgICAgIHgsIHksIHcsIGgs
IHR3LCB0aCk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIHdoaWxl
IChlaW5hX3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgbG9uZyBjID0gaW5mby0+Y29sOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBsb25nIHIgPSBpbmZvLT5yb3c7CisgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJpdiwgYywgciwgem9vbSwgUFJFX1JFTkRFUl9Q
UklPUklUWV9MT1cpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKKworICAgIHR1
YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpv
b20pOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5z
aWduZWQgaW50IG4sIGZsb2F0IHpvb20pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
bywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9y
b3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKKyAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YzsKKworICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBw
cml2LT52aWV3LnJvd3M9JWx1IiwKKyAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBu
LCBwcml2LT52aWV3LnJvd3MpOworICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVsLmJh
c2Uucm93IC0gbjsKKyAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNvbCAt
IG47CisgICAgZW5kX3JvdyA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1ci5yb3dzIC0gMSwKKyAg
ICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5yb3dzICsg
biAtIDEpOworICAgIGVuZF9jb2wgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIuY29scyAtIDEs
CisgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYtPnZpZXcuY29s
cyArIG4gLSAxKTsKKworICAgIElORigic3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0
X2NvbD0lbHUsIGVuZF9jb2w9JWx1IiwKKyAgICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3Rh
cnRfY29sLCBlbmRfY29sKTsKKworICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50
aWxlLncsIHpvb20pOworCisgICAgZm9yIChpID0gc3RhcnRfcm93OyBpIDw9IGVuZF9yb3c7IGkr
KykKKyAgICAgICAgZm9yIChqID0gc3RhcnRfY29sOyBqIDw9IGVuZF9jb2w7IGorKykKKyAgICAg
ICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9h
ZGQocHJpdiwgaiwgaSwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cpKQorICAgICAgICAg
ICAgICAgIGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKKworc3RhcnRfcHJvY2Vzc2luZzoKKyAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwor
CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKKyAgICBoID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0laRV9B
VF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCB6b29tKTsKKyAgICB3ID0gKGVuZF9jb2wgLSBzdGFy
dF9jb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsK
KyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywKKyAgICAgICAgICAgIHN0
YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKSwKKyAg
ICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5o
LCB6b29tKSwgdywgaCwgem9vbSk7CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpv
KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9jbGVhcihwcml2KTsKKworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHByaXYpOworfQorCitFaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKK3sKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKKyAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIocHJpdik7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCmluZGV4IDQ2YWFhODM5MTIyZWU1
M2JhMTdkNTAwZjJlODA5ZjA5YjM4MThiZjIuLjMwMTAzZWQxZDMwZDY5ZDFiZjU1MjBkNDJlZjQ5
ZjczNThjNjRjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZS5oCkBAIC00MiwxMCArNDIsNiBAQAogI2RlZmluZSBUSUxFX1pPT01fQVRfU0la
RShTSVpFLCBPUklHX1RJTEUpICgoZmxvYXQpKFNJWkUpIC8gKGZsb2F0KShPUklHX1RJTEUpKQog
I2RlZmluZSBST1VOREVEX1pPT00oU0laRSwgWk9PTSkgKChmbG9hdCkoU0laRSkgLyAoZmxvYXQp
KCgoaW50KXJvdW5kZigoU0laRSkgLyAoWk9PTSkpKSkpCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwot
ZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxjYWly
by5oPgogCkBAIC0xMjMsNyArMTE5LDQgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogbyk7CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7CiBFaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7Ci0j
aWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgogI2VuZGlmIC8vIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0
cml4LmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmY5Yzg0NDMwNTgyNzY5MjlkOTgwMjJlYzFjZGU2NzVj
MTQ1ZTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKKysrIC9kZXYvbnVsbApAQCAt
MSw2NDggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZXdrX3RpbGVkX21h
dHJpeC5oIgotCi0jZGVmaW5lIF9HTlVfU09VUkNFCi0jaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuaCIKLSNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVp
bmEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVk
ZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCByZW1vdmUgbWUgbGF0ZXIKLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RydWN0IF9Fd2tfVGls
ZV9NYXRyaXggewotICAgIEVpbmFfTWF0cml4c3BhcnNlICptYXRyaXg7Ci0gICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWM7Ci0gICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKLSAgICBzdHJ1
Y3QgewotICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBF
aW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKLSAgICAgICAgdm9pZCAqZGF0YTsKLSAgICB9IHJlbmRl
cjsKLSAgICB1bnNpZ25lZCBpbnQgZnJvemVuOwotICAgIEVpbmFfTGlzdCAqdXBkYXRlczsKLSAg
ICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7Ci0gICAgfSB0aWxlOwotI2lmZGVm
IERFQlVHX01FTV9MRUFLUwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBhbGxvY2F0ZWQsIGZyZWVkOwotICAgICAgICB9IHRpbGVzLCBieXRlczsK
LSAgICB9IHN0YXRzOwotI2VuZGlmCi19OwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1zdGF0
aWMgdWludDY0X3QgdGlsZXNfbGVha2VkID0gMDsKLXN0YXRpYyB1aW50NjRfdCBieXRlc19sZWFr
ZWQgPSAwOwotI2VuZGlmCi0KLS8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyByZXNpemVk
IG9yIGZyZWVkICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lk
ICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKLXsKLSAgICBFd2tfVGlsZV9NYXRyaXggKnRt
ID0gdXNlcl9kYXRhOwotICAgIEV3a19UaWxlICp0ID0gY2VsbF9kYXRhOwotCi0gICAgaWYgKCF0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRt
LT50dWMpOwotCi0gICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0g
ICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7Ci0K
LSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgRVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2
aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCi0gICAgICAgICAgICBF
UlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIsIHQsIHRtLT50dWMp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIERCRygidGlsZSBjZWxsIGRvZXMgbm90IGV4
aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0KTsKLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAg
ICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKLSAgICAgICAgICAg
IHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOwotI2VuZGlmCi0gICAgICAgICAgICBld2tfdGlsZV9m
cmVlKHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Ro
YXcodG0tPnR1Yyk7Ci19Ci0KLS8qIGNhbGxlZCB3aGVuIGNhY2hlIG9mIHVudXNlZCB0aWxlIGlz
IGZsdXNoZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0KQotewotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBkYXRhOwot
ICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0gCi0gICAgaWYgKCFlaW5hX21hdHJp
eHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxsKSkg
ewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRy
aXg/IExlYWtpbmcuLi4iLCB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
Y2VsbCkgewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRo
ZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBk
YXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQpOwotCi0gICAgLyogc2V0IHRv
IG51bGwgdG8gYXZvaWQgZG91YmxlIGZyZWUgKi8KLSAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxs
X2RhdGFfcmVwbGFjZShjZWxsLCBOVUxMLCBOVUxMKTsKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9j
ZWxsX2NsZWFyKGNlbGwpOwotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoISF0LT52aXNpYmxlKSkg
ewotICAgICAgICBFUlIoImNhY2hlIG9mIHVudXNlZCB0aWxlcyByZXF1ZXN0aW5nIGRlbGV0aW9u
IG9mIHVzZWQgdGlsZSAlcD8gIgotICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRtLT5zdGF0
cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKLSAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsK
LSNlbmRpZgotCi0gICAgZXdrX3RpbGVfZnJlZSh0KTsKLX0KLQotLyoqCi0gKiBDcmVhdGVzIGEg
bmV3IG1hdHJpeCBvZiB0aWxlcy4KLSAqCi0gKiBUaGUgdGlsZSBtYXRyaXggaXMgcmVzcG9uc2li
bGUgZm9yIGtlZXBpbmcgdGlsZXMgYXJvdW5kIGFuZAotICogcHJvdmlkaW5nIGZhc3QgYWNjZXNz
IHRvIHRoZW0uIE9uZSBjYW4gdXNlIGl0IHRvIHJldHJpZXZlIG5ldyBvcgotICogZXhpc3Rpbmcg
dGlsZXMgYW5kIGdpdmUgdGhlbSBiYWNrLCBhbGxvd2luZyB0aGVtIHRvIGJlCi0gKiBmcmVlZC9y
ZXBsYWNlZCBieSB0aGUgY2FjaGUuCi0gKgotICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMgb3IgQGMgTlVMTCB0byBjcmVhdGUgb25lCi0gKiAgICAgICAgYXV0b21hdGljYWxseS4K
LSAqIEBwYXJhbSBjb2xzIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCi0gKiBAcGFy
YW0gcm93cyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LgotICogQHBhcmFtIGNzcGFjZSB0
aGUgY29sb3Igc3BhY2UgdXNlZCB0byBjcmVhdGUgdGlsZXMgaW4gdGhpcyBtYXRyaXguCi0gKiBA
cGFyYW0gcmVuZGVyX2NiIGZ1bmN0aW9uIHVzZWQgdG8gcmVuZGVyIGdpdmVuIHRpbGUgdXBkYXRl
LgotICogQHBhcmFtIHJlbmRlcl9kYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNrIHRvIEBhIHJlbmRl
cl9jYi4KLSAqCi0gKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBpbnN0YW5jZSBvbiBzdWNjZXNz
LCBAYyBOVUxMIG9uIGZhaWx1cmUuCi0gKi8KLUV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0
cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjb2xzLCB1
bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UsIHZvaWQgKCpyZW5kZXJf
Y2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRl
KSwgY29uc3Qgdm9pZCAqcmVuZGVyX2RhdGEpCi17Ci0gICAgRXdrX1RpbGVfTWF0cml4ICp0bTsK
LQotICAgIENBTExPQ19PUl9PT01fUkVUKHRtLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSwgTlVM
TCk7Ci0KLSAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3MsIGNvbHMs
IF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7Ci0gICAgaWYgKCF0bS0+bWF0cml4KSB7
Ci0gICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4LiIpOwotICAgICAg
ICBmcmVlKHRtKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKHR1YykK
LSAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodHVjKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5NjAw
MDApOwotICAgICAgICBpZiAoIXRtLT50dWMpIHsKLSAgICAgICAgICAgIEVSUigibm8gY2FjaGUg
b2YgdW51c2VkIHRpbGUhIik7Ci0gICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRt
LT5tYXRyaXgpOwotICAgICAgICAgICAgZnJlZSh0bSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVM
TDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7Ci0gICAgdG0t
PnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKLSAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKXJl
bmRlcl9kYXRhOwotICAgIHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAgICB0bS0+dGls
ZS5oID0gREVGQVVMVF9USUxFX0g7Ci0KLSAgICByZXR1cm4gdG07Ci19Ci0KLS8qKgotICogRGVz
dHJveXMgdGlsZXMgbWF0cml4LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KLSAqCi0gKiBUaGUg
Y2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgotICov
Ci12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0jaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwotI2VuZGlmCi0K
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKLQotICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0t
Pm1hdHJpeCk7Ci0KLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodG0tPnR1Yyk7Ci0KLSNpZmRlZiBERUJVR19N
RU1fTEVBS1MKLSAgICB0aWxlcyA9IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQ7Ci0gICAgYnl0ZXMgPSB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLmJ5dGVzLmZyZWVkOwotCi0gICAgdGlsZXNfbGVha2VkICs9IHRpbGVzOwotICAg
IGJ5dGVzX2xlYWtlZCArPSBieXRlczsKLQotICAgIGlmICh0aWxlcyB8fCBieXRlcykKLSAgICAg
ICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6
JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSIsCi0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsIHRpbGVzLAotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7Ci0gICAgZWxzZSBpZiAodGlsZXNf
bGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKLSAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5v
IGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCi0gICAgICAg
ICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwKLSAgICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKLSAgICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKLSAg
ICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKLSAgICBlbHNlCi0gICAgICAg
IElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdIiwKLSAgICAg
ICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwK
LSAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCk7Ci0jZW5kaWYKLQotICAgIGZyZWUodG0pOwotfQotCi0vKioKLSAqIFJlc2l6ZSBtYXRy
aXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCi0gKi8KLXZvaWQgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
bSk7Ci0gICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQodG0tPm1hdHJpeCwgcm93cywgY29s
cyk7Ci19Ci0KLS8qKgotICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgaW4gdXNlIGJ5
IGdpdmVuIG1hdHJpeC4KLSAqCi0gKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hl
LgotICovCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCBOVUxMKTsKLSAgICByZXR1cm4gdG0tPnR1YzsKLX0KLQotLyoq
Ci0gKiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4K
LSAqCi0gKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhl
IGNhY2hlLgotICoKLSAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBiYWNrIHVzaW5nCi0g
KiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4gSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBp
ZiBpdCBleGlzdHMsCi0gKiB0aGVuIHVzZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlz
dHMoKS4KLSAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxlIGZyb20u
Ci0gKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHJvdyB0aGUgcm93
IG51bWJlci4KLSAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KLSAqCi0gKiBA
cmV0dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIE5VTEwgaWYgbm9uZSBpcyBmb3VuZC4gSWYg
dGhlIHRpbGUKLSAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2lsbCBiZSBA
YiByZW1vdmVkICh0aHVzCi0gKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9uZSBzaG91
bGQgZ2l2ZSBpdCBiYWNrIHdpdGgKLSAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0
KCkgYWZ0ZXJ3YXJkcy4KLSAqCi0gKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dl
dCgpCi0gKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1Rp
bGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9h
dCB6b29tKQotewotICAgIEV3a19UaWxlICp0OwotICAgIHQgPSBlaW5hX21hdHJpeHNwYXJzZV9k
YXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOwotICAgIGlmICghdCkKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAodC0+em9vbSA9PSB6b29tKQotICAgICAgICBnb3RvIGVu
ZDsKLQotICBlbmQ6Ci0gICAgaWYgKCF0LT52aXNpYmxlKSB7Ci0gICAgICAgIGlmICghZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQotICAgICAgICAgICAgV1JOKCJF
d2tfVGlsZSB3YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdDsKLX0KLQotLyoqCi0gKiBDaGVja3MgaWYgdGlsZSBvZiBnaXZlbiB6b29tIGV4
aXN0cyBpbiBtYXRyaXguCi0gKgotICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBjaGVj
ayB0aWxlIGV4aXN0ZW5jZS4KLSAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCi0gKiBA
cGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgotICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20g
dG8gcXVlcnkuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZm91bmQsIEBjIEVJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3Rf
Z2V0KCkKLSAqLwotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhF
d2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cs
IGZsb2F0IHpvb20pCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0KLSAgICB0ID0gZWluYV9tYXRyaXhz
cGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKLSAgICBpZiAoIXQpCi0g
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQot
LyoqCi0gKiBDcmVhdGUgYSBuZXcgdGlsZSBhdCBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbSBsZXZl
bCBpbiB0aGUgbWF0cml4LgotICoKLSAqIFRoZSBuZXdseSBjcmVhdGVkIHRpbGUgaXMgY29uc2lk
ZXJlZCBpbiB1c2UgYW5kIG5vdCBwdXQgaW50byBjYWNoZQotICogb2YgdW51c2VkIHRpbGVzLiBB
ZnRlciBpdCBpcyB1c2VkIG9uZSBzaG91bGQgY2FsbAotICogZXdrX3RpbGVfbWF0cml4X3RpbGVf
cHV0KCkgdG8gZ2l2ZSBpdCBiYWNrIHRvIG1hdHJpeC4KLSAqCi0gKiBAcGFyYW0gdG0gdGhlIHRp
bGUgbWF0cml4IHRvIGNyZWF0ZSB0aWxlIG9uLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51
bWJlci4KLSAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCi0gKiBAcGFyYW0gem9vbSB0aGUg
bGV2ZWwgdG8gY3JlYXRlIHRpbGUsIHVzZWQgdG8gZGV0ZXJtaW5lIHRpbGUgc2l6ZS4KLSAqLwot
RXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBF
dmFzICpldmFzLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpv
b20pCi17Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0KLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIE5VTEwpOwotICAgIEVJTkFfU0FGRVRZ
X09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgTlVMTCk7Ci0KLSAgICB0dyA9IHRtLT50
aWxlLnc7Ci0gICAgdGggPSB0bS0+dGlsZS5oOwotCi0gICAgdCA9IGV3a190aWxlX25ldyhldmFz
LCB0dywgdGgsIHpvb20sIHRtLT5jc3BhY2UpOwotICAgIGlmICghdCkgewotICAgICAgICBFUlIo
ImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVkIiwgdHcsIHRoLCAo
ZG91YmxlKXpvb20sIHRtLT5jc3BhY2UpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3NldCh0bS0+bWF0cml4LCByb3cs
IGNvbCwgdCkpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0IG1hdHJpeCBjZWxsLCByb3cv
Y29sIG91dHNpZGUgbWF0cml4IGRpbWVuc2lvbnMhIik7Ci0gICAgICAgIGV3a190aWxlX2ZyZWUo
dCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQtPmNvbCA9IGNvbDsKLSAg
ICB0LT5yb3cgPSByb3c7Ci0gICAgdC0+eCA9IGNvbCAqIHR3OwotICAgIHQtPnkgPSByb3cgKiB0
aDsKLQotICAgIGNhaXJvX3RyYW5zbGF0ZSh0LT5jYWlybywgLXQtPngsIC10LT55KTsKLQotICAg
IHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwotICAgIHRtLT51cGRhdGVzID0gZWlu
YV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MK
LSAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwotICAgIHRtLT5zdGF0
cy50aWxlcy5hbGxvY2F0ZWQrKzsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLS8qKgot
ICogR2l2ZXMgYmFjayB0aGUgdGlsZSB0byB0aGUgdGlsZSBtYXRyaXguCi0gKgotICogVGhpcyB3
aWxsIHJlcG9ydCB0aGUgdGlsZSBpcyBubyBsb25nZXIgaW4gdXNlIGJ5IHRoZSBvbmUgdGhhdCBn
b3QKLSAqIGl0IHdpdGggZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkuCi0gKgotICog
QW55IHByZXZpb3VzIHJlZmVyZW5jZSB0byB0aWxlIHNob3VsZCBiZSByZWxlYXNlZAotICogKGV3
a190aWxlX2hpZGUoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAot
ICogYmUga25vd24gaWYgaXQgaXMgbm90IHZpc2liaWxlIGFueW1vcmUgYW5kIHRodXMgY2FuIGJl
IHB1dCBpbnRvIHRoZQotICogdW51c2VkIGNhY2hlLgotICoKLSAqIEBwYXJhbSB0bSB0aGUgdGls
ZSBtYXRyaXggdG8gcmV0dXJuIHRpbGUgdG8uCi0gKiBAcGFyYW0gdCB0aGUgdGlsZSBpbnN0YW5j
ZSB0byByZXR1cm4sIG11c3QgQGIgbm90IGJlIEBjIE5VTEwuCi0gKiBAcGFyYW0gbGFzdF91c2Vk
IHRpbWUgaW4gd2hpY2ggdGlsZSB3YXMgbGFzdCB1c2VkLgotICoKLSAqIEByZXR1cm4gI0VJTkFf
VFJVRSBvbiBzdWNjZXNzIG9yICNFSU5BX0ZBTFNFIG9uIGZhaWx1cmUuCi0gKi8KLUVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUg
KnQsIGRvdWJsZSBsYXN0X3VzZWQpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dCwgRUlOQV9GQUxTRSk7Ci0KLSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKLQotICAgIHQtPnN0YXRzLmxhc3RfdXNlZCA9IGxhc3RfdXNlZDsKLSAgICByZXR1
cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KHRtLT50dWMsIHQsIF9ld2tfdGlsZV9t
YXRyaXhfdGlsZV9mcmVlLCB0bSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVk
IGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQotewotICAgIEV3a19UaWxl
ICp0OwotICAgIEVpbmFfUmVjdGFuZ2xlIG5ld191cGRhdGU7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKLQotICAgIG1lbWNweSgmbmV3X3VwZGF0
ZSwgdXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkpOwotICAgIC8vIGNoZWNrIHVwZGF0ZSBpcyB2
YWxpZCwgb3RoZXJ3aXNlIHJldHVybiBFSU5BX0ZBTFNFCi0gICAgaWYgKHVwZGF0ZS0+eCA8IDAg
fHwgdXBkYXRlLT55IDwgMCB8fCB1cGRhdGUtPncgPD0gMCB8fCB1cGRhdGUtPmggPD0gMCkgewot
ICAgICAgICBFUlIoImludmFsaWQgdXBkYXRlIHJlZ2lvbi4iKTsKLSAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0g
dG0tPnRpbGUudykKLSAgICAgICAgbmV3X3VwZGF0ZS53ID0gdG0tPnRpbGUudyAtIHVwZGF0ZS0+
eDsKLSAgICBpZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0gMSA+PSB0bS0+dGlsZS5oKQotICAg
ICAgICBuZXdfdXBkYXRlLmggPSB0bS0+dGlsZS5oIC0gdXBkYXRlLT55OwotCi0gICAgdCA9IGVp
bmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7Ci0KLSAg
ICBpZiAoIXQpCi0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBpZiAoIXQtPnVwZGF0
ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFf
bGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQs
ICZuZXdfdXBkYXRlKTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLUVpbmFfQm9vbCBl
d2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNp
Z25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0g
ICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOwotCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJz
ZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsICZjZWxsKSkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybiBFSU5BX1RS
VUU7Ci0KLSAgICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKTsKLSAg
ICBpZiAoIXQpIHsKLSAgICAgICAgQ1JJVElDQUwoIm1hdHJpeCBjZWxsIHdpdGggbm8gdGlsZSEi
KTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoIXQtPnVwZGF0
ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFf
bGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQp
OwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdm9pZCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0sIEV3a19UaWxlICp0KQotewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAoIXQtPnVwZGF0ZXMgJiYg
IXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgZXdrX3RpbGVfdXBk
YXRlc19jbGVhcih0KTsKLSAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVw
ZGF0ZXMsIHQpOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9tYXRyaXhfc2xpY2Vy
X3NldHVwKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhLCBm
bG9hdCB6b29tLCBFaW5hX1RpbGVfR3JpZF9TbGljZXIgKnNsaWNlcikKLXsKLSAgICB1bnNpZ25l
ZCBsb25nIHJvd3MsIGNvbHM7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCB0dywgdGg7Ci0K
LSAgICBpZiAoYXJlYS0+dyA8PSAwIHx8IGFyZWEtPmggPD0gMCkgewotICAgICAgICBXUk4oImlu
dmFsaWQgYXJlYSByZWdpb246ICVkLCVkKyVkeCVkLiIsCi0gICAgICAgICAgICBhcmVhLT54LCBh
cmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0g
ICAgfQotCi0gICAgeCA9IGFyZWEtPng7Ci0gICAgeSA9IGFyZWEtPnk7Ci0gICAgdyA9IGFyZWEt
Pnc7Ci0gICAgaCA9IGFyZWEtPmg7Ci0KLSAgICB0dyA9IHRtLT50aWxlLnc7Ci0gICAgdGggPSB0
bS0+dGlsZS5oOwotCi0gICAgLy8gY3JvcHBpbmcgYXJlYSByZWdpb24gdG8gZml0IG1hdHJpeAot
ICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfZ2V0KHRtLT5tYXRyaXgsICZyb3dzLCAmY29scyk7
Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIHcgKz0geDsKLSAgICAgICAgeCA9IDA7Ci0gICAg
fQotICAgIGlmICh5IDwgMCkgewotICAgICAgICBoICs9IHk7Ci0gICAgICAgIHkgPSAwOwotICAg
IH0KLQotICAgIGlmICh5ICsgaCAtIDEgPiAobG9uZykocm93cyAqIHRoKSkKLSAgICAgICAgaCA9
IHJvd3MgKiB0aCAtIHk7Ci0gICAgaWYgKHggKyB3IC0gMSA+IChsb25nKShjb2xzICogdHcpKQot
ICAgICAgICB3ID0gY29scyAqIHR3IC0geDsKLQotICAgIHJldHVybiBlaW5hX3RpbGVfZ3JpZF9z
bGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywgdGgpOwotfQotCi0KLUVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlICp1cGRhdGUsIGZsb2F0IHpvb20pCi17Ci0gICAgY29uc3QgRWluYV9UaWxlX0dy
aWRfSW5mbyAqaW5mbzsKLSAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7Ci0KLSAgICBpZiAo
dXBkYXRlLT53IDwgMSB8fCB1cGRhdGUtPmggPCAxKSB7Ci0gICAgICAgIERCRygiV2h5IHdlIGdl
dCB1cGRhdGVzIHdpdGggZW1wdHkgYXJlYXM/ICVkLCVkKyVkeCVkIGF0IHpvb20gJWYiLAotICAg
ICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywgdXBkYXRlLT5oLCB6b29t
KTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoIV9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKHRtLCB1cGRhdGUsIHpvb20sICZzbGljZXIpKSB7Ci0gICAg
ICAgIEVSUigiQ291bGQgbm90IHNldHVwIHNsaWNlciBmb3IgdXBkYXRlICVkLCVkKyVkeCVkIGF0
IHpvb20gJWYiLAotICAgICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywg
dXBkYXRlLT5oLCB6b29tKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9uZXh0KCZzbGljZXIsICZpbmZvKSkgewot
ICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgICAgICBFd2tfVGlsZSAqdDsKLSAg
ICAgICAgY29sID0gaW5mby0+Y29sOwotICAgICAgICByb3cgPSBpbmZvLT5yb3c7Ci0KLSAgICAg
ICAgdCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNv
bCk7Ci0gICAgICAgIGlmICghdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
ICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgICAgICB0bS0+
dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgICAgICBpZiAo
aW5mby0+ZnVsbCkKLSAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmaW5mby0+cmVjdCk7
Ci0gICAgfQotCi0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi12b2lkIGV3a190aWxlX21h
dHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsKLSAgICBFaW5hX0xp
c3QgKmwsICpsX25leHQ7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4odG0pOwotCi0gICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKLSAg
ICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRtLT51cGRhdGVzLCBsLCBsX25leHQsIHQpIHsKLSAg
ICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHQsIHRtLT5yZW5kZXIuY2IsIHRtLT5yZW5k
ZXIuZGF0YSk7Ci0gICAgICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgICAgICBld2tfdGls
ZV91cGRhdGVzX2NsZWFyKHQpOwotICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3Rf
cmVtb3ZlX2xpc3QodG0tPnVwZGF0ZXMsIGwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0g
ICAgRXdrX1RpbGUgKnQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotCi0g
ICAgRUlOQV9MSVNUX0ZSRUUodG0tPnVwZGF0ZXMsIHQpCi0gICAgICAgIGV3a190aWxlX3VwZGF0
ZXNfY2xlYXIodCk7Ci0gICAgdG0tPnVwZGF0ZXMgPSBOVUxMOwotfQotCi0vLyByZW1vdmUgbWUg
bGF0ZXIhCi12b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0
bSkKLXsKLSAgICBFaW5hX0l0ZXJhdG9yICppdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9y
X2NvbXBsZXRlX25ldyh0bS0+bWF0cml4KTsKLSAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpj
ZWxsOwotICAgIEVpbmFfQm9vbCBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKLQotI2lmZGVmIERF
QlVHX01FTV9MRUFLUwotICAgIHByaW50ZigiRXdrX1RpbGUgTWF0cml4OiB0aWxlc1srJSJQUkl1
NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQi
LC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFs
bG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAotICAgICAgICAgICB0bS0+c3RhdHMudGls
ZXMuYWxsb2NhdGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAotICAgICAgICAgICB0bS0+c3Rh
dHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCi0gICAgICAgICAgIHRt
LT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOwotI2Vsc2UK
LSAgICBwcmludGYoIkV3a19UaWxlIE1hdHJpeDpcbiIpOwotI2VuZGlmCi0KLSAgICBFSU5BX0lU
RVJBVE9SX0ZPUkVBQ0goaXQsIGNlbGwpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNv
bDsKLSAgICAgICAgRXdrX1RpbGUgKnQ7Ci0gICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxf
cG9zaXRpb25fZ2V0KGNlbGwsICZyb3csICZjb2wpOwotICAgICAgICB0ID0gZWluYV9tYXRyaXhz
cGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKTsKLQotICAgICAgICBpZiAoIXQpIHsKLSAgICAgICAg
ICAgIGlmICghbGFzdF9lbXB0eSkgewotICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5B
X1RSVUU7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFbXB0eToiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHByaW50ZigiIFslbHUsJWx1XSIsIGNvbCwgcm93KTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChsYXN0X2VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgbGFz
dF9lbXB0eSA9IEVJTkFfRkFMU0U7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJv
dywgdCk7Ci0gICAgICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0l
YyIsIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLCB0LT52aXNpYmxlID8gJyon
OiAnICcpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChsYXN0X2VtcHR5KQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0KTsKLQotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodG0tPnR1Yyk7Ci19
Ci0KLS8qKgotICogRnJlZXplIG1hdHJpeCB0byBub3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCi0g
KgotICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93
IHdlIHNob3VsZCBob2xkCi0gKiBvbiB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlv
biwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQotICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRo
YXcgd2hlbiB3ZSdyZSBkb25lLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RoYXcoKQot
ICovCi12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgaWYgKCF0bS0+ZnJvemVu
KQotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwotICAgIHRt
LT5mcm96ZW4rKzsKLX0KLQotLyoqCi0gKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3MuCi0g
KgotICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4gbWFp
bnRlbmFuY2UgdGFza3MKLSAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgotICovCi12b2lkIGV3a190
aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odG0pOwotICAgIGlmICghdG0tPmZyb3plbikgewotICAgICAgICBFUlIo
InRoYXdpbmcgbW9yZSB0aGFuIGZyZWV6aW5nISIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgdG0tPmZyb3plbi0tOwotICAgIGlmICghdG0tPmZyb3plbikKLSAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX21hdHJpeC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY0YzQxYzcxOTEzNDdmMDFhNjE5YjNk
MWNiZWU5YmNiNTRhNjJjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfbWF0cml4LmNwcApAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX21hdHJpeC5oIgorCisjaW5jbHVkZSAiZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1
ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+Cisj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCByZW1vdmUgbWUgbGF0
ZXIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RydWN0IF9F
d2tfVGlsZV9NYXRyaXggeworICAgIEVpbmFfTWF0cml4c3BhcnNlICptYXRyaXg7CisgICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKKyAg
ICBzdHJ1Y3QgeworICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKKyAgICAgICAgdm9pZCAqZGF0YTsKKyAgICB9
IHJlbmRlcjsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOworICAgIEVpbmFfTGlzdCAqdXBkYXRl
czsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgfSB0aWxlOwor
I2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICB1aW50NjRfdCBhbGxvY2F0ZWQsIGZyZWVkOworICAgICAgICB9IHRpbGVzLCBi
eXRlczsKKyAgICB9IHN0YXRzOworI2VuZGlmCit9OworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CitzdGF0aWMgdWludDY0X3QgdGlsZXNfbGVha2VkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRl
c19sZWFrZWQgPSAwOworI2VuZGlmCisKKy8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyBy
ZXNpemVkIG9yIGZyZWVkICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJl
ZSh2b2lkICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKK3sKKyAgICBFd2tfVGlsZV9NYXRy
aXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4odXNlcl9kYXRhKTsKKyAgICBF
d2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oY2VsbF9kYXRhKTsKKworICAgIGlm
ICghdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6
ZSh0bS0+dHVjKTsKKworICAgIGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRl
KQorICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQp
OworCisgICAgaWYgKHQtPnZpc2libGUpCisgICAgICAgIEVSUigiZnJlZWluZyBjZWxsIHRoYXQg
aXMgdmlzaWJsZSwgbGVha2luZyB0aWxlICVwIiwgdCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQorICAgICAgICAg
ICAgRVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0LCB0bS0+
dHVjKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBEQkcoInRpbGUgY2VsbCBkb2VzIG5v
dCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwgdCk7CisjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CisgICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgICAg
ICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsKKyNlbmRpZgorICAgICAgICAgICAgZXdrX3Rp
bGVfZnJlZSh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGV3a190aWxlX3VudXNlZF9jYWNo
ZV90aGF3KHRtLT50dWMpOworfQorCisvKiBjYWxsZWQgd2hlbiBjYWNoZSBvZiB1bnVzZWQgdGls
ZSBpcyBmbHVzaGVkICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2
b2lkICpkYXRhLCBFd2tfVGlsZSAqdCkKK3sKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oZGF0YSk7CisgICAgRWluYV9NYXRyaXhzcGFyc2Vf
Q2VsbCAqY2VsbDsKKyAKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0
bS0+bWF0cml4LCB0LT5yb3csIHQtPmNvbCwgJmNlbGwpKSB7CisgICAgICAgIEVSUigicmVtb3Zp
bmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjZWxsKSB7CisgICAgICAgIEVSUigi
cmVtb3ZpbmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIs
IHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92
ZSh0bS0+dXBkYXRlcywgdCk7CisKKyAgICAvKiBzZXQgdG8gbnVsbCB0byBhdm9pZCBkb3VibGUg
ZnJlZSAqLworICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9yZXBsYWNlKGNlbGwsIDAs
IDApOworICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfY2xlYXIoY2VsbCk7CisKKyAgICBpZiAo
RUlOQV9VTkxJS0VMWSghIXQtPnZpc2libGUpKSB7CisgICAgICAgIEVSUigiY2FjaGUgb2YgdW51
c2VkIHRpbGVzIHJlcXVlc3RpbmcgZGVsZXRpb24gb2YgdXNlZCB0aWxlICVwPyAiCisgICAgICAg
ICAgICAiTGVha2luZy4uLiIsIHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWZkZWYg
REVCVUdfTUVNX0xFQUtTCisgICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwor
ICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOworI2VuZGlmCisKKyAgICBld2tfdGlsZV9mcmVl
KHQpOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgbWF0cml4IG9mIHRpbGVzLgorICoKKyAq
IFRoZSB0aWxlIG1hdHJpeCBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0aWxlcyBhcm91bmQg
YW5kCisgKiBwcm92aWRpbmcgZmFzdCBhY2Nlc3MgdG8gdGhlbS4gT25lIGNhbiB1c2UgaXQgdG8g
cmV0cmlldmUgbmV3IG9yCisgKiBleGlzdGluZyB0aWxlcyBhbmQgZ2l2ZSB0aGVtIGJhY2ssIGFs
bG93aW5nIHRoZW0gdG8gYmUKKyAqIGZyZWVkL3JlcGxhY2VkIGJ5IHRoZSBjYWNoZS4KKyAqCisg
KiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcyBvciBAYyAwIHRvIGNyZWF0ZSBvbmUK
KyAqICAgICAgICBhdXRvbWF0aWNhbGx5LgorICogQHBhcmFtIGNvbHMgbnVtYmVyIG9mIGNvbHVt
bnMgaW4gdGhlIG1hdHJpeC4KKyAqIEBwYXJhbSByb3dzIG51bWJlciBvZiByb3dzIGluIHRoZSBt
YXRyaXguCisgKiBAcGFyYW0gY3NwYWNlIHRoZSBjb2xvciBzcGFjZSB1c2VkIHRvIGNyZWF0ZSB0
aWxlcyBpbiB0aGlzIG1hdHJpeC4KKyAqIEBwYXJhbSByZW5kZXJfY2IgZnVuY3Rpb24gdXNlZCB0
byByZW5kZXIgZ2l2ZW4gdGlsZSB1cGRhdGUuCisgKiBAcGFyYW0gcmVuZGVyX2RhdGEgY29udGV4
dCB0byBnaXZlIGJhY2sgdG8gQGEgcmVuZGVyX2NiLgorICoKKyAqIEByZXR1cm4gbmV3bHkgYWxs
b2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFpbHVyZS4KKyAqLworRXdrX1Rp
bGVfTWF0cml4ICpld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
LCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNl
IGNzcGFjZSwgdm9pZCAoKnJlbmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpyZW5kZXJfZGF0YSkKK3sKKyAg
ICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oY2Fs
bG9jKDEsIHNpemVvZihFd2tfVGlsZV9NYXRyaXgpKSk7CisgICAgaWYgKCF0bSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3Ms
IGNvbHMsIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7CisgICAgaWYgKCF0bS0+bWF0
cml4KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4LiIpOwor
ICAgICAgICBmcmVlKHRtKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHR1
YykKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodHVjKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5
NjAwMDApOworICAgICAgICBpZiAoIXRtLT50dWMpIHsKKyAgICAgICAgICAgIEVSUigibm8gY2Fj
aGUgb2YgdW51c2VkIHRpbGUhIik7CisgICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVl
KHRtLT5tYXRyaXgpOworICAgICAgICAgICAgZnJlZSh0bSk7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7CisgICAgdG0t
PnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKKyAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKXJl
bmRlcl9kYXRhOworICAgIHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKKyAgICB0bS0+dGls
ZS5oID0gREVGQVVMVF9USUxFX0g7CisKKyAgICByZXR1cm4gdG07Cit9CisKKy8qKgorICogRGVz
dHJveXMgdGlsZXMgbWF0cml4LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KKyAqCisgKiBUaGUg
Y2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICov
Cit2b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisjaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCisgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOworI2VuZGlmCisK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKworICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0t
Pm1hdHJpeCk7CisKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKKyAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodG0tPnR1Yyk7CisKKyNpZmRlZiBERUJVR19N
RU1fTEVBS1MKKyAgICB0aWxlcyA9IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQ7CisgICAgYnl0ZXMgPSB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLmJ5dGVzLmZyZWVkOworCisgICAgdGlsZXNfbGVha2VkICs9IHRpbGVzOworICAg
IGJ5dGVzX2xlYWtlZCArPSBieXRlczsKKworICAgIGlmICh0aWxlcyB8fCBieXRlcykKKyAgICAg
ICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6
JSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSIsCisgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7CisgICAgZWxzZSBpZiAodGlsZXNf
bGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKKyAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5v
IGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCisgICAgICAg
ICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwKKyAgICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAg
ICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKKyAgICBlbHNlCisgICAgICAg
IElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdIiwKKyAgICAg
ICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwK
KyAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCk7CisjZW5kaWYKKworICAgIGZyZWUodG0pOworfQorCisvKioKKyAqIFJlc2l6ZSBtYXRy
aXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCisgKi8KK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
bSk7CisgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQodG0tPm1hdHJpeCwgcm93cywgY29s
cyk7Cit9CisKKy8qKgorICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgaW4gdXNlIGJ5
IGdpdmVuIG1hdHJpeC4KKyAqCisgKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hl
LgorICovCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKKyAgICByZXR1cm4gdG0tPnR1YzsKK30KKworLyoqCisg
KiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4KKyAq
CisgKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhlIGNh
Y2hlLgorICoKKyAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBiYWNrIHVzaW5nCisgKiBl
d2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4gSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBpZiBp
dCBleGlzdHMsCisgKiB0aGVuIHVzZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMo
KS4KKyAqCisgKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxlIGZyb20uCisg
KiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51
bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KKyAqCisgKiBAcmV0
dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIDAgaWYgbm9uZSBpcyBmb3VuZC4gSWYgdGhlIHRp
bGUKKyAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2lsbCBiZSBAYiByZW1v
dmVkICh0aHVzCisgKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9uZSBzaG91bGQgZ2l2
ZSBpdCBiYWNrIHdpdGgKKyAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkgYWZ0
ZXJ3YXJkcy4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgpCisg
Ki8KK0V3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1RpbGVfTWF0
cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29t
KQoreworICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJp
eHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpKTsKKyAgICBpZiAoIXQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHQtPnpvb20gPT0gem9vbSkKKyAgICAgICAg
Z290byBlbmQ7CisKKyAgZW5kOgorICAgIGlmICghdC0+dmlzaWJsZSkgeworICAgICAgICBpZiAo
IWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0KSkKKyAgICAgICAgICAg
IFdSTigiRXdrX1RpbGUgd2FzIHVudXNlZCBidXQgbm90IGluIGNhY2hlPyBidWchIik7CisgICAg
fQorCisgICAgcmV0dXJuIHQ7Cit9CisKKy8qKgorICogQ2hlY2tzIGlmIHRpbGUgb2YgZ2l2ZW4g
em9vbSBleGlzdHMgaW4gbWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXgg
dG8gY2hlY2sgdGlsZSBleGlzdGVuY2UuCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVy
LgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBleGFj
dCB6b29tIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGZvdW5kLCBA
YyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxl
X2V4YWN0X2dldCgpCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9l
eGlzdHMoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93LCBmbG9hdCB6b29tKQoreworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9p
ZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyB0aWxl
IGF0IGdpdmVuIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsIGluIHRoZSBtYXRyaXguCisgKgorICog
VGhlIG5ld2x5IGNyZWF0ZWQgdGlsZSBpcyBjb25zaWRlcmVkIGluIHVzZSBhbmQgbm90IHB1dCBp
bnRvIGNhY2hlCisgKiBvZiB1bnVzZWQgdGlsZXMuIEFmdGVyIGl0IGlzIHVzZWQgb25lIHNob3Vs
ZCBjYWxsCisgKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKSB0byBnaXZlIGl0IGJhY2sgdG8g
bWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gY3JlYXRlIHRpbGUg
b24uCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUg
cm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBsZXZlbCB0byBjcmVhdGUgdGlsZSwgdXNl
ZCB0byBkZXRlcm1pbmUgdGlsZSBzaXplLgorICovCitFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4
X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbmcg
Y29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK3sKKyAgICBFdmFzX0Nvb3JkIHR3
LCB0aDsKKyAgICBFd2tfVGlsZSAqdDsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTCh0bSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTCh6b29tID4g
MC4wLCAwKTsKKworICAgIHR3ID0gdG0tPnRpbGUudzsKKyAgICB0aCA9IHRtLT50aWxlLmg7CisK
KyAgICB0ID0gZXdrX3RpbGVfbmV3KGV2YXMsIHR3LCB0aCwgem9vbSwgdG0tPmNzcGFjZSk7Cisg
ICAgaWYgKCF0KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0
ICVmLCBjc3BhY2U9JWQiLCB0dywgdGgsIChkb3VibGUpem9vbSwgdG0tPmNzcGFjZSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9p
ZHhfc2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCB0KSkgeworICAgICAgICBFUlIoImNvdWxkIG5v
dCBzZXQgbWF0cml4IGNlbGwsIHJvdy9jb2wgb3V0c2lkZSBtYXRyaXggZGltZW5zaW9ucyEiKTsK
KyAgICAgICAgZXdrX3RpbGVfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgdC0+Y29sID0gY29sOworICAgIHQtPnJvdyA9IHJvdzsKKyAgICB0LT54ID0gY29sICogdHc7
CisgICAgdC0+eSA9IHJvdyAqIHRoOworCisgICAgY2Fpcm9fdHJhbnNsYXRlKHQtPmNhaXJvLCAt
dC0+eCwgLXQtPnkpOworCisgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Cisg
ICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+
Ynl0ZXM7CisgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCsrOworI2VuZGlmCisKKyAgICBy
ZXR1cm4gdDsKK30KKworLyoqCisgKiBHaXZlcyBiYWNrIHRoZSB0aWxlIHRvIHRoZSB0aWxlIG1h
dHJpeC4KKyAqCisgKiBUaGlzIHdpbGwgcmVwb3J0IHRoZSB0aWxlIGlzIG5vIGxvbmdlciBpbiB1
c2UgYnkgdGhlIG9uZSB0aGF0IGdvdAorICogaXQgd2l0aCBld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9nZXQoKS4KKyAqCisgKiBBbnkgcHJldmlvdXMgcmVmZXJlbmNlIHRvIHRpbGUgc2hvdWxk
IGJlIHJlbGVhc2VkCisgKiAoZXdrX3RpbGVfaGlkZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1
bmN0aW9uLCBzbyBpdCB3aWxsCisgKiBiZSBrbm93biBpZiBpdCBpcyBub3QgdmlzaWJpbGUgYW55
bW9yZSBhbmQgdGh1cyBjYW4gYmUgcHV0IGludG8gdGhlCisgKiB1bnVzZWQgY2FjaGUuCisgKgor
ICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KKyAqIEBwYXJh
bSB0IHRoZSB0aWxlIGluc3RhbmNlIHRvIHJldHVybiwgbXVzdCBAYiBub3QgYmUgQGMgMC4KKyAq
IEBwYXJhbSBsYXN0X3VzZWQgdGltZSBpbiB3aGljaCB0aWxlIHdhcyBsYXN0IHVzZWQuCisgKgor
ICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3Mgb3IgI0VJTkFfRkFMU0Ugb24gZmFpbHVy
ZS4KKyAqLworRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRy
aXggKnRtLCBFd2tfVGlsZSAqdCwgZG91YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh0LCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh0LT52aXNpYmxlKQor
ICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworCisgICAgdC0+c3RhdHMubGFzdF91c2VkID0gbGFz
dF91c2VkOworICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0tPnR1
YywgdCwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRtKTsKK30KKworRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBs
b25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUp
Cit7CisgICAgRWluYV9SZWN0YW5nbGUgbmV3X3VwZGF0ZTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOworCisgICAgbWVtY3B5KCZuZXdfdXBkYXRl
LCB1cGRhdGUsIHNpemVvZihuZXdfdXBkYXRlKSk7CisgICAgLy8gY2hlY2sgdXBkYXRlIGlzIHZh
bGlkLCBvdGhlcndpc2UgcmV0dXJuIEVJTkFfRkFMU0UKKyAgICBpZiAodXBkYXRlLT54IDwgMCB8
fCB1cGRhdGUtPnkgPCAwIHx8IHVwZGF0ZS0+dyA8PSAwIHx8IHVwZGF0ZS0+aCA8PSAwKSB7Cisg
ICAgICAgIEVSUigiaW52YWxpZCB1cGRhdGUgcmVnaW9uLiIpOworICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKKyAgICB9CisKKyAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSB0
bS0+dGlsZS53KQorICAgICAgICBuZXdfdXBkYXRlLncgPSB0bS0+dGlsZS53IC0gdXBkYXRlLT54
OworICAgIGlmICh1cGRhdGUtPnkgKyB1cGRhdGUtPmggLSAxID49IHRtLT50aWxlLmgpCisgICAg
ICAgIG5ld191cGRhdGUuaCA9IHRtLT50aWxlLmggLSB1cGRhdGUtPnk7CisKKyAgICBFd2tfVGls
ZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhf
Z2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSk7CisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOworCisgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0
ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0
KTsKKyAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmbmV3X3VwZGF0ZSk7CisKKyAgICByZXR1
cm4gRUlOQV9UUlVFOworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRl
X2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93KQoreworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICghZWlu
YV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCAmY2VsbCkp
CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgaWYgKCFjZWxsKQorICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworCisgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOworICAgIGlmICghdCkg
eworICAgICAgICBDUklUSUNBTCgibWF0cml4IGNlbGwgd2l0aCBubyB0aWxlISIpOworICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVu
ZCh0bS0+dXBkYXRlcywgdCk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisKKyAgICBy
ZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNf
Y2xlYXIoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUgKnQpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMu
ZnVsbF91cGRhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFy
KHQpOworICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7
Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAoRXdr
X1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEsIGZsb2F0IHpvb20s
IEVpbmFfVGlsZV9HcmlkX1NsaWNlciAqc2xpY2VyKQoreworICAgIHVuc2lnbmVkIGxvbmcgcm93
cywgY29sczsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgsIHR3LCB0aDsKKworICAgIGlmIChh
cmVhLT53IDw9IDAgfHwgYXJlYS0+aCA8PSAwKSB7CisgICAgICAgIFdSTigiaW52YWxpZCBhcmVh
IHJlZ2lvbjogJWQsJWQrJWR4JWQuIiwKKyAgICAgICAgICAgIGFyZWEtPngsIGFyZWEtPnksIGFy
ZWEtPncsIGFyZWEtPmgpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAg
ICB4ID0gYXJlYS0+eDsKKyAgICB5ID0gYXJlYS0+eTsKKyAgICB3ID0gYXJlYS0+dzsKKyAgICBo
ID0gYXJlYS0+aDsKKworICAgIHR3ID0gdG0tPnRpbGUudzsKKyAgICB0aCA9IHRtLT50aWxlLmg7
CisKKyAgICAvLyBjcm9wcGluZyBhcmVhIHJlZ2lvbiB0byBmaXQgbWF0cml4CisgICAgZWluYV9t
YXRyaXhzcGFyc2Vfc2l6ZV9nZXQodG0tPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKKyAgICBpZiAo
eCA8IDApIHsKKyAgICAgICAgdyArPSB4OworICAgICAgICB4ID0gMDsKKyAgICB9CisgICAgaWYg
KHkgPCAwKSB7CisgICAgICAgIGggKz0geTsKKyAgICAgICAgeSA9IDA7CisgICAgfQorCisgICAg
aWYgKHkgKyBoIC0gMSA+IChsb25nKShyb3dzICogdGgpKQorICAgICAgICBoID0gcm93cyAqIHRo
IC0geTsKKyAgICBpZiAoeCArIHcgLSAxID4gKGxvbmcpKGNvbHMgKiB0dykpCisgICAgICAgIHcg
PSBjb2xzICogdHcgLSB4OworCisgICAgcmV0dXJuIGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1
cChzbGljZXIsIHgsIHksIHcsIGgsIHR3LCB0aCk7Cit9CisKKworRWluYV9Cb29sIGV3a190aWxl
X21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUg
KnVwZGF0ZSwgZmxvYXQgem9vbSkKK3sKKyAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvICpp
bmZvOworICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh1cGRhdGUtPncg
PCAxIHx8IHVwZGF0ZS0+aCA8IDEpIHsKKyAgICAgICAgREJHKCJXaHkgd2UgZ2V0IHVwZGF0ZXMg
d2l0aCBlbXB0eSBhcmVhcz8gJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIsCisgICAgICAgICAgICB1
cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgsIHpvb20pOworICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIGlmICghX2V3a190aWxlX21hdHJpeF9z
bGljZXJfc2V0dXAodG0sIHVwZGF0ZSwgem9vbSwgJnNsaWNlcikpIHsKKyAgICAgICAgRVJSKCJD
b3VsZCBub3Qgc2V0dXAgc2xpY2VyIGZvciB1cGRhdGUgJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIs
CisgICAgICAgICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgs
IHpvb20pOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICB3aGlsZSAo
ZWluYV90aWxlX2dyaWRfc2xpY2VyX25leHQoJnNsaWNlciwgJmluZm8pKSB7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgICAgIGNvbCA9IGluZm8tPmNvbDsKKyAgICAgICAg
cm93ID0gaW5mby0+cm93OworCisgICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBj
b2wpKTsKKyAgICAgICAgaWYgKCF0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgICAgIHRt
LT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7CisgICAgICAgIGlm
IChpbmZvLT5mdWxsKQorICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZpbmZvLT5yZWN0
KTsKKyAgICB9CisKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVf
bWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVpbmFf
TGlzdCAqbCwgKmxfbmV4dDsKKyAgICB2b2lkKiBpdGVtOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHRtKTsKKworICAgIC8vIHByb2Nlc3MgdXBkYXRlcywgdW5mbGFnIHRpbGVzCisg
ICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0bS0+dXBkYXRlcywgbCwgbF9uZXh0LCBpdGVtKSB7
CisgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihpdGVtKTsK
KyAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHRpbGUsIHRtLT5yZW5kZXIuY2IsIHRt
LT5yZW5kZXIuZGF0YSk7CisgICAgICAgIGlmICh0aWxlLT52aXNpYmxlKSB7CisgICAgICAgICAg
ICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGUpOworICAgICAgICAgICAgdG0tPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodG0tPnVwZGF0ZXMsIGwpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJp
eCAqdG0pCit7CisgICAgdm9pZCogaXRlbTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tih0bSk7CisKKyAgICBFSU5BX0xJU1RfRlJFRSh0bS0+dXBkYXRlcywgaXRlbSkKKyAgICAgICAg
ZXdrX3RpbGVfdXBkYXRlc19jbGVhcihzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGl0ZW0pKTsKKyAg
ICB0bS0+dXBkYXRlcyA9IDA7Cit9CisKKy8vIHJlbW92ZSBtZSBsYXRlciEKK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVpbmFfSXRl
cmF0b3IgKml0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRlcmF0b3JfY29tcGxldGVfbmV3KHRtLT5t
YXRyaXgpOworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAgRWluYV9Cb29s
IGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAg
cHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBS
SXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2
NCJdXG4iLAorICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMu
dGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+
c3RhdHMudGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQs
IHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCk7CisjZWxzZQorICAgIHByaW50ZigiRXdrX1Rp
bGUgTWF0cml4OlxuIik7CisjZW5kaWYKKworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwg
Y2VsbCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sOworICAgICAgICBlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sKTsKKworICAgICAg
ICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2Vf
Y2VsbF9kYXRhX2dldChjZWxsKSk7CisgICAgICAgIGlmICghdCkgeworICAgICAgICAgICAgaWYg
KCFsYXN0X2VtcHR5KSB7CisgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfVFJVRTsK
KyAgICAgICAgICAgICAgICBwcmludGYoIkVtcHR5OiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29sLCByb3cpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGxhc3RfZW1wdHkpIHsKKyAgICAgICAgICAgICAgICBsYXN0X2VtcHR5
ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBwcmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0KTsK
KyAgICAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdC0+
Y29sLCB0LT5yb3csIHQtPncsIHQtPmgsIHQtPnpvb20sIHQtPnZpc2libGUgPyAnKic6ICcgJyk7
CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxh
c3RfZW1wdHkpCisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUo
aXQpOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0bS0+dHVjKTsKK30KKworLyoq
CisgKiBGcmVlemUgbWF0cml4IHRvIG5vdCBkbyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBN
YWludGVuYW5jZSB0YXNrcyBvcHRpbWl6ZSB1c2FnZSwgYnV0IG1heWJlIHdlIGtub3cgd2Ugc2hv
dWxkIGhvbGQKKyAqIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxhc3Qgb3BlcmF0aW9uLCBpbiB0
aGlzIGNhc2Ugd2UgZnJlZXplCisgKiB3aGlsZSBvcGVyYXRpbmcgYW5kIHRoZW4gdGhhdyB3aGVu
IHdlJ3JlIGRvbmUuCisgKgorICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGhhdygpCisgKi8KK3Zv
aWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBpZiAoIXRtLT5mcm96ZW4pCisgICAg
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgdG0tPmZyb3pl
bisrOworfQorCisvKioKKyAqIFVuZnJlZXplcyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBJ
ZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5j
ZSB0YXNrcworICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfbWF0
cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0bSk7CisgICAgaWYgKCF0bS0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhhd2lu
ZyBtb3JlIHRoYW4gZnJlZXppbmchIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0
bS0+ZnJvemVuLS07CisgICAgaWYgKCF0bS0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfbW9kZWwuYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
bW9kZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJlOTQ3OTNiNmRiY2IxZGVh
Y2YxYjhjNTQwMWRlMmI0YTU3NzZkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMKKysr
IC9kZXYvbnVsbApAQCAtMSw4NDggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiZXdrX3RpbGVkX21vZGVsLmgiCi0KLSNkZWZpbmUgX0dOVV9TT1VSQ0UKLSNpbmNsdWRlICJl
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIgotI2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRlLmgi
Ci0jaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUgPEVpbmEuaD4KLSNpbmNsdWRlIDxl
aW5hX3NhZmV0eV9jaGVja3MuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5
cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgVElMRV9TVEFUU19B
Q0NPVU5UX1JFTkRFUl9USU1FCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jaWZu
ZGVmIENBSVJPX0ZPUk1BVF9SR0IxNl81NjUKLSNkZWZpbmUgQ0FJUk9fRk9STUFUX1JHQjE2XzU2
NSA0Ci0jZW5kaWYKLQotI2RlZmluZSBJRFgoY29sLCByb3csIHJvd3NwYW4pIChjb2wgKyAocm93
ICogcm93c3BhbikpCi0jZGVmaW5lIE1JTihhLCBiKSAoKGEgPCBiKSA/IGEgOiBiKQotI2RlZmlu
ZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwot
c3RhdGljIHVpbnQ2NF90IHRpbGVzX2FsbG9jYXRlZCA9IDA7Ci1zdGF0aWMgdWludDY0X3QgdGls
ZXNfZnJlZWQgPSAwOwotc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2FsbG9jYXRlZCA9IDA7Ci1zdGF0
aWMgdWludDY0X3QgYnl0ZXNfZnJlZWQgPSAwOwotCi1zdHJ1Y3QgdGlsZV9hY2NvdW50IHsKLSAg
ICBFdmFzX0Nvb3JkIHNpemU7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdWludDY0X3QgYWxsb2Nh
dGVkOwotICAgICAgICB1aW50NjRfdCBmcmVlZDsKLSAgICB9IHRpbGVzLCBieXRlczsKLX07Ci0K
LXN0YXRpYyBzaXplX3QgYWNjb3VudGluZ19sZW4gPSAwOwotc3RhdGljIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKmFjY291bnRpbmcgPSBOVUxMOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKl9ld2tfdGlsZV9hY2NvdW50X2dldChjb25zdCBFd2tfVGlsZSAqdCkKLXsKLSAgICBz
dHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7Ci0gICAgc2l6ZV90IGk7Ci0KLSAgICBmb3IgKGkgPSAw
OyBpIDwgYWNjb3VudGluZ19sZW47IGkrKykgewotICAgICAgICBpZiAoYWNjb3VudGluZ1tpXS5z
aXplID09IHQtPncpCi0gICAgICAgICAgICByZXR1cm4gYWNjb3VudGluZyArIGk7Ci0gICAgfQot
Ci0gICAgaSA9IChhY2NvdW50aW5nX2xlbiArIDEpICogc2l6ZW9mKHN0cnVjdCB0aWxlX2FjY291
bnQpOwotICAgIFJFQUxMT0NfT1JfT09NX1JFVChhY2NvdW50aW5nLCBpLCBOVUxMKTsKLQotICAg
IGFjYyA9IGFjY291bnRpbmcgKyBhY2NvdW50aW5nX2xlbjsKLSAgICBhY2MtPnNpemUgPSB0LT53
OwotICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkID0gMDsKLSAgICBhY2MtPnRpbGVzLmZyZWVkID0g
MDsKLSAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCA9IDA7Ci0gICAgYWNjLT5ieXRlcy5mcmVlZCA9
IDA7Ci0KLSAgICBhY2NvdW50aW5nX2xlbisrOwotCi0gICAgcmV0dXJuIGFjYzsKLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGls
ZSAqdCkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2MgPSBfZXdrX3RpbGVfYWNjb3Vu
dF9nZXQodCk7Ci0gICAgaWYgKCFhY2MpCi0gICAgICAgIHJldHVybjsKLSAgICBhY2MtPmJ5dGVz
LmFsbG9jYXRlZCArPSB0LT5ieXRlczsKLSAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCsrOwotCi0g
ICAgYnl0ZXNfYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwotICAgIHRpbGVzX2FsbG9jYXRlZCsrOwot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdr
X1RpbGUgKnQpCi17Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2Fj
Y291bnRfZ2V0KHQpOwotICAgIGlmICghYWNjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhY2Mt
PmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwotICAgIGFjYy0+dGlsZXMuZnJlZWQrKzsKLQotICAg
IGJ5dGVzX2ZyZWVkICs9IHQtPmJ5dGVzOwotICAgIHRpbGVzX2ZyZWVkKys7Ci19Ci0KLXZvaWQg
ZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50
ICphY2M7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjX2VuZDsKLQotICAgIHByaW50Zigi
VElMRSBCQUxBTkNFOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0g
ICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAg
ICAgICAgICAgIHRpbGVzX2FsbG9jYXRlZCwgdGlsZXNfZnJlZWQsIHRpbGVzX2FsbG9jYXRlZCAt
IHRpbGVzX2ZyZWVkLAotICAgICAgICAgICAgYnl0ZXNfYWxsb2NhdGVkLCBieXRlc19mcmVlZCwg
Ynl0ZXNfYWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQpOwotCi0gICAgaWYgKCFhY2NvdW50aW5nX2xl
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYWNjID0gYWNjb3VudGluZzsKLSAgICBhY2NfZW5k
ID0gYWNjICsgYWNjb3VudGluZ19sZW47Ci0gICAgcHJpbnRmKCJCRUdJTjogVElMRSBCQUxBTkNF
IERFVEFJTFMgKFRPIFRISVMgTU9NRU5UISk6XG4iKTsKLSAgICBmb3IgKDsgYWNjIDwgYWNjX2Vu
ZDsgYWNjKyspIHsKLSAgICAgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwotCi0gICAgICAgIHRp
bGVzID0gYWNjLT50aWxlcy5hbGxvY2F0ZWQgLSBhY2MtPnRpbGVzLmZyZWVkOwotICAgICAgICBi
eXRlcyA9IGFjYy0+Ynl0ZXMuYWxsb2NhdGVkIC0gYWNjLT5ieXRlcy5mcmVlZDsKLQotICAgICAg
ICBwcmludGYoIiAgICU0ZDogdGlsZXNbKyU0IlBSSXU2NCIsLSU0IlBSSXU2NCI6JTQiUFJJdTY0
Il0gIgotICAgICAgICAgICAgICAgImJ5dGVzWyslOCJQUkl1NjQiLC0lOCJQUkl1NjQiOiU4IlBS
SXU2NCJdJXNcbiIsCi0gICAgICAgICAgICAgICBhY2MtPnNpemUsCi0gICAgICAgICAgICAgICBh
Y2MtPnRpbGVzLmFsbG9jYXRlZCwgYWNjLT50aWxlcy5mcmVlZCwgdGlsZXMsCi0gICAgICAgICAg
ICAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCwgYWNjLT5ieXRlcy5mcmVlZCwgYnl0ZXMsCi0gICAg
ICAgICAgICAgICAoYnl0ZXMgfHwgdGlsZXMpID8gIiBQT1NTSUJMRSBMRUFLIiA6ICIiKTsKLSAg
ICB9Ci0gICAgcHJpbnRmKCJFTkQ6IFRJTEUgQkFMQU5DRSBERVRBSUxTIChUTyBUSElTIE1PTUVO
VCEpOlxuIik7Ci19Ci0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291
bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxlICp0KSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9Ci0KLXZvaWQgZXdr
X3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKLXsKLSAgICBwcmludGYoImNvbXBpbGUgd2Via2l0
IHdpdGggREVCVUdfTUVNX0xFQUtTIGRlZmluZWQhXG4iKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAqdCwgdWludDhfdCBy
LCB1aW50OF90IGcsIHVpbnQ4X3QgYikKLXsKLSAgICB1aW50MzJfdCAqZHN0MzIsICpkc3QzMl9l
bmQsIGMxOwotICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7Ci0KLSAgICBjMSA9
IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXIgPDwgMTYpIHwgKCh1aW50MzJfdClnIDw8IDgpIHwg
YjsKLSAgICBjMiA9ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7Ci0KLSAgICBkc3Q2NCA9ICh1
aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+Ynl0ZXMg
LyA4KSAmIH43KTsKLSAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsK
LSAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KLSAg
ICAgICAgZHN0NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAgICAgZHN0
NjRbMl0gPSBjMjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRbNF0gPSBj
MjsKLSAgICAgICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsKLSAgICAg
ICAgZHN0NjRbN10gPSBjMjsKLSAgICB9Ci0KLSAgICBkc3QzMiA9ICh1aW50MzJfdCAqKWRzdDY0
X2VuZDsKLSAgICBkc3QzMl9lbmQgPSAodWludDMyX3QgKikodC0+cGl4ZWxzICsgdC0+Ynl0ZXMp
OwotICAgIGZvciAoOyBkc3QzMiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKLSAgICAgICAgKmRzdDMy
ID0gYzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3
a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQotewotICAgIHVpbnQx
Nl90ICpkc3QxNiwgKmRzdDE2X2VuZCwgYzE7Ci0gICAgdWludDY0X3QgKmRzdDY0LCAqZHN0NjRf
ZW5kLCBjMjsKLQotICAgIGMxID0gKCgoKHIgPj4gMykgJiAweDFmKSA8PCAxMSkgfAotICAgICAg
ICAgICgoKGcgPj4gMikgJiAweDNmKSA8PCA1KSB8Ci0gICAgICAgICAgKChiID4+IDMpICYgMHgx
ZikpOwotCi0gICAgYzIgPSAoKCh1aW50NjRfdCljMSA8PCA0OCkgfCAoKHVpbnQ2NF90KWMxIDw8
IDMyKSB8Ci0gICAgICAgICAgKCh1aW50NjRfdCljMSA8PCAxNikgfCBjMSk7Ci0KLSAgICBkc3Q2
NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+
Ynl0ZXMgLyA4KSAmIH43KTsKLSAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9
IDgpIHsKLSAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMg
Ki8KLSAgICAgICAgZHN0NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAg
ICAgZHN0NjRbMl0gPSBjMjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRb
NF0gPSBjMjsKLSAgICAgICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsK
LSAgICAgICAgZHN0NjRbN10gPSBjMjsKLSAgICB9Ci0KLSAgICBkc3QxNiA9ICh1aW50MTZfdCAq
KWRzdDE2X2VuZDsKLSAgICBkc3QxNl9lbmQgPSAodWludDE2X3QgKikodC0+cGl4ZWxzICsgdC0+
Ynl0ZXMpOwotICAgIGZvciAoOyBkc3QxNiA8IGRzdDE2X2VuZDsgZHN0MTYrKykKLSAgICAgICAg
KmRzdDE2ID0gYzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdr
X1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCi17Ci0gICAgaWYgKHQt
PmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpCi0gICAgICAgIF9ld2tfdGlsZV9w
YWludF9yZ2I4ODgodCwgciwgZywgYik7Ci0gICAgZWxzZSBpZiAodC0+Y3NwYWNlID09IEVWQVNf
Q09MT1JTUEFDRV9SR0I1NjVfQTVQKQotICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KHQs
IHIsIGcsIGIpOwotICAgIGVsc2UKLSAgICAgICAgRVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAl
ZCIsIHQtPmNzcGFjZSk7Ci19Ci0KLS8qKgotICogQ3JlYXRlIGEgbmV3IHRpbGUgb2YgZ2l2ZW4g
c2l6ZSwgem9vbSBsZXZlbCBhbmQgY29sb3JzcGFjZS4KLSAqCi0gKiBBZnRlciBjcmVhdGVkIHRo
ZXNlIHByb3BlcnRpZXMgYXJlIGltbXV0YWJsZSBhcyB0aGV5J3JlIHRoZSBiYXNpYwotICogY2hh
cmFjdGVyaXN0aWMgb2YgdGhlIHRpbGUgYW5kIGFueSBjaGFuZ2Ugd2lsbCBsZWFkIHRvIGludmFs
aWQKLSAqIG1lbW9yeSBhY2Nlc3MuCi0gKgotICogT3RoZXIgbWVtYmVycyBhcmUgb2YgZnJlZS1h
Y2Nlc3MgYW5kIG5vIGdldHRlcnMvc2V0dGVycyBhcmUKLSAqIHByb3ZpZGVkIGluIG9yZGVyciB0
byBhdm9pZCBleHBlbnNpdmUgb3BlcmF0aW9ucyBvbiB0aG9zZSwgaG93ZXZlcgotICogc29tZSBh
cmUgYmV0dGVyIG1hbmlwdWxhdGVkIHdpdGggcHJvdmlkZWQgZnVuY3Rpb25zLCBzdWNoIGFzCi0g
KiBld2tfdGlsZV9zaG93KCkgYW5kIGV3a190aWxlX2hpZGUoKSB0byBjaGFuZ2UKLSAqIEBjIHZp
c2libGUgb3IgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoKSwgZXdrX3RpbGVfdXBkYXRlX2FyZWEoKSwK
LSAqIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSB0byBjaGFuZ2UgQGMgc3RhdHMubWlzc2VzLAot
ICogQGMgc3RhdHMuZnVsbF91cGRhdGUgYW5kIEBjIHVwZGF0ZXMuCi0gKi8KLUV3a19UaWxlICpl
d2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0
IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UpCi17Ci0gICAgRXZhc19Db29yZCAqZWM7Ci0g
ICAgRXZhc19Db2xvcnNwYWNlICplY3M7Ci0gICAgZmxvYXQgKmY7Ci0gICAgc2l6ZV90ICpzOwot
ICAgIEV3a19UaWxlICp0OwotICAgIHVuc2lnbmVkIGludCBhcmVhOwotICAgIHNpemVfdCBieXRl
czsKLSAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7Ci0gICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVz
OwotICAgIGludCBzdHJpZGU7Ci0gICAgRWNvcmVfRXZhcyAqZWU7Ci0gICAgY29uc3QgY2hhciAq
ZW5naW5lOwotCi0gICAgYXJlYSA9IHcgKiBoOwotCi0gICAgaWYgKGNzcGFjZSA9PSBFVkFTX0NP
TE9SU1BBQ0VfQVJHQjg4ODgpIHsKLSAgICAgICAgYnl0ZXMgPSBhcmVhICogNDsKLSAgICAgICAg
c3RyaWRlID0gdyAqIDQ7Ci0gICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7Ci0g
ICAgfSBlbHNlIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApIHsKLSAg
ICAgICAgYnl0ZXMgPSBhcmVhICogMjsKLSAgICAgICAgc3RyaWRlID0gdyAqIDI7Ci0gICAgICAg
IGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IxNl81NjU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
RVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAlZCIsIGNzcGFjZSk7Ci0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIH0KLQotICAgIERCRygic2l6ZTogJWR4JWQgKCVkKSwgem9vbTogJWYsIGNzcGFj
ZT0lZCIsIHcsIGgsIGFyZWEsIChkb3VibGUpem9vbSwgY3NwYWNlKTsKLQotICAgIE1BTExPQ19P
Ul9PT01fUkVUKHQsIHNpemVvZihFd2tfVGlsZSksIE5VTEwpOwotICAgIHQtPmltYWdlID0gZXZh
c19vYmplY3RfaW1hZ2VfYWRkKGV2YXMpOwotCi0gICAgZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2
YXNfZ2V0KGV2YXMpOwotICAgIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVl
KTsKLSAgICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gxMSIpKQotICAg
ICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHQtPmltYWdlLCBFVkFTX0lN
QUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKLQotICAgIHQtPnZpc2libGUgPSAwOwotICAgIHQt
PnVwZGF0ZXMgPSBOVUxMOwotCi0gICAgbWVtc2V0KCZ0LT5zdGF0cywgMCwgc2l6ZW9mKEV3a19U
aWxlX1N0YXRzKSk7Ci0gICAgdC0+c3RhdHMuYXJlYSA9IGFyZWE7Ci0KLSAgICAvKiB1Z2x5LCBi
dXQgbGV0J3MgYXZvaWQgYXQgYWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2Ug
Ki8KLSAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPnc7Ci0gICAgKmVjID0gdzsKLQotICAgIGVj
ID0gKEV2YXNfQ29vcmQgKikmdC0+aDsKLSAgICAqZWMgPSBoOwotCi0gICAgZWNzID0gKEV2YXNf
Q29sb3JzcGFjZSAqKSZ0LT5jc3BhY2U7Ci0gICAgKmVjcyA9IGNzcGFjZTsKLQotICAgIGYgPSAo
ZmxvYXQgKikmdC0+em9vbTsKLSAgICAqZiA9IHpvb207Ci0KLSAgICBzID0gKHNpemVfdCAqKSZ0
LT5ieXRlczsKLSAgICAqcyA9IGJ5dGVzOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9z
ZXQodC0+aW1hZ2UsIHQtPncsIHQtPmgpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3Bh
Y2Vfc2V0KHQtPmltYWdlLCB0LT5jc3BhY2UpOwotICAgIHQtPnBpeGVscyA9IGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfZ2V0KHQtPmltYWdlLCBFSU5BX1RSVUUpOwotICAgIHQtPnN1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0LT5waXhlbHMsIGZvcm1hdCwgdywg
aCwgc3RyaWRlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyh0LT5zdXJmYWNl
KTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7Ci0gICAgICAgIEVS
UigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsCi0gICAgICAgICAgICBjYWly
b19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAgICAgICBmcmVlKHQpOwotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJm
YWNlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8pOwotICAgIGlmIChzdGF0
dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3Jl
YXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKLSAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKHQtPmltYWdlKTsKLSAgICAgICAgZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOwotCi0gICAgcmV0dXJu
IHQ7Ci19Ci0KLS8qKgotICogRnJlZSB0aWxlIG1lbW9yeS4KLSAqLwotdm9pZCBld2tfdGlsZV9m
cmVlKEV3a19UaWxlICp0KQotewotICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOwotCi0g
ICAgaWYgKHQtPnVwZGF0ZXMpCi0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsK
LQotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKLSAgICBjYWlyb19kZXN0
cm95KHQtPmNhaXJvKTsKLSAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOwotICAgIGZyZWUo
dCk7Ci19Ci0KLS8qKgotICogTWFrZSB0aGUgdGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRz
IGNvdW50ZXIuCi0gKi8KLXZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSAqdCkKLXsKLSAgICB0
LT52aXNpYmxlKys7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyh0LT5pbWFnZSk7Ci19Ci0KLS8qKgot
ICogRGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBpbnZpc2libGUg
aWYgbmVjZXNzYXJ5LgotICovCi12b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpCi17Ci0g
ICAgdC0+dmlzaWJsZS0tOwotICAgIGlmICghdC0+dmlzaWJsZSkKLSAgICAgICAgZXZhc19vYmpl
Y3RfaGlkZSh0LT5pbWFnZSk7Ci19Ci0KLS8qKgotICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhl
IHRpbGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KLUVpbmFfQm9vbCBl
d2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKLXsKLSAgICByZXR1cm4gISF0LT52aXNp
YmxlOwotfQotCi0vKioKLSAqIE1hcmsgd2hvbGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5n
IHVwZGF0ZS4KLSAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKLXsK
LSAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0LT5z
dGF0cy5taXNzZXMrKzsKLQotICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKLSAgICAg
ICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRh
dGVzKSB7Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAg
ICAgICB0LT51cGRhdGVzID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLyoqCi0gKiBN
YXJrIHRoZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgot
ICovCi12b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqcikKLXsKLSAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRl
cz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMrKzsKLQotICAgIGlmICh0LT5zdGF0cy5mdWxsX3Vw
ZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncg
PT0gdC0+dyAmJiByLT5oID09IHQtPmgpIHsKLSAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUg
PSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBlaW5h
X3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAgICAgICB0LT51cGRhdGVzID0gTlVMTDsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF0LT51cGRhdGVz
KSB7Ci0gICAgICAgIHQtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKLSAg
ICAgICAgaWYgKCF0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90
IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHQtPncsIHQtPmgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRh
dGVzLCByKTsKLX0KLQotLyoqCi0gKiBGb3IgZWFjaCB1cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUg
Z2l2ZW4gZnVuY3Rpb24uCi0gKgotICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3Rh
dGlzdGljcyBvciBjbGVhciB0aGUgcHJvY2Vzc2VkCi0gKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVf
dXBkYXRlc19jbGVhcigpIGZvciB0aGF0LgotICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJv
Y2VzcyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29u
c3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgaWYg
KHQtPnN0YXRzLmZ1bGxfdXBkYXRlKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7Ci0gICAg
ICAgIHIueCA9IDA7Ci0gICAgICAgIHIueSA9IDA7Ci0gICAgICAgIHIudyA9IHQtPnc7Ci0gICAg
ICAgIHIuaCA9IHQtPmg7Ci0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCi0g
ICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWV2OwotICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0
OwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCBOVUxMKTsKLSAgICAgICAgcmVuZGVyX3N0
YXJ0ID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwotICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2
LnR2X3VzZWMpIC8gMTAwMDAwMCk7Ci0jZW5kaWYKLSAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0
LCAmcik7Ci0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCi0gICAgICAgIGdl
dHRpbWVvZmRheSgmdGltZXYsIE5VTEwpOwotICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9
IChkb3VibGUpdGltZXYudHZfc2VjICsKLSAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91
c2VjKSAvIDEwMDAwMDApIC0gcmVuZGVyX3N0YXJ0OwotI2VuZGlmCi0gICAgfSBlbHNlIGlmICh0
LT51cGRhdGVzKSB7Ci0gICAgICAgIEVpbmFfSXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRl
cmF0b3JfbmV3KHQtPnVwZGF0ZXMpOwotICAgICAgICBFaW5hX1JlY3RhbmdsZSAqcjsKLSAgICAg
ICAgaWYgKCFpdHIpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRp
bGVyIGl0ZXJhdG9yISIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdHIsIHIpCi0gICAgICAgICAgICBjYigodm9pZCAqKWRh
dGEsIHQsIHIpOwotICAgICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKLSAgICB9Ci19Ci0K
LS8qKgotICogQ2xlYXIgYWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCi0gKgotICogVGhp
cyB3aWxsIGNoYW5nZSB0aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1p
c3NlcwotICogYW5kIHVuc2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0
ZWQsIHRoZW4gaXQgd2lsbCBiZQotICogZGVzdHJveWVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24g
aXMgdXN1YWxseSBjYWxsZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKLSAq
IGNhbGxlZC4KLSAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQot
ewotICAgIC8qIFRPRE86IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVzPyAqLwot
ICAgIHQtPnN0YXRzLm1pc3NlcyA9IDA7Ci0KLSAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUp
Ci0gICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gMDsKLSAgICBlbHNlIGlmICh0LT51cGRh
dGVzKSB7Ci0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKLSAgICAgICAgdC0+
dXBkYXRlcyA9IE5VTEw7Ci0gICAgfQotfQotCi10eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5IEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKLXN0cnVjdCBfRXdr
X1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IHsKLSAgICBFd2tfVGlsZSAqdGlsZTsKLSAgICBpbnQg
d2VpZ2h0OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdr
X1RpbGUgKnQpOwotICAgICAgICB2b2lkICpkYXRhOwotICAgIH0gdGlsZV9mcmVlOwotfTsKLQot
c3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgewotICAgIHN0cnVjdCB7Ci0gICAgICAgIEVp
bmFfTGlzdCAqbGlzdDsKLSAgICAgICAgc2l6ZV90IGNvdW50OwotICAgICAgICBzaXplX3QgYWxs
b2NhdGVkOwotICAgIH0gZW50cmllczsKLSAgICBzdHJ1Y3QgewotICAgICAgICBzaXplX3QgbWF4
OyAgLyoqPCB3YXRlcm1hcmsgKGluIGJ5dGVzKSB0byBzdGFydCBmcmVlaW5nIHRpbGVzICovCi0g
ICAgICAgIHNpemVfdCB1c2VkOyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3JlIHRoYW4gbWF4LiAq
LwotICAgIH0gbWVtb3J5OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwg
dywgaDsKLSAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgRWluYV9Cb29sIGxvY2tlZDsKLSAg
ICB9IGxvY2tlZDsKLSAgICBpbnQgcmVmZXJlbmNlczsKLSAgICB1bnNpZ25lZCBpbnQgZnJvemVu
OwotfTsKLQotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9J
TklUSUFMID0gMTI4Owotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExP
Q0FURV9TVEVQID0gMTY7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01B
WF9GUkVFID0gMzI7Ci0KLS8qKgotICogQ2FjaGUgb2YgdW51c2VkIHRpbGVzICh0aG9zZSB0aGF0
IGFyZSBub3QgdmlzaWJsZSkuCi0gKgotICogVGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KLSAq
Ci0gKiBAcGFyYW0gbWF4IGNhY2hlIHNpemUgaW4gYnl0ZXMuCi0gKgotICogQHJldHVybiBuZXds
eSBhbGxvY2F0ZWQgY2FjaGUgb2YgdW51c2VkIHRpbGVzLCB1c2UKLSAqICAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4gSWYgbm90Ci0gKiAg
ICAgICAgIHBvc3NpYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSwgQGMgTlVMTCBpcyByZXR1cm5lZC4K
LSAqLwotRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNp
emVfdCBtYXgpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0KLSAgICBDQUxM
T0NfT1JfT09NX1JFVCh0dWMsIHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUpLCBOVUxMKTsK
LQotICAgIERCRygidHVjPSVwIiwgdHVjKTsKLSAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7Ci0g
ICAgdHVjLT5yZWZlcmVuY2VzID0gMTsKLSAgICByZXR1cm4gdHVjOwotfQotCi12b2lkIGV3a190
aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxv
YXQgem9vbSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotCi0gICAg
dHVjLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVFOwotICAgIHR1Yy0+bG9ja2VkLnggPSB4Owot
ICAgIHR1Yy0+bG9ja2VkLnkgPSB5OwotICAgIHR1Yy0+bG9ja2VkLncgPSB3OwotICAgIHR1Yy0+
bG9ja2VkLmggPSBoOwotICAgIHR1Yy0+bG9ja2VkLnpvb20gPSB6b29tOwotfQotCi12b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotCi0gICAgdHVjLT5s
b2NrZWQubG9ja2VkID0gRUlOQV9GQUxTRTsKLX0KLQotLyoqCi0gKiBGcmVlIGNhY2hlIG9mIHVu
dXNlZCB0aWxlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBi
eSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYKLSAqIGZ1bmN0aW9uLiBDYWxsaW5nIHRoaXMg
ZnVuY3Rpb24gd2l0aG91dCBjb25zaWRlcmluZyByZWZlcmVuY2UgY291bnRpbmcKLSAqIG1heSBs
ZWFkIHRvIHVua25vd24gcmVzdWx0cy4KLSAqCi0gKiBUaG9zZSB0aWxlcyB0aGF0IGFyZSBzdGls
bCB2aXNpYmxlIHdpbGwgcmVtYWluIGxpdmUuIFRoZSB1bnVzZWQKLSAqIHRpbGVzIHdpbGwgYmUg
ZnJlZWQuCi0gKgotICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQotICovCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLQotICAg
IERCRygidHVjPSVwLCAiCi0gICAgICAgICJlbnRyaWVzPShjb3VudDolemQsIGFsbG9jYXRlZDol
emQpLCAiCi0gICAgICAgICJtZW1vcnk9KG1heDolemQsIHVzZWQ6JXpkKSIsCi0gICAgICAgIHR1
YywgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAotICAgICAgICB0
dWMtPm1lbW9yeS5tYXgsIHR1Yy0+bWVtb3J5LnVzZWQpOwotCi0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2NsZWFyKHR1Yyk7Ci0gICAgZnJlZSh0dWMpOwotfQotCi0vKioKLSAqIENsZWFyIGNh
Y2hlIG9mIHVudXNlZCB0aWxlcy4KLSAqCi0gKiBBbnkgdGlsZXMgdGhhdCBhcmUgaW4gdGhlIGNh
Y2hlIGFyZSBmcmVlZC4gVGhlIG9ubHkgdGlsZXMgdGhhdCBhcmUKLSAqIGtlcHQgYXJlIHRob3Nl
IHRoYXQgYXJlbid0IGluIHRoZSBjYWNoZSAoaS5lLiB0aGF0IGFyZSB2aXNpYmxlKS4KLSAqLwot
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLQotICAgIGlmICghdHVjLT5lbnRyaWVzLmNvdW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBFSU5BX0xJU1RfRlJFRSh0dWMtPmVudHJpZXMubGlz
dCwgaXRyKSB7Ci0gICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVlLmRhdGEs
IGl0ci0+dGlsZSk7Ci0gICAgICAgIGZyZWUoaXRyKTsKLSAgICB9Ci0KLSAgICB0dWMtPm1lbW9y
eS51c2VkID0gMDsKLSAgICB0dWMtPmVudHJpZXMuY291bnQgPSAwOwotfQotCi0vKioKLSAqIEhv
bGQgcmVmZXJlbmNlIHRvIGNhY2hlLgotICoKLSAqIEByZXR1cm4gc2FtZSBwb2ludGVyIGFzIHRh
a2VuLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKLSAqLwotRXdr
X1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0
dWMsIE5VTEwpOwotICAgIHR1Yy0+cmVmZXJlbmNlcysrOwotICAgIHJldHVybiB0dWM7Ci19Ci0K
LS8qKgotICogUmVsZWFzZSBjYWNoZSByZWZlcmVuY2UsIGZyZWVpbmcgaXQgaWYgaXQgZHJvcHMg
dG8gemVyby4KLSAqCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoKQotICogQHNl
ZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpCi0gKi8KLXZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0gICAgdHVjLT5yZWZlcmVuY2VzLS07Ci0gICAgaWYg
KCF0dWMtPnJlZmVyZW5jZXMpCi0gICAgICAgIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSh0
dWMpOwotfQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgbWF4KQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHR1Yyk7Ci0gICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OwotfQotCi1zaXplX3QgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Ci0gICAg
cmV0dXJuIHR1Yy0+bWVtb3J5Lm1heDsKLX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNo
ZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKLSAgICByZXR1cm4gdHVjLT5tZW1v
cnkudXNlZDsKLX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQotewotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSAqaXRyOwotICAgIEVpbmFfTGlzdCAqbCwgKmxfbmV4dDsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKLSAgICBzaXplX3QgZG9uZTsKLSAg
ICB1bnNpZ25lZCBpbnQgY291bnQ7Ci0KLSAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGJ5dGVzIDwgMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvKgotICAgICAqIE5PVEU6IHRoZSBjYWNoZSBpcyBhIEZJRk8gcXVldWUgY3VycmVudGx5
LgotICAgICAqIERvbid0IG5lZWQgdG8gc29ydCBhbnkgbW9yZS4KLSAgICAgKi8KLQotICAgIGRv
bmUgPSAwOwotICAgIGNvdW50ID0gMDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+
ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0cikgewotICAgICAgICBFd2tfVGlsZSAqdCA9IGl0
ci0+dGlsZTsKLSAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBpZiAodHVjLT5sb2NrZWQubG9ja2VkCi0gICAgICAgICAgICAmJiB0LT54ICsgdC0+
dyA+IHR1Yy0+bG9ja2VkLngKLSAgICAgICAgICAgICYmIHQtPnkgKyB0LT5oID4gdHVjLT5sb2Nr
ZWQueQotICAgICAgICAgICAgJiYgdC0+eCA8IHR1Yy0+bG9ja2VkLnggKyB0dWMtPmxvY2tlZC53
Ci0gICAgICAgICAgICAmJiB0LT55IDwgdHVjLT5sb2NrZWQueSArIHR1Yy0+bG9ja2VkLmgKLSAg
ICAgICAgICAgICYmIHQtPnpvb20gPT0gdHVjLT5sb2NrZWQuem9vbSkgewotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZSArPSBzaXplb2YoRXdrX1RpbGUpICsg
aXRyLT50aWxlLT5ieXRlczsKLSAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2Zy
ZWUuZGF0YSwgaXRyLT50aWxlKTsKLSAgICAgICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xp
c3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGwpOwotICAgICAgICBmcmVlKGl0cik7
Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotCi0gICAgdHVjLT5tZW1vcnkudXNlZCAtPSBkb25l
OwotICAgIHR1Yy0+ZW50cmllcy5jb3VudCAtPSBjb3VudDsKLQotICAgIHJldHVybiBkb25lOwot
fQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0g
ICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPD0gdHVjLT5tZW1vcnkubWF4KQotICAgICAgICByZXR1
cm47Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKHR1YywgdHVjLT5tZW1vcnkudXNl
ZCAtIHR1Yy0+bWVtb3J5Lm1heCk7Ci0gICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPiB0dWMtPm1l
bW9yeS5tYXgpCi0gICAgICAgIENSSVRJQ0FMKCJDYWNoZSBzdGlsbCB1c2luZyB0b28gbXVjaCBt
ZW1vcnk6ICV6ZCBLQjsgbWF4OiAlemQgS0IiLAotICAgICAgICAgICAgICAgICB0dWMtPm1lbW9y
eS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOwotfQotCi0vKioKLSAqIEZyZWV6ZSBjYWNoZSB0byBu
b3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCi0gKgotICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1p
emUgY2FjaGUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93IHdlIHNob3VsZAotICogaG9sZCBvbiB0
aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6
ZQotICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgotICoK
LSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoKQotICovCi12b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAg
dHVjLT5mcm96ZW4rKzsKLX0KLQotLyoqCi0gKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3Mu
Ci0gKgotICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4g
bWFpbnRlbmFuY2UgdGFza3MKLSAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgotICovCi12b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewot
ICAgIGlmICghdHVjLT5mcm96ZW4pIHsKLSAgICAgICAgRVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBm
cmVlemluZyEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHR1Yy0+ZnJvemVuLS07
Ci19Ci0KLS8qKgotICogR2V0IHRpbGUgZnJvbSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIHJlbW92
aW5nIGl0IGZyb20gdGhlIGNhY2hlLgotICoKLSAqIElmIHRoZSB0aWxlIGlzIHVzZWQsIHRoZW4g
aXQncyBub3QgaW4gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCBzbyBpdAotICogaXMgcmVtb3ZlZCBm
cm9tIHRoZSBjYWNoZSBhbmQgbWF5IGJlIGdpdmVuIGJhY2sgd2l0aAotICogZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RpbGVfcHV0KCkuCi0gKgotICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMKLSAqIEBwYXJhbSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUuCi0gKgotICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KLSAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90
aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQpCi17Ci0gICAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICplbnRyeTsKLSAgICBFaW5hX0xpc3QgKmUsICps
OwotCi0gICAgZSA9IE5VTEw7Ci0gICAgRUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxp
c3QsIGwsIGVudHJ5KQotICAgIHsKLSAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHQpIHsKLSAg
ICAgICAgICAgIGUgPSBsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKCFlKSB7Ci0gICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4gY2FjaGUgJXAi
LCB0LCB0dWMpOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICB0dWMt
PmVudHJpZXMuY291bnQtLTsKLSAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNpemVvZihFd2tfVGls
ZSkgKyB0LT5ieXRlczsKLSAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1vdmVf
bGlzdCh0dWMtPmVudHJpZXMubGlzdCwgZSk7Ci0gICAgZnJlZShlbnRyeSk7Ci0KLSAgICByZXR1
cm4gRUlOQV9UUlVFOwotfQotCi0vKioKLSAqIFB1dCB0aWxlIGludG8gY2FjaGUgb2YgdW51c2Vk
IHRpbGVzLCBhZGRpbmcgaXQgdG8gdGhlIGNhY2hlLgotICoKLSAqIFRoaXMgc2hvdWxkIGJlIGNh
bGxlZCB3aGVuIEBjIHQtPnZpc2libGUgaXMgQGMgMCBhbmQgbm8gb2JqZWN0cyBhcmUKLSAqIHVz
aW5nIHRoZSB0aWxlIGFueW1vcmUsIG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYmUgZXhwaXJlZCBh
bmQgaGF2ZQotICogaXRzIG1lbW9yeSByZXBsYWNlZC4KLSAqCi0gKiBOb3RlIHRoYXQgdGlsZXMg
YXJlIG5vdCBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgaWYgY2FjaGUgaXMgZnVsbCwKLSAqIGluc3Rl
YWQgdGhlIGNhY2hlIHdpbGwgaGF2ZSBtb3JlIGJ5dGVzIHVzZWQgdGhhbiBtYXhpbXVtIGFuZCBv
bmUKLSAqIGNhbiBjYWxsIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkgdG8gZnJl
ZSB0aGVtLiBUaGlzIGlzIGRvbmUKLSAqIGJlY2F1c2UgdXN1YWxseSB3ZSB3YW50IGEgbGF6eSBv
cGVyYXRpb24gZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAqCi0gKiBAcGFyYW0gdHVjIGNhY2hl
IG9mIHVudXNlZCB0aWxlcwotICogQHBhcmFtIHQgdGlsZSB0byBiZSBhZGRlZCB0byBjYWNoZS4K
LSAqIEBwYXJhbSB0aWxlX2ZyZWVfY2IgZnVuY3Rpb24gdXNlZCB0byBmcmVlIHRpbGVzLgotICog
QHBhcmFtIGRhdGEgY29udGV4dCB0byBnaXZlIGJhY2sgdG8gQGEgdGlsZV9mcmVlX2NiIGFzIGZp
cnN0IGFyZ3VtZW50LgotICoKLSAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlO
QV9GQUxTRSBvdGhlcndpc2UuIElmIEBjIHQtPnZpc2libGUKLSAqICAgICAgICAgaXMgbm90ICNF
SU5BX0ZBTFNFLCB0aGVuIGl0IHdpbGwgcmV0dXJuICNFSU5BX0ZBTFNFLgotICoKLSAqIEBzZWUg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKQotICovCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tf
VGlsZSAqdCwgdm9pZCAoKnRpbGVfZnJlZV9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpLCBj
b25zdCB2b2lkICpkYXRhKQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqZTsK
LQotICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51
c2VkICh2aXNpYmxlPSVkKSIsIHQsIHQtPnZpc2libGUpOwotICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKLSAgICB9Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChlLCBzaXplb2YoRXdrX1RpbGVf
VW51c2VkX0NhY2hlX0VudHJ5KSwgRUlOQV9GQUxTRSk7Ci0gICAgdHVjLT5lbnRyaWVzLmxpc3Qg
PSBlaW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKLSAgICBpZiAoZWluYV9l
cnJvcl9nZXQoKSkgewotICAgICAgICBFUlIoIkxpc3QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgZS0+dGlsZSA9IHQ7Ci0gICAg
ZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCi0gICAgZS0+
dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOwotICAgIGUtPnRpbGVfZnJlZS5kYXRhID0gKHZv
aWQgKilkYXRhOwotCi0gICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7Ci0gICAgdHVjLT5tZW1vcnku
dXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7Ci0KLSAgICByZXR1cm4gRUlOQV9U
UlVFOwotfQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICpp
dHI7Ci0gICAgRWluYV9MaXN0ICpsOwotICAgIGludCBjb3VudCA9IDA7Ci0gICAgcHJpbnRmKCJD
YWNoZSBvZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9yeTogJXp1LyV6dVxu
IiwKLSAgICAgICAgICAgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVk
LAotICAgICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOwotCi0gICAg
RUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0cikgewotICAgICAgICBj
b25zdCBFd2tfVGlsZSAqdCA9IGl0ci0+dGlsZTsKLSAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNs
dSArICVkeCVkIEAgJTAuM2ZdJWMiLAotICAgICAgICAgICAgICAgdC0+Y29sLCB0LT5yb3csIHQt
PncsIHQtPmgsIHQtPnpvb20sCi0gICAgICAgICAgICAgICB0LT52aXNpYmxlID8gJyonOiAnICcp
OwotCi0gICAgICAgIGlmICghKGNvdW50ICUgNCkpCi0gICAgICAgICAgICBwcmludGYoIlxuIik7
Ci0gICAgfQotCi0gICAgcHJpbnRmKCJcbiIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3RpbGVkX21vZGVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTY4NTcyOTQwODk5YmRiZTg3MWQ2MzAxZmZk
Y2IxNGFjNDUzYmJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tb2RlbC5jcHAKQEAgLTAsMCArMSw4NTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAwOS0y
MDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgImV3a190aWxlZF9tb2RlbC5oIgorCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVj
b3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hl
Y2tzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+IC8vIFhYWCBSRU1PVkUgTUUgTEFURVIKKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJf
VElNRQorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKworI2RlZmluZSBJRFgoY29sLCBy
b3csIHJvd3NwYW4pIChjb2wgKyAocm93ICogcm93c3BhbikpCisKKyNpZmRlZiBERUJVR19NRU1f
TEVBS1MKK3N0YXRpYyB1aW50NjRfdCB0aWxlc19hbGxvY2F0ZWQgPSAwOworc3RhdGljIHVpbnQ2
NF90IHRpbGVzX2ZyZWVkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRlc19hbGxvY2F0ZWQgPSAw
Oworc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2ZyZWVkID0gMDsKKworc3RydWN0IHRpbGVfYWNjb3Vu
dCB7CisgICAgRXZhc19Db29yZCBzaXplOworICAgIHN0cnVjdCB7CisgICAgICAgIHVpbnQ2NF90
IGFsbG9jYXRlZDsKKyAgICAgICAgdWludDY0X3QgZnJlZWQ7CisgICAgfSB0aWxlcywgYnl0ZXM7
Cit9OworCitzdGF0aWMgc2l6ZV90IGFjY291bnRpbmdfbGVuID0gMDsKK3N0YXRpYyBzdHJ1Y3Qg
dGlsZV9hY2NvdW50ICphY2NvdW50aW5nID0gMDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGls
ZV9hY2NvdW50ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCit7Cisg
ICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjOworICAgIHNpemVfdCBpOworCisgICAgZm9yIChp
ID0gMDsgaSA8IGFjY291bnRpbmdfbGVuOyBpKyspIHsKKyAgICAgICAgaWYgKGFjY291bnRpbmdb
aV0uc2l6ZSA9PSB0LT53KQorICAgICAgICAgICAgcmV0dXJuIGFjY291bnRpbmcgKyBpOworICAg
IH0KKworICAgIGkgPSAoYWNjb3VudGluZ19sZW4gKyAxKSAqIHNpemVvZihzdHJ1Y3QgdGlsZV9h
Y2NvdW50KTsKKyAgICBSRUFMTE9DX09SX09PTV9SRVQoYWNjb3VudGluZywgaSwgMCk7CisKKyAg
ICBhY2MgPSBhY2NvdW50aW5nICsgYWNjb3VudGluZ19sZW47CisgICAgYWNjLT5zaXplID0gdC0+
dzsKKyAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCA9IDA7CisgICAgYWNjLT50aWxlcy5mcmVlZCA9
IDA7CisgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgPSAwOworICAgIGFjYy0+Ynl0ZXMuZnJlZWQg
PSAwOworCisgICAgYWNjb3VudGluZ19sZW4rKzsKKworICAgIHJldHVybiBhY2M7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1Rp
bGUgKnQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2FjY291
bnRfZ2V0KHQpOworICAgIGlmICghYWNjKQorICAgICAgICByZXR1cm47CisgICAgYWNjLT5ieXRl
cy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQrKzsKKwor
ICAgIGJ5dGVzX2FsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICB0aWxlc19hbGxvY2F0ZWQrKzsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3
a19UaWxlICp0KQoreworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9IF9ld2tfdGlsZV9h
Y2NvdW50X2dldCh0KTsKKyAgICBpZiAoIWFjYykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWNj
LT5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPnRpbGVzLmZyZWVkKys7CisKKyAg
ICBieXRlc19mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0aWxlc19mcmVlZCsrOworfQorCit2b2lk
IGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3Vu
dCAqYWNjOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY19lbmQ7CisKKyAgICBwcmludGYo
IlRJTEUgQkFMQU5DRTogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgor
ICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il1cbiIsCisg
ICAgICAgICAgICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2ZyZWVkLCB0aWxlc19hbGxvY2F0ZWQg
LSB0aWxlc19mcmVlZCwKKyAgICAgICAgICAgIGJ5dGVzX2FsbG9jYXRlZCwgYnl0ZXNfZnJlZWQs
IGJ5dGVzX2FsbG9jYXRlZCAtIGJ5dGVzX2ZyZWVkKTsKKworICAgIGlmICghYWNjb3VudGluZ19s
ZW4pCisgICAgICAgIHJldHVybjsKKworICAgIGFjYyA9IGFjY291bnRpbmc7CisgICAgYWNjX2Vu
ZCA9IGFjYyArIGFjY291bnRpbmdfbGVuOworICAgIHByaW50ZigiQkVHSU46IFRJTEUgQkFMQU5D
RSBERVRBSUxTIChUTyBUSElTIE1PTUVOVCEpOlxuIik7CisgICAgZm9yICg7IGFjYyA8IGFjY19l
bmQ7IGFjYysrKSB7CisgICAgICAgIHVpbnQ2NF90IHRpbGVzLCBieXRlczsKKworICAgICAgICB0
aWxlcyA9IGFjYy0+dGlsZXMuYWxsb2NhdGVkIC0gYWNjLT50aWxlcy5mcmVlZDsKKyAgICAgICAg
Ynl0ZXMgPSBhY2MtPmJ5dGVzLmFsbG9jYXRlZCAtIGFjYy0+Ynl0ZXMuZnJlZWQ7CisKKyAgICAg
ICAgcHJpbnRmKCIgICAlNGQ6IHRpbGVzWyslNCJQUkl1NjQiLC0lNCJQUkl1NjQiOiU0IlBSSXU2
NCJdICIKKyAgICAgICAgICAgICAgICJieXRlc1srJTgiUFJJdTY0IiwtJTgiUFJJdTY0IjolOCJQ
Ukl1NjQiXSVzXG4iLAorICAgICAgICAgICAgICAgYWNjLT5zaXplLAorICAgICAgICAgICAgICAg
YWNjLT50aWxlcy5hbGxvY2F0ZWQsIGFjYy0+dGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAg
ICAgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQsIGFjYy0+Ynl0ZXMuZnJlZWQsIGJ5dGVzLAorICAg
ICAgICAgICAgICAgKGJ5dGVzIHx8IHRpbGVzKSA/ICIgUE9TU0lCTEUgTEVBSyIgOiAiIik7Cisg
ICAgfQorICAgIHByaW50ZigiRU5EOiBUSUxFIEJBTEFOQ0UgREVUQUlMUyAoVE8gVEhJUyBNT01F
TlQhKTpcbiIpOworfQorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2Nv
dW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQorCit2b2lkIGV3
a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7CisgICAgcHJpbnRmKCJjb21waWxlIHdlYmtp
dCB3aXRoIERFQlVHX01FTV9MRUFLUyBkZWZpbmVkIVxuIik7Cit9CisjZW5kaWYKKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1RpbGUgKnQsIHVpbnQ4X3Qg
ciwgdWludDhfdCBnLCB1aW50OF90IGIpCit7CisgICAgdWludDMyX3QgKmRzdDMyLCAqZHN0MzJf
ZW5kLCBjMTsKKyAgICB1aW50NjRfdCAqZHN0NjQsICpkc3Q2NF9lbmQsIGMyOworCisgICAgYzEg
PSAweGZmMDAwMDAwIHwgKCh1aW50MzJfdClyIDw8IDE2KSB8ICgodWludDMyX3QpZyA8PCA4KSB8
IGI7CisgICAgYzIgPSAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8IGMxOworCisgICAgZHN0NjQgPSAo
dWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHQtPmJ5dGVz
IC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7
CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCisg
ICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAgIGRzdDY0WzFdID0gYzI7CisgICAgICAgIGRz
dDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNdID0gYzI7CisgICAgICAgIGRzdDY0WzRdID0g
YzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7CisgICAgICAgIGRzdDY0WzZdID0gYzI7CisgICAg
ICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisgICAgZHN0MzIgPSAodWludDMyX3QgKilkc3Q2
NF9lbmQ7CisgICAgZHN0MzJfZW5kID0gKHVpbnQzMl90ICopKHQtPnBpeGVscyArIHQtPmJ5dGVz
KTsKKyAgICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRzdDMyKyspCisgICAgICAgICpkc3Qz
MiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjU2NShF
d2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKK3sKKyAgICB1aW50
MTZfdCAqZHN0MTYsICpkc3QxNl9lbmQsIGMxOworICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0
X2VuZCwgYzI7CisKKyAgICBjMSA9ICgoKChyID4+IDMpICYgMHgxZikgPDwgMTEpIHwKKyAgICAg
ICAgICAoKChnID4+IDIpICYgMHgzZikgPDwgNSkgfAorICAgICAgICAgICgoYiA+PiAzKSAmIDB4
MWYpKTsKKworICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwgKCh1aW50NjRfdCljMSA8
PCAzMikgfAorICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwgYzEpOworCisgICAgZHN0
NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHQt
PmJ5dGVzIC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCAr
PSA4KSB7CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25z
ICovCisgICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAgIGRzdDY0WzFdID0gYzI7CisgICAg
ICAgIGRzdDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNdID0gYzI7CisgICAgICAgIGRzdDY0
WzRdID0gYzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7CisgICAgICAgIGRzdDY0WzZdID0gYzI7
CisgICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisgICAgZHN0MTYgPSAodWludDE2X3Qg
Kilkc3QxNl9lbmQ7CisgICAgZHN0MTZfZW5kID0gKHVpbnQxNl90ICopKHQtPnBpeGVscyArIHQt
PmJ5dGVzKTsKKyAgICBmb3IgKDsgZHN0MTYgPCBkc3QxNl9lbmQ7IGRzdDE2KyspCisgICAgICAg
ICpkc3QxNiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3
a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQoreworICAgIGlmICh0
LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KQorICAgICAgICBfZXdrX3RpbGVf
cGFpbnRfcmdiODg4KHQsIHIsIGcsIGIpOworICAgIGVsc2UgaWYgKHQtPmNzcGFjZSA9PSBFVkFT
X0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkKKyAgICAgICAgX2V3a190aWxlX3BhaW50X3JnYjU2NSh0
LCByLCBnLCBiKTsKKyAgICBlbHNlCisgICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTog
JWQiLCB0LT5jc3BhY2UpOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyB0aWxlIG9mIGdpdmVu
IHNpemUsIHpvb20gbGV2ZWwgYW5kIGNvbG9yc3BhY2UuCisgKgorICogQWZ0ZXIgY3JlYXRlZCB0
aGVzZSBwcm9wZXJ0aWVzIGFyZSBpbW11dGFibGUgYXMgdGhleSdyZSB0aGUgYmFzaWMKKyAqIGNo
YXJhY3RlcmlzdGljIG9mIHRoZSB0aWxlIGFuZCBhbnkgY2hhbmdlIHdpbGwgbGVhZCB0byBpbnZh
bGlkCisgKiBtZW1vcnkgYWNjZXNzLgorICoKKyAqIE90aGVyIG1lbWJlcnMgYXJlIG9mIGZyZWUt
YWNjZXNzIGFuZCBubyBnZXR0ZXJzL3NldHRlcnMgYXJlCisgKiBwcm92aWRlZCBpbiBvcmRlcnIg
dG8gYXZvaWQgZXhwZW5zaXZlIG9wZXJhdGlvbnMgb24gdGhvc2UsIGhvd2V2ZXIKKyAqIHNvbWUg
YXJlIGJldHRlciBtYW5pcHVsYXRlZCB3aXRoIHByb3ZpZGVkIGZ1bmN0aW9ucywgc3VjaCBhcwor
ICogZXdrX3RpbGVfc2hvdygpIGFuZCBld2tfdGlsZV9oaWRlKCkgdG8gY2hhbmdlCisgKiBAYyB2
aXNpYmxlIG9yIGV3a190aWxlX3VwZGF0ZV9mdWxsKCksIGV3a190aWxlX3VwZGF0ZV9hcmVhKCks
CisgKiBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkgdG8gY2hhbmdlIEBjIHN0YXRzLm1pc3NlcywK
KyAqIEBjIHN0YXRzLmZ1bGxfdXBkYXRlIGFuZCBAYyB1cGRhdGVzLgorICovCitFd2tfVGlsZSAq
ZXdrX3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9h
dCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlKQoreworICAgIEV2YXNfQ29vcmQgKmVjOwor
ICAgIEV2YXNfQ29sb3JzcGFjZSAqZWNzOworICAgIGZsb2F0ICpmOworICAgIHNpemVfdCAqczsK
KyAgICBFd2tfVGlsZSAqdDsKKyAgICB1bnNpZ25lZCBpbnQgYXJlYTsKKyAgICBzaXplX3QgYnl0
ZXM7CisgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OworICAgIGNhaXJvX3N0YXR1c190IHN0YXR1
czsKKyAgICBpbnQgc3RyaWRlOworICAgIEVjb3JlX0V2YXMgKmVlOworICAgIGNvbnN0IGNoYXIg
KmVuZ2luZTsKKworICAgIGFyZWEgPSB3ICogaDsKKworICAgIGlmIChjc3BhY2UgPT0gRVZBU19D
T0xPUlNQQUNFX0FSR0I4ODg4KSB7CisgICAgICAgIGJ5dGVzID0gYXJlYSAqIDQ7CisgICAgICAg
IHN0cmlkZSA9IHcgKiA0OworICAgICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwor
ICAgIH0gZWxzZSBpZiAoY3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKSB7Cisg
ICAgICAgIGJ5dGVzID0gYXJlYSAqIDI7CisgICAgICAgIHN0cmlkZSA9IHcgKiAyOworICAgICAg
ICBmb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMTZfNTY1OworICAgIH0gZWxzZSB7CisgICAgICAg
IEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQiLCBjc3BhY2UpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBEQkcoInNpemU6ICVkeCVkICglZCksIHpvb206ICVmLCBjc3BhY2U9
JWQiLCB3LCBoLCBhcmVhLCAoZG91YmxlKXpvb20sIGNzcGFjZSk7CisKKyAgICB0ID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGUqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlKSkpOworICAgIGlmICghdCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0LT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2Fk
ZChldmFzKTsKKworICAgIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAg
ICBlbmdpbmUgPSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlZSk7CisgICAgaWYgKGVuZ2lu
ZSAmJiAhc3RyY21wKGVuZ2luZSwgIm9wZW5nbF94MTEiKSkKKyAgICAgICAgZXZhc19vYmplY3Rf
aW1hZ2VfY29udGVudF9oaW50X3NldCh0LT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRf
RFlOQU1JQyk7CisKKyAgICB0LT52aXNpYmxlID0gMDsKKyAgICB0LT51cGRhdGVzID0gMDsKKwor
ICAgIG1lbXNldCgmdC0+c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9TdGF0cykpOworICAgIHQt
PnN0YXRzLmFyZWEgPSBhcmVhOworCisgICAgLyogdWdseSwgYnV0IGxldCdzIGF2b2lkIGF0IGFs
bCBjb3N0cyBoYXZpbmcgdXNlcnMgdG8gbW9kaWZ5IHRob3NlICovCisgICAgZWMgPSAoRXZhc19D
b29yZCAqKSZ0LT53OworICAgICplYyA9IHc7CisKKyAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQt
Pmg7CisgICAgKmVjID0gaDsKKworICAgIGVjcyA9IChFdmFzX0NvbG9yc3BhY2UgKikmdC0+Y3Nw
YWNlOworICAgICplY3MgPSBjc3BhY2U7CisKKyAgICBmID0gKGZsb2F0ICopJnQtPnpvb207Cisg
ICAgKmYgPSB6b29tOworCisgICAgcyA9IChzaXplX3QgKikmdC0+Ynl0ZXM7CisgICAgKnMgPSBi
eXRlczsKKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHQtPmltYWdlLCB0LT53LCB0
LT5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0LT5pbWFnZSwgdC0+
Y3NwYWNlKTsKKyAgICB0LT5waXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZXZhc19vYmpl
Y3RfaW1hZ2VfZGF0YV9nZXQodC0+aW1hZ2UsIEVJTkFfVFJVRSkpOworICAgIHQtPnN1cmZhY2Ug
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0LT5waXhlbHMsIGZvcm1hdCwg
dywgaCwgc3RyaWRlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyh0LT5zdXJm
YWNlKTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAg
IEVSUigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsCisgICAgICAgICAgICBj
YWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOworICAgICAgICBmcmVlKHQpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJm
YWNlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8pOworICAgIGlmIChzdGF0
dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3Jl
YXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKHQtPmltYWdlKTsKKyAgICAgICAgZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOworCisgICAgcmV0dXJuIHQ7
Cit9CisKKy8qKgorICogRnJlZSB0aWxlIG1lbW9yeS4KKyAqLwordm9pZCBld2tfdGlsZV9mcmVl
KEV3a19UaWxlICp0KQoreworICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOworCisgICAg
aWYgKHQtPnVwZGF0ZXMpCisgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKwor
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKKyAgICBjYWlyb19kZXN0cm95
KHQtPmNhaXJvKTsKKyAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOworICAgIGZyZWUodCk7
Cit9CisKKy8qKgorICogTWFrZSB0aGUgdGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRzIGNv
dW50ZXIuCisgKi8KK3ZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSAqdCkKK3sKKyAgICB0LT52
aXNpYmxlKys7CisgICAgZXZhc19vYmplY3Rfc2hvdyh0LT5pbWFnZSk7Cit9CisKKy8qKgorICog
RGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBpbnZpc2libGUgaWYg
bmVjZXNzYXJ5LgorICovCit2b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpCit7CisgICAg
dC0+dmlzaWJsZS0tOworICAgIGlmICghdC0+dmlzaWJsZSkKKyAgICAgICAgZXZhc19vYmplY3Rf
aGlkZSh0LT5pbWFnZSk7Cit9CisKKy8qKgorICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhlIHRp
bGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tf
dGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKK3sKKyAgICByZXR1cm4gISF0LT52aXNpYmxl
OworfQorCisvKioKKyAqIE1hcmsgd2hvbGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5nIHVw
ZGF0ZS4KKyAqLwordm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKK3sKKyAg
ICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KKyAgICB0LT5zdGF0
cy5taXNzZXMrKzsKKworICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKKyAgICAgICAg
dC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CisgICAgICAgIGlmICh0LT51cGRhdGVz
KSB7CisgICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgICAg
ICB0LT51cGRhdGVzID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBNYXJrIHRo
ZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgorICovCit2
b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqcikKK3sKKyAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8K
KyAgICB0LT5zdGF0cy5taXNzZXMrKzsKKworICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncgPT0gdC0+
dyAmJiByLT5oID09IHQtPmgpIHsKKyAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5B
X1RSVUU7CisgICAgICAgIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAgICAgICBlaW5hX3RpbGVy
X2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgICAgICB0LT51cGRhdGVzID0gMDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF0LT51cGRhdGVzKSB7CisgICAg
ICAgIHQtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKKyAgICAgICAgaWYg
KCF0LT51cGRhdGVzKSB7CisgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSBl
aW5hX3RpbGVyICVkeCVkLiIsIHQtPncsIHQtPmgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRhdGVzLCByKTsK
K30KKworLyoqCisgKiBGb3IgZWFjaCB1cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUgZ2l2ZW4gZnVu
Y3Rpb24uCisgKgorICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcyBv
ciBjbGVhciB0aGUgcHJvY2Vzc2VkCisgKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVfdXBkYXRlc19j
bGVhcigpIGZvciB0aGF0LgorICovCit2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tf
VGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9S
ZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgaWYgKHQtPnN0YXRz
LmZ1bGxfdXBkYXRlKSB7CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7CisgICAgICAgIHIueCA9
IDA7CisgICAgICAgIHIueSA9IDA7CisgICAgICAgIHIudyA9IHQtPnc7CisgICAgICAgIHIuaCA9
IHQtPmg7CisjaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIHN0
cnVjdCB0aW1ldmFsIHRpbWV2OworICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0OworICAgICAg
ICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCAwKTsKKyAgICAgICAgcmVuZGVyX3N0YXJ0ID0gKGRvdWJs
ZSl0aW1ldi50dl9zZWMgKworICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8g
MTAwMDAwMCk7CisjZW5kaWYKKyAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0LCAmcik7CisjaWZk
ZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIGdldHRpbWVvZmRheSgm
dGltZXYsIDApOworICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9IChkb3VibGUpdGltZXYu
dHZfc2VjICsKKyAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDAp
IC0gcmVuZGVyX3N0YXJ0OworI2VuZGlmCisgICAgfSBlbHNlIGlmICh0LT51cGRhdGVzKSB7Cisg
ICAgICAgIEVpbmFfSXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHQtPnVw
ZGF0ZXMpOworICAgICAgICBFaW5hX1JlY3RhbmdsZSAqcjsKKyAgICAgICAgaWYgKCFpdHIpIHsK
KyAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVyIGl0ZXJhdG9yISIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEVJTkFfSVRFUkFUT1Jf
Rk9SRUFDSChpdHIsIHIpCisgICAgICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQsIHIpOworICAg
ICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKKyAgICB9Cit9CisKKy8qKgorICogQ2xlYXIg
YWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCisgKgorICogVGhpcyB3aWxsIGNoYW5nZSB0
aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1pc3NlcworICogYW5kIHVu
c2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0ZWQsIHRoZW4gaXQgd2ls
bCBiZQorICogZGVzdHJveWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxs
ZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKKyAqIGNhbGxlZC4KKyAqLwor
dm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQoreworICAgIC8qIFRPRE86
IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVzPyAqLworICAgIHQtPnN0YXRzLm1p
c3NlcyA9IDA7CisKKyAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHQtPnN0
YXRzLmZ1bGxfdXBkYXRlID0gMDsKKyAgICBlbHNlIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAg
IGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKyAgICAgICAgdC0+dXBkYXRlcyA9IDA7Cisg
ICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IEV3
a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKK3N0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5IHsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBpbnQgd2VpZ2h0OworICAgIHN0cnVj
dCB7CisgICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpOworICAgICAg
ICB2b2lkICpkYXRhOworICAgIH0gdGlsZV9mcmVlOworfTsKKworc3RydWN0IF9Fd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgeworICAgIHN0cnVjdCB7CisgICAgICAgIEVpbmFfTGlzdCAqbGlzdDsKKyAg
ICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICBzaXplX3QgYWxsb2NhdGVkOworICAgIH0gZW50
cmllczsKKyAgICBzdHJ1Y3QgeworICAgICAgICBzaXplX3QgbWF4OyAgLyoqPCB3YXRlcm1hcmsg
KGluIGJ5dGVzKSB0byBzdGFydCBmcmVlaW5nIHRpbGVzICovCisgICAgICAgIHNpemVfdCB1c2Vk
OyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3JlIHRoYW4gbWF4LiAqLworICAgIH0gbWVtb3J5Owor
ICAgIHN0cnVjdCB7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgZmxv
YXQgem9vbTsKKyAgICAgICAgRWluYV9Cb29sIGxvY2tlZDsKKyAgICB9IGxvY2tlZDsKKyAgICBp
bnQgcmVmZXJlbmNlczsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOworfTsKKworc3RhdGljIGNv
bnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9JTklUSUFMID0gMTI4Oworc3Rh
dGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9TVEVQID0gMTY7Citz
dGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01BWF9GUkVFID0gMzI7CisKKy8q
KgorICogQ2FjaGUgb2YgdW51c2VkIHRpbGVzICh0aG9zZSB0aGF0IGFyZSBub3QgdmlzaWJsZSku
CisgKgorICogVGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KKyAqCisgKiBAcGFyYW0gbWF4IGNh
Y2hlIHNpemUgaW4gYnl0ZXMuCisgKgorICogQHJldHVybiBuZXdseSBhbGxvY2F0ZWQgY2FjaGUg
b2YgdW51c2VkIHRpbGVzLCB1c2UKKyAqICAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Zy
ZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4gSWYgbm90CisgKiAgICAgICAgIHBvc3NpYmxlIHRv
IGFsbG9jYXRlIG1lbW9yeSwgQGMgMCBpcyByZXR1cm5lZC4KKyAqLworRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNpemVfdCBtYXgpCit7CisgICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisKKyAgICB0dWMgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZSkp
KTsKKyAgICBpZiAoIXR1YykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBEQkcoInR1Yz0lcCIs
IHR1Yyk7CisgICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OworICAgIHR1Yy0+cmVmZXJlbmNlcyA9
IDE7CisgICAgcmV0dXJuIHR1YzsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9j
a19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9
IEVJTkFfVFJVRTsKKyAgICB0dWMtPmxvY2tlZC54ID0geDsKKyAgICB0dWMtPmxvY2tlZC55ID0g
eTsKKyAgICB0dWMtPmxvY2tlZC53ID0gdzsKKyAgICB0dWMtPmxvY2tlZC5oID0gaDsKKyAgICB0
dWMtPmxvY2tlZC56b29tID0gem9vbTsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9IEVJTkFf
RkFMU0U7Cit9CisKKy8qKgorICogRnJlZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCisgKgorICog
VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb25seSBjYWxsZWQgYnkgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3VucmVmCisgKiBmdW5jdGlvbi4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY29u
c2lkZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nCisgKiBtYXkgbGVhZCB0byB1bmtub3duIHJlc3Vs
dHMuCisgKgorICogVGhvc2UgdGlsZXMgdGhhdCBhcmUgc3RpbGwgdmlzaWJsZSB3aWxsIHJlbWFp
biBsaXZlLiBUaGUgdW51c2VkCisgKiB0aWxlcyB3aWxsIGJlIGZyZWVkLgorICoKKyAqIEBzZWUg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBEQkcoInR1Yz0lcCwgIgorICAg
ICAgICAiZW50cmllcz0oY291bnQ6JXpkLCBhbGxvY2F0ZWQ6JXpkKSwgIgorICAgICAgICAibWVt
b3J5PShtYXg6JXpkLCB1c2VkOiV6ZCkiLAorICAgICAgICB0dWMsIHR1Yy0+ZW50cmllcy5jb3Vu
dCwgdHVjLT5lbnRyaWVzLmFsbG9jYXRlZCwKKyAgICAgICAgdHVjLT5tZW1vcnkubWF4LCB0dWMt
Pm1lbW9yeS51c2VkKTsKKworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOwor
ICAgIGZyZWUodHVjKTsKK30KKworLyoqCisgKiBDbGVhciBjYWNoZSBvZiB1bnVzZWQgdGlsZXMu
CisgKgorICogQW55IHRpbGVzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSBhcmUgZnJlZWQuIFRoZSBv
bmx5IHRpbGVzIHRoYXQgYXJlCisgKiBrZXB0IGFyZSB0aG9zZSB0aGF0IGFyZW4ndCBpbiB0aGUg
Y2FjaGUgKGkuZS4gdGhhdCBhcmUgdmlzaWJsZSkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogaXRlbTsKKyAgICBFSU5BX0xJU1RfRlJFRSh0
dWMtPmVudHJpZXMubGlzdCwgaXRlbSkgeworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVf
RW50cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0
ZW0pOworICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHIt
PnRpbGUpOworICAgICAgICBmcmVlKGl0cik7CisgICAgfQorCisgICAgdHVjLT5tZW1vcnkudXNl
ZCA9IDA7CisgICAgdHVjLT5lbnRyaWVzLmNvdW50ID0gMDsKK30KKworLyoqCisgKiBIb2xkIHJl
ZmVyZW5jZSB0byBjYWNoZS4KKyAqCisgKiBAcmV0dXJuIHNhbWUgcG9pbnRlciBhcyB0YWtlbi4K
KyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigpCisgKi8KK0V3a19UaWxl
X1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAw
KTsKKyAgICB0dWMtPnJlZmVyZW5jZXMrKzsKKyAgICByZXR1cm4gdHVjOworfQorCisvKioKKyAq
IFJlbGVhc2UgY2FjaGUgcmVmZXJlbmNlLCBmcmVlaW5nIGl0IGlmIGl0IGRyb3BzIHRvIHplcm8u
CisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKCkKKyAqIEBzZWUgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUoKQorICovCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91
bnJlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih0dWMpOworICAgIHR1Yy0+cmVmZXJlbmNlcy0tOworICAgIGlmICghdHVjLT5y
ZWZlcmVuY2VzKQorICAgICAgICBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUodHVjKTsKK30K
Kwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1Yywgc2l6ZV90IG1heCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOworICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKK30KKworc2l6ZV90IGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOworICAgIHJldHVybiB0
dWMtPm1lbW9yeS5tYXg7Cit9CisKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9n
ZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CisgICAgcmV0dXJuIHR1Yy0+bWVtb3J5LnVzZWQ7
Cit9CisKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMsIHNpemVfdCBieXRlcykKK3sKKyAgICBFaW5hX0xpc3QgKmwsICpsX25leHQ7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CisgICAgc2l6ZV90
IGRvbmU7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworCisgICAgaWYgKCF0dWMtPmVudHJpZXMu
Y291bnQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChieXRlcyA8IDEpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLyoKKyAgICAgKiBOT1RFOiB0aGUgY2FjaGUgaXMgYSBGSUZPIHF1ZXVl
IGN1cnJlbnRseS4KKyAgICAgKiBEb24ndCBuZWVkIHRvIHNvcnQgYW55IG1vcmUuCisgICAgICov
CisKKyAgICB2b2lkKiBpdGVtOworICAgIGRvbmUgPSAwOworICAgIGNvdW50ID0gMDsKKyAgICBF
SU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0ZW0p
IHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKKyAgICAgICAgRXdrX1RpbGUg
KnQgPSBpdHItPnRpbGU7CisgICAgICAgIGlmIChkb25lID4gYnl0ZXMpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKHR1Yy0+bG9ja2VkLmxvY2tlZAorICAgICAgICAgICAgJiYgdC0+
eCArIHQtPncgPiB0dWMtPmxvY2tlZC54CisgICAgICAgICAgICAmJiB0LT55ICsgdC0+aCA+IHR1
Yy0+bG9ja2VkLnkKKyAgICAgICAgICAgICYmIHQtPnggPCB0dWMtPmxvY2tlZC54ICsgdHVjLT5s
b2NrZWQudworICAgICAgICAgICAgJiYgdC0+eSA8IHR1Yy0+bG9ja2VkLnkgKyB0dWMtPmxvY2tl
ZC5oCisgICAgICAgICAgICAmJiB0LT56b29tID09IHR1Yy0+bG9ja2VkLnpvb20pIHsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRvbmUgKz0gc2l6ZW9mKEV3a19U
aWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7CisgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+
dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7CisgICAgICAgIHR1Yy0+ZW50cmllcy5saXN0ID0g
ZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBsKTsKKyAgICAgICAgZnJl
ZShpdHIpOworICAgICAgICBjb3VudCsrOworICAgIH0KKworICAgIHR1Yy0+bWVtb3J5LnVzZWQg
LT0gZG9uZTsKKyAgICB0dWMtPmVudHJpZXMuY291bnQgLT0gY291bnQ7CisKKyAgICByZXR1cm4g
ZG9uZTsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOworICAgIGlmICh0dWMtPm1lbW9yeS51c2VkIDw9IHR1Yy0+bWVtb3J5Lm1heCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCh0dWMsIHR1Yy0+bWVt
b3J5LnVzZWQgLSB0dWMtPm1lbW9yeS5tYXgpOworICAgIGlmICh0dWMtPm1lbW9yeS51c2VkID4g
dHVjLT5tZW1vcnkubWF4KQorICAgICAgICBDUklUSUNBTCgiQ2FjaGUgc3RpbGwgdXNpbmcgdG9v
IG11Y2ggbWVtb3J5OiAlemQgS0I7IG1heDogJXpkIEtCIiwKKyAgICAgICAgICAgICAgICAgdHVj
LT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4KTsKK30KKworLyoqCisgKiBGcmVlemUgY2Fj
aGUgdG8gbm90IGRvIG1haW50ZW5hbmNlIHRhc2tzLgorICoKKyAqIE1haW50ZW5hbmNlIHRhc2tz
IG9wdGltaXplIGNhY2hlIHVzYWdlLCBidXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91bGQKKyAqIGhv
bGQgb24gdGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3
ZSBmcmVlemUKKyAqIHdoaWxlIG9wZXJhdGluZyBhbmQgdGhlbiB0aGF3IHdoZW4gd2UncmUgZG9u
ZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KCkKKyAqLwordm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQor
eworICAgIHR1Yy0+ZnJvemVuKys7Cit9CisKKy8qKgorICogVW5mcmVlemVzIG1haW50ZW5hbmNl
IHRhc2tzLgorICoKKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXpl
LCB0aGVuIG1haW50ZW5hbmNlIHRhc2tzCisgKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KKyAqLwor
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKK3sKKyAgICBpZiAoIXR1Yy0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhhd2luZyBtb3Jl
IHRoYW4gZnJlZXppbmchIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0dWMtPmZy
b3plbi0tOworfQorCisvKioKKyAqIEdldCB0aWxlIGZyb20gY2FjaGUgb2YgdW51c2VkIHRpbGVz
LCByZW1vdmluZyBpdCBmcm9tIHRoZSBjYWNoZS4KKyAqCisgKiBJZiB0aGUgdGlsZSBpcyB1c2Vk
LCB0aGVuIGl0J3Mgbm90IGluIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgc28gaXQKKyAqIGlzIHJl
bW92ZWQgZnJvbSB0aGUgY2FjaGUgYW5kIG1heSBiZSBnaXZlbiBiYWNrIHdpdGgKKyAqIGV3a190
aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCgpLgorICoKKyAqIEBwYXJhbSB0dWMgY2FjaGUgb2Yg
dW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdCB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdr
X1RpbGVfVW51c2VkX0NhY2hlLgorICoKKyAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNz
LCAjRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0KQor
eworICAgIEVpbmFfTGlzdCAqZSwgKmw7CisKKyAgICB2b2lkKiBpdGVtOworICAgIGUgPSAwOwor
ICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7CisgICAg
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogZW50cnkgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKKyAgICAgICAgaWYgKGVudHJ5LT50aWxl
ID09IHQpIHsKKyAgICAgICAgICAgIGUgPSBsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKCFlKSB7CisgICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQg
aW4gY2FjaGUgJXAiLCB0LCB0dWMpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9
CisKKyAgICB0dWMtPmVudHJpZXMuY291bnQtLTsKKyAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNp
emVvZihFd2tfVGlsZSkgKyB0LT5ieXRlczsKKyAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFf
bGlzdF9yZW1vdmVfbGlzdCh0dWMtPmVudHJpZXMubGlzdCwgZSk7CisgICAgZnJlZShpdGVtKTsK
KworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKKy8qKgorICogUHV0IHRpbGUgaW50byBjYWNo
ZSBvZiB1bnVzZWQgdGlsZXMsIGFkZGluZyBpdCB0byB0aGUgY2FjaGUuCisgKgorICogVGhpcyBz
aG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdC0+dmlzaWJsZSBpcyBAYyAwIGFuZCBubyBvYmplY3Rz
IGFyZQorICogdXNpbmcgdGhlIHRpbGUgYW55bW9yZSwgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBi
ZSBleHBpcmVkIGFuZCBoYXZlCisgKiBpdHMgbWVtb3J5IHJlcGxhY2VkLgorICoKKyAqIE5vdGUg
dGhhdCB0aWxlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBpZiBjYWNoZSBpcyBmdWxs
LAorICogaW5zdGVhZCB0aGUgY2FjaGUgd2lsbCBoYXZlIG1vcmUgYnl0ZXMgdXNlZCB0aGFuIG1h
eGltdW0gYW5kIG9uZQorICogY2FuIGNhbGwgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2goKSB0byBmcmVlIHRoZW0uIFRoaXMgaXMgZG9uZQorICogYmVjYXVzZSB1c3VhbGx5IHdlIHdh
bnQgYSBsYXp5IG9wZXJhdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICoKKyAqIEBwYXJh
bSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdCB0aWxlIHRvIGJlIGFkZGVk
IHRvIGNhY2hlLgorICogQHBhcmFtIHRpbGVfZnJlZV9jYiBmdW5jdGlvbiB1c2VkIHRvIGZyZWUg
dGlsZXMuCisgKiBAcGFyYW0gZGF0YSBjb250ZXh0IHRvIGdpdmUgYmFjayB0byBAYSB0aWxlX2Zy
ZWVfY2IgYXMgZmlyc3QgYXJndW1lbnQuCisgKgorICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1
Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lzZS4gSWYgQGMgdC0+dmlzaWJsZQorICogICAgICAg
ICBpcyBub3QgI0VJTkFfRkFMU0UsIHRoZW4gaXQgd2lsbCByZXR1cm4gI0VJTkFfRkFMU0UuCisg
KgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpCisgKi8KK0VpbmFf
Qm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMsIEV3a19UaWxlICp0LCB2b2lkICgqdGlsZV9mcmVlX2NiKSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5ICplOworCisgICAgaWYgKHQtPnZpc2libGUpIHsKKyAgICAgICAgRVJSKCJ0aWxlPSVw
IGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwgdCwgdC0+dmlzaWJsZSk7CisgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9F
bnRyeSkpKTsKKyAgICBpZiAoIWUpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAg
dHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBl
KTsKKyAgICBpZiAoZWluYV9lcnJvcl9nZXQoKSkgeworICAgICAgICBFUlIoIkxpc3QgYWxsb2Nh
dGlvbiBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAg
ZS0+dGlsZSA9IHQ7CisgICAgZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9y
ZSBzb3J0ICovCisgICAgZS0+dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOworICAgIGUtPnRp
bGVfZnJlZS5kYXRhID0gKHZvaWQgKilkYXRhOworCisgICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7
CisgICAgdHVjLT5tZW1vcnkudXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7CisK
KyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9k
YmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgdm9pZCogaXRlbTsK
KyAgICBFaW5hX0xpc3QgKmw7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBwcmludGYoIkNhY2hl
IG9mIHVudXNlZCB0aWxlczogZW50cmllczogJXp1LyV6dSwgbWVtb3J5OiAlenUvJXp1XG4iLAor
ICAgICAgICAgICB0dWMtPmVudHJpZXMuY291bnQsIHR1Yy0+ZW50cmllcy5hbGxvY2F0ZWQsCisg
ICAgICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+bWVtb3J5Lm1heCk7CisKKyAgICBFSU5B
X0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgICAgICBjb25z
dCBFd2tfVGlsZSAqdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+
KGl0ZW0pLT50aWxlOworICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4z
Zl0lYyIsCisgICAgICAgICAgICAgICB0LT5jb2wsIHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9v
bSwKKyAgICAgICAgICAgICAgIHQtPnZpc2libGUgPyAnKic6ICcgJyk7CisKKyAgICAgICAgaWYg
KCEoY291bnQgJSA0KSkKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgICBw
cmludGYoIlxuIik7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108942</attachid>
            <date>2011-09-27 17:35:59 -0700</date>
            <delta_ts>2011-09-28 04:03:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68599-20110928093557.patch</filename>
            <type>text/plain</type>
            <size>219181</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYxNjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
aW5kZXggZjlkYjM1Yzk0MzE3MjUzOTJiMWNjNjcxMThmNDUxZjJiNWFkNGU2OS4uNzZkY2RkOTdh
YmRiMzNjZTcxZjc3NTU5MDUyY2RiYjhkODgxZDAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKQEAgLTc0LDkgKzc0LDkgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBlZmwvZXdrL2V3a19uZXR3b3JrLmNwcAogICAgIGVmbC9ld2svZXdrX3NldHRpbmdzLmNwcAog
ICAgIGVmbC9ld2svZXdrX3Byb3RvY29sX2hhbmRsZXIuY3BwCi0gICAgZWZsL2V3ay9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZS5jCi0gICAgZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKLSAgICBl
ZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZS5jcHAKKyAgICBlZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCisgICAgZWZsL2V3ay9l
d2tfdGlsZWRfbW9kZWwuY3BwCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAgICBlZmwvZXdr
L2V3a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCmluZGV4IGZlMWI5MDI4YjNjNTRlNGE4YWY2NGY1YzY2OGRkYzFjMTJkZWJhNzkuLjNiOWNh
MWUwNGY4Zjc4MWE1YzExOWM5OTYwNTBiODk5Y2JlMDk0ZTQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMS0wOS0yNyAgQ2hvaSBSeXVhbiAgPHJ5dWFuLmNob2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0VGTF0gUmVuYW1lIGV3a190aWxlZF8qLmMgdG8gZXdrX3RpbGVk
XyouY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODU5OQorCisgICAgICAgIFVzZSBhIEMrKyBjb21waWxlciBmb3IgdGhlc2UgZmlsZXMgYW5kIGZp
eCBjb21waWxlIGlzc3VlcyBhbmQgY29kaW5nIHN0eWxlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jLgorICAgICAgICAqIGV3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbWF0cml4
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4
LmMuCisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2RlbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMuCisKIDIwMTEtMDktMjcgIFJhcGhh
ZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgW0VGTF0g
TWFrZSBld2tfdmlldyBlbWl0IHRoZSAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgc2lnbmFsLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
LmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhOTlmOGFiZWI0ZGViMzRmZjg5ZjgzMGM2Nzhk
ZWU2ZGYyY2Q1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYworKysgL2Rl
di9udWxsCkBAIC0xLDE5MTggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKLQotI2RlZmluZSBfR05VX1NPVVJDRQotI2luY2x1
ZGUgImV3a190aWxlZF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RWNvcmUuaD4KLSNpbmNsdWRlIDxF
aW5hLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8
c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIElEWChjb2wsIHJvdywgcm93c3BhbikgKGNvbCAr
IChyb3cgKiByb3dzcGFuKSkKLQotI2lmICFkZWZpbmVkKE1JTikKLSMgZGVmaW5lIE1JTihhLCBi
KSAoKGEgPCBiKSA/IGEgOiBiKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChNQVgpCi0jIGRlZmlu
ZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKLSNlbmRpZgotCi10eXBlZGVmIGVudW0gX0V3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eTsKLXR5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGE7Ci10eXBlZGVm
IHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtOwotdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9S
ZW5kZXJfUmVxdWVzdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Q7
Ci0KLWVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgewot
ICAgIFBSRV9SRU5ERVJfUFJJT1JJVFlfTE9XID0gMCwgLyoqPCBBcHBlbmQgdGhlIHJlcXVlc3Qg
dG8gdGhlIGxpc3QgKi8KLSAgICBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0ggICAgIC8qKjwgUHJl
cGVuZCB0aGUgcmVxdWVzdCB0byB0aGUgbGlzdCAqLwotfTsKLQotc3RydWN0IF9Fd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtIHsKLSAgICBFSU5BX0lOTElTVDsKLSAgICBFd2tfVGlsZSAqdGls
ZTsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0gICAgfSBn
ZW9tZXRyeTsKLSAgICBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlOwotfTsKLQotc3RydWN0IF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgewotICAgIEVJTkFfSU5MSVNU
OwotICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Ci0gICAgZmxvYXQgem9vbTsKLX07Ci0KLXN0
cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSB7Ci0gICAgRXZhc19PYmplY3RfU21h
cnRfQ2xpcHBlZF9EYXRhIGJhc2U7Ci0gICAgRXZhc19PYmplY3QgKnNlbGY7Ci0gICAgRXZhc19P
YmplY3QgKmNvbnRlbnRzX2NsaXBwZXI7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Jbmxp
c3QgKippdGVtczsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwotICAgICAgICBsb25n
IGNvbHMsIHJvd3M7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBFdmFzX0Nvb3JkIHcs
IGg7Ci0gICAgICAgICAgICBmbG9hdCB6b29tOwotICAgICAgICAgICAgRWluYV9Cb29sIHpvb21f
d2Vha19zbW9vdGhfc2NhbGU6MTsKLSAgICAgICAgfSB0aWxlOwotICAgICAgICBzdHJ1Y3Qgewot
ICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0g
ICAgICAgICAgICB9IGN1ciwgb2xkLCBiYXNlLCB6b29tX2NlbnRlcjsKLSAgICAgICAgfSBvZmZz
ZXQ7Ci0gICAgfSB2aWV3OwotICAgIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7Ci0gICAgc3RydWN0
IHsKLSAgICAgICAgRXdrX1RpbGVfTWF0cml4ICptYXRyaXg7Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgICAgICB9IGJhc2U7Ci0gICAg
ICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7Ci0gICAg
ICAgIH0gY3VyLCBvbGQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKLSAgICB9
IG1vZGVsOwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRh
LCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOwotICAgICAgICB2b2lk
ICpkYXRhOwotICAgICAgICBFaW5hX0lubGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAgICAg
ICAgRWNvcmVfSWRsZXIgKmlkbGVyOwotICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7Ci0gICAg
ICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7Ci0gICAgfSByZW5kZXI7Ci0gICAgc3RydWN0IHsKLSAg
ICAgICAgdm9pZCAqKCpwcmVfY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAg
ICAgdm9pZCAqcHJlX2RhdGE7Ci0gICAgICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwg
dm9pZCAqcHJlX2RhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAgICAgdm9pZCAqcG9zdF9kYXRh
OwotICAgIH0gcHJvY2VzczsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgYW55OjE7
Ci0gICAgICAgIEVpbmFfQm9vbCBwb3M6MTsKLSAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKLSAg
ICAgICAgRWluYV9Cb29sIG1vZGVsOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKLSAg
ICB9IGNoYW5nZWQ7Ci0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgRWNvcmVfRXZlbnRfSGFu
ZGxlciAqc2lnX3VzcjsKLSNlbmRpZgotfTsKLQotc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3Bh
cmVudF9zYyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwotaW50IF9ld2tfdGlsZWRfbG9n
X2RvbSA9IC0xOwotCi0jZGVmaW5lIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAu
Li4pICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHRyID0gZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQob2JqKTsgXAotICAgIGlmICgh
cHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBDUklUSUNBTCgibm8gcHJpdmF0ZSBkYXRhIGluIG9iaj0lcCIsIG9iaik7
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpOwotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKLQotc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICB2b2lkICpkYXRhID0gTlVMTDsKLQotICAgIC8q
IERvIG5vdCBwcm9jZXNzIHVwZGF0ZXMuIE5vdGUgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGdldCB1
cGRhdGVzIHJlcXVlc3RzCi0gICAgICogaW4gdGhlIHF1ZXVlIGluIG9yZGVyIHRvIG5vdCBtaXNz
IGFueSB1cGRhdGVzIGFmdGVyIHRoZSByZW5kZXIgaXMKLSAgICAgKiByZXN1bWVkLgotICAgICAq
LwotICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9n
ZXQocHJpdi0+c2VsZikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcml2LT5wcm9jZXNz
LnByZV9jYikKLSAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nl
c3MucHJlX2RhdGEsIHByaXYtPnNlbGYpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNf
cHJvY2Vzcyhwcml2LT5tb2RlbC5tYXRyaXgpOwotCi0gICAgaWYgKHByaXYtPnByb2Nlc3MucG9z
dF9jYikKLSAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9k
YXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKLX0KLQotc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmx1c2godm9pZCAqZGF0YSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2ID0gZGF0YTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAg
ICBpZiAodHVjKSB7Ci0gICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7Ci0g
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIEVSUigibm8gY2FjaGU/ISIpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBFd2tfVGlsZSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25n
IHJvdywgZmxvYXQgem9vbSkKLXsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFdmFzICpldmFzID0g
ZXZhc19vYmplY3RfZXZhc19nZXQocHJpdi0+c2VsZik7Ci0gICAgaWYgKCFldmFzKSB7Ci0gICAg
ICAgIENSSVRJQ0FMKCJldmFzX29iamVjdF9ldmFzX2dldCBmYWlsZWQhIik7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcKLSAg
ICAgICAgKHByaXYtPm1vZGVsLm1hdHJpeCwgZXZhcywgY29sLCByb3csIHpvb20pOwotCi0gICAg
aWYgKCF0KSB7Ci0gICAgICAgIENSSVRJQ0FMKCJld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcgZmFp
bGVkISIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17
Ci0gICAgaXQtPmdlb21ldHJ5LnggPSB4OwotICAgIGl0LT5nZW9tZXRyeS55ID0geTsKLQotICAg
IGlmIChpdC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2Us
IHgsIHkpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9y
ZXNpemUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoKQotewotICAgIGl0LT5nZW9tZXRyeS53ID0gdzsKLSAgICBpdC0+Z2VvbWV0cnku
aCA9IGg7Ci0KLSAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXpl
KGl0LT50aWxlLT5pbWFnZSwgdywgaCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxf
c2V0KGl0LT50aWxlLT5pbWFnZSwgMCwgMCwgdywgaCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGUgKnQsIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0KQotewotICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgQ1JJVElDQUwoIml0LT50
aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIE5VTEwhIiwgaXQtPnRpbGUpOwotICAgIGl0LT50aWxl
ID0gdDsKLSAgICBldmFzX29iamVjdF9tb3ZlKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5
LngsIGl0LT5nZW9tZXRyeS55KTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmlt
YWdlLCBpdC0+Z2VvbWV0cnkudywgaXQtPmdlb21ldHJ5LmgpOwotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX2ZpbGxfc2V0Ci0gICAgICAgIChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRy
eS53LCBpdC0+Z2VvbWV0cnkuaCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxl
X3NldChpdC0+dGlsZS0+aW1hZ2UsIGl0LT5zbW9vdGhfc2NhbGUpOwotCi0gICAgaWYgKCFld2tf
dGlsZV92aXNpYmxlX2dldCh0KSkKLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Fk
ZCh0LT5pbWFnZSwgcHJpdi0+c2VsZik7Ci0KLSAgICBld2tfdGlsZV9zaG93KHQpOwotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0gKml0LCBkb3VibGUgbGFzdF91c2VkKQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjOwotICAgIGV3a190aWxlX2hpZGUoaXQtPnRpbGUpOwotICAgIGlmICghZXdrX3RpbGVfdmlz
aWJsZV9nZXQoaXQtPnRpbGUpKQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVs
KGl0LT50aWxlLT5pbWFnZSk7Ci0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1v
ZGVsLm1hdHJpeCwgaXQtPnRpbGUsIGxhc3RfdXNlZCk7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwotCi0gICAgaXQtPnRpbGUgPSBOVUxMOwotfQot
Ci1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2Fs
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIEVpbmFfSW5saXN0
ICppdDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdGVtOwotICAgIGludCBp
OwotICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICBm
b3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKLSAgICAgICAgaXQgPSBwcml2
LT52aWV3Lml0ZW1zW2ldOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQot
ICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOwotICAg
IH0KLX0KLQotc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tLCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHByaW9yaXR5KQotewotICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKLQotICAgIE1B
TExPQ19PUl9PT01fUkVUKHIsIHNpemVvZigqciksIEVJTkFfRkFMU0UpOwotCi0gICAgaWYgKHBy
aW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKLSAgICAgICAgcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCi0gICAgICAgICAgICAo
cHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7Ci0g
ICAgZWxzZQotICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFf
aW5saXN0X2FwcGVuZAotICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwotCi0gICAgci0+Y29sID0gY29sOwotICAgIHItPnJv
dyA9IHJvdzsKLSAgICByLT56b29tID0gem9vbTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCi17Ci0gICAgcHJpdi0+cmVu
ZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUKLSAgICAgICAgKHBy
aXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwotICAg
IGZyZWUocik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0g
ICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCi0gICAgICAgIHByaXYtPnJlbmRl
ci5wcmVfcmVuZGVyX3JlcXVlc3RzLAotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3Jl
bmRlcl9yZXF1ZXN0czsKLSAgICB3aGlsZSAoKnBsKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKLSAgICAgICAgciA9IF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7Ci0gICAgICAgICpw
bCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7Ci0gICAgICAgIGZyZWUocik7Ci0gICAg
fQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9y
ZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAg
RWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAg
ICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKLSAgICB3aGlsZSAoaXRlcikgewotICAg
ICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIgPQotICAg
ICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKLSAgICAgICAgICAgICAgICBpdGVy
LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwotICAgICAgICB0
bXAgPSBpdGVyLT5uZXh0OwotICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCBp
dGVyKTsKLSAgICAgICAgaXRlciA9IHRtcDsKLSAgICAgICAgZnJlZShyKTsKLSAgICB9Ci19Ci0K
LS8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEg
Ki8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnJlcTsKLSAg
ICBFaW5hX1JlY3RhbmdsZSBhcmVhOwotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBwcml2LT5t
b2RlbC5tYXRyaXg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWM7Ci0gICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKLSAgICBmbG9hdCB6b29tOwotICAg
IGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICByZXEgPSBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwot
ICAgIGlmICghcmVxKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb2wgPSByZXEtPmNvbDsKLSAg
ICByb3cgPSByZXEtPnJvdzsKLSAgICB6b29tID0gcmVxLT56b29tOwotCi0gICAgaWYgKGV3a190
aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpvb20pKSB7Ci0gICAg
ICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwg
Y29sLCByb3csIHpvb20pOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0KLSAgICB0ID0gX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93LCB6b29tKTsKLSAg
ICBpZiAoIXQpCi0gICAgICAgIGdvdG8gZW5kOwotCi0gICAgYXJlYS54ID0gMDsKLSAgICBhcmVh
LnkgPSAwOwotICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIGFyZWEuaCA9IHBy
aXYtPnZpZXcudGlsZS5oOwotCi0gICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRh
LCB0LCAmYXJlYSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKAotICAg
ICAgICB0LT5pbWFnZSwKLSAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywgYXJlYS5oKTsK
LSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0KTsKLQotICAgIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKLQotZW5kOgotICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHByaXYsIHJlcSk7
Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwotfQot
Ci1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3Nf
aWRsZXJfY2Iodm9pZCAqZGF0YSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2ID0gZGF0YTsKLQotICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKLSAgICAgICAg
ZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEsIHByaXYt
PnNlbGYpOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9wcm9jZXNzX3NpbmdsZShwcml2KTsKLQotICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RfY2Ip
Ci0gICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSwg
ZGF0YSwgcHJpdi0+c2VsZik7Ci0KLSAgICBpZiAoIXByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3Jl
cXVlc3RzKSB7Ci0gICAgICAgIHByaXYtPnJlbmRlci5pZGxlciA9IE5VTEw7Ci0gICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0b3AoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAo
IXByaXYtPnJlbmRlci5pZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWNvcmVfaWRsZXJf
ZGVsKHByaXYtPnJlbmRlci5pZGxlcik7Ci0gICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gTlVMTDsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3By
b2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBpZiAocHJpdi0+cmVuZGVyLmlkbGVyKQotICAgICAgICByZXR1cm47Ci0gICAgcHJpdi0+
cmVuZGVyLmlkbGVyID0gZWNvcmVfaWRsZXJfYWRkKAotICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiLCBwcml2KTsKLX0KLQotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAocHJpdi0+cmVuZGVyLnN1c3BlbmQp
Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfVFJVRTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0b3AocHJpdik7Ci0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQp
Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfRkFMU0U7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxl
cl9zdGFydChwcml2KTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKLXsKLSAgICB1bnNpZ25l
ZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBjb2w7Ci0gICAgdW5zaWduZWQg
bG9uZyBtX3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OwotICAgIGRvdWJsZSBsYXN0
X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICBpZiAobV9jb2wgPj0gcHJpdi0+
bW9kZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJpdi0+bW9kZWwuY3VyLnJvd3MpIHsKLSAgICAg
ICAgaWYgKGl0LT50aWxlKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBFd2tfVGlsZSAqdDsKLSAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYtPnZpZXcudGls
ZS56b29tOwotCi0gICAgICAgIGlmIChpdC0+dGlsZSkgewotICAgICAgICAgICAgRXdrX1RpbGUg
Km9sZCA9IGl0LT50aWxlOwotICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9s
ZC0+Y29sICE9IG1fY29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQotICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNl
ZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChvbGQtPnJvdyA9PSBtX3JvdyAmJiBvbGQtPmNvbCA9
PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0gem9vbSkKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsK
LSAgICAgICAgfQotCi0gICAgICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQo
cHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOwotCi0gICAgICAgIGlmICgh
dCkgewotICAgICAgICAgICAgLyogTk9URTogaXQgbmV2ZXIgcmV0dXJucyBOVUxMIGlmIGl0LT50
aWxlIHdhcyBzZXQhICovCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAgICAgICAg
ICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgTlVMTCEiLCBpdC0+
dGlsZSk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZShwcml2LCBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8KLSAg
ICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKLSAgICAgICAgICAgICAgICB0
ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jvdywg
em9vbSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKHQgIT0gaXQtPnRpbGUpIHsKLSAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKLSAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXQsIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOwotICAgICAgICB9Ci0KLSAgICAgIGVuZDoK
LQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RS
VUU7Ci19Ci0KLXN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQotewotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRoOwot
Ci0gICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChp
dCwgc2l6ZW9mKCppdCksIE5VTEwpOwotCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAg
ICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggKyBwcml2LT52aWV3LnggKyB0dyAgKmNvbDsKLSAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICsgcHJpdi0+dmlldy55ICsgdGggICpyb3c7Ci0KLSAgICBpdC0+dGlsZSA9IE5VTEw7
Ci0KLSAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9v
dGhfc2NhbGU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgeCwg
eSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgp
OwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwg
Y29sLCByb3cpKSB7Ci0gICAgICAgIGZyZWUoaXQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gaXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkKLXsKLSAgICBpZiAoaXQtPnRpbGUpIHsKLSAg
ICAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKLSAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91
c2VkKTsKLSAgICB9Ci0KLSAgICBmcmVlKGl0KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKLXsKLSAgICBpZiAoaXQtPnNt
b290aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChp
dC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+
dGlsZS0+aW1hZ2UsIHNtb290aF9zY2FsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KQotewotICAgIGlmIChwcml2LT5jaGFuZ2VkLmFueSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5nZWQocHJpdi0+c2VsZik7Ci0gICAgcHJpdi0+Y2hh
bmdlZC5hbnkgPSBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0gICAgRWlu
YV9Jbmxpc3QgKm47Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0KLSAgICBpZiAoIWNvdW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBuID0gKCpwX3JvdyktPmxhc3Q7Ci0KLSAgICBmb3IgKGkgPSAw
OyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdDsKLSAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICBuID0gbi0+cHJldjsKLSAgICAgICAgKnBf
cm93ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7Ci0g
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7Ci0gICAg
fQotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlz
dCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkKLXsK
LSAgICB1bnNpZ25lZCBpbnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKLQotICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7Ci0gICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotCi0gICAgICAgIGl0ID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKLSAgICAgICAgaWYgKCFp
dCkgewotICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1
IGluIHJvdyAldS4iLCBpLCBjb3VudCwgcik7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOwotICAgICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICAqcF9yb3cgPSBlaW5hX2lu
bGlzdF9hcHBlbmQoKnBfcm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfcm93X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lu
bGlzdCAqcm93KQotewotICAgIHdoaWxlIChyb3cpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICByb3cgPSByb3ct
Pm5leHQ7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBp
dCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5h
X0lubGlzdCAqKnN0YXJ0LCBFaW5hX0lubGlzdCAqKmVuZCkKLXsKLSAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cm93X2RlbChwcml2LCAqc3RhcnQpOwotICAgICAgICAqc3RhcnQgPSBOVUxMOwotICAgIH0KLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3Qg
KipzdGFydDsKLSAgICBFaW5hX0lubGlzdCAqKmVuZDsKLQotICAgIHN0YXJ0ID0gcHJpdi0+dmll
dy5pdGVtczsKLSAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOwot
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0
YXJ0LCBlbmQpOwotCi0gICAgZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKLSAgICBwcml2LT52aWV3
Lml0ZW1zID0gTlVMTDsKLSAgICBwcml2LT52aWV3LmNvbHMgPSAwOwotICAgIHByaXYtPnZpZXcu
cm93cyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5k
ZXIodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQot
ewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSBkYXRhOwotCi0gICAg
SU5GKCJUT0RPICVwICh2aXNpYmxlPyAlZCkgWyVsdSwlbHVdICVkLCVkICsgJWR4JWQiLAotICAg
ICAgICB0LCB0LT52aXNpYmxlLCB0LT5jb2wsIHQtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJl
YS0+dywgYXJlYS0+aCk7Ci0KLSAgICBpZiAoIXQtPnZpc2libGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChwcml2LT52aWV3LnRpbGUudyAhPSB0LT53IHx8IHByaXYtPnZpZXcudGlsZS5o
ICE9IHQtPmgpCi0gICAgICAgIHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24n
dCBldmVuIGZsYWcgYXMgZGlydHkhCi0KLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihw
cml2LT5yZW5kZXIuY2IpOwotICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5k
YXRhLCB0LCBhcmVhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
ZGF0YV91cGRhdGVfYWRkKHQtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVh
LT5oKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9t
b2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgp
IHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHBy
aXYpOwotCi0gICAgICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9GQUxTRTsKLSAgICAg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwotCi0gICAgICAgIGV3a190aWxlX21h
dHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgfQotCi0gICAgcHJpdi0+bW9kZWwu
bWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0dWMsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBw
cml2LT5tb2RlbC5jdXIucm93cywgcHJpdi0+Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcmVuZGVyLCBwcml2KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICptZW1iZXIp
Ci17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgaWYgKCFwcml2
LT5jb250ZW50c19jbGlwcGVyKQotICAgICAgICByZXR1cm47Ci0gICAgZXZhc19vYmplY3RfY2xp
cF91bnNldChtZW1iZXIpOwotICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+
Y29udGVudHNfY2xpcHBlcikpCi0gICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVu
dHNfY2xpcHBlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQotewot
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIGlmICghcHJpdi0+Y29u
dGVudHNfY2xpcHBlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0
KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgaWYgKGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KG8pKQotICAgICAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIpOwotfQotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1zdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2KQotewotICAgIHN0YXRpYyBpbnQgcnVuID0gMDsKLQotICAgIHJ1bisrOwotCi0gICAgcHJp
bnRmKCJcbi0tLSBCRUdJTiBERUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0t
XG4iCi0gICAgICAgICAgICJ0PSUwLjJmLCBvYmo9JXAsIHByaXY9JXAsIHZpZXcuaXRlbXM9JXAs
IG1hdHJpeD0lcFxuIiwKLSAgICAgICAgICAgcnVuLCBlY29yZV9sb29wX3RpbWVfZ2V0KCksCi0g
ICAgICAgICAgIHByaXYtPnNlbGYsIHByaXYsIHByaXYtPnZpZXcuaXRlbXMsIHByaXYtPm1vZGVs
Lm1hdHJpeCk7Ci0KLSAgICBld2tfdGlsZV9tYXRyaXhfZGJnKHByaXYtPm1vZGVsLm1hdHJpeCk7
Ci0gICAgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcoKTsKLQotICAgIHByaW50ZigiLS0tIEVORCBE
RUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0tXG5cbiIsIHJ1bik7Ci19Ci0K
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCAq
ZGF0YSwgaW50IHR5cGUsIHZvaWQgKmV2ZW50KQotewotICAgIEVjb3JlX0V2ZW50X1NpZ25hbF9V
c2VyICpzaWcgPSAoRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50OwotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSopZGF0YTsKLQotICAgIGlmIChzaWctPm51bWJlciA9PSAyKSB7Ci0gICAgICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOwotICAgICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2Vk
X2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgICAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfYXV0b19mbHVzaCh0dWMpOwotICAgIH0KLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2RiZyhwcml2KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2Ri
Zyhwcml2KTsKLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCi17Ci0g
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdjsKLQotICAgIERCRygibz0lcCIs
IG8pOwotCi0gICAgQ0FMTE9DX09SX09PTV9SRVQocHJpdiwgc2l6ZW9mKCpwcml2KSk7Ci0KLSAg
ICBwcml2LT5zZWxmID0gbzsKLSAgICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEuMDsKLSAgICBw
cml2LT52aWV3LnRpbGUudyA9IERFRkFVTFRfVElMRV9XOwotICAgIHByaXYtPnZpZXcudGlsZS5o
ID0gREVGQVVMVF9USUxFX0g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwotICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSAwOwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKLQot
ICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IDA7Ci0gICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5y
b3dzID0gMTsKLSAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwu
b2xkLnJvd3MgPSAwOwotICAgIHByaXYtPm1vZGVsLndpZHRoID0gMDsKLSAgICBwcml2LT5tb2Rl
bC5oZWlnaHQgPSAwOwotICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKLSAg
ICBwcml2LT5jc3BhY2UgPSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVj
dCBpdC4KLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHByaXYpOwotICAgIF9w
YXJlbnRfc2MuYWRkKG8pOwotCi0gICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2Jq
ZWN0X3JlY3RhbmdsZV9hZGQoCi0gICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pKTsKLSAg
ICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOwotICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKLSAgICBldmFz
X29iamVjdF9jb2xvcl9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwg
MjU1KTsKLSAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbyk7
Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2
LCBOVUxMKTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7
Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7Ci0gICAg
ZXZhc19vYmplY3RfY2xpcF9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5j
bGlwcGVyKTsKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHByaXYtPnNpZ191c3IgPSBl
Y29yZV9ldmVudF9oYW5kbGVyX2FkZAotICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIs
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyLCBwcml2KTsKLSNlbmRpZgotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0
ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIERCRygi
bz0lcCIsIG8pOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOwotCi0gICAgdHVjID0g
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKLQotICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9mbHVzaChwcml2KTsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKHByaXYpOwotICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChwcml2KTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOwotICAg
IGlmIChwcml2LT5zaWdfdXNyKQotICAgICAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRf
aGFuZGxlcl9kZWwocHJpdi0+c2lnX3Vzcik7Ci0jZW5kaWYKLQotICAgIGV3a190aWxlX21hdHJp
eF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2RlbChwcml2LT5jb250ZW50c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9kZWwocHJpdi0+
Y29udGVudHNfY2xpcHBlcik7Ci0KLSAgICBfcGFyZW50X3NjLmRlbChvKTsKLQotI2lmZGVmIERF
QlVHX01FTV9MRUFLUwotICAgIHByaW50ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RP
UkUgREVMRVRFRCAobWF5IGJlIHJlYWwgbGVha3MpXG4iKTsKLSAgICBld2tfdGlsZV9hY2NvdW50
aW5nX2RiZygpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQg
eSkKLXsKLSAgICBEQkcoIm89JXAsIG5ldyBwb3M6ICVkeCVkIiwgbywgeCwgeSk7Ci0KLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQotICAgIGlmIChwcml2LT5jaGFuZ2Vk
LnBvcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHBy
aXYtPnZpZXcueSA9PSB5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5jaGFuZ2VkLnBv
cyA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6
ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCi17Ci0gICAgREJH
KCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBvLCB3LCBoKTsKLQotICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHByaXYtPnZpZXcudyA9PSB3ICYmIHByaXYtPnZpZXcuaCA9
PSBoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RS
VUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Ci19Ci0KLXN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBo
LCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nvb3JkIHRoKQotewotICAgIGxvbmcgY29scywgcm93cywg
b2xkX3Jvd3MsIG9sZF9jb2xzOwotICAgIElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJp
di0+c2VsZiwgdywgaCk7Ci0KLSAgICBjb2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChm
bG9hdCl0dyk7Ci0gICAgcm93cyA9IDEgKyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgp
OwotCi0gICAgSU5GKCJvPSVwIG5ldyBncmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQsIHdh
cyAlbGQsICVsZCIsCi0gICAgICAgIHByaXYtPnNlbGYsIGNvbHMsIHJvd3MsIHByaXYtPnZpZXcu
Y29scywgcHJpdi0+dmlldy5yb3dzKTsKLQotICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29s
cyAmJiBwcml2LT52aWV3LnJvd3MgPT0gcm93cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgb2xk
X2NvbHMgPSBwcml2LT52aWV3LmNvbHM7Ci0gICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7
Ci0KLSAgICBpZiAocm93cyA8IG9sZF9yb3dzKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqc3Rh
cnQsICoqZW5kOwotICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAg
ICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7Ci0gICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOwot
ICAgIH0KLSAgICBSRUFMTE9DX09SX09PTV9SRVQocHJpdi0+dmlldy5pdGVtcywgc2l6ZW9mKEVp
bmFfSW5saXN0KikgKiAoaW50KXJvd3MpOwotICAgIHByaXYtPnZpZXcucm93cyA9IHJvd3M7Ci0g
ICAgcHJpdi0+dmlldy5jb2xzID0gY29sczsKLSAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0g
ICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOwotICAgICAgICBzdGFydCA9IHByaXYt
PnZpZXcuaXRlbXMgKyBvbGRfcm93czsKLSAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyAr
IHJvd3M7Ci0gICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAgICAg
ICAgRWluYV9Cb29sIHI7Ci0gICAgICAgICAgICAqc3RhcnQgPSBOVUxMOwotICAgICAgICAgICAg
ciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAotICAgICAgICAg
ICAgICAgIChwcml2LCBzdGFydCwgMCwgY29scyk7Ci0gICAgICAgICAgICBpZiAoIXIpIHsKLSAg
ICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwg
Y29scyk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93
c19yYW5nZV9kZWwKLSAgICAgICAgICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcuaXRlbXMg
KyBvbGRfcm93cywgc3RhcnQpOwotICAgICAgICAgICAgICAgIHByaXYtPnZpZXcucm93cyA9IG9s
ZF9yb3dzOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChjb2xzICE9IG9sZF9jb2xzKSB7Ci0gICAgICAgIEVpbmFfSW5s
aXN0ICoqc3RhcnQsICoqZW5kOwotICAgICAgICBpbnQgdG9kbyA9IGNvbHMgLSBvbGRfY29sczsK
LSAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgICAgICBlbmQgPSBzdGFydCAr
IE1JTihvbGRfcm93cywgcm93cyk7Ci0gICAgICAgIGlmICh0b2RvID4gMCkgewotICAgICAgICAg
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgICAgICAgICAgRWluYV9C
b29sIHI7Ci0gICAgICAgICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2FkZAotICAgICAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xz
LCB0b2RvKTsKLSAgICAgICAgICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
Q1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1bW5zISIsIHRvZG8pOwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoc3RhcnQtLTsgc3RhcnQgPj0gcHJpdi0+dmlldy5pdGVtczsg
c3RhcnQtLSkKLSAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0
b2RvKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHRv
ZG8gPCAwKSB7Ci0gICAgICAgICAgICB0b2RvID0gLXRvZG87Ci0gICAgICAgICAgICBmb3IgKDsg
c3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQotewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNs
aXBwZXIsIHcsIGgpOwotCi0gICAgcHJpdi0+dmlldy53ID0gdzsKLSAgICBwcml2LT52aWV3Lmgg
PSBoOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCi0g
ICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZpZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7
Ci19Ci0KLS8vIFRPRE86IHJlbW92ZSBtZSBsYXRlci4KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSAqcHJpdikKLXsKLSAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICBw
cmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9kZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNs
ZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9sZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIs
Ci0gICAgICAgICAgIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzLAotICAgICAgICAg
ICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsCi0gICAgICAgICAg
IHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQsCi0gICAgICAgICAgIHByaXYt
Pm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2RlbC5iYXNlLnJvdywKLSAgICAgICAgICAgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55LAotICAgICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJpdi0+dmlldy5vZmZzZXQub2xkLnksCi0gICAgICAg
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsK
LQotICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBlbmQgPSBwcml2LT52aWV3Lml0
ZW1zICsgcHJpdi0+dmlldy5yb3dzOwotICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykg
ewotICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLQotICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFydCwgaXQpIHsKLSAgICAgICAgICAgIHByaW50
ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0cnkueCwgaXQtPmdlb21ldHJ5LnkpOwotCi0gICAg
ICAgICAgICBpZiAoIWl0LT50aWxlKQotICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAg
ICAgOyIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVs
dSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxlLT5jb2wsIGl0LT50aWxlLT5yb3cpOwotICAgICAg
ICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9Ci0gICAgcHJpbnRmKCItLS1cbiIpOwot
fQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92ZSB0b3Agcm93IGRvd24gYXMgbGFzdC4KLSAq
Ci0gKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZpc3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5
IHRoZSB0b3AgdGhhdAotICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBib3R0b20gYW5k
IGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0gKiBUaGlzIGlzIHdvcnRoIGp1c3Qg
d2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAqIHByaXYtPnZpZXcucm93cywgYWZ0
ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKLSAqIGlzIGJl
dHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAqIEBwYXJhbSBjb3VudCB0aGUgbnVt
YmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KLSAqLwotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNv
dW50KQotewotICAgIHVuc2lnbmVkIGludCBsYXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7
Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQg
dGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0aDsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIChs
YXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCArIG9mZl95OwotICAgIEVpbmFfSW5saXN0ICoqaXRy
X3N0YXJ0LCAqKml0cl9lbmQ7Ci0KLSAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwot
ICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBsYXN0X3JvdzsKLQotICAgIGZvciAoOyBjb3VudCA+
IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVpbmFf
SW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtICppdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLng7Ci0gICAgICAgIGludCBjID0gMDsKLQotICAgICAgICBmb3IgKGl0ciA9IGl0cl9z
dGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspCi0gICAgICAgICAgICAqaXRyID0gKihpdHIgKyAx
KTsKLSAgICAgICAgKml0ciA9IHRtcDsKLQotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysr
OwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAg
ICBveCArPSB0dzsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Zp
bGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsKLSAgICAgICAgICAgIGMrKzsKLSAgICAgICAgfQot
ICAgICAgICBveSArPSB0aDsKLSAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0g
b2ZmX3k7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBNb3ZlIGJvdHRvbSByb3cgdXAgYXMg
Zmlyc3QuCi0gKgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0
IGxvZ2ljYWxseSB0aGUgYm90dG9tIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cg
YXQgdG9wIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMuCi0gKgotICogVGhpcyBpcyB3
b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFuIEBjCi0gKiBwcml2LT52aWV3
LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0
Ci0gKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4KLSAqCi0gKiBAcGFyYW0gY291
bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCi0gKi8KLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5z
aWduZWQgaW50IGNvdW50KQotewotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUu
dzsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29y
ZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGNvdW50ICogdGg7Ci0gICAgRXZh
c19Db29yZCBveSA9IHkgKyBvZmZfeSArIChjb3VudCAtIDEpICogdGg7Ci0gICAgRWluYV9Jbmxp
c3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsKLQotICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcu
aXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAxOwotICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0
ZW1zOwotCi0gICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewotICAgICAgICBFaW5hX0lu
bGlzdCAqKml0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7Ci0gICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFdmFzX0Nvb3Jk
IG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICAgICAgaW50IGMgPSAwOwot
Ci0gICAgICAgIGZvciAoaXRyID0gaXRyX3N0YXJ0OyBpdHIgPiBpdHJfZW5kOyBpdHItLSkKLSAg
ICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEpOwotICAgICAgICAqaXRyID0gdG1wOwotCi0gICAg
ICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
dG1wLCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92
ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgMCk7Ci0gICAgICAgICAg
ICBjKys7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgLT0gdGg7Ci0gICAgfQotICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95OwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92
ZSBsZWZ0LW1vc3QgKGZpcnN0KSBjb2x1bW4gcmlnaHQgYXMgbGFzdCAocmlnaHQtbW9zdCkuCi0g
KgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxs
eSB0aGUgZmlyc3QgY29sIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgbGFz
dCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgotICoKLSAqIFRoaXMgaXMgd29ydGgg
anVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYwotICogcHJpdi0+dmlldy5jb2xz
LCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAotICog
aXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCi0gKgotICogQHBhcmFtIGNvdW50IHRo
ZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVk
IGludCBjb3VudCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2LT52aWV3
LmNvbHMgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICBF
dmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29yZCBvZmZfeCA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICogdHc7Ci0gICAgRXZhc19Db29yZCBv
eSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3QgKippdHI7
Ci0gICAgRWluYV9Jbmxpc3QgKippdHJfZW5kOwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVt
czsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIHIgPSAwOwotCi0g
ICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0gY291bnQ7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRy
X2VuZDsgaXRyKyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2Nv
bCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9
IGxhc3RfY29sIC0gY291bnQgKyAxOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrLCBjKyssIG94ICs9IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtICppdDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgq
aXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAgICAgICppdHIgPSBl
aW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0cik7Ci0KLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsKLSAgICAgICAgfQot
ICAgICAgICBveSArPSB0aDsKLSAgICB9Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
PSBvZmZfeDsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIE1vdmUgcmlnaHQtbW9zdCAobGFz
dCkgY29sdW1uIGxlZnQgYXMgZmlyc3QgKGxlZnQtbW9zdCkuCi0gKgotICogVGhlIGZpbmFsIHJl
c3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgbGFzdCBjb2wgdGhh
dAotICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBmaXJzdCBhbmQgZmlsbGVkIHdpdGgg
bmV3IG1vZGVsIGl0ZW1zLgotICoKLSAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50
IGlzIHNtYWxsZXIgdGhhbiBAYwotICogcHJpdi0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBp
cyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAotICogaXMgYmV0dGVyIHRvIHRyaWdn
ZXIgZnVsbCByZWZpbGwuCi0gKgotICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMg
dG8gcmVwZWF0IHRoZSBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0g
ICAgdW5zaWduZWQgaW50IHI7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53
OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICBFdmFzX0Nvb3Jk
IG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IC0gY291bnQgKiB0dzsKLSAgICBFdmFz
X0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFaW5hX0lubGlz
dCAqKml0ciwgKippdHJfZW5kOwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBp
dHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIHIgPSAwOwotCi0gICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRy
KyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChjb3VudCAtIDEpICogdHcg
KyBvZmZfeDsKLSAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBjb3VudCAtIDE7Ci0KLSAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwgb3ggLT0gdHcpIHsKLSAgICAgICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICAgICAgaXQgPSBF
SU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSk7Ci0gICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRy
LCAoKml0ciktPmxhc3QpOwotCi0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0g
dGg7Ci0gICAgfQotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Ci19Ci0K
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
aW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKLXsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJf
ZW5kOwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKLSAgICB1bnNpZ25lZCBp
bnQgcjsKLQotICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsK
LQotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKLQotICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgIG95
ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcu
aXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICByID0gMDsK
LQotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sIC09IHN0ZXBfeDsKLSAgICBwcml2LT5tb2RlbC5i
YXNlLnJvdyAtPSBzdGVwX3k7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIr
KykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICAgICAg
RXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKLSAg
ICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAg
ICAgICAgYysrOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAgICAgb3kg
Kz0gdGg7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2Vu
ZDsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7Ci0KLSAgICBldmFzX29iamVj
dF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7Ci0KLSAgICB0dyA9IHByaXYtPnZpZXcu
dGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAgICBiYXNlX294ID0geCAr
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnk7Ci0KLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBp
dHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFdmFz
X0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBp
dCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICB9Ci0gICAgICAgIG95ICs9
IHRoOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdikKLXsKLSAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBw
cml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAgICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKLSAgICBFdmFzX0Nvb3JkIHR3
LCB0aDsKLSAgICBpbnQgc3RlcF95LCBzdGVwX3g7Ci0KLSAgICBJTkYoIm89JXAsIG9mZnNldDog
JSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAotICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7Ci0KLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAg
ICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBzdGVw
X3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93ID0g
LXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9kZWwu
YmFzZS5yb3cgLSBuZXdfcm93OwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55OwotICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJp
di0+dmlldy54LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcu
eSk7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKLQotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAocHJpdiwgcHJp
di0+dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBfeCwgc3RlcF95KTsKLX0KLQotc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkp
Ci17Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+
dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7
Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OwotCi0gICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQs
ICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwotCi0gICAgaWYgKCFk
eCAmJiAhZHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7
Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2
LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OwotICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2Uu
Y29sIC0gbmV3X2NvbDsKLSAgICBsb25nIG5ld19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgLyB0aDsKLSAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7Ci0K
LSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54Owot
ICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Ci0g
ICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAg
ICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCi0gICAgICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKLQotICAgIGlmICgoc3RlcF94
IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeCA+
IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeSA8IDAg
JiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJvd3MpCi0gICAgICAgIHx8IChzdGVwX3kgPiAwICYm
IHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3MpKSB7Ci0KLSAgICAgICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICogdHc7Ci0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRoOwotCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJp
di0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICs9IGR5OwotCi0gICAgaWYgKHN0ZXBfeSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAocHJpdiwgeCwgeSwgLXN0ZXBfeSk7Ci0gICAgZWxz
ZSBpZiAoc3RlcF95ID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBfeSk7Ci0KLSAgICBpZiAoc3RlcF94IDwgMCkKLSAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHks
IC1zdGVwX3gpOwotICAgIGVsc2UgaWYgKHN0ZXBfeCA+IDApCi0gICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcF94KTsKLQotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9w
b3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpCi17Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5
KHByaXYsIHgsIHkpOwotICAgIHByaXYtPnZpZXcueCA9IHg7Ci0gICAgcHJpdi0+dmlldy55ID0g
eTsKLSAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVy
LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKLSAgICAg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2LT52aWV3LnkpOwotfQotCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBFaW5hX0lubGlzdCAqaXQ7Ci0gICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKLSAgICBpbnQgaSwgajsKLQotICAgIGZv
ciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgewotICAgICAgICBpdCA9IHByaXYt
PnZpZXcuaXRlbXNbaV07Ci0gICAgICAgIGogPSAwOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKGl0LCBpdGVtKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
ZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKLXsKLSAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0KLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
bywgJngsICZ5LCAmdywgJmgpOwotICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgbywg
eCwgeSwgdywgaCk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQot
ICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlOQV9GQUxTRTsKLQotICAgIGV3a190aWxlX21hdHJp
eF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4KTsKLQotICAgIGlmICghcHJpdi0+cmVuZGVyLnN1
c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewotICAgICAgICB1bnNpZ25lZCBsb25nIGNv
bHMsIHJvd3M7Ci0KLSAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmll
dy50aWxlLncgKyAxOwotICAgICAgICByb3dzID0gcHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+
dmlldy50aWxlLmggKyAxOwotCi0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+
bW9kZWwuY3VyLmNvbHM7Ci0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9k
ZWwuY3VyLnJvd3M7Ci0gICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gY29sczsKLSAgICAg
ICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSByb3dzOwotICAgICAgICBpZiAocHJpdi0+bW9kZWwu
b2xkLmNvbHMgPiBjb2xzKQotICAgICAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xz
OwotICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLnJvd3MgPiByb3dzKQotICAgICAgICAgICAg
cm93cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dzOwotICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVz
aXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29scywgcm93cyk7Ci0gICAgfQotCi0gICAgaWYgKHBy
aXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0g
eSkpIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9w
b3MocHJpdiwgeCwgeSk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQucG9zID0gRUlOQV9GQUxTRTsK
LSAgICB9Ci0gICAgaWYgKHByaXYtPmNoYW5nZWQub2Zmc2V0KSB7Ci0gICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KHByaXYsIHgsIHkpOwotICAg
ICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYg
KHByaXYtPmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgdywgaCk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQu
c2l6ZSA9IEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVu
ZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7
Ci0gICAgICAgIHJlY3QueCA9IDA7Ci0gICAgICAgIHJlY3QueSA9IDA7Ci0gICAgICAgIHJlY3Qu
dyA9IHByaXYtPm1vZGVsLndpZHRoOwotICAgICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWln
aHQ7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKLSAgICAgICAgcHJpdi0+
Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShw
cml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVp
Z2h0KTsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9v
ZmZzZXRfZm9yY2UocHJpdik7Ci0KLSAgICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNz
IGFueSBpbXBvcnRhbnQgcmVwYWludCBieQotICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9s
ZSB2aWV3cG9ydCAqLwotICAgICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSByID0KLSAgICAgICAg
ICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OwotICAg
ICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwotICAgIH0K
LQotICAgIGV3a190aWxlX21hdHJpeF90aGF3KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwotCi0gICAgaWYg
KHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLncKLSAgICAgICAgfHwgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID4gMAotICAgICAgICB8fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0g
LSBwcml2LT52aWV3LnRpbGUuaCkKLSAgICAgICAgRVJSKCJpbmNvcnJlY3QgYmFzZSBvZmZzZXQg
JSs0ZCwlKzRkLCB0aWxlPSVkeCVkLCBjdXI9JSs0ZCwlKzRkXG4iLAotICAgICAgICAgICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnksCi0gICAgICAg
ICAgICBwcml2LT52aWV3LnRpbGUudywgcHJpdi0+dmlldy50aWxlLmgsCi0gICAgICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwotCi19Ci0K
LUV2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoRXZhcyAqZSkKLXsKLSAg
ICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQgPSBOVUxMOwotCi0gICAgaWYgKF9ld2tfdGlsZWRf
bG9nX2RvbSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFp
bl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiLCBOVUxMKTsKLQotICAgIGlmICgh
c21hcnQpIHsKLSAgICAgICAgc3RhdGljIEV2YXNfU21hcnRfQ2xhc3Mgc2MgPQotICAgICAgICAg
ICAgRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmUiKTsKLQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3NldCgm
c2MpOwotICAgICAgICBfcGFyZW50X3NjID0gc2M7Ci0KLSAgICAgICAgc2MuYWRkID0gX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZDsKLSAgICAgICAgc2MuZGVsID0gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbDsKLSAgICAgICAgc2MucmVzaXplID0gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZTsKLSAgICAgICAgc2MubW92ZSA9IF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlOwotICAgICAgICBzYy5jYWxjdWxhdGUgPSBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlOwotICAgICAgICBzYy5tZW1iZXJf
YWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQ7Ci0gICAgICAg
IHNjLm1lbWJlcl9kZWwgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2Rl
bDsKLQotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBzbWFydCk7Ci19Ci0KLXZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldChFdmFzX09iamVjdCAqbywgRWlu
YV9Cb29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqYXJlYSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oY2IpOwotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIHBy
aXYtPnJlbmRlci5jYiA9IGNiOwotICAgIHByaXYtPnJlbmRlci5kYXRhID0gKHZvaWQqKWRhdGE7
Ci19Ci0KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIE5VTEwpOwotICAgIHJldHVybiBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotfQotCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBpZiAoZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIHR1Yyk7Ci19Ci0K
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29m
ZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgLyogVE9ETzogY2hlY2sgb2Zmc2V0IGdv
IG91dCBvZiBib3VuZHMsIGNsYW1wICovCi0gICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkK
LSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCA9IHg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSB5OwotCi0gICAgcHJpdi0+Y2hh
bmdlZC5vZmZzZXQgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2No
YW5nZWQocHJpdik7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCAq
bywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgREJHKCJvPSVwLCB4PSVkLCB5
PSVkIiwgbywgeCwgeSk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBF
SU5BX0ZBTFNFKTsKLSAgICBpZiAoeCA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5ID09
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotCi0g
ICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0
X2ludGVybmFsKHByaXYsIHgsIHkpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCBk
eCwgRXZhc19Db29yZCBkeSkKLXsKLSAgICBEQkcoIm89JXAsIGR4PSVkLCBkeT0lZCIsIG8sIGR4
LCBkeSk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNF
KTsKLSAgICBpZiAoIWR4ICYmICFkeSkKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLQotICAg
IHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9p
bnRlcm5hbAotICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkeCwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5
LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQotewotICAgICpvZmZ4ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7Ci0gICAgKm9mZnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eTsKLQotICAgIGlmIChmYWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6b29tKSA8IFpPT01f
U1RFUF9NSU4pIHsKLSAgICAgICAgREJHKCJpZ25vcmVkIGFzIHpvb20gZGlmZmVyZW5jZSBpcyA8
ICVmOiAlZiIsCi0gICAgICAgICAgICAoZG91YmxlKVpPT01fU1RFUF9NSU4sIGZhYnNmKHByaXYt
PnZpZXcudGlsZS56b29tIC0gKnpvb20pKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAg
ICB9Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zs
dXNoKHByaXYpOwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotCi0gICAgKnpvb20gPSBST1VOREVE
X1pPT00ocHJpdi0+dmlldy50aWxlLncsICp6b29tKTsKLQotICAgIHR3ID0gcHJpdi0+dmlldy50
aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIGZsb2F0IHNjYWxlID0g
Knpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKLQotICAgIHByaXYtPnZpZXcudGlsZS56b29t
ID0gKnpvb207Ci0gICAgLy8gdG9kbzogY2hlY2sgY3ggWzAsIHddLi4uCi0gICAgcHJpdi0+dmll
dy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21f
Y2VudGVyLnkgPSBjeTsKLQotCi0gICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcu
aCkgewotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwotICAgICAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAg
IH0KLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0OwotCi0gICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9
IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7Ci0gICAgRXZhc19D
b29yZCBieCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGN4KSAqIHNjYWxlOwot
ICAgIEV2YXNfQ29vcmQgYnkgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgLSBjeSkg
KiBzY2FsZTsKLQotICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lkdGggPSBwcml2LT5tb2RlbC53aWR0
aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVp
Z2h0ICogc2NhbGU7Ci0KLSAgICBpZiAobW9kZWxfd2lkdGggPCBwcml2LT52aWV3LncgfHwgbmV3
X3ggPj0gMCkKLSAgICAgICAgbmV3X3ggPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeCArIHByaXYt
PnZpZXcudyA+PSBtb2RlbF93aWR0aCkKLSAgICAgICAgbmV3X3ggPSAtbW9kZWxfd2lkdGggKyBw
cml2LT52aWV3Lnc7Ci0KLSAgICBpZiAobW9kZWxfaGVpZ2h0IDwgcHJpdi0+dmlldy5oIHx8IG5l
d195ID49IDApCi0gICAgICAgIG5ld195ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3kgKyBwcml2
LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0KQotICAgICAgICBuZXdfeSA9IC1tb2RlbF9oZWlnaHQg
KyBwcml2LT52aWV3Lmg7Ci0KLSAgICBieCA9IG5ld194ICUgdHc7Ci0gICAgcHJpdi0+bW9kZWwu
YmFzZS5jb2wgPSAtIG5ld194IC8gdHc7Ci0gICAgYnkgPSBuZXdfeSAlIHRoOwotICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93ID0gLSBuZXdfeSAvIHRoOwotCi0gICAgcHJpdi0+Y2hhbmdlZC5zaXpl
ID0gRUlOQV9UUlVFOwotICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7Ci0gICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Ci0KLSAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3
X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gYng7Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID0gYnk7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnk7Ci0gICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsK
LSAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwotCi0gICAgZXZhc19vYmplY3Rf
bW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgbmV3X3ggKyBw
cml2LT52aWV3LngsCi0gICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKLQotICAgIEV2YXNfQ29v
cmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAgRXZh
c19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
OwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOwotCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAg
ICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0g
Kml0cjsKLQotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7
Ci0gICAgICAgICAgICBveCArPSB0dzsKLSAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0ICp6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5
KQotewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpKnpvb20pOwotCi0gICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0KLSAgICByZXR1
cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKHByaXYsIHpvb20s
IGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3Jk
IGN4LCBFdmFzX0Nvb3JkIGN5KQotewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3Vi
bGUpem9vbSk7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxT
RSk7Ci0gICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcuaCkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsK
LSAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsKLQotICAgIGZsb2F0IHNjYWxlID0g
em9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwotCi0gICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9P
TShwcml2LT52aWV3LnRpbGUudywgc2NhbGUpOwotICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJ
WkUodHcsIHByaXYtPnZpZXcudGlsZS53KTsKLSAgICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKHBy
aXYtPnZpZXcudGlsZS5oLCBzY2FsZSk7Ci0gICAgem9vbSA9IHNjYWxlICogcHJpdi0+dmlldy50
aWxlLnpvb207Ci0KLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3dpZHRoID0gcHJpdi0+bW9kZWwud2lk
dGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX2hlaWdodCA9IHByaXYtPm1vZGVsLmhl
aWdodCAqIHNjYWxlOwotCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIsIG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOwotCi0gICAgaW50IHZyb3dzID0gY2Vp
bCgoZmxvYXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSArIDE7Ci0gICAgaW50IHZjb2xzID0g
Y2VpbCgoZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3KSArIDE7Ci0gICAgRXZhc19Db29y
ZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0g
ICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kp
ICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBieCA9IG5ld194ICUgdHc7Ci0gICAgRXZhc19Db29y
ZCBieSA9IG5ld195ICUgdGg7Ci0gICAgdW5zaWduZWQgbG9uZyBiYXNlX3JvdyA9IC1uZXdfeSAv
IHRoOwotICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAtbmV3X3ggLyB0dzsKLQotICAgIGlm
IChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlX2NvbCAhPSBwcml2LT5t
b2RlbC5iYXNlLmNvbCkgewotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IGJhc2Vfcm93
OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJhc2VfY29sOwotICAgICAgICByZWNh
bGMgPSBFSU5BX1RSVUU7Ci0gICAgfQotCi0gICAgaWYgKHZyb3dzID4gcHJpdi0+dmlldy5yb3dz
IHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQotICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7
Ci0KLSAgICBpZiAocmVjYWxjKSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgdywgaDsKLSAgICAgICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIE5VTEwsIE5VTEwsICZ3LCAmaCk7Ci0gICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKHByaXYsIHcsIGgsIHR3
LCB0aCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhw
cml2KTsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhw
cml2KTsKLSAgICB9Ci0KLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBieCArIHByaXYtPnZpZXcu
eDsKLSAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7Ci0KLSAgICBldmFzX29i
amVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICBu
ZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+
dmlldy55KTsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0
ciArIHByaXYtPnZpZXcucm93czsKLQotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykg
ewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRWluYV9Jbmxpc3Qg
KmxzdCA9ICppdHI7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7Ci0g
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kp
OwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0
dywgdGgpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0g
dGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBF
dmFzX0Nvb3JkIGgpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0g
ICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLng7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55Owot
ICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgRXZhc19D
b29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0g
cHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OwotCi0gICAgaWYgKC1uZXdfeCA+IHcpIHsKLSAgICAgICAgbmV3X3ggPSAtdzsKLSAgICAgICAg
YnggPSBuZXdfeCAlIHR3OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAv
IHR3OwotICAgIH0KLQotICAgIGlmICgtbmV3X3kgPiBoKSB7Ci0gICAgICAgIG5ld195ID0gLWg7
Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cg
PSAtbmV3X3kgLyB0aDsKLSAgICB9Ci0KLSAgICBpZiAoYnggPj0gMCB8fCBieCA8PSAtMiAqIHBy
aXYtPnZpZXcudGlsZS53KSB7Ci0gICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKLSAgICB9Ci0KLSAgICBpZiAoYnkgPj0g
MCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKSB7Ci0gICAgICAgIGJ5ID0gbmV3X3kg
JSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKLSAgICB9
Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdf
eDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IGJ4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5Owot
ICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgICAg
ICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAgICAgICAgICAgICAgICAgICAgbmV3
X3kgKyBwcml2LT52aWV3LnkpOwotCi0gICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2
LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0KLSAgICBpdHIgPSBwcml2LT52
aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0KLSAgICBm
b3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJh
c2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwotCi0gICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3
OwotICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLX0KLQotdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAq
bywgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotCi0gICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OwotICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoX3Nj
YWxlOwotCi0gICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
Kml0ciwgaXQpCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldAotICAgICAgICAgICAg
ICAgICAgICAoaXQsIHNtb290aF9zY2FsZSk7Ci0gICAgfQotfQotCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqdXBkYXRlKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJ
TkFfRkFMU0UpOwotCi0gICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICByZXR1cm4gZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2
LT5tb2RlbC5tYXRyaXgsIHVwZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcml2LT52aWV3LnRpbGUuem9vbSk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLSAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9jYiA9
IGNiOwotICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0YTsKLX0KLQotdm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19P
YmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09i
amVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2I7Ci0gICAgcHJpdi0+
cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8pCi17Ci0gICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIocHJp
di0+bW9kZWwubWF0cml4KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250
ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQg
aGVpZ2h0KQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAg
aWYgKHdpZHRoID09IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9PSBwcml2LT5tb2RlbC5o
ZWlnaHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByaXYtPm1vZGVsLndpZHRoID0gd2lkdGg7
Ci0gICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX1RSVUU7Ci0KLSAgICBEQkcoIndpZHRoLGhlaWdodD0lZCwgJWQiLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKLX0K
LQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KEV2YXNf
T2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVuZGVyLmRpc2FibGVkKQot
ICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKLX0KLQotdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9
IE5VTEw7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7Ci0gICAgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkgPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gMDsKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgIHByaXYtPm1v
ZGVsLmJhc2UuY29sID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7Ci0gICAgcHJp
di0+bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKLSAg
ICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAw
OwotICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUsIFNUQVRVUyBCRUZP
UkUgREVMRVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfbWVtX2RiZyhwcml2KTsKLSNlbmRpZgotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2KTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9jbGVhcih0dWMpOwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgcHJp
bnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJFQ1JFQVRJTkcgVElM
RSBNQVRSSVg6XG4iKTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2
KTsKLSNlbmRpZgotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKLXsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBFaW5hX1RpbGVfR3JpZF9T
bGljZXIgc2xpY2VyOwotICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8gKmluZm87Ci0gICAg
RXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0KLSAg
ICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0g
ICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7Ci0KLSAgICBp
ZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywg
dGgpKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xpY2VyIGZvciAlZCwl
ZCslZHglZCB0aWxlPSVkeCVkIiwKLSAgICAgICAgICAgIHgsIHksIHcsIGgsIHR3LCB0aCk7Ci0g
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIHdoaWxlIChlaW5hX3RpbGVf
Z3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBjID0gaW5mby0+Y29sOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIHIgPSBp
bmZvLT5yb3c7Ci0gICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9hZGQocHJpdiwgYywgciwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKLQotICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpvb20pOwotICAgIHJl
dHVybiBFSU5BX1RSVUU7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5zaWduZWQgaW50IG4s
IGZsb2F0IHpvb20pCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlO
QV9GQUxTRSk7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2Nv
bCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
LQotICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBwcml2LT52aWV3LnJv
d3M9JWx1IiwKLSAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBuLCBwcml2LT52aWV3
LnJvd3MpOwotICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVsLmJhc2Uucm93IC0gbjsK
LSAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG47Ci0gICAgZW5k
X3JvdyA9IE1JTihwcml2LT5tb2RlbC5jdXIucm93cyAtIDEsCi0gICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC5iYXNlLnJvdyArIHByaXYtPnZpZXcucm93cyArIG4gLSAxKTsKLSAgICBlbmRf
Y29sID0gTUlOKHByaXYtPm1vZGVsLmN1ci5jb2xzIC0gMSwKLSAgICAgICAgICAgICAgICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAtIDEpOwotCi0gICAgSU5G
KCJzdGFydF9yb3c9JWx1LCBlbmRfcm93PSVsdSwgc3RhcnRfY29sPSVsdSwgZW5kX2NvbD0lbHUi
LAotICAgICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOwotCi0g
ICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7Ci0KLSAgICBm
b3IgKGkgPSBzdGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsrKQotICAgICAgICBmb3IgKGogPSBz
dGFydF9jb2w7IGogPD0gZW5kX2NvbDsgaisrKQotICAgICAgICAgICAgaWYgKCFfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChwcml2LCBqLCBpLCB6b29tLCBQ
UkVfUkVOREVSX1BSSU9SSVRZX0xPVykpCi0gICAgICAgICAgICAgICAgZ290byBzdGFydF9wcm9j
ZXNzaW5nOwotCi1zdGFydF9wcm9jZXNzaW5nOgotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0KLSAgICB0dWMgPSBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGggPSAoZW5k
X3JvdyAtIHN0YXJ0X3JvdyArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxl
LmgsIHpvb20pOwotICAgIHcgPSAoZW5kX2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpF
X0FUX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pOwotICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9sb2NrX2FyZWEodHVjLAotICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpFX0FU
X1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pLAotICAgICAgICAgICAgc3RhcnRfcm93ICog
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHpvb20pLCB3LCBoLCB6b29tKTsK
LQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pCi17Ci0gICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0K
LSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKHBy
aXYpOwotCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+
bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVj
KTsKLX0KLQotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVy
KEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYs
IEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJs
ZV9yZW5kZXIocHJpdik7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9l
bmFibGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9j
aGFuZ2VkKHByaXYpOwotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxl
X3JlbmRlcihwcml2KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1YjljZWExMGVkMmI1YjQyZTg5MDk4NGU2
YjliMmMxODNlN2U5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCkBAIC0wLDAgKzEsMTkyMiBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKKworI2luY2x1
ZGUgImV3a190aWxlZF9tYXRyaXguaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgor
I2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRp
by5oPiAvLyBYWFggUkVNT1ZFIE1FIExBVEVSCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgSURYKGNvbCwgcm93LCByb3dzcGFuKSAoY29sICsgKHJv
dyAqIHJvd3NwYW4pKQorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbTsKK3R5
cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0OworCitlbnVtIF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHsKKyAgICBQUkVfUkVOREVS
X1BSSU9SSVRZX0xPVyA9IDAsIC8qKjwgQXBwZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0ICov
CisgICAgUFJFX1JFTkRFUl9QUklPUklUWV9ISUdIICAgICAvKio8IFByZXBlbmQgdGhlIHJlcXVl
c3QgdG8gdGhlIGxpc3QgKi8KK307Cit0eXBlZGVmIGVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0
b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRl
cl9Qcmlvcml0eTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIHsKKyAg
ICBFSU5BX0lOTElTVDsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBzdHJ1Y3QgeworICAgICAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgfSBnZW9tZXRyeTsKKyAgICBFaW5hX0Jvb2wg
c21vb3RoX3NjYWxlOworfTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVf
UmVuZGVyX1JlcXVlc3QgeworICAgIEVJTkFfSU5MSVNUOworICAgIHVuc2lnbmVkIGxvbmcgY29s
LCByb3c7CisgICAgZmxvYXQgem9vbTsKK307CisKK3N0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSB7CisgICAgRXZhc19PYmplY3RfU21hcnRfQ2xpcHBlZF9EYXRhIGJhc2U7Cisg
ICAgRXZhc19PYmplY3QgKnNlbGY7CisgICAgRXZhc19PYmplY3QgKmNvbnRlbnRzX2NsaXBwZXI7
CisgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9Jbmxpc3QgKippdGVtczsKKyAgICAgICAgRXZh
c19Db29yZCB4LCB5LCB3LCBoOworICAgICAgICBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgICAgICAgICBmbG9hdCB6
b29tOworICAgICAgICAgICAgRWluYV9Cb29sIHpvb21fd2Vha19zbW9vdGhfc2NhbGU6MTsKKyAg
ICAgICAgfSB0aWxlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CisgICAgICAgICAgICB9IGN1ciwgb2xkLCBi
YXNlLCB6b29tX2NlbnRlcjsKKyAgICAgICAgfSBvZmZzZXQ7CisgICAgfSB2aWV3OworICAgIEV2
YXNfQ29sb3JzcGFjZSBjc3BhY2U7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXdrX1RpbGVfTWF0
cml4ICptYXRyaXg7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGNvbCwgcm93OworICAgICAgICB9IGJhc2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIH0gY3VyLCBvbGQ7CisgICAgICAg
IEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKKyAgICB9IG1vZGVsOworICAgIHN0cnVjdCB7Cisg
ICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWlu
YV9SZWN0YW5nbGUgKmFyZWEpOworICAgICAgICB2b2lkICpkYXRhOworICAgICAgICBFaW5hX0lu
bGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICAgICAgRWNvcmVfSWRsZXIgKmlkbGVyOwor
ICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7CisgICAgICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7
CisgICAgfSByZW5kZXI7CisgICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAqKCpwcmVfY2IpKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcHJlX2RhdGE7CisgICAg
ICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEsIEV2YXNfT2Jq
ZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcG9zdF9kYXRhOworICAgIH0gcHJvY2VzczsKKyAgICBz
dHJ1Y3QgeworICAgICAgICBFaW5hX0Jvb2wgYW55OjE7CisgICAgICAgIEVpbmFfQm9vbCBwb3M6
MTsKKyAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKKyAgICAgICAgRWluYV9Cb29sIG1vZGVsOjE7
CisgICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKKyAgICB9IGNoYW5nZWQ7CisjaWZkZWYgREVC
VUdfTUVNX0xFQUtTCisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciAqc2lnX3VzcjsKKyNlbmRpZgor
fTsKKworc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVWQVNfU01BUlRfQ0xB
U1NfSU5JVF9OVUxMOworaW50IF9ld2tfdGlsZWRfbG9nX2RvbSA9IC0xOworCisjZGVmaW5lIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAuLi4pICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0
KG9iaikpOyBcCisgICAgaWYgKCFwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENSSVRJQ0FMKCJubyBwcml2YXRlIGRh
dGEgaW4gb2JqPSVwIiwgb2JqKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBf
X1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7CitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpOworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpOwor
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIHZvaWQgKmRh
dGEgPSAwOworCisgICAgLyogRG8gbm90IHByb2Nlc3MgdXBkYXRlcy4gTm90ZSB0aGF0IHdlIHN0
aWxsIHdhbnQgdG8gZ2V0IHVwZGF0ZXMgcmVxdWVzdHMKKyAgICAgKiBpbiB0aGUgcXVldWUgaW4g
b3JkZXIgdG8gbm90IG1pc3MgYW55IHVwZGF0ZXMgYWZ0ZXIgdGhlIHJlbmRlciBpcworICAgICAq
IHJlc3VtZWQuCisgICAgICovCisgICAgaWYgKHByaXYtPnJlbmRlci5zdXNwZW5kIHx8ICFldmFz
X29iamVjdF92aXNpYmxlX2dldChwcml2LT5zZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQorICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5w
cmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+c2VsZik7CisKKyAgICBld2tfdGls
ZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBpZiAo
cHJpdi0+cHJvY2Vzcy5wb3N0X2NiKQorICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IocHJp
di0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOworfQorCitzdGF0aWMgaW50
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lkICpkYXRhKQoreworICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMg
PSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwor
CisgICAgaWYgKHR1YykgeworICAgICAgICBEQkcoImZsdXNoIHVudXNlZCB0aWxlIGNhY2hlLiIp
OworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgIH0g
ZWxzZQorICAgICAgICBFUlIoIm5vIGNhY2hlPyEiKTsKKworICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgRXdrX1RpbGUgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQg
bG9uZyByb3csIGZsb2F0IHpvb20pCit7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRXZhcyAqZXZh
cyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYpOworICAgIGlmICghZXZhcykgewor
ICAgICAgICBDUklUSUNBTCgiZXZhc19vYmplY3RfZXZhc19nZXQgZmFpbGVkISIpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0ID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3Cisg
ICAgICAgIChwcml2LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93LCB6b29tKTsKKworICAg
IGlmICghdCkgeworICAgICAgICBDUklUSUNBTCgiZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3IGZh
aWxlZCEiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorewor
ICAgIGl0LT5nZW9tZXRyeS54ID0geDsKKyAgICBpdC0+Z2VvbWV0cnkueSA9IHk7CisKKyAgICBp
ZiAoaXQtPnRpbGUpCisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCB4
LCB5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVz
aXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCkKK3sKKyAgICBpdC0+Z2VvbWV0cnkudyA9IHc7CisgICAgaXQtPmdlb21ldHJ5Lmgg
PSBoOworCisgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShp
dC0+dGlsZS0+aW1hZ2UsIHcsIGgpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3Nl
dChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIHcsIGgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlICp0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdCkKK3sKKyAgICBpZiAoaXQtPnRpbGUpCisgICAgICAgIENSSVRJQ0FMKCJpdC0+dGls
ZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKKyAgICBpdC0+dGlsZSA9IHQ7
CisgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS54LCBp
dC0+Z2VvbWV0cnkueSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5pbWFnZSwg
aXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9m
aWxsX3NldAorICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCBpdC0+Z2VvbWV0cnkudywg
aXQtPmdlb21ldHJ5LmgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQo
aXQtPnRpbGUtPmltYWdlLCBpdC0+c21vb3RoX3NjYWxlKTsKKworICAgIGlmICghZXdrX3RpbGVf
dmlzaWJsZV9nZXQodCkpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQodC0+
aW1hZ2UsIHByaXYtPnNlbGYpOworCisgICAgZXdrX3RpbGVfc2hvdyh0KTsKK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpp
dCwgZG91YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
KyAgICBld2tfdGlsZV9oaWRlKGl0LT50aWxlKTsKKyAgICBpZiAoIWV3a190aWxlX3Zpc2libGVf
Z2V0KGl0LT50aWxlKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChpdC0+
dGlsZS0+aW1hZ2UpOworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChwcml2LT5tb2RlbC5t
YXRyaXgsIGl0LT50aWxlLCBsYXN0X3VzZWQpOworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKworICAgIGl0LT50aWxlID0gMDsKK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5hX0lubGlzdCAqaXQ7Cisg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKKyAgICBpbnQgaTsKKyAgICBk
b3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworCisgICAgZm9yIChpID0g
MDsgaSA8IHByaXYtPnZpZXcucm93czsgaSsrKSB7CisgICAgICAgIGl0ID0gcHJpdi0+dmlldy5p
dGVtc1tpXTsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAgICAg
ICAgIGlmIChpdGVtLT50aWxlKQorICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2ln
bmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSwgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7CisKKyAgICByID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0Kj4obWFsbG9j
KHNpemVvZigqcikpKTsKKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwor
CisgICAgaWYgKHByaW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKKyAgICAgICAg
cHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCisg
ICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNU
X0dFVChyKSk7CisgICAgZWxzZQorICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1
ZXN0cyA9IGVpbmFfaW5saXN0X2FwcGVuZAorICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVf
cmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworCisgICAgci0+Y29sID0gY29s
OworICAgIHItPnJvdyA9IHJvdzsKKyAgICByLT56b29tID0gem9vbTsKKworICAgIHJldHVybiBF
SU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCit7Cisg
ICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUK
KyAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9H
RVQocikpOworICAgIGZyZWUocik7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXYpCit7CisgICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCisgICAgICAg
IHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLAorICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5y
ZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICB3aGlsZSAoKnBsKSB7CisgICAgICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKKyAgICAgICAgciA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7
CisgICAgICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7CisgICAgICAgIGZy
ZWUocik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9y
ZXF1ZXN0czsKKyAgICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKKyAgICB3aGlsZSAo
aXRlcikgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnIgPQorICAgICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKKyAgICAgICAg
ICAgICAgICBpdGVyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qp
OworICAgICAgICB0bXAgPSBpdGVyLT5uZXh0OworICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9y
ZW1vdmUoKnBsLCBpdGVyKTsKKyAgICAgICAgaXRlciA9IHRtcDsKKyAgICAgICAgZnJlZShyKTsK
KyAgICB9Cit9CisKKy8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBp
ZiByZXF1aXJlZCEgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnJlcTsKKyAgICBFaW5hX1JlY3RhbmdsZSBhcmVhOworICAgIEV3a19UaWxlX01hdHJpeCAq
dG0gPSBwcml2LT5tb2RlbC5tYXRyaXg7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWM7CisgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICBmbG9h
dCB6b29tOworICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisK
KyAgICByZXEgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zp
cnN0KHByaXYpOworICAgIGlmICghcmVxKQorICAgICAgICByZXR1cm47CisKKyAgICBjb2wgPSBy
ZXEtPmNvbDsKKyAgICByb3cgPSByZXEtPnJvdzsKKyAgICB6b29tID0gcmVxLT56b29tOworCisg
ICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpv
b20pKSB7CisgICAgICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUs
JWx1IEAgJWYuIiwgY29sLCByb3csIHpvb20pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisK
KyAgICB0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93
LCB6b29tKTsKKyAgICBpZiAoIXQpCisgICAgICAgIGdvdG8gZW5kOworCisgICAgYXJlYS54ID0g
MDsKKyAgICBhcmVhLnkgPSAwOworICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53OworICAg
IGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgcHJpdi0+cmVuZGVyLmNiKHByaXYt
PnJlbmRlci5kYXRhLCB0LCAmYXJlYSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRh
dGVfYWRkKAorICAgICAgICB0LT5pbWFnZSwKKyAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEu
dywgYXJlYS5oKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0
KTsKKworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKKwor
ZW5kOgorICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVs
KHByaXYsIHJlcSk7CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aCh0dWMpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSo+KGRhdGEpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQorICAgICAgICBk
YXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+
c2VsZik7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X3Byb2Nlc3Nfc2luZ2xlKHByaXYpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikK
KyAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBk
YXRhLCBwcml2LT5zZWxmKTsKKworICAgIGlmICghcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVx
dWVzdHMpIHsKKyAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gMDsKKyAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJf
c3RvcChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlmICghcHJp
di0+cmVuZGVyLmlkbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBlY29yZV9pZGxlcl9kZWwo
cHJpdi0+cmVuZGVyLmlkbGVyKTsKKyAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSAwOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlm
IChwcml2LT5yZW5kZXIuaWRsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBwcml2LT5yZW5kZXIu
aWRsZXIgPSBlY29yZV9pZGxlcl9hZGQoCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2IsIHByaXYpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQoreworICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9U
UlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rv
cChwcml2KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYpCit7CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9G
QUxTRTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0
KHByaXYpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGljIGlubGluZSBFaW5h
X0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgdW5z
aWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQoreworICAgIHVuc2lnbmVkIGxvbmcg
bV9jb2wgPSBwcml2LT5tb2RlbC5iYXNlLmNvbCArIGNvbDsKKyAgICB1bnNpZ25lZCBsb25nIG1f
cm93ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyByb3c7CisgICAgZG91YmxlIGxhc3RfdXNlZCA9
IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKworICAgIGlmIChtX2NvbCA+PSBwcml2LT5tb2RlbC5j
dXIuY29scyB8fCBtX3JvdyA+PSBwcml2LT5tb2RlbC5jdXIucm93cykgeworICAgICAgICBpZiAo
aXQtPnRpbGUpCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNz
b2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEV3a19U
aWxlICp0OworICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207
CisKKyAgICAgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgICAgICBFd2tfVGlsZSAqb2xkID0g
aXQtPnRpbGU7CisgICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gbV9yb3cgfHwgb2xkLT5jb2wg
IT0gbV9jb2wgfHwgb2xkLT56b29tICE9IHpvb20pCisgICAgICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09IG1fY29s
ICYmIG9sZC0+em9vbSA9PSB6b29tKQorICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAg
ICB9CisKKyAgICAgICAgdCA9IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChwcml2LT5t
b2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jvdywgem9vbSk7CisKKyAgICAgICAgaWYgKCF0KSB7Cisg
ICAgICAgICAgICAvKiBOT1RFOiBpdCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNl
dCEgKi8KKyAgICAgICAgICAgIGlmIChpdC0+dGlsZSkgeworICAgICAgICAgICAgICAgIENSSVRJ
Q0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKKyAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
IGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdF91c2VkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRG8gbm90
IGFkZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRlciBxdWV1ZSAqLworICAgICAgICAgICAgaWYg
KCFwcml2LT5yZW5kZXIuc3VzcGVuZCkgeworICAgICAgICAgICAgICAgIHQgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0
ZShwcml2LCB0LCBpdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodCAhPSBp
dC0+dGlsZSkgeworICAgICAgICAgICAgaWYgKGl0LT50aWxlKQorICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgbGFz
dF91c2VkKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29j
aWF0ZShwcml2LCB0LCBpdCk7CisgICAgICAgIH0KKworICAgICAgZW5kOgorCisgICAgICAgIHJl
dHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3Rh
dGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBs
b25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqaXQ7CisgICAgRXZhc19Db29yZCB4LCB5LCB0dywgdGg7CisKKyAgICBEQkcoIm89
JXAiLCBwcml2LT5zZWxmKTsKKworICAgIGl0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSo+KG1hbGxvYyhzaXplb2YoKml0KSkpOworICAgIGlmICghaXQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2
LT52aWV3LnggKyB0dyAgKmNvbDsKKyAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsg
cHJpdi0+dmlldy55ICsgdGggICpyb3c7CisKKyAgICBpdC0+dGlsZSA9IDA7CisKKyAgICBpdC0+
c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGU7Cisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgeCwgeSk7CisgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgIGlmICgh
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgY29sLCByb3cpKSB7
CisgICAgICAgIGZyZWUoaXQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1
cm4gaXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Rl
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCkKK3sKKyAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAgICAgZG91YmxlIGxh
c3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAgICB9CisK
KyAgICBmcmVlKGl0KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwg
RWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBpZiAoaXQtPnNtb290aF9zY2FsZSA9PSBz
bW9vdGhfc2NhbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpdC0+dGlsZSkKKyAgICAg
ICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGlsZS0+aW1hZ2UsIHNt
b290aF9zY2FsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAg
IGlmIChwcml2LT5jaGFuZ2VkLmFueSkKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NoYW5nZWQocHJpdi0+c2VsZik7CisgICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBFSU5B
X1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlz
dCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgRWluYV9Jbmxpc3QgKm47Cisg
ICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBuID0gKCpwX3JvdyktPmxhc3Q7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KykgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAg
aXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0pOworICAgICAgICBuID0gbi0+cHJldjsKKyAgICAgICAgKnBfcm93ID0gZWluYV9pbmxp
c3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CisgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgfQorfQorCitzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNp
Z25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKKworICAgIGZvciAoaSA9IDA7IGkg
PCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKml0OworCisgICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKKyAgICAgICAgaWYgKCFpdCkgeworICAgICAgICAg
ICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1IGluIHJvdyAldS4iLCBp
LCBjb3VudCwgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19j
b2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOworICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CisgICAgICAgIH0KKworICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnBf
cm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKKyAgICB9CisgICAgcmV0dXJuIEVJTkFfVFJVRTsK
K30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqcm93KQorewor
ICAgIHdoaWxlIChyb3cpIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQ7CisgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICByb3cgPSByb3ctPm5leHQ7CisgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2Rl
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnN0YXJ0
LCBFaW5hX0lubGlzdCAqKmVuZCkKK3sKKyAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0Kysp
IHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChwcml2LCAq
c3RhcnQpOworICAgICAgICAqc3RhcnQgPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipzdGFydDsKKyAgICBFaW5h
X0lubGlzdCAqKmVuZDsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBlbmQg
PSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOworCisgICAg
ZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKKyAgICBwcml2LT52aWV3Lml0ZW1zID0gMDsKKyAgICBw
cml2LT52aWV3LmNvbHMgPSAwOworICAgIHByaXYtPnZpZXcucm93cyA9IDA7Cit9CisKK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIodm9pZCAqZGF0YSwgRXdrX1Rp
bGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQoreworICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKj4oZGF0YSk7CisKKyAgICBJTkYoIlRPRE8gJXAgKHZpc2libGU/ICVkKSBbJWx1LCVs
dV0gJWQsJWQgKyAlZHglZCIsCisgICAgICAgIHQsIHQtPnZpc2libGUsIHQtPmNvbCwgdC0+cm93
LCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKKworICAgIGlmICghdC0+dmlz
aWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByaXYtPnZpZXcudGlsZS53ICE9IHQt
PncgfHwgcHJpdi0+dmlldy50aWxlLmggIT0gdC0+aCkKKyAgICAgICAgcmV0dXJuOyAvLyB0b2Rv
OiByZW1vdmUgbWUgbGF0ZXIsIGRvbid0IGV2ZW4gZmxhZyBhcyBkaXJ0eSEKKworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5jYik7CisgICAgaWYgKCFwcml2LT5y
ZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHQsIGFyZWEpKQorICAgICAgICByZXR1cm47CisK
KyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQodC0+aW1hZ2UsIGFyZWEtPngs
IGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAg
aWYgKHByaXYtPm1vZGVsLm1hdHJpeCkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7CisKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5vZmZz
ZXQgPSBFSU5BX0ZBTFNFOworICAgICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7
CisKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWUocHJpdi0+bW9kZWwubWF0cml4KTsKKyAg
ICB9CisKKyAgICBwcml2LT5tb2RlbC5tYXRyaXggPSBld2tfdGlsZV9tYXRyaXhfbmV3KHR1Yywg
cHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLCBwcml2LT5jc3BhY2Us
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIsIHByaXYpOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbChFdmFzX09iamVjdCAq
bywgRXZhc19PYmplY3QgKm1lbWJlcikKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKyAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBldmFzX29iamVjdF9jbGlwX3Vuc2V0KG1lbWJlcik7CisgICAgaWYgKCFldmFzX29i
amVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c19jbGlwcGVyKSkKKyAgICAgICAgZXZhc19v
YmplY3RfaGlkZShwcml2LT5jb250ZW50c19jbGlwcGVyKTsKK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQoRXZhc19PYmplY3QgKm8sIEV2
YXNfT2JqZWN0ICptZW1iZXIpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
dik7CisgICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgZXZhc19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c19jbGlwcGVyKTsK
KyAgICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQobykpCisgICAgICAgIGV2YXNfb2JqZWN0
X3Nob3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cit9CisKKyNpZmRlZiBERUJVR19NRU1fTEVB
S1MKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgc3RhdGljIGludCBydW4gPSAwOwor
CisgICAgcnVuKys7CisKKyAgICBwcmludGYoIlxuLS0tIEJFR0lOIERFQlVHIFRJTEVEIEJBQ0tJ
TkcgU1RPUkUgTUVNT1JZIFslZF0gLS1cbiIKKyAgICAgICAgICAgInQ9JTAuMmYsIG9iaj0lcCwg
cHJpdj0lcCwgdmlldy5pdGVtcz0lcCwgbWF0cml4PSVwXG4iLAorICAgICAgICAgICBydW4sIGVj
b3JlX2xvb3BfdGltZV9nZXQoKSwKKyAgICAgICAgICAgcHJpdi0+c2VsZiwgcHJpdiwgcHJpdi0+
dmlldy5pdGVtcywgcHJpdi0+bW9kZWwubWF0cml4KTsKKworICAgIGV3a190aWxlX21hdHJpeF9k
YmcocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOwor
CisgICAgcHJpbnRmKCItLS0gRU5EIERFQlVHIFRJTEVEIEJBQ0tJTkcgU1RPUkUgTUVNT1JZIFsl
ZF0gLS1cblxuIiwgcnVuKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc2lnX3Vzcih2b2lkICpkYXRhLCBpbnQgdHlwZSwgdm9pZCAqZXZlbnQpCit7Cisg
ICAgRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIgKnNpZyA9IChFY29yZV9FdmVudF9TaWduYWxfVXNl
ciopZXZlbnQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKilkYXRhOworCisgICAgaWYgKHNpZy0+bnVtYmVyID09
IDIpIHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgICAgIHR1YyA9
IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Cisg
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgfQorCisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKHByaXYpOworICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9
CisjZW5kaWYKKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCAqbykKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2OworCisgICAgREJHKCJvPSVwIiwgbyk7CisKKyAgICBwcml2ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoKnByaXYpKSk7Cisg
ICAgaWYgKCFwcml2KQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5zZWxmID0gbzsKKyAg
ICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEuMDsKKyAgICBwcml2LT52aWV3LnRpbGUudyA9IERF
RkFVTFRfVElMRV9XOworICAgIHByaXYtPnZpZXcudGlsZS5oID0gREVGQVVMVF9USUxFX0g7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IDA7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQub2xkLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2Uu
Y29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7CisgICAgcHJpdi0+bW9kZWwu
Y3VyLmNvbHMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKKyAgICBwcml2LT5t
b2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAwOworICAgIHBy
aXYtPm1vZGVsLndpZHRoID0gMDsKKyAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSAwOworICAgIHBy
aXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKKyAgICBwcml2LT5jc3BhY2UgPSBFVkFT
X0NPTE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KKworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHByaXYpOworICAgIF9wYXJlbnRfc2MuYWRkKG8pOworCisg
ICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoCisg
ICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pKTsKKyAgICBldmFzX29iamVjdF9tb3ZlKHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2
LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC53
aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9zZXQocHJp
di0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBldmFzX29iamVj
dF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21l
bWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbyk7CisKKyAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCAwKTsKKyAgICBldmFzX29iamVj
dF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfcmVzaXpl
KHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfY2xpcF9zZXQocHJp
di0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsKKworI2lmZGVmIERFQlVH
X01FTV9MRUFLUworICAgIHByaXYtPnNpZ191c3IgPSBlY29yZV9ldmVudF9oYW5kbGVyX2FkZAor
ICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zaWdfdXNyLCBwcml2KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIERCRygibz0lcCIsIG8pOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5sb2NrX2FyZWEodHVjKTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChw
cml2KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3Rf
Zmx1c2gocHJpdik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdG9wKHByaXYpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3Nf
YWxsX2RlbChwcml2KTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworICAgIGlmIChwcml2LT5zaWdfdXNyKQorICAg
ICAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9kZWwocHJpdi0+c2lnX3Vz
cik7CisjZW5kaWYKKworICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJp
eCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c19jbGlw
cGVyKTsKKyAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisKKyAg
ICBfcGFyZW50X3NjLmRlbChvKTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50
ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RPUkUgREVMRVRFRCAobWF5IGJlIHJlYWwg
bGVha3MpXG4iKTsKKyAgICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOworI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2Jq
ZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBEQkcoIm89JXAsIG5l
dyBwb3M6ICVkeCVkIiwgbywgeCwgeSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKworICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHByaXYtPnZpZXcueSA9PSB5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBwcml2LT5jaGFuZ2VkLnBvcyA9IEVJTkFfVFJVRTsKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19D
b29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgREJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQi
LCBvLCB3LCBoKTsKKworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisg
ICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBy
aXYtPnZpZXcudyA9PSB3ICYmIHByaXYtPnZpZXcuaCA9PSBoKQorICAgICAgICByZXR1cm47CisK
KyAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nv
b3JkIHRoKQoreworICAgIGxvbmcgY29scywgcm93cywgb2xkX3Jvd3MsIG9sZF9jb2xzOworICAg
IElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgdywgaCk7CisKKyAgICBj
b2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChmbG9hdCl0dyk7CisgICAgcm93cyA9IDEg
KyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgpOworCisgICAgSU5GKCJvPSVwIG5ldyBn
cmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQsIHdhcyAlbGQsICVsZCIsCisgICAgICAgIHBy
aXYtPnNlbGYsIGNvbHMsIHJvd3MsIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsK
KworICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29scyAmJiBwcml2LT52aWV3LnJvd3MgPT0g
cm93cykKKyAgICAgICAgcmV0dXJuOworCisgICAgb2xkX2NvbHMgPSBwcml2LT52aWV3LmNvbHM7
CisgICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7CisKKyAgICBpZiAocm93cyA8IG9sZF9y
b3dzKSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgICAgICBzdGFy
dCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0
ZW1zICsgb2xkX3Jvd3M7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jv
d3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOworICAgIH0KKworICAgIHZvaWQqIG5ld0l0
ZW1zID0gcmVhbGxvYyhwcml2LT52aWV3Lml0ZW1zLCBzaXplb2YoRWluYV9Jbmxpc3QqKSAqIChp
bnQpcm93cyk7CisgICAgaWYgKCFuZXdJdGVtcykKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJp
di0+dmlldy5pdGVtcyA9IHN0YXRpY19jYXN0PEVpbmFfSW5saXN0Kio+KG5ld0l0ZW1zKTsKKyAg
ICBwcml2LT52aWV3LnJvd3MgPSByb3dzOworICAgIHByaXYtPnZpZXcuY29scyA9IGNvbHM7Cisg
ICAgaWYgKHJvd3MgPiBvbGRfcm93cykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAq
KmVuZDsKKyAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAg
ICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAgICAgIEVpbmFfQm9vbCByOworICAgICAgICAgICAg
KnN0YXJ0ID0gMDsKKyAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19jb2xzX2VuZF9hZGQKKyAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOwor
ICAgICAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0
byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMpOworICAgICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsCisgICAgICAgICAgICAgICAgICAg
IChwcml2LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRfcm93czsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29scyAhPSBvbGRf
Y29scykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICAgICAgaW50
IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CisgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVt
czsKKyAgICAgICAgZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywgcm93cyk7CisgICAg
ICAgIGlmICh0b2RvID4gMCkgeworICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFy
dCsrKSB7CisgICAgICAgICAgICAgICAgRWluYV9Cb29sIHI7CisgICAgICAgICAgICAgICAgciA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAorICAgICAgICAgICAg
ICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXIpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0
ZSAlZCBjb2x1bW5zISIsIHRvZG8pOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhcnQt
LTsgc3RhcnQgPj0gcHJpdi0+dmlldy5pdGVtczsgc3RhcnQtLSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBz
dGFydCwgdG9kbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9y
b3dzOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJv
d3M7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0Kysp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRvZG8gPCAwKSB7CisgICAgICAgICAgICB0b2Rv
ID0gLXRvZG87CisgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCisgICAg
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHBy
aXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIHcsIGgpOworCisgICAgcHJpdi0+
dmlldy53ID0gdzsKKyAgICBwcml2LT52aWV3LmggPSBoOworCisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCisgICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZp
ZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7Cit9CisKKy8vIFRPRE86IHJlbW92ZSBtZSBs
YXRlci4KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19k
YmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5h
X0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICBwcmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9k
ZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNsZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9s
ZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIsCisgICAgICAgICAgIHByaXYtPnZpZXcuY29s
cywgcHJpdi0+dmlldy5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJp
di0+bW9kZWwuY3VyLnJvd3MsCisgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5t
b2RlbC5oZWlnaHQsCisgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2Rl
bC5iYXNlLnJvdywKKyAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55LAorICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJp
di0+dmlldy5vZmZzZXQub2xkLnksCisgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5p
dGVtczsKKyAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOworICAg
IGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgeworICAgICAgICBjb25zdCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdDsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpz
dGFydCwgaXQpIHsKKyAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0
cnkueCwgaXQtPmdlb21ldHJ5LnkpOworCisgICAgICAgICAgICBpZiAoIWl0LT50aWxlKQorICAg
ICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAgICAgOyIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVsdSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxl
LT5jb2wsIGl0LT50aWxlLT5yb3cpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsK
KyAgICB9CisgICAgcHJpbnRmKCItLS1cbiIpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
TW92ZSB0b3Agcm93IGRvd24gYXMgbGFzdC4KKyAqCisgKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZp
c3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSB0b3AgdGhhdAorICogd2VudCBvdXQg
b2Ygc2NyZWVuIGlzIG5vdyBhdCBib3R0b20gYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVt
cy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRo
YW4gQGMKKyAqIHByaXYtPnZpZXcucm93cywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRo
ZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxs
LgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUg
cHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHVuc2lnbmVkIGludCBs
YXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYt
PnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAg
ICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0
aDsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCAr
IG9mZl95OworICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisKKyAgICBp
dHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBs
YXN0X3JvdzsKKworICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKyAgICAgICAgRWlu
YV9Jbmxpc3QgKippdHI7CisgICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0Owor
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19D
b29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgICAgIGludCBjID0g
MDsKKworICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKysp
CisgICAgICAgICAgICAqaXRyID0gKihpdHIgKyAxKTsKKyAgICAgICAgKml0ciA9IHRtcDsKKwor
ICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysrOworICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKHRtcCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsK
KyAgICAgICAgICAgIGMrKzsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7Cit9CisKKy8qKgorICogQGludGVy
bmFsCisgKiBNb3ZlIGJvdHRvbSByb3cgdXAgYXMgZmlyc3QuCisgKgorICogVGhlIGZpbmFsIHJl
c3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgYm90dG9tIHRoYXQK
KyAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgdG9wIGFuZCBmaWxsZWQgd2l0aCBuZXcg
bW9kZWwgaXRlbXMuCisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMg
c21hbGxlciB0aGFuIEBjCisgKiBwcml2LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJl
ZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBm
dWxsIHJlZmlsbC4KKyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byBy
ZXBlYXQgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIEV2
YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJp
di0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSAtIGNvdW50ICogdGg7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyBvZmZfeSArIChj
b3VudCAtIDEpICogdGg7CisgICAgRWluYV9Jbmxpc3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsK
KworICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAx
OworICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0ZW1zOworCisgICAgZm9yICg7IGNvdW50ID4g
MDsgY291bnQtLSkgeworICAgICAgICBFaW5hX0lubGlzdCAqKml0cjsKKyAgICAgICAgRWluYV9J
bmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKKyAgICAgICAgaW50IGMgPSAwOworCisgICAgICAgIGZvciAoaXRyID0gaXRyX3N0
YXJ0OyBpdHIgPiBpdHJfZW5kOyBpdHItLSkKKyAgICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEp
OworICAgICAgICAqaXRyID0gdG1wOworCisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godG1wLCBpdCkgeworICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAg
IG94ICs9IHR3OworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdCwgYywgMCk7CisgICAgICAgICAgICBjKys7CisgICAgICAgIH0KKyAgICAgICAg
b3kgLT0gdGg7CisgICAgfQorICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95Owor
fQorCisvKioKKyAqIEBpbnRlcm5hbAorICogTW92ZSBsZWZ0LW1vc3QgKGZpcnN0KSBjb2x1bW4g
cmlnaHQgYXMgbGFzdCAocmlnaHQtbW9zdCkuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2
aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgZmlyc3QgY29sIHRoYXQKKyAqIHdl
bnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgbGFzdCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVs
IGl0ZW1zLgorICoKKyAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxs
ZXIgdGhhbiBAYworICogcHJpdi0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxp
bmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCBy
ZWZpbGwuCisgKgorICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0
IHRoZSBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2LT52aWV3LmNvbHMgLSAxOworICAgIEV2YXNfQ29vcmQg
dHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50
aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAr
IGNvdW50ICogdHc7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnk7CisgICAgRWluYV9Jbmxpc3QgKippdHI7CisgICAgRWluYV9Jbmxpc3QgKippdHJfZW5k
OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0g
Y291bnQ7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAg
ICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2NvbCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94
OworICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGxhc3RfY29sIC0gY291bnQgKyAxOworCisg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjKyssIG94ICs9IHR3KSB7CisgICAg
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgICAgIGl0
ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgqaXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKTsKKyAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0
cik7CisKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxs
KHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisK
KyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKK30KKworLyoqCisgKiBAaW50
ZXJuYWwKKyAqIE1vdmUgcmlnaHQtbW9zdCAobGFzdCkgY29sdW1uIGxlZnQgYXMgZmlyc3QgKGxl
ZnQtbW9zdCkuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwg
YnV0IGxvZ2ljYWxseSB0aGUgbGFzdCBjb2wgdGhhdAorICogd2VudCBvdXQgb2Ygc2NyZWVuIGlz
IG5vdyBhdCBmaXJzdCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgorICoKKyAqIFRo
aXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYworICogcHJp
di0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJp
eCBzbyBpdAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCisgKgorICogQHBh
cmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgorICov
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgdW5zaWduZWQgaW50IHI7CisgICAgRXZh
c19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2
LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54IC0gY291bnQgKiB0dzsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworCisgICAg
aXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5y
b3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7CisK
KyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFdmFzX0Nv
b3JkIG94ID0geCArIChjb3VudCAtIDEpICogdHcgKyBvZmZfeDsKKyAgICAgICAgdW5zaWduZWQg
aW50IGksIGMgPSBjb3VudCAtIDE7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyssIGMtLSwgb3ggLT0gdHcpIHsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgq
aXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgICAgICAq
aXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOworCisgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgaW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKK3sK
KyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV2YXNfQ29vcmQgYmFzZV9v
eCwgb3ksIHR3LCB0aDsKKyAgICB1bnNpZ25lZCBpbnQgcjsKKworICAgIGV2YXNfb2JqZWN0X21v
dmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxl
Lnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIGJhc2Vfb3ggPSB4ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciAr
IHByaXYtPnZpZXcucm93czsKKyAgICByID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
IC09IHN0ZXBfeDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyAtPSBzdGVwX3k7CisKKyAgICBm
b3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgq
aXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgYysrOworICAgICAgICAgICAgb3gg
Kz0gdHc7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gs
IG95LCB0dywgdGg7CisKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwg
eCwgeSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmg7CisKKyAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsK
KyAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisKKyAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAg
Zm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAg
ICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIG94ICs9
IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2Uo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFdmFzX0Nvb3JkIGR4
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKKyAg
ICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9m
ZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBpbnQgc3RlcF95LCBzdGVw
X3g7CisKKyAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAor
ICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnggLyB0dzsKKyAgICBzdGVwX3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAt
IG5ld19jb2w7CisgICAgbG9uZyBuZXdfcm93ID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8g
dGg7CisgICAgc3RlcF95ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuZXdfcm93OworCisgICAg
cHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgIGV2
YXNfb2JqZWN0X21vdmUoCisgICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAorICAgICAgICBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CisKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3JlZmlsbAorICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0
ZXBfeCwgc3RlcF95KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgRXZhc19Db29yZCBkeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7CisgICAgRXZh
c19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnk7CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgaW50IHN0ZXBfeSwgc3RlcF94Owor
CisgICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKKyAgICAg
ICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkpOworCisgICAgaWYgKCFkeCAmJiAhZHkpCisgICAgICAgIHJldHVybjsK
KworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKKworICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3Owor
ICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKKyAgICBsb25nIG5l
d19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0aDsKKyAgICBzdGVwX3kgPSBwcml2
LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAg
ICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnggKyBwcml2LT52aWV3LngsCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJp
di0+dmlldy55KTsKKworICAgIGlmICgoc3RlcF94IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZp
ZXcuY29scykKKyAgICAgICAgfHwgKHN0ZXBfeCA+IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcu
Y29scykKKyAgICAgICAgfHwgKHN0ZXBfeSA8IDAgJiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJv
d3MpCisgICAgICAgIHx8IChzdGVwX3kgPiAwICYmIHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3Mp
KSB7CisKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICog
dHc7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRo
OworCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAorICAgICAg
ICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
Kz0gZHg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5OworCisgICAgaWYgKHN0
ZXBfeSA8IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAo
cHJpdiwgeCwgeSwgLXN0ZXBfeSk7CisgICAgZWxzZSBpZiAoc3RlcF95ID4gMCkKKyAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBf
eSk7CisKKyAgICBpZiAoc3RlcF94IDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHksIC1zdGVwX3gpOworICAgIGVsc2UgaWYgKHN0
ZXBfeCA+IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmln
aHQocHJpdiwgeCwgeSwgc3RlcF94KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOworICAgIHByaXYtPnZp
ZXcueCA9IHg7CisgICAgcHJpdi0+dmlldy55ID0geTsKKyAgICBldmFzX29iamVjdF9tb3ZlKAor
ICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
KyBwcml2LT52aWV3LnkpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sK
KyAgICBFaW5hX0lubGlzdCAqaXQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXRlbTsKKyAgICBpbnQgaSwgajsKKworICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJv
d3M7IGkrKykgeworICAgICAgICBpdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CisgICAgICAgIGog
PSAwOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZShFdmFzX09iamVjdCAqbykKK3sKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisK
KyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgJngsICZ5LCAmdywgJmgpOworICAgIERC
Rygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgbywgeCwgeSwgdywgaCk7CisKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlO
QV9GQUxTRTsKKworICAgIGV3a190aWxlX21hdHJpeF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4
KTsKKworICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2Rl
bCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisKKyAgICAgICAgY29scyA9
IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLncgKyAxOworICAgICAgICByb3dz
ID0gcHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmggKyAxOworCisgICAgICAg
IHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+bW9kZWwuY3VyLmNvbHM7CisgICAgICAgIHBy
aXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VyLnJvd3M7CisgICAgICAgIHByaXYt
Pm1vZGVsLmN1ci5jb2xzID0gY29sczsKKyAgICAgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSBy
b3dzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLmNvbHMgPiBjb2xzKQorICAgICAgICAg
ICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwu
b2xkLnJvd3MgPiByb3dzKQorICAgICAgICAgICAgcm93cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dz
OworICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29s
cywgcm93cyk7CisgICAgfQorCisgICAgaWYgKHByaXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52
aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0geSkpIHsKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MocHJpdiwgeCwgeSk7CisgICAgICAgIHBy
aXYtPmNoYW5nZWQucG9zID0gRUlOQV9GQUxTRTsKKyAgICB9CisgICAgaWYgKHByaXYtPmNoYW5n
ZWQub2Zmc2V0KSB7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGVfb2Zmc2V0KHByaXYsIHgsIHkpOworICAgICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9
IEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkgeworICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwg
dywgaCk7CisgICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CisgICAgfQor
CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7
CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7CisgICAgICAgIHJlY3QueCA9IDA7CisgICAg
ICAgIHJlY3QueSA9IDA7CisgICAgICAgIHJlY3QudyA9IHByaXYtPm1vZGVsLndpZHRoOworICAg
ICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWlnaHQ7CisgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4
X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC5jdXIuY29scywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1v
ZGVsLmN1ci5yb3dzKTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7
CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2
LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UocHJpdik7CisKKyAgICAg
ICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBieQor
ICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAqLworICAgICAgICBjb25z
dCBFaW5hX1JlY3RhbmdsZSByID0KKyAgICAgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lk
dGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OworICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRl
KHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpdi0+dmlldy50aWxlLnpvb20pOworICAgIH0KKworICAgIGV3a190aWxlX21hdHJpeF90aGF3
KHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlc19wcm9jZXNzKHByaXYpOworCisgICAgaWYgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+
IDAKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50
aWxlLncKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID4gMAorICAgICAgICB8
fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0gLSBwcml2LT52aWV3LnRpbGUuaCkKKyAgICAg
ICAgRVJSKCJpbmNvcnJlY3QgYmFzZSBvZmZzZXQgJSs0ZCwlKzRkLCB0aWxlPSVkeCVkLCBjdXI9
JSs0ZCwlKzRkXG4iLAorICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnksCisgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUudywgcHJp
di0+dmlldy50aWxlLmgsCisgICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkpOworCit9CisKK0V2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9hZGQoRXZhcyAqZSkKK3sKKyAgICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQg
PSAwOworCisgICAgaWYgKF9ld2tfdGlsZWRfbG9nX2RvbSA8IDApCisgICAgICAgIF9ld2tfdGls
ZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFpbl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmUiLCAwKTsKKworICAgIGlmICghc21hcnQpIHsKKyAgICAgICAgc3RhdGljIEV2YXNfU21h
cnRfQ2xhc3Mgc2MgPQorICAgICAgICAgICAgRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVS
U0lPTigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiKTsKKworICAgICAgICBldmFzX29iamVjdF9z
bWFydF9jbGlwcGVkX3NtYXJ0X3NldCgmc2MpOworICAgICAgICBfcGFyZW50X3NjID0gc2M7CisK
KyAgICAgICAgc2MuYWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZDsKKyAg
ICAgICAgc2MuZGVsID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbDsKKyAgICAg
ICAgc2MucmVzaXplID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZTsKKyAg
ICAgICAgc2MubW92ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlOworICAg
ICAgICBzYy5jYWxjdWxhdGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3Vs
YXRlOworICAgICAgICBzYy5tZW1iZXJfYWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X21lbWJlcl9hZGQ7CisgICAgICAgIHNjLm1lbWJlcl9kZWwgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbDsKKworICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRf
Y2xhc3NfbmV3KCZzYyk7CisgICAgfQorCisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChlLCBzbWFydCk7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2Ni
X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxl
ICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSksIGNvbnN0IHZvaWQgKmRhdGEpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2IpOworICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOworICAgIHByaXYtPnJlbmRlci5jYiA9IGNiOworICAgIHByaXYtPnJl
bmRlci5kYXRhID0gKHZvaWQqKWRhdGE7Cit9CisKK0V3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIDApOworICAg
IHJldHVybiBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hl
X3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAoZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCisgICAgICAg
IHJldHVybjsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3Jl
YXRlKHByaXYsIHR1Yyk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgLyog
VE9ETzogY2hlY2sgb2Zmc2V0IGdvIG91dCBvZiBib3VuZHMsIGNsYW1wICovCisgICAgaWYgKHBy
aXYtPnJlbmRlci5kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCA9IHg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
PSB5OworCisgICAgcHJpdi0+Y2hhbmdlZC5vZmZzZXQgPSBFSU5BX1RSVUU7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CisKKyAgICByZXR1cm4gRUlOQV9UUlVF
OworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zm
c2V0X3NldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgREJHKCJvPSVwLCB4PSVkLCB5PSVkIiwgbywgeCwgeSk7CisKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoeCA9PSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCAmJiB5ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQorICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworCisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
Y3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKHByaXYsIHgsIHkpOworfQorCitFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSkKK3sKKyAgICBEQkcoIm89JXAs
IGR4PSVkLCBkeT0lZCIsIG8sIGR4LCBkeSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoIWR4ICYmICFkeSkKKyAgICAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKKworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbAorICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnggKyBkeCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7Cit9CisKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5
KQoreworICAgICpvZmZ4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgKm9mZnkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueTsKKworICAgIGlmIChmYWJzZihwcml2LT52aWV3LnRpbGUu
em9vbSAtICp6b29tKSA8IFpPT01fU1RFUF9NSU4pIHsKKyAgICAgICAgREJHKCJpZ25vcmVkIGFz
IHpvb20gZGlmZmVyZW5jZSBpcyA8ICVmOiAlZiIsCisgICAgICAgICAgICAoZG91YmxlKVpPT01f
U1RFUF9NSU4sIGZhYnNmKHByaXYtPnZpZXcudGlsZS56b29tIC0gKnpvb20pKTsKKyAgICAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOworICAgIEV2YXNfQ29vcmQgdHcsIHRoOwor
CisgICAgKnpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncsICp6b29tKTsKKwor
ICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsK
KworICAgIGZsb2F0IHNjYWxlID0gKnpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKKworICAg
IHByaXYtPnZpZXcudGlsZS56b29tID0gKnpvb207CisgICAgLy8gdG9kbzogY2hlY2sgY3ggWzAs
IHddLi4uCisgICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OworICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnkgPSBjeTsKKworCisgICAgaWYgKCFwcml2LT52
aWV3LncgfHwgIXByaXYtPnZpZXcuaCkgeworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggPSAwOworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOworICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5k
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworCisgICAgRXZhc19Db29y
ZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Cisg
ICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kp
ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBieCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCAtIGN4KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgYnkgPSBjeSArIChwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgLSBjeSkgKiBzY2FsZTsKKworICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lk
dGggPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVp
Z2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CisKKyAgICBpZiAobW9kZWxfd2lkdGgg
PCBwcml2LT52aWV3LncgfHwgbmV3X3ggPj0gMCkKKyAgICAgICAgbmV3X3ggPSAwOworICAgIGVs
c2UgaWYgKC1uZXdfeCArIHByaXYtPnZpZXcudyA+PSBtb2RlbF93aWR0aCkKKyAgICAgICAgbmV3
X3ggPSAtbW9kZWxfd2lkdGggKyBwcml2LT52aWV3Lnc7CisKKyAgICBpZiAobW9kZWxfaGVpZ2h0
IDwgcHJpdi0+dmlldy5oIHx8IG5ld195ID49IDApCisgICAgICAgIG5ld195ID0gMDsKKyAgICBl
bHNlIGlmICgtbmV3X3kgKyBwcml2LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0KQorICAgICAgICBu
ZXdfeSA9IC1tb2RlbF9oZWlnaHQgKyBwcml2LT52aWV3Lmg7CisKKyAgICBieCA9IG5ld194ICUg
dHc7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtIG5ld194IC8gdHc7CisgICAgYnkgPSBu
ZXdfeSAlIHRoOworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLSBuZXdfeSAvIHRoOworCisg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJp
dik7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OworICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0g
Yng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisKKyAgICBwcml2LT52aWV3
Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIHByaXYtPnZpZXcu
b2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgKm9mZnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
OworCisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCisgICAgICAgIG5ld195ICsgcHJpdi0+
dmlldy55KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhw
cml2KTsKKworICAgIEV2YXNfQ29vcmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBw
cml2LT52aWV3Lnk7CisgICAgRXZhc19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAg
ICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9yICg7IGl0ciA8IGl0
cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OworICAgICAg
ICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KGxzdCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21v
dmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9yZXNpemUoaXQsIHR3LCB0aCk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgfQor
ICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitF
aW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QgKm8s
IGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpv
ZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQoreworICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChk
b3VibGUpKnpvb20pOworCisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlO
QV9GQUxTRSk7CisKKyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0
X2ludGVybmFsKHByaXYsIHpvb20sIGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Cit9CisKK0VpbmFfQm9v
bCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBm
bG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQoreworICAgIERCRygibz0l
cCwgem9vbT0lZiIsIG8sIChkb3VibGUpem9vbSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYt
PnZpZXcuaCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgRWluYV9Jbmxpc3QgKipp
dHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAg
ICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsK
KworICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOworCisgICAg
dHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUudywgc2NhbGUpOworICAgIHNj
YWxlID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGlsZS53KTsKKyAgICB0aCA9
IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCBzY2FsZSk7CisgICAgem9vbSA9
IHNjYWxlICogcHJpdi0+dmlldy50aWxlLnpvb207CisKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3dp
ZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX2hl
aWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOworCisgICAgZXZhc19vYmplY3RfcmVz
aXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOwor
CisgICAgaW50IHZyb3dzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSAr
IDE7CisgICAgaW50IHZjb2xzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3
KSArIDE7CisgICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC0gY3gpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBieCA9IG5ld194
ICUgdHc7CisgICAgRXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7CisgICAgdW5zaWduZWQgbG9u
ZyBiYXNlX3JvdyA9IC1uZXdfeSAvIHRoOworICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAt
bmV3X3ggLyB0dzsKKworICAgIGlmIChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8
fCBiYXNlX2NvbCAhPSBwcml2LT5tb2RlbC5iYXNlLmNvbCkgeworICAgICAgICBwcml2LT5tb2Rl
bC5iYXNlLnJvdyA9IGJhc2Vfcm93OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJh
c2VfY29sOworICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7CisgICAgfQorCisgICAgaWYgKHZy
b3dzID4gcHJpdi0+dmlldy5yb3dzIHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQorICAgICAg
ICByZWNhbGMgPSBFSU5BX1RSVUU7CisKKyAgICBpZiAocmVjYWxjKSB7CisgICAgICAgIEV2YXNf
Q29vcmQgdywgaDsKKyAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIDAsIDAsICZ3
LCAmaCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJz
KHByaXYsIHcsIGgsIHR3LCB0aCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9m
aWxsX3JlbmRlcmVycyhwcml2KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Vw
ZGF0ZXNfcHJvY2Vzcyhwcml2KTsKKyAgICB9CisKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBi
eCArIHByaXYtPnZpZXcueDsKKyAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7
CisKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAg
ICAgICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAg
IG5ld195ICsgcHJpdi0+dmlldy55KTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Cisg
ICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKworICAgIGZvciAoOyBpdHIgPCBp
dHJfZW5kOyBpdHIrKykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAg
ICAgRWluYV9Jbmxpc3QgKmxzdCA9ICppdHI7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFD
SChsc3QsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9t
b3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIH0K
KyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwor
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55OworICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lng7CisgICAgRXZhc19Db29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBF
dmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZhc19Db29yZCB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworCisgICAgaWYgKC1uZXdfeCA+IHcpIHsKKyAgICAgICAgbmV3X3gg
PSAtdzsKKyAgICAgICAgYnggPSBuZXdfeCAlIHR3OworICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbCA9IC1uZXdfeCAvIHR3OworICAgIH0KKworICAgIGlmICgtbmV3X3kgPiBoKSB7CisgICAg
ICAgIG5ld195ID0gLWg7CisgICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICB9CisKKyAgICBpZiAoYnggPj0gMCB8
fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53KSB7CisgICAgICAgIGJ4ID0gbmV3X3ggJSB0
dzsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKKyAgICB9CisK
KyAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKSB7CisgICAg
ICAgIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3
X3kgLyB0aDsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194Owor
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnggPSBuZXdfeDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195Owor
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJ4OworICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSA9IGJ5OworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgICAgICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAorICAgICAgICAg
ICAgICAgICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOworCisgICAgRXZhc19Db29yZCBveSA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3Jk
IGJhc2Vfb3ggPSBwcml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisKKyAg
ICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3
LnJvd3M7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXZh
c19Db29yZCBveCA9IGJhc2Vfb3g7CisgICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwor
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgeworICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKKyAgICAg
ICAgICAgIG94ICs9IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30K
Kwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3Nl
dChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJf
ZW5kOworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsg
cHJpdi0+dmlldy5yb3dzOworICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3Nj
YWxlID0gc21vb3RoX3NjYWxlOworCisgICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsK
KyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpCisgICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAg
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3Nl
dAorICAgICAgICAgICAgICAgICAgICAoaXQsIHNtb290aF9zY2FsZSk7CisgICAgfQorfQorCitF
aW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworCisgICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxl
ZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICByZXR1cm4gZXdrX3RpbGVfbWF0
cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsIHVwZGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUuem9vbSk7Cit9CisKK3ZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8s
IHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0
YSkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBwcml2LT5w
cm9jZXNzLnByZV9jYiA9IGNiOworICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCop
ZGF0YTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Nf
cG9zdF9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnBy
ZV9kYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0g
Y2I7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKK30KKwordm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8p
Cit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKK30KKwordm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgZXdrX3RpbGVfbWF0cml4X3Vw
ZGF0ZXNfY2xlYXIocHJpdi0+bW9kZWwubWF0cml4KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9jb250ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYpOworCisgICAgaWYgKHdpZHRoID09IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9
PSBwcml2LT5tb2RlbC5oZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPm1vZGVs
LndpZHRoID0gd2lkdGg7CisgICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHBy
aXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7CisKKyAgICBEQkcoIndpZHRoLGhlaWdodD0l
ZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hh
bmdlZChwcml2KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91
cGRhdGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCit7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVu
ZGVyLmRpc2FibGVkKQorICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKK30K
Kwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKK3sK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YyA9IDA7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IDA7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwor
ICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IDA7CisgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1ci5y
b3dzID0gMTsKKyAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwu
b2xkLnJvd3MgPSAwOworICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUs
IFNUQVRVUyBCRUZPUkUgREVMRVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKKyAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2KTsKKyNlbmRpZgorCisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2KTsKKyAgICB0dWMgPSBl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOworCisjaWZkZWYgREVCVUdfTUVNX0xF
QUtTCisgICAgcHJpbnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJF
Q1JFQVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
bWVtX2RiZyhwcml2KTsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK3sKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFaW5h
X1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOworICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8g
KmluZm87CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWM7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmg7CisgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9v
bSk7CisKKyAgICBpZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5
LCB3LCBoLCB0dywgdGgpKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xp
Y2VyIGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwKKyAgICAgICAgICAgIHgsIHksIHcsIGgs
IHR3LCB0aCk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIHdoaWxl
IChlaW5hX3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgbG9uZyBjID0gaW5mby0+Y29sOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBsb25nIHIgPSBpbmZvLT5yb3c7CisgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJpdiwgYywgciwgem9vbSwgUFJFX1JFTkRFUl9Q
UklPUklUWV9MT1cpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKKworICAgIHR1
YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpv
b20pOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5z
aWduZWQgaW50IG4sIGZsb2F0IHpvb20pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
bywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9y
b3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKKyAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YzsKKworICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBw
cml2LT52aWV3LnJvd3M9JWx1IiwKKyAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBu
LCBwcml2LT52aWV3LnJvd3MpOworICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVsLmJh
c2Uucm93IC0gbjsKKyAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNvbCAt
IG47CisgICAgZW5kX3JvdyA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1ci5yb3dzIC0gMSwKKyAg
ICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5yb3dzICsg
biAtIDEpOworICAgIGVuZF9jb2wgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIuY29scyAtIDEs
CisgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYtPnZpZXcuY29s
cyArIG4gLSAxKTsKKworICAgIElORigic3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0
X2NvbD0lbHUsIGVuZF9jb2w9JWx1IiwKKyAgICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3Rh
cnRfY29sLCBlbmRfY29sKTsKKworICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50
aWxlLncsIHpvb20pOworCisgICAgZm9yIChpID0gc3RhcnRfcm93OyBpIDw9IGVuZF9yb3c7IGkr
KykKKyAgICAgICAgZm9yIChqID0gc3RhcnRfY29sOyBqIDw9IGVuZF9jb2w7IGorKykKKyAgICAg
ICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9h
ZGQocHJpdiwgaiwgaSwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cpKQorICAgICAgICAg
ICAgICAgIGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKKworc3RhcnRfcHJvY2Vzc2luZzoKKyAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwor
CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKKyAgICBoID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0laRV9B
VF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCB6b29tKTsKKyAgICB3ID0gKGVuZF9jb2wgLSBzdGFy
dF9jb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsK
KyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywKKyAgICAgICAgICAgIHN0
YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKSwKKyAg
ICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5o
LCB6b29tKSwgdywgaCwgem9vbSk7CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpv
KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9jbGVhcihwcml2KTsKKworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHByaXYpOworfQorCitFaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKK3sKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKKyAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIocHJpdik7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCmluZGV4IDQ2YWFhODM5MTIyZWU1
M2JhMTdkNTAwZjJlODA5ZjA5YjM4MThiZjIuLjMwMTAzZWQxZDMwZDY5ZDFiZjU1MjBkNDJlZjQ5
ZjczNThjNjRjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZS5oCkBAIC00MiwxMCArNDIsNiBAQAogI2RlZmluZSBUSUxFX1pPT01fQVRfU0la
RShTSVpFLCBPUklHX1RJTEUpICgoZmxvYXQpKFNJWkUpIC8gKGZsb2F0KShPUklHX1RJTEUpKQog
I2RlZmluZSBST1VOREVEX1pPT00oU0laRSwgWk9PTSkgKChmbG9hdCkoU0laRSkgLyAoZmxvYXQp
KCgoaW50KXJvdW5kZigoU0laRSkgLyAoWk9PTSkpKSkpCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwot
ZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxjYWly
by5oPgogCkBAIC0xMjMsNyArMTE5LDQgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogbyk7CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7CiBFaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7Ci0j
aWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgogI2VuZGlmIC8vIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0
cml4LmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmY5Yzg0NDMwNTgyNzY5MjlkOTgwMjJlYzFjZGU2NzVj
MTQ1ZTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKKysrIC9kZXYvbnVsbApAQCAt
MSw2NDggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZXdrX3RpbGVkX21h
dHJpeC5oIgotCi0jZGVmaW5lIF9HTlVfU09VUkNFCi0jaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuaCIKLSNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVp
bmEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVk
ZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCByZW1vdmUgbWUgbGF0ZXIKLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RydWN0IF9Fd2tfVGls
ZV9NYXRyaXggewotICAgIEVpbmFfTWF0cml4c3BhcnNlICptYXRyaXg7Ci0gICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWM7Ci0gICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKLSAgICBzdHJ1
Y3QgewotICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBF
aW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKLSAgICAgICAgdm9pZCAqZGF0YTsKLSAgICB9IHJlbmRl
cjsKLSAgICB1bnNpZ25lZCBpbnQgZnJvemVuOwotICAgIEVpbmFfTGlzdCAqdXBkYXRlczsKLSAg
ICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7Ci0gICAgfSB0aWxlOwotI2lmZGVm
IERFQlVHX01FTV9MRUFLUwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBhbGxvY2F0ZWQsIGZyZWVkOwotICAgICAgICB9IHRpbGVzLCBieXRlczsK
LSAgICB9IHN0YXRzOwotI2VuZGlmCi19OwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1zdGF0
aWMgdWludDY0X3QgdGlsZXNfbGVha2VkID0gMDsKLXN0YXRpYyB1aW50NjRfdCBieXRlc19sZWFr
ZWQgPSAwOwotI2VuZGlmCi0KLS8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyByZXNpemVk
IG9yIGZyZWVkICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lk
ICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKLXsKLSAgICBFd2tfVGlsZV9NYXRyaXggKnRt
ID0gdXNlcl9kYXRhOwotICAgIEV3a19UaWxlICp0ID0gY2VsbF9kYXRhOwotCi0gICAgaWYgKCF0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRt
LT50dWMpOwotCi0gICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0g
ICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7Ci0K
LSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgRVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2
aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCi0gICAgICAgICAgICBF
UlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIsIHQsIHRtLT50dWMp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIERCRygidGlsZSBjZWxsIGRvZXMgbm90IGV4
aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0KTsKLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAg
ICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKLSAgICAgICAgICAg
IHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOwotI2VuZGlmCi0gICAgICAgICAgICBld2tfdGlsZV9m
cmVlKHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Ro
YXcodG0tPnR1Yyk7Ci19Ci0KLS8qIGNhbGxlZCB3aGVuIGNhY2hlIG9mIHVudXNlZCB0aWxlIGlz
IGZsdXNoZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0KQotewotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBkYXRhOwot
ICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0gCi0gICAgaWYgKCFlaW5hX21hdHJp
eHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxsKSkg
ewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRy
aXg/IExlYWtpbmcuLi4iLCB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
Y2VsbCkgewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRo
ZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBk
YXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQpOwotCi0gICAgLyogc2V0IHRv
IG51bGwgdG8gYXZvaWQgZG91YmxlIGZyZWUgKi8KLSAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxs
X2RhdGFfcmVwbGFjZShjZWxsLCBOVUxMLCBOVUxMKTsKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9j
ZWxsX2NsZWFyKGNlbGwpOwotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoISF0LT52aXNpYmxlKSkg
ewotICAgICAgICBFUlIoImNhY2hlIG9mIHVudXNlZCB0aWxlcyByZXF1ZXN0aW5nIGRlbGV0aW9u
IG9mIHVzZWQgdGlsZSAlcD8gIgotICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRtLT5zdGF0
cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKLSAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsK
LSNlbmRpZgotCi0gICAgZXdrX3RpbGVfZnJlZSh0KTsKLX0KLQotLyoqCi0gKiBDcmVhdGVzIGEg
bmV3IG1hdHJpeCBvZiB0aWxlcy4KLSAqCi0gKiBUaGUgdGlsZSBtYXRyaXggaXMgcmVzcG9uc2li
bGUgZm9yIGtlZXBpbmcgdGlsZXMgYXJvdW5kIGFuZAotICogcHJvdmlkaW5nIGZhc3QgYWNjZXNz
IHRvIHRoZW0uIE9uZSBjYW4gdXNlIGl0IHRvIHJldHJpZXZlIG5ldyBvcgotICogZXhpc3Rpbmcg
dGlsZXMgYW5kIGdpdmUgdGhlbSBiYWNrLCBhbGxvd2luZyB0aGVtIHRvIGJlCi0gKiBmcmVlZC9y
ZXBsYWNlZCBieSB0aGUgY2FjaGUuCi0gKgotICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMgb3IgQGMgTlVMTCB0byBjcmVhdGUgb25lCi0gKiAgICAgICAgYXV0b21hdGljYWxseS4K
LSAqIEBwYXJhbSBjb2xzIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCi0gKiBAcGFy
YW0gcm93cyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LgotICogQHBhcmFtIGNzcGFjZSB0
aGUgY29sb3Igc3BhY2UgdXNlZCB0byBjcmVhdGUgdGlsZXMgaW4gdGhpcyBtYXRyaXguCi0gKiBA
cGFyYW0gcmVuZGVyX2NiIGZ1bmN0aW9uIHVzZWQgdG8gcmVuZGVyIGdpdmVuIHRpbGUgdXBkYXRl
LgotICogQHBhcmFtIHJlbmRlcl9kYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNrIHRvIEBhIHJlbmRl
cl9jYi4KLSAqCi0gKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBpbnN0YW5jZSBvbiBzdWNjZXNz
LCBAYyBOVUxMIG9uIGZhaWx1cmUuCi0gKi8KLUV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0
cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjb2xzLCB1
bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UsIHZvaWQgKCpyZW5kZXJf
Y2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRl
KSwgY29uc3Qgdm9pZCAqcmVuZGVyX2RhdGEpCi17Ci0gICAgRXdrX1RpbGVfTWF0cml4ICp0bTsK
LQotICAgIENBTExPQ19PUl9PT01fUkVUKHRtLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSwgTlVM
TCk7Ci0KLSAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3MsIGNvbHMs
IF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7Ci0gICAgaWYgKCF0bS0+bWF0cml4KSB7
Ci0gICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4LiIpOwotICAgICAg
ICBmcmVlKHRtKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKHR1YykK
LSAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodHVjKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5NjAw
MDApOwotICAgICAgICBpZiAoIXRtLT50dWMpIHsKLSAgICAgICAgICAgIEVSUigibm8gY2FjaGUg
b2YgdW51c2VkIHRpbGUhIik7Ci0gICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRt
LT5tYXRyaXgpOwotICAgICAgICAgICAgZnJlZSh0bSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVM
TDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7Ci0gICAgdG0t
PnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKLSAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKXJl
bmRlcl9kYXRhOwotICAgIHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAgICB0bS0+dGls
ZS5oID0gREVGQVVMVF9USUxFX0g7Ci0KLSAgICByZXR1cm4gdG07Ci19Ci0KLS8qKgotICogRGVz
dHJveXMgdGlsZXMgbWF0cml4LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KLSAqCi0gKiBUaGUg
Y2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgotICov
Ci12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0jaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwotI2VuZGlmCi0K
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKLQotICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0t
Pm1hdHJpeCk7Ci0KLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodG0tPnR1Yyk7Ci0KLSNpZmRlZiBERUJVR19N
RU1fTEVBS1MKLSAgICB0aWxlcyA9IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQ7Ci0gICAgYnl0ZXMgPSB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLmJ5dGVzLmZyZWVkOwotCi0gICAgdGlsZXNfbGVha2VkICs9IHRpbGVzOwotICAg
IGJ5dGVzX2xlYWtlZCArPSBieXRlczsKLQotICAgIGlmICh0aWxlcyB8fCBieXRlcykKLSAgICAg
ICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6
JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSIsCi0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsIHRpbGVzLAotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7Ci0gICAgZWxzZSBpZiAodGlsZXNf
bGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKLSAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5v
IGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCi0gICAgICAg
ICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwKLSAgICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKLSAgICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKLSAg
ICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKLSAgICBlbHNlCi0gICAgICAg
IElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdIiwKLSAgICAg
ICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwK
LSAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCk7Ci0jZW5kaWYKLQotICAgIGZyZWUodG0pOwotfQotCi0vKioKLSAqIFJlc2l6ZSBtYXRy
aXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCi0gKi8KLXZvaWQgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
bSk7Ci0gICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQodG0tPm1hdHJpeCwgcm93cywgY29s
cyk7Ci19Ci0KLS8qKgotICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgaW4gdXNlIGJ5
IGdpdmVuIG1hdHJpeC4KLSAqCi0gKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hl
LgotICovCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCBOVUxMKTsKLSAgICByZXR1cm4gdG0tPnR1YzsKLX0KLQotLyoq
Ci0gKiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4K
LSAqCi0gKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhl
IGNhY2hlLgotICoKLSAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBiYWNrIHVzaW5nCi0g
KiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4gSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBp
ZiBpdCBleGlzdHMsCi0gKiB0aGVuIHVzZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlz
dHMoKS4KLSAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxlIGZyb20u
Ci0gKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHJvdyB0aGUgcm93
IG51bWJlci4KLSAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KLSAqCi0gKiBA
cmV0dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIE5VTEwgaWYgbm9uZSBpcyBmb3VuZC4gSWYg
dGhlIHRpbGUKLSAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2lsbCBiZSBA
YiByZW1vdmVkICh0aHVzCi0gKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9uZSBzaG91
bGQgZ2l2ZSBpdCBiYWNrIHdpdGgKLSAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0
KCkgYWZ0ZXJ3YXJkcy4KLSAqCi0gKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dl
dCgpCi0gKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1Rp
bGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9h
dCB6b29tKQotewotICAgIEV3a19UaWxlICp0OwotICAgIHQgPSBlaW5hX21hdHJpeHNwYXJzZV9k
YXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOwotICAgIGlmICghdCkKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAodC0+em9vbSA9PSB6b29tKQotICAgICAgICBnb3RvIGVu
ZDsKLQotICBlbmQ6Ci0gICAgaWYgKCF0LT52aXNpYmxlKSB7Ci0gICAgICAgIGlmICghZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQotICAgICAgICAgICAgV1JOKCJF
d2tfVGlsZSB3YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdDsKLX0KLQotLyoqCi0gKiBDaGVja3MgaWYgdGlsZSBvZiBnaXZlbiB6b29tIGV4
aXN0cyBpbiBtYXRyaXguCi0gKgotICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBjaGVj
ayB0aWxlIGV4aXN0ZW5jZS4KLSAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCi0gKiBA
cGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgotICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20g
dG8gcXVlcnkuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZm91bmQsIEBjIEVJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3Rf
Z2V0KCkKLSAqLwotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhF
d2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cs
IGZsb2F0IHpvb20pCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0KLSAgICB0ID0gZWluYV9tYXRyaXhz
cGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKLSAgICBpZiAoIXQpCi0g
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQot
LyoqCi0gKiBDcmVhdGUgYSBuZXcgdGlsZSBhdCBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbSBsZXZl
bCBpbiB0aGUgbWF0cml4LgotICoKLSAqIFRoZSBuZXdseSBjcmVhdGVkIHRpbGUgaXMgY29uc2lk
ZXJlZCBpbiB1c2UgYW5kIG5vdCBwdXQgaW50byBjYWNoZQotICogb2YgdW51c2VkIHRpbGVzLiBB
ZnRlciBpdCBpcyB1c2VkIG9uZSBzaG91bGQgY2FsbAotICogZXdrX3RpbGVfbWF0cml4X3RpbGVf
cHV0KCkgdG8gZ2l2ZSBpdCBiYWNrIHRvIG1hdHJpeC4KLSAqCi0gKiBAcGFyYW0gdG0gdGhlIHRp
bGUgbWF0cml4IHRvIGNyZWF0ZSB0aWxlIG9uLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51
bWJlci4KLSAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCi0gKiBAcGFyYW0gem9vbSB0aGUg
bGV2ZWwgdG8gY3JlYXRlIHRpbGUsIHVzZWQgdG8gZGV0ZXJtaW5lIHRpbGUgc2l6ZS4KLSAqLwot
RXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBF
dmFzICpldmFzLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpv
b20pCi17Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0KLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIE5VTEwpOwotICAgIEVJTkFfU0FGRVRZ
X09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgTlVMTCk7Ci0KLSAgICB0dyA9IHRtLT50
aWxlLnc7Ci0gICAgdGggPSB0bS0+dGlsZS5oOwotCi0gICAgdCA9IGV3a190aWxlX25ldyhldmFz
LCB0dywgdGgsIHpvb20sIHRtLT5jc3BhY2UpOwotICAgIGlmICghdCkgewotICAgICAgICBFUlIo
ImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVkIiwgdHcsIHRoLCAo
ZG91YmxlKXpvb20sIHRtLT5jc3BhY2UpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3NldCh0bS0+bWF0cml4LCByb3cs
IGNvbCwgdCkpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0IG1hdHJpeCBjZWxsLCByb3cv
Y29sIG91dHNpZGUgbWF0cml4IGRpbWVuc2lvbnMhIik7Ci0gICAgICAgIGV3a190aWxlX2ZyZWUo
dCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQtPmNvbCA9IGNvbDsKLSAg
ICB0LT5yb3cgPSByb3c7Ci0gICAgdC0+eCA9IGNvbCAqIHR3OwotICAgIHQtPnkgPSByb3cgKiB0
aDsKLQotICAgIGNhaXJvX3RyYW5zbGF0ZSh0LT5jYWlybywgLXQtPngsIC10LT55KTsKLQotICAg
IHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwotICAgIHRtLT51cGRhdGVzID0gZWlu
YV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MK
LSAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwotICAgIHRtLT5zdGF0
cy50aWxlcy5hbGxvY2F0ZWQrKzsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLS8qKgot
ICogR2l2ZXMgYmFjayB0aGUgdGlsZSB0byB0aGUgdGlsZSBtYXRyaXguCi0gKgotICogVGhpcyB3
aWxsIHJlcG9ydCB0aGUgdGlsZSBpcyBubyBsb25nZXIgaW4gdXNlIGJ5IHRoZSBvbmUgdGhhdCBn
b3QKLSAqIGl0IHdpdGggZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkuCi0gKgotICog
QW55IHByZXZpb3VzIHJlZmVyZW5jZSB0byB0aWxlIHNob3VsZCBiZSByZWxlYXNlZAotICogKGV3
a190aWxlX2hpZGUoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAot
ICogYmUga25vd24gaWYgaXQgaXMgbm90IHZpc2liaWxlIGFueW1vcmUgYW5kIHRodXMgY2FuIGJl
IHB1dCBpbnRvIHRoZQotICogdW51c2VkIGNhY2hlLgotICoKLSAqIEBwYXJhbSB0bSB0aGUgdGls
ZSBtYXRyaXggdG8gcmV0dXJuIHRpbGUgdG8uCi0gKiBAcGFyYW0gdCB0aGUgdGlsZSBpbnN0YW5j
ZSB0byByZXR1cm4sIG11c3QgQGIgbm90IGJlIEBjIE5VTEwuCi0gKiBAcGFyYW0gbGFzdF91c2Vk
IHRpbWUgaW4gd2hpY2ggdGlsZSB3YXMgbGFzdCB1c2VkLgotICoKLSAqIEByZXR1cm4gI0VJTkFf
VFJVRSBvbiBzdWNjZXNzIG9yICNFSU5BX0ZBTFNFIG9uIGZhaWx1cmUuCi0gKi8KLUVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUg
KnQsIGRvdWJsZSBsYXN0X3VzZWQpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dCwgRUlOQV9GQUxTRSk7Ci0KLSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKLQotICAgIHQtPnN0YXRzLmxhc3RfdXNlZCA9IGxhc3RfdXNlZDsKLSAgICByZXR1
cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KHRtLT50dWMsIHQsIF9ld2tfdGlsZV9t
YXRyaXhfdGlsZV9mcmVlLCB0bSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVk
IGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQotewotICAgIEV3a19UaWxl
ICp0OwotICAgIEVpbmFfUmVjdGFuZ2xlIG5ld191cGRhdGU7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKLQotICAgIG1lbWNweSgmbmV3X3VwZGF0
ZSwgdXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkpOwotICAgIC8vIGNoZWNrIHVwZGF0ZSBpcyB2
YWxpZCwgb3RoZXJ3aXNlIHJldHVybiBFSU5BX0ZBTFNFCi0gICAgaWYgKHVwZGF0ZS0+eCA8IDAg
fHwgdXBkYXRlLT55IDwgMCB8fCB1cGRhdGUtPncgPD0gMCB8fCB1cGRhdGUtPmggPD0gMCkgewot
ICAgICAgICBFUlIoImludmFsaWQgdXBkYXRlIHJlZ2lvbi4iKTsKLSAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0g
dG0tPnRpbGUudykKLSAgICAgICAgbmV3X3VwZGF0ZS53ID0gdG0tPnRpbGUudyAtIHVwZGF0ZS0+
eDsKLSAgICBpZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0gMSA+PSB0bS0+dGlsZS5oKQotICAg
ICAgICBuZXdfdXBkYXRlLmggPSB0bS0+dGlsZS5oIC0gdXBkYXRlLT55OwotCi0gICAgdCA9IGVp
bmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7Ci0KLSAg
ICBpZiAoIXQpCi0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBpZiAoIXQtPnVwZGF0
ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFf
bGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQs
ICZuZXdfdXBkYXRlKTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLUVpbmFfQm9vbCBl
d2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNp
Z25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0g
ICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOwotCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJz
ZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsICZjZWxsKSkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybiBFSU5BX1RS
VUU7Ci0KLSAgICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKTsKLSAg
ICBpZiAoIXQpIHsKLSAgICAgICAgQ1JJVElDQUwoIm1hdHJpeCBjZWxsIHdpdGggbm8gdGlsZSEi
KTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoIXQtPnVwZGF0
ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFf
bGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQp
OwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdm9pZCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0sIEV3a19UaWxlICp0KQotewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAoIXQtPnVwZGF0ZXMgJiYg
IXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgZXdrX3RpbGVfdXBk
YXRlc19jbGVhcih0KTsKLSAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVw
ZGF0ZXMsIHQpOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9tYXRyaXhfc2xpY2Vy
X3NldHVwKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhLCBm
bG9hdCB6b29tLCBFaW5hX1RpbGVfR3JpZF9TbGljZXIgKnNsaWNlcikKLXsKLSAgICB1bnNpZ25l
ZCBsb25nIHJvd3MsIGNvbHM7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCB0dywgdGg7Ci0K
LSAgICBpZiAoYXJlYS0+dyA8PSAwIHx8IGFyZWEtPmggPD0gMCkgewotICAgICAgICBXUk4oImlu
dmFsaWQgYXJlYSByZWdpb246ICVkLCVkKyVkeCVkLiIsCi0gICAgICAgICAgICBhcmVhLT54LCBh
cmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0g
ICAgfQotCi0gICAgeCA9IGFyZWEtPng7Ci0gICAgeSA9IGFyZWEtPnk7Ci0gICAgdyA9IGFyZWEt
Pnc7Ci0gICAgaCA9IGFyZWEtPmg7Ci0KLSAgICB0dyA9IHRtLT50aWxlLnc7Ci0gICAgdGggPSB0
bS0+dGlsZS5oOwotCi0gICAgLy8gY3JvcHBpbmcgYXJlYSByZWdpb24gdG8gZml0IG1hdHJpeAot
ICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfZ2V0KHRtLT5tYXRyaXgsICZyb3dzLCAmY29scyk7
Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIHcgKz0geDsKLSAgICAgICAgeCA9IDA7Ci0gICAg
fQotICAgIGlmICh5IDwgMCkgewotICAgICAgICBoICs9IHk7Ci0gICAgICAgIHkgPSAwOwotICAg
IH0KLQotICAgIGlmICh5ICsgaCAtIDEgPiAobG9uZykocm93cyAqIHRoKSkKLSAgICAgICAgaCA9
IHJvd3MgKiB0aCAtIHk7Ci0gICAgaWYgKHggKyB3IC0gMSA+IChsb25nKShjb2xzICogdHcpKQot
ICAgICAgICB3ID0gY29scyAqIHR3IC0geDsKLQotICAgIHJldHVybiBlaW5hX3RpbGVfZ3JpZF9z
bGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywgdGgpOwotfQotCi0KLUVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlICp1cGRhdGUsIGZsb2F0IHpvb20pCi17Ci0gICAgY29uc3QgRWluYV9UaWxlX0dy
aWRfSW5mbyAqaW5mbzsKLSAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7Ci0KLSAgICBpZiAo
dXBkYXRlLT53IDwgMSB8fCB1cGRhdGUtPmggPCAxKSB7Ci0gICAgICAgIERCRygiV2h5IHdlIGdl
dCB1cGRhdGVzIHdpdGggZW1wdHkgYXJlYXM/ICVkLCVkKyVkeCVkIGF0IHpvb20gJWYiLAotICAg
ICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywgdXBkYXRlLT5oLCB6b29t
KTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoIV9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKHRtLCB1cGRhdGUsIHpvb20sICZzbGljZXIpKSB7Ci0gICAg
ICAgIEVSUigiQ291bGQgbm90IHNldHVwIHNsaWNlciBmb3IgdXBkYXRlICVkLCVkKyVkeCVkIGF0
IHpvb20gJWYiLAotICAgICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywg
dXBkYXRlLT5oLCB6b29tKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9uZXh0KCZzbGljZXIsICZpbmZvKSkgewot
ICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgICAgICBFd2tfVGlsZSAqdDsKLSAg
ICAgICAgY29sID0gaW5mby0+Y29sOwotICAgICAgICByb3cgPSBpbmZvLT5yb3c7Ci0KLSAgICAg
ICAgdCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNv
bCk7Ci0gICAgICAgIGlmICghdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
ICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgICAgICB0bS0+
dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgICAgICBpZiAo
aW5mby0+ZnVsbCkKLSAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmaW5mby0+cmVjdCk7
Ci0gICAgfQotCi0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi12b2lkIGV3a190aWxlX21h
dHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsKLSAgICBFaW5hX0xp
c3QgKmwsICpsX25leHQ7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4odG0pOwotCi0gICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKLSAg
ICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRtLT51cGRhdGVzLCBsLCBsX25leHQsIHQpIHsKLSAg
ICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHQsIHRtLT5yZW5kZXIuY2IsIHRtLT5yZW5k
ZXIuZGF0YSk7Ci0gICAgICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgICAgICBld2tfdGls
ZV91cGRhdGVzX2NsZWFyKHQpOwotICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3Rf
cmVtb3ZlX2xpc3QodG0tPnVwZGF0ZXMsIGwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0g
ICAgRXdrX1RpbGUgKnQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotCi0g
ICAgRUlOQV9MSVNUX0ZSRUUodG0tPnVwZGF0ZXMsIHQpCi0gICAgICAgIGV3a190aWxlX3VwZGF0
ZXNfY2xlYXIodCk7Ci0gICAgdG0tPnVwZGF0ZXMgPSBOVUxMOwotfQotCi0vLyByZW1vdmUgbWUg
bGF0ZXIhCi12b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0
bSkKLXsKLSAgICBFaW5hX0l0ZXJhdG9yICppdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9y
X2NvbXBsZXRlX25ldyh0bS0+bWF0cml4KTsKLSAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpj
ZWxsOwotICAgIEVpbmFfQm9vbCBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKLQotI2lmZGVmIERF
QlVHX01FTV9MRUFLUwotICAgIHByaW50ZigiRXdrX1RpbGUgTWF0cml4OiB0aWxlc1srJSJQUkl1
NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQi
LC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFs
bG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAotICAgICAgICAgICB0bS0+c3RhdHMudGls
ZXMuYWxsb2NhdGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAotICAgICAgICAgICB0bS0+c3Rh
dHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCi0gICAgICAgICAgIHRt
LT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOwotI2Vsc2UK
LSAgICBwcmludGYoIkV3a19UaWxlIE1hdHJpeDpcbiIpOwotI2VuZGlmCi0KLSAgICBFSU5BX0lU
RVJBVE9SX0ZPUkVBQ0goaXQsIGNlbGwpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNv
bDsKLSAgICAgICAgRXdrX1RpbGUgKnQ7Ci0gICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxf
cG9zaXRpb25fZ2V0KGNlbGwsICZyb3csICZjb2wpOwotICAgICAgICB0ID0gZWluYV9tYXRyaXhz
cGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKTsKLQotICAgICAgICBpZiAoIXQpIHsKLSAgICAgICAg
ICAgIGlmICghbGFzdF9lbXB0eSkgewotICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5B
X1RSVUU7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFbXB0eToiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHByaW50ZigiIFslbHUsJWx1XSIsIGNvbCwgcm93KTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChsYXN0X2VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgbGFz
dF9lbXB0eSA9IEVJTkFfRkFMU0U7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJv
dywgdCk7Ci0gICAgICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0l
YyIsIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLCB0LT52aXNpYmxlID8gJyon
OiAnICcpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChsYXN0X2VtcHR5KQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0KTsKLQotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodG0tPnR1Yyk7Ci19
Ci0KLS8qKgotICogRnJlZXplIG1hdHJpeCB0byBub3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCi0g
KgotICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93
IHdlIHNob3VsZCBob2xkCi0gKiBvbiB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlv
biwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQotICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRo
YXcgd2hlbiB3ZSdyZSBkb25lLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RoYXcoKQot
ICovCi12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgaWYgKCF0bS0+ZnJvemVu
KQotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwotICAgIHRt
LT5mcm96ZW4rKzsKLX0KLQotLyoqCi0gKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3MuCi0g
KgotICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4gbWFp
bnRlbmFuY2UgdGFza3MKLSAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgotICovCi12b2lkIGV3a190
aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odG0pOwotICAgIGlmICghdG0tPmZyb3plbikgewotICAgICAgICBFUlIo
InRoYXdpbmcgbW9yZSB0aGFuIGZyZWV6aW5nISIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgdG0tPmZyb3plbi0tOwotICAgIGlmICghdG0tPmZyb3plbikKLSAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX21hdHJpeC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY0YzQxYzcxOTEzNDdmMDFhNjE5YjNk
MWNiZWU5YmNiNTRhNjJjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfbWF0cml4LmNwcApAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX21hdHJpeC5oIgorCisjaW5jbHVkZSAiZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1
ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+Cisj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCByZW1vdmUgbWUgbGF0
ZXIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RydWN0IF9F
d2tfVGlsZV9NYXRyaXggeworICAgIEVpbmFfTWF0cml4c3BhcnNlICptYXRyaXg7CisgICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKKyAg
ICBzdHJ1Y3QgeworICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKKyAgICAgICAgdm9pZCAqZGF0YTsKKyAgICB9
IHJlbmRlcjsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOworICAgIEVpbmFfTGlzdCAqdXBkYXRl
czsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgfSB0aWxlOwor
I2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICB1aW50NjRfdCBhbGxvY2F0ZWQsIGZyZWVkOworICAgICAgICB9IHRpbGVzLCBi
eXRlczsKKyAgICB9IHN0YXRzOworI2VuZGlmCit9OworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CitzdGF0aWMgdWludDY0X3QgdGlsZXNfbGVha2VkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRl
c19sZWFrZWQgPSAwOworI2VuZGlmCisKKy8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyBy
ZXNpemVkIG9yIGZyZWVkICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJl
ZSh2b2lkICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKK3sKKyAgICBFd2tfVGlsZV9NYXRy
aXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4odXNlcl9kYXRhKTsKKyAgICBF
d2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oY2VsbF9kYXRhKTsKKworICAgIGlm
ICghdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6
ZSh0bS0+dHVjKTsKKworICAgIGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRl
KQorICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQp
OworCisgICAgaWYgKHQtPnZpc2libGUpCisgICAgICAgIEVSUigiZnJlZWluZyBjZWxsIHRoYXQg
aXMgdmlzaWJsZSwgbGVha2luZyB0aWxlICVwIiwgdCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQorICAgICAgICAg
ICAgRVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0LCB0bS0+
dHVjKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBEQkcoInRpbGUgY2VsbCBkb2VzIG5v
dCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwgdCk7CisjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CisgICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgICAg
ICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsKKyNlbmRpZgorICAgICAgICAgICAgZXdrX3Rp
bGVfZnJlZSh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGV3a190aWxlX3VudXNlZF9jYWNo
ZV90aGF3KHRtLT50dWMpOworfQorCisvKiBjYWxsZWQgd2hlbiBjYWNoZSBvZiB1bnVzZWQgdGls
ZSBpcyBmbHVzaGVkICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2
b2lkICpkYXRhLCBFd2tfVGlsZSAqdCkKK3sKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oZGF0YSk7CisgICAgRWluYV9NYXRyaXhzcGFyc2Vf
Q2VsbCAqY2VsbDsKKyAKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0
bS0+bWF0cml4LCB0LT5yb3csIHQtPmNvbCwgJmNlbGwpKSB7CisgICAgICAgIEVSUigicmVtb3Zp
bmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjZWxsKSB7CisgICAgICAgIEVSUigi
cmVtb3ZpbmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIs
IHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92
ZSh0bS0+dXBkYXRlcywgdCk7CisKKyAgICAvKiBzZXQgdG8gbnVsbCB0byBhdm9pZCBkb3VibGUg
ZnJlZSAqLworICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9yZXBsYWNlKGNlbGwsIDAs
IDApOworICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfY2xlYXIoY2VsbCk7CisKKyAgICBpZiAo
RUlOQV9VTkxJS0VMWSghIXQtPnZpc2libGUpKSB7CisgICAgICAgIEVSUigiY2FjaGUgb2YgdW51
c2VkIHRpbGVzIHJlcXVlc3RpbmcgZGVsZXRpb24gb2YgdXNlZCB0aWxlICVwPyAiCisgICAgICAg
ICAgICAiTGVha2luZy4uLiIsIHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWZkZWYg
REVCVUdfTUVNX0xFQUtTCisgICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwor
ICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOworI2VuZGlmCisKKyAgICBld2tfdGlsZV9mcmVl
KHQpOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgbWF0cml4IG9mIHRpbGVzLgorICoKKyAq
IFRoZSB0aWxlIG1hdHJpeCBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0aWxlcyBhcm91bmQg
YW5kCisgKiBwcm92aWRpbmcgZmFzdCBhY2Nlc3MgdG8gdGhlbS4gT25lIGNhbiB1c2UgaXQgdG8g
cmV0cmlldmUgbmV3IG9yCisgKiBleGlzdGluZyB0aWxlcyBhbmQgZ2l2ZSB0aGVtIGJhY2ssIGFs
bG93aW5nIHRoZW0gdG8gYmUKKyAqIGZyZWVkL3JlcGxhY2VkIGJ5IHRoZSBjYWNoZS4KKyAqCisg
KiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcyBvciBAYyAwIHRvIGNyZWF0ZSBvbmUK
KyAqICAgICAgICBhdXRvbWF0aWNhbGx5LgorICogQHBhcmFtIGNvbHMgbnVtYmVyIG9mIGNvbHVt
bnMgaW4gdGhlIG1hdHJpeC4KKyAqIEBwYXJhbSByb3dzIG51bWJlciBvZiByb3dzIGluIHRoZSBt
YXRyaXguCisgKiBAcGFyYW0gY3NwYWNlIHRoZSBjb2xvciBzcGFjZSB1c2VkIHRvIGNyZWF0ZSB0
aWxlcyBpbiB0aGlzIG1hdHJpeC4KKyAqIEBwYXJhbSByZW5kZXJfY2IgZnVuY3Rpb24gdXNlZCB0
byByZW5kZXIgZ2l2ZW4gdGlsZSB1cGRhdGUuCisgKiBAcGFyYW0gcmVuZGVyX2RhdGEgY29udGV4
dCB0byBnaXZlIGJhY2sgdG8gQGEgcmVuZGVyX2NiLgorICoKKyAqIEByZXR1cm4gbmV3bHkgYWxs
b2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFpbHVyZS4KKyAqLworRXdrX1Rp
bGVfTWF0cml4ICpld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
LCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNl
IGNzcGFjZSwgdm9pZCAoKnJlbmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpyZW5kZXJfZGF0YSkKK3sKKyAg
ICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oY2Fs
bG9jKDEsIHNpemVvZihFd2tfVGlsZV9NYXRyaXgpKSk7CisgICAgaWYgKCF0bSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3Ms
IGNvbHMsIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7CisgICAgaWYgKCF0bS0+bWF0
cml4KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4LiIpOwor
ICAgICAgICBmcmVlKHRtKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHR1
YykKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodHVjKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5
NjAwMDApOworICAgICAgICBpZiAoIXRtLT50dWMpIHsKKyAgICAgICAgICAgIEVSUigibm8gY2Fj
aGUgb2YgdW51c2VkIHRpbGUhIik7CisgICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVl
KHRtLT5tYXRyaXgpOworICAgICAgICAgICAgZnJlZSh0bSk7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7CisgICAgdG0t
PnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKKyAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKXJl
bmRlcl9kYXRhOworICAgIHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKKyAgICB0bS0+dGls
ZS5oID0gREVGQVVMVF9USUxFX0g7CisKKyAgICByZXR1cm4gdG07Cit9CisKKy8qKgorICogRGVz
dHJveXMgdGlsZXMgbWF0cml4LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KKyAqCisgKiBUaGUg
Y2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICov
Cit2b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisjaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCisgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOworI2VuZGlmCisK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKworICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0t
Pm1hdHJpeCk7CisKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKKyAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodG0tPnR1Yyk7CisKKyNpZmRlZiBERUJVR19N
RU1fTEVBS1MKKyAgICB0aWxlcyA9IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQ7CisgICAgYnl0ZXMgPSB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLmJ5dGVzLmZyZWVkOworCisgICAgdGlsZXNfbGVha2VkICs9IHRpbGVzOworICAg
IGJ5dGVzX2xlYWtlZCArPSBieXRlczsKKworICAgIGlmICh0aWxlcyB8fCBieXRlcykKKyAgICAg
ICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6
JSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSIsCisgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7CisgICAgZWxzZSBpZiAodGlsZXNf
bGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKKyAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5v
IGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCisgICAgICAg
ICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwKKyAgICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAg
ICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKKyAgICBlbHNlCisgICAgICAg
IElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdIiwKKyAgICAg
ICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwK
KyAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCk7CisjZW5kaWYKKworICAgIGZyZWUodG0pOworfQorCisvKioKKyAqIFJlc2l6ZSBtYXRy
aXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCisgKi8KK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
bSk7CisgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQodG0tPm1hdHJpeCwgcm93cywgY29s
cyk7Cit9CisKKy8qKgorICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgaW4gdXNlIGJ5
IGdpdmVuIG1hdHJpeC4KKyAqCisgKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hl
LgorICovCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKKyAgICByZXR1cm4gdG0tPnR1YzsKK30KKworLyoqCisg
KiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4KKyAq
CisgKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhlIGNh
Y2hlLgorICoKKyAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBiYWNrIHVzaW5nCisgKiBl
d2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4gSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBpZiBp
dCBleGlzdHMsCisgKiB0aGVuIHVzZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMo
KS4KKyAqCisgKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxlIGZyb20uCisg
KiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51
bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KKyAqCisgKiBAcmV0
dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIDAgaWYgbm9uZSBpcyBmb3VuZC4gSWYgdGhlIHRp
bGUKKyAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2lsbCBiZSBAYiByZW1v
dmVkICh0aHVzCisgKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9uZSBzaG91bGQgZ2l2
ZSBpdCBiYWNrIHdpdGgKKyAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkgYWZ0
ZXJ3YXJkcy4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgpCisg
Ki8KK0V3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1RpbGVfTWF0
cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29t
KQoreworICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJp
eHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpKTsKKyAgICBpZiAoIXQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHQtPnpvb20gPT0gem9vbSkKKyAgICAgICAg
Z290byBlbmQ7CisKKyAgZW5kOgorICAgIGlmICghdC0+dmlzaWJsZSkgeworICAgICAgICBpZiAo
IWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0KSkKKyAgICAgICAgICAg
IFdSTigiRXdrX1RpbGUgd2FzIHVudXNlZCBidXQgbm90IGluIGNhY2hlPyBidWchIik7CisgICAg
fQorCisgICAgcmV0dXJuIHQ7Cit9CisKKy8qKgorICogQ2hlY2tzIGlmIHRpbGUgb2YgZ2l2ZW4g
em9vbSBleGlzdHMgaW4gbWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXgg
dG8gY2hlY2sgdGlsZSBleGlzdGVuY2UuCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVy
LgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBleGFj
dCB6b29tIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGZvdW5kLCBA
YyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxl
X2V4YWN0X2dldCgpCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9l
eGlzdHMoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93LCBmbG9hdCB6b29tKQoreworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9p
ZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyB0aWxl
IGF0IGdpdmVuIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsIGluIHRoZSBtYXRyaXguCisgKgorICog
VGhlIG5ld2x5IGNyZWF0ZWQgdGlsZSBpcyBjb25zaWRlcmVkIGluIHVzZSBhbmQgbm90IHB1dCBp
bnRvIGNhY2hlCisgKiBvZiB1bnVzZWQgdGlsZXMuIEFmdGVyIGl0IGlzIHVzZWQgb25lIHNob3Vs
ZCBjYWxsCisgKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKSB0byBnaXZlIGl0IGJhY2sgdG8g
bWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gY3JlYXRlIHRpbGUg
b24uCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUg
cm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBsZXZlbCB0byBjcmVhdGUgdGlsZSwgdXNl
ZCB0byBkZXRlcm1pbmUgdGlsZSBzaXplLgorICovCitFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4
X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbmcg
Y29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK3sKKyAgICBFdmFzX0Nvb3JkIHR3
LCB0aDsKKyAgICBFd2tfVGlsZSAqdDsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTCh0bSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTCh6b29tID4g
MC4wLCAwKTsKKworICAgIHR3ID0gdG0tPnRpbGUudzsKKyAgICB0aCA9IHRtLT50aWxlLmg7CisK
KyAgICB0ID0gZXdrX3RpbGVfbmV3KGV2YXMsIHR3LCB0aCwgem9vbSwgdG0tPmNzcGFjZSk7Cisg
ICAgaWYgKCF0KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0
ICVmLCBjc3BhY2U9JWQiLCB0dywgdGgsIChkb3VibGUpem9vbSwgdG0tPmNzcGFjZSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9p
ZHhfc2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCB0KSkgeworICAgICAgICBFUlIoImNvdWxkIG5v
dCBzZXQgbWF0cml4IGNlbGwsIHJvdy9jb2wgb3V0c2lkZSBtYXRyaXggZGltZW5zaW9ucyEiKTsK
KyAgICAgICAgZXdrX3RpbGVfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgdC0+Y29sID0gY29sOworICAgIHQtPnJvdyA9IHJvdzsKKyAgICB0LT54ID0gY29sICogdHc7
CisgICAgdC0+eSA9IHJvdyAqIHRoOworCisgICAgY2Fpcm9fdHJhbnNsYXRlKHQtPmNhaXJvLCAt
dC0+eCwgLXQtPnkpOworCisgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Cisg
ICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+
Ynl0ZXM7CisgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCsrOworI2VuZGlmCisKKyAgICBy
ZXR1cm4gdDsKK30KKworLyoqCisgKiBHaXZlcyBiYWNrIHRoZSB0aWxlIHRvIHRoZSB0aWxlIG1h
dHJpeC4KKyAqCisgKiBUaGlzIHdpbGwgcmVwb3J0IHRoZSB0aWxlIGlzIG5vIGxvbmdlciBpbiB1
c2UgYnkgdGhlIG9uZSB0aGF0IGdvdAorICogaXQgd2l0aCBld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9nZXQoKS4KKyAqCisgKiBBbnkgcHJldmlvdXMgcmVmZXJlbmNlIHRvIHRpbGUgc2hvdWxk
IGJlIHJlbGVhc2VkCisgKiAoZXdrX3RpbGVfaGlkZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1
bmN0aW9uLCBzbyBpdCB3aWxsCisgKiBiZSBrbm93biBpZiBpdCBpcyBub3QgdmlzaWJpbGUgYW55
bW9yZSBhbmQgdGh1cyBjYW4gYmUgcHV0IGludG8gdGhlCisgKiB1bnVzZWQgY2FjaGUuCisgKgor
ICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KKyAqIEBwYXJh
bSB0IHRoZSB0aWxlIGluc3RhbmNlIHRvIHJldHVybiwgbXVzdCBAYiBub3QgYmUgQGMgMC4KKyAq
IEBwYXJhbSBsYXN0X3VzZWQgdGltZSBpbiB3aGljaCB0aWxlIHdhcyBsYXN0IHVzZWQuCisgKgor
ICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3Mgb3IgI0VJTkFfRkFMU0Ugb24gZmFpbHVy
ZS4KKyAqLworRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRy
aXggKnRtLCBFd2tfVGlsZSAqdCwgZG91YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh0LCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh0LT52aXNpYmxlKQor
ICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworCisgICAgdC0+c3RhdHMubGFzdF91c2VkID0gbGFz
dF91c2VkOworICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0tPnR1
YywgdCwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRtKTsKK30KKworRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBs
b25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUp
Cit7CisgICAgRWluYV9SZWN0YW5nbGUgbmV3X3VwZGF0ZTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOworCisgICAgbWVtY3B5KCZuZXdfdXBkYXRl
LCB1cGRhdGUsIHNpemVvZihuZXdfdXBkYXRlKSk7CisgICAgLy8gY2hlY2sgdXBkYXRlIGlzIHZh
bGlkLCBvdGhlcndpc2UgcmV0dXJuIEVJTkFfRkFMU0UKKyAgICBpZiAodXBkYXRlLT54IDwgMCB8
fCB1cGRhdGUtPnkgPCAwIHx8IHVwZGF0ZS0+dyA8PSAwIHx8IHVwZGF0ZS0+aCA8PSAwKSB7Cisg
ICAgICAgIEVSUigiaW52YWxpZCB1cGRhdGUgcmVnaW9uLiIpOworICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKKyAgICB9CisKKyAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSB0
bS0+dGlsZS53KQorICAgICAgICBuZXdfdXBkYXRlLncgPSB0bS0+dGlsZS53IC0gdXBkYXRlLT54
OworICAgIGlmICh1cGRhdGUtPnkgKyB1cGRhdGUtPmggLSAxID49IHRtLT50aWxlLmgpCisgICAg
ICAgIG5ld191cGRhdGUuaCA9IHRtLT50aWxlLmggLSB1cGRhdGUtPnk7CisKKyAgICBFd2tfVGls
ZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhf
Z2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSk7CisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOworCisgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0
ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0
KTsKKyAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmbmV3X3VwZGF0ZSk7CisKKyAgICByZXR1
cm4gRUlOQV9UUlVFOworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRl
X2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93KQoreworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICghZWlu
YV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCAmY2VsbCkp
CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgaWYgKCFjZWxsKQorICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworCisgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOworICAgIGlmICghdCkg
eworICAgICAgICBDUklUSUNBTCgibWF0cml4IGNlbGwgd2l0aCBubyB0aWxlISIpOworICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVu
ZCh0bS0+dXBkYXRlcywgdCk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisKKyAgICBy
ZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNf
Y2xlYXIoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUgKnQpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMu
ZnVsbF91cGRhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFy
KHQpOworICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7
Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAoRXdr
X1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEsIGZsb2F0IHpvb20s
IEVpbmFfVGlsZV9HcmlkX1NsaWNlciAqc2xpY2VyKQoreworICAgIHVuc2lnbmVkIGxvbmcgcm93
cywgY29sczsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgsIHR3LCB0aDsKKworICAgIGlmIChh
cmVhLT53IDw9IDAgfHwgYXJlYS0+aCA8PSAwKSB7CisgICAgICAgIFdSTigiaW52YWxpZCBhcmVh
IHJlZ2lvbjogJWQsJWQrJWR4JWQuIiwKKyAgICAgICAgICAgIGFyZWEtPngsIGFyZWEtPnksIGFy
ZWEtPncsIGFyZWEtPmgpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAg
ICB4ID0gYXJlYS0+eDsKKyAgICB5ID0gYXJlYS0+eTsKKyAgICB3ID0gYXJlYS0+dzsKKyAgICBo
ID0gYXJlYS0+aDsKKworICAgIHR3ID0gdG0tPnRpbGUudzsKKyAgICB0aCA9IHRtLT50aWxlLmg7
CisKKyAgICAvLyBjcm9wcGluZyBhcmVhIHJlZ2lvbiB0byBmaXQgbWF0cml4CisgICAgZWluYV9t
YXRyaXhzcGFyc2Vfc2l6ZV9nZXQodG0tPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKKyAgICBpZiAo
eCA8IDApIHsKKyAgICAgICAgdyArPSB4OworICAgICAgICB4ID0gMDsKKyAgICB9CisgICAgaWYg
KHkgPCAwKSB7CisgICAgICAgIGggKz0geTsKKyAgICAgICAgeSA9IDA7CisgICAgfQorCisgICAg
aWYgKHkgKyBoIC0gMSA+IChsb25nKShyb3dzICogdGgpKQorICAgICAgICBoID0gcm93cyAqIHRo
IC0geTsKKyAgICBpZiAoeCArIHcgLSAxID4gKGxvbmcpKGNvbHMgKiB0dykpCisgICAgICAgIHcg
PSBjb2xzICogdHcgLSB4OworCisgICAgcmV0dXJuIGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1
cChzbGljZXIsIHgsIHksIHcsIGgsIHR3LCB0aCk7Cit9CisKKworRWluYV9Cb29sIGV3a190aWxl
X21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUg
KnVwZGF0ZSwgZmxvYXQgem9vbSkKK3sKKyAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvICpp
bmZvOworICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh1cGRhdGUtPncg
PCAxIHx8IHVwZGF0ZS0+aCA8IDEpIHsKKyAgICAgICAgREJHKCJXaHkgd2UgZ2V0IHVwZGF0ZXMg
d2l0aCBlbXB0eSBhcmVhcz8gJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIsCisgICAgICAgICAgICB1
cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgsIHpvb20pOworICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIGlmICghX2V3a190aWxlX21hdHJpeF9z
bGljZXJfc2V0dXAodG0sIHVwZGF0ZSwgem9vbSwgJnNsaWNlcikpIHsKKyAgICAgICAgRVJSKCJD
b3VsZCBub3Qgc2V0dXAgc2xpY2VyIGZvciB1cGRhdGUgJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIs
CisgICAgICAgICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgs
IHpvb20pOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICB3aGlsZSAo
ZWluYV90aWxlX2dyaWRfc2xpY2VyX25leHQoJnNsaWNlciwgJmluZm8pKSB7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgICAgIGNvbCA9IGluZm8tPmNvbDsKKyAgICAgICAg
cm93ID0gaW5mby0+cm93OworCisgICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBj
b2wpKTsKKyAgICAgICAgaWYgKCF0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgICAgIHRt
LT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7CisgICAgICAgIGlm
IChpbmZvLT5mdWxsKQorICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZpbmZvLT5yZWN0
KTsKKyAgICB9CisKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVf
bWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVpbmFf
TGlzdCAqbCwgKmxfbmV4dDsKKyAgICB2b2lkKiBpdGVtOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHRtKTsKKworICAgIC8vIHByb2Nlc3MgdXBkYXRlcywgdW5mbGFnIHRpbGVzCisg
ICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0bS0+dXBkYXRlcywgbCwgbF9uZXh0LCBpdGVtKSB7
CisgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihpdGVtKTsK
KyAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHRpbGUsIHRtLT5yZW5kZXIuY2IsIHRt
LT5yZW5kZXIuZGF0YSk7CisgICAgICAgIGlmICh0aWxlLT52aXNpYmxlKSB7CisgICAgICAgICAg
ICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGUpOworICAgICAgICAgICAgdG0tPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodG0tPnVwZGF0ZXMsIGwpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJp
eCAqdG0pCit7CisgICAgdm9pZCogaXRlbTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tih0bSk7CisKKyAgICBFSU5BX0xJU1RfRlJFRSh0bS0+dXBkYXRlcywgaXRlbSkKKyAgICAgICAg
ZXdrX3RpbGVfdXBkYXRlc19jbGVhcihzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGl0ZW0pKTsKKyAg
ICB0bS0+dXBkYXRlcyA9IDA7Cit9CisKKy8vIHJlbW92ZSBtZSBsYXRlciEKK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVpbmFfSXRl
cmF0b3IgKml0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRlcmF0b3JfY29tcGxldGVfbmV3KHRtLT5t
YXRyaXgpOworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAgRWluYV9Cb29s
IGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAg
cHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBS
SXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2
NCJdXG4iLAorICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMu
dGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+
c3RhdHMudGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQs
IHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCk7CisjZWxzZQorICAgIHByaW50ZigiRXdrX1Rp
bGUgTWF0cml4OlxuIik7CisjZW5kaWYKKworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwg
Y2VsbCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sOworICAgICAgICBlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sKTsKKworICAgICAg
ICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2Vf
Y2VsbF9kYXRhX2dldChjZWxsKSk7CisgICAgICAgIGlmICghdCkgeworICAgICAgICAgICAgaWYg
KCFsYXN0X2VtcHR5KSB7CisgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfVFJVRTsK
KyAgICAgICAgICAgICAgICBwcmludGYoIkVtcHR5OiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29sLCByb3cpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGxhc3RfZW1wdHkpIHsKKyAgICAgICAgICAgICAgICBsYXN0X2VtcHR5
ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBwcmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0KTsK
KyAgICAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdC0+
Y29sLCB0LT5yb3csIHQtPncsIHQtPmgsIHQtPnpvb20sIHQtPnZpc2libGUgPyAnKic6ICcgJyk7
CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxh
c3RfZW1wdHkpCisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUo
aXQpOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0bS0+dHVjKTsKK30KKworLyoq
CisgKiBGcmVlemUgbWF0cml4IHRvIG5vdCBkbyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBN
YWludGVuYW5jZSB0YXNrcyBvcHRpbWl6ZSB1c2FnZSwgYnV0IG1heWJlIHdlIGtub3cgd2Ugc2hv
dWxkIGhvbGQKKyAqIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxhc3Qgb3BlcmF0aW9uLCBpbiB0
aGlzIGNhc2Ugd2UgZnJlZXplCisgKiB3aGlsZSBvcGVyYXRpbmcgYW5kIHRoZW4gdGhhdyB3aGVu
IHdlJ3JlIGRvbmUuCisgKgorICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGhhdygpCisgKi8KK3Zv
aWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBpZiAoIXRtLT5mcm96ZW4pCisgICAg
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgdG0tPmZyb3pl
bisrOworfQorCisvKioKKyAqIFVuZnJlZXplcyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBJ
ZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5j
ZSB0YXNrcworICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfbWF0
cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0bSk7CisgICAgaWYgKCF0bS0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhhd2lu
ZyBtb3JlIHRoYW4gZnJlZXppbmchIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0
bS0+ZnJvemVuLS07CisgICAgaWYgKCF0bS0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfbW9kZWwuYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
bW9kZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJlOTQ3OTNiNmRiY2IxZGVh
Y2YxYjhjNTQwMWRlMmI0YTU3NzZkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMKKysr
IC9kZXYvbnVsbApAQCAtMSw4NDggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiZXdrX3RpbGVkX21vZGVsLmgiCi0KLSNkZWZpbmUgX0dOVV9TT1VSQ0UKLSNpbmNsdWRlICJl
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIgotI2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRlLmgi
Ci0jaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUgPEVpbmEuaD4KLSNpbmNsdWRlIDxl
aW5hX3NhZmV0eV9jaGVja3MuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5
cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgVElMRV9TVEFUU19B
Q0NPVU5UX1JFTkRFUl9USU1FCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jaWZu
ZGVmIENBSVJPX0ZPUk1BVF9SR0IxNl81NjUKLSNkZWZpbmUgQ0FJUk9fRk9STUFUX1JHQjE2XzU2
NSA0Ci0jZW5kaWYKLQotI2RlZmluZSBJRFgoY29sLCByb3csIHJvd3NwYW4pIChjb2wgKyAocm93
ICogcm93c3BhbikpCi0jZGVmaW5lIE1JTihhLCBiKSAoKGEgPCBiKSA/IGEgOiBiKQotI2RlZmlu
ZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwot
c3RhdGljIHVpbnQ2NF90IHRpbGVzX2FsbG9jYXRlZCA9IDA7Ci1zdGF0aWMgdWludDY0X3QgdGls
ZXNfZnJlZWQgPSAwOwotc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2FsbG9jYXRlZCA9IDA7Ci1zdGF0
aWMgdWludDY0X3QgYnl0ZXNfZnJlZWQgPSAwOwotCi1zdHJ1Y3QgdGlsZV9hY2NvdW50IHsKLSAg
ICBFdmFzX0Nvb3JkIHNpemU7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdWludDY0X3QgYWxsb2Nh
dGVkOwotICAgICAgICB1aW50NjRfdCBmcmVlZDsKLSAgICB9IHRpbGVzLCBieXRlczsKLX07Ci0K
LXN0YXRpYyBzaXplX3QgYWNjb3VudGluZ19sZW4gPSAwOwotc3RhdGljIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKmFjY291bnRpbmcgPSBOVUxMOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKl9ld2tfdGlsZV9hY2NvdW50X2dldChjb25zdCBFd2tfVGlsZSAqdCkKLXsKLSAgICBz
dHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7Ci0gICAgc2l6ZV90IGk7Ci0KLSAgICBmb3IgKGkgPSAw
OyBpIDwgYWNjb3VudGluZ19sZW47IGkrKykgewotICAgICAgICBpZiAoYWNjb3VudGluZ1tpXS5z
aXplID09IHQtPncpCi0gICAgICAgICAgICByZXR1cm4gYWNjb3VudGluZyArIGk7Ci0gICAgfQot
Ci0gICAgaSA9IChhY2NvdW50aW5nX2xlbiArIDEpICogc2l6ZW9mKHN0cnVjdCB0aWxlX2FjY291
bnQpOwotICAgIFJFQUxMT0NfT1JfT09NX1JFVChhY2NvdW50aW5nLCBpLCBOVUxMKTsKLQotICAg
IGFjYyA9IGFjY291bnRpbmcgKyBhY2NvdW50aW5nX2xlbjsKLSAgICBhY2MtPnNpemUgPSB0LT53
OwotICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkID0gMDsKLSAgICBhY2MtPnRpbGVzLmZyZWVkID0g
MDsKLSAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCA9IDA7Ci0gICAgYWNjLT5ieXRlcy5mcmVlZCA9
IDA7Ci0KLSAgICBhY2NvdW50aW5nX2xlbisrOwotCi0gICAgcmV0dXJuIGFjYzsKLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGls
ZSAqdCkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2MgPSBfZXdrX3RpbGVfYWNjb3Vu
dF9nZXQodCk7Ci0gICAgaWYgKCFhY2MpCi0gICAgICAgIHJldHVybjsKLSAgICBhY2MtPmJ5dGVz
LmFsbG9jYXRlZCArPSB0LT5ieXRlczsKLSAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCsrOwotCi0g
ICAgYnl0ZXNfYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwotICAgIHRpbGVzX2FsbG9jYXRlZCsrOwot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdr
X1RpbGUgKnQpCi17Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2Fj
Y291bnRfZ2V0KHQpOwotICAgIGlmICghYWNjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhY2Mt
PmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwotICAgIGFjYy0+dGlsZXMuZnJlZWQrKzsKLQotICAg
IGJ5dGVzX2ZyZWVkICs9IHQtPmJ5dGVzOwotICAgIHRpbGVzX2ZyZWVkKys7Ci19Ci0KLXZvaWQg
ZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50
ICphY2M7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjX2VuZDsKLQotICAgIHByaW50Zigi
VElMRSBCQUxBTkNFOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0g
ICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAg
ICAgICAgICAgIHRpbGVzX2FsbG9jYXRlZCwgdGlsZXNfZnJlZWQsIHRpbGVzX2FsbG9jYXRlZCAt
IHRpbGVzX2ZyZWVkLAotICAgICAgICAgICAgYnl0ZXNfYWxsb2NhdGVkLCBieXRlc19mcmVlZCwg
Ynl0ZXNfYWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQpOwotCi0gICAgaWYgKCFhY2NvdW50aW5nX2xl
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYWNjID0gYWNjb3VudGluZzsKLSAgICBhY2NfZW5k
ID0gYWNjICsgYWNjb3VudGluZ19sZW47Ci0gICAgcHJpbnRmKCJCRUdJTjogVElMRSBCQUxBTkNF
IERFVEFJTFMgKFRPIFRISVMgTU9NRU5UISk6XG4iKTsKLSAgICBmb3IgKDsgYWNjIDwgYWNjX2Vu
ZDsgYWNjKyspIHsKLSAgICAgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwotCi0gICAgICAgIHRp
bGVzID0gYWNjLT50aWxlcy5hbGxvY2F0ZWQgLSBhY2MtPnRpbGVzLmZyZWVkOwotICAgICAgICBi
eXRlcyA9IGFjYy0+Ynl0ZXMuYWxsb2NhdGVkIC0gYWNjLT5ieXRlcy5mcmVlZDsKLQotICAgICAg
ICBwcmludGYoIiAgICU0ZDogdGlsZXNbKyU0IlBSSXU2NCIsLSU0IlBSSXU2NCI6JTQiUFJJdTY0
Il0gIgotICAgICAgICAgICAgICAgImJ5dGVzWyslOCJQUkl1NjQiLC0lOCJQUkl1NjQiOiU4IlBS
SXU2NCJdJXNcbiIsCi0gICAgICAgICAgICAgICBhY2MtPnNpemUsCi0gICAgICAgICAgICAgICBh
Y2MtPnRpbGVzLmFsbG9jYXRlZCwgYWNjLT50aWxlcy5mcmVlZCwgdGlsZXMsCi0gICAgICAgICAg
ICAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCwgYWNjLT5ieXRlcy5mcmVlZCwgYnl0ZXMsCi0gICAg
ICAgICAgICAgICAoYnl0ZXMgfHwgdGlsZXMpID8gIiBQT1NTSUJMRSBMRUFLIiA6ICIiKTsKLSAg
ICB9Ci0gICAgcHJpbnRmKCJFTkQ6IFRJTEUgQkFMQU5DRSBERVRBSUxTIChUTyBUSElTIE1PTUVO
VCEpOlxuIik7Ci19Ci0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291
bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxlICp0KSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9Ci0KLXZvaWQgZXdr
X3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKLXsKLSAgICBwcmludGYoImNvbXBpbGUgd2Via2l0
IHdpdGggREVCVUdfTUVNX0xFQUtTIGRlZmluZWQhXG4iKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAqdCwgdWludDhfdCBy
LCB1aW50OF90IGcsIHVpbnQ4X3QgYikKLXsKLSAgICB1aW50MzJfdCAqZHN0MzIsICpkc3QzMl9l
bmQsIGMxOwotICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7Ci0KLSAgICBjMSA9
IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXIgPDwgMTYpIHwgKCh1aW50MzJfdClnIDw8IDgpIHwg
YjsKLSAgICBjMiA9ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7Ci0KLSAgICBkc3Q2NCA9ICh1
aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+Ynl0ZXMg
LyA4KSAmIH43KTsKLSAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsK
LSAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KLSAg
ICAgICAgZHN0NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAgICAgZHN0
NjRbMl0gPSBjMjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRbNF0gPSBj
MjsKLSAgICAgICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsKLSAgICAg
ICAgZHN0NjRbN10gPSBjMjsKLSAgICB9Ci0KLSAgICBkc3QzMiA9ICh1aW50MzJfdCAqKWRzdDY0
X2VuZDsKLSAgICBkc3QzMl9lbmQgPSAodWludDMyX3QgKikodC0+cGl4ZWxzICsgdC0+Ynl0ZXMp
OwotICAgIGZvciAoOyBkc3QzMiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKLSAgICAgICAgKmRzdDMy
ID0gYzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3
a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQotewotICAgIHVpbnQx
Nl90ICpkc3QxNiwgKmRzdDE2X2VuZCwgYzE7Ci0gICAgdWludDY0X3QgKmRzdDY0LCAqZHN0NjRf
ZW5kLCBjMjsKLQotICAgIGMxID0gKCgoKHIgPj4gMykgJiAweDFmKSA8PCAxMSkgfAotICAgICAg
ICAgICgoKGcgPj4gMikgJiAweDNmKSA8PCA1KSB8Ci0gICAgICAgICAgKChiID4+IDMpICYgMHgx
ZikpOwotCi0gICAgYzIgPSAoKCh1aW50NjRfdCljMSA8PCA0OCkgfCAoKHVpbnQ2NF90KWMxIDw8
IDMyKSB8Ci0gICAgICAgICAgKCh1aW50NjRfdCljMSA8PCAxNikgfCBjMSk7Ci0KLSAgICBkc3Q2
NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+
Ynl0ZXMgLyA4KSAmIH43KTsKLSAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9
IDgpIHsKLSAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMg
Ki8KLSAgICAgICAgZHN0NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAg
ICAgZHN0NjRbMl0gPSBjMjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRb
NF0gPSBjMjsKLSAgICAgICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsK
LSAgICAgICAgZHN0NjRbN10gPSBjMjsKLSAgICB9Ci0KLSAgICBkc3QxNiA9ICh1aW50MTZfdCAq
KWRzdDE2X2VuZDsKLSAgICBkc3QxNl9lbmQgPSAodWludDE2X3QgKikodC0+cGl4ZWxzICsgdC0+
Ynl0ZXMpOwotICAgIGZvciAoOyBkc3QxNiA8IGRzdDE2X2VuZDsgZHN0MTYrKykKLSAgICAgICAg
KmRzdDE2ID0gYzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdr
X1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCi17Ci0gICAgaWYgKHQt
PmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpCi0gICAgICAgIF9ld2tfdGlsZV9w
YWludF9yZ2I4ODgodCwgciwgZywgYik7Ci0gICAgZWxzZSBpZiAodC0+Y3NwYWNlID09IEVWQVNf
Q09MT1JTUEFDRV9SR0I1NjVfQTVQKQotICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KHQs
IHIsIGcsIGIpOwotICAgIGVsc2UKLSAgICAgICAgRVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAl
ZCIsIHQtPmNzcGFjZSk7Ci19Ci0KLS8qKgotICogQ3JlYXRlIGEgbmV3IHRpbGUgb2YgZ2l2ZW4g
c2l6ZSwgem9vbSBsZXZlbCBhbmQgY29sb3JzcGFjZS4KLSAqCi0gKiBBZnRlciBjcmVhdGVkIHRo
ZXNlIHByb3BlcnRpZXMgYXJlIGltbXV0YWJsZSBhcyB0aGV5J3JlIHRoZSBiYXNpYwotICogY2hh
cmFjdGVyaXN0aWMgb2YgdGhlIHRpbGUgYW5kIGFueSBjaGFuZ2Ugd2lsbCBsZWFkIHRvIGludmFs
aWQKLSAqIG1lbW9yeSBhY2Nlc3MuCi0gKgotICogT3RoZXIgbWVtYmVycyBhcmUgb2YgZnJlZS1h
Y2Nlc3MgYW5kIG5vIGdldHRlcnMvc2V0dGVycyBhcmUKLSAqIHByb3ZpZGVkIGluIG9yZGVyciB0
byBhdm9pZCBleHBlbnNpdmUgb3BlcmF0aW9ucyBvbiB0aG9zZSwgaG93ZXZlcgotICogc29tZSBh
cmUgYmV0dGVyIG1hbmlwdWxhdGVkIHdpdGggcHJvdmlkZWQgZnVuY3Rpb25zLCBzdWNoIGFzCi0g
KiBld2tfdGlsZV9zaG93KCkgYW5kIGV3a190aWxlX2hpZGUoKSB0byBjaGFuZ2UKLSAqIEBjIHZp
c2libGUgb3IgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoKSwgZXdrX3RpbGVfdXBkYXRlX2FyZWEoKSwK
LSAqIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSB0byBjaGFuZ2UgQGMgc3RhdHMubWlzc2VzLAot
ICogQGMgc3RhdHMuZnVsbF91cGRhdGUgYW5kIEBjIHVwZGF0ZXMuCi0gKi8KLUV3a19UaWxlICpl
d2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0
IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UpCi17Ci0gICAgRXZhc19Db29yZCAqZWM7Ci0g
ICAgRXZhc19Db2xvcnNwYWNlICplY3M7Ci0gICAgZmxvYXQgKmY7Ci0gICAgc2l6ZV90ICpzOwot
ICAgIEV3a19UaWxlICp0OwotICAgIHVuc2lnbmVkIGludCBhcmVhOwotICAgIHNpemVfdCBieXRl
czsKLSAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7Ci0gICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVz
OwotICAgIGludCBzdHJpZGU7Ci0gICAgRWNvcmVfRXZhcyAqZWU7Ci0gICAgY29uc3QgY2hhciAq
ZW5naW5lOwotCi0gICAgYXJlYSA9IHcgKiBoOwotCi0gICAgaWYgKGNzcGFjZSA9PSBFVkFTX0NP
TE9SU1BBQ0VfQVJHQjg4ODgpIHsKLSAgICAgICAgYnl0ZXMgPSBhcmVhICogNDsKLSAgICAgICAg
c3RyaWRlID0gdyAqIDQ7Ci0gICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7Ci0g
ICAgfSBlbHNlIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApIHsKLSAg
ICAgICAgYnl0ZXMgPSBhcmVhICogMjsKLSAgICAgICAgc3RyaWRlID0gdyAqIDI7Ci0gICAgICAg
IGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IxNl81NjU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
RVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAlZCIsIGNzcGFjZSk7Ci0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIH0KLQotICAgIERCRygic2l6ZTogJWR4JWQgKCVkKSwgem9vbTogJWYsIGNzcGFj
ZT0lZCIsIHcsIGgsIGFyZWEsIChkb3VibGUpem9vbSwgY3NwYWNlKTsKLQotICAgIE1BTExPQ19P
Ul9PT01fUkVUKHQsIHNpemVvZihFd2tfVGlsZSksIE5VTEwpOwotICAgIHQtPmltYWdlID0gZXZh
c19vYmplY3RfaW1hZ2VfYWRkKGV2YXMpOwotCi0gICAgZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2
YXNfZ2V0KGV2YXMpOwotICAgIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVl
KTsKLSAgICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gxMSIpKQotICAg
ICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHQtPmltYWdlLCBFVkFTX0lN
QUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKLQotICAgIHQtPnZpc2libGUgPSAwOwotICAgIHQt
PnVwZGF0ZXMgPSBOVUxMOwotCi0gICAgbWVtc2V0KCZ0LT5zdGF0cywgMCwgc2l6ZW9mKEV3a19U
aWxlX1N0YXRzKSk7Ci0gICAgdC0+c3RhdHMuYXJlYSA9IGFyZWE7Ci0KLSAgICAvKiB1Z2x5LCBi
dXQgbGV0J3MgYXZvaWQgYXQgYWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2Ug
Ki8KLSAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPnc7Ci0gICAgKmVjID0gdzsKLQotICAgIGVj
ID0gKEV2YXNfQ29vcmQgKikmdC0+aDsKLSAgICAqZWMgPSBoOwotCi0gICAgZWNzID0gKEV2YXNf
Q29sb3JzcGFjZSAqKSZ0LT5jc3BhY2U7Ci0gICAgKmVjcyA9IGNzcGFjZTsKLQotICAgIGYgPSAo
ZmxvYXQgKikmdC0+em9vbTsKLSAgICAqZiA9IHpvb207Ci0KLSAgICBzID0gKHNpemVfdCAqKSZ0
LT5ieXRlczsKLSAgICAqcyA9IGJ5dGVzOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9z
ZXQodC0+aW1hZ2UsIHQtPncsIHQtPmgpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3Bh
Y2Vfc2V0KHQtPmltYWdlLCB0LT5jc3BhY2UpOwotICAgIHQtPnBpeGVscyA9IGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfZ2V0KHQtPmltYWdlLCBFSU5BX1RSVUUpOwotICAgIHQtPnN1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0LT5waXhlbHMsIGZvcm1hdCwgdywg
aCwgc3RyaWRlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyh0LT5zdXJmYWNl
KTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7Ci0gICAgICAgIEVS
UigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsCi0gICAgICAgICAgICBjYWly
b19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAgICAgICBmcmVlKHQpOwotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJm
YWNlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8pOwotICAgIGlmIChzdGF0
dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3Jl
YXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKLSAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKHQtPmltYWdlKTsKLSAgICAgICAgZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOwotCi0gICAgcmV0dXJu
IHQ7Ci19Ci0KLS8qKgotICogRnJlZSB0aWxlIG1lbW9yeS4KLSAqLwotdm9pZCBld2tfdGlsZV9m
cmVlKEV3a19UaWxlICp0KQotewotICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOwotCi0g
ICAgaWYgKHQtPnVwZGF0ZXMpCi0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsK
LQotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKLSAgICBjYWlyb19kZXN0
cm95KHQtPmNhaXJvKTsKLSAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOwotICAgIGZyZWUo
dCk7Ci19Ci0KLS8qKgotICogTWFrZSB0aGUgdGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRz
IGNvdW50ZXIuCi0gKi8KLXZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSAqdCkKLXsKLSAgICB0
LT52aXNpYmxlKys7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyh0LT5pbWFnZSk7Ci19Ci0KLS8qKgot
ICogRGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBpbnZpc2libGUg
aWYgbmVjZXNzYXJ5LgotICovCi12b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpCi17Ci0g
ICAgdC0+dmlzaWJsZS0tOwotICAgIGlmICghdC0+dmlzaWJsZSkKLSAgICAgICAgZXZhc19vYmpl
Y3RfaGlkZSh0LT5pbWFnZSk7Ci19Ci0KLS8qKgotICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhl
IHRpbGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KLUVpbmFfQm9vbCBl
d2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKLXsKLSAgICByZXR1cm4gISF0LT52aXNp
YmxlOwotfQotCi0vKioKLSAqIE1hcmsgd2hvbGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5n
IHVwZGF0ZS4KLSAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKLXsK
LSAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0LT5z
dGF0cy5taXNzZXMrKzsKLQotICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKLSAgICAg
ICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRh
dGVzKSB7Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAg
ICAgICB0LT51cGRhdGVzID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLyoqCi0gKiBN
YXJrIHRoZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgot
ICovCi12b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqcikKLXsKLSAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRl
cz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMrKzsKLQotICAgIGlmICh0LT5zdGF0cy5mdWxsX3Vw
ZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncg
PT0gdC0+dyAmJiByLT5oID09IHQtPmgpIHsKLSAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUg
PSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBlaW5h
X3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAgICAgICB0LT51cGRhdGVzID0gTlVMTDsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF0LT51cGRhdGVz
KSB7Ci0gICAgICAgIHQtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKLSAg
ICAgICAgaWYgKCF0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90
IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHQtPncsIHQtPmgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRh
dGVzLCByKTsKLX0KLQotLyoqCi0gKiBGb3IgZWFjaCB1cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUg
Z2l2ZW4gZnVuY3Rpb24uCi0gKgotICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3Rh
dGlzdGljcyBvciBjbGVhciB0aGUgcHJvY2Vzc2VkCi0gKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVf
dXBkYXRlc19jbGVhcigpIGZvciB0aGF0LgotICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJv
Y2VzcyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29u
c3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgaWYg
KHQtPnN0YXRzLmZ1bGxfdXBkYXRlKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7Ci0gICAg
ICAgIHIueCA9IDA7Ci0gICAgICAgIHIueSA9IDA7Ci0gICAgICAgIHIudyA9IHQtPnc7Ci0gICAg
ICAgIHIuaCA9IHQtPmg7Ci0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCi0g
ICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWV2OwotICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0
OwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCBOVUxMKTsKLSAgICAgICAgcmVuZGVyX3N0
YXJ0ID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwotICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2
LnR2X3VzZWMpIC8gMTAwMDAwMCk7Ci0jZW5kaWYKLSAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0
LCAmcik7Ci0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCi0gICAgICAgIGdl
dHRpbWVvZmRheSgmdGltZXYsIE5VTEwpOwotICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9
IChkb3VibGUpdGltZXYudHZfc2VjICsKLSAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91
c2VjKSAvIDEwMDAwMDApIC0gcmVuZGVyX3N0YXJ0OwotI2VuZGlmCi0gICAgfSBlbHNlIGlmICh0
LT51cGRhdGVzKSB7Ci0gICAgICAgIEVpbmFfSXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRl
cmF0b3JfbmV3KHQtPnVwZGF0ZXMpOwotICAgICAgICBFaW5hX1JlY3RhbmdsZSAqcjsKLSAgICAg
ICAgaWYgKCFpdHIpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRp
bGVyIGl0ZXJhdG9yISIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdHIsIHIpCi0gICAgICAgICAgICBjYigodm9pZCAqKWRh
dGEsIHQsIHIpOwotICAgICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKLSAgICB9Ci19Ci0K
LS8qKgotICogQ2xlYXIgYWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCi0gKgotICogVGhp
cyB3aWxsIGNoYW5nZSB0aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1p
c3NlcwotICogYW5kIHVuc2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0
ZWQsIHRoZW4gaXQgd2lsbCBiZQotICogZGVzdHJveWVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24g
aXMgdXN1YWxseSBjYWxsZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKLSAq
IGNhbGxlZC4KLSAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQot
ewotICAgIC8qIFRPRE86IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVzPyAqLwot
ICAgIHQtPnN0YXRzLm1pc3NlcyA9IDA7Ci0KLSAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUp
Ci0gICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gMDsKLSAgICBlbHNlIGlmICh0LT51cGRh
dGVzKSB7Ci0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKLSAgICAgICAgdC0+
dXBkYXRlcyA9IE5VTEw7Ci0gICAgfQotfQotCi10eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5IEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKLXN0cnVjdCBfRXdr
X1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IHsKLSAgICBFd2tfVGlsZSAqdGlsZTsKLSAgICBpbnQg
d2VpZ2h0OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdr
X1RpbGUgKnQpOwotICAgICAgICB2b2lkICpkYXRhOwotICAgIH0gdGlsZV9mcmVlOwotfTsKLQot
c3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgewotICAgIHN0cnVjdCB7Ci0gICAgICAgIEVp
bmFfTGlzdCAqbGlzdDsKLSAgICAgICAgc2l6ZV90IGNvdW50OwotICAgICAgICBzaXplX3QgYWxs
b2NhdGVkOwotICAgIH0gZW50cmllczsKLSAgICBzdHJ1Y3QgewotICAgICAgICBzaXplX3QgbWF4
OyAgLyoqPCB3YXRlcm1hcmsgKGluIGJ5dGVzKSB0byBzdGFydCBmcmVlaW5nIHRpbGVzICovCi0g
ICAgICAgIHNpemVfdCB1c2VkOyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3JlIHRoYW4gbWF4LiAq
LwotICAgIH0gbWVtb3J5OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwg
dywgaDsKLSAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgRWluYV9Cb29sIGxvY2tlZDsKLSAg
ICB9IGxvY2tlZDsKLSAgICBpbnQgcmVmZXJlbmNlczsKLSAgICB1bnNpZ25lZCBpbnQgZnJvemVu
OwotfTsKLQotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9J
TklUSUFMID0gMTI4Owotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExP
Q0FURV9TVEVQID0gMTY7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01B
WF9GUkVFID0gMzI7Ci0KLS8qKgotICogQ2FjaGUgb2YgdW51c2VkIHRpbGVzICh0aG9zZSB0aGF0
IGFyZSBub3QgdmlzaWJsZSkuCi0gKgotICogVGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KLSAq
Ci0gKiBAcGFyYW0gbWF4IGNhY2hlIHNpemUgaW4gYnl0ZXMuCi0gKgotICogQHJldHVybiBuZXds
eSBhbGxvY2F0ZWQgY2FjaGUgb2YgdW51c2VkIHRpbGVzLCB1c2UKLSAqICAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4gSWYgbm90Ci0gKiAg
ICAgICAgIHBvc3NpYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSwgQGMgTlVMTCBpcyByZXR1cm5lZC4K
LSAqLwotRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNp
emVfdCBtYXgpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0KLSAgICBDQUxM
T0NfT1JfT09NX1JFVCh0dWMsIHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUpLCBOVUxMKTsK
LQotICAgIERCRygidHVjPSVwIiwgdHVjKTsKLSAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7Ci0g
ICAgdHVjLT5yZWZlcmVuY2VzID0gMTsKLSAgICByZXR1cm4gdHVjOwotfQotCi12b2lkIGV3a190
aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxv
YXQgem9vbSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotCi0gICAg
dHVjLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVFOwotICAgIHR1Yy0+bG9ja2VkLnggPSB4Owot
ICAgIHR1Yy0+bG9ja2VkLnkgPSB5OwotICAgIHR1Yy0+bG9ja2VkLncgPSB3OwotICAgIHR1Yy0+
bG9ja2VkLmggPSBoOwotICAgIHR1Yy0+bG9ja2VkLnpvb20gPSB6b29tOwotfQotCi12b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotCi0gICAgdHVjLT5s
b2NrZWQubG9ja2VkID0gRUlOQV9GQUxTRTsKLX0KLQotLyoqCi0gKiBGcmVlIGNhY2hlIG9mIHVu
dXNlZCB0aWxlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBi
eSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYKLSAqIGZ1bmN0aW9uLiBDYWxsaW5nIHRoaXMg
ZnVuY3Rpb24gd2l0aG91dCBjb25zaWRlcmluZyByZWZlcmVuY2UgY291bnRpbmcKLSAqIG1heSBs
ZWFkIHRvIHVua25vd24gcmVzdWx0cy4KLSAqCi0gKiBUaG9zZSB0aWxlcyB0aGF0IGFyZSBzdGls
bCB2aXNpYmxlIHdpbGwgcmVtYWluIGxpdmUuIFRoZSB1bnVzZWQKLSAqIHRpbGVzIHdpbGwgYmUg
ZnJlZWQuCi0gKgotICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQotICovCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLQotICAg
IERCRygidHVjPSVwLCAiCi0gICAgICAgICJlbnRyaWVzPShjb3VudDolemQsIGFsbG9jYXRlZDol
emQpLCAiCi0gICAgICAgICJtZW1vcnk9KG1heDolemQsIHVzZWQ6JXpkKSIsCi0gICAgICAgIHR1
YywgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAotICAgICAgICB0
dWMtPm1lbW9yeS5tYXgsIHR1Yy0+bWVtb3J5LnVzZWQpOwotCi0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2NsZWFyKHR1Yyk7Ci0gICAgZnJlZSh0dWMpOwotfQotCi0vKioKLSAqIENsZWFyIGNh
Y2hlIG9mIHVudXNlZCB0aWxlcy4KLSAqCi0gKiBBbnkgdGlsZXMgdGhhdCBhcmUgaW4gdGhlIGNh
Y2hlIGFyZSBmcmVlZC4gVGhlIG9ubHkgdGlsZXMgdGhhdCBhcmUKLSAqIGtlcHQgYXJlIHRob3Nl
IHRoYXQgYXJlbid0IGluIHRoZSBjYWNoZSAoaS5lLiB0aGF0IGFyZSB2aXNpYmxlKS4KLSAqLwot
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLQotICAgIGlmICghdHVjLT5lbnRyaWVzLmNvdW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBFSU5BX0xJU1RfRlJFRSh0dWMtPmVudHJpZXMubGlz
dCwgaXRyKSB7Ci0gICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVlLmRhdGEs
IGl0ci0+dGlsZSk7Ci0gICAgICAgIGZyZWUoaXRyKTsKLSAgICB9Ci0KLSAgICB0dWMtPm1lbW9y
eS51c2VkID0gMDsKLSAgICB0dWMtPmVudHJpZXMuY291bnQgPSAwOwotfQotCi0vKioKLSAqIEhv
bGQgcmVmZXJlbmNlIHRvIGNhY2hlLgotICoKLSAqIEByZXR1cm4gc2FtZSBwb2ludGVyIGFzIHRh
a2VuLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKLSAqLwotRXdr
X1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0
dWMsIE5VTEwpOwotICAgIHR1Yy0+cmVmZXJlbmNlcysrOwotICAgIHJldHVybiB0dWM7Ci19Ci0K
LS8qKgotICogUmVsZWFzZSBjYWNoZSByZWZlcmVuY2UsIGZyZWVpbmcgaXQgaWYgaXQgZHJvcHMg
dG8gemVyby4KLSAqCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoKQotICogQHNl
ZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpCi0gKi8KLXZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0gICAgdHVjLT5yZWZlcmVuY2VzLS07Ci0gICAgaWYg
KCF0dWMtPnJlZmVyZW5jZXMpCi0gICAgICAgIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSh0
dWMpOwotfQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgbWF4KQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHR1Yyk7Ci0gICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OwotfQotCi1zaXplX3QgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Ci0gICAg
cmV0dXJuIHR1Yy0+bWVtb3J5Lm1heDsKLX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNo
ZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKLSAgICByZXR1cm4gdHVjLT5tZW1v
cnkudXNlZDsKLX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQotewotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSAqaXRyOwotICAgIEVpbmFfTGlzdCAqbCwgKmxfbmV4dDsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKLSAgICBzaXplX3QgZG9uZTsKLSAg
ICB1bnNpZ25lZCBpbnQgY291bnQ7Ci0KLSAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGJ5dGVzIDwgMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvKgotICAgICAqIE5PVEU6IHRoZSBjYWNoZSBpcyBhIEZJRk8gcXVldWUgY3VycmVudGx5
LgotICAgICAqIERvbid0IG5lZWQgdG8gc29ydCBhbnkgbW9yZS4KLSAgICAgKi8KLQotICAgIGRv
bmUgPSAwOwotICAgIGNvdW50ID0gMDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+
ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0cikgewotICAgICAgICBFd2tfVGlsZSAqdCA9IGl0
ci0+dGlsZTsKLSAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBpZiAodHVjLT5sb2NrZWQubG9ja2VkCi0gICAgICAgICAgICAmJiB0LT54ICsgdC0+
dyA+IHR1Yy0+bG9ja2VkLngKLSAgICAgICAgICAgICYmIHQtPnkgKyB0LT5oID4gdHVjLT5sb2Nr
ZWQueQotICAgICAgICAgICAgJiYgdC0+eCA8IHR1Yy0+bG9ja2VkLnggKyB0dWMtPmxvY2tlZC53
Ci0gICAgICAgICAgICAmJiB0LT55IDwgdHVjLT5sb2NrZWQueSArIHR1Yy0+bG9ja2VkLmgKLSAg
ICAgICAgICAgICYmIHQtPnpvb20gPT0gdHVjLT5sb2NrZWQuem9vbSkgewotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZSArPSBzaXplb2YoRXdrX1RpbGUpICsg
aXRyLT50aWxlLT5ieXRlczsKLSAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2Zy
ZWUuZGF0YSwgaXRyLT50aWxlKTsKLSAgICAgICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xp
c3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGwpOwotICAgICAgICBmcmVlKGl0cik7
Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotCi0gICAgdHVjLT5tZW1vcnkudXNlZCAtPSBkb25l
OwotICAgIHR1Yy0+ZW50cmllcy5jb3VudCAtPSBjb3VudDsKLQotICAgIHJldHVybiBkb25lOwot
fQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0g
ICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPD0gdHVjLT5tZW1vcnkubWF4KQotICAgICAgICByZXR1
cm47Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKHR1YywgdHVjLT5tZW1vcnkudXNl
ZCAtIHR1Yy0+bWVtb3J5Lm1heCk7Ci0gICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPiB0dWMtPm1l
bW9yeS5tYXgpCi0gICAgICAgIENSSVRJQ0FMKCJDYWNoZSBzdGlsbCB1c2luZyB0b28gbXVjaCBt
ZW1vcnk6ICV6ZCBLQjsgbWF4OiAlemQgS0IiLAotICAgICAgICAgICAgICAgICB0dWMtPm1lbW9y
eS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOwotfQotCi0vKioKLSAqIEZyZWV6ZSBjYWNoZSB0byBu
b3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCi0gKgotICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1p
emUgY2FjaGUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93IHdlIHNob3VsZAotICogaG9sZCBvbiB0
aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6
ZQotICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgotICoK
LSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoKQotICovCi12b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAg
dHVjLT5mcm96ZW4rKzsKLX0KLQotLyoqCi0gKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3Mu
Ci0gKgotICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4g
bWFpbnRlbmFuY2UgdGFza3MKLSAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgotICovCi12b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewot
ICAgIGlmICghdHVjLT5mcm96ZW4pIHsKLSAgICAgICAgRVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBm
cmVlemluZyEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHR1Yy0+ZnJvemVuLS07
Ci19Ci0KLS8qKgotICogR2V0IHRpbGUgZnJvbSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIHJlbW92
aW5nIGl0IGZyb20gdGhlIGNhY2hlLgotICoKLSAqIElmIHRoZSB0aWxlIGlzIHVzZWQsIHRoZW4g
aXQncyBub3QgaW4gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCBzbyBpdAotICogaXMgcmVtb3ZlZCBm
cm9tIHRoZSBjYWNoZSBhbmQgbWF5IGJlIGdpdmVuIGJhY2sgd2l0aAotICogZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RpbGVfcHV0KCkuCi0gKgotICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMKLSAqIEBwYXJhbSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUuCi0gKgotICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KLSAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90
aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQpCi17Ci0gICAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICplbnRyeTsKLSAgICBFaW5hX0xpc3QgKmUsICps
OwotCi0gICAgZSA9IE5VTEw7Ci0gICAgRUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxp
c3QsIGwsIGVudHJ5KQotICAgIHsKLSAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHQpIHsKLSAg
ICAgICAgICAgIGUgPSBsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKCFlKSB7Ci0gICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4gY2FjaGUgJXAi
LCB0LCB0dWMpOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICB0dWMt
PmVudHJpZXMuY291bnQtLTsKLSAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNpemVvZihFd2tfVGls
ZSkgKyB0LT5ieXRlczsKLSAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1vdmVf
bGlzdCh0dWMtPmVudHJpZXMubGlzdCwgZSk7Ci0gICAgZnJlZShlbnRyeSk7Ci0KLSAgICByZXR1
cm4gRUlOQV9UUlVFOwotfQotCi0vKioKLSAqIFB1dCB0aWxlIGludG8gY2FjaGUgb2YgdW51c2Vk
IHRpbGVzLCBhZGRpbmcgaXQgdG8gdGhlIGNhY2hlLgotICoKLSAqIFRoaXMgc2hvdWxkIGJlIGNh
bGxlZCB3aGVuIEBjIHQtPnZpc2libGUgaXMgQGMgMCBhbmQgbm8gb2JqZWN0cyBhcmUKLSAqIHVz
aW5nIHRoZSB0aWxlIGFueW1vcmUsIG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYmUgZXhwaXJlZCBh
bmQgaGF2ZQotICogaXRzIG1lbW9yeSByZXBsYWNlZC4KLSAqCi0gKiBOb3RlIHRoYXQgdGlsZXMg
YXJlIG5vdCBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgaWYgY2FjaGUgaXMgZnVsbCwKLSAqIGluc3Rl
YWQgdGhlIGNhY2hlIHdpbGwgaGF2ZSBtb3JlIGJ5dGVzIHVzZWQgdGhhbiBtYXhpbXVtIGFuZCBv
bmUKLSAqIGNhbiBjYWxsIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkgdG8gZnJl
ZSB0aGVtLiBUaGlzIGlzIGRvbmUKLSAqIGJlY2F1c2UgdXN1YWxseSB3ZSB3YW50IGEgbGF6eSBv
cGVyYXRpb24gZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAqCi0gKiBAcGFyYW0gdHVjIGNhY2hl
IG9mIHVudXNlZCB0aWxlcwotICogQHBhcmFtIHQgdGlsZSB0byBiZSBhZGRlZCB0byBjYWNoZS4K
LSAqIEBwYXJhbSB0aWxlX2ZyZWVfY2IgZnVuY3Rpb24gdXNlZCB0byBmcmVlIHRpbGVzLgotICog
QHBhcmFtIGRhdGEgY29udGV4dCB0byBnaXZlIGJhY2sgdG8gQGEgdGlsZV9mcmVlX2NiIGFzIGZp
cnN0IGFyZ3VtZW50LgotICoKLSAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlO
QV9GQUxTRSBvdGhlcndpc2UuIElmIEBjIHQtPnZpc2libGUKLSAqICAgICAgICAgaXMgbm90ICNF
SU5BX0ZBTFNFLCB0aGVuIGl0IHdpbGwgcmV0dXJuICNFSU5BX0ZBTFNFLgotICoKLSAqIEBzZWUg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKQotICovCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tf
VGlsZSAqdCwgdm9pZCAoKnRpbGVfZnJlZV9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpLCBj
b25zdCB2b2lkICpkYXRhKQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqZTsK
LQotICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51
c2VkICh2aXNpYmxlPSVkKSIsIHQsIHQtPnZpc2libGUpOwotICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKLSAgICB9Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChlLCBzaXplb2YoRXdrX1RpbGVf
VW51c2VkX0NhY2hlX0VudHJ5KSwgRUlOQV9GQUxTRSk7Ci0gICAgdHVjLT5lbnRyaWVzLmxpc3Qg
PSBlaW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKLSAgICBpZiAoZWluYV9l
cnJvcl9nZXQoKSkgewotICAgICAgICBFUlIoIkxpc3QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgZS0+dGlsZSA9IHQ7Ci0gICAg
ZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCi0gICAgZS0+
dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOwotICAgIGUtPnRpbGVfZnJlZS5kYXRhID0gKHZv
aWQgKilkYXRhOwotCi0gICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7Ci0gICAgdHVjLT5tZW1vcnku
dXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7Ci0KLSAgICByZXR1cm4gRUlOQV9U
UlVFOwotfQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICpp
dHI7Ci0gICAgRWluYV9MaXN0ICpsOwotICAgIGludCBjb3VudCA9IDA7Ci0gICAgcHJpbnRmKCJD
YWNoZSBvZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9yeTogJXp1LyV6dVxu
IiwKLSAgICAgICAgICAgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVk
LAotICAgICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOwotCi0gICAg
RUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0cikgewotICAgICAgICBj
b25zdCBFd2tfVGlsZSAqdCA9IGl0ci0+dGlsZTsKLSAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNs
dSArICVkeCVkIEAgJTAuM2ZdJWMiLAotICAgICAgICAgICAgICAgdC0+Y29sLCB0LT5yb3csIHQt
PncsIHQtPmgsIHQtPnpvb20sCi0gICAgICAgICAgICAgICB0LT52aXNpYmxlID8gJyonOiAnICcp
OwotCi0gICAgICAgIGlmICghKGNvdW50ICUgNCkpCi0gICAgICAgICAgICBwcmludGYoIlxuIik7
Ci0gICAgfQotCi0gICAgcHJpbnRmKCJcbiIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3RpbGVkX21vZGVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTY4NTcyOTQwODk5YmRiZTg3MWQ2MzAxZmZk
Y2IxNGFjNDUzYmJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tb2RlbC5jcHAKQEAgLTAsMCArMSw4NTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAwOS0y
MDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgImV3a190aWxlZF9tb2RlbC5oIgorCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVj
b3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hl
Y2tzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+IC8vIFhYWCBSRU1PVkUgTUUgTEFURVIKKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJf
VElNRQorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKworI2RlZmluZSBJRFgoY29sLCBy
b3csIHJvd3NwYW4pIChjb2wgKyAocm93ICogcm93c3BhbikpCisKKyNpZmRlZiBERUJVR19NRU1f
TEVBS1MKK3N0YXRpYyB1aW50NjRfdCB0aWxlc19hbGxvY2F0ZWQgPSAwOworc3RhdGljIHVpbnQ2
NF90IHRpbGVzX2ZyZWVkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRlc19hbGxvY2F0ZWQgPSAw
Oworc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2ZyZWVkID0gMDsKKworc3RydWN0IHRpbGVfYWNjb3Vu
dCB7CisgICAgRXZhc19Db29yZCBzaXplOworICAgIHN0cnVjdCB7CisgICAgICAgIHVpbnQ2NF90
IGFsbG9jYXRlZDsKKyAgICAgICAgdWludDY0X3QgZnJlZWQ7CisgICAgfSB0aWxlcywgYnl0ZXM7
Cit9OworCitzdGF0aWMgc2l6ZV90IGFjY291bnRpbmdfbGVuID0gMDsKK3N0YXRpYyBzdHJ1Y3Qg
dGlsZV9hY2NvdW50ICphY2NvdW50aW5nID0gMDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGls
ZV9hY2NvdW50ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCit7Cisg
ICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjOworICAgIHNpemVfdCBpOworCisgICAgZm9yIChp
ID0gMDsgaSA8IGFjY291bnRpbmdfbGVuOyBpKyspIHsKKyAgICAgICAgaWYgKGFjY291bnRpbmdb
aV0uc2l6ZSA9PSB0LT53KQorICAgICAgICAgICAgcmV0dXJuIGFjY291bnRpbmcgKyBpOworICAg
IH0KKworICAgIGkgPSAoYWNjb3VudGluZ19sZW4gKyAxKSAqIHNpemVvZihzdHJ1Y3QgdGlsZV9h
Y2NvdW50KTsKKyAgICBSRUFMTE9DX09SX09PTV9SRVQoYWNjb3VudGluZywgaSwgMCk7CisKKyAg
ICBhY2MgPSBhY2NvdW50aW5nICsgYWNjb3VudGluZ19sZW47CisgICAgYWNjLT5zaXplID0gdC0+
dzsKKyAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCA9IDA7CisgICAgYWNjLT50aWxlcy5mcmVlZCA9
IDA7CisgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgPSAwOworICAgIGFjYy0+Ynl0ZXMuZnJlZWQg
PSAwOworCisgICAgYWNjb3VudGluZ19sZW4rKzsKKworICAgIHJldHVybiBhY2M7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1Rp
bGUgKnQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2FjY291
bnRfZ2V0KHQpOworICAgIGlmICghYWNjKQorICAgICAgICByZXR1cm47CisgICAgYWNjLT5ieXRl
cy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQrKzsKKwor
ICAgIGJ5dGVzX2FsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICB0aWxlc19hbGxvY2F0ZWQrKzsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3
a19UaWxlICp0KQoreworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9IF9ld2tfdGlsZV9h
Y2NvdW50X2dldCh0KTsKKyAgICBpZiAoIWFjYykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWNj
LT5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPnRpbGVzLmZyZWVkKys7CisKKyAg
ICBieXRlc19mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0aWxlc19mcmVlZCsrOworfQorCit2b2lk
IGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3Vu
dCAqYWNjOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY19lbmQ7CisKKyAgICBwcmludGYo
IlRJTEUgQkFMQU5DRTogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgor
ICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il1cbiIsCisg
ICAgICAgICAgICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2ZyZWVkLCB0aWxlc19hbGxvY2F0ZWQg
LSB0aWxlc19mcmVlZCwKKyAgICAgICAgICAgIGJ5dGVzX2FsbG9jYXRlZCwgYnl0ZXNfZnJlZWQs
IGJ5dGVzX2FsbG9jYXRlZCAtIGJ5dGVzX2ZyZWVkKTsKKworICAgIGlmICghYWNjb3VudGluZ19s
ZW4pCisgICAgICAgIHJldHVybjsKKworICAgIGFjYyA9IGFjY291bnRpbmc7CisgICAgYWNjX2Vu
ZCA9IGFjYyArIGFjY291bnRpbmdfbGVuOworICAgIHByaW50ZigiQkVHSU46IFRJTEUgQkFMQU5D
RSBERVRBSUxTIChUTyBUSElTIE1PTUVOVCEpOlxuIik7CisgICAgZm9yICg7IGFjYyA8IGFjY19l
bmQ7IGFjYysrKSB7CisgICAgICAgIHVpbnQ2NF90IHRpbGVzLCBieXRlczsKKworICAgICAgICB0
aWxlcyA9IGFjYy0+dGlsZXMuYWxsb2NhdGVkIC0gYWNjLT50aWxlcy5mcmVlZDsKKyAgICAgICAg
Ynl0ZXMgPSBhY2MtPmJ5dGVzLmFsbG9jYXRlZCAtIGFjYy0+Ynl0ZXMuZnJlZWQ7CisKKyAgICAg
ICAgcHJpbnRmKCIgICAlNGQ6IHRpbGVzWyslNCJQUkl1NjQiLC0lNCJQUkl1NjQiOiU0IlBSSXU2
NCJdICIKKyAgICAgICAgICAgICAgICJieXRlc1srJTgiUFJJdTY0IiwtJTgiUFJJdTY0IjolOCJQ
Ukl1NjQiXSVzXG4iLAorICAgICAgICAgICAgICAgYWNjLT5zaXplLAorICAgICAgICAgICAgICAg
YWNjLT50aWxlcy5hbGxvY2F0ZWQsIGFjYy0+dGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAg
ICAgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQsIGFjYy0+Ynl0ZXMuZnJlZWQsIGJ5dGVzLAorICAg
ICAgICAgICAgICAgKGJ5dGVzIHx8IHRpbGVzKSA/ICIgUE9TU0lCTEUgTEVBSyIgOiAiIik7Cisg
ICAgfQorICAgIHByaW50ZigiRU5EOiBUSUxFIEJBTEFOQ0UgREVUQUlMUyAoVE8gVEhJUyBNT01F
TlQhKTpcbiIpOworfQorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2Nv
dW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQorCit2b2lkIGV3
a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7CisgICAgcHJpbnRmKCJjb21waWxlIHdlYmtp
dCB3aXRoIERFQlVHX01FTV9MRUFLUyBkZWZpbmVkIVxuIik7Cit9CisjZW5kaWYKKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1RpbGUgKnQsIHVpbnQ4X3Qg
ciwgdWludDhfdCBnLCB1aW50OF90IGIpCit7CisgICAgdWludDMyX3QgKmRzdDMyLCAqZHN0MzJf
ZW5kLCBjMTsKKyAgICB1aW50NjRfdCAqZHN0NjQsICpkc3Q2NF9lbmQsIGMyOworCisgICAgYzEg
PSAweGZmMDAwMDAwIHwgKCh1aW50MzJfdClyIDw8IDE2KSB8ICgodWludDMyX3QpZyA8PCA4KSB8
IGI7CisgICAgYzIgPSAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8IGMxOworCisgICAgZHN0NjQgPSAo
dWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHQtPmJ5dGVz
IC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7
CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCisg
ICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAgIGRzdDY0WzFdID0gYzI7CisgICAgICAgIGRz
dDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNdID0gYzI7CisgICAgICAgIGRzdDY0WzRdID0g
YzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7CisgICAgICAgIGRzdDY0WzZdID0gYzI7CisgICAg
ICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisgICAgZHN0MzIgPSAodWludDMyX3QgKilkc3Q2
NF9lbmQ7CisgICAgZHN0MzJfZW5kID0gKHVpbnQzMl90ICopKHQtPnBpeGVscyArIHQtPmJ5dGVz
KTsKKyAgICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRzdDMyKyspCisgICAgICAgICpkc3Qz
MiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjU2NShF
d2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKK3sKKyAgICB1aW50
MTZfdCAqZHN0MTYsICpkc3QxNl9lbmQsIGMxOworICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0
X2VuZCwgYzI7CisKKyAgICBjMSA9ICgoKChyID4+IDMpICYgMHgxZikgPDwgMTEpIHwKKyAgICAg
ICAgICAoKChnID4+IDIpICYgMHgzZikgPDwgNSkgfAorICAgICAgICAgICgoYiA+PiAzKSAmIDB4
MWYpKTsKKworICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwgKCh1aW50NjRfdCljMSA8
PCAzMikgfAorICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwgYzEpOworCisgICAgZHN0
NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHQt
PmJ5dGVzIC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCAr
PSA4KSB7CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25z
ICovCisgICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAgIGRzdDY0WzFdID0gYzI7CisgICAg
ICAgIGRzdDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNdID0gYzI7CisgICAgICAgIGRzdDY0
WzRdID0gYzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7CisgICAgICAgIGRzdDY0WzZdID0gYzI7
CisgICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisgICAgZHN0MTYgPSAodWludDE2X3Qg
Kilkc3QxNl9lbmQ7CisgICAgZHN0MTZfZW5kID0gKHVpbnQxNl90ICopKHQtPnBpeGVscyArIHQt
PmJ5dGVzKTsKKyAgICBmb3IgKDsgZHN0MTYgPCBkc3QxNl9lbmQ7IGRzdDE2KyspCisgICAgICAg
ICpkc3QxNiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3
a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQoreworICAgIGlmICh0
LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KQorICAgICAgICBfZXdrX3RpbGVf
cGFpbnRfcmdiODg4KHQsIHIsIGcsIGIpOworICAgIGVsc2UgaWYgKHQtPmNzcGFjZSA9PSBFVkFT
X0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkKKyAgICAgICAgX2V3a190aWxlX3BhaW50X3JnYjU2NSh0
LCByLCBnLCBiKTsKKyAgICBlbHNlCisgICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTog
JWQiLCB0LT5jc3BhY2UpOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyB0aWxlIG9mIGdpdmVu
IHNpemUsIHpvb20gbGV2ZWwgYW5kIGNvbG9yc3BhY2UuCisgKgorICogQWZ0ZXIgY3JlYXRlZCB0
aGVzZSBwcm9wZXJ0aWVzIGFyZSBpbW11dGFibGUgYXMgdGhleSdyZSB0aGUgYmFzaWMKKyAqIGNo
YXJhY3RlcmlzdGljIG9mIHRoZSB0aWxlIGFuZCBhbnkgY2hhbmdlIHdpbGwgbGVhZCB0byBpbnZh
bGlkCisgKiBtZW1vcnkgYWNjZXNzLgorICoKKyAqIE90aGVyIG1lbWJlcnMgYXJlIG9mIGZyZWUt
YWNjZXNzIGFuZCBubyBnZXR0ZXJzL3NldHRlcnMgYXJlCisgKiBwcm92aWRlZCBpbiBvcmRlcnIg
dG8gYXZvaWQgZXhwZW5zaXZlIG9wZXJhdGlvbnMgb24gdGhvc2UsIGhvd2V2ZXIKKyAqIHNvbWUg
YXJlIGJldHRlciBtYW5pcHVsYXRlZCB3aXRoIHByb3ZpZGVkIGZ1bmN0aW9ucywgc3VjaCBhcwor
ICogZXdrX3RpbGVfc2hvdygpIGFuZCBld2tfdGlsZV9oaWRlKCkgdG8gY2hhbmdlCisgKiBAYyB2
aXNpYmxlIG9yIGV3a190aWxlX3VwZGF0ZV9mdWxsKCksIGV3a190aWxlX3VwZGF0ZV9hcmVhKCks
CisgKiBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkgdG8gY2hhbmdlIEBjIHN0YXRzLm1pc3NlcywK
KyAqIEBjIHN0YXRzLmZ1bGxfdXBkYXRlIGFuZCBAYyB1cGRhdGVzLgorICovCitFd2tfVGlsZSAq
ZXdrX3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9h
dCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlKQoreworICAgIEV2YXNfQ29vcmQgKmVjOwor
ICAgIEV2YXNfQ29sb3JzcGFjZSAqZWNzOworICAgIGZsb2F0ICpmOworICAgIHNpemVfdCAqczsK
KyAgICBFd2tfVGlsZSAqdDsKKyAgICB1bnNpZ25lZCBpbnQgYXJlYTsKKyAgICBzaXplX3QgYnl0
ZXM7CisgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OworICAgIGNhaXJvX3N0YXR1c190IHN0YXR1
czsKKyAgICBpbnQgc3RyaWRlOworICAgIEVjb3JlX0V2YXMgKmVlOworICAgIGNvbnN0IGNoYXIg
KmVuZ2luZTsKKworICAgIGFyZWEgPSB3ICogaDsKKworICAgIGlmIChjc3BhY2UgPT0gRVZBU19D
T0xPUlNQQUNFX0FSR0I4ODg4KSB7CisgICAgICAgIGJ5dGVzID0gYXJlYSAqIDQ7CisgICAgICAg
IHN0cmlkZSA9IHcgKiA0OworICAgICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwor
ICAgIH0gZWxzZSBpZiAoY3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKSB7Cisg
ICAgICAgIGJ5dGVzID0gYXJlYSAqIDI7CisgICAgICAgIHN0cmlkZSA9IHcgKiAyOworICAgICAg
ICBmb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMTZfNTY1OworICAgIH0gZWxzZSB7CisgICAgICAg
IEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQiLCBjc3BhY2UpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBEQkcoInNpemU6ICVkeCVkICglZCksIHpvb206ICVmLCBjc3BhY2U9
JWQiLCB3LCBoLCBhcmVhLCAoZG91YmxlKXpvb20sIGNzcGFjZSk7CisKKyAgICB0ID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGUqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlKSkpOworICAgIGlmICghdCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0LT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2Fk
ZChldmFzKTsKKworICAgIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAg
ICBlbmdpbmUgPSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlZSk7CisgICAgaWYgKGVuZ2lu
ZSAmJiAhc3RyY21wKGVuZ2luZSwgIm9wZW5nbF94MTEiKSkKKyAgICAgICAgZXZhc19vYmplY3Rf
aW1hZ2VfY29udGVudF9oaW50X3NldCh0LT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRf
RFlOQU1JQyk7CisKKyAgICB0LT52aXNpYmxlID0gMDsKKyAgICB0LT51cGRhdGVzID0gMDsKKwor
ICAgIG1lbXNldCgmdC0+c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9TdGF0cykpOworICAgIHQt
PnN0YXRzLmFyZWEgPSBhcmVhOworCisgICAgLyogdWdseSwgYnV0IGxldCdzIGF2b2lkIGF0IGFs
bCBjb3N0cyBoYXZpbmcgdXNlcnMgdG8gbW9kaWZ5IHRob3NlICovCisgICAgZWMgPSAoRXZhc19D
b29yZCAqKSZ0LT53OworICAgICplYyA9IHc7CisKKyAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQt
Pmg7CisgICAgKmVjID0gaDsKKworICAgIGVjcyA9IChFdmFzX0NvbG9yc3BhY2UgKikmdC0+Y3Nw
YWNlOworICAgICplY3MgPSBjc3BhY2U7CisKKyAgICBmID0gKGZsb2F0ICopJnQtPnpvb207Cisg
ICAgKmYgPSB6b29tOworCisgICAgcyA9IChzaXplX3QgKikmdC0+Ynl0ZXM7CisgICAgKnMgPSBi
eXRlczsKKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHQtPmltYWdlLCB0LT53LCB0
LT5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0LT5pbWFnZSwgdC0+
Y3NwYWNlKTsKKyAgICB0LT5waXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZXZhc19vYmpl
Y3RfaW1hZ2VfZGF0YV9nZXQodC0+aW1hZ2UsIEVJTkFfVFJVRSkpOworICAgIHQtPnN1cmZhY2Ug
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0LT5waXhlbHMsIGZvcm1hdCwg
dywgaCwgc3RyaWRlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyh0LT5zdXJm
YWNlKTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAg
IEVSUigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsCisgICAgICAgICAgICBj
YWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOworICAgICAgICBmcmVlKHQpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJm
YWNlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8pOworICAgIGlmIChzdGF0
dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3Jl
YXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKHQtPmltYWdlKTsKKyAgICAgICAgZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOworCisgICAgcmV0dXJuIHQ7
Cit9CisKKy8qKgorICogRnJlZSB0aWxlIG1lbW9yeS4KKyAqLwordm9pZCBld2tfdGlsZV9mcmVl
KEV3a19UaWxlICp0KQoreworICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOworCisgICAg
aWYgKHQtPnVwZGF0ZXMpCisgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKwor
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKKyAgICBjYWlyb19kZXN0cm95
KHQtPmNhaXJvKTsKKyAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOworICAgIGZyZWUodCk7
Cit9CisKKy8qKgorICogTWFrZSB0aGUgdGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRzIGNv
dW50ZXIuCisgKi8KK3ZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSAqdCkKK3sKKyAgICB0LT52
aXNpYmxlKys7CisgICAgZXZhc19vYmplY3Rfc2hvdyh0LT5pbWFnZSk7Cit9CisKKy8qKgorICog
RGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBpbnZpc2libGUgaWYg
bmVjZXNzYXJ5LgorICovCit2b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpCit7CisgICAg
dC0+dmlzaWJsZS0tOworICAgIGlmICghdC0+dmlzaWJsZSkKKyAgICAgICAgZXZhc19vYmplY3Rf
aGlkZSh0LT5pbWFnZSk7Cit9CisKKy8qKgorICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhlIHRp
bGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tf
dGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKK3sKKyAgICByZXR1cm4gISF0LT52aXNpYmxl
OworfQorCisvKioKKyAqIE1hcmsgd2hvbGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5nIHVw
ZGF0ZS4KKyAqLwordm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKK3sKKyAg
ICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KKyAgICB0LT5zdGF0
cy5taXNzZXMrKzsKKworICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKKyAgICAgICAg
dC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CisgICAgICAgIGlmICh0LT51cGRhdGVz
KSB7CisgICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgICAg
ICB0LT51cGRhdGVzID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBNYXJrIHRo
ZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgorICovCit2
b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqcikKK3sKKyAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8K
KyAgICB0LT5zdGF0cy5taXNzZXMrKzsKKworICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncgPT0gdC0+
dyAmJiByLT5oID09IHQtPmgpIHsKKyAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5B
X1RSVUU7CisgICAgICAgIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAgICAgICBlaW5hX3RpbGVy
X2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgICAgICB0LT51cGRhdGVzID0gMDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF0LT51cGRhdGVzKSB7CisgICAg
ICAgIHQtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKKyAgICAgICAgaWYg
KCF0LT51cGRhdGVzKSB7CisgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSBl
aW5hX3RpbGVyICVkeCVkLiIsIHQtPncsIHQtPmgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRhdGVzLCByKTsK
K30KKworLyoqCisgKiBGb3IgZWFjaCB1cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUgZ2l2ZW4gZnVu
Y3Rpb24uCisgKgorICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcyBv
ciBjbGVhciB0aGUgcHJvY2Vzc2VkCisgKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVfdXBkYXRlc19j
bGVhcigpIGZvciB0aGF0LgorICovCit2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tf
VGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9S
ZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgaWYgKHQtPnN0YXRz
LmZ1bGxfdXBkYXRlKSB7CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7CisgICAgICAgIHIueCA9
IDA7CisgICAgICAgIHIueSA9IDA7CisgICAgICAgIHIudyA9IHQtPnc7CisgICAgICAgIHIuaCA9
IHQtPmg7CisjaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIHN0
cnVjdCB0aW1ldmFsIHRpbWV2OworICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0OworICAgICAg
ICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCAwKTsKKyAgICAgICAgcmVuZGVyX3N0YXJ0ID0gKGRvdWJs
ZSl0aW1ldi50dl9zZWMgKworICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8g
MTAwMDAwMCk7CisjZW5kaWYKKyAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0LCAmcik7CisjaWZk
ZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIGdldHRpbWVvZmRheSgm
dGltZXYsIDApOworICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9IChkb3VibGUpdGltZXYu
dHZfc2VjICsKKyAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDAp
IC0gcmVuZGVyX3N0YXJ0OworI2VuZGlmCisgICAgfSBlbHNlIGlmICh0LT51cGRhdGVzKSB7Cisg
ICAgICAgIEVpbmFfSXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHQtPnVw
ZGF0ZXMpOworICAgICAgICBFaW5hX1JlY3RhbmdsZSAqcjsKKyAgICAgICAgaWYgKCFpdHIpIHsK
KyAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVyIGl0ZXJhdG9yISIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEVJTkFfSVRFUkFUT1Jf
Rk9SRUFDSChpdHIsIHIpCisgICAgICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQsIHIpOworICAg
ICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKKyAgICB9Cit9CisKKy8qKgorICogQ2xlYXIg
YWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCisgKgorICogVGhpcyB3aWxsIGNoYW5nZSB0
aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1pc3NlcworICogYW5kIHVu
c2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0ZWQsIHRoZW4gaXQgd2ls
bCBiZQorICogZGVzdHJveWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxs
ZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKKyAqIGNhbGxlZC4KKyAqLwor
dm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQoreworICAgIC8qIFRPRE86
IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVzPyAqLworICAgIHQtPnN0YXRzLm1p
c3NlcyA9IDA7CisKKyAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHQtPnN0
YXRzLmZ1bGxfdXBkYXRlID0gMDsKKyAgICBlbHNlIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAg
IGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKyAgICAgICAgdC0+dXBkYXRlcyA9IDA7Cisg
ICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IEV3
a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKK3N0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5IHsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBpbnQgd2VpZ2h0OworICAgIHN0cnVj
dCB7CisgICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpOworICAgICAg
ICB2b2lkICpkYXRhOworICAgIH0gdGlsZV9mcmVlOworfTsKKworc3RydWN0IF9Fd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgeworICAgIHN0cnVjdCB7CisgICAgICAgIEVpbmFfTGlzdCAqbGlzdDsKKyAg
ICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICBzaXplX3QgYWxsb2NhdGVkOworICAgIH0gZW50
cmllczsKKyAgICBzdHJ1Y3QgeworICAgICAgICBzaXplX3QgbWF4OyAgLyoqPCB3YXRlcm1hcmsg
KGluIGJ5dGVzKSB0byBzdGFydCBmcmVlaW5nIHRpbGVzICovCisgICAgICAgIHNpemVfdCB1c2Vk
OyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3JlIHRoYW4gbWF4LiAqLworICAgIH0gbWVtb3J5Owor
ICAgIHN0cnVjdCB7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgZmxv
YXQgem9vbTsKKyAgICAgICAgRWluYV9Cb29sIGxvY2tlZDsKKyAgICB9IGxvY2tlZDsKKyAgICBp
bnQgcmVmZXJlbmNlczsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOworfTsKKworc3RhdGljIGNv
bnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9JTklUSUFMID0gMTI4Oworc3Rh
dGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9TVEVQID0gMTY7Citz
dGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01BWF9GUkVFID0gMzI7CisKKy8q
KgorICogQ2FjaGUgb2YgdW51c2VkIHRpbGVzICh0aG9zZSB0aGF0IGFyZSBub3QgdmlzaWJsZSku
CisgKgorICogVGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KKyAqCisgKiBAcGFyYW0gbWF4IGNh
Y2hlIHNpemUgaW4gYnl0ZXMuCisgKgorICogQHJldHVybiBuZXdseSBhbGxvY2F0ZWQgY2FjaGUg
b2YgdW51c2VkIHRpbGVzLCB1c2UKKyAqICAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Zy
ZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4gSWYgbm90CisgKiAgICAgICAgIHBvc3NpYmxlIHRv
IGFsbG9jYXRlIG1lbW9yeSwgQGMgMCBpcyByZXR1cm5lZC4KKyAqLworRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNpemVfdCBtYXgpCit7CisgICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisKKyAgICB0dWMgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZSkp
KTsKKyAgICBpZiAoIXR1YykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBEQkcoInR1Yz0lcCIs
IHR1Yyk7CisgICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OworICAgIHR1Yy0+cmVmZXJlbmNlcyA9
IDE7CisgICAgcmV0dXJuIHR1YzsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9j
a19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9
IEVJTkFfVFJVRTsKKyAgICB0dWMtPmxvY2tlZC54ID0geDsKKyAgICB0dWMtPmxvY2tlZC55ID0g
eTsKKyAgICB0dWMtPmxvY2tlZC53ID0gdzsKKyAgICB0dWMtPmxvY2tlZC5oID0gaDsKKyAgICB0
dWMtPmxvY2tlZC56b29tID0gem9vbTsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9IEVJTkFf
RkFMU0U7Cit9CisKKy8qKgorICogRnJlZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCisgKgorICog
VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb25seSBjYWxsZWQgYnkgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3VucmVmCisgKiBmdW5jdGlvbi4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY29u
c2lkZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nCisgKiBtYXkgbGVhZCB0byB1bmtub3duIHJlc3Vs
dHMuCisgKgorICogVGhvc2UgdGlsZXMgdGhhdCBhcmUgc3RpbGwgdmlzaWJsZSB3aWxsIHJlbWFp
biBsaXZlLiBUaGUgdW51c2VkCisgKiB0aWxlcyB3aWxsIGJlIGZyZWVkLgorICoKKyAqIEBzZWUg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBEQkcoInR1Yz0lcCwgIgorICAg
ICAgICAiZW50cmllcz0oY291bnQ6JXpkLCBhbGxvY2F0ZWQ6JXpkKSwgIgorICAgICAgICAibWVt
b3J5PShtYXg6JXpkLCB1c2VkOiV6ZCkiLAorICAgICAgICB0dWMsIHR1Yy0+ZW50cmllcy5jb3Vu
dCwgdHVjLT5lbnRyaWVzLmFsbG9jYXRlZCwKKyAgICAgICAgdHVjLT5tZW1vcnkubWF4LCB0dWMt
Pm1lbW9yeS51c2VkKTsKKworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOwor
ICAgIGZyZWUodHVjKTsKK30KKworLyoqCisgKiBDbGVhciBjYWNoZSBvZiB1bnVzZWQgdGlsZXMu
CisgKgorICogQW55IHRpbGVzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSBhcmUgZnJlZWQuIFRoZSBv
bmx5IHRpbGVzIHRoYXQgYXJlCisgKiBrZXB0IGFyZSB0aG9zZSB0aGF0IGFyZW4ndCBpbiB0aGUg
Y2FjaGUgKGkuZS4gdGhhdCBhcmUgdmlzaWJsZSkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogaXRlbTsKKyAgICBFSU5BX0xJU1RfRlJFRSh0
dWMtPmVudHJpZXMubGlzdCwgaXRlbSkgeworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVf
RW50cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0
ZW0pOworICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHIt
PnRpbGUpOworICAgICAgICBmcmVlKGl0cik7CisgICAgfQorCisgICAgdHVjLT5tZW1vcnkudXNl
ZCA9IDA7CisgICAgdHVjLT5lbnRyaWVzLmNvdW50ID0gMDsKK30KKworLyoqCisgKiBIb2xkIHJl
ZmVyZW5jZSB0byBjYWNoZS4KKyAqCisgKiBAcmV0dXJuIHNhbWUgcG9pbnRlciBhcyB0YWtlbi4K
KyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigpCisgKi8KK0V3a19UaWxl
X1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAw
KTsKKyAgICB0dWMtPnJlZmVyZW5jZXMrKzsKKyAgICByZXR1cm4gdHVjOworfQorCisvKioKKyAq
IFJlbGVhc2UgY2FjaGUgcmVmZXJlbmNlLCBmcmVlaW5nIGl0IGlmIGl0IGRyb3BzIHRvIHplcm8u
CisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKCkKKyAqIEBzZWUgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUoKQorICovCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91
bnJlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih0dWMpOworICAgIHR1Yy0+cmVmZXJlbmNlcy0tOworICAgIGlmICghdHVjLT5y
ZWZlcmVuY2VzKQorICAgICAgICBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUodHVjKTsKK30K
Kwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1Yywgc2l6ZV90IG1heCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOworICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKK30KKworc2l6ZV90IGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOworICAgIHJldHVybiB0
dWMtPm1lbW9yeS5tYXg7Cit9CisKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9n
ZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CisgICAgcmV0dXJuIHR1Yy0+bWVtb3J5LnVzZWQ7
Cit9CisKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMsIHNpemVfdCBieXRlcykKK3sKKyAgICBFaW5hX0xpc3QgKmwsICpsX25leHQ7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CisgICAgc2l6ZV90
IGRvbmU7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworCisgICAgaWYgKCF0dWMtPmVudHJpZXMu
Y291bnQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChieXRlcyA8IDEpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLyoKKyAgICAgKiBOT1RFOiB0aGUgY2FjaGUgaXMgYSBGSUZPIHF1ZXVl
IGN1cnJlbnRseS4KKyAgICAgKiBEb24ndCBuZWVkIHRvIHNvcnQgYW55IG1vcmUuCisgICAgICov
CisKKyAgICB2b2lkKiBpdGVtOworICAgIGRvbmUgPSAwOworICAgIGNvdW50ID0gMDsKKyAgICBF
SU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0ZW0p
IHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKKyAgICAgICAgRXdrX1RpbGUg
KnQgPSBpdHItPnRpbGU7CisgICAgICAgIGlmIChkb25lID4gYnl0ZXMpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKHR1Yy0+bG9ja2VkLmxvY2tlZAorICAgICAgICAgICAgJiYgdC0+
eCArIHQtPncgPiB0dWMtPmxvY2tlZC54CisgICAgICAgICAgICAmJiB0LT55ICsgdC0+aCA+IHR1
Yy0+bG9ja2VkLnkKKyAgICAgICAgICAgICYmIHQtPnggPCB0dWMtPmxvY2tlZC54ICsgdHVjLT5s
b2NrZWQudworICAgICAgICAgICAgJiYgdC0+eSA8IHR1Yy0+bG9ja2VkLnkgKyB0dWMtPmxvY2tl
ZC5oCisgICAgICAgICAgICAmJiB0LT56b29tID09IHR1Yy0+bG9ja2VkLnpvb20pIHsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRvbmUgKz0gc2l6ZW9mKEV3a19U
aWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7CisgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+
dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7CisgICAgICAgIHR1Yy0+ZW50cmllcy5saXN0ID0g
ZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBsKTsKKyAgICAgICAgZnJl
ZShpdHIpOworICAgICAgICBjb3VudCsrOworICAgIH0KKworICAgIHR1Yy0+bWVtb3J5LnVzZWQg
LT0gZG9uZTsKKyAgICB0dWMtPmVudHJpZXMuY291bnQgLT0gY291bnQ7CisKKyAgICByZXR1cm4g
ZG9uZTsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOworICAgIGlmICh0dWMtPm1lbW9yeS51c2VkIDw9IHR1Yy0+bWVtb3J5Lm1heCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCh0dWMsIHR1Yy0+bWVt
b3J5LnVzZWQgLSB0dWMtPm1lbW9yeS5tYXgpOworICAgIGlmICh0dWMtPm1lbW9yeS51c2VkID4g
dHVjLT5tZW1vcnkubWF4KQorICAgICAgICBDUklUSUNBTCgiQ2FjaGUgc3RpbGwgdXNpbmcgdG9v
IG11Y2ggbWVtb3J5OiAlemQgS0I7IG1heDogJXpkIEtCIiwKKyAgICAgICAgICAgICAgICAgdHVj
LT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4KTsKK30KKworLyoqCisgKiBGcmVlemUgY2Fj
aGUgdG8gbm90IGRvIG1haW50ZW5hbmNlIHRhc2tzLgorICoKKyAqIE1haW50ZW5hbmNlIHRhc2tz
IG9wdGltaXplIGNhY2hlIHVzYWdlLCBidXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91bGQKKyAqIGhv
bGQgb24gdGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3
ZSBmcmVlemUKKyAqIHdoaWxlIG9wZXJhdGluZyBhbmQgdGhlbiB0aGF3IHdoZW4gd2UncmUgZG9u
ZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KCkKKyAqLwordm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQor
eworICAgIHR1Yy0+ZnJvemVuKys7Cit9CisKKy8qKgorICogVW5mcmVlemVzIG1haW50ZW5hbmNl
IHRhc2tzLgorICoKKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXpl
LCB0aGVuIG1haW50ZW5hbmNlIHRhc2tzCisgKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KKyAqLwor
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKK3sKKyAgICBpZiAoIXR1Yy0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhhd2luZyBtb3Jl
IHRoYW4gZnJlZXppbmchIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0dWMtPmZy
b3plbi0tOworfQorCisvKioKKyAqIEdldCB0aWxlIGZyb20gY2FjaGUgb2YgdW51c2VkIHRpbGVz
LCByZW1vdmluZyBpdCBmcm9tIHRoZSBjYWNoZS4KKyAqCisgKiBJZiB0aGUgdGlsZSBpcyB1c2Vk
LCB0aGVuIGl0J3Mgbm90IGluIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgc28gaXQKKyAqIGlzIHJl
bW92ZWQgZnJvbSB0aGUgY2FjaGUgYW5kIG1heSBiZSBnaXZlbiBiYWNrIHdpdGgKKyAqIGV3a190
aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCgpLgorICoKKyAqIEBwYXJhbSB0dWMgY2FjaGUgb2Yg
dW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdCB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdr
X1RpbGVfVW51c2VkX0NhY2hlLgorICoKKyAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNz
LCAjRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0KQor
eworICAgIEVpbmFfTGlzdCAqZSwgKmw7CisKKyAgICB2b2lkKiBpdGVtOworICAgIGUgPSAwOwor
ICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7CisgICAg
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogZW50cnkgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKKyAgICAgICAgaWYgKGVudHJ5LT50aWxl
ID09IHQpIHsKKyAgICAgICAgICAgIGUgPSBsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKCFlKSB7CisgICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQg
aW4gY2FjaGUgJXAiLCB0LCB0dWMpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9
CisKKyAgICB0dWMtPmVudHJpZXMuY291bnQtLTsKKyAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNp
emVvZihFd2tfVGlsZSkgKyB0LT5ieXRlczsKKyAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFf
bGlzdF9yZW1vdmVfbGlzdCh0dWMtPmVudHJpZXMubGlzdCwgZSk7CisgICAgZnJlZShpdGVtKTsK
KworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKKy8qKgorICogUHV0IHRpbGUgaW50byBjYWNo
ZSBvZiB1bnVzZWQgdGlsZXMsIGFkZGluZyBpdCB0byB0aGUgY2FjaGUuCisgKgorICogVGhpcyBz
aG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdC0+dmlzaWJsZSBpcyBAYyAwIGFuZCBubyBvYmplY3Rz
IGFyZQorICogdXNpbmcgdGhlIHRpbGUgYW55bW9yZSwgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBi
ZSBleHBpcmVkIGFuZCBoYXZlCisgKiBpdHMgbWVtb3J5IHJlcGxhY2VkLgorICoKKyAqIE5vdGUg
dGhhdCB0aWxlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBpZiBjYWNoZSBpcyBmdWxs
LAorICogaW5zdGVhZCB0aGUgY2FjaGUgd2lsbCBoYXZlIG1vcmUgYnl0ZXMgdXNlZCB0aGFuIG1h
eGltdW0gYW5kIG9uZQorICogY2FuIGNhbGwgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2goKSB0byBmcmVlIHRoZW0uIFRoaXMgaXMgZG9uZQorICogYmVjYXVzZSB1c3VhbGx5IHdlIHdh
bnQgYSBsYXp5IG9wZXJhdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICoKKyAqIEBwYXJh
bSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdCB0aWxlIHRvIGJlIGFkZGVk
IHRvIGNhY2hlLgorICogQHBhcmFtIHRpbGVfZnJlZV9jYiBmdW5jdGlvbiB1c2VkIHRvIGZyZWUg
dGlsZXMuCisgKiBAcGFyYW0gZGF0YSBjb250ZXh0IHRvIGdpdmUgYmFjayB0byBAYSB0aWxlX2Zy
ZWVfY2IgYXMgZmlyc3QgYXJndW1lbnQuCisgKgorICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1
Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lzZS4gSWYgQGMgdC0+dmlzaWJsZQorICogICAgICAg
ICBpcyBub3QgI0VJTkFfRkFMU0UsIHRoZW4gaXQgd2lsbCByZXR1cm4gI0VJTkFfRkFMU0UuCisg
KgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpCisgKi8KK0VpbmFf
Qm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMsIEV3a19UaWxlICp0LCB2b2lkICgqdGlsZV9mcmVlX2NiKSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5ICplOworCisgICAgaWYgKHQtPnZpc2libGUpIHsKKyAgICAgICAgRVJSKCJ0aWxlPSVw
IGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwgdCwgdC0+dmlzaWJsZSk7CisgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9F
bnRyeSkpKTsKKyAgICBpZiAoIWUpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAg
dHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBl
KTsKKyAgICBpZiAoZWluYV9lcnJvcl9nZXQoKSkgeworICAgICAgICBFUlIoIkxpc3QgYWxsb2Nh
dGlvbiBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAg
ZS0+dGlsZSA9IHQ7CisgICAgZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9y
ZSBzb3J0ICovCisgICAgZS0+dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOworICAgIGUtPnRp
bGVfZnJlZS5kYXRhID0gKHZvaWQgKilkYXRhOworCisgICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7
CisgICAgdHVjLT5tZW1vcnkudXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7CisK
KyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9k
YmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgdm9pZCogaXRlbTsK
KyAgICBFaW5hX0xpc3QgKmw7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBwcmludGYoIkNhY2hl
IG9mIHVudXNlZCB0aWxlczogZW50cmllczogJXp1LyV6dSwgbWVtb3J5OiAlenUvJXp1XG4iLAor
ICAgICAgICAgICB0dWMtPmVudHJpZXMuY291bnQsIHR1Yy0+ZW50cmllcy5hbGxvY2F0ZWQsCisg
ICAgICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+bWVtb3J5Lm1heCk7CisKKyAgICBFSU5B
X0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgICAgICBjb25z
dCBFd2tfVGlsZSAqdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+
KGl0ZW0pLT50aWxlOworICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4z
Zl0lYyIsCisgICAgICAgICAgICAgICB0LT5jb2wsIHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9v
bSwKKyAgICAgICAgICAgICAgIHQtPnZpc2libGUgPyAnKic6ICcgJyk7CisKKyAgICAgICAgaWYg
KCEoY291bnQgJSA0KSkKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgICBw
cmludGYoIlxuIik7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108999</attachid>
            <date>2011-09-28 04:03:37 -0700</date>
            <delta_ts>2011-09-28 04:09:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68599-20110928200335.patch</filename>
            <type>text/plain</type>
            <size>219181</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYxNjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
aW5kZXggZjlkYjM1Yzk0MzE3MjUzOTJiMWNjNjcxMThmNDUxZjJiNWFkNGU2OS4uNzZkY2RkOTdh
YmRiMzNjZTcxZjc3NTU5MDUyY2RiYjhkODgxZDAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKQEAgLTc0LDkgKzc0LDkgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBlZmwvZXdrL2V3a19uZXR3b3JrLmNwcAogICAgIGVmbC9ld2svZXdrX3NldHRpbmdzLmNwcAog
ICAgIGVmbC9ld2svZXdrX3Byb3RvY29sX2hhbmRsZXIuY3BwCi0gICAgZWZsL2V3ay9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZS5jCi0gICAgZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKLSAgICBl
ZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZS5jcHAKKyAgICBlZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCisgICAgZWZsL2V3ay9l
d2tfdGlsZWRfbW9kZWwuY3BwCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAgICBlZmwvZXdr
L2V3a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCmluZGV4IGZlMWI5MDI4YjNjNTRlNGE4YWY2NGY1YzY2OGRkYzFjMTJkZWJhNzkuLjNiOWNh
MWUwNGY4Zjc4MWE1YzExOWM5OTYwNTBiODk5Y2JlMDk0ZTQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMS0wOS0yNyAgQ2hvaSBSeXVhbiAgPHJ5dWFuLmNob2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0VGTF0gUmVuYW1lIGV3a190aWxlZF8qLmMgdG8gZXdrX3RpbGVk
XyouY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODU5OQorCisgICAgICAgIFVzZSBhIEMrKyBjb21waWxlciBmb3IgdGhlc2UgZmlsZXMgYW5kIGZp
eCBjb21waWxlIGlzc3VlcyBhbmQgY29kaW5nIHN0eWxlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jLgorICAgICAgICAqIGV3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbWF0cml4
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4
LmMuCisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2RlbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMuCisKIDIwMTEtMDktMjcgIFJhcGhh
ZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgW0VGTF0g
TWFrZSBld2tfdmlldyBlbWl0IHRoZSAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgc2lnbmFsLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
LmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhOTlmOGFiZWI0ZGViMzRmZjg5ZjgzMGM2Nzhk
ZWU2ZGYyY2Q1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYworKysgL2Rl
di9udWxsCkBAIC0xLDE5MTggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKLQotI2RlZmluZSBfR05VX1NPVVJDRQotI2luY2x1
ZGUgImV3a190aWxlZF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RWNvcmUuaD4KLSNpbmNsdWRlIDxF
aW5hLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8
c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIElEWChjb2wsIHJvdywgcm93c3BhbikgKGNvbCAr
IChyb3cgKiByb3dzcGFuKSkKLQotI2lmICFkZWZpbmVkKE1JTikKLSMgZGVmaW5lIE1JTihhLCBi
KSAoKGEgPCBiKSA/IGEgOiBiKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChNQVgpCi0jIGRlZmlu
ZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKLSNlbmRpZgotCi10eXBlZGVmIGVudW0gX0V3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eTsKLXR5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGE7Ci10eXBlZGVm
IHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtOwotdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9S
ZW5kZXJfUmVxdWVzdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Q7
Ci0KLWVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgewot
ICAgIFBSRV9SRU5ERVJfUFJJT1JJVFlfTE9XID0gMCwgLyoqPCBBcHBlbmQgdGhlIHJlcXVlc3Qg
dG8gdGhlIGxpc3QgKi8KLSAgICBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0ggICAgIC8qKjwgUHJl
cGVuZCB0aGUgcmVxdWVzdCB0byB0aGUgbGlzdCAqLwotfTsKLQotc3RydWN0IF9Fd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtIHsKLSAgICBFSU5BX0lOTElTVDsKLSAgICBFd2tfVGlsZSAqdGls
ZTsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0gICAgfSBn
ZW9tZXRyeTsKLSAgICBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlOwotfTsKLQotc3RydWN0IF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgewotICAgIEVJTkFfSU5MSVNU
OwotICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Ci0gICAgZmxvYXQgem9vbTsKLX07Ci0KLXN0
cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSB7Ci0gICAgRXZhc19PYmplY3RfU21h
cnRfQ2xpcHBlZF9EYXRhIGJhc2U7Ci0gICAgRXZhc19PYmplY3QgKnNlbGY7Ci0gICAgRXZhc19P
YmplY3QgKmNvbnRlbnRzX2NsaXBwZXI7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Jbmxp
c3QgKippdGVtczsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwotICAgICAgICBsb25n
IGNvbHMsIHJvd3M7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBFdmFzX0Nvb3JkIHcs
IGg7Ci0gICAgICAgICAgICBmbG9hdCB6b29tOwotICAgICAgICAgICAgRWluYV9Cb29sIHpvb21f
d2Vha19zbW9vdGhfc2NhbGU6MTsKLSAgICAgICAgfSB0aWxlOwotICAgICAgICBzdHJ1Y3Qgewot
ICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0g
ICAgICAgICAgICB9IGN1ciwgb2xkLCBiYXNlLCB6b29tX2NlbnRlcjsKLSAgICAgICAgfSBvZmZz
ZXQ7Ci0gICAgfSB2aWV3OwotICAgIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7Ci0gICAgc3RydWN0
IHsKLSAgICAgICAgRXdrX1RpbGVfTWF0cml4ICptYXRyaXg7Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgICAgICB9IGJhc2U7Ci0gICAg
ICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7Ci0gICAg
ICAgIH0gY3VyLCBvbGQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKLSAgICB9
IG1vZGVsOwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRh
LCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOwotICAgICAgICB2b2lk
ICpkYXRhOwotICAgICAgICBFaW5hX0lubGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAgICAg
ICAgRWNvcmVfSWRsZXIgKmlkbGVyOwotICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7Ci0gICAg
ICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7Ci0gICAgfSByZW5kZXI7Ci0gICAgc3RydWN0IHsKLSAg
ICAgICAgdm9pZCAqKCpwcmVfY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAg
ICAgdm9pZCAqcHJlX2RhdGE7Ci0gICAgICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwg
dm9pZCAqcHJlX2RhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAgICAgdm9pZCAqcG9zdF9kYXRh
OwotICAgIH0gcHJvY2VzczsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgYW55OjE7
Ci0gICAgICAgIEVpbmFfQm9vbCBwb3M6MTsKLSAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKLSAg
ICAgICAgRWluYV9Cb29sIG1vZGVsOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKLSAg
ICB9IGNoYW5nZWQ7Ci0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgRWNvcmVfRXZlbnRfSGFu
ZGxlciAqc2lnX3VzcjsKLSNlbmRpZgotfTsKLQotc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3Bh
cmVudF9zYyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwotaW50IF9ld2tfdGlsZWRfbG9n
X2RvbSA9IC0xOwotCi0jZGVmaW5lIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAu
Li4pICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHRyID0gZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQob2JqKTsgXAotICAgIGlmICgh
cHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBDUklUSUNBTCgibm8gcHJpdmF0ZSBkYXRhIGluIG9iaj0lcCIsIG9iaik7
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpOwotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKLQotc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICB2b2lkICpkYXRhID0gTlVMTDsKLQotICAgIC8q
IERvIG5vdCBwcm9jZXNzIHVwZGF0ZXMuIE5vdGUgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGdldCB1
cGRhdGVzIHJlcXVlc3RzCi0gICAgICogaW4gdGhlIHF1ZXVlIGluIG9yZGVyIHRvIG5vdCBtaXNz
IGFueSB1cGRhdGVzIGFmdGVyIHRoZSByZW5kZXIgaXMKLSAgICAgKiByZXN1bWVkLgotICAgICAq
LwotICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9n
ZXQocHJpdi0+c2VsZikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcml2LT5wcm9jZXNz
LnByZV9jYikKLSAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nl
c3MucHJlX2RhdGEsIHByaXYtPnNlbGYpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNf
cHJvY2Vzcyhwcml2LT5tb2RlbC5tYXRyaXgpOwotCi0gICAgaWYgKHByaXYtPnByb2Nlc3MucG9z
dF9jYikKLSAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9k
YXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKLX0KLQotc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmx1c2godm9pZCAqZGF0YSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2ID0gZGF0YTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAg
ICBpZiAodHVjKSB7Ci0gICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7Ci0g
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIEVSUigibm8gY2FjaGU/ISIpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBFd2tfVGlsZSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25n
IHJvdywgZmxvYXQgem9vbSkKLXsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFdmFzICpldmFzID0g
ZXZhc19vYmplY3RfZXZhc19nZXQocHJpdi0+c2VsZik7Ci0gICAgaWYgKCFldmFzKSB7Ci0gICAg
ICAgIENSSVRJQ0FMKCJldmFzX29iamVjdF9ldmFzX2dldCBmYWlsZWQhIik7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcKLSAg
ICAgICAgKHByaXYtPm1vZGVsLm1hdHJpeCwgZXZhcywgY29sLCByb3csIHpvb20pOwotCi0gICAg
aWYgKCF0KSB7Ci0gICAgICAgIENSSVRJQ0FMKCJld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcgZmFp
bGVkISIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17
Ci0gICAgaXQtPmdlb21ldHJ5LnggPSB4OwotICAgIGl0LT5nZW9tZXRyeS55ID0geTsKLQotICAg
IGlmIChpdC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2Us
IHgsIHkpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9y
ZXNpemUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoKQotewotICAgIGl0LT5nZW9tZXRyeS53ID0gdzsKLSAgICBpdC0+Z2VvbWV0cnku
aCA9IGg7Ci0KLSAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXpl
KGl0LT50aWxlLT5pbWFnZSwgdywgaCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxf
c2V0KGl0LT50aWxlLT5pbWFnZSwgMCwgMCwgdywgaCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGUgKnQsIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0KQotewotICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgQ1JJVElDQUwoIml0LT50
aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIE5VTEwhIiwgaXQtPnRpbGUpOwotICAgIGl0LT50aWxl
ID0gdDsKLSAgICBldmFzX29iamVjdF9tb3ZlKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5
LngsIGl0LT5nZW9tZXRyeS55KTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmlt
YWdlLCBpdC0+Z2VvbWV0cnkudywgaXQtPmdlb21ldHJ5LmgpOwotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX2ZpbGxfc2V0Ci0gICAgICAgIChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRy
eS53LCBpdC0+Z2VvbWV0cnkuaCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxl
X3NldChpdC0+dGlsZS0+aW1hZ2UsIGl0LT5zbW9vdGhfc2NhbGUpOwotCi0gICAgaWYgKCFld2tf
dGlsZV92aXNpYmxlX2dldCh0KSkKLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Fk
ZCh0LT5pbWFnZSwgcHJpdi0+c2VsZik7Ci0KLSAgICBld2tfdGlsZV9zaG93KHQpOwotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0gKml0LCBkb3VibGUgbGFzdF91c2VkKQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjOwotICAgIGV3a190aWxlX2hpZGUoaXQtPnRpbGUpOwotICAgIGlmICghZXdrX3RpbGVfdmlz
aWJsZV9nZXQoaXQtPnRpbGUpKQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVs
KGl0LT50aWxlLT5pbWFnZSk7Ci0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1v
ZGVsLm1hdHJpeCwgaXQtPnRpbGUsIGxhc3RfdXNlZCk7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwotCi0gICAgaXQtPnRpbGUgPSBOVUxMOwotfQot
Ci1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2Fs
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIEVpbmFfSW5saXN0
ICppdDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdGVtOwotICAgIGludCBp
OwotICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICBm
b3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKLSAgICAgICAgaXQgPSBwcml2
LT52aWV3Lml0ZW1zW2ldOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQot
ICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOwotICAg
IH0KLX0KLQotc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tLCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHByaW9yaXR5KQotewotICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKLQotICAgIE1B
TExPQ19PUl9PT01fUkVUKHIsIHNpemVvZigqciksIEVJTkFfRkFMU0UpOwotCi0gICAgaWYgKHBy
aW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKLSAgICAgICAgcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCi0gICAgICAgICAgICAo
cHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7Ci0g
ICAgZWxzZQotICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFf
aW5saXN0X2FwcGVuZAotICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwotCi0gICAgci0+Y29sID0gY29sOwotICAgIHItPnJv
dyA9IHJvdzsKLSAgICByLT56b29tID0gem9vbTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCi17Ci0gICAgcHJpdi0+cmVu
ZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUKLSAgICAgICAgKHBy
aXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwotICAg
IGZyZWUocik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0g
ICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCi0gICAgICAgIHByaXYtPnJlbmRl
ci5wcmVfcmVuZGVyX3JlcXVlc3RzLAotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3Jl
bmRlcl9yZXF1ZXN0czsKLSAgICB3aGlsZSAoKnBsKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKLSAgICAgICAgciA9IF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7Ci0gICAgICAgICpw
bCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7Ci0gICAgICAgIGZyZWUocik7Ci0gICAg
fQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9y
ZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAg
RWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAg
ICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKLSAgICB3aGlsZSAoaXRlcikgewotICAg
ICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIgPQotICAg
ICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKLSAgICAgICAgICAgICAgICBpdGVy
LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwotICAgICAgICB0
bXAgPSBpdGVyLT5uZXh0OwotICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCBp
dGVyKTsKLSAgICAgICAgaXRlciA9IHRtcDsKLSAgICAgICAgZnJlZShyKTsKLSAgICB9Ci19Ci0K
LS8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEg
Ki8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnJlcTsKLSAg
ICBFaW5hX1JlY3RhbmdsZSBhcmVhOwotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBwcml2LT5t
b2RlbC5tYXRyaXg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWM7Ci0gICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKLSAgICBmbG9hdCB6b29tOwotICAg
IGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICByZXEgPSBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwot
ICAgIGlmICghcmVxKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb2wgPSByZXEtPmNvbDsKLSAg
ICByb3cgPSByZXEtPnJvdzsKLSAgICB6b29tID0gcmVxLT56b29tOwotCi0gICAgaWYgKGV3a190
aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpvb20pKSB7Ci0gICAg
ICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwg
Y29sLCByb3csIHpvb20pOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0KLSAgICB0ID0gX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93LCB6b29tKTsKLSAg
ICBpZiAoIXQpCi0gICAgICAgIGdvdG8gZW5kOwotCi0gICAgYXJlYS54ID0gMDsKLSAgICBhcmVh
LnkgPSAwOwotICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIGFyZWEuaCA9IHBy
aXYtPnZpZXcudGlsZS5oOwotCi0gICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRh
LCB0LCAmYXJlYSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKAotICAg
ICAgICB0LT5pbWFnZSwKLSAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywgYXJlYS5oKTsK
LSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0KTsKLQotICAgIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKLQotZW5kOgotICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHByaXYsIHJlcSk7
Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwotfQot
Ci1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3Nf
aWRsZXJfY2Iodm9pZCAqZGF0YSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2ID0gZGF0YTsKLQotICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKLSAgICAgICAg
ZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEsIHByaXYt
PnNlbGYpOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9wcm9jZXNzX3NpbmdsZShwcml2KTsKLQotICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RfY2Ip
Ci0gICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSwg
ZGF0YSwgcHJpdi0+c2VsZik7Ci0KLSAgICBpZiAoIXByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3Jl
cXVlc3RzKSB7Ci0gICAgICAgIHByaXYtPnJlbmRlci5pZGxlciA9IE5VTEw7Ci0gICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0b3AoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAo
IXByaXYtPnJlbmRlci5pZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWNvcmVfaWRsZXJf
ZGVsKHByaXYtPnJlbmRlci5pZGxlcik7Ci0gICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gTlVMTDsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3By
b2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBpZiAocHJpdi0+cmVuZGVyLmlkbGVyKQotICAgICAgICByZXR1cm47Ci0gICAgcHJpdi0+
cmVuZGVyLmlkbGVyID0gZWNvcmVfaWRsZXJfYWRkKAotICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiLCBwcml2KTsKLX0KLQotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAocHJpdi0+cmVuZGVyLnN1c3BlbmQp
Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfVFJVRTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0b3AocHJpdik7Ci0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQp
Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfRkFMU0U7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxl
cl9zdGFydChwcml2KTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKLXsKLSAgICB1bnNpZ25l
ZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBjb2w7Ci0gICAgdW5zaWduZWQg
bG9uZyBtX3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OwotICAgIGRvdWJsZSBsYXN0
X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICBpZiAobV9jb2wgPj0gcHJpdi0+
bW9kZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJpdi0+bW9kZWwuY3VyLnJvd3MpIHsKLSAgICAg
ICAgaWYgKGl0LT50aWxlKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBFd2tfVGlsZSAqdDsKLSAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYtPnZpZXcudGls
ZS56b29tOwotCi0gICAgICAgIGlmIChpdC0+dGlsZSkgewotICAgICAgICAgICAgRXdrX1RpbGUg
Km9sZCA9IGl0LT50aWxlOwotICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9s
ZC0+Y29sICE9IG1fY29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQotICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNl
ZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChvbGQtPnJvdyA9PSBtX3JvdyAmJiBvbGQtPmNvbCA9
PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0gem9vbSkKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsK
LSAgICAgICAgfQotCi0gICAgICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQo
cHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOwotCi0gICAgICAgIGlmICgh
dCkgewotICAgICAgICAgICAgLyogTk9URTogaXQgbmV2ZXIgcmV0dXJucyBOVUxMIGlmIGl0LT50
aWxlIHdhcyBzZXQhICovCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAgICAgICAg
ICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgTlVMTCEiLCBpdC0+
dGlsZSk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZShwcml2LCBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8KLSAg
ICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKLSAgICAgICAgICAgICAgICB0
ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jvdywg
em9vbSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKHQgIT0gaXQtPnRpbGUpIHsKLSAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKLSAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXQsIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOwotICAgICAgICB9Ci0KLSAgICAgIGVuZDoK
LQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RS
VUU7Ci19Ci0KLXN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQotewotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRoOwot
Ci0gICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChp
dCwgc2l6ZW9mKCppdCksIE5VTEwpOwotCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAg
ICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggKyBwcml2LT52aWV3LnggKyB0dyAgKmNvbDsKLSAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICsgcHJpdi0+dmlldy55ICsgdGggICpyb3c7Ci0KLSAgICBpdC0+dGlsZSA9IE5VTEw7
Ci0KLSAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9v
dGhfc2NhbGU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgeCwg
eSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgp
OwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwg
Y29sLCByb3cpKSB7Ci0gICAgICAgIGZyZWUoaXQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gaXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkKLXsKLSAgICBpZiAoaXQtPnRpbGUpIHsKLSAg
ICAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKLSAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91
c2VkKTsKLSAgICB9Ci0KLSAgICBmcmVlKGl0KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKLXsKLSAgICBpZiAoaXQtPnNt
b290aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChp
dC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+
dGlsZS0+aW1hZ2UsIHNtb290aF9zY2FsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KQotewotICAgIGlmIChwcml2LT5jaGFuZ2VkLmFueSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5nZWQocHJpdi0+c2VsZik7Ci0gICAgcHJpdi0+Y2hh
bmdlZC5hbnkgPSBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0gICAgRWlu
YV9Jbmxpc3QgKm47Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0KLSAgICBpZiAoIWNvdW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBuID0gKCpwX3JvdyktPmxhc3Q7Ci0KLSAgICBmb3IgKGkgPSAw
OyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdDsKLSAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICBuID0gbi0+cHJldjsKLSAgICAgICAgKnBf
cm93ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7Ci0g
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7Ci0gICAg
fQotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlz
dCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkKLXsK
LSAgICB1bnNpZ25lZCBpbnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKLQotICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7Ci0gICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotCi0gICAgICAgIGl0ID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKLSAgICAgICAgaWYgKCFp
dCkgewotICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1
IGluIHJvdyAldS4iLCBpLCBjb3VudCwgcik7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOwotICAgICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICAqcF9yb3cgPSBlaW5hX2lu
bGlzdF9hcHBlbmQoKnBfcm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfcm93X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lu
bGlzdCAqcm93KQotewotICAgIHdoaWxlIChyb3cpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICByb3cgPSByb3ct
Pm5leHQ7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBp
dCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5h
X0lubGlzdCAqKnN0YXJ0LCBFaW5hX0lubGlzdCAqKmVuZCkKLXsKLSAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cm93X2RlbChwcml2LCAqc3RhcnQpOwotICAgICAgICAqc3RhcnQgPSBOVUxMOwotICAgIH0KLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3Qg
KipzdGFydDsKLSAgICBFaW5hX0lubGlzdCAqKmVuZDsKLQotICAgIHN0YXJ0ID0gcHJpdi0+dmll
dy5pdGVtczsKLSAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOwot
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0
YXJ0LCBlbmQpOwotCi0gICAgZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKLSAgICBwcml2LT52aWV3
Lml0ZW1zID0gTlVMTDsKLSAgICBwcml2LT52aWV3LmNvbHMgPSAwOwotICAgIHByaXYtPnZpZXcu
cm93cyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5k
ZXIodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQot
ewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSBkYXRhOwotCi0gICAg
SU5GKCJUT0RPICVwICh2aXNpYmxlPyAlZCkgWyVsdSwlbHVdICVkLCVkICsgJWR4JWQiLAotICAg
ICAgICB0LCB0LT52aXNpYmxlLCB0LT5jb2wsIHQtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJl
YS0+dywgYXJlYS0+aCk7Ci0KLSAgICBpZiAoIXQtPnZpc2libGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChwcml2LT52aWV3LnRpbGUudyAhPSB0LT53IHx8IHByaXYtPnZpZXcudGlsZS5o
ICE9IHQtPmgpCi0gICAgICAgIHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24n
dCBldmVuIGZsYWcgYXMgZGlydHkhCi0KLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihw
cml2LT5yZW5kZXIuY2IpOwotICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5k
YXRhLCB0LCBhcmVhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
ZGF0YV91cGRhdGVfYWRkKHQtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVh
LT5oKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9t
b2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgp
IHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHBy
aXYpOwotCi0gICAgICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9GQUxTRTsKLSAgICAg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwotCi0gICAgICAgIGV3a190aWxlX21h
dHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgfQotCi0gICAgcHJpdi0+bW9kZWwu
bWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0dWMsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBw
cml2LT5tb2RlbC5jdXIucm93cywgcHJpdi0+Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcmVuZGVyLCBwcml2KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICptZW1iZXIp
Ci17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgaWYgKCFwcml2
LT5jb250ZW50c19jbGlwcGVyKQotICAgICAgICByZXR1cm47Ci0gICAgZXZhc19vYmplY3RfY2xp
cF91bnNldChtZW1iZXIpOwotICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+
Y29udGVudHNfY2xpcHBlcikpCi0gICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVu
dHNfY2xpcHBlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQotewot
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIGlmICghcHJpdi0+Y29u
dGVudHNfY2xpcHBlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0
KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgaWYgKGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KG8pKQotICAgICAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIpOwotfQotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1zdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2KQotewotICAgIHN0YXRpYyBpbnQgcnVuID0gMDsKLQotICAgIHJ1bisrOwotCi0gICAgcHJp
bnRmKCJcbi0tLSBCRUdJTiBERUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0t
XG4iCi0gICAgICAgICAgICJ0PSUwLjJmLCBvYmo9JXAsIHByaXY9JXAsIHZpZXcuaXRlbXM9JXAs
IG1hdHJpeD0lcFxuIiwKLSAgICAgICAgICAgcnVuLCBlY29yZV9sb29wX3RpbWVfZ2V0KCksCi0g
ICAgICAgICAgIHByaXYtPnNlbGYsIHByaXYsIHByaXYtPnZpZXcuaXRlbXMsIHByaXYtPm1vZGVs
Lm1hdHJpeCk7Ci0KLSAgICBld2tfdGlsZV9tYXRyaXhfZGJnKHByaXYtPm1vZGVsLm1hdHJpeCk7
Ci0gICAgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcoKTsKLQotICAgIHByaW50ZigiLS0tIEVORCBE
RUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0tXG5cbiIsIHJ1bik7Ci19Ci0K
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCAq
ZGF0YSwgaW50IHR5cGUsIHZvaWQgKmV2ZW50KQotewotICAgIEVjb3JlX0V2ZW50X1NpZ25hbF9V
c2VyICpzaWcgPSAoRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50OwotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSopZGF0YTsKLQotICAgIGlmIChzaWctPm51bWJlciA9PSAyKSB7Ci0gICAgICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOwotICAgICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2Vk
X2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgICAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfYXV0b19mbHVzaCh0dWMpOwotICAgIH0KLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2RiZyhwcml2KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2Ri
Zyhwcml2KTsKLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCi17Ci0g
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdjsKLQotICAgIERCRygibz0lcCIs
IG8pOwotCi0gICAgQ0FMTE9DX09SX09PTV9SRVQocHJpdiwgc2l6ZW9mKCpwcml2KSk7Ci0KLSAg
ICBwcml2LT5zZWxmID0gbzsKLSAgICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEuMDsKLSAgICBw
cml2LT52aWV3LnRpbGUudyA9IERFRkFVTFRfVElMRV9XOwotICAgIHByaXYtPnZpZXcudGlsZS5o
ID0gREVGQVVMVF9USUxFX0g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwotICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSAwOwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKLQot
ICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IDA7Ci0gICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5y
b3dzID0gMTsKLSAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwu
b2xkLnJvd3MgPSAwOwotICAgIHByaXYtPm1vZGVsLndpZHRoID0gMDsKLSAgICBwcml2LT5tb2Rl
bC5oZWlnaHQgPSAwOwotICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKLSAg
ICBwcml2LT5jc3BhY2UgPSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVj
dCBpdC4KLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHByaXYpOwotICAgIF9w
YXJlbnRfc2MuYWRkKG8pOwotCi0gICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2Jq
ZWN0X3JlY3RhbmdsZV9hZGQoCi0gICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pKTsKLSAg
ICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOwotICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKLSAgICBldmFz
X29iamVjdF9jb2xvcl9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwg
MjU1KTsKLSAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbyk7
Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2
LCBOVUxMKTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7
Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7Ci0gICAg
ZXZhc19vYmplY3RfY2xpcF9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5j
bGlwcGVyKTsKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHByaXYtPnNpZ191c3IgPSBl
Y29yZV9ldmVudF9oYW5kbGVyX2FkZAotICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIs
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyLCBwcml2KTsKLSNlbmRpZgotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0
ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIERCRygi
bz0lcCIsIG8pOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOwotCi0gICAgdHVjID0g
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKLQotICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9mbHVzaChwcml2KTsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKHByaXYpOwotICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChwcml2KTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOwotICAg
IGlmIChwcml2LT5zaWdfdXNyKQotICAgICAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRf
aGFuZGxlcl9kZWwocHJpdi0+c2lnX3Vzcik7Ci0jZW5kaWYKLQotICAgIGV3a190aWxlX21hdHJp
eF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2RlbChwcml2LT5jb250ZW50c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9kZWwocHJpdi0+
Y29udGVudHNfY2xpcHBlcik7Ci0KLSAgICBfcGFyZW50X3NjLmRlbChvKTsKLQotI2lmZGVmIERF
QlVHX01FTV9MRUFLUwotICAgIHByaW50ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RP
UkUgREVMRVRFRCAobWF5IGJlIHJlYWwgbGVha3MpXG4iKTsKLSAgICBld2tfdGlsZV9hY2NvdW50
aW5nX2RiZygpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQg
eSkKLXsKLSAgICBEQkcoIm89JXAsIG5ldyBwb3M6ICVkeCVkIiwgbywgeCwgeSk7Ci0KLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQotICAgIGlmIChwcml2LT5jaGFuZ2Vk
LnBvcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHBy
aXYtPnZpZXcueSA9PSB5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5jaGFuZ2VkLnBv
cyA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6
ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCi17Ci0gICAgREJH
KCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBvLCB3LCBoKTsKLQotICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHByaXYtPnZpZXcudyA9PSB3ICYmIHByaXYtPnZpZXcuaCA9
PSBoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RS
VUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Ci19Ci0KLXN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBo
LCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nvb3JkIHRoKQotewotICAgIGxvbmcgY29scywgcm93cywg
b2xkX3Jvd3MsIG9sZF9jb2xzOwotICAgIElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJp
di0+c2VsZiwgdywgaCk7Ci0KLSAgICBjb2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChm
bG9hdCl0dyk7Ci0gICAgcm93cyA9IDEgKyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgp
OwotCi0gICAgSU5GKCJvPSVwIG5ldyBncmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQsIHdh
cyAlbGQsICVsZCIsCi0gICAgICAgIHByaXYtPnNlbGYsIGNvbHMsIHJvd3MsIHByaXYtPnZpZXcu
Y29scywgcHJpdi0+dmlldy5yb3dzKTsKLQotICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29s
cyAmJiBwcml2LT52aWV3LnJvd3MgPT0gcm93cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgb2xk
X2NvbHMgPSBwcml2LT52aWV3LmNvbHM7Ci0gICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7
Ci0KLSAgICBpZiAocm93cyA8IG9sZF9yb3dzKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqc3Rh
cnQsICoqZW5kOwotICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAg
ICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7Ci0gICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOwot
ICAgIH0KLSAgICBSRUFMTE9DX09SX09PTV9SRVQocHJpdi0+dmlldy5pdGVtcywgc2l6ZW9mKEVp
bmFfSW5saXN0KikgKiAoaW50KXJvd3MpOwotICAgIHByaXYtPnZpZXcucm93cyA9IHJvd3M7Ci0g
ICAgcHJpdi0+dmlldy5jb2xzID0gY29sczsKLSAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0g
ICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOwotICAgICAgICBzdGFydCA9IHByaXYt
PnZpZXcuaXRlbXMgKyBvbGRfcm93czsKLSAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyAr
IHJvd3M7Ci0gICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAgICAg
ICAgRWluYV9Cb29sIHI7Ci0gICAgICAgICAgICAqc3RhcnQgPSBOVUxMOwotICAgICAgICAgICAg
ciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAotICAgICAgICAg
ICAgICAgIChwcml2LCBzdGFydCwgMCwgY29scyk7Ci0gICAgICAgICAgICBpZiAoIXIpIHsKLSAg
ICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwg
Y29scyk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93
c19yYW5nZV9kZWwKLSAgICAgICAgICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcuaXRlbXMg
KyBvbGRfcm93cywgc3RhcnQpOwotICAgICAgICAgICAgICAgIHByaXYtPnZpZXcucm93cyA9IG9s
ZF9yb3dzOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChjb2xzICE9IG9sZF9jb2xzKSB7Ci0gICAgICAgIEVpbmFfSW5s
aXN0ICoqc3RhcnQsICoqZW5kOwotICAgICAgICBpbnQgdG9kbyA9IGNvbHMgLSBvbGRfY29sczsK
LSAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgICAgICBlbmQgPSBzdGFydCAr
IE1JTihvbGRfcm93cywgcm93cyk7Ci0gICAgICAgIGlmICh0b2RvID4gMCkgewotICAgICAgICAg
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgICAgICAgICAgRWluYV9C
b29sIHI7Ci0gICAgICAgICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2FkZAotICAgICAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xz
LCB0b2RvKTsKLSAgICAgICAgICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
Q1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1bW5zISIsIHRvZG8pOwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoc3RhcnQtLTsgc3RhcnQgPj0gcHJpdi0+dmlldy5pdGVtczsg
c3RhcnQtLSkKLSAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0
b2RvKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHRv
ZG8gPCAwKSB7Ci0gICAgICAgICAgICB0b2RvID0gLXRvZG87Ci0gICAgICAgICAgICBmb3IgKDsg
c3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQotewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNs
aXBwZXIsIHcsIGgpOwotCi0gICAgcHJpdi0+dmlldy53ID0gdzsKLSAgICBwcml2LT52aWV3Lmgg
PSBoOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCi0g
ICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZpZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7
Ci19Ci0KLS8vIFRPRE86IHJlbW92ZSBtZSBsYXRlci4KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSAqcHJpdikKLXsKLSAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICBw
cmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9kZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNs
ZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9sZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIs
Ci0gICAgICAgICAgIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzLAotICAgICAgICAg
ICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsCi0gICAgICAgICAg
IHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQsCi0gICAgICAgICAgIHByaXYt
Pm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2RlbC5iYXNlLnJvdywKLSAgICAgICAgICAgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55LAotICAgICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJpdi0+dmlldy5vZmZzZXQub2xkLnksCi0gICAgICAg
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsK
LQotICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBlbmQgPSBwcml2LT52aWV3Lml0
ZW1zICsgcHJpdi0+dmlldy5yb3dzOwotICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykg
ewotICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLQotICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFydCwgaXQpIHsKLSAgICAgICAgICAgIHByaW50
ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0cnkueCwgaXQtPmdlb21ldHJ5LnkpOwotCi0gICAg
ICAgICAgICBpZiAoIWl0LT50aWxlKQotICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAg
ICAgOyIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVs
dSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxlLT5jb2wsIGl0LT50aWxlLT5yb3cpOwotICAgICAg
ICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9Ci0gICAgcHJpbnRmKCItLS1cbiIpOwot
fQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92ZSB0b3Agcm93IGRvd24gYXMgbGFzdC4KLSAq
Ci0gKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZpc3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5
IHRoZSB0b3AgdGhhdAotICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBib3R0b20gYW5k
IGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0gKiBUaGlzIGlzIHdvcnRoIGp1c3Qg
d2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAqIHByaXYtPnZpZXcucm93cywgYWZ0
ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKLSAqIGlzIGJl
dHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAqIEBwYXJhbSBjb3VudCB0aGUgbnVt
YmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KLSAqLwotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNv
dW50KQotewotICAgIHVuc2lnbmVkIGludCBsYXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7
Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQg
dGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0aDsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIChs
YXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCArIG9mZl95OwotICAgIEVpbmFfSW5saXN0ICoqaXRy
X3N0YXJ0LCAqKml0cl9lbmQ7Ci0KLSAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwot
ICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBsYXN0X3JvdzsKLQotICAgIGZvciAoOyBjb3VudCA+
IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVpbmFf
SW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtICppdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLng7Ci0gICAgICAgIGludCBjID0gMDsKLQotICAgICAgICBmb3IgKGl0ciA9IGl0cl9z
dGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspCi0gICAgICAgICAgICAqaXRyID0gKihpdHIgKyAx
KTsKLSAgICAgICAgKml0ciA9IHRtcDsKLQotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysr
OwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAg
ICBveCArPSB0dzsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Zp
bGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsKLSAgICAgICAgICAgIGMrKzsKLSAgICAgICAgfQot
ICAgICAgICBveSArPSB0aDsKLSAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0g
b2ZmX3k7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBNb3ZlIGJvdHRvbSByb3cgdXAgYXMg
Zmlyc3QuCi0gKgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0
IGxvZ2ljYWxseSB0aGUgYm90dG9tIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cg
YXQgdG9wIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMuCi0gKgotICogVGhpcyBpcyB3
b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFuIEBjCi0gKiBwcml2LT52aWV3
LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0
Ci0gKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4KLSAqCi0gKiBAcGFyYW0gY291
bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCi0gKi8KLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5z
aWduZWQgaW50IGNvdW50KQotewotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUu
dzsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29y
ZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGNvdW50ICogdGg7Ci0gICAgRXZh
c19Db29yZCBveSA9IHkgKyBvZmZfeSArIChjb3VudCAtIDEpICogdGg7Ci0gICAgRWluYV9Jbmxp
c3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsKLQotICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcu
aXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAxOwotICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0
ZW1zOwotCi0gICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewotICAgICAgICBFaW5hX0lu
bGlzdCAqKml0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7Ci0gICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFdmFzX0Nvb3Jk
IG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICAgICAgaW50IGMgPSAwOwot
Ci0gICAgICAgIGZvciAoaXRyID0gaXRyX3N0YXJ0OyBpdHIgPiBpdHJfZW5kOyBpdHItLSkKLSAg
ICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEpOwotICAgICAgICAqaXRyID0gdG1wOwotCi0gICAg
ICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
dG1wLCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92
ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgMCk7Ci0gICAgICAgICAg
ICBjKys7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgLT0gdGg7Ci0gICAgfQotICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95OwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92
ZSBsZWZ0LW1vc3QgKGZpcnN0KSBjb2x1bW4gcmlnaHQgYXMgbGFzdCAocmlnaHQtbW9zdCkuCi0g
KgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxs
eSB0aGUgZmlyc3QgY29sIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgbGFz
dCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgotICoKLSAqIFRoaXMgaXMgd29ydGgg
anVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYwotICogcHJpdi0+dmlldy5jb2xz
LCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAotICog
aXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCi0gKgotICogQHBhcmFtIGNvdW50IHRo
ZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVk
IGludCBjb3VudCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2LT52aWV3
LmNvbHMgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICBF
dmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29yZCBvZmZfeCA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICogdHc7Ci0gICAgRXZhc19Db29yZCBv
eSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3QgKippdHI7
Ci0gICAgRWluYV9Jbmxpc3QgKippdHJfZW5kOwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVt
czsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIHIgPSAwOwotCi0g
ICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0gY291bnQ7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRy
X2VuZDsgaXRyKyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2Nv
bCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9
IGxhc3RfY29sIC0gY291bnQgKyAxOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrLCBjKyssIG94ICs9IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtICppdDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgq
aXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAgICAgICppdHIgPSBl
aW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0cik7Ci0KLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsKLSAgICAgICAgfQot
ICAgICAgICBveSArPSB0aDsKLSAgICB9Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
PSBvZmZfeDsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIE1vdmUgcmlnaHQtbW9zdCAobGFz
dCkgY29sdW1uIGxlZnQgYXMgZmlyc3QgKGxlZnQtbW9zdCkuCi0gKgotICogVGhlIGZpbmFsIHJl
c3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgbGFzdCBjb2wgdGhh
dAotICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBmaXJzdCBhbmQgZmlsbGVkIHdpdGgg
bmV3IG1vZGVsIGl0ZW1zLgotICoKLSAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50
IGlzIHNtYWxsZXIgdGhhbiBAYwotICogcHJpdi0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBp
cyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAotICogaXMgYmV0dGVyIHRvIHRyaWdn
ZXIgZnVsbCByZWZpbGwuCi0gKgotICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMg
dG8gcmVwZWF0IHRoZSBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0g
ICAgdW5zaWduZWQgaW50IHI7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53
OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICBFdmFzX0Nvb3Jk
IG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IC0gY291bnQgKiB0dzsKLSAgICBFdmFz
X0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFaW5hX0lubGlz
dCAqKml0ciwgKippdHJfZW5kOwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBp
dHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIHIgPSAwOwotCi0gICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRy
KyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChjb3VudCAtIDEpICogdHcg
KyBvZmZfeDsKLSAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBjb3VudCAtIDE7Ci0KLSAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwgb3ggLT0gdHcpIHsKLSAgICAgICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICAgICAgaXQgPSBF
SU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSk7Ci0gICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRy
LCAoKml0ciktPmxhc3QpOwotCi0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0g
dGg7Ci0gICAgfQotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Ci19Ci0K
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
aW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKLXsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJf
ZW5kOwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKLSAgICB1bnNpZ25lZCBp
bnQgcjsKLQotICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsK
LQotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKLQotICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgIG95
ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcu
aXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICByID0gMDsK
LQotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sIC09IHN0ZXBfeDsKLSAgICBwcml2LT5tb2RlbC5i
YXNlLnJvdyAtPSBzdGVwX3k7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIr
KykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICAgICAg
RXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKLSAg
ICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAg
ICAgICAgYysrOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAgICAgb3kg
Kz0gdGg7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2Vu
ZDsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7Ci0KLSAgICBldmFzX29iamVj
dF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7Ci0KLSAgICB0dyA9IHByaXYtPnZpZXcu
dGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAgICBiYXNlX294ID0geCAr
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnk7Ci0KLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBp
dHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFdmFz
X0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBp
dCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICB9Ci0gICAgICAgIG95ICs9
IHRoOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdikKLXsKLSAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBw
cml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAgICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKLSAgICBFdmFzX0Nvb3JkIHR3
LCB0aDsKLSAgICBpbnQgc3RlcF95LCBzdGVwX3g7Ci0KLSAgICBJTkYoIm89JXAsIG9mZnNldDog
JSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAotICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7Ci0KLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAg
ICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBzdGVw
X3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93ID0g
LXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9kZWwu
YmFzZS5yb3cgLSBuZXdfcm93OwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55OwotICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJp
di0+dmlldy54LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcu
eSk7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKLQotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAocHJpdiwgcHJp
di0+dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBfeCwgc3RlcF95KTsKLX0KLQotc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkp
Ci17Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+
dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7
Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OwotCi0gICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQs
ICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwotCi0gICAgaWYgKCFk
eCAmJiAhZHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7
Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2
LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OwotICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2Uu
Y29sIC0gbmV3X2NvbDsKLSAgICBsb25nIG5ld19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgLyB0aDsKLSAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7Ci0K
LSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54Owot
ICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Ci0g
ICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAg
ICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCi0gICAgICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKLQotICAgIGlmICgoc3RlcF94
IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeCA+
IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeSA8IDAg
JiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJvd3MpCi0gICAgICAgIHx8IChzdGVwX3kgPiAwICYm
IHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3MpKSB7Ci0KLSAgICAgICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICogdHc7Ci0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRoOwotCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJp
di0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICs9IGR5OwotCi0gICAgaWYgKHN0ZXBfeSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAocHJpdiwgeCwgeSwgLXN0ZXBfeSk7Ci0gICAgZWxz
ZSBpZiAoc3RlcF95ID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBfeSk7Ci0KLSAgICBpZiAoc3RlcF94IDwgMCkKLSAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHks
IC1zdGVwX3gpOwotICAgIGVsc2UgaWYgKHN0ZXBfeCA+IDApCi0gICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcF94KTsKLQotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9w
b3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpCi17Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5
KHByaXYsIHgsIHkpOwotICAgIHByaXYtPnZpZXcueCA9IHg7Ci0gICAgcHJpdi0+dmlldy55ID0g
eTsKLSAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVy
LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKLSAgICAg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2LT52aWV3LnkpOwotfQotCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBFaW5hX0lubGlzdCAqaXQ7Ci0gICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKLSAgICBpbnQgaSwgajsKLQotICAgIGZv
ciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgewotICAgICAgICBpdCA9IHByaXYt
PnZpZXcuaXRlbXNbaV07Ci0gICAgICAgIGogPSAwOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKGl0LCBpdGVtKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
ZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKLXsKLSAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0KLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
bywgJngsICZ5LCAmdywgJmgpOwotICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgbywg
eCwgeSwgdywgaCk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQot
ICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlOQV9GQUxTRTsKLQotICAgIGV3a190aWxlX21hdHJp
eF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4KTsKLQotICAgIGlmICghcHJpdi0+cmVuZGVyLnN1
c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewotICAgICAgICB1bnNpZ25lZCBsb25nIGNv
bHMsIHJvd3M7Ci0KLSAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmll
dy50aWxlLncgKyAxOwotICAgICAgICByb3dzID0gcHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+
dmlldy50aWxlLmggKyAxOwotCi0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+
bW9kZWwuY3VyLmNvbHM7Ci0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9k
ZWwuY3VyLnJvd3M7Ci0gICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gY29sczsKLSAgICAg
ICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSByb3dzOwotICAgICAgICBpZiAocHJpdi0+bW9kZWwu
b2xkLmNvbHMgPiBjb2xzKQotICAgICAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xz
OwotICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLnJvd3MgPiByb3dzKQotICAgICAgICAgICAg
cm93cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dzOwotICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVz
aXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29scywgcm93cyk7Ci0gICAgfQotCi0gICAgaWYgKHBy
aXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0g
eSkpIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9w
b3MocHJpdiwgeCwgeSk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQucG9zID0gRUlOQV9GQUxTRTsK
LSAgICB9Ci0gICAgaWYgKHByaXYtPmNoYW5nZWQub2Zmc2V0KSB7Ci0gICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KHByaXYsIHgsIHkpOwotICAg
ICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYg
KHByaXYtPmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgdywgaCk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQu
c2l6ZSA9IEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVu
ZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7
Ci0gICAgICAgIHJlY3QueCA9IDA7Ci0gICAgICAgIHJlY3QueSA9IDA7Ci0gICAgICAgIHJlY3Qu
dyA9IHByaXYtPm1vZGVsLndpZHRoOwotICAgICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWln
aHQ7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKLSAgICAgICAgcHJpdi0+
Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShw
cml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVp
Z2h0KTsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9v
ZmZzZXRfZm9yY2UocHJpdik7Ci0KLSAgICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNz
IGFueSBpbXBvcnRhbnQgcmVwYWludCBieQotICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9s
ZSB2aWV3cG9ydCAqLwotICAgICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSByID0KLSAgICAgICAg
ICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OwotICAg
ICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwotICAgIH0K
LQotICAgIGV3a190aWxlX21hdHJpeF90aGF3KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwotCi0gICAgaWYg
KHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLncKLSAgICAgICAgfHwgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID4gMAotICAgICAgICB8fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0g
LSBwcml2LT52aWV3LnRpbGUuaCkKLSAgICAgICAgRVJSKCJpbmNvcnJlY3QgYmFzZSBvZmZzZXQg
JSs0ZCwlKzRkLCB0aWxlPSVkeCVkLCBjdXI9JSs0ZCwlKzRkXG4iLAotICAgICAgICAgICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnksCi0gICAgICAg
ICAgICBwcml2LT52aWV3LnRpbGUudywgcHJpdi0+dmlldy50aWxlLmgsCi0gICAgICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwotCi19Ci0K
LUV2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoRXZhcyAqZSkKLXsKLSAg
ICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQgPSBOVUxMOwotCi0gICAgaWYgKF9ld2tfdGlsZWRf
bG9nX2RvbSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFp
bl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiLCBOVUxMKTsKLQotICAgIGlmICgh
c21hcnQpIHsKLSAgICAgICAgc3RhdGljIEV2YXNfU21hcnRfQ2xhc3Mgc2MgPQotICAgICAgICAg
ICAgRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmUiKTsKLQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3NldCgm
c2MpOwotICAgICAgICBfcGFyZW50X3NjID0gc2M7Ci0KLSAgICAgICAgc2MuYWRkID0gX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZDsKLSAgICAgICAgc2MuZGVsID0gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbDsKLSAgICAgICAgc2MucmVzaXplID0gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZTsKLSAgICAgICAgc2MubW92ZSA9IF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlOwotICAgICAgICBzYy5jYWxjdWxhdGUgPSBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlOwotICAgICAgICBzYy5tZW1iZXJf
YWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQ7Ci0gICAgICAg
IHNjLm1lbWJlcl9kZWwgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2Rl
bDsKLQotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBzbWFydCk7Ci19Ci0KLXZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldChFdmFzX09iamVjdCAqbywgRWlu
YV9Cb29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqYXJlYSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oY2IpOwotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIHBy
aXYtPnJlbmRlci5jYiA9IGNiOwotICAgIHByaXYtPnJlbmRlci5kYXRhID0gKHZvaWQqKWRhdGE7
Ci19Ci0KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIE5VTEwpOwotICAgIHJldHVybiBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotfQotCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBpZiAoZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIHR1Yyk7Ci19Ci0K
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29m
ZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgLyogVE9ETzogY2hlY2sgb2Zmc2V0IGdv
IG91dCBvZiBib3VuZHMsIGNsYW1wICovCi0gICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkK
LSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCA9IHg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSB5OwotCi0gICAgcHJpdi0+Y2hh
bmdlZC5vZmZzZXQgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2No
YW5nZWQocHJpdik7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCAq
bywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgREJHKCJvPSVwLCB4PSVkLCB5
PSVkIiwgbywgeCwgeSk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBF
SU5BX0ZBTFNFKTsKLSAgICBpZiAoeCA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5ID09
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotCi0g
ICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0
X2ludGVybmFsKHByaXYsIHgsIHkpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCBk
eCwgRXZhc19Db29yZCBkeSkKLXsKLSAgICBEQkcoIm89JXAsIGR4PSVkLCBkeT0lZCIsIG8sIGR4
LCBkeSk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNF
KTsKLSAgICBpZiAoIWR4ICYmICFkeSkKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLQotICAg
IHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9p
bnRlcm5hbAotICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkeCwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5
LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQotewotICAgICpvZmZ4ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7Ci0gICAgKm9mZnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eTsKLQotICAgIGlmIChmYWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6b29tKSA8IFpPT01f
U1RFUF9NSU4pIHsKLSAgICAgICAgREJHKCJpZ25vcmVkIGFzIHpvb20gZGlmZmVyZW5jZSBpcyA8
ICVmOiAlZiIsCi0gICAgICAgICAgICAoZG91YmxlKVpPT01fU1RFUF9NSU4sIGZhYnNmKHByaXYt
PnZpZXcudGlsZS56b29tIC0gKnpvb20pKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAg
ICB9Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zs
dXNoKHByaXYpOwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotCi0gICAgKnpvb20gPSBST1VOREVE
X1pPT00ocHJpdi0+dmlldy50aWxlLncsICp6b29tKTsKLQotICAgIHR3ID0gcHJpdi0+dmlldy50
aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIGZsb2F0IHNjYWxlID0g
Knpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKLQotICAgIHByaXYtPnZpZXcudGlsZS56b29t
ID0gKnpvb207Ci0gICAgLy8gdG9kbzogY2hlY2sgY3ggWzAsIHddLi4uCi0gICAgcHJpdi0+dmll
dy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21f
Y2VudGVyLnkgPSBjeTsKLQotCi0gICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcu
aCkgewotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwotICAgICAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAg
IH0KLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0OwotCi0gICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9
IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7Ci0gICAgRXZhc19D
b29yZCBieCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGN4KSAqIHNjYWxlOwot
ICAgIEV2YXNfQ29vcmQgYnkgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgLSBjeSkg
KiBzY2FsZTsKLQotICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lkdGggPSBwcml2LT5tb2RlbC53aWR0
aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVp
Z2h0ICogc2NhbGU7Ci0KLSAgICBpZiAobW9kZWxfd2lkdGggPCBwcml2LT52aWV3LncgfHwgbmV3
X3ggPj0gMCkKLSAgICAgICAgbmV3X3ggPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeCArIHByaXYt
PnZpZXcudyA+PSBtb2RlbF93aWR0aCkKLSAgICAgICAgbmV3X3ggPSAtbW9kZWxfd2lkdGggKyBw
cml2LT52aWV3Lnc7Ci0KLSAgICBpZiAobW9kZWxfaGVpZ2h0IDwgcHJpdi0+dmlldy5oIHx8IG5l
d195ID49IDApCi0gICAgICAgIG5ld195ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3kgKyBwcml2
LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0KQotICAgICAgICBuZXdfeSA9IC1tb2RlbF9oZWlnaHQg
KyBwcml2LT52aWV3Lmg7Ci0KLSAgICBieCA9IG5ld194ICUgdHc7Ci0gICAgcHJpdi0+bW9kZWwu
YmFzZS5jb2wgPSAtIG5ld194IC8gdHc7Ci0gICAgYnkgPSBuZXdfeSAlIHRoOwotICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93ID0gLSBuZXdfeSAvIHRoOwotCi0gICAgcHJpdi0+Y2hhbmdlZC5zaXpl
ID0gRUlOQV9UUlVFOwotICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7Ci0gICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Ci0KLSAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3
X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gYng7Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID0gYnk7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnk7Ci0gICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsK
LSAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwotCi0gICAgZXZhc19vYmplY3Rf
bW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgbmV3X3ggKyBw
cml2LT52aWV3LngsCi0gICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKLQotICAgIEV2YXNfQ29v
cmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAgRXZh
c19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
OwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOwotCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAg
ICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0g
Kml0cjsKLQotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7
Ci0gICAgICAgICAgICBveCArPSB0dzsKLSAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0ICp6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5
KQotewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpKnpvb20pOwotCi0gICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0KLSAgICByZXR1
cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKHByaXYsIHpvb20s
IGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3Jk
IGN4LCBFdmFzX0Nvb3JkIGN5KQotewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3Vi
bGUpem9vbSk7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxT
RSk7Ci0gICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcuaCkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsK
LSAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsKLQotICAgIGZsb2F0IHNjYWxlID0g
em9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwotCi0gICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9P
TShwcml2LT52aWV3LnRpbGUudywgc2NhbGUpOwotICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJ
WkUodHcsIHByaXYtPnZpZXcudGlsZS53KTsKLSAgICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKHBy
aXYtPnZpZXcudGlsZS5oLCBzY2FsZSk7Ci0gICAgem9vbSA9IHNjYWxlICogcHJpdi0+dmlldy50
aWxlLnpvb207Ci0KLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3dpZHRoID0gcHJpdi0+bW9kZWwud2lk
dGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX2hlaWdodCA9IHByaXYtPm1vZGVsLmhl
aWdodCAqIHNjYWxlOwotCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIsIG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOwotCi0gICAgaW50IHZyb3dzID0gY2Vp
bCgoZmxvYXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSArIDE7Ci0gICAgaW50IHZjb2xzID0g
Y2VpbCgoZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3KSArIDE7Ci0gICAgRXZhc19Db29y
ZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0g
ICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kp
ICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBieCA9IG5ld194ICUgdHc7Ci0gICAgRXZhc19Db29y
ZCBieSA9IG5ld195ICUgdGg7Ci0gICAgdW5zaWduZWQgbG9uZyBiYXNlX3JvdyA9IC1uZXdfeSAv
IHRoOwotICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAtbmV3X3ggLyB0dzsKLQotICAgIGlm
IChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlX2NvbCAhPSBwcml2LT5t
b2RlbC5iYXNlLmNvbCkgewotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IGJhc2Vfcm93
OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJhc2VfY29sOwotICAgICAgICByZWNh
bGMgPSBFSU5BX1RSVUU7Ci0gICAgfQotCi0gICAgaWYgKHZyb3dzID4gcHJpdi0+dmlldy5yb3dz
IHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQotICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7
Ci0KLSAgICBpZiAocmVjYWxjKSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgdywgaDsKLSAgICAgICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIE5VTEwsIE5VTEwsICZ3LCAmaCk7Ci0gICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKHByaXYsIHcsIGgsIHR3
LCB0aCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhw
cml2KTsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhw
cml2KTsKLSAgICB9Ci0KLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBieCArIHByaXYtPnZpZXcu
eDsKLSAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7Ci0KLSAgICBldmFzX29i
amVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICBu
ZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+
dmlldy55KTsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0
ciArIHByaXYtPnZpZXcucm93czsKLQotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykg
ewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRWluYV9Jbmxpc3Qg
KmxzdCA9ICppdHI7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7Ci0g
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kp
OwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0
dywgdGgpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0g
dGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBF
dmFzX0Nvb3JkIGgpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0g
ICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLng7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55Owot
ICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgRXZhc19D
b29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0g
cHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OwotCi0gICAgaWYgKC1uZXdfeCA+IHcpIHsKLSAgICAgICAgbmV3X3ggPSAtdzsKLSAgICAgICAg
YnggPSBuZXdfeCAlIHR3OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAv
IHR3OwotICAgIH0KLQotICAgIGlmICgtbmV3X3kgPiBoKSB7Ci0gICAgICAgIG5ld195ID0gLWg7
Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cg
PSAtbmV3X3kgLyB0aDsKLSAgICB9Ci0KLSAgICBpZiAoYnggPj0gMCB8fCBieCA8PSAtMiAqIHBy
aXYtPnZpZXcudGlsZS53KSB7Ci0gICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKLSAgICB9Ci0KLSAgICBpZiAoYnkgPj0g
MCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKSB7Ci0gICAgICAgIGJ5ID0gbmV3X3kg
JSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKLSAgICB9
Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdf
eDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IGJ4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5Owot
ICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgICAg
ICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAgICAgICAgICAgICAgICAgICAgbmV3
X3kgKyBwcml2LT52aWV3LnkpOwotCi0gICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2
LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0KLSAgICBpdHIgPSBwcml2LT52
aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0KLSAgICBm
b3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJh
c2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwotCi0gICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3
OwotICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLX0KLQotdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAq
bywgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotCi0gICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OwotICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoX3Nj
YWxlOwotCi0gICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
Kml0ciwgaXQpCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldAotICAgICAgICAgICAg
ICAgICAgICAoaXQsIHNtb290aF9zY2FsZSk7Ci0gICAgfQotfQotCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqdXBkYXRlKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJ
TkFfRkFMU0UpOwotCi0gICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICByZXR1cm4gZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2
LT5tb2RlbC5tYXRyaXgsIHVwZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcml2LT52aWV3LnRpbGUuem9vbSk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLSAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9jYiA9
IGNiOwotICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0YTsKLX0KLQotdm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19P
YmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09i
amVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2I7Ci0gICAgcHJpdi0+
cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8pCi17Ci0gICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIocHJp
di0+bW9kZWwubWF0cml4KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250
ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQg
aGVpZ2h0KQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAg
aWYgKHdpZHRoID09IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9PSBwcml2LT5tb2RlbC5o
ZWlnaHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByaXYtPm1vZGVsLndpZHRoID0gd2lkdGg7
Ci0gICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX1RSVUU7Ci0KLSAgICBEQkcoIndpZHRoLGhlaWdodD0lZCwgJWQiLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKLX0K
LQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KEV2YXNf
T2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVuZGVyLmRpc2FibGVkKQot
ICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKLX0KLQotdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9
IE5VTEw7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7Ci0gICAgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkgPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gMDsKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgIHByaXYtPm1v
ZGVsLmJhc2UuY29sID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7Ci0gICAgcHJp
di0+bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKLSAg
ICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAw
OwotICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUsIFNUQVRVUyBCRUZP
UkUgREVMRVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfbWVtX2RiZyhwcml2KTsKLSNlbmRpZgotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2KTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9jbGVhcih0dWMpOwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgcHJp
bnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJFQ1JFQVRJTkcgVElM
RSBNQVRSSVg6XG4iKTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2
KTsKLSNlbmRpZgotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKLXsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBFaW5hX1RpbGVfR3JpZF9T
bGljZXIgc2xpY2VyOwotICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8gKmluZm87Ci0gICAg
RXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0KLSAg
ICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0g
ICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7Ci0KLSAgICBp
ZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywg
dGgpKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xpY2VyIGZvciAlZCwl
ZCslZHglZCB0aWxlPSVkeCVkIiwKLSAgICAgICAgICAgIHgsIHksIHcsIGgsIHR3LCB0aCk7Ci0g
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIHdoaWxlIChlaW5hX3RpbGVf
Z3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBjID0gaW5mby0+Y29sOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIHIgPSBp
bmZvLT5yb3c7Ci0gICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9hZGQocHJpdiwgYywgciwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKLQotICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpvb20pOwotICAgIHJl
dHVybiBFSU5BX1RSVUU7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5zaWduZWQgaW50IG4s
IGZsb2F0IHpvb20pCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlO
QV9GQUxTRSk7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2Nv
bCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
LQotICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBwcml2LT52aWV3LnJv
d3M9JWx1IiwKLSAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBuLCBwcml2LT52aWV3
LnJvd3MpOwotICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVsLmJhc2Uucm93IC0gbjsK
LSAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG47Ci0gICAgZW5k
X3JvdyA9IE1JTihwcml2LT5tb2RlbC5jdXIucm93cyAtIDEsCi0gICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC5iYXNlLnJvdyArIHByaXYtPnZpZXcucm93cyArIG4gLSAxKTsKLSAgICBlbmRf
Y29sID0gTUlOKHByaXYtPm1vZGVsLmN1ci5jb2xzIC0gMSwKLSAgICAgICAgICAgICAgICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAtIDEpOwotCi0gICAgSU5G
KCJzdGFydF9yb3c9JWx1LCBlbmRfcm93PSVsdSwgc3RhcnRfY29sPSVsdSwgZW5kX2NvbD0lbHUi
LAotICAgICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOwotCi0g
ICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7Ci0KLSAgICBm
b3IgKGkgPSBzdGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsrKQotICAgICAgICBmb3IgKGogPSBz
dGFydF9jb2w7IGogPD0gZW5kX2NvbDsgaisrKQotICAgICAgICAgICAgaWYgKCFfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChwcml2LCBqLCBpLCB6b29tLCBQ
UkVfUkVOREVSX1BSSU9SSVRZX0xPVykpCi0gICAgICAgICAgICAgICAgZ290byBzdGFydF9wcm9j
ZXNzaW5nOwotCi1zdGFydF9wcm9jZXNzaW5nOgotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0KLSAgICB0dWMgPSBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGggPSAoZW5k
X3JvdyAtIHN0YXJ0X3JvdyArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxl
LmgsIHpvb20pOwotICAgIHcgPSAoZW5kX2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpF
X0FUX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pOwotICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9sb2NrX2FyZWEodHVjLAotICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpFX0FU
X1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pLAotICAgICAgICAgICAgc3RhcnRfcm93ICog
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHpvb20pLCB3LCBoLCB6b29tKTsK
LQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pCi17Ci0gICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0K
LSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKHBy
aXYpOwotCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+
bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVj
KTsKLX0KLQotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVy
KEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYs
IEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJs
ZV9yZW5kZXIocHJpdik7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9l
bmFibGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9j
aGFuZ2VkKHByaXYpOwotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxl
X3JlbmRlcihwcml2KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1YjljZWExMGVkMmI1YjQyZTg5MDk4NGU2
YjliMmMxODNlN2U5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCkBAIC0wLDAgKzEsMTkyMiBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKKworI2luY2x1
ZGUgImV3a190aWxlZF9tYXRyaXguaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgor
I2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRp
by5oPiAvLyBYWFggUkVNT1ZFIE1FIExBVEVSCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgSURYKGNvbCwgcm93LCByb3dzcGFuKSAoY29sICsgKHJv
dyAqIHJvd3NwYW4pKQorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbTsKK3R5
cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0OworCitlbnVtIF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHsKKyAgICBQUkVfUkVOREVS
X1BSSU9SSVRZX0xPVyA9IDAsIC8qKjwgQXBwZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0ICov
CisgICAgUFJFX1JFTkRFUl9QUklPUklUWV9ISUdIICAgICAvKio8IFByZXBlbmQgdGhlIHJlcXVl
c3QgdG8gdGhlIGxpc3QgKi8KK307Cit0eXBlZGVmIGVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0
b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRl
cl9Qcmlvcml0eTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIHsKKyAg
ICBFSU5BX0lOTElTVDsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBzdHJ1Y3QgeworICAgICAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgfSBnZW9tZXRyeTsKKyAgICBFaW5hX0Jvb2wg
c21vb3RoX3NjYWxlOworfTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVf
UmVuZGVyX1JlcXVlc3QgeworICAgIEVJTkFfSU5MSVNUOworICAgIHVuc2lnbmVkIGxvbmcgY29s
LCByb3c7CisgICAgZmxvYXQgem9vbTsKK307CisKK3N0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSB7CisgICAgRXZhc19PYmplY3RfU21hcnRfQ2xpcHBlZF9EYXRhIGJhc2U7Cisg
ICAgRXZhc19PYmplY3QgKnNlbGY7CisgICAgRXZhc19PYmplY3QgKmNvbnRlbnRzX2NsaXBwZXI7
CisgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9Jbmxpc3QgKippdGVtczsKKyAgICAgICAgRXZh
c19Db29yZCB4LCB5LCB3LCBoOworICAgICAgICBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgICAgICAgICBmbG9hdCB6
b29tOworICAgICAgICAgICAgRWluYV9Cb29sIHpvb21fd2Vha19zbW9vdGhfc2NhbGU6MTsKKyAg
ICAgICAgfSB0aWxlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CisgICAgICAgICAgICB9IGN1ciwgb2xkLCBi
YXNlLCB6b29tX2NlbnRlcjsKKyAgICAgICAgfSBvZmZzZXQ7CisgICAgfSB2aWV3OworICAgIEV2
YXNfQ29sb3JzcGFjZSBjc3BhY2U7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXdrX1RpbGVfTWF0
cml4ICptYXRyaXg7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGNvbCwgcm93OworICAgICAgICB9IGJhc2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIH0gY3VyLCBvbGQ7CisgICAgICAg
IEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKKyAgICB9IG1vZGVsOworICAgIHN0cnVjdCB7Cisg
ICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWlu
YV9SZWN0YW5nbGUgKmFyZWEpOworICAgICAgICB2b2lkICpkYXRhOworICAgICAgICBFaW5hX0lu
bGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICAgICAgRWNvcmVfSWRsZXIgKmlkbGVyOwor
ICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7CisgICAgICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7
CisgICAgfSByZW5kZXI7CisgICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAqKCpwcmVfY2IpKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcHJlX2RhdGE7CisgICAg
ICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEsIEV2YXNfT2Jq
ZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcG9zdF9kYXRhOworICAgIH0gcHJvY2VzczsKKyAgICBz
dHJ1Y3QgeworICAgICAgICBFaW5hX0Jvb2wgYW55OjE7CisgICAgICAgIEVpbmFfQm9vbCBwb3M6
MTsKKyAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKKyAgICAgICAgRWluYV9Cb29sIG1vZGVsOjE7
CisgICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKKyAgICB9IGNoYW5nZWQ7CisjaWZkZWYgREVC
VUdfTUVNX0xFQUtTCisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciAqc2lnX3VzcjsKKyNlbmRpZgor
fTsKKworc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVWQVNfU01BUlRfQ0xB
U1NfSU5JVF9OVUxMOworaW50IF9ld2tfdGlsZWRfbG9nX2RvbSA9IC0xOworCisjZGVmaW5lIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAuLi4pICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0
KG9iaikpOyBcCisgICAgaWYgKCFwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENSSVRJQ0FMKCJubyBwcml2YXRlIGRh
dGEgaW4gb2JqPSVwIiwgb2JqKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBf
X1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7CitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpOworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpOwor
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIHZvaWQgKmRh
dGEgPSAwOworCisgICAgLyogRG8gbm90IHByb2Nlc3MgdXBkYXRlcy4gTm90ZSB0aGF0IHdlIHN0
aWxsIHdhbnQgdG8gZ2V0IHVwZGF0ZXMgcmVxdWVzdHMKKyAgICAgKiBpbiB0aGUgcXVldWUgaW4g
b3JkZXIgdG8gbm90IG1pc3MgYW55IHVwZGF0ZXMgYWZ0ZXIgdGhlIHJlbmRlciBpcworICAgICAq
IHJlc3VtZWQuCisgICAgICovCisgICAgaWYgKHByaXYtPnJlbmRlci5zdXNwZW5kIHx8ICFldmFz
X29iamVjdF92aXNpYmxlX2dldChwcml2LT5zZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQorICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5w
cmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+c2VsZik7CisKKyAgICBld2tfdGls
ZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBpZiAo
cHJpdi0+cHJvY2Vzcy5wb3N0X2NiKQorICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IocHJp
di0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOworfQorCitzdGF0aWMgaW50
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lkICpkYXRhKQoreworICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMg
PSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwor
CisgICAgaWYgKHR1YykgeworICAgICAgICBEQkcoImZsdXNoIHVudXNlZCB0aWxlIGNhY2hlLiIp
OworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgIH0g
ZWxzZQorICAgICAgICBFUlIoIm5vIGNhY2hlPyEiKTsKKworICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgRXdrX1RpbGUgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQg
bG9uZyByb3csIGZsb2F0IHpvb20pCit7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRXZhcyAqZXZh
cyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYpOworICAgIGlmICghZXZhcykgewor
ICAgICAgICBDUklUSUNBTCgiZXZhc19vYmplY3RfZXZhc19nZXQgZmFpbGVkISIpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0ID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3Cisg
ICAgICAgIChwcml2LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93LCB6b29tKTsKKworICAg
IGlmICghdCkgeworICAgICAgICBDUklUSUNBTCgiZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3IGZh
aWxlZCEiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorewor
ICAgIGl0LT5nZW9tZXRyeS54ID0geDsKKyAgICBpdC0+Z2VvbWV0cnkueSA9IHk7CisKKyAgICBp
ZiAoaXQtPnRpbGUpCisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCB4
LCB5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVz
aXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCkKK3sKKyAgICBpdC0+Z2VvbWV0cnkudyA9IHc7CisgICAgaXQtPmdlb21ldHJ5Lmgg
PSBoOworCisgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShp
dC0+dGlsZS0+aW1hZ2UsIHcsIGgpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3Nl
dChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIHcsIGgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlICp0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdCkKK3sKKyAgICBpZiAoaXQtPnRpbGUpCisgICAgICAgIENSSVRJQ0FMKCJpdC0+dGls
ZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKKyAgICBpdC0+dGlsZSA9IHQ7
CisgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS54LCBp
dC0+Z2VvbWV0cnkueSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5pbWFnZSwg
aXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9m
aWxsX3NldAorICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCBpdC0+Z2VvbWV0cnkudywg
aXQtPmdlb21ldHJ5LmgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQo
aXQtPnRpbGUtPmltYWdlLCBpdC0+c21vb3RoX3NjYWxlKTsKKworICAgIGlmICghZXdrX3RpbGVf
dmlzaWJsZV9nZXQodCkpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQodC0+
aW1hZ2UsIHByaXYtPnNlbGYpOworCisgICAgZXdrX3RpbGVfc2hvdyh0KTsKK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpp
dCwgZG91YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
KyAgICBld2tfdGlsZV9oaWRlKGl0LT50aWxlKTsKKyAgICBpZiAoIWV3a190aWxlX3Zpc2libGVf
Z2V0KGl0LT50aWxlKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChpdC0+
dGlsZS0+aW1hZ2UpOworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChwcml2LT5tb2RlbC5t
YXRyaXgsIGl0LT50aWxlLCBsYXN0X3VzZWQpOworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKworICAgIGl0LT50aWxlID0gMDsKK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5hX0lubGlzdCAqaXQ7Cisg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKKyAgICBpbnQgaTsKKyAgICBk
b3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworCisgICAgZm9yIChpID0g
MDsgaSA8IHByaXYtPnZpZXcucm93czsgaSsrKSB7CisgICAgICAgIGl0ID0gcHJpdi0+dmlldy5p
dGVtc1tpXTsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAgICAg
ICAgIGlmIChpdGVtLT50aWxlKQorICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2ln
bmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSwgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7CisKKyAgICByID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0Kj4obWFsbG9j
KHNpemVvZigqcikpKTsKKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwor
CisgICAgaWYgKHByaW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKKyAgICAgICAg
cHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCisg
ICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNU
X0dFVChyKSk7CisgICAgZWxzZQorICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1
ZXN0cyA9IGVpbmFfaW5saXN0X2FwcGVuZAorICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVf
cmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworCisgICAgci0+Y29sID0gY29s
OworICAgIHItPnJvdyA9IHJvdzsKKyAgICByLT56b29tID0gem9vbTsKKworICAgIHJldHVybiBF
SU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCit7Cisg
ICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUK
KyAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9H
RVQocikpOworICAgIGZyZWUocik7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXYpCit7CisgICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCisgICAgICAg
IHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLAorICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5y
ZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICB3aGlsZSAoKnBsKSB7CisgICAgICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKKyAgICAgICAgciA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7
CisgICAgICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7CisgICAgICAgIGZy
ZWUocik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9y
ZXF1ZXN0czsKKyAgICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKKyAgICB3aGlsZSAo
aXRlcikgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnIgPQorICAgICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKKyAgICAgICAg
ICAgICAgICBpdGVyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qp
OworICAgICAgICB0bXAgPSBpdGVyLT5uZXh0OworICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9y
ZW1vdmUoKnBsLCBpdGVyKTsKKyAgICAgICAgaXRlciA9IHRtcDsKKyAgICAgICAgZnJlZShyKTsK
KyAgICB9Cit9CisKKy8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBp
ZiByZXF1aXJlZCEgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnJlcTsKKyAgICBFaW5hX1JlY3RhbmdsZSBhcmVhOworICAgIEV3a19UaWxlX01hdHJpeCAq
dG0gPSBwcml2LT5tb2RlbC5tYXRyaXg7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWM7CisgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICBmbG9h
dCB6b29tOworICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisK
KyAgICByZXEgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zp
cnN0KHByaXYpOworICAgIGlmICghcmVxKQorICAgICAgICByZXR1cm47CisKKyAgICBjb2wgPSBy
ZXEtPmNvbDsKKyAgICByb3cgPSByZXEtPnJvdzsKKyAgICB6b29tID0gcmVxLT56b29tOworCisg
ICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpv
b20pKSB7CisgICAgICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUs
JWx1IEAgJWYuIiwgY29sLCByb3csIHpvb20pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisK
KyAgICB0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93
LCB6b29tKTsKKyAgICBpZiAoIXQpCisgICAgICAgIGdvdG8gZW5kOworCisgICAgYXJlYS54ID0g
MDsKKyAgICBhcmVhLnkgPSAwOworICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53OworICAg
IGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgcHJpdi0+cmVuZGVyLmNiKHByaXYt
PnJlbmRlci5kYXRhLCB0LCAmYXJlYSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRh
dGVfYWRkKAorICAgICAgICB0LT5pbWFnZSwKKyAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEu
dywgYXJlYS5oKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0
KTsKKworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKKwor
ZW5kOgorICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVs
KHByaXYsIHJlcSk7CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aCh0dWMpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSo+KGRhdGEpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQorICAgICAgICBk
YXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+
c2VsZik7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X3Byb2Nlc3Nfc2luZ2xlKHByaXYpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikK
KyAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBk
YXRhLCBwcml2LT5zZWxmKTsKKworICAgIGlmICghcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVx
dWVzdHMpIHsKKyAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gMDsKKyAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJf
c3RvcChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlmICghcHJp
di0+cmVuZGVyLmlkbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBlY29yZV9pZGxlcl9kZWwo
cHJpdi0+cmVuZGVyLmlkbGVyKTsKKyAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSAwOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlm
IChwcml2LT5yZW5kZXIuaWRsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBwcml2LT5yZW5kZXIu
aWRsZXIgPSBlY29yZV9pZGxlcl9hZGQoCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2IsIHByaXYpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQoreworICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9U
UlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rv
cChwcml2KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYpCit7CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9G
QUxTRTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0
KHByaXYpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGljIGlubGluZSBFaW5h
X0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgdW5z
aWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQoreworICAgIHVuc2lnbmVkIGxvbmcg
bV9jb2wgPSBwcml2LT5tb2RlbC5iYXNlLmNvbCArIGNvbDsKKyAgICB1bnNpZ25lZCBsb25nIG1f
cm93ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyByb3c7CisgICAgZG91YmxlIGxhc3RfdXNlZCA9
IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKworICAgIGlmIChtX2NvbCA+PSBwcml2LT5tb2RlbC5j
dXIuY29scyB8fCBtX3JvdyA+PSBwcml2LT5tb2RlbC5jdXIucm93cykgeworICAgICAgICBpZiAo
aXQtPnRpbGUpCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNz
b2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEV3a19U
aWxlICp0OworICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207
CisKKyAgICAgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgICAgICBFd2tfVGlsZSAqb2xkID0g
aXQtPnRpbGU7CisgICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gbV9yb3cgfHwgb2xkLT5jb2wg
IT0gbV9jb2wgfHwgb2xkLT56b29tICE9IHpvb20pCisgICAgICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09IG1fY29s
ICYmIG9sZC0+em9vbSA9PSB6b29tKQorICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAg
ICB9CisKKyAgICAgICAgdCA9IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChwcml2LT5t
b2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jvdywgem9vbSk7CisKKyAgICAgICAgaWYgKCF0KSB7Cisg
ICAgICAgICAgICAvKiBOT1RFOiBpdCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNl
dCEgKi8KKyAgICAgICAgICAgIGlmIChpdC0+dGlsZSkgeworICAgICAgICAgICAgICAgIENSSVRJ
Q0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKKyAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
IGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdF91c2VkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRG8gbm90
IGFkZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRlciBxdWV1ZSAqLworICAgICAgICAgICAgaWYg
KCFwcml2LT5yZW5kZXIuc3VzcGVuZCkgeworICAgICAgICAgICAgICAgIHQgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0
ZShwcml2LCB0LCBpdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodCAhPSBp
dC0+dGlsZSkgeworICAgICAgICAgICAgaWYgKGl0LT50aWxlKQorICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgbGFz
dF91c2VkKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29j
aWF0ZShwcml2LCB0LCBpdCk7CisgICAgICAgIH0KKworICAgICAgZW5kOgorCisgICAgICAgIHJl
dHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3Rh
dGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBs
b25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqaXQ7CisgICAgRXZhc19Db29yZCB4LCB5LCB0dywgdGg7CisKKyAgICBEQkcoIm89
JXAiLCBwcml2LT5zZWxmKTsKKworICAgIGl0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSo+KG1hbGxvYyhzaXplb2YoKml0KSkpOworICAgIGlmICghaXQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2
LT52aWV3LnggKyB0dyAgKmNvbDsKKyAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsg
cHJpdi0+dmlldy55ICsgdGggICpyb3c7CisKKyAgICBpdC0+dGlsZSA9IDA7CisKKyAgICBpdC0+
c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGU7Cisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgeCwgeSk7CisgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgIGlmICgh
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgY29sLCByb3cpKSB7
CisgICAgICAgIGZyZWUoaXQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1
cm4gaXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Rl
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCkKK3sKKyAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAgICAgZG91YmxlIGxh
c3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAgICB9CisK
KyAgICBmcmVlKGl0KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwg
RWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBpZiAoaXQtPnNtb290aF9zY2FsZSA9PSBz
bW9vdGhfc2NhbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpdC0+dGlsZSkKKyAgICAg
ICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGlsZS0+aW1hZ2UsIHNt
b290aF9zY2FsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAg
IGlmIChwcml2LT5jaGFuZ2VkLmFueSkKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NoYW5nZWQocHJpdi0+c2VsZik7CisgICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBFSU5B
X1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlz
dCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgRWluYV9Jbmxpc3QgKm47Cisg
ICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBuID0gKCpwX3JvdyktPmxhc3Q7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KykgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAg
aXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0pOworICAgICAgICBuID0gbi0+cHJldjsKKyAgICAgICAgKnBfcm93ID0gZWluYV9pbmxp
c3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CisgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgfQorfQorCitzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNp
Z25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKKworICAgIGZvciAoaSA9IDA7IGkg
PCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKml0OworCisgICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKKyAgICAgICAgaWYgKCFpdCkgeworICAgICAgICAg
ICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1IGluIHJvdyAldS4iLCBp
LCBjb3VudCwgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19j
b2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOworICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CisgICAgICAgIH0KKworICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnBf
cm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKKyAgICB9CisgICAgcmV0dXJuIEVJTkFfVFJVRTsK
K30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqcm93KQorewor
ICAgIHdoaWxlIChyb3cpIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQ7CisgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICByb3cgPSByb3ctPm5leHQ7CisgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2Rl
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnN0YXJ0
LCBFaW5hX0lubGlzdCAqKmVuZCkKK3sKKyAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0Kysp
IHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChwcml2LCAq
c3RhcnQpOworICAgICAgICAqc3RhcnQgPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipzdGFydDsKKyAgICBFaW5h
X0lubGlzdCAqKmVuZDsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBlbmQg
PSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOworCisgICAg
ZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKKyAgICBwcml2LT52aWV3Lml0ZW1zID0gMDsKKyAgICBw
cml2LT52aWV3LmNvbHMgPSAwOworICAgIHByaXYtPnZpZXcucm93cyA9IDA7Cit9CisKK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIodm9pZCAqZGF0YSwgRXdrX1Rp
bGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQoreworICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKj4oZGF0YSk7CisKKyAgICBJTkYoIlRPRE8gJXAgKHZpc2libGU/ICVkKSBbJWx1LCVs
dV0gJWQsJWQgKyAlZHglZCIsCisgICAgICAgIHQsIHQtPnZpc2libGUsIHQtPmNvbCwgdC0+cm93
LCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKKworICAgIGlmICghdC0+dmlz
aWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByaXYtPnZpZXcudGlsZS53ICE9IHQt
PncgfHwgcHJpdi0+dmlldy50aWxlLmggIT0gdC0+aCkKKyAgICAgICAgcmV0dXJuOyAvLyB0b2Rv
OiByZW1vdmUgbWUgbGF0ZXIsIGRvbid0IGV2ZW4gZmxhZyBhcyBkaXJ0eSEKKworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5jYik7CisgICAgaWYgKCFwcml2LT5y
ZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHQsIGFyZWEpKQorICAgICAgICByZXR1cm47CisK
KyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQodC0+aW1hZ2UsIGFyZWEtPngs
IGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAg
aWYgKHByaXYtPm1vZGVsLm1hdHJpeCkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7CisKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5vZmZz
ZXQgPSBFSU5BX0ZBTFNFOworICAgICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7
CisKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWUocHJpdi0+bW9kZWwubWF0cml4KTsKKyAg
ICB9CisKKyAgICBwcml2LT5tb2RlbC5tYXRyaXggPSBld2tfdGlsZV9tYXRyaXhfbmV3KHR1Yywg
cHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLCBwcml2LT5jc3BhY2Us
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIsIHByaXYpOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbChFdmFzX09iamVjdCAq
bywgRXZhc19PYmplY3QgKm1lbWJlcikKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKyAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBldmFzX29iamVjdF9jbGlwX3Vuc2V0KG1lbWJlcik7CisgICAgaWYgKCFldmFzX29i
amVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c19jbGlwcGVyKSkKKyAgICAgICAgZXZhc19v
YmplY3RfaGlkZShwcml2LT5jb250ZW50c19jbGlwcGVyKTsKK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQoRXZhc19PYmplY3QgKm8sIEV2
YXNfT2JqZWN0ICptZW1iZXIpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
dik7CisgICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgZXZhc19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c19jbGlwcGVyKTsK
KyAgICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQobykpCisgICAgICAgIGV2YXNfb2JqZWN0
X3Nob3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cit9CisKKyNpZmRlZiBERUJVR19NRU1fTEVB
S1MKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgc3RhdGljIGludCBydW4gPSAwOwor
CisgICAgcnVuKys7CisKKyAgICBwcmludGYoIlxuLS0tIEJFR0lOIERFQlVHIFRJTEVEIEJBQ0tJ
TkcgU1RPUkUgTUVNT1JZIFslZF0gLS1cbiIKKyAgICAgICAgICAgInQ9JTAuMmYsIG9iaj0lcCwg
cHJpdj0lcCwgdmlldy5pdGVtcz0lcCwgbWF0cml4PSVwXG4iLAorICAgICAgICAgICBydW4sIGVj
b3JlX2xvb3BfdGltZV9nZXQoKSwKKyAgICAgICAgICAgcHJpdi0+c2VsZiwgcHJpdiwgcHJpdi0+
dmlldy5pdGVtcywgcHJpdi0+bW9kZWwubWF0cml4KTsKKworICAgIGV3a190aWxlX21hdHJpeF9k
YmcocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOwor
CisgICAgcHJpbnRmKCItLS0gRU5EIERFQlVHIFRJTEVEIEJBQ0tJTkcgU1RPUkUgTUVNT1JZIFsl
ZF0gLS1cblxuIiwgcnVuKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc2lnX3Vzcih2b2lkICpkYXRhLCBpbnQgdHlwZSwgdm9pZCAqZXZlbnQpCit7Cisg
ICAgRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIgKnNpZyA9IChFY29yZV9FdmVudF9TaWduYWxfVXNl
ciopZXZlbnQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKilkYXRhOworCisgICAgaWYgKHNpZy0+bnVtYmVyID09
IDIpIHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgICAgIHR1YyA9
IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Cisg
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgfQorCisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKHByaXYpOworICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9
CisjZW5kaWYKKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCAqbykKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2OworCisgICAgREJHKCJvPSVwIiwgbyk7CisKKyAgICBwcml2ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoKnByaXYpKSk7Cisg
ICAgaWYgKCFwcml2KQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5zZWxmID0gbzsKKyAg
ICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEuMDsKKyAgICBwcml2LT52aWV3LnRpbGUudyA9IERF
RkFVTFRfVElMRV9XOworICAgIHByaXYtPnZpZXcudGlsZS5oID0gREVGQVVMVF9USUxFX0g7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IDA7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQub2xkLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2Uu
Y29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7CisgICAgcHJpdi0+bW9kZWwu
Y3VyLmNvbHMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKKyAgICBwcml2LT5t
b2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAwOworICAgIHBy
aXYtPm1vZGVsLndpZHRoID0gMDsKKyAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSAwOworICAgIHBy
aXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKKyAgICBwcml2LT5jc3BhY2UgPSBFVkFT
X0NPTE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KKworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHByaXYpOworICAgIF9wYXJlbnRfc2MuYWRkKG8pOworCisg
ICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoCisg
ICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pKTsKKyAgICBldmFzX29iamVjdF9tb3ZlKHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2
LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC53
aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9zZXQocHJp
di0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBldmFzX29iamVj
dF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21l
bWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbyk7CisKKyAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCAwKTsKKyAgICBldmFzX29iamVj
dF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfcmVzaXpl
KHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfY2xpcF9zZXQocHJp
di0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsKKworI2lmZGVmIERFQlVH
X01FTV9MRUFLUworICAgIHByaXYtPnNpZ191c3IgPSBlY29yZV9ldmVudF9oYW5kbGVyX2FkZAor
ICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zaWdfdXNyLCBwcml2KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIERCRygibz0lcCIsIG8pOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5sb2NrX2FyZWEodHVjKTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChw
cml2KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3Rf
Zmx1c2gocHJpdik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdG9wKHByaXYpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3Nf
YWxsX2RlbChwcml2KTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworICAgIGlmIChwcml2LT5zaWdfdXNyKQorICAg
ICAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9kZWwocHJpdi0+c2lnX3Vz
cik7CisjZW5kaWYKKworICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJp
eCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c19jbGlw
cGVyKTsKKyAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisKKyAg
ICBfcGFyZW50X3NjLmRlbChvKTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50
ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RPUkUgREVMRVRFRCAobWF5IGJlIHJlYWwg
bGVha3MpXG4iKTsKKyAgICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOworI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2Jq
ZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBEQkcoIm89JXAsIG5l
dyBwb3M6ICVkeCVkIiwgbywgeCwgeSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKworICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHByaXYtPnZpZXcueSA9PSB5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBwcml2LT5jaGFuZ2VkLnBvcyA9IEVJTkFfVFJVRTsKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19D
b29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgREJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQi
LCBvLCB3LCBoKTsKKworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisg
ICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBy
aXYtPnZpZXcudyA9PSB3ICYmIHByaXYtPnZpZXcuaCA9PSBoKQorICAgICAgICByZXR1cm47CisK
KyAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nv
b3JkIHRoKQoreworICAgIGxvbmcgY29scywgcm93cywgb2xkX3Jvd3MsIG9sZF9jb2xzOworICAg
IElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgdywgaCk7CisKKyAgICBj
b2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChmbG9hdCl0dyk7CisgICAgcm93cyA9IDEg
KyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgpOworCisgICAgSU5GKCJvPSVwIG5ldyBn
cmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQsIHdhcyAlbGQsICVsZCIsCisgICAgICAgIHBy
aXYtPnNlbGYsIGNvbHMsIHJvd3MsIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsK
KworICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29scyAmJiBwcml2LT52aWV3LnJvd3MgPT0g
cm93cykKKyAgICAgICAgcmV0dXJuOworCisgICAgb2xkX2NvbHMgPSBwcml2LT52aWV3LmNvbHM7
CisgICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7CisKKyAgICBpZiAocm93cyA8IG9sZF9y
b3dzKSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgICAgICBzdGFy
dCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0
ZW1zICsgb2xkX3Jvd3M7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jv
d3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOworICAgIH0KKworICAgIHZvaWQqIG5ld0l0
ZW1zID0gcmVhbGxvYyhwcml2LT52aWV3Lml0ZW1zLCBzaXplb2YoRWluYV9Jbmxpc3QqKSAqIChp
bnQpcm93cyk7CisgICAgaWYgKCFuZXdJdGVtcykKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJp
di0+dmlldy5pdGVtcyA9IHN0YXRpY19jYXN0PEVpbmFfSW5saXN0Kio+KG5ld0l0ZW1zKTsKKyAg
ICBwcml2LT52aWV3LnJvd3MgPSByb3dzOworICAgIHByaXYtPnZpZXcuY29scyA9IGNvbHM7Cisg
ICAgaWYgKHJvd3MgPiBvbGRfcm93cykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAq
KmVuZDsKKyAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAg
ICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAgICAgIEVpbmFfQm9vbCByOworICAgICAgICAgICAg
KnN0YXJ0ID0gMDsKKyAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19jb2xzX2VuZF9hZGQKKyAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOwor
ICAgICAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0
byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMpOworICAgICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsCisgICAgICAgICAgICAgICAgICAg
IChwcml2LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRfcm93czsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29scyAhPSBvbGRf
Y29scykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICAgICAgaW50
IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CisgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVt
czsKKyAgICAgICAgZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywgcm93cyk7CisgICAg
ICAgIGlmICh0b2RvID4gMCkgeworICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFy
dCsrKSB7CisgICAgICAgICAgICAgICAgRWluYV9Cb29sIHI7CisgICAgICAgICAgICAgICAgciA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAorICAgICAgICAgICAg
ICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXIpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0
ZSAlZCBjb2x1bW5zISIsIHRvZG8pOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhcnQt
LTsgc3RhcnQgPj0gcHJpdi0+dmlldy5pdGVtczsgc3RhcnQtLSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBz
dGFydCwgdG9kbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9y
b3dzOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJv
d3M7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0Kysp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRvZG8gPCAwKSB7CisgICAgICAgICAgICB0b2Rv
ID0gLXRvZG87CisgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCisgICAg
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHBy
aXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIHcsIGgpOworCisgICAgcHJpdi0+
dmlldy53ID0gdzsKKyAgICBwcml2LT52aWV3LmggPSBoOworCisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCisgICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZp
ZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7Cit9CisKKy8vIFRPRE86IHJlbW92ZSBtZSBs
YXRlci4KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19k
YmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5h
X0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICBwcmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9k
ZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNsZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9s
ZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIsCisgICAgICAgICAgIHByaXYtPnZpZXcuY29s
cywgcHJpdi0+dmlldy5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJp
di0+bW9kZWwuY3VyLnJvd3MsCisgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5t
b2RlbC5oZWlnaHQsCisgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2Rl
bC5iYXNlLnJvdywKKyAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55LAorICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJp
di0+dmlldy5vZmZzZXQub2xkLnksCisgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5p
dGVtczsKKyAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOworICAg
IGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgeworICAgICAgICBjb25zdCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdDsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpz
dGFydCwgaXQpIHsKKyAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0
cnkueCwgaXQtPmdlb21ldHJ5LnkpOworCisgICAgICAgICAgICBpZiAoIWl0LT50aWxlKQorICAg
ICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAgICAgOyIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVsdSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxl
LT5jb2wsIGl0LT50aWxlLT5yb3cpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsK
KyAgICB9CisgICAgcHJpbnRmKCItLS1cbiIpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
TW92ZSB0b3Agcm93IGRvd24gYXMgbGFzdC4KKyAqCisgKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZp
c3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSB0b3AgdGhhdAorICogd2VudCBvdXQg
b2Ygc2NyZWVuIGlzIG5vdyBhdCBib3R0b20gYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVt
cy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRo
YW4gQGMKKyAqIHByaXYtPnZpZXcucm93cywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRo
ZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxs
LgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUg
cHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHVuc2lnbmVkIGludCBs
YXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYt
PnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAg
ICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0
aDsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCAr
IG9mZl95OworICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisKKyAgICBp
dHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBs
YXN0X3JvdzsKKworICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKyAgICAgICAgRWlu
YV9Jbmxpc3QgKippdHI7CisgICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0Owor
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19D
b29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgICAgIGludCBjID0g
MDsKKworICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKysp
CisgICAgICAgICAgICAqaXRyID0gKihpdHIgKyAxKTsKKyAgICAgICAgKml0ciA9IHRtcDsKKwor
ICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysrOworICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKHRtcCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsK
KyAgICAgICAgICAgIGMrKzsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7Cit9CisKKy8qKgorICogQGludGVy
bmFsCisgKiBNb3ZlIGJvdHRvbSByb3cgdXAgYXMgZmlyc3QuCisgKgorICogVGhlIGZpbmFsIHJl
c3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgYm90dG9tIHRoYXQK
KyAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgdG9wIGFuZCBmaWxsZWQgd2l0aCBuZXcg
bW9kZWwgaXRlbXMuCisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMg
c21hbGxlciB0aGFuIEBjCisgKiBwcml2LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJl
ZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBm
dWxsIHJlZmlsbC4KKyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byBy
ZXBlYXQgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIEV2
YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJp
di0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSAtIGNvdW50ICogdGg7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyBvZmZfeSArIChj
b3VudCAtIDEpICogdGg7CisgICAgRWluYV9Jbmxpc3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsK
KworICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAx
OworICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0ZW1zOworCisgICAgZm9yICg7IGNvdW50ID4g
MDsgY291bnQtLSkgeworICAgICAgICBFaW5hX0lubGlzdCAqKml0cjsKKyAgICAgICAgRWluYV9J
bmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKKyAgICAgICAgaW50IGMgPSAwOworCisgICAgICAgIGZvciAoaXRyID0gaXRyX3N0
YXJ0OyBpdHIgPiBpdHJfZW5kOyBpdHItLSkKKyAgICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEp
OworICAgICAgICAqaXRyID0gdG1wOworCisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godG1wLCBpdCkgeworICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAg
IG94ICs9IHR3OworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdCwgYywgMCk7CisgICAgICAgICAgICBjKys7CisgICAgICAgIH0KKyAgICAgICAg
b3kgLT0gdGg7CisgICAgfQorICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95Owor
fQorCisvKioKKyAqIEBpbnRlcm5hbAorICogTW92ZSBsZWZ0LW1vc3QgKGZpcnN0KSBjb2x1bW4g
cmlnaHQgYXMgbGFzdCAocmlnaHQtbW9zdCkuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2
aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgZmlyc3QgY29sIHRoYXQKKyAqIHdl
bnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgbGFzdCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVs
IGl0ZW1zLgorICoKKyAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxs
ZXIgdGhhbiBAYworICogcHJpdi0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxp
bmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCBy
ZWZpbGwuCisgKgorICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0
IHRoZSBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2LT52aWV3LmNvbHMgLSAxOworICAgIEV2YXNfQ29vcmQg
dHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50
aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAr
IGNvdW50ICogdHc7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnk7CisgICAgRWluYV9Jbmxpc3QgKippdHI7CisgICAgRWluYV9Jbmxpc3QgKippdHJfZW5k
OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0g
Y291bnQ7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAg
ICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2NvbCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94
OworICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGxhc3RfY29sIC0gY291bnQgKyAxOworCisg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjKyssIG94ICs9IHR3KSB7CisgICAg
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgICAgIGl0
ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgqaXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKTsKKyAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0
cik7CisKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxs
KHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisK
KyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKK30KKworLyoqCisgKiBAaW50
ZXJuYWwKKyAqIE1vdmUgcmlnaHQtbW9zdCAobGFzdCkgY29sdW1uIGxlZnQgYXMgZmlyc3QgKGxl
ZnQtbW9zdCkuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwg
YnV0IGxvZ2ljYWxseSB0aGUgbGFzdCBjb2wgdGhhdAorICogd2VudCBvdXQgb2Ygc2NyZWVuIGlz
IG5vdyBhdCBmaXJzdCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgorICoKKyAqIFRo
aXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYworICogcHJp
di0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJp
eCBzbyBpdAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCisgKgorICogQHBh
cmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgorICov
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgdW5zaWduZWQgaW50IHI7CisgICAgRXZh
c19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2
LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54IC0gY291bnQgKiB0dzsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworCisgICAg
aXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5y
b3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7CisK
KyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFdmFzX0Nv
b3JkIG94ID0geCArIChjb3VudCAtIDEpICogdHcgKyBvZmZfeDsKKyAgICAgICAgdW5zaWduZWQg
aW50IGksIGMgPSBjb3VudCAtIDE7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyssIGMtLSwgb3ggLT0gdHcpIHsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgq
aXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgICAgICAq
aXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOworCisgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgaW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKK3sK
KyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV2YXNfQ29vcmQgYmFzZV9v
eCwgb3ksIHR3LCB0aDsKKyAgICB1bnNpZ25lZCBpbnQgcjsKKworICAgIGV2YXNfb2JqZWN0X21v
dmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxl
Lnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIGJhc2Vfb3ggPSB4ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciAr
IHByaXYtPnZpZXcucm93czsKKyAgICByID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
IC09IHN0ZXBfeDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyAtPSBzdGVwX3k7CisKKyAgICBm
b3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgq
aXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgYysrOworICAgICAgICAgICAgb3gg
Kz0gdHc7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gs
IG95LCB0dywgdGg7CisKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwg
eCwgeSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmg7CisKKyAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsK
KyAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisKKyAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAg
Zm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAg
ICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIG94ICs9
IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2Uo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFdmFzX0Nvb3JkIGR4
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKKyAg
ICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9m
ZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBpbnQgc3RlcF95LCBzdGVw
X3g7CisKKyAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAor
ICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnggLyB0dzsKKyAgICBzdGVwX3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAt
IG5ld19jb2w7CisgICAgbG9uZyBuZXdfcm93ID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8g
dGg7CisgICAgc3RlcF95ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuZXdfcm93OworCisgICAg
cHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgIGV2
YXNfb2JqZWN0X21vdmUoCisgICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAorICAgICAgICBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CisKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3JlZmlsbAorICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0
ZXBfeCwgc3RlcF95KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgRXZhc19Db29yZCBkeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7CisgICAgRXZh
c19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnk7CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgaW50IHN0ZXBfeSwgc3RlcF94Owor
CisgICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKKyAgICAg
ICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkpOworCisgICAgaWYgKCFkeCAmJiAhZHkpCisgICAgICAgIHJldHVybjsK
KworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKKworICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3Owor
ICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKKyAgICBsb25nIG5l
d19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0aDsKKyAgICBzdGVwX3kgPSBwcml2
LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAg
ICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnggKyBwcml2LT52aWV3LngsCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJp
di0+dmlldy55KTsKKworICAgIGlmICgoc3RlcF94IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZp
ZXcuY29scykKKyAgICAgICAgfHwgKHN0ZXBfeCA+IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcu
Y29scykKKyAgICAgICAgfHwgKHN0ZXBfeSA8IDAgJiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJv
d3MpCisgICAgICAgIHx8IChzdGVwX3kgPiAwICYmIHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3Mp
KSB7CisKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICog
dHc7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRo
OworCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAorICAgICAg
ICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
Kz0gZHg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5OworCisgICAgaWYgKHN0
ZXBfeSA8IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAo
cHJpdiwgeCwgeSwgLXN0ZXBfeSk7CisgICAgZWxzZSBpZiAoc3RlcF95ID4gMCkKKyAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBf
eSk7CisKKyAgICBpZiAoc3RlcF94IDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHksIC1zdGVwX3gpOworICAgIGVsc2UgaWYgKHN0
ZXBfeCA+IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmln
aHQocHJpdiwgeCwgeSwgc3RlcF94KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOworICAgIHByaXYtPnZp
ZXcueCA9IHg7CisgICAgcHJpdi0+dmlldy55ID0geTsKKyAgICBldmFzX29iamVjdF9tb3ZlKAor
ICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
KyBwcml2LT52aWV3LnkpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sK
KyAgICBFaW5hX0lubGlzdCAqaXQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXRlbTsKKyAgICBpbnQgaSwgajsKKworICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJv
d3M7IGkrKykgeworICAgICAgICBpdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CisgICAgICAgIGog
PSAwOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZShFdmFzX09iamVjdCAqbykKK3sKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisK
KyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgJngsICZ5LCAmdywgJmgpOworICAgIERC
Rygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgbywgeCwgeSwgdywgaCk7CisKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlO
QV9GQUxTRTsKKworICAgIGV3a190aWxlX21hdHJpeF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4
KTsKKworICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2Rl
bCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisKKyAgICAgICAgY29scyA9
IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLncgKyAxOworICAgICAgICByb3dz
ID0gcHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmggKyAxOworCisgICAgICAg
IHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+bW9kZWwuY3VyLmNvbHM7CisgICAgICAgIHBy
aXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VyLnJvd3M7CisgICAgICAgIHByaXYt
Pm1vZGVsLmN1ci5jb2xzID0gY29sczsKKyAgICAgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSBy
b3dzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLmNvbHMgPiBjb2xzKQorICAgICAgICAg
ICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwu
b2xkLnJvd3MgPiByb3dzKQorICAgICAgICAgICAgcm93cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dz
OworICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29s
cywgcm93cyk7CisgICAgfQorCisgICAgaWYgKHByaXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52
aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0geSkpIHsKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MocHJpdiwgeCwgeSk7CisgICAgICAgIHBy
aXYtPmNoYW5nZWQucG9zID0gRUlOQV9GQUxTRTsKKyAgICB9CisgICAgaWYgKHByaXYtPmNoYW5n
ZWQub2Zmc2V0KSB7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGVfb2Zmc2V0KHByaXYsIHgsIHkpOworICAgICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9
IEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkgeworICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwg
dywgaCk7CisgICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CisgICAgfQor
CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7
CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7CisgICAgICAgIHJlY3QueCA9IDA7CisgICAg
ICAgIHJlY3QueSA9IDA7CisgICAgICAgIHJlY3QudyA9IHByaXYtPm1vZGVsLndpZHRoOworICAg
ICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWlnaHQ7CisgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4
X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC5jdXIuY29scywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1v
ZGVsLmN1ci5yb3dzKTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7
CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2
LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UocHJpdik7CisKKyAgICAg
ICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBieQor
ICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAqLworICAgICAgICBjb25z
dCBFaW5hX1JlY3RhbmdsZSByID0KKyAgICAgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lk
dGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OworICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRl
KHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpdi0+dmlldy50aWxlLnpvb20pOworICAgIH0KKworICAgIGV3a190aWxlX21hdHJpeF90aGF3
KHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlc19wcm9jZXNzKHByaXYpOworCisgICAgaWYgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+
IDAKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50
aWxlLncKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID4gMAorICAgICAgICB8
fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0gLSBwcml2LT52aWV3LnRpbGUuaCkKKyAgICAg
ICAgRVJSKCJpbmNvcnJlY3QgYmFzZSBvZmZzZXQgJSs0ZCwlKzRkLCB0aWxlPSVkeCVkLCBjdXI9
JSs0ZCwlKzRkXG4iLAorICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnksCisgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUudywgcHJp
di0+dmlldy50aWxlLmgsCisgICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkpOworCit9CisKK0V2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9hZGQoRXZhcyAqZSkKK3sKKyAgICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQg
PSAwOworCisgICAgaWYgKF9ld2tfdGlsZWRfbG9nX2RvbSA8IDApCisgICAgICAgIF9ld2tfdGls
ZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFpbl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmUiLCAwKTsKKworICAgIGlmICghc21hcnQpIHsKKyAgICAgICAgc3RhdGljIEV2YXNfU21h
cnRfQ2xhc3Mgc2MgPQorICAgICAgICAgICAgRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVS
U0lPTigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiKTsKKworICAgICAgICBldmFzX29iamVjdF9z
bWFydF9jbGlwcGVkX3NtYXJ0X3NldCgmc2MpOworICAgICAgICBfcGFyZW50X3NjID0gc2M7CisK
KyAgICAgICAgc2MuYWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZDsKKyAg
ICAgICAgc2MuZGVsID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbDsKKyAgICAg
ICAgc2MucmVzaXplID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZTsKKyAg
ICAgICAgc2MubW92ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlOworICAg
ICAgICBzYy5jYWxjdWxhdGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3Vs
YXRlOworICAgICAgICBzYy5tZW1iZXJfYWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X21lbWJlcl9hZGQ7CisgICAgICAgIHNjLm1lbWJlcl9kZWwgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbDsKKworICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRf
Y2xhc3NfbmV3KCZzYyk7CisgICAgfQorCisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChlLCBzbWFydCk7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2Ni
X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxl
ICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSksIGNvbnN0IHZvaWQgKmRhdGEpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2IpOworICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOworICAgIHByaXYtPnJlbmRlci5jYiA9IGNiOworICAgIHByaXYtPnJl
bmRlci5kYXRhID0gKHZvaWQqKWRhdGE7Cit9CisKK0V3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIDApOworICAg
IHJldHVybiBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hl
X3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAoZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCisgICAgICAg
IHJldHVybjsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3Jl
YXRlKHByaXYsIHR1Yyk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgLyog
VE9ETzogY2hlY2sgb2Zmc2V0IGdvIG91dCBvZiBib3VuZHMsIGNsYW1wICovCisgICAgaWYgKHBy
aXYtPnJlbmRlci5kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCA9IHg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
PSB5OworCisgICAgcHJpdi0+Y2hhbmdlZC5vZmZzZXQgPSBFSU5BX1RSVUU7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CisKKyAgICByZXR1cm4gRUlOQV9UUlVF
OworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zm
c2V0X3NldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgREJHKCJvPSVwLCB4PSVkLCB5PSVkIiwgbywgeCwgeSk7CisKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoeCA9PSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCAmJiB5ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQorICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworCisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
Y3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKHByaXYsIHgsIHkpOworfQorCitFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSkKK3sKKyAgICBEQkcoIm89JXAs
IGR4PSVkLCBkeT0lZCIsIG8sIGR4LCBkeSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoIWR4ICYmICFkeSkKKyAgICAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKKworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbAorICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnggKyBkeCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7Cit9CisKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5
KQoreworICAgICpvZmZ4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgKm9mZnkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueTsKKworICAgIGlmIChmYWJzZihwcml2LT52aWV3LnRpbGUu
em9vbSAtICp6b29tKSA8IFpPT01fU1RFUF9NSU4pIHsKKyAgICAgICAgREJHKCJpZ25vcmVkIGFz
IHpvb20gZGlmZmVyZW5jZSBpcyA8ICVmOiAlZiIsCisgICAgICAgICAgICAoZG91YmxlKVpPT01f
U1RFUF9NSU4sIGZhYnNmKHByaXYtPnZpZXcudGlsZS56b29tIC0gKnpvb20pKTsKKyAgICAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOworICAgIEV2YXNfQ29vcmQgdHcsIHRoOwor
CisgICAgKnpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncsICp6b29tKTsKKwor
ICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsK
KworICAgIGZsb2F0IHNjYWxlID0gKnpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKKworICAg
IHByaXYtPnZpZXcudGlsZS56b29tID0gKnpvb207CisgICAgLy8gdG9kbzogY2hlY2sgY3ggWzAs
IHddLi4uCisgICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OworICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnkgPSBjeTsKKworCisgICAgaWYgKCFwcml2LT52
aWV3LncgfHwgIXByaXYtPnZpZXcuaCkgeworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggPSAwOworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOworICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5k
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworCisgICAgRXZhc19Db29y
ZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Cisg
ICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kp
ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBieCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCAtIGN4KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgYnkgPSBjeSArIChwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgLSBjeSkgKiBzY2FsZTsKKworICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lk
dGggPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVp
Z2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CisKKyAgICBpZiAobW9kZWxfd2lkdGgg
PCBwcml2LT52aWV3LncgfHwgbmV3X3ggPj0gMCkKKyAgICAgICAgbmV3X3ggPSAwOworICAgIGVs
c2UgaWYgKC1uZXdfeCArIHByaXYtPnZpZXcudyA+PSBtb2RlbF93aWR0aCkKKyAgICAgICAgbmV3
X3ggPSAtbW9kZWxfd2lkdGggKyBwcml2LT52aWV3Lnc7CisKKyAgICBpZiAobW9kZWxfaGVpZ2h0
IDwgcHJpdi0+dmlldy5oIHx8IG5ld195ID49IDApCisgICAgICAgIG5ld195ID0gMDsKKyAgICBl
bHNlIGlmICgtbmV3X3kgKyBwcml2LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0KQorICAgICAgICBu
ZXdfeSA9IC1tb2RlbF9oZWlnaHQgKyBwcml2LT52aWV3Lmg7CisKKyAgICBieCA9IG5ld194ICUg
dHc7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtIG5ld194IC8gdHc7CisgICAgYnkgPSBu
ZXdfeSAlIHRoOworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLSBuZXdfeSAvIHRoOworCisg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJp
dik7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OworICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0g
Yng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisKKyAgICBwcml2LT52aWV3
Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIHByaXYtPnZpZXcu
b2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgKm9mZnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
OworCisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCisgICAgICAgIG5ld195ICsgcHJpdi0+
dmlldy55KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhw
cml2KTsKKworICAgIEV2YXNfQ29vcmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBw
cml2LT52aWV3Lnk7CisgICAgRXZhc19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAg
ICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9yICg7IGl0ciA8IGl0
cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OworICAgICAg
ICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KGxzdCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21v
dmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9yZXNpemUoaXQsIHR3LCB0aCk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgfQor
ICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitF
aW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QgKm8s
IGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpv
ZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQoreworICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChk
b3VibGUpKnpvb20pOworCisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlO
QV9GQUxTRSk7CisKKyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0
X2ludGVybmFsKHByaXYsIHpvb20sIGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Cit9CisKK0VpbmFfQm9v
bCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBm
bG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQoreworICAgIERCRygibz0l
cCwgem9vbT0lZiIsIG8sIChkb3VibGUpem9vbSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYt
PnZpZXcuaCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgRWluYV9Jbmxpc3QgKipp
dHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAg
ICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsK
KworICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOworCisgICAg
dHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUudywgc2NhbGUpOworICAgIHNj
YWxlID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGlsZS53KTsKKyAgICB0aCA9
IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCBzY2FsZSk7CisgICAgem9vbSA9
IHNjYWxlICogcHJpdi0+dmlldy50aWxlLnpvb207CisKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3dp
ZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX2hl
aWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOworCisgICAgZXZhc19vYmplY3RfcmVz
aXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOwor
CisgICAgaW50IHZyb3dzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSAr
IDE7CisgICAgaW50IHZjb2xzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3
KSArIDE7CisgICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC0gY3gpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBieCA9IG5ld194
ICUgdHc7CisgICAgRXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7CisgICAgdW5zaWduZWQgbG9u
ZyBiYXNlX3JvdyA9IC1uZXdfeSAvIHRoOworICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAt
bmV3X3ggLyB0dzsKKworICAgIGlmIChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8
fCBiYXNlX2NvbCAhPSBwcml2LT5tb2RlbC5iYXNlLmNvbCkgeworICAgICAgICBwcml2LT5tb2Rl
bC5iYXNlLnJvdyA9IGJhc2Vfcm93OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJh
c2VfY29sOworICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7CisgICAgfQorCisgICAgaWYgKHZy
b3dzID4gcHJpdi0+dmlldy5yb3dzIHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQorICAgICAg
ICByZWNhbGMgPSBFSU5BX1RSVUU7CisKKyAgICBpZiAocmVjYWxjKSB7CisgICAgICAgIEV2YXNf
Q29vcmQgdywgaDsKKyAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIDAsIDAsICZ3
LCAmaCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJz
KHByaXYsIHcsIGgsIHR3LCB0aCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9m
aWxsX3JlbmRlcmVycyhwcml2KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Vw
ZGF0ZXNfcHJvY2Vzcyhwcml2KTsKKyAgICB9CisKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBi
eCArIHByaXYtPnZpZXcueDsKKyAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7
CisKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAg
ICAgICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAg
IG5ld195ICsgcHJpdi0+dmlldy55KTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Cisg
ICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKworICAgIGZvciAoOyBpdHIgPCBp
dHJfZW5kOyBpdHIrKykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAg
ICAgRWluYV9Jbmxpc3QgKmxzdCA9ICppdHI7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFD
SChsc3QsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9t
b3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIH0K
KyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwor
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55OworICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lng7CisgICAgRXZhc19Db29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBF
dmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZhc19Db29yZCB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworCisgICAgaWYgKC1uZXdfeCA+IHcpIHsKKyAgICAgICAgbmV3X3gg
PSAtdzsKKyAgICAgICAgYnggPSBuZXdfeCAlIHR3OworICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbCA9IC1uZXdfeCAvIHR3OworICAgIH0KKworICAgIGlmICgtbmV3X3kgPiBoKSB7CisgICAg
ICAgIG5ld195ID0gLWg7CisgICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICB9CisKKyAgICBpZiAoYnggPj0gMCB8
fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53KSB7CisgICAgICAgIGJ4ID0gbmV3X3ggJSB0
dzsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKKyAgICB9CisK
KyAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKSB7CisgICAg
ICAgIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3
X3kgLyB0aDsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194Owor
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnggPSBuZXdfeDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195Owor
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJ4OworICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSA9IGJ5OworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgICAgICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAorICAgICAgICAg
ICAgICAgICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOworCisgICAgRXZhc19Db29yZCBveSA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3Jk
IGJhc2Vfb3ggPSBwcml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisKKyAg
ICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3
LnJvd3M7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXZh
c19Db29yZCBveCA9IGJhc2Vfb3g7CisgICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwor
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgeworICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKKyAgICAg
ICAgICAgIG94ICs9IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30K
Kwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3Nl
dChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJf
ZW5kOworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsg
cHJpdi0+dmlldy5yb3dzOworICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3Nj
YWxlID0gc21vb3RoX3NjYWxlOworCisgICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsK
KyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpCisgICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAg
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3Nl
dAorICAgICAgICAgICAgICAgICAgICAoaXQsIHNtb290aF9zY2FsZSk7CisgICAgfQorfQorCitF
aW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworCisgICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxl
ZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICByZXR1cm4gZXdrX3RpbGVfbWF0
cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsIHVwZGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUuem9vbSk7Cit9CisKK3ZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8s
IHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0
YSkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBwcml2LT5w
cm9jZXNzLnByZV9jYiA9IGNiOworICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCop
ZGF0YTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Nf
cG9zdF9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnBy
ZV9kYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0g
Y2I7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKK30KKwordm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8p
Cit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKK30KKwordm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgZXdrX3RpbGVfbWF0cml4X3Vw
ZGF0ZXNfY2xlYXIocHJpdi0+bW9kZWwubWF0cml4KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9jb250ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYpOworCisgICAgaWYgKHdpZHRoID09IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9
PSBwcml2LT5tb2RlbC5oZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPm1vZGVs
LndpZHRoID0gd2lkdGg7CisgICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHBy
aXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7CisKKyAgICBEQkcoIndpZHRoLGhlaWdodD0l
ZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hh
bmdlZChwcml2KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91
cGRhdGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCit7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVu
ZGVyLmRpc2FibGVkKQorICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKK30K
Kwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKK3sK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YyA9IDA7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IDA7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwor
ICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IDA7CisgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1ci5y
b3dzID0gMTsKKyAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwu
b2xkLnJvd3MgPSAwOworICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUs
IFNUQVRVUyBCRUZPUkUgREVMRVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKKyAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2KTsKKyNlbmRpZgorCisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2KTsKKyAgICB0dWMgPSBl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOworCisjaWZkZWYgREVCVUdfTUVNX0xF
QUtTCisgICAgcHJpbnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJF
Q1JFQVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
bWVtX2RiZyhwcml2KTsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK3sKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFaW5h
X1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOworICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8g
KmluZm87CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWM7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmg7CisgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9v
bSk7CisKKyAgICBpZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5
LCB3LCBoLCB0dywgdGgpKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xp
Y2VyIGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwKKyAgICAgICAgICAgIHgsIHksIHcsIGgs
IHR3LCB0aCk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIHdoaWxl
IChlaW5hX3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgbG9uZyBjID0gaW5mby0+Y29sOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBsb25nIHIgPSBpbmZvLT5yb3c7CisgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJpdiwgYywgciwgem9vbSwgUFJFX1JFTkRFUl9Q
UklPUklUWV9MT1cpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKKworICAgIHR1
YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpv
b20pOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5z
aWduZWQgaW50IG4sIGZsb2F0IHpvb20pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
bywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9y
b3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKKyAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YzsKKworICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBw
cml2LT52aWV3LnJvd3M9JWx1IiwKKyAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBu
LCBwcml2LT52aWV3LnJvd3MpOworICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVsLmJh
c2Uucm93IC0gbjsKKyAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNvbCAt
IG47CisgICAgZW5kX3JvdyA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1ci5yb3dzIC0gMSwKKyAg
ICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5yb3dzICsg
biAtIDEpOworICAgIGVuZF9jb2wgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIuY29scyAtIDEs
CisgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYtPnZpZXcuY29s
cyArIG4gLSAxKTsKKworICAgIElORigic3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0
X2NvbD0lbHUsIGVuZF9jb2w9JWx1IiwKKyAgICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3Rh
cnRfY29sLCBlbmRfY29sKTsKKworICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50
aWxlLncsIHpvb20pOworCisgICAgZm9yIChpID0gc3RhcnRfcm93OyBpIDw9IGVuZF9yb3c7IGkr
KykKKyAgICAgICAgZm9yIChqID0gc3RhcnRfY29sOyBqIDw9IGVuZF9jb2w7IGorKykKKyAgICAg
ICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9h
ZGQocHJpdiwgaiwgaSwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cpKQorICAgICAgICAg
ICAgICAgIGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKKworc3RhcnRfcHJvY2Vzc2luZzoKKyAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwor
CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKKyAgICBoID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0laRV9B
VF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCB6b29tKTsKKyAgICB3ID0gKGVuZF9jb2wgLSBzdGFy
dF9jb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsK
KyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywKKyAgICAgICAgICAgIHN0
YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKSwKKyAg
ICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5o
LCB6b29tKSwgdywgaCwgem9vbSk7CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpv
KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9jbGVhcihwcml2KTsKKworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHByaXYpOworfQorCitFaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKK3sKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKKyAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIocHJpdik7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCmluZGV4IDQ2YWFhODM5MTIyZWU1
M2JhMTdkNTAwZjJlODA5ZjA5YjM4MThiZjIuLjMwMTAzZWQxZDMwZDY5ZDFiZjU1MjBkNDJlZjQ5
ZjczNThjNjRjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZS5oCkBAIC00MiwxMCArNDIsNiBAQAogI2RlZmluZSBUSUxFX1pPT01fQVRfU0la
RShTSVpFLCBPUklHX1RJTEUpICgoZmxvYXQpKFNJWkUpIC8gKGZsb2F0KShPUklHX1RJTEUpKQog
I2RlZmluZSBST1VOREVEX1pPT00oU0laRSwgWk9PTSkgKChmbG9hdCkoU0laRSkgLyAoZmxvYXQp
KCgoaW50KXJvdW5kZigoU0laRSkgLyAoWk9PTSkpKSkpCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwot
ZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxjYWly
by5oPgogCkBAIC0xMjMsNyArMTE5LDQgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogbyk7CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7CiBFaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7Ci0j
aWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgogI2VuZGlmIC8vIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0
cml4LmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmY5Yzg0NDMwNTgyNzY5MjlkOTgwMjJlYzFjZGU2NzVj
MTQ1ZTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKKysrIC9kZXYvbnVsbApAQCAt
MSw2NDggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZXdrX3RpbGVkX21h
dHJpeC5oIgotCi0jZGVmaW5lIF9HTlVfU09VUkNFCi0jaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuaCIKLSNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVp
bmEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVk
ZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCByZW1vdmUgbWUgbGF0ZXIKLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RydWN0IF9Fd2tfVGls
ZV9NYXRyaXggewotICAgIEVpbmFfTWF0cml4c3BhcnNlICptYXRyaXg7Ci0gICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWM7Ci0gICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKLSAgICBzdHJ1
Y3QgewotICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBF
aW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKLSAgICAgICAgdm9pZCAqZGF0YTsKLSAgICB9IHJlbmRl
cjsKLSAgICB1bnNpZ25lZCBpbnQgZnJvemVuOwotICAgIEVpbmFfTGlzdCAqdXBkYXRlczsKLSAg
ICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7Ci0gICAgfSB0aWxlOwotI2lmZGVm
IERFQlVHX01FTV9MRUFLUwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBhbGxvY2F0ZWQsIGZyZWVkOwotICAgICAgICB9IHRpbGVzLCBieXRlczsK
LSAgICB9IHN0YXRzOwotI2VuZGlmCi19OwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1zdGF0
aWMgdWludDY0X3QgdGlsZXNfbGVha2VkID0gMDsKLXN0YXRpYyB1aW50NjRfdCBieXRlc19sZWFr
ZWQgPSAwOwotI2VuZGlmCi0KLS8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyByZXNpemVk
IG9yIGZyZWVkICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lk
ICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKLXsKLSAgICBFd2tfVGlsZV9NYXRyaXggKnRt
ID0gdXNlcl9kYXRhOwotICAgIEV3a19UaWxlICp0ID0gY2VsbF9kYXRhOwotCi0gICAgaWYgKCF0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRt
LT50dWMpOwotCi0gICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0g
ICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7Ci0K
LSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgRVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2
aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCi0gICAgICAgICAgICBF
UlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIsIHQsIHRtLT50dWMp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIERCRygidGlsZSBjZWxsIGRvZXMgbm90IGV4
aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0KTsKLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAg
ICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKLSAgICAgICAgICAg
IHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOwotI2VuZGlmCi0gICAgICAgICAgICBld2tfdGlsZV9m
cmVlKHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Ro
YXcodG0tPnR1Yyk7Ci19Ci0KLS8qIGNhbGxlZCB3aGVuIGNhY2hlIG9mIHVudXNlZCB0aWxlIGlz
IGZsdXNoZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0KQotewotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBkYXRhOwot
ICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0gCi0gICAgaWYgKCFlaW5hX21hdHJp
eHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxsKSkg
ewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRy
aXg/IExlYWtpbmcuLi4iLCB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
Y2VsbCkgewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRo
ZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBk
YXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQpOwotCi0gICAgLyogc2V0IHRv
IG51bGwgdG8gYXZvaWQgZG91YmxlIGZyZWUgKi8KLSAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxs
X2RhdGFfcmVwbGFjZShjZWxsLCBOVUxMLCBOVUxMKTsKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9j
ZWxsX2NsZWFyKGNlbGwpOwotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoISF0LT52aXNpYmxlKSkg
ewotICAgICAgICBFUlIoImNhY2hlIG9mIHVudXNlZCB0aWxlcyByZXF1ZXN0aW5nIGRlbGV0aW9u
IG9mIHVzZWQgdGlsZSAlcD8gIgotICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRtLT5zdGF0
cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKLSAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsK
LSNlbmRpZgotCi0gICAgZXdrX3RpbGVfZnJlZSh0KTsKLX0KLQotLyoqCi0gKiBDcmVhdGVzIGEg
bmV3IG1hdHJpeCBvZiB0aWxlcy4KLSAqCi0gKiBUaGUgdGlsZSBtYXRyaXggaXMgcmVzcG9uc2li
bGUgZm9yIGtlZXBpbmcgdGlsZXMgYXJvdW5kIGFuZAotICogcHJvdmlkaW5nIGZhc3QgYWNjZXNz
IHRvIHRoZW0uIE9uZSBjYW4gdXNlIGl0IHRvIHJldHJpZXZlIG5ldyBvcgotICogZXhpc3Rpbmcg
dGlsZXMgYW5kIGdpdmUgdGhlbSBiYWNrLCBhbGxvd2luZyB0aGVtIHRvIGJlCi0gKiBmcmVlZC9y
ZXBsYWNlZCBieSB0aGUgY2FjaGUuCi0gKgotICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMgb3IgQGMgTlVMTCB0byBjcmVhdGUgb25lCi0gKiAgICAgICAgYXV0b21hdGljYWxseS4K
LSAqIEBwYXJhbSBjb2xzIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCi0gKiBAcGFy
YW0gcm93cyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LgotICogQHBhcmFtIGNzcGFjZSB0
aGUgY29sb3Igc3BhY2UgdXNlZCB0byBjcmVhdGUgdGlsZXMgaW4gdGhpcyBtYXRyaXguCi0gKiBA
cGFyYW0gcmVuZGVyX2NiIGZ1bmN0aW9uIHVzZWQgdG8gcmVuZGVyIGdpdmVuIHRpbGUgdXBkYXRl
LgotICogQHBhcmFtIHJlbmRlcl9kYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNrIHRvIEBhIHJlbmRl
cl9jYi4KLSAqCi0gKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBpbnN0YW5jZSBvbiBzdWNjZXNz
LCBAYyBOVUxMIG9uIGZhaWx1cmUuCi0gKi8KLUV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0
cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjb2xzLCB1
bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UsIHZvaWQgKCpyZW5kZXJf
Y2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRl
KSwgY29uc3Qgdm9pZCAqcmVuZGVyX2RhdGEpCi17Ci0gICAgRXdrX1RpbGVfTWF0cml4ICp0bTsK
LQotICAgIENBTExPQ19PUl9PT01fUkVUKHRtLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSwgTlVM
TCk7Ci0KLSAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3MsIGNvbHMs
IF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7Ci0gICAgaWYgKCF0bS0+bWF0cml4KSB7
Ci0gICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4LiIpOwotICAgICAg
ICBmcmVlKHRtKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKHR1YykK
LSAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodHVjKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5NjAw
MDApOwotICAgICAgICBpZiAoIXRtLT50dWMpIHsKLSAgICAgICAgICAgIEVSUigibm8gY2FjaGUg
b2YgdW51c2VkIHRpbGUhIik7Ci0gICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRt
LT5tYXRyaXgpOwotICAgICAgICAgICAgZnJlZSh0bSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVM
TDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7Ci0gICAgdG0t
PnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKLSAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKXJl
bmRlcl9kYXRhOwotICAgIHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAgICB0bS0+dGls
ZS5oID0gREVGQVVMVF9USUxFX0g7Ci0KLSAgICByZXR1cm4gdG07Ci19Ci0KLS8qKgotICogRGVz
dHJveXMgdGlsZXMgbWF0cml4LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KLSAqCi0gKiBUaGUg
Y2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgotICov
Ci12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0jaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwotI2VuZGlmCi0K
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKLQotICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0t
Pm1hdHJpeCk7Ci0KLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodG0tPnR1Yyk7Ci0KLSNpZmRlZiBERUJVR19N
RU1fTEVBS1MKLSAgICB0aWxlcyA9IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQ7Ci0gICAgYnl0ZXMgPSB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLmJ5dGVzLmZyZWVkOwotCi0gICAgdGlsZXNfbGVha2VkICs9IHRpbGVzOwotICAg
IGJ5dGVzX2xlYWtlZCArPSBieXRlczsKLQotICAgIGlmICh0aWxlcyB8fCBieXRlcykKLSAgICAg
ICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6
JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSIsCi0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsIHRpbGVzLAotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7Ci0gICAgZWxzZSBpZiAodGlsZXNf
bGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKLSAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5v
IGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCi0gICAgICAg
ICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwKLSAgICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKLSAgICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKLSAg
ICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKLSAgICBlbHNlCi0gICAgICAg
IElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdIiwKLSAgICAg
ICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwK
LSAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCk7Ci0jZW5kaWYKLQotICAgIGZyZWUodG0pOwotfQotCi0vKioKLSAqIFJlc2l6ZSBtYXRy
aXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCi0gKi8KLXZvaWQgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
bSk7Ci0gICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQodG0tPm1hdHJpeCwgcm93cywgY29s
cyk7Ci19Ci0KLS8qKgotICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgaW4gdXNlIGJ5
IGdpdmVuIG1hdHJpeC4KLSAqCi0gKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hl
LgotICovCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCBOVUxMKTsKLSAgICByZXR1cm4gdG0tPnR1YzsKLX0KLQotLyoq
Ci0gKiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4K
LSAqCi0gKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhl
IGNhY2hlLgotICoKLSAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBiYWNrIHVzaW5nCi0g
KiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4gSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBp
ZiBpdCBleGlzdHMsCi0gKiB0aGVuIHVzZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlz
dHMoKS4KLSAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxlIGZyb20u
Ci0gKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHJvdyB0aGUgcm93
IG51bWJlci4KLSAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KLSAqCi0gKiBA
cmV0dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIE5VTEwgaWYgbm9uZSBpcyBmb3VuZC4gSWYg
dGhlIHRpbGUKLSAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2lsbCBiZSBA
YiByZW1vdmVkICh0aHVzCi0gKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9uZSBzaG91
bGQgZ2l2ZSBpdCBiYWNrIHdpdGgKLSAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0
KCkgYWZ0ZXJ3YXJkcy4KLSAqCi0gKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dl
dCgpCi0gKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1Rp
bGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9h
dCB6b29tKQotewotICAgIEV3a19UaWxlICp0OwotICAgIHQgPSBlaW5hX21hdHJpeHNwYXJzZV9k
YXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOwotICAgIGlmICghdCkKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAodC0+em9vbSA9PSB6b29tKQotICAgICAgICBnb3RvIGVu
ZDsKLQotICBlbmQ6Ci0gICAgaWYgKCF0LT52aXNpYmxlKSB7Ci0gICAgICAgIGlmICghZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQotICAgICAgICAgICAgV1JOKCJF
d2tfVGlsZSB3YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdDsKLX0KLQotLyoqCi0gKiBDaGVja3MgaWYgdGlsZSBvZiBnaXZlbiB6b29tIGV4
aXN0cyBpbiBtYXRyaXguCi0gKgotICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBjaGVj
ayB0aWxlIGV4aXN0ZW5jZS4KLSAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCi0gKiBA
cGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgotICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20g
dG8gcXVlcnkuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZm91bmQsIEBjIEVJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3Rf
Z2V0KCkKLSAqLwotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhF
d2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cs
IGZsb2F0IHpvb20pCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0KLSAgICB0ID0gZWluYV9tYXRyaXhz
cGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKLSAgICBpZiAoIXQpCi0g
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQot
LyoqCi0gKiBDcmVhdGUgYSBuZXcgdGlsZSBhdCBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbSBsZXZl
bCBpbiB0aGUgbWF0cml4LgotICoKLSAqIFRoZSBuZXdseSBjcmVhdGVkIHRpbGUgaXMgY29uc2lk
ZXJlZCBpbiB1c2UgYW5kIG5vdCBwdXQgaW50byBjYWNoZQotICogb2YgdW51c2VkIHRpbGVzLiBB
ZnRlciBpdCBpcyB1c2VkIG9uZSBzaG91bGQgY2FsbAotICogZXdrX3RpbGVfbWF0cml4X3RpbGVf
cHV0KCkgdG8gZ2l2ZSBpdCBiYWNrIHRvIG1hdHJpeC4KLSAqCi0gKiBAcGFyYW0gdG0gdGhlIHRp
bGUgbWF0cml4IHRvIGNyZWF0ZSB0aWxlIG9uLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51
bWJlci4KLSAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCi0gKiBAcGFyYW0gem9vbSB0aGUg
bGV2ZWwgdG8gY3JlYXRlIHRpbGUsIHVzZWQgdG8gZGV0ZXJtaW5lIHRpbGUgc2l6ZS4KLSAqLwot
RXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBF
dmFzICpldmFzLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpv
b20pCi17Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0KLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIE5VTEwpOwotICAgIEVJTkFfU0FGRVRZ
X09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgTlVMTCk7Ci0KLSAgICB0dyA9IHRtLT50
aWxlLnc7Ci0gICAgdGggPSB0bS0+dGlsZS5oOwotCi0gICAgdCA9IGV3a190aWxlX25ldyhldmFz
LCB0dywgdGgsIHpvb20sIHRtLT5jc3BhY2UpOwotICAgIGlmICghdCkgewotICAgICAgICBFUlIo
ImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVkIiwgdHcsIHRoLCAo
ZG91YmxlKXpvb20sIHRtLT5jc3BhY2UpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3NldCh0bS0+bWF0cml4LCByb3cs
IGNvbCwgdCkpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0IG1hdHJpeCBjZWxsLCByb3cv
Y29sIG91dHNpZGUgbWF0cml4IGRpbWVuc2lvbnMhIik7Ci0gICAgICAgIGV3a190aWxlX2ZyZWUo
dCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQtPmNvbCA9IGNvbDsKLSAg
ICB0LT5yb3cgPSByb3c7Ci0gICAgdC0+eCA9IGNvbCAqIHR3OwotICAgIHQtPnkgPSByb3cgKiB0
aDsKLQotICAgIGNhaXJvX3RyYW5zbGF0ZSh0LT5jYWlybywgLXQtPngsIC10LT55KTsKLQotICAg
IHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwotICAgIHRtLT51cGRhdGVzID0gZWlu
YV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MK
LSAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwotICAgIHRtLT5zdGF0
cy50aWxlcy5hbGxvY2F0ZWQrKzsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLS8qKgot
ICogR2l2ZXMgYmFjayB0aGUgdGlsZSB0byB0aGUgdGlsZSBtYXRyaXguCi0gKgotICogVGhpcyB3
aWxsIHJlcG9ydCB0aGUgdGlsZSBpcyBubyBsb25nZXIgaW4gdXNlIGJ5IHRoZSBvbmUgdGhhdCBn
b3QKLSAqIGl0IHdpdGggZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkuCi0gKgotICog
QW55IHByZXZpb3VzIHJlZmVyZW5jZSB0byB0aWxlIHNob3VsZCBiZSByZWxlYXNlZAotICogKGV3
a190aWxlX2hpZGUoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAot
ICogYmUga25vd24gaWYgaXQgaXMgbm90IHZpc2liaWxlIGFueW1vcmUgYW5kIHRodXMgY2FuIGJl
IHB1dCBpbnRvIHRoZQotICogdW51c2VkIGNhY2hlLgotICoKLSAqIEBwYXJhbSB0bSB0aGUgdGls
ZSBtYXRyaXggdG8gcmV0dXJuIHRpbGUgdG8uCi0gKiBAcGFyYW0gdCB0aGUgdGlsZSBpbnN0YW5j
ZSB0byByZXR1cm4sIG11c3QgQGIgbm90IGJlIEBjIE5VTEwuCi0gKiBAcGFyYW0gbGFzdF91c2Vk
IHRpbWUgaW4gd2hpY2ggdGlsZSB3YXMgbGFzdCB1c2VkLgotICoKLSAqIEByZXR1cm4gI0VJTkFf
VFJVRSBvbiBzdWNjZXNzIG9yICNFSU5BX0ZBTFNFIG9uIGZhaWx1cmUuCi0gKi8KLUVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUg
KnQsIGRvdWJsZSBsYXN0X3VzZWQpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dCwgRUlOQV9GQUxTRSk7Ci0KLSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKLQotICAgIHQtPnN0YXRzLmxhc3RfdXNlZCA9IGxhc3RfdXNlZDsKLSAgICByZXR1
cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KHRtLT50dWMsIHQsIF9ld2tfdGlsZV9t
YXRyaXhfdGlsZV9mcmVlLCB0bSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVk
IGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQotewotICAgIEV3a19UaWxl
ICp0OwotICAgIEVpbmFfUmVjdGFuZ2xlIG5ld191cGRhdGU7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKLQotICAgIG1lbWNweSgmbmV3X3VwZGF0
ZSwgdXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkpOwotICAgIC8vIGNoZWNrIHVwZGF0ZSBpcyB2
YWxpZCwgb3RoZXJ3aXNlIHJldHVybiBFSU5BX0ZBTFNFCi0gICAgaWYgKHVwZGF0ZS0+eCA8IDAg
fHwgdXBkYXRlLT55IDwgMCB8fCB1cGRhdGUtPncgPD0gMCB8fCB1cGRhdGUtPmggPD0gMCkgewot
ICAgICAgICBFUlIoImludmFsaWQgdXBkYXRlIHJlZ2lvbi4iKTsKLSAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0g
dG0tPnRpbGUudykKLSAgICAgICAgbmV3X3VwZGF0ZS53ID0gdG0tPnRpbGUudyAtIHVwZGF0ZS0+
eDsKLSAgICBpZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0gMSA+PSB0bS0+dGlsZS5oKQotICAg
ICAgICBuZXdfdXBkYXRlLmggPSB0bS0+dGlsZS5oIC0gdXBkYXRlLT55OwotCi0gICAgdCA9IGVp
bmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7Ci0KLSAg
ICBpZiAoIXQpCi0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBpZiAoIXQtPnVwZGF0
ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFf
bGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQs
ICZuZXdfdXBkYXRlKTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLUVpbmFfQm9vbCBl
d2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNp
Z25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0g
ICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOwotCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJz
ZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsICZjZWxsKSkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybiBFSU5BX1RS
VUU7Ci0KLSAgICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKTsKLSAg
ICBpZiAoIXQpIHsKLSAgICAgICAgQ1JJVElDQUwoIm1hdHJpeCBjZWxsIHdpdGggbm8gdGlsZSEi
KTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoIXQtPnVwZGF0
ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFf
bGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQp
OwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdm9pZCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0sIEV3a19UaWxlICp0KQotewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAoIXQtPnVwZGF0ZXMgJiYg
IXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgZXdrX3RpbGVfdXBk
YXRlc19jbGVhcih0KTsKLSAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVw
ZGF0ZXMsIHQpOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9tYXRyaXhfc2xpY2Vy
X3NldHVwKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhLCBm
bG9hdCB6b29tLCBFaW5hX1RpbGVfR3JpZF9TbGljZXIgKnNsaWNlcikKLXsKLSAgICB1bnNpZ25l
ZCBsb25nIHJvd3MsIGNvbHM7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCB0dywgdGg7Ci0K
LSAgICBpZiAoYXJlYS0+dyA8PSAwIHx8IGFyZWEtPmggPD0gMCkgewotICAgICAgICBXUk4oImlu
dmFsaWQgYXJlYSByZWdpb246ICVkLCVkKyVkeCVkLiIsCi0gICAgICAgICAgICBhcmVhLT54LCBh
cmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0g
ICAgfQotCi0gICAgeCA9IGFyZWEtPng7Ci0gICAgeSA9IGFyZWEtPnk7Ci0gICAgdyA9IGFyZWEt
Pnc7Ci0gICAgaCA9IGFyZWEtPmg7Ci0KLSAgICB0dyA9IHRtLT50aWxlLnc7Ci0gICAgdGggPSB0
bS0+dGlsZS5oOwotCi0gICAgLy8gY3JvcHBpbmcgYXJlYSByZWdpb24gdG8gZml0IG1hdHJpeAot
ICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfZ2V0KHRtLT5tYXRyaXgsICZyb3dzLCAmY29scyk7
Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIHcgKz0geDsKLSAgICAgICAgeCA9IDA7Ci0gICAg
fQotICAgIGlmICh5IDwgMCkgewotICAgICAgICBoICs9IHk7Ci0gICAgICAgIHkgPSAwOwotICAg
IH0KLQotICAgIGlmICh5ICsgaCAtIDEgPiAobG9uZykocm93cyAqIHRoKSkKLSAgICAgICAgaCA9
IHJvd3MgKiB0aCAtIHk7Ci0gICAgaWYgKHggKyB3IC0gMSA+IChsb25nKShjb2xzICogdHcpKQot
ICAgICAgICB3ID0gY29scyAqIHR3IC0geDsKLQotICAgIHJldHVybiBlaW5hX3RpbGVfZ3JpZF9z
bGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywgdGgpOwotfQotCi0KLUVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlICp1cGRhdGUsIGZsb2F0IHpvb20pCi17Ci0gICAgY29uc3QgRWluYV9UaWxlX0dy
aWRfSW5mbyAqaW5mbzsKLSAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7Ci0KLSAgICBpZiAo
dXBkYXRlLT53IDwgMSB8fCB1cGRhdGUtPmggPCAxKSB7Ci0gICAgICAgIERCRygiV2h5IHdlIGdl
dCB1cGRhdGVzIHdpdGggZW1wdHkgYXJlYXM/ICVkLCVkKyVkeCVkIGF0IHpvb20gJWYiLAotICAg
ICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywgdXBkYXRlLT5oLCB6b29t
KTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoIV9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKHRtLCB1cGRhdGUsIHpvb20sICZzbGljZXIpKSB7Ci0gICAg
ICAgIEVSUigiQ291bGQgbm90IHNldHVwIHNsaWNlciBmb3IgdXBkYXRlICVkLCVkKyVkeCVkIGF0
IHpvb20gJWYiLAotICAgICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywg
dXBkYXRlLT5oLCB6b29tKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9uZXh0KCZzbGljZXIsICZpbmZvKSkgewot
ICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgICAgICBFd2tfVGlsZSAqdDsKLSAg
ICAgICAgY29sID0gaW5mby0+Y29sOwotICAgICAgICByb3cgPSBpbmZvLT5yb3c7Ci0KLSAgICAg
ICAgdCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNv
bCk7Ci0gICAgICAgIGlmICghdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
ICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgICAgICB0bS0+
dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgICAgICBpZiAo
aW5mby0+ZnVsbCkKLSAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmaW5mby0+cmVjdCk7
Ci0gICAgfQotCi0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi12b2lkIGV3a190aWxlX21h
dHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsKLSAgICBFaW5hX0xp
c3QgKmwsICpsX25leHQ7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4odG0pOwotCi0gICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKLSAg
ICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRtLT51cGRhdGVzLCBsLCBsX25leHQsIHQpIHsKLSAg
ICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHQsIHRtLT5yZW5kZXIuY2IsIHRtLT5yZW5k
ZXIuZGF0YSk7Ci0gICAgICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgICAgICBld2tfdGls
ZV91cGRhdGVzX2NsZWFyKHQpOwotICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3Rf
cmVtb3ZlX2xpc3QodG0tPnVwZGF0ZXMsIGwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0g
ICAgRXdrX1RpbGUgKnQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotCi0g
ICAgRUlOQV9MSVNUX0ZSRUUodG0tPnVwZGF0ZXMsIHQpCi0gICAgICAgIGV3a190aWxlX3VwZGF0
ZXNfY2xlYXIodCk7Ci0gICAgdG0tPnVwZGF0ZXMgPSBOVUxMOwotfQotCi0vLyByZW1vdmUgbWUg
bGF0ZXIhCi12b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0
bSkKLXsKLSAgICBFaW5hX0l0ZXJhdG9yICppdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9y
X2NvbXBsZXRlX25ldyh0bS0+bWF0cml4KTsKLSAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpj
ZWxsOwotICAgIEVpbmFfQm9vbCBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKLQotI2lmZGVmIERF
QlVHX01FTV9MRUFLUwotICAgIHByaW50ZigiRXdrX1RpbGUgTWF0cml4OiB0aWxlc1srJSJQUkl1
NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQi
LC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFs
bG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAotICAgICAgICAgICB0bS0+c3RhdHMudGls
ZXMuYWxsb2NhdGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAotICAgICAgICAgICB0bS0+c3Rh
dHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCi0gICAgICAgICAgIHRt
LT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOwotI2Vsc2UK
LSAgICBwcmludGYoIkV3a19UaWxlIE1hdHJpeDpcbiIpOwotI2VuZGlmCi0KLSAgICBFSU5BX0lU
RVJBVE9SX0ZPUkVBQ0goaXQsIGNlbGwpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNv
bDsKLSAgICAgICAgRXdrX1RpbGUgKnQ7Ci0gICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxf
cG9zaXRpb25fZ2V0KGNlbGwsICZyb3csICZjb2wpOwotICAgICAgICB0ID0gZWluYV9tYXRyaXhz
cGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKTsKLQotICAgICAgICBpZiAoIXQpIHsKLSAgICAgICAg
ICAgIGlmICghbGFzdF9lbXB0eSkgewotICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5B
X1RSVUU7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFbXB0eToiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHByaW50ZigiIFslbHUsJWx1XSIsIGNvbCwgcm93KTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChsYXN0X2VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgbGFz
dF9lbXB0eSA9IEVJTkFfRkFMU0U7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJv
dywgdCk7Ci0gICAgICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0l
YyIsIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLCB0LT52aXNpYmxlID8gJyon
OiAnICcpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChsYXN0X2VtcHR5KQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0KTsKLQotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodG0tPnR1Yyk7Ci19
Ci0KLS8qKgotICogRnJlZXplIG1hdHJpeCB0byBub3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCi0g
KgotICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93
IHdlIHNob3VsZCBob2xkCi0gKiBvbiB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlv
biwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQotICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRo
YXcgd2hlbiB3ZSdyZSBkb25lLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RoYXcoKQot
ICovCi12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgaWYgKCF0bS0+ZnJvemVu
KQotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwotICAgIHRt
LT5mcm96ZW4rKzsKLX0KLQotLyoqCi0gKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3MuCi0g
KgotICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4gbWFp
bnRlbmFuY2UgdGFza3MKLSAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgotICovCi12b2lkIGV3a190
aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odG0pOwotICAgIGlmICghdG0tPmZyb3plbikgewotICAgICAgICBFUlIo
InRoYXdpbmcgbW9yZSB0aGFuIGZyZWV6aW5nISIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgdG0tPmZyb3plbi0tOwotICAgIGlmICghdG0tPmZyb3plbikKLSAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX21hdHJpeC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY0YzQxYzcxOTEzNDdmMDFhNjE5YjNk
MWNiZWU5YmNiNTRhNjJjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfbWF0cml4LmNwcApAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX21hdHJpeC5oIgorCisjaW5jbHVkZSAiZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1
ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+Cisj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCByZW1vdmUgbWUgbGF0
ZXIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RydWN0IF9F
d2tfVGlsZV9NYXRyaXggeworICAgIEVpbmFfTWF0cml4c3BhcnNlICptYXRyaXg7CisgICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKKyAg
ICBzdHJ1Y3QgeworICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKKyAgICAgICAgdm9pZCAqZGF0YTsKKyAgICB9
IHJlbmRlcjsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOworICAgIEVpbmFfTGlzdCAqdXBkYXRl
czsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgfSB0aWxlOwor
I2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICB1aW50NjRfdCBhbGxvY2F0ZWQsIGZyZWVkOworICAgICAgICB9IHRpbGVzLCBi
eXRlczsKKyAgICB9IHN0YXRzOworI2VuZGlmCit9OworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CitzdGF0aWMgdWludDY0X3QgdGlsZXNfbGVha2VkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRl
c19sZWFrZWQgPSAwOworI2VuZGlmCisKKy8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyBy
ZXNpemVkIG9yIGZyZWVkICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJl
ZSh2b2lkICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKK3sKKyAgICBFd2tfVGlsZV9NYXRy
aXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4odXNlcl9kYXRhKTsKKyAgICBF
d2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oY2VsbF9kYXRhKTsKKworICAgIGlm
ICghdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6
ZSh0bS0+dHVjKTsKKworICAgIGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRl
KQorICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQp
OworCisgICAgaWYgKHQtPnZpc2libGUpCisgICAgICAgIEVSUigiZnJlZWluZyBjZWxsIHRoYXQg
aXMgdmlzaWJsZSwgbGVha2luZyB0aWxlICVwIiwgdCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQorICAgICAgICAg
ICAgRVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0LCB0bS0+
dHVjKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBEQkcoInRpbGUgY2VsbCBkb2VzIG5v
dCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwgdCk7CisjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CisgICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgICAg
ICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsKKyNlbmRpZgorICAgICAgICAgICAgZXdrX3Rp
bGVfZnJlZSh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGV3a190aWxlX3VudXNlZF9jYWNo
ZV90aGF3KHRtLT50dWMpOworfQorCisvKiBjYWxsZWQgd2hlbiBjYWNoZSBvZiB1bnVzZWQgdGls
ZSBpcyBmbHVzaGVkICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2
b2lkICpkYXRhLCBFd2tfVGlsZSAqdCkKK3sKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oZGF0YSk7CisgICAgRWluYV9NYXRyaXhzcGFyc2Vf
Q2VsbCAqY2VsbDsKKyAKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0
bS0+bWF0cml4LCB0LT5yb3csIHQtPmNvbCwgJmNlbGwpKSB7CisgICAgICAgIEVSUigicmVtb3Zp
bmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjZWxsKSB7CisgICAgICAgIEVSUigi
cmVtb3ZpbmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIs
IHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92
ZSh0bS0+dXBkYXRlcywgdCk7CisKKyAgICAvKiBzZXQgdG8gbnVsbCB0byBhdm9pZCBkb3VibGUg
ZnJlZSAqLworICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9yZXBsYWNlKGNlbGwsIDAs
IDApOworICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfY2xlYXIoY2VsbCk7CisKKyAgICBpZiAo
RUlOQV9VTkxJS0VMWSghIXQtPnZpc2libGUpKSB7CisgICAgICAgIEVSUigiY2FjaGUgb2YgdW51
c2VkIHRpbGVzIHJlcXVlc3RpbmcgZGVsZXRpb24gb2YgdXNlZCB0aWxlICVwPyAiCisgICAgICAg
ICAgICAiTGVha2luZy4uLiIsIHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWZkZWYg
REVCVUdfTUVNX0xFQUtTCisgICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwor
ICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOworI2VuZGlmCisKKyAgICBld2tfdGlsZV9mcmVl
KHQpOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgbWF0cml4IG9mIHRpbGVzLgorICoKKyAq
IFRoZSB0aWxlIG1hdHJpeCBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0aWxlcyBhcm91bmQg
YW5kCisgKiBwcm92aWRpbmcgZmFzdCBhY2Nlc3MgdG8gdGhlbS4gT25lIGNhbiB1c2UgaXQgdG8g
cmV0cmlldmUgbmV3IG9yCisgKiBleGlzdGluZyB0aWxlcyBhbmQgZ2l2ZSB0aGVtIGJhY2ssIGFs
bG93aW5nIHRoZW0gdG8gYmUKKyAqIGZyZWVkL3JlcGxhY2VkIGJ5IHRoZSBjYWNoZS4KKyAqCisg
KiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcyBvciBAYyAwIHRvIGNyZWF0ZSBvbmUK
KyAqICAgICAgICBhdXRvbWF0aWNhbGx5LgorICogQHBhcmFtIGNvbHMgbnVtYmVyIG9mIGNvbHVt
bnMgaW4gdGhlIG1hdHJpeC4KKyAqIEBwYXJhbSByb3dzIG51bWJlciBvZiByb3dzIGluIHRoZSBt
YXRyaXguCisgKiBAcGFyYW0gY3NwYWNlIHRoZSBjb2xvciBzcGFjZSB1c2VkIHRvIGNyZWF0ZSB0
aWxlcyBpbiB0aGlzIG1hdHJpeC4KKyAqIEBwYXJhbSByZW5kZXJfY2IgZnVuY3Rpb24gdXNlZCB0
byByZW5kZXIgZ2l2ZW4gdGlsZSB1cGRhdGUuCisgKiBAcGFyYW0gcmVuZGVyX2RhdGEgY29udGV4
dCB0byBnaXZlIGJhY2sgdG8gQGEgcmVuZGVyX2NiLgorICoKKyAqIEByZXR1cm4gbmV3bHkgYWxs
b2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFpbHVyZS4KKyAqLworRXdrX1Rp
bGVfTWF0cml4ICpld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
LCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNl
IGNzcGFjZSwgdm9pZCAoKnJlbmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpyZW5kZXJfZGF0YSkKK3sKKyAg
ICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oY2Fs
bG9jKDEsIHNpemVvZihFd2tfVGlsZV9NYXRyaXgpKSk7CisgICAgaWYgKCF0bSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3Ms
IGNvbHMsIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7CisgICAgaWYgKCF0bS0+bWF0
cml4KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4LiIpOwor
ICAgICAgICBmcmVlKHRtKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHR1
YykKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodHVjKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5
NjAwMDApOworICAgICAgICBpZiAoIXRtLT50dWMpIHsKKyAgICAgICAgICAgIEVSUigibm8gY2Fj
aGUgb2YgdW51c2VkIHRpbGUhIik7CisgICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVl
KHRtLT5tYXRyaXgpOworICAgICAgICAgICAgZnJlZSh0bSk7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7CisgICAgdG0t
PnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKKyAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKXJl
bmRlcl9kYXRhOworICAgIHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKKyAgICB0bS0+dGls
ZS5oID0gREVGQVVMVF9USUxFX0g7CisKKyAgICByZXR1cm4gdG07Cit9CisKKy8qKgorICogRGVz
dHJveXMgdGlsZXMgbWF0cml4LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KKyAqCisgKiBUaGUg
Y2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICov
Cit2b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisjaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCisgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOworI2VuZGlmCisK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKworICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0t
Pm1hdHJpeCk7CisKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKKyAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodG0tPnR1Yyk7CisKKyNpZmRlZiBERUJVR19N
RU1fTEVBS1MKKyAgICB0aWxlcyA9IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQ7CisgICAgYnl0ZXMgPSB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLmJ5dGVzLmZyZWVkOworCisgICAgdGlsZXNfbGVha2VkICs9IHRpbGVzOworICAg
IGJ5dGVzX2xlYWtlZCArPSBieXRlczsKKworICAgIGlmICh0aWxlcyB8fCBieXRlcykKKyAgICAg
ICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6
JSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSIsCisgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7CisgICAgZWxzZSBpZiAodGlsZXNf
bGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKKyAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5v
IGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCisgICAgICAg
ICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwKKyAgICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAg
ICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKKyAgICBlbHNlCisgICAgICAg
IElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdIiwKKyAgICAg
ICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwK
KyAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCk7CisjZW5kaWYKKworICAgIGZyZWUodG0pOworfQorCisvKioKKyAqIFJlc2l6ZSBtYXRy
aXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCisgKi8KK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
bSk7CisgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQodG0tPm1hdHJpeCwgcm93cywgY29s
cyk7Cit9CisKKy8qKgorICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgaW4gdXNlIGJ5
IGdpdmVuIG1hdHJpeC4KKyAqCisgKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hl
LgorICovCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKKyAgICByZXR1cm4gdG0tPnR1YzsKK30KKworLyoqCisg
KiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4KKyAq
CisgKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhlIGNh
Y2hlLgorICoKKyAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBiYWNrIHVzaW5nCisgKiBl
d2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4gSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBpZiBp
dCBleGlzdHMsCisgKiB0aGVuIHVzZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMo
KS4KKyAqCisgKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxlIGZyb20uCisg
KiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51
bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KKyAqCisgKiBAcmV0
dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIDAgaWYgbm9uZSBpcyBmb3VuZC4gSWYgdGhlIHRp
bGUKKyAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2lsbCBiZSBAYiByZW1v
dmVkICh0aHVzCisgKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9uZSBzaG91bGQgZ2l2
ZSBpdCBiYWNrIHdpdGgKKyAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkgYWZ0
ZXJ3YXJkcy4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgpCisg
Ki8KK0V3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1RpbGVfTWF0
cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29t
KQoreworICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJp
eHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpKTsKKyAgICBpZiAoIXQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHQtPnpvb20gPT0gem9vbSkKKyAgICAgICAg
Z290byBlbmQ7CisKKyAgZW5kOgorICAgIGlmICghdC0+dmlzaWJsZSkgeworICAgICAgICBpZiAo
IWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0KSkKKyAgICAgICAgICAg
IFdSTigiRXdrX1RpbGUgd2FzIHVudXNlZCBidXQgbm90IGluIGNhY2hlPyBidWchIik7CisgICAg
fQorCisgICAgcmV0dXJuIHQ7Cit9CisKKy8qKgorICogQ2hlY2tzIGlmIHRpbGUgb2YgZ2l2ZW4g
em9vbSBleGlzdHMgaW4gbWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXgg
dG8gY2hlY2sgdGlsZSBleGlzdGVuY2UuCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVy
LgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBleGFj
dCB6b29tIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGZvdW5kLCBA
YyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxl
X2V4YWN0X2dldCgpCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9l
eGlzdHMoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93LCBmbG9hdCB6b29tKQoreworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9p
ZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyB0aWxl
IGF0IGdpdmVuIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsIGluIHRoZSBtYXRyaXguCisgKgorICog
VGhlIG5ld2x5IGNyZWF0ZWQgdGlsZSBpcyBjb25zaWRlcmVkIGluIHVzZSBhbmQgbm90IHB1dCBp
bnRvIGNhY2hlCisgKiBvZiB1bnVzZWQgdGlsZXMuIEFmdGVyIGl0IGlzIHVzZWQgb25lIHNob3Vs
ZCBjYWxsCisgKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKSB0byBnaXZlIGl0IGJhY2sgdG8g
bWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gY3JlYXRlIHRpbGUg
b24uCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUg
cm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBsZXZlbCB0byBjcmVhdGUgdGlsZSwgdXNl
ZCB0byBkZXRlcm1pbmUgdGlsZSBzaXplLgorICovCitFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4
X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbmcg
Y29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK3sKKyAgICBFdmFzX0Nvb3JkIHR3
LCB0aDsKKyAgICBFd2tfVGlsZSAqdDsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTCh0bSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTCh6b29tID4g
MC4wLCAwKTsKKworICAgIHR3ID0gdG0tPnRpbGUudzsKKyAgICB0aCA9IHRtLT50aWxlLmg7CisK
KyAgICB0ID0gZXdrX3RpbGVfbmV3KGV2YXMsIHR3LCB0aCwgem9vbSwgdG0tPmNzcGFjZSk7Cisg
ICAgaWYgKCF0KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0
ICVmLCBjc3BhY2U9JWQiLCB0dywgdGgsIChkb3VibGUpem9vbSwgdG0tPmNzcGFjZSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9p
ZHhfc2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCB0KSkgeworICAgICAgICBFUlIoImNvdWxkIG5v
dCBzZXQgbWF0cml4IGNlbGwsIHJvdy9jb2wgb3V0c2lkZSBtYXRyaXggZGltZW5zaW9ucyEiKTsK
KyAgICAgICAgZXdrX3RpbGVfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgdC0+Y29sID0gY29sOworICAgIHQtPnJvdyA9IHJvdzsKKyAgICB0LT54ID0gY29sICogdHc7
CisgICAgdC0+eSA9IHJvdyAqIHRoOworCisgICAgY2Fpcm9fdHJhbnNsYXRlKHQtPmNhaXJvLCAt
dC0+eCwgLXQtPnkpOworCisgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Cisg
ICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+
Ynl0ZXM7CisgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCsrOworI2VuZGlmCisKKyAgICBy
ZXR1cm4gdDsKK30KKworLyoqCisgKiBHaXZlcyBiYWNrIHRoZSB0aWxlIHRvIHRoZSB0aWxlIG1h
dHJpeC4KKyAqCisgKiBUaGlzIHdpbGwgcmVwb3J0IHRoZSB0aWxlIGlzIG5vIGxvbmdlciBpbiB1
c2UgYnkgdGhlIG9uZSB0aGF0IGdvdAorICogaXQgd2l0aCBld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9nZXQoKS4KKyAqCisgKiBBbnkgcHJldmlvdXMgcmVmZXJlbmNlIHRvIHRpbGUgc2hvdWxk
IGJlIHJlbGVhc2VkCisgKiAoZXdrX3RpbGVfaGlkZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1
bmN0aW9uLCBzbyBpdCB3aWxsCisgKiBiZSBrbm93biBpZiBpdCBpcyBub3QgdmlzaWJpbGUgYW55
bW9yZSBhbmQgdGh1cyBjYW4gYmUgcHV0IGludG8gdGhlCisgKiB1bnVzZWQgY2FjaGUuCisgKgor
ICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KKyAqIEBwYXJh
bSB0IHRoZSB0aWxlIGluc3RhbmNlIHRvIHJldHVybiwgbXVzdCBAYiBub3QgYmUgQGMgMC4KKyAq
IEBwYXJhbSBsYXN0X3VzZWQgdGltZSBpbiB3aGljaCB0aWxlIHdhcyBsYXN0IHVzZWQuCisgKgor
ICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3Mgb3IgI0VJTkFfRkFMU0Ugb24gZmFpbHVy
ZS4KKyAqLworRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRy
aXggKnRtLCBFd2tfVGlsZSAqdCwgZG91YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh0LCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh0LT52aXNpYmxlKQor
ICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworCisgICAgdC0+c3RhdHMubGFzdF91c2VkID0gbGFz
dF91c2VkOworICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0tPnR1
YywgdCwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRtKTsKK30KKworRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBs
b25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUp
Cit7CisgICAgRWluYV9SZWN0YW5nbGUgbmV3X3VwZGF0ZTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOworCisgICAgbWVtY3B5KCZuZXdfdXBkYXRl
LCB1cGRhdGUsIHNpemVvZihuZXdfdXBkYXRlKSk7CisgICAgLy8gY2hlY2sgdXBkYXRlIGlzIHZh
bGlkLCBvdGhlcndpc2UgcmV0dXJuIEVJTkFfRkFMU0UKKyAgICBpZiAodXBkYXRlLT54IDwgMCB8
fCB1cGRhdGUtPnkgPCAwIHx8IHVwZGF0ZS0+dyA8PSAwIHx8IHVwZGF0ZS0+aCA8PSAwKSB7Cisg
ICAgICAgIEVSUigiaW52YWxpZCB1cGRhdGUgcmVnaW9uLiIpOworICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKKyAgICB9CisKKyAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSB0
bS0+dGlsZS53KQorICAgICAgICBuZXdfdXBkYXRlLncgPSB0bS0+dGlsZS53IC0gdXBkYXRlLT54
OworICAgIGlmICh1cGRhdGUtPnkgKyB1cGRhdGUtPmggLSAxID49IHRtLT50aWxlLmgpCisgICAg
ICAgIG5ld191cGRhdGUuaCA9IHRtLT50aWxlLmggLSB1cGRhdGUtPnk7CisKKyAgICBFd2tfVGls
ZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhf
Z2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSk7CisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOworCisgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0
ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0
KTsKKyAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmbmV3X3VwZGF0ZSk7CisKKyAgICByZXR1
cm4gRUlOQV9UUlVFOworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRl
X2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93KQoreworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICghZWlu
YV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCAmY2VsbCkp
CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgaWYgKCFjZWxsKQorICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworCisgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOworICAgIGlmICghdCkg
eworICAgICAgICBDUklUSUNBTCgibWF0cml4IGNlbGwgd2l0aCBubyB0aWxlISIpOworICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVu
ZCh0bS0+dXBkYXRlcywgdCk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisKKyAgICBy
ZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNf
Y2xlYXIoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUgKnQpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMu
ZnVsbF91cGRhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFy
KHQpOworICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7
Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAoRXdr
X1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEsIGZsb2F0IHpvb20s
IEVpbmFfVGlsZV9HcmlkX1NsaWNlciAqc2xpY2VyKQoreworICAgIHVuc2lnbmVkIGxvbmcgcm93
cywgY29sczsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgsIHR3LCB0aDsKKworICAgIGlmIChh
cmVhLT53IDw9IDAgfHwgYXJlYS0+aCA8PSAwKSB7CisgICAgICAgIFdSTigiaW52YWxpZCBhcmVh
IHJlZ2lvbjogJWQsJWQrJWR4JWQuIiwKKyAgICAgICAgICAgIGFyZWEtPngsIGFyZWEtPnksIGFy
ZWEtPncsIGFyZWEtPmgpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAg
ICB4ID0gYXJlYS0+eDsKKyAgICB5ID0gYXJlYS0+eTsKKyAgICB3ID0gYXJlYS0+dzsKKyAgICBo
ID0gYXJlYS0+aDsKKworICAgIHR3ID0gdG0tPnRpbGUudzsKKyAgICB0aCA9IHRtLT50aWxlLmg7
CisKKyAgICAvLyBjcm9wcGluZyBhcmVhIHJlZ2lvbiB0byBmaXQgbWF0cml4CisgICAgZWluYV9t
YXRyaXhzcGFyc2Vfc2l6ZV9nZXQodG0tPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKKyAgICBpZiAo
eCA8IDApIHsKKyAgICAgICAgdyArPSB4OworICAgICAgICB4ID0gMDsKKyAgICB9CisgICAgaWYg
KHkgPCAwKSB7CisgICAgICAgIGggKz0geTsKKyAgICAgICAgeSA9IDA7CisgICAgfQorCisgICAg
aWYgKHkgKyBoIC0gMSA+IChsb25nKShyb3dzICogdGgpKQorICAgICAgICBoID0gcm93cyAqIHRo
IC0geTsKKyAgICBpZiAoeCArIHcgLSAxID4gKGxvbmcpKGNvbHMgKiB0dykpCisgICAgICAgIHcg
PSBjb2xzICogdHcgLSB4OworCisgICAgcmV0dXJuIGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1
cChzbGljZXIsIHgsIHksIHcsIGgsIHR3LCB0aCk7Cit9CisKKworRWluYV9Cb29sIGV3a190aWxl
X21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUg
KnVwZGF0ZSwgZmxvYXQgem9vbSkKK3sKKyAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvICpp
bmZvOworICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh1cGRhdGUtPncg
PCAxIHx8IHVwZGF0ZS0+aCA8IDEpIHsKKyAgICAgICAgREJHKCJXaHkgd2UgZ2V0IHVwZGF0ZXMg
d2l0aCBlbXB0eSBhcmVhcz8gJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIsCisgICAgICAgICAgICB1
cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgsIHpvb20pOworICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIGlmICghX2V3a190aWxlX21hdHJpeF9z
bGljZXJfc2V0dXAodG0sIHVwZGF0ZSwgem9vbSwgJnNsaWNlcikpIHsKKyAgICAgICAgRVJSKCJD
b3VsZCBub3Qgc2V0dXAgc2xpY2VyIGZvciB1cGRhdGUgJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIs
CisgICAgICAgICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgs
IHpvb20pOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICB3aGlsZSAo
ZWluYV90aWxlX2dyaWRfc2xpY2VyX25leHQoJnNsaWNlciwgJmluZm8pKSB7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgICAgIGNvbCA9IGluZm8tPmNvbDsKKyAgICAgICAg
cm93ID0gaW5mby0+cm93OworCisgICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBj
b2wpKTsKKyAgICAgICAgaWYgKCF0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgICAgIHRt
LT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7CisgICAgICAgIGlm
IChpbmZvLT5mdWxsKQorICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZpbmZvLT5yZWN0
KTsKKyAgICB9CisKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVf
bWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVpbmFf
TGlzdCAqbCwgKmxfbmV4dDsKKyAgICB2b2lkKiBpdGVtOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHRtKTsKKworICAgIC8vIHByb2Nlc3MgdXBkYXRlcywgdW5mbGFnIHRpbGVzCisg
ICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0bS0+dXBkYXRlcywgbCwgbF9uZXh0LCBpdGVtKSB7
CisgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihpdGVtKTsK
KyAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHRpbGUsIHRtLT5yZW5kZXIuY2IsIHRt
LT5yZW5kZXIuZGF0YSk7CisgICAgICAgIGlmICh0aWxlLT52aXNpYmxlKSB7CisgICAgICAgICAg
ICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGUpOworICAgICAgICAgICAgdG0tPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodG0tPnVwZGF0ZXMsIGwpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJp
eCAqdG0pCit7CisgICAgdm9pZCogaXRlbTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tih0bSk7CisKKyAgICBFSU5BX0xJU1RfRlJFRSh0bS0+dXBkYXRlcywgaXRlbSkKKyAgICAgICAg
ZXdrX3RpbGVfdXBkYXRlc19jbGVhcihzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGl0ZW0pKTsKKyAg
ICB0bS0+dXBkYXRlcyA9IDA7Cit9CisKKy8vIHJlbW92ZSBtZSBsYXRlciEKK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVpbmFfSXRl
cmF0b3IgKml0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRlcmF0b3JfY29tcGxldGVfbmV3KHRtLT5t
YXRyaXgpOworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAgRWluYV9Cb29s
IGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAg
cHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBS
SXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2
NCJdXG4iLAorICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMu
dGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+
c3RhdHMudGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQs
IHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCk7CisjZWxzZQorICAgIHByaW50ZigiRXdrX1Rp
bGUgTWF0cml4OlxuIik7CisjZW5kaWYKKworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwg
Y2VsbCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sOworICAgICAgICBlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sKTsKKworICAgICAg
ICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2Vf
Y2VsbF9kYXRhX2dldChjZWxsKSk7CisgICAgICAgIGlmICghdCkgeworICAgICAgICAgICAgaWYg
KCFsYXN0X2VtcHR5KSB7CisgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfVFJVRTsK
KyAgICAgICAgICAgICAgICBwcmludGYoIkVtcHR5OiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29sLCByb3cpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGxhc3RfZW1wdHkpIHsKKyAgICAgICAgICAgICAgICBsYXN0X2VtcHR5
ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBwcmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0KTsK
KyAgICAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdC0+
Y29sLCB0LT5yb3csIHQtPncsIHQtPmgsIHQtPnpvb20sIHQtPnZpc2libGUgPyAnKic6ICcgJyk7
CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxh
c3RfZW1wdHkpCisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUo
aXQpOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0bS0+dHVjKTsKK30KKworLyoq
CisgKiBGcmVlemUgbWF0cml4IHRvIG5vdCBkbyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBN
YWludGVuYW5jZSB0YXNrcyBvcHRpbWl6ZSB1c2FnZSwgYnV0IG1heWJlIHdlIGtub3cgd2Ugc2hv
dWxkIGhvbGQKKyAqIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxhc3Qgb3BlcmF0aW9uLCBpbiB0
aGlzIGNhc2Ugd2UgZnJlZXplCisgKiB3aGlsZSBvcGVyYXRpbmcgYW5kIHRoZW4gdGhhdyB3aGVu
IHdlJ3JlIGRvbmUuCisgKgorICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGhhdygpCisgKi8KK3Zv
aWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBpZiAoIXRtLT5mcm96ZW4pCisgICAg
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgdG0tPmZyb3pl
bisrOworfQorCisvKioKKyAqIFVuZnJlZXplcyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBJ
ZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5j
ZSB0YXNrcworICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfbWF0
cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0bSk7CisgICAgaWYgKCF0bS0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhhd2lu
ZyBtb3JlIHRoYW4gZnJlZXppbmchIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0
bS0+ZnJvemVuLS07CisgICAgaWYgKCF0bS0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfbW9kZWwuYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
bW9kZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJlOTQ3OTNiNmRiY2IxZGVh
Y2YxYjhjNTQwMWRlMmI0YTU3NzZkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMKKysr
IC9kZXYvbnVsbApAQCAtMSw4NDggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiZXdrX3RpbGVkX21vZGVsLmgiCi0KLSNkZWZpbmUgX0dOVV9TT1VSQ0UKLSNpbmNsdWRlICJl
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIgotI2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRlLmgi
Ci0jaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUgPEVpbmEuaD4KLSNpbmNsdWRlIDxl
aW5hX3NhZmV0eV9jaGVja3MuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5
cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgVElMRV9TVEFUU19B
Q0NPVU5UX1JFTkRFUl9USU1FCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jaWZu
ZGVmIENBSVJPX0ZPUk1BVF9SR0IxNl81NjUKLSNkZWZpbmUgQ0FJUk9fRk9STUFUX1JHQjE2XzU2
NSA0Ci0jZW5kaWYKLQotI2RlZmluZSBJRFgoY29sLCByb3csIHJvd3NwYW4pIChjb2wgKyAocm93
ICogcm93c3BhbikpCi0jZGVmaW5lIE1JTihhLCBiKSAoKGEgPCBiKSA/IGEgOiBiKQotI2RlZmlu
ZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwot
c3RhdGljIHVpbnQ2NF90IHRpbGVzX2FsbG9jYXRlZCA9IDA7Ci1zdGF0aWMgdWludDY0X3QgdGls
ZXNfZnJlZWQgPSAwOwotc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2FsbG9jYXRlZCA9IDA7Ci1zdGF0
aWMgdWludDY0X3QgYnl0ZXNfZnJlZWQgPSAwOwotCi1zdHJ1Y3QgdGlsZV9hY2NvdW50IHsKLSAg
ICBFdmFzX0Nvb3JkIHNpemU7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdWludDY0X3QgYWxsb2Nh
dGVkOwotICAgICAgICB1aW50NjRfdCBmcmVlZDsKLSAgICB9IHRpbGVzLCBieXRlczsKLX07Ci0K
LXN0YXRpYyBzaXplX3QgYWNjb3VudGluZ19sZW4gPSAwOwotc3RhdGljIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKmFjY291bnRpbmcgPSBOVUxMOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKl9ld2tfdGlsZV9hY2NvdW50X2dldChjb25zdCBFd2tfVGlsZSAqdCkKLXsKLSAgICBz
dHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7Ci0gICAgc2l6ZV90IGk7Ci0KLSAgICBmb3IgKGkgPSAw
OyBpIDwgYWNjb3VudGluZ19sZW47IGkrKykgewotICAgICAgICBpZiAoYWNjb3VudGluZ1tpXS5z
aXplID09IHQtPncpCi0gICAgICAgICAgICByZXR1cm4gYWNjb3VudGluZyArIGk7Ci0gICAgfQot
Ci0gICAgaSA9IChhY2NvdW50aW5nX2xlbiArIDEpICogc2l6ZW9mKHN0cnVjdCB0aWxlX2FjY291
bnQpOwotICAgIFJFQUxMT0NfT1JfT09NX1JFVChhY2NvdW50aW5nLCBpLCBOVUxMKTsKLQotICAg
IGFjYyA9IGFjY291bnRpbmcgKyBhY2NvdW50aW5nX2xlbjsKLSAgICBhY2MtPnNpemUgPSB0LT53
OwotICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkID0gMDsKLSAgICBhY2MtPnRpbGVzLmZyZWVkID0g
MDsKLSAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCA9IDA7Ci0gICAgYWNjLT5ieXRlcy5mcmVlZCA9
IDA7Ci0KLSAgICBhY2NvdW50aW5nX2xlbisrOwotCi0gICAgcmV0dXJuIGFjYzsKLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGls
ZSAqdCkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2MgPSBfZXdrX3RpbGVfYWNjb3Vu
dF9nZXQodCk7Ci0gICAgaWYgKCFhY2MpCi0gICAgICAgIHJldHVybjsKLSAgICBhY2MtPmJ5dGVz
LmFsbG9jYXRlZCArPSB0LT5ieXRlczsKLSAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCsrOwotCi0g
ICAgYnl0ZXNfYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwotICAgIHRpbGVzX2FsbG9jYXRlZCsrOwot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdr
X1RpbGUgKnQpCi17Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2Fj
Y291bnRfZ2V0KHQpOwotICAgIGlmICghYWNjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhY2Mt
PmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwotICAgIGFjYy0+dGlsZXMuZnJlZWQrKzsKLQotICAg
IGJ5dGVzX2ZyZWVkICs9IHQtPmJ5dGVzOwotICAgIHRpbGVzX2ZyZWVkKys7Ci19Ci0KLXZvaWQg
ZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50
ICphY2M7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjX2VuZDsKLQotICAgIHByaW50Zigi
VElMRSBCQUxBTkNFOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0g
ICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAg
ICAgICAgICAgIHRpbGVzX2FsbG9jYXRlZCwgdGlsZXNfZnJlZWQsIHRpbGVzX2FsbG9jYXRlZCAt
IHRpbGVzX2ZyZWVkLAotICAgICAgICAgICAgYnl0ZXNfYWxsb2NhdGVkLCBieXRlc19mcmVlZCwg
Ynl0ZXNfYWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQpOwotCi0gICAgaWYgKCFhY2NvdW50aW5nX2xl
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYWNjID0gYWNjb3VudGluZzsKLSAgICBhY2NfZW5k
ID0gYWNjICsgYWNjb3VudGluZ19sZW47Ci0gICAgcHJpbnRmKCJCRUdJTjogVElMRSBCQUxBTkNF
IERFVEFJTFMgKFRPIFRISVMgTU9NRU5UISk6XG4iKTsKLSAgICBmb3IgKDsgYWNjIDwgYWNjX2Vu
ZDsgYWNjKyspIHsKLSAgICAgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwotCi0gICAgICAgIHRp
bGVzID0gYWNjLT50aWxlcy5hbGxvY2F0ZWQgLSBhY2MtPnRpbGVzLmZyZWVkOwotICAgICAgICBi
eXRlcyA9IGFjYy0+Ynl0ZXMuYWxsb2NhdGVkIC0gYWNjLT5ieXRlcy5mcmVlZDsKLQotICAgICAg
ICBwcmludGYoIiAgICU0ZDogdGlsZXNbKyU0IlBSSXU2NCIsLSU0IlBSSXU2NCI6JTQiUFJJdTY0
Il0gIgotICAgICAgICAgICAgICAgImJ5dGVzWyslOCJQUkl1NjQiLC0lOCJQUkl1NjQiOiU4IlBS
SXU2NCJdJXNcbiIsCi0gICAgICAgICAgICAgICBhY2MtPnNpemUsCi0gICAgICAgICAgICAgICBh
Y2MtPnRpbGVzLmFsbG9jYXRlZCwgYWNjLT50aWxlcy5mcmVlZCwgdGlsZXMsCi0gICAgICAgICAg
ICAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCwgYWNjLT5ieXRlcy5mcmVlZCwgYnl0ZXMsCi0gICAg
ICAgICAgICAgICAoYnl0ZXMgfHwgdGlsZXMpID8gIiBQT1NTSUJMRSBMRUFLIiA6ICIiKTsKLSAg
ICB9Ci0gICAgcHJpbnRmKCJFTkQ6IFRJTEUgQkFMQU5DRSBERVRBSUxTIChUTyBUSElTIE1PTUVO
VCEpOlxuIik7Ci19Ci0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291
bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxlICp0KSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9Ci0KLXZvaWQgZXdr
X3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKLXsKLSAgICBwcmludGYoImNvbXBpbGUgd2Via2l0
IHdpdGggREVCVUdfTUVNX0xFQUtTIGRlZmluZWQhXG4iKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAqdCwgdWludDhfdCBy
LCB1aW50OF90IGcsIHVpbnQ4X3QgYikKLXsKLSAgICB1aW50MzJfdCAqZHN0MzIsICpkc3QzMl9l
bmQsIGMxOwotICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7Ci0KLSAgICBjMSA9
IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXIgPDwgMTYpIHwgKCh1aW50MzJfdClnIDw8IDgpIHwg
YjsKLSAgICBjMiA9ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7Ci0KLSAgICBkc3Q2NCA9ICh1
aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+Ynl0ZXMg
LyA4KSAmIH43KTsKLSAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsK
LSAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KLSAg
ICAgICAgZHN0NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAgICAgZHN0
NjRbMl0gPSBjMjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRbNF0gPSBj
MjsKLSAgICAgICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsKLSAgICAg
ICAgZHN0NjRbN10gPSBjMjsKLSAgICB9Ci0KLSAgICBkc3QzMiA9ICh1aW50MzJfdCAqKWRzdDY0
X2VuZDsKLSAgICBkc3QzMl9lbmQgPSAodWludDMyX3QgKikodC0+cGl4ZWxzICsgdC0+Ynl0ZXMp
OwotICAgIGZvciAoOyBkc3QzMiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKLSAgICAgICAgKmRzdDMy
ID0gYzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3
a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQotewotICAgIHVpbnQx
Nl90ICpkc3QxNiwgKmRzdDE2X2VuZCwgYzE7Ci0gICAgdWludDY0X3QgKmRzdDY0LCAqZHN0NjRf
ZW5kLCBjMjsKLQotICAgIGMxID0gKCgoKHIgPj4gMykgJiAweDFmKSA8PCAxMSkgfAotICAgICAg
ICAgICgoKGcgPj4gMikgJiAweDNmKSA8PCA1KSB8Ci0gICAgICAgICAgKChiID4+IDMpICYgMHgx
ZikpOwotCi0gICAgYzIgPSAoKCh1aW50NjRfdCljMSA8PCA0OCkgfCAoKHVpbnQ2NF90KWMxIDw8
IDMyKSB8Ci0gICAgICAgICAgKCh1aW50NjRfdCljMSA8PCAxNikgfCBjMSk7Ci0KLSAgICBkc3Q2
NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+
Ynl0ZXMgLyA4KSAmIH43KTsKLSAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9
IDgpIHsKLSAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMg
Ki8KLSAgICAgICAgZHN0NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAg
ICAgZHN0NjRbMl0gPSBjMjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRb
NF0gPSBjMjsKLSAgICAgICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsK
LSAgICAgICAgZHN0NjRbN10gPSBjMjsKLSAgICB9Ci0KLSAgICBkc3QxNiA9ICh1aW50MTZfdCAq
KWRzdDE2X2VuZDsKLSAgICBkc3QxNl9lbmQgPSAodWludDE2X3QgKikodC0+cGl4ZWxzICsgdC0+
Ynl0ZXMpOwotICAgIGZvciAoOyBkc3QxNiA8IGRzdDE2X2VuZDsgZHN0MTYrKykKLSAgICAgICAg
KmRzdDE2ID0gYzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdr
X1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCi17Ci0gICAgaWYgKHQt
PmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpCi0gICAgICAgIF9ld2tfdGlsZV9w
YWludF9yZ2I4ODgodCwgciwgZywgYik7Ci0gICAgZWxzZSBpZiAodC0+Y3NwYWNlID09IEVWQVNf
Q09MT1JTUEFDRV9SR0I1NjVfQTVQKQotICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KHQs
IHIsIGcsIGIpOwotICAgIGVsc2UKLSAgICAgICAgRVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAl
ZCIsIHQtPmNzcGFjZSk7Ci19Ci0KLS8qKgotICogQ3JlYXRlIGEgbmV3IHRpbGUgb2YgZ2l2ZW4g
c2l6ZSwgem9vbSBsZXZlbCBhbmQgY29sb3JzcGFjZS4KLSAqCi0gKiBBZnRlciBjcmVhdGVkIHRo
ZXNlIHByb3BlcnRpZXMgYXJlIGltbXV0YWJsZSBhcyB0aGV5J3JlIHRoZSBiYXNpYwotICogY2hh
cmFjdGVyaXN0aWMgb2YgdGhlIHRpbGUgYW5kIGFueSBjaGFuZ2Ugd2lsbCBsZWFkIHRvIGludmFs
aWQKLSAqIG1lbW9yeSBhY2Nlc3MuCi0gKgotICogT3RoZXIgbWVtYmVycyBhcmUgb2YgZnJlZS1h
Y2Nlc3MgYW5kIG5vIGdldHRlcnMvc2V0dGVycyBhcmUKLSAqIHByb3ZpZGVkIGluIG9yZGVyciB0
byBhdm9pZCBleHBlbnNpdmUgb3BlcmF0aW9ucyBvbiB0aG9zZSwgaG93ZXZlcgotICogc29tZSBh
cmUgYmV0dGVyIG1hbmlwdWxhdGVkIHdpdGggcHJvdmlkZWQgZnVuY3Rpb25zLCBzdWNoIGFzCi0g
KiBld2tfdGlsZV9zaG93KCkgYW5kIGV3a190aWxlX2hpZGUoKSB0byBjaGFuZ2UKLSAqIEBjIHZp
c2libGUgb3IgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoKSwgZXdrX3RpbGVfdXBkYXRlX2FyZWEoKSwK
LSAqIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSB0byBjaGFuZ2UgQGMgc3RhdHMubWlzc2VzLAot
ICogQGMgc3RhdHMuZnVsbF91cGRhdGUgYW5kIEBjIHVwZGF0ZXMuCi0gKi8KLUV3a19UaWxlICpl
d2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0
IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UpCi17Ci0gICAgRXZhc19Db29yZCAqZWM7Ci0g
ICAgRXZhc19Db2xvcnNwYWNlICplY3M7Ci0gICAgZmxvYXQgKmY7Ci0gICAgc2l6ZV90ICpzOwot
ICAgIEV3a19UaWxlICp0OwotICAgIHVuc2lnbmVkIGludCBhcmVhOwotICAgIHNpemVfdCBieXRl
czsKLSAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7Ci0gICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVz
OwotICAgIGludCBzdHJpZGU7Ci0gICAgRWNvcmVfRXZhcyAqZWU7Ci0gICAgY29uc3QgY2hhciAq
ZW5naW5lOwotCi0gICAgYXJlYSA9IHcgKiBoOwotCi0gICAgaWYgKGNzcGFjZSA9PSBFVkFTX0NP
TE9SU1BBQ0VfQVJHQjg4ODgpIHsKLSAgICAgICAgYnl0ZXMgPSBhcmVhICogNDsKLSAgICAgICAg
c3RyaWRlID0gdyAqIDQ7Ci0gICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7Ci0g
ICAgfSBlbHNlIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApIHsKLSAg
ICAgICAgYnl0ZXMgPSBhcmVhICogMjsKLSAgICAgICAgc3RyaWRlID0gdyAqIDI7Ci0gICAgICAg
IGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IxNl81NjU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
RVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAlZCIsIGNzcGFjZSk7Ci0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIH0KLQotICAgIERCRygic2l6ZTogJWR4JWQgKCVkKSwgem9vbTogJWYsIGNzcGFj
ZT0lZCIsIHcsIGgsIGFyZWEsIChkb3VibGUpem9vbSwgY3NwYWNlKTsKLQotICAgIE1BTExPQ19P
Ul9PT01fUkVUKHQsIHNpemVvZihFd2tfVGlsZSksIE5VTEwpOwotICAgIHQtPmltYWdlID0gZXZh
c19vYmplY3RfaW1hZ2VfYWRkKGV2YXMpOwotCi0gICAgZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2
YXNfZ2V0KGV2YXMpOwotICAgIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVl
KTsKLSAgICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gxMSIpKQotICAg
ICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHQtPmltYWdlLCBFVkFTX0lN
QUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKLQotICAgIHQtPnZpc2libGUgPSAwOwotICAgIHQt
PnVwZGF0ZXMgPSBOVUxMOwotCi0gICAgbWVtc2V0KCZ0LT5zdGF0cywgMCwgc2l6ZW9mKEV3a19U
aWxlX1N0YXRzKSk7Ci0gICAgdC0+c3RhdHMuYXJlYSA9IGFyZWE7Ci0KLSAgICAvKiB1Z2x5LCBi
dXQgbGV0J3MgYXZvaWQgYXQgYWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2Ug
Ki8KLSAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPnc7Ci0gICAgKmVjID0gdzsKLQotICAgIGVj
ID0gKEV2YXNfQ29vcmQgKikmdC0+aDsKLSAgICAqZWMgPSBoOwotCi0gICAgZWNzID0gKEV2YXNf
Q29sb3JzcGFjZSAqKSZ0LT5jc3BhY2U7Ci0gICAgKmVjcyA9IGNzcGFjZTsKLQotICAgIGYgPSAo
ZmxvYXQgKikmdC0+em9vbTsKLSAgICAqZiA9IHpvb207Ci0KLSAgICBzID0gKHNpemVfdCAqKSZ0
LT5ieXRlczsKLSAgICAqcyA9IGJ5dGVzOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9z
ZXQodC0+aW1hZ2UsIHQtPncsIHQtPmgpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3Bh
Y2Vfc2V0KHQtPmltYWdlLCB0LT5jc3BhY2UpOwotICAgIHQtPnBpeGVscyA9IGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfZ2V0KHQtPmltYWdlLCBFSU5BX1RSVUUpOwotICAgIHQtPnN1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0LT5waXhlbHMsIGZvcm1hdCwgdywg
aCwgc3RyaWRlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyh0LT5zdXJmYWNl
KTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7Ci0gICAgICAgIEVS
UigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsCi0gICAgICAgICAgICBjYWly
b19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAgICAgICBmcmVlKHQpOwotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJm
YWNlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8pOwotICAgIGlmIChzdGF0
dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3Jl
YXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKLSAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKHQtPmltYWdlKTsKLSAgICAgICAgZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOwotCi0gICAgcmV0dXJu
IHQ7Ci19Ci0KLS8qKgotICogRnJlZSB0aWxlIG1lbW9yeS4KLSAqLwotdm9pZCBld2tfdGlsZV9m
cmVlKEV3a19UaWxlICp0KQotewotICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOwotCi0g
ICAgaWYgKHQtPnVwZGF0ZXMpCi0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsK
LQotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKLSAgICBjYWlyb19kZXN0
cm95KHQtPmNhaXJvKTsKLSAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOwotICAgIGZyZWUo
dCk7Ci19Ci0KLS8qKgotICogTWFrZSB0aGUgdGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRz
IGNvdW50ZXIuCi0gKi8KLXZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSAqdCkKLXsKLSAgICB0
LT52aXNpYmxlKys7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyh0LT5pbWFnZSk7Ci19Ci0KLS8qKgot
ICogRGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBpbnZpc2libGUg
aWYgbmVjZXNzYXJ5LgotICovCi12b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpCi17Ci0g
ICAgdC0+dmlzaWJsZS0tOwotICAgIGlmICghdC0+dmlzaWJsZSkKLSAgICAgICAgZXZhc19vYmpl
Y3RfaGlkZSh0LT5pbWFnZSk7Ci19Ci0KLS8qKgotICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhl
IHRpbGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KLUVpbmFfQm9vbCBl
d2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKLXsKLSAgICByZXR1cm4gISF0LT52aXNp
YmxlOwotfQotCi0vKioKLSAqIE1hcmsgd2hvbGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5n
IHVwZGF0ZS4KLSAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKLXsK
LSAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0LT5z
dGF0cy5taXNzZXMrKzsKLQotICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKLSAgICAg
ICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRh
dGVzKSB7Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAg
ICAgICB0LT51cGRhdGVzID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLyoqCi0gKiBN
YXJrIHRoZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgot
ICovCi12b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqcikKLXsKLSAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRl
cz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMrKzsKLQotICAgIGlmICh0LT5zdGF0cy5mdWxsX3Vw
ZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncg
PT0gdC0+dyAmJiByLT5oID09IHQtPmgpIHsKLSAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUg
PSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBlaW5h
X3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAgICAgICB0LT51cGRhdGVzID0gTlVMTDsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF0LT51cGRhdGVz
KSB7Ci0gICAgICAgIHQtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKLSAg
ICAgICAgaWYgKCF0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90
IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHQtPncsIHQtPmgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRh
dGVzLCByKTsKLX0KLQotLyoqCi0gKiBGb3IgZWFjaCB1cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUg
Z2l2ZW4gZnVuY3Rpb24uCi0gKgotICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3Rh
dGlzdGljcyBvciBjbGVhciB0aGUgcHJvY2Vzc2VkCi0gKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVf
dXBkYXRlc19jbGVhcigpIGZvciB0aGF0LgotICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJv
Y2VzcyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29u
c3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgaWYg
KHQtPnN0YXRzLmZ1bGxfdXBkYXRlKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7Ci0gICAg
ICAgIHIueCA9IDA7Ci0gICAgICAgIHIueSA9IDA7Ci0gICAgICAgIHIudyA9IHQtPnc7Ci0gICAg
ICAgIHIuaCA9IHQtPmg7Ci0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCi0g
ICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWV2OwotICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0
OwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCBOVUxMKTsKLSAgICAgICAgcmVuZGVyX3N0
YXJ0ID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwotICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2
LnR2X3VzZWMpIC8gMTAwMDAwMCk7Ci0jZW5kaWYKLSAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0
LCAmcik7Ci0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCi0gICAgICAgIGdl
dHRpbWVvZmRheSgmdGltZXYsIE5VTEwpOwotICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9
IChkb3VibGUpdGltZXYudHZfc2VjICsKLSAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91
c2VjKSAvIDEwMDAwMDApIC0gcmVuZGVyX3N0YXJ0OwotI2VuZGlmCi0gICAgfSBlbHNlIGlmICh0
LT51cGRhdGVzKSB7Ci0gICAgICAgIEVpbmFfSXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRl
cmF0b3JfbmV3KHQtPnVwZGF0ZXMpOwotICAgICAgICBFaW5hX1JlY3RhbmdsZSAqcjsKLSAgICAg
ICAgaWYgKCFpdHIpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRp
bGVyIGl0ZXJhdG9yISIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdHIsIHIpCi0gICAgICAgICAgICBjYigodm9pZCAqKWRh
dGEsIHQsIHIpOwotICAgICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKLSAgICB9Ci19Ci0K
LS8qKgotICogQ2xlYXIgYWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCi0gKgotICogVGhp
cyB3aWxsIGNoYW5nZSB0aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1p
c3NlcwotICogYW5kIHVuc2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0
ZWQsIHRoZW4gaXQgd2lsbCBiZQotICogZGVzdHJveWVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24g
aXMgdXN1YWxseSBjYWxsZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKLSAq
IGNhbGxlZC4KLSAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQot
ewotICAgIC8qIFRPRE86IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVzPyAqLwot
ICAgIHQtPnN0YXRzLm1pc3NlcyA9IDA7Ci0KLSAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUp
Ci0gICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gMDsKLSAgICBlbHNlIGlmICh0LT51cGRh
dGVzKSB7Ci0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKLSAgICAgICAgdC0+
dXBkYXRlcyA9IE5VTEw7Ci0gICAgfQotfQotCi10eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5IEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKLXN0cnVjdCBfRXdr
X1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IHsKLSAgICBFd2tfVGlsZSAqdGlsZTsKLSAgICBpbnQg
d2VpZ2h0OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdr
X1RpbGUgKnQpOwotICAgICAgICB2b2lkICpkYXRhOwotICAgIH0gdGlsZV9mcmVlOwotfTsKLQot
c3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgewotICAgIHN0cnVjdCB7Ci0gICAgICAgIEVp
bmFfTGlzdCAqbGlzdDsKLSAgICAgICAgc2l6ZV90IGNvdW50OwotICAgICAgICBzaXplX3QgYWxs
b2NhdGVkOwotICAgIH0gZW50cmllczsKLSAgICBzdHJ1Y3QgewotICAgICAgICBzaXplX3QgbWF4
OyAgLyoqPCB3YXRlcm1hcmsgKGluIGJ5dGVzKSB0byBzdGFydCBmcmVlaW5nIHRpbGVzICovCi0g
ICAgICAgIHNpemVfdCB1c2VkOyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3JlIHRoYW4gbWF4LiAq
LwotICAgIH0gbWVtb3J5OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwg
dywgaDsKLSAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgRWluYV9Cb29sIGxvY2tlZDsKLSAg
ICB9IGxvY2tlZDsKLSAgICBpbnQgcmVmZXJlbmNlczsKLSAgICB1bnNpZ25lZCBpbnQgZnJvemVu
OwotfTsKLQotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9J
TklUSUFMID0gMTI4Owotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExP
Q0FURV9TVEVQID0gMTY7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01B
WF9GUkVFID0gMzI7Ci0KLS8qKgotICogQ2FjaGUgb2YgdW51c2VkIHRpbGVzICh0aG9zZSB0aGF0
IGFyZSBub3QgdmlzaWJsZSkuCi0gKgotICogVGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KLSAq
Ci0gKiBAcGFyYW0gbWF4IGNhY2hlIHNpemUgaW4gYnl0ZXMuCi0gKgotICogQHJldHVybiBuZXds
eSBhbGxvY2F0ZWQgY2FjaGUgb2YgdW51c2VkIHRpbGVzLCB1c2UKLSAqICAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4gSWYgbm90Ci0gKiAg
ICAgICAgIHBvc3NpYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSwgQGMgTlVMTCBpcyByZXR1cm5lZC4K
LSAqLwotRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNp
emVfdCBtYXgpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0KLSAgICBDQUxM
T0NfT1JfT09NX1JFVCh0dWMsIHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUpLCBOVUxMKTsK
LQotICAgIERCRygidHVjPSVwIiwgdHVjKTsKLSAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7Ci0g
ICAgdHVjLT5yZWZlcmVuY2VzID0gMTsKLSAgICByZXR1cm4gdHVjOwotfQotCi12b2lkIGV3a190
aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxv
YXQgem9vbSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotCi0gICAg
dHVjLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVFOwotICAgIHR1Yy0+bG9ja2VkLnggPSB4Owot
ICAgIHR1Yy0+bG9ja2VkLnkgPSB5OwotICAgIHR1Yy0+bG9ja2VkLncgPSB3OwotICAgIHR1Yy0+
bG9ja2VkLmggPSBoOwotICAgIHR1Yy0+bG9ja2VkLnpvb20gPSB6b29tOwotfQotCi12b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotCi0gICAgdHVjLT5s
b2NrZWQubG9ja2VkID0gRUlOQV9GQUxTRTsKLX0KLQotLyoqCi0gKiBGcmVlIGNhY2hlIG9mIHVu
dXNlZCB0aWxlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBi
eSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYKLSAqIGZ1bmN0aW9uLiBDYWxsaW5nIHRoaXMg
ZnVuY3Rpb24gd2l0aG91dCBjb25zaWRlcmluZyByZWZlcmVuY2UgY291bnRpbmcKLSAqIG1heSBs
ZWFkIHRvIHVua25vd24gcmVzdWx0cy4KLSAqCi0gKiBUaG9zZSB0aWxlcyB0aGF0IGFyZSBzdGls
bCB2aXNpYmxlIHdpbGwgcmVtYWluIGxpdmUuIFRoZSB1bnVzZWQKLSAqIHRpbGVzIHdpbGwgYmUg
ZnJlZWQuCi0gKgotICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQotICovCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLQotICAg
IERCRygidHVjPSVwLCAiCi0gICAgICAgICJlbnRyaWVzPShjb3VudDolemQsIGFsbG9jYXRlZDol
emQpLCAiCi0gICAgICAgICJtZW1vcnk9KG1heDolemQsIHVzZWQ6JXpkKSIsCi0gICAgICAgIHR1
YywgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAotICAgICAgICB0
dWMtPm1lbW9yeS5tYXgsIHR1Yy0+bWVtb3J5LnVzZWQpOwotCi0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2NsZWFyKHR1Yyk7Ci0gICAgZnJlZSh0dWMpOwotfQotCi0vKioKLSAqIENsZWFyIGNh
Y2hlIG9mIHVudXNlZCB0aWxlcy4KLSAqCi0gKiBBbnkgdGlsZXMgdGhhdCBhcmUgaW4gdGhlIGNh
Y2hlIGFyZSBmcmVlZC4gVGhlIG9ubHkgdGlsZXMgdGhhdCBhcmUKLSAqIGtlcHQgYXJlIHRob3Nl
IHRoYXQgYXJlbid0IGluIHRoZSBjYWNoZSAoaS5lLiB0aGF0IGFyZSB2aXNpYmxlKS4KLSAqLwot
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLQotICAgIGlmICghdHVjLT5lbnRyaWVzLmNvdW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBFSU5BX0xJU1RfRlJFRSh0dWMtPmVudHJpZXMubGlz
dCwgaXRyKSB7Ci0gICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVlLmRhdGEs
IGl0ci0+dGlsZSk7Ci0gICAgICAgIGZyZWUoaXRyKTsKLSAgICB9Ci0KLSAgICB0dWMtPm1lbW9y
eS51c2VkID0gMDsKLSAgICB0dWMtPmVudHJpZXMuY291bnQgPSAwOwotfQotCi0vKioKLSAqIEhv
bGQgcmVmZXJlbmNlIHRvIGNhY2hlLgotICoKLSAqIEByZXR1cm4gc2FtZSBwb2ludGVyIGFzIHRh
a2VuLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKLSAqLwotRXdr
X1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0
dWMsIE5VTEwpOwotICAgIHR1Yy0+cmVmZXJlbmNlcysrOwotICAgIHJldHVybiB0dWM7Ci19Ci0K
LS8qKgotICogUmVsZWFzZSBjYWNoZSByZWZlcmVuY2UsIGZyZWVpbmcgaXQgaWYgaXQgZHJvcHMg
dG8gemVyby4KLSAqCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoKQotICogQHNl
ZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpCi0gKi8KLXZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0gICAgdHVjLT5yZWZlcmVuY2VzLS07Ci0gICAgaWYg
KCF0dWMtPnJlZmVyZW5jZXMpCi0gICAgICAgIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSh0
dWMpOwotfQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgbWF4KQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHR1Yyk7Ci0gICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OwotfQotCi1zaXplX3QgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Ci0gICAg
cmV0dXJuIHR1Yy0+bWVtb3J5Lm1heDsKLX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNo
ZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKLSAgICByZXR1cm4gdHVjLT5tZW1v
cnkudXNlZDsKLX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQotewotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSAqaXRyOwotICAgIEVpbmFfTGlzdCAqbCwgKmxfbmV4dDsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKLSAgICBzaXplX3QgZG9uZTsKLSAg
ICB1bnNpZ25lZCBpbnQgY291bnQ7Ci0KLSAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGJ5dGVzIDwgMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvKgotICAgICAqIE5PVEU6IHRoZSBjYWNoZSBpcyBhIEZJRk8gcXVldWUgY3VycmVudGx5
LgotICAgICAqIERvbid0IG5lZWQgdG8gc29ydCBhbnkgbW9yZS4KLSAgICAgKi8KLQotICAgIGRv
bmUgPSAwOwotICAgIGNvdW50ID0gMDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+
ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0cikgewotICAgICAgICBFd2tfVGlsZSAqdCA9IGl0
ci0+dGlsZTsKLSAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBpZiAodHVjLT5sb2NrZWQubG9ja2VkCi0gICAgICAgICAgICAmJiB0LT54ICsgdC0+
dyA+IHR1Yy0+bG9ja2VkLngKLSAgICAgICAgICAgICYmIHQtPnkgKyB0LT5oID4gdHVjLT5sb2Nr
ZWQueQotICAgICAgICAgICAgJiYgdC0+eCA8IHR1Yy0+bG9ja2VkLnggKyB0dWMtPmxvY2tlZC53
Ci0gICAgICAgICAgICAmJiB0LT55IDwgdHVjLT5sb2NrZWQueSArIHR1Yy0+bG9ja2VkLmgKLSAg
ICAgICAgICAgICYmIHQtPnpvb20gPT0gdHVjLT5sb2NrZWQuem9vbSkgewotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZSArPSBzaXplb2YoRXdrX1RpbGUpICsg
aXRyLT50aWxlLT5ieXRlczsKLSAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2Zy
ZWUuZGF0YSwgaXRyLT50aWxlKTsKLSAgICAgICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xp
c3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGwpOwotICAgICAgICBmcmVlKGl0cik7
Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotCi0gICAgdHVjLT5tZW1vcnkudXNlZCAtPSBkb25l
OwotICAgIHR1Yy0+ZW50cmllcy5jb3VudCAtPSBjb3VudDsKLQotICAgIHJldHVybiBkb25lOwot
fQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0g
ICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPD0gdHVjLT5tZW1vcnkubWF4KQotICAgICAgICByZXR1
cm47Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKHR1YywgdHVjLT5tZW1vcnkudXNl
ZCAtIHR1Yy0+bWVtb3J5Lm1heCk7Ci0gICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPiB0dWMtPm1l
bW9yeS5tYXgpCi0gICAgICAgIENSSVRJQ0FMKCJDYWNoZSBzdGlsbCB1c2luZyB0b28gbXVjaCBt
ZW1vcnk6ICV6ZCBLQjsgbWF4OiAlemQgS0IiLAotICAgICAgICAgICAgICAgICB0dWMtPm1lbW9y
eS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOwotfQotCi0vKioKLSAqIEZyZWV6ZSBjYWNoZSB0byBu
b3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCi0gKgotICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1p
emUgY2FjaGUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93IHdlIHNob3VsZAotICogaG9sZCBvbiB0
aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6
ZQotICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgotICoK
LSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoKQotICovCi12b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAg
dHVjLT5mcm96ZW4rKzsKLX0KLQotLyoqCi0gKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3Mu
Ci0gKgotICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4g
bWFpbnRlbmFuY2UgdGFza3MKLSAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgotICovCi12b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewot
ICAgIGlmICghdHVjLT5mcm96ZW4pIHsKLSAgICAgICAgRVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBm
cmVlemluZyEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHR1Yy0+ZnJvemVuLS07
Ci19Ci0KLS8qKgotICogR2V0IHRpbGUgZnJvbSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIHJlbW92
aW5nIGl0IGZyb20gdGhlIGNhY2hlLgotICoKLSAqIElmIHRoZSB0aWxlIGlzIHVzZWQsIHRoZW4g
aXQncyBub3QgaW4gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCBzbyBpdAotICogaXMgcmVtb3ZlZCBm
cm9tIHRoZSBjYWNoZSBhbmQgbWF5IGJlIGdpdmVuIGJhY2sgd2l0aAotICogZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RpbGVfcHV0KCkuCi0gKgotICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMKLSAqIEBwYXJhbSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUuCi0gKgotICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KLSAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90
aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQpCi17Ci0gICAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICplbnRyeTsKLSAgICBFaW5hX0xpc3QgKmUsICps
OwotCi0gICAgZSA9IE5VTEw7Ci0gICAgRUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxp
c3QsIGwsIGVudHJ5KQotICAgIHsKLSAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHQpIHsKLSAg
ICAgICAgICAgIGUgPSBsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKCFlKSB7Ci0gICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4gY2FjaGUgJXAi
LCB0LCB0dWMpOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICB0dWMt
PmVudHJpZXMuY291bnQtLTsKLSAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNpemVvZihFd2tfVGls
ZSkgKyB0LT5ieXRlczsKLSAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1vdmVf
bGlzdCh0dWMtPmVudHJpZXMubGlzdCwgZSk7Ci0gICAgZnJlZShlbnRyeSk7Ci0KLSAgICByZXR1
cm4gRUlOQV9UUlVFOwotfQotCi0vKioKLSAqIFB1dCB0aWxlIGludG8gY2FjaGUgb2YgdW51c2Vk
IHRpbGVzLCBhZGRpbmcgaXQgdG8gdGhlIGNhY2hlLgotICoKLSAqIFRoaXMgc2hvdWxkIGJlIGNh
bGxlZCB3aGVuIEBjIHQtPnZpc2libGUgaXMgQGMgMCBhbmQgbm8gb2JqZWN0cyBhcmUKLSAqIHVz
aW5nIHRoZSB0aWxlIGFueW1vcmUsIG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYmUgZXhwaXJlZCBh
bmQgaGF2ZQotICogaXRzIG1lbW9yeSByZXBsYWNlZC4KLSAqCi0gKiBOb3RlIHRoYXQgdGlsZXMg
YXJlIG5vdCBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgaWYgY2FjaGUgaXMgZnVsbCwKLSAqIGluc3Rl
YWQgdGhlIGNhY2hlIHdpbGwgaGF2ZSBtb3JlIGJ5dGVzIHVzZWQgdGhhbiBtYXhpbXVtIGFuZCBv
bmUKLSAqIGNhbiBjYWxsIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkgdG8gZnJl
ZSB0aGVtLiBUaGlzIGlzIGRvbmUKLSAqIGJlY2F1c2UgdXN1YWxseSB3ZSB3YW50IGEgbGF6eSBv
cGVyYXRpb24gZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAqCi0gKiBAcGFyYW0gdHVjIGNhY2hl
IG9mIHVudXNlZCB0aWxlcwotICogQHBhcmFtIHQgdGlsZSB0byBiZSBhZGRlZCB0byBjYWNoZS4K
LSAqIEBwYXJhbSB0aWxlX2ZyZWVfY2IgZnVuY3Rpb24gdXNlZCB0byBmcmVlIHRpbGVzLgotICog
QHBhcmFtIGRhdGEgY29udGV4dCB0byBnaXZlIGJhY2sgdG8gQGEgdGlsZV9mcmVlX2NiIGFzIGZp
cnN0IGFyZ3VtZW50LgotICoKLSAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlO
QV9GQUxTRSBvdGhlcndpc2UuIElmIEBjIHQtPnZpc2libGUKLSAqICAgICAgICAgaXMgbm90ICNF
SU5BX0ZBTFNFLCB0aGVuIGl0IHdpbGwgcmV0dXJuICNFSU5BX0ZBTFNFLgotICoKLSAqIEBzZWUg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKQotICovCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tf
VGlsZSAqdCwgdm9pZCAoKnRpbGVfZnJlZV9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpLCBj
b25zdCB2b2lkICpkYXRhKQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqZTsK
LQotICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51
c2VkICh2aXNpYmxlPSVkKSIsIHQsIHQtPnZpc2libGUpOwotICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKLSAgICB9Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChlLCBzaXplb2YoRXdrX1RpbGVf
VW51c2VkX0NhY2hlX0VudHJ5KSwgRUlOQV9GQUxTRSk7Ci0gICAgdHVjLT5lbnRyaWVzLmxpc3Qg
PSBlaW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKLSAgICBpZiAoZWluYV9l
cnJvcl9nZXQoKSkgewotICAgICAgICBFUlIoIkxpc3QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgZS0+dGlsZSA9IHQ7Ci0gICAg
ZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCi0gICAgZS0+
dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOwotICAgIGUtPnRpbGVfZnJlZS5kYXRhID0gKHZv
aWQgKilkYXRhOwotCi0gICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7Ci0gICAgdHVjLT5tZW1vcnku
dXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7Ci0KLSAgICByZXR1cm4gRUlOQV9U
UlVFOwotfQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICpp
dHI7Ci0gICAgRWluYV9MaXN0ICpsOwotICAgIGludCBjb3VudCA9IDA7Ci0gICAgcHJpbnRmKCJD
YWNoZSBvZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9yeTogJXp1LyV6dVxu
IiwKLSAgICAgICAgICAgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVk
LAotICAgICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOwotCi0gICAg
RUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0cikgewotICAgICAgICBj
b25zdCBFd2tfVGlsZSAqdCA9IGl0ci0+dGlsZTsKLSAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNs
dSArICVkeCVkIEAgJTAuM2ZdJWMiLAotICAgICAgICAgICAgICAgdC0+Y29sLCB0LT5yb3csIHQt
PncsIHQtPmgsIHQtPnpvb20sCi0gICAgICAgICAgICAgICB0LT52aXNpYmxlID8gJyonOiAnICcp
OwotCi0gICAgICAgIGlmICghKGNvdW50ICUgNCkpCi0gICAgICAgICAgICBwcmludGYoIlxuIik7
Ci0gICAgfQotCi0gICAgcHJpbnRmKCJcbiIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3RpbGVkX21vZGVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTY4NTcyOTQwODk5YmRiZTg3MWQ2MzAxZmZk
Y2IxNGFjNDUzYmJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tb2RlbC5jcHAKQEAgLTAsMCArMSw4NTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAwOS0y
MDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgImV3a190aWxlZF9tb2RlbC5oIgorCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVj
b3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hl
Y2tzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+IC8vIFhYWCBSRU1PVkUgTUUgTEFURVIKKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJf
VElNRQorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKworI2RlZmluZSBJRFgoY29sLCBy
b3csIHJvd3NwYW4pIChjb2wgKyAocm93ICogcm93c3BhbikpCisKKyNpZmRlZiBERUJVR19NRU1f
TEVBS1MKK3N0YXRpYyB1aW50NjRfdCB0aWxlc19hbGxvY2F0ZWQgPSAwOworc3RhdGljIHVpbnQ2
NF90IHRpbGVzX2ZyZWVkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRlc19hbGxvY2F0ZWQgPSAw
Oworc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2ZyZWVkID0gMDsKKworc3RydWN0IHRpbGVfYWNjb3Vu
dCB7CisgICAgRXZhc19Db29yZCBzaXplOworICAgIHN0cnVjdCB7CisgICAgICAgIHVpbnQ2NF90
IGFsbG9jYXRlZDsKKyAgICAgICAgdWludDY0X3QgZnJlZWQ7CisgICAgfSB0aWxlcywgYnl0ZXM7
Cit9OworCitzdGF0aWMgc2l6ZV90IGFjY291bnRpbmdfbGVuID0gMDsKK3N0YXRpYyBzdHJ1Y3Qg
dGlsZV9hY2NvdW50ICphY2NvdW50aW5nID0gMDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGls
ZV9hY2NvdW50ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCit7Cisg
ICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjOworICAgIHNpemVfdCBpOworCisgICAgZm9yIChp
ID0gMDsgaSA8IGFjY291bnRpbmdfbGVuOyBpKyspIHsKKyAgICAgICAgaWYgKGFjY291bnRpbmdb
aV0uc2l6ZSA9PSB0LT53KQorICAgICAgICAgICAgcmV0dXJuIGFjY291bnRpbmcgKyBpOworICAg
IH0KKworICAgIGkgPSAoYWNjb3VudGluZ19sZW4gKyAxKSAqIHNpemVvZihzdHJ1Y3QgdGlsZV9h
Y2NvdW50KTsKKyAgICBSRUFMTE9DX09SX09PTV9SRVQoYWNjb3VudGluZywgaSwgMCk7CisKKyAg
ICBhY2MgPSBhY2NvdW50aW5nICsgYWNjb3VudGluZ19sZW47CisgICAgYWNjLT5zaXplID0gdC0+
dzsKKyAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCA9IDA7CisgICAgYWNjLT50aWxlcy5mcmVlZCA9
IDA7CisgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgPSAwOworICAgIGFjYy0+Ynl0ZXMuZnJlZWQg
PSAwOworCisgICAgYWNjb3VudGluZ19sZW4rKzsKKworICAgIHJldHVybiBhY2M7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1Rp
bGUgKnQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2FjY291
bnRfZ2V0KHQpOworICAgIGlmICghYWNjKQorICAgICAgICByZXR1cm47CisgICAgYWNjLT5ieXRl
cy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQrKzsKKwor
ICAgIGJ5dGVzX2FsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICB0aWxlc19hbGxvY2F0ZWQrKzsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3
a19UaWxlICp0KQoreworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9IF9ld2tfdGlsZV9h
Y2NvdW50X2dldCh0KTsKKyAgICBpZiAoIWFjYykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWNj
LT5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPnRpbGVzLmZyZWVkKys7CisKKyAg
ICBieXRlc19mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0aWxlc19mcmVlZCsrOworfQorCit2b2lk
IGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3Vu
dCAqYWNjOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY19lbmQ7CisKKyAgICBwcmludGYo
IlRJTEUgQkFMQU5DRTogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgor
ICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il1cbiIsCisg
ICAgICAgICAgICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2ZyZWVkLCB0aWxlc19hbGxvY2F0ZWQg
LSB0aWxlc19mcmVlZCwKKyAgICAgICAgICAgIGJ5dGVzX2FsbG9jYXRlZCwgYnl0ZXNfZnJlZWQs
IGJ5dGVzX2FsbG9jYXRlZCAtIGJ5dGVzX2ZyZWVkKTsKKworICAgIGlmICghYWNjb3VudGluZ19s
ZW4pCisgICAgICAgIHJldHVybjsKKworICAgIGFjYyA9IGFjY291bnRpbmc7CisgICAgYWNjX2Vu
ZCA9IGFjYyArIGFjY291bnRpbmdfbGVuOworICAgIHByaW50ZigiQkVHSU46IFRJTEUgQkFMQU5D
RSBERVRBSUxTIChUTyBUSElTIE1PTUVOVCEpOlxuIik7CisgICAgZm9yICg7IGFjYyA8IGFjY19l
bmQ7IGFjYysrKSB7CisgICAgICAgIHVpbnQ2NF90IHRpbGVzLCBieXRlczsKKworICAgICAgICB0
aWxlcyA9IGFjYy0+dGlsZXMuYWxsb2NhdGVkIC0gYWNjLT50aWxlcy5mcmVlZDsKKyAgICAgICAg
Ynl0ZXMgPSBhY2MtPmJ5dGVzLmFsbG9jYXRlZCAtIGFjYy0+Ynl0ZXMuZnJlZWQ7CisKKyAgICAg
ICAgcHJpbnRmKCIgICAlNGQ6IHRpbGVzWyslNCJQUkl1NjQiLC0lNCJQUkl1NjQiOiU0IlBSSXU2
NCJdICIKKyAgICAgICAgICAgICAgICJieXRlc1srJTgiUFJJdTY0IiwtJTgiUFJJdTY0IjolOCJQ
Ukl1NjQiXSVzXG4iLAorICAgICAgICAgICAgICAgYWNjLT5zaXplLAorICAgICAgICAgICAgICAg
YWNjLT50aWxlcy5hbGxvY2F0ZWQsIGFjYy0+dGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAg
ICAgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQsIGFjYy0+Ynl0ZXMuZnJlZWQsIGJ5dGVzLAorICAg
ICAgICAgICAgICAgKGJ5dGVzIHx8IHRpbGVzKSA/ICIgUE9TU0lCTEUgTEVBSyIgOiAiIik7Cisg
ICAgfQorICAgIHByaW50ZigiRU5EOiBUSUxFIEJBTEFOQ0UgREVUQUlMUyAoVE8gVEhJUyBNT01F
TlQhKTpcbiIpOworfQorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2Nv
dW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQorCit2b2lkIGV3
a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7CisgICAgcHJpbnRmKCJjb21waWxlIHdlYmtp
dCB3aXRoIERFQlVHX01FTV9MRUFLUyBkZWZpbmVkIVxuIik7Cit9CisjZW5kaWYKKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1RpbGUgKnQsIHVpbnQ4X3Qg
ciwgdWludDhfdCBnLCB1aW50OF90IGIpCit7CisgICAgdWludDMyX3QgKmRzdDMyLCAqZHN0MzJf
ZW5kLCBjMTsKKyAgICB1aW50NjRfdCAqZHN0NjQsICpkc3Q2NF9lbmQsIGMyOworCisgICAgYzEg
PSAweGZmMDAwMDAwIHwgKCh1aW50MzJfdClyIDw8IDE2KSB8ICgodWludDMyX3QpZyA8PCA4KSB8
IGI7CisgICAgYzIgPSAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8IGMxOworCisgICAgZHN0NjQgPSAo
dWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHQtPmJ5dGVz
IC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7
CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCisg
ICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAgIGRzdDY0WzFdID0gYzI7CisgICAgICAgIGRz
dDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNdID0gYzI7CisgICAgICAgIGRzdDY0WzRdID0g
YzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7CisgICAgICAgIGRzdDY0WzZdID0gYzI7CisgICAg
ICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisgICAgZHN0MzIgPSAodWludDMyX3QgKilkc3Q2
NF9lbmQ7CisgICAgZHN0MzJfZW5kID0gKHVpbnQzMl90ICopKHQtPnBpeGVscyArIHQtPmJ5dGVz
KTsKKyAgICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRzdDMyKyspCisgICAgICAgICpkc3Qz
MiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjU2NShF
d2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKK3sKKyAgICB1aW50
MTZfdCAqZHN0MTYsICpkc3QxNl9lbmQsIGMxOworICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0
X2VuZCwgYzI7CisKKyAgICBjMSA9ICgoKChyID4+IDMpICYgMHgxZikgPDwgMTEpIHwKKyAgICAg
ICAgICAoKChnID4+IDIpICYgMHgzZikgPDwgNSkgfAorICAgICAgICAgICgoYiA+PiAzKSAmIDB4
MWYpKTsKKworICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwgKCh1aW50NjRfdCljMSA8
PCAzMikgfAorICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwgYzEpOworCisgICAgZHN0
NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHQt
PmJ5dGVzIC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCAr
PSA4KSB7CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25z
ICovCisgICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAgIGRzdDY0WzFdID0gYzI7CisgICAg
ICAgIGRzdDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNdID0gYzI7CisgICAgICAgIGRzdDY0
WzRdID0gYzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7CisgICAgICAgIGRzdDY0WzZdID0gYzI7
CisgICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisgICAgZHN0MTYgPSAodWludDE2X3Qg
Kilkc3QxNl9lbmQ7CisgICAgZHN0MTZfZW5kID0gKHVpbnQxNl90ICopKHQtPnBpeGVscyArIHQt
PmJ5dGVzKTsKKyAgICBmb3IgKDsgZHN0MTYgPCBkc3QxNl9lbmQ7IGRzdDE2KyspCisgICAgICAg
ICpkc3QxNiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3
a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQoreworICAgIGlmICh0
LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KQorICAgICAgICBfZXdrX3RpbGVf
cGFpbnRfcmdiODg4KHQsIHIsIGcsIGIpOworICAgIGVsc2UgaWYgKHQtPmNzcGFjZSA9PSBFVkFT
X0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkKKyAgICAgICAgX2V3a190aWxlX3BhaW50X3JnYjU2NSh0
LCByLCBnLCBiKTsKKyAgICBlbHNlCisgICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTog
JWQiLCB0LT5jc3BhY2UpOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyB0aWxlIG9mIGdpdmVu
IHNpemUsIHpvb20gbGV2ZWwgYW5kIGNvbG9yc3BhY2UuCisgKgorICogQWZ0ZXIgY3JlYXRlZCB0
aGVzZSBwcm9wZXJ0aWVzIGFyZSBpbW11dGFibGUgYXMgdGhleSdyZSB0aGUgYmFzaWMKKyAqIGNo
YXJhY3RlcmlzdGljIG9mIHRoZSB0aWxlIGFuZCBhbnkgY2hhbmdlIHdpbGwgbGVhZCB0byBpbnZh
bGlkCisgKiBtZW1vcnkgYWNjZXNzLgorICoKKyAqIE90aGVyIG1lbWJlcnMgYXJlIG9mIGZyZWUt
YWNjZXNzIGFuZCBubyBnZXR0ZXJzL3NldHRlcnMgYXJlCisgKiBwcm92aWRlZCBpbiBvcmRlcnIg
dG8gYXZvaWQgZXhwZW5zaXZlIG9wZXJhdGlvbnMgb24gdGhvc2UsIGhvd2V2ZXIKKyAqIHNvbWUg
YXJlIGJldHRlciBtYW5pcHVsYXRlZCB3aXRoIHByb3ZpZGVkIGZ1bmN0aW9ucywgc3VjaCBhcwor
ICogZXdrX3RpbGVfc2hvdygpIGFuZCBld2tfdGlsZV9oaWRlKCkgdG8gY2hhbmdlCisgKiBAYyB2
aXNpYmxlIG9yIGV3a190aWxlX3VwZGF0ZV9mdWxsKCksIGV3a190aWxlX3VwZGF0ZV9hcmVhKCks
CisgKiBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkgdG8gY2hhbmdlIEBjIHN0YXRzLm1pc3NlcywK
KyAqIEBjIHN0YXRzLmZ1bGxfdXBkYXRlIGFuZCBAYyB1cGRhdGVzLgorICovCitFd2tfVGlsZSAq
ZXdrX3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9h
dCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlKQoreworICAgIEV2YXNfQ29vcmQgKmVjOwor
ICAgIEV2YXNfQ29sb3JzcGFjZSAqZWNzOworICAgIGZsb2F0ICpmOworICAgIHNpemVfdCAqczsK
KyAgICBFd2tfVGlsZSAqdDsKKyAgICB1bnNpZ25lZCBpbnQgYXJlYTsKKyAgICBzaXplX3QgYnl0
ZXM7CisgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OworICAgIGNhaXJvX3N0YXR1c190IHN0YXR1
czsKKyAgICBpbnQgc3RyaWRlOworICAgIEVjb3JlX0V2YXMgKmVlOworICAgIGNvbnN0IGNoYXIg
KmVuZ2luZTsKKworICAgIGFyZWEgPSB3ICogaDsKKworICAgIGlmIChjc3BhY2UgPT0gRVZBU19D
T0xPUlNQQUNFX0FSR0I4ODg4KSB7CisgICAgICAgIGJ5dGVzID0gYXJlYSAqIDQ7CisgICAgICAg
IHN0cmlkZSA9IHcgKiA0OworICAgICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwor
ICAgIH0gZWxzZSBpZiAoY3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKSB7Cisg
ICAgICAgIGJ5dGVzID0gYXJlYSAqIDI7CisgICAgICAgIHN0cmlkZSA9IHcgKiAyOworICAgICAg
ICBmb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMTZfNTY1OworICAgIH0gZWxzZSB7CisgICAgICAg
IEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQiLCBjc3BhY2UpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBEQkcoInNpemU6ICVkeCVkICglZCksIHpvb206ICVmLCBjc3BhY2U9
JWQiLCB3LCBoLCBhcmVhLCAoZG91YmxlKXpvb20sIGNzcGFjZSk7CisKKyAgICB0ID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGUqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlKSkpOworICAgIGlmICghdCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0LT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2Fk
ZChldmFzKTsKKworICAgIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAg
ICBlbmdpbmUgPSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlZSk7CisgICAgaWYgKGVuZ2lu
ZSAmJiAhc3RyY21wKGVuZ2luZSwgIm9wZW5nbF94MTEiKSkKKyAgICAgICAgZXZhc19vYmplY3Rf
aW1hZ2VfY29udGVudF9oaW50X3NldCh0LT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRf
RFlOQU1JQyk7CisKKyAgICB0LT52aXNpYmxlID0gMDsKKyAgICB0LT51cGRhdGVzID0gMDsKKwor
ICAgIG1lbXNldCgmdC0+c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9TdGF0cykpOworICAgIHQt
PnN0YXRzLmFyZWEgPSBhcmVhOworCisgICAgLyogdWdseSwgYnV0IGxldCdzIGF2b2lkIGF0IGFs
bCBjb3N0cyBoYXZpbmcgdXNlcnMgdG8gbW9kaWZ5IHRob3NlICovCisgICAgZWMgPSAoRXZhc19D
b29yZCAqKSZ0LT53OworICAgICplYyA9IHc7CisKKyAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQt
Pmg7CisgICAgKmVjID0gaDsKKworICAgIGVjcyA9IChFdmFzX0NvbG9yc3BhY2UgKikmdC0+Y3Nw
YWNlOworICAgICplY3MgPSBjc3BhY2U7CisKKyAgICBmID0gKGZsb2F0ICopJnQtPnpvb207Cisg
ICAgKmYgPSB6b29tOworCisgICAgcyA9IChzaXplX3QgKikmdC0+Ynl0ZXM7CisgICAgKnMgPSBi
eXRlczsKKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHQtPmltYWdlLCB0LT53LCB0
LT5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0LT5pbWFnZSwgdC0+
Y3NwYWNlKTsKKyAgICB0LT5waXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZXZhc19vYmpl
Y3RfaW1hZ2VfZGF0YV9nZXQodC0+aW1hZ2UsIEVJTkFfVFJVRSkpOworICAgIHQtPnN1cmZhY2Ug
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0LT5waXhlbHMsIGZvcm1hdCwg
dywgaCwgc3RyaWRlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyh0LT5zdXJm
YWNlKTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAg
IEVSUigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsCisgICAgICAgICAgICBj
YWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOworICAgICAgICBmcmVlKHQpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJm
YWNlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8pOworICAgIGlmIChzdGF0
dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3Jl
YXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKHQtPmltYWdlKTsKKyAgICAgICAgZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOworCisgICAgcmV0dXJuIHQ7
Cit9CisKKy8qKgorICogRnJlZSB0aWxlIG1lbW9yeS4KKyAqLwordm9pZCBld2tfdGlsZV9mcmVl
KEV3a19UaWxlICp0KQoreworICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOworCisgICAg
aWYgKHQtPnVwZGF0ZXMpCisgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKwor
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKKyAgICBjYWlyb19kZXN0cm95
KHQtPmNhaXJvKTsKKyAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOworICAgIGZyZWUodCk7
Cit9CisKKy8qKgorICogTWFrZSB0aGUgdGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRzIGNv
dW50ZXIuCisgKi8KK3ZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSAqdCkKK3sKKyAgICB0LT52
aXNpYmxlKys7CisgICAgZXZhc19vYmplY3Rfc2hvdyh0LT5pbWFnZSk7Cit9CisKKy8qKgorICog
RGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBpbnZpc2libGUgaWYg
bmVjZXNzYXJ5LgorICovCit2b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpCit7CisgICAg
dC0+dmlzaWJsZS0tOworICAgIGlmICghdC0+dmlzaWJsZSkKKyAgICAgICAgZXZhc19vYmplY3Rf
aGlkZSh0LT5pbWFnZSk7Cit9CisKKy8qKgorICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhlIHRp
bGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tf
dGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKK3sKKyAgICByZXR1cm4gISF0LT52aXNpYmxl
OworfQorCisvKioKKyAqIE1hcmsgd2hvbGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5nIHVw
ZGF0ZS4KKyAqLwordm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKK3sKKyAg
ICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KKyAgICB0LT5zdGF0
cy5taXNzZXMrKzsKKworICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKKyAgICAgICAg
dC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CisgICAgICAgIGlmICh0LT51cGRhdGVz
KSB7CisgICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgICAg
ICB0LT51cGRhdGVzID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBNYXJrIHRo
ZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgorICovCit2
b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqcikKK3sKKyAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8K
KyAgICB0LT5zdGF0cy5taXNzZXMrKzsKKworICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncgPT0gdC0+
dyAmJiByLT5oID09IHQtPmgpIHsKKyAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5B
X1RSVUU7CisgICAgICAgIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAgICAgICBlaW5hX3RpbGVy
X2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgICAgICB0LT51cGRhdGVzID0gMDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF0LT51cGRhdGVzKSB7CisgICAg
ICAgIHQtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKKyAgICAgICAgaWYg
KCF0LT51cGRhdGVzKSB7CisgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSBl
aW5hX3RpbGVyICVkeCVkLiIsIHQtPncsIHQtPmgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRhdGVzLCByKTsK
K30KKworLyoqCisgKiBGb3IgZWFjaCB1cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUgZ2l2ZW4gZnVu
Y3Rpb24uCisgKgorICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcyBv
ciBjbGVhciB0aGUgcHJvY2Vzc2VkCisgKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVfdXBkYXRlc19j
bGVhcigpIGZvciB0aGF0LgorICovCit2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tf
VGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9S
ZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgaWYgKHQtPnN0YXRz
LmZ1bGxfdXBkYXRlKSB7CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7CisgICAgICAgIHIueCA9
IDA7CisgICAgICAgIHIueSA9IDA7CisgICAgICAgIHIudyA9IHQtPnc7CisgICAgICAgIHIuaCA9
IHQtPmg7CisjaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIHN0
cnVjdCB0aW1ldmFsIHRpbWV2OworICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0OworICAgICAg
ICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCAwKTsKKyAgICAgICAgcmVuZGVyX3N0YXJ0ID0gKGRvdWJs
ZSl0aW1ldi50dl9zZWMgKworICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8g
MTAwMDAwMCk7CisjZW5kaWYKKyAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0LCAmcik7CisjaWZk
ZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIGdldHRpbWVvZmRheSgm
dGltZXYsIDApOworICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9IChkb3VibGUpdGltZXYu
dHZfc2VjICsKKyAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDAp
IC0gcmVuZGVyX3N0YXJ0OworI2VuZGlmCisgICAgfSBlbHNlIGlmICh0LT51cGRhdGVzKSB7Cisg
ICAgICAgIEVpbmFfSXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHQtPnVw
ZGF0ZXMpOworICAgICAgICBFaW5hX1JlY3RhbmdsZSAqcjsKKyAgICAgICAgaWYgKCFpdHIpIHsK
KyAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVyIGl0ZXJhdG9yISIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEVJTkFfSVRFUkFUT1Jf
Rk9SRUFDSChpdHIsIHIpCisgICAgICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQsIHIpOworICAg
ICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKKyAgICB9Cit9CisKKy8qKgorICogQ2xlYXIg
YWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCisgKgorICogVGhpcyB3aWxsIGNoYW5nZSB0
aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1pc3NlcworICogYW5kIHVu
c2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0ZWQsIHRoZW4gaXQgd2ls
bCBiZQorICogZGVzdHJveWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxs
ZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKKyAqIGNhbGxlZC4KKyAqLwor
dm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQoreworICAgIC8qIFRPRE86
IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVzPyAqLworICAgIHQtPnN0YXRzLm1p
c3NlcyA9IDA7CisKKyAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHQtPnN0
YXRzLmZ1bGxfdXBkYXRlID0gMDsKKyAgICBlbHNlIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAg
IGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKyAgICAgICAgdC0+dXBkYXRlcyA9IDA7Cisg
ICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IEV3
a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKK3N0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5IHsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBpbnQgd2VpZ2h0OworICAgIHN0cnVj
dCB7CisgICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpOworICAgICAg
ICB2b2lkICpkYXRhOworICAgIH0gdGlsZV9mcmVlOworfTsKKworc3RydWN0IF9Fd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgeworICAgIHN0cnVjdCB7CisgICAgICAgIEVpbmFfTGlzdCAqbGlzdDsKKyAg
ICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICBzaXplX3QgYWxsb2NhdGVkOworICAgIH0gZW50
cmllczsKKyAgICBzdHJ1Y3QgeworICAgICAgICBzaXplX3QgbWF4OyAgLyoqPCB3YXRlcm1hcmsg
KGluIGJ5dGVzKSB0byBzdGFydCBmcmVlaW5nIHRpbGVzICovCisgICAgICAgIHNpemVfdCB1c2Vk
OyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3JlIHRoYW4gbWF4LiAqLworICAgIH0gbWVtb3J5Owor
ICAgIHN0cnVjdCB7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgZmxv
YXQgem9vbTsKKyAgICAgICAgRWluYV9Cb29sIGxvY2tlZDsKKyAgICB9IGxvY2tlZDsKKyAgICBp
bnQgcmVmZXJlbmNlczsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOworfTsKKworc3RhdGljIGNv
bnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9JTklUSUFMID0gMTI4Oworc3Rh
dGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9TVEVQID0gMTY7Citz
dGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01BWF9GUkVFID0gMzI7CisKKy8q
KgorICogQ2FjaGUgb2YgdW51c2VkIHRpbGVzICh0aG9zZSB0aGF0IGFyZSBub3QgdmlzaWJsZSku
CisgKgorICogVGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KKyAqCisgKiBAcGFyYW0gbWF4IGNh
Y2hlIHNpemUgaW4gYnl0ZXMuCisgKgorICogQHJldHVybiBuZXdseSBhbGxvY2F0ZWQgY2FjaGUg
b2YgdW51c2VkIHRpbGVzLCB1c2UKKyAqICAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Zy
ZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4gSWYgbm90CisgKiAgICAgICAgIHBvc3NpYmxlIHRv
IGFsbG9jYXRlIG1lbW9yeSwgQGMgMCBpcyByZXR1cm5lZC4KKyAqLworRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNpemVfdCBtYXgpCit7CisgICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisKKyAgICB0dWMgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZSkp
KTsKKyAgICBpZiAoIXR1YykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBEQkcoInR1Yz0lcCIs
IHR1Yyk7CisgICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OworICAgIHR1Yy0+cmVmZXJlbmNlcyA9
IDE7CisgICAgcmV0dXJuIHR1YzsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9j
a19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9
IEVJTkFfVFJVRTsKKyAgICB0dWMtPmxvY2tlZC54ID0geDsKKyAgICB0dWMtPmxvY2tlZC55ID0g
eTsKKyAgICB0dWMtPmxvY2tlZC53ID0gdzsKKyAgICB0dWMtPmxvY2tlZC5oID0gaDsKKyAgICB0
dWMtPmxvY2tlZC56b29tID0gem9vbTsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9IEVJTkFf
RkFMU0U7Cit9CisKKy8qKgorICogRnJlZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCisgKgorICog
VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb25seSBjYWxsZWQgYnkgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3VucmVmCisgKiBmdW5jdGlvbi4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY29u
c2lkZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nCisgKiBtYXkgbGVhZCB0byB1bmtub3duIHJlc3Vs
dHMuCisgKgorICogVGhvc2UgdGlsZXMgdGhhdCBhcmUgc3RpbGwgdmlzaWJsZSB3aWxsIHJlbWFp
biBsaXZlLiBUaGUgdW51c2VkCisgKiB0aWxlcyB3aWxsIGJlIGZyZWVkLgorICoKKyAqIEBzZWUg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBEQkcoInR1Yz0lcCwgIgorICAg
ICAgICAiZW50cmllcz0oY291bnQ6JXpkLCBhbGxvY2F0ZWQ6JXpkKSwgIgorICAgICAgICAibWVt
b3J5PShtYXg6JXpkLCB1c2VkOiV6ZCkiLAorICAgICAgICB0dWMsIHR1Yy0+ZW50cmllcy5jb3Vu
dCwgdHVjLT5lbnRyaWVzLmFsbG9jYXRlZCwKKyAgICAgICAgdHVjLT5tZW1vcnkubWF4LCB0dWMt
Pm1lbW9yeS51c2VkKTsKKworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOwor
ICAgIGZyZWUodHVjKTsKK30KKworLyoqCisgKiBDbGVhciBjYWNoZSBvZiB1bnVzZWQgdGlsZXMu
CisgKgorICogQW55IHRpbGVzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSBhcmUgZnJlZWQuIFRoZSBv
bmx5IHRpbGVzIHRoYXQgYXJlCisgKiBrZXB0IGFyZSB0aG9zZSB0aGF0IGFyZW4ndCBpbiB0aGUg
Y2FjaGUgKGkuZS4gdGhhdCBhcmUgdmlzaWJsZSkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogaXRlbTsKKyAgICBFSU5BX0xJU1RfRlJFRSh0
dWMtPmVudHJpZXMubGlzdCwgaXRlbSkgeworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVf
RW50cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0
ZW0pOworICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHIt
PnRpbGUpOworICAgICAgICBmcmVlKGl0cik7CisgICAgfQorCisgICAgdHVjLT5tZW1vcnkudXNl
ZCA9IDA7CisgICAgdHVjLT5lbnRyaWVzLmNvdW50ID0gMDsKK30KKworLyoqCisgKiBIb2xkIHJl
ZmVyZW5jZSB0byBjYWNoZS4KKyAqCisgKiBAcmV0dXJuIHNhbWUgcG9pbnRlciBhcyB0YWtlbi4K
KyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigpCisgKi8KK0V3a19UaWxl
X1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAw
KTsKKyAgICB0dWMtPnJlZmVyZW5jZXMrKzsKKyAgICByZXR1cm4gdHVjOworfQorCisvKioKKyAq
IFJlbGVhc2UgY2FjaGUgcmVmZXJlbmNlLCBmcmVlaW5nIGl0IGlmIGl0IGRyb3BzIHRvIHplcm8u
CisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKCkKKyAqIEBzZWUgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUoKQorICovCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91
bnJlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih0dWMpOworICAgIHR1Yy0+cmVmZXJlbmNlcy0tOworICAgIGlmICghdHVjLT5y
ZWZlcmVuY2VzKQorICAgICAgICBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUodHVjKTsKK30K
Kwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1Yywgc2l6ZV90IG1heCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOworICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKK30KKworc2l6ZV90IGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOworICAgIHJldHVybiB0
dWMtPm1lbW9yeS5tYXg7Cit9CisKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9n
ZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CisgICAgcmV0dXJuIHR1Yy0+bWVtb3J5LnVzZWQ7
Cit9CisKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMsIHNpemVfdCBieXRlcykKK3sKKyAgICBFaW5hX0xpc3QgKmwsICpsX25leHQ7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CisgICAgc2l6ZV90
IGRvbmU7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworCisgICAgaWYgKCF0dWMtPmVudHJpZXMu
Y291bnQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChieXRlcyA8IDEpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLyoKKyAgICAgKiBOT1RFOiB0aGUgY2FjaGUgaXMgYSBGSUZPIHF1ZXVl
IGN1cnJlbnRseS4KKyAgICAgKiBEb24ndCBuZWVkIHRvIHNvcnQgYW55IG1vcmUuCisgICAgICov
CisKKyAgICB2b2lkKiBpdGVtOworICAgIGRvbmUgPSAwOworICAgIGNvdW50ID0gMDsKKyAgICBF
SU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0ZW0p
IHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKKyAgICAgICAgRXdrX1RpbGUg
KnQgPSBpdHItPnRpbGU7CisgICAgICAgIGlmIChkb25lID4gYnl0ZXMpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKHR1Yy0+bG9ja2VkLmxvY2tlZAorICAgICAgICAgICAgJiYgdC0+
eCArIHQtPncgPiB0dWMtPmxvY2tlZC54CisgICAgICAgICAgICAmJiB0LT55ICsgdC0+aCA+IHR1
Yy0+bG9ja2VkLnkKKyAgICAgICAgICAgICYmIHQtPnggPCB0dWMtPmxvY2tlZC54ICsgdHVjLT5s
b2NrZWQudworICAgICAgICAgICAgJiYgdC0+eSA8IHR1Yy0+bG9ja2VkLnkgKyB0dWMtPmxvY2tl
ZC5oCisgICAgICAgICAgICAmJiB0LT56b29tID09IHR1Yy0+bG9ja2VkLnpvb20pIHsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRvbmUgKz0gc2l6ZW9mKEV3a19U
aWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7CisgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+
dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7CisgICAgICAgIHR1Yy0+ZW50cmllcy5saXN0ID0g
ZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBsKTsKKyAgICAgICAgZnJl
ZShpdHIpOworICAgICAgICBjb3VudCsrOworICAgIH0KKworICAgIHR1Yy0+bWVtb3J5LnVzZWQg
LT0gZG9uZTsKKyAgICB0dWMtPmVudHJpZXMuY291bnQgLT0gY291bnQ7CisKKyAgICByZXR1cm4g
ZG9uZTsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOworICAgIGlmICh0dWMtPm1lbW9yeS51c2VkIDw9IHR1Yy0+bWVtb3J5Lm1heCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCh0dWMsIHR1Yy0+bWVt
b3J5LnVzZWQgLSB0dWMtPm1lbW9yeS5tYXgpOworICAgIGlmICh0dWMtPm1lbW9yeS51c2VkID4g
dHVjLT5tZW1vcnkubWF4KQorICAgICAgICBDUklUSUNBTCgiQ2FjaGUgc3RpbGwgdXNpbmcgdG9v
IG11Y2ggbWVtb3J5OiAlemQgS0I7IG1heDogJXpkIEtCIiwKKyAgICAgICAgICAgICAgICAgdHVj
LT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4KTsKK30KKworLyoqCisgKiBGcmVlemUgY2Fj
aGUgdG8gbm90IGRvIG1haW50ZW5hbmNlIHRhc2tzLgorICoKKyAqIE1haW50ZW5hbmNlIHRhc2tz
IG9wdGltaXplIGNhY2hlIHVzYWdlLCBidXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91bGQKKyAqIGhv
bGQgb24gdGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3
ZSBmcmVlemUKKyAqIHdoaWxlIG9wZXJhdGluZyBhbmQgdGhlbiB0aGF3IHdoZW4gd2UncmUgZG9u
ZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KCkKKyAqLwordm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQor
eworICAgIHR1Yy0+ZnJvemVuKys7Cit9CisKKy8qKgorICogVW5mcmVlemVzIG1haW50ZW5hbmNl
IHRhc2tzLgorICoKKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXpl
LCB0aGVuIG1haW50ZW5hbmNlIHRhc2tzCisgKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KKyAqLwor
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKK3sKKyAgICBpZiAoIXR1Yy0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhhd2luZyBtb3Jl
IHRoYW4gZnJlZXppbmchIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0dWMtPmZy
b3plbi0tOworfQorCisvKioKKyAqIEdldCB0aWxlIGZyb20gY2FjaGUgb2YgdW51c2VkIHRpbGVz
LCByZW1vdmluZyBpdCBmcm9tIHRoZSBjYWNoZS4KKyAqCisgKiBJZiB0aGUgdGlsZSBpcyB1c2Vk
LCB0aGVuIGl0J3Mgbm90IGluIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgc28gaXQKKyAqIGlzIHJl
bW92ZWQgZnJvbSB0aGUgY2FjaGUgYW5kIG1heSBiZSBnaXZlbiBiYWNrIHdpdGgKKyAqIGV3a190
aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCgpLgorICoKKyAqIEBwYXJhbSB0dWMgY2FjaGUgb2Yg
dW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdCB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdr
X1RpbGVfVW51c2VkX0NhY2hlLgorICoKKyAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNz
LCAjRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0KQor
eworICAgIEVpbmFfTGlzdCAqZSwgKmw7CisKKyAgICB2b2lkKiBpdGVtOworICAgIGUgPSAwOwor
ICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7CisgICAg
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogZW50cnkgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKKyAgICAgICAgaWYgKGVudHJ5LT50aWxl
ID09IHQpIHsKKyAgICAgICAgICAgIGUgPSBsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKCFlKSB7CisgICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQg
aW4gY2FjaGUgJXAiLCB0LCB0dWMpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9
CisKKyAgICB0dWMtPmVudHJpZXMuY291bnQtLTsKKyAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNp
emVvZihFd2tfVGlsZSkgKyB0LT5ieXRlczsKKyAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFf
bGlzdF9yZW1vdmVfbGlzdCh0dWMtPmVudHJpZXMubGlzdCwgZSk7CisgICAgZnJlZShpdGVtKTsK
KworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKKy8qKgorICogUHV0IHRpbGUgaW50byBjYWNo
ZSBvZiB1bnVzZWQgdGlsZXMsIGFkZGluZyBpdCB0byB0aGUgY2FjaGUuCisgKgorICogVGhpcyBz
aG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdC0+dmlzaWJsZSBpcyBAYyAwIGFuZCBubyBvYmplY3Rz
IGFyZQorICogdXNpbmcgdGhlIHRpbGUgYW55bW9yZSwgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBi
ZSBleHBpcmVkIGFuZCBoYXZlCisgKiBpdHMgbWVtb3J5IHJlcGxhY2VkLgorICoKKyAqIE5vdGUg
dGhhdCB0aWxlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBpZiBjYWNoZSBpcyBmdWxs
LAorICogaW5zdGVhZCB0aGUgY2FjaGUgd2lsbCBoYXZlIG1vcmUgYnl0ZXMgdXNlZCB0aGFuIG1h
eGltdW0gYW5kIG9uZQorICogY2FuIGNhbGwgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2goKSB0byBmcmVlIHRoZW0uIFRoaXMgaXMgZG9uZQorICogYmVjYXVzZSB1c3VhbGx5IHdlIHdh
bnQgYSBsYXp5IG9wZXJhdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICoKKyAqIEBwYXJh
bSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdCB0aWxlIHRvIGJlIGFkZGVk
IHRvIGNhY2hlLgorICogQHBhcmFtIHRpbGVfZnJlZV9jYiBmdW5jdGlvbiB1c2VkIHRvIGZyZWUg
dGlsZXMuCisgKiBAcGFyYW0gZGF0YSBjb250ZXh0IHRvIGdpdmUgYmFjayB0byBAYSB0aWxlX2Zy
ZWVfY2IgYXMgZmlyc3QgYXJndW1lbnQuCisgKgorICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1
Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lzZS4gSWYgQGMgdC0+dmlzaWJsZQorICogICAgICAg
ICBpcyBub3QgI0VJTkFfRkFMU0UsIHRoZW4gaXQgd2lsbCByZXR1cm4gI0VJTkFfRkFMU0UuCisg
KgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpCisgKi8KK0VpbmFf
Qm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMsIEV3a19UaWxlICp0LCB2b2lkICgqdGlsZV9mcmVlX2NiKSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5ICplOworCisgICAgaWYgKHQtPnZpc2libGUpIHsKKyAgICAgICAgRVJSKCJ0aWxlPSVw
IGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwgdCwgdC0+dmlzaWJsZSk7CisgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9F
bnRyeSkpKTsKKyAgICBpZiAoIWUpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAg
dHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBl
KTsKKyAgICBpZiAoZWluYV9lcnJvcl9nZXQoKSkgeworICAgICAgICBFUlIoIkxpc3QgYWxsb2Nh
dGlvbiBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAg
ZS0+dGlsZSA9IHQ7CisgICAgZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9y
ZSBzb3J0ICovCisgICAgZS0+dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOworICAgIGUtPnRp
bGVfZnJlZS5kYXRhID0gKHZvaWQgKilkYXRhOworCisgICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7
CisgICAgdHVjLT5tZW1vcnkudXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7CisK
KyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9k
YmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgdm9pZCogaXRlbTsK
KyAgICBFaW5hX0xpc3QgKmw7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBwcmludGYoIkNhY2hl
IG9mIHVudXNlZCB0aWxlczogZW50cmllczogJXp1LyV6dSwgbWVtb3J5OiAlenUvJXp1XG4iLAor
ICAgICAgICAgICB0dWMtPmVudHJpZXMuY291bnQsIHR1Yy0+ZW50cmllcy5hbGxvY2F0ZWQsCisg
ICAgICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+bWVtb3J5Lm1heCk7CisKKyAgICBFSU5B
X0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgICAgICBjb25z
dCBFd2tfVGlsZSAqdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+
KGl0ZW0pLT50aWxlOworICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4z
Zl0lYyIsCisgICAgICAgICAgICAgICB0LT5jb2wsIHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9v
bSwKKyAgICAgICAgICAgICAgIHQtPnZpc2libGUgPyAnKic6ICcgJyk7CisKKyAgICAgICAgaWYg
KCEoY291bnQgJSA0KSkKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgICBw
cmludGYoIlxuIik7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109000</attachid>
            <date>2011-09-28 04:09:41 -0700</date>
            <delta_ts>2011-09-28 20:42:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68599-20110928200940.patch</filename>
            <type>text/plain</type>
            <size>219181</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYxNjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
aW5kZXggZjlkYjM1Yzk0MzE3MjUzOTJiMWNjNjcxMThmNDUxZjJiNWFkNGU2OS4uNzZkY2RkOTdh
YmRiMzNjZTcxZjc3NTU5MDUyY2RiYjhkODgxZDAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKQEAgLTc0LDkgKzc0LDkgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBlZmwvZXdrL2V3a19uZXR3b3JrLmNwcAogICAgIGVmbC9ld2svZXdrX3NldHRpbmdzLmNwcAog
ICAgIGVmbC9ld2svZXdrX3Byb3RvY29sX2hhbmRsZXIuY3BwCi0gICAgZWZsL2V3ay9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZS5jCi0gICAgZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKLSAgICBl
ZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZS5jcHAKKyAgICBlZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCisgICAgZWZsL2V3ay9l
d2tfdGlsZWRfbW9kZWwuY3BwCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAgICBlZmwvZXdr
L2V3a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCmluZGV4IGZlMWI5MDI4YjNjNTRlNGE4YWY2NGY1YzY2OGRkYzFjMTJkZWJhNzkuLmIwNzc2
ZjAwZWFjY2JlNWVjMTMxODQ5ZjFmOWVlYWYwZmFjNThhYmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMS0wOS0yNyAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0VGTF0gUmVuYW1lIGV3a190aWxlZF8qLmMgdG8gZXdrX3RpbGVk
XyouY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODU5OQorCisgICAgICAgIFVzZSBhIEMrKyBjb21waWxlciBmb3IgdGhlc2UgZmlsZXMgYW5kIGZp
eCBjb21waWxlIGlzc3VlcyBhbmQgY29kaW5nIHN0eWxlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jLgorICAgICAgICAqIGV3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbWF0cml4
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4
LmMuCisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2RlbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMuCisKIDIwMTEtMDktMjcgIFJhcGhh
ZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgW0VGTF0g
TWFrZSBld2tfdmlldyBlbWl0IHRoZSAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgc2lnbmFsLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
LmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZhOTlmOGFiZWI0ZGViMzRmZjg5ZjgzMGM2Nzhk
ZWU2ZGYyY2Q1Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuYworKysgL2Rl
di9udWxsCkBAIC0xLDE5MTggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAx
MCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKLQotI2RlZmluZSBfR05VX1NPVVJDRQotI2luY2x1
ZGUgImV3a190aWxlZF9wcml2YXRlLmgiCi0jaW5jbHVkZSA8RWNvcmUuaD4KLSNpbmNsdWRlIDxF
aW5hLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8
c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotCi0jZGVmaW5lIElEWChjb2wsIHJvdywgcm93c3BhbikgKGNvbCAr
IChyb3cgKiByb3dzcGFuKSkKLQotI2lmICFkZWZpbmVkKE1JTikKLSMgZGVmaW5lIE1JTihhLCBi
KSAoKGEgPCBiKSA/IGEgOiBiKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChNQVgpCi0jIGRlZmlu
ZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKLSNlbmRpZgotCi10eXBlZGVmIGVudW0gX0V3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eTsKLXR5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGE7Ci10eXBlZGVm
IHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtOwotdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9S
ZW5kZXJfUmVxdWVzdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Q7
Ci0KLWVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgewot
ICAgIFBSRV9SRU5ERVJfUFJJT1JJVFlfTE9XID0gMCwgLyoqPCBBcHBlbmQgdGhlIHJlcXVlc3Qg
dG8gdGhlIGxpc3QgKi8KLSAgICBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0ggICAgIC8qKjwgUHJl
cGVuZCB0aGUgcmVxdWVzdCB0byB0aGUgbGlzdCAqLwotfTsKLQotc3RydWN0IF9Fd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtIHsKLSAgICBFSU5BX0lOTElTVDsKLSAgICBFd2tfVGlsZSAqdGls
ZTsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0gICAgfSBn
ZW9tZXRyeTsKLSAgICBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlOwotfTsKLQotc3RydWN0IF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgewotICAgIEVJTkFfSU5MSVNU
OwotICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Ci0gICAgZmxvYXQgem9vbTsKLX07Ci0KLXN0
cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSB7Ci0gICAgRXZhc19PYmplY3RfU21h
cnRfQ2xpcHBlZF9EYXRhIGJhc2U7Ci0gICAgRXZhc19PYmplY3QgKnNlbGY7Ci0gICAgRXZhc19P
YmplY3QgKmNvbnRlbnRzX2NsaXBwZXI7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Jbmxp
c3QgKippdGVtczsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwotICAgICAgICBsb25n
IGNvbHMsIHJvd3M7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBFdmFzX0Nvb3JkIHcs
IGg7Ci0gICAgICAgICAgICBmbG9hdCB6b29tOwotICAgICAgICAgICAgRWluYV9Cb29sIHpvb21f
d2Vha19zbW9vdGhfc2NhbGU6MTsKLSAgICAgICAgfSB0aWxlOwotICAgICAgICBzdHJ1Y3Qgewot
ICAgICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0g
ICAgICAgICAgICB9IGN1ciwgb2xkLCBiYXNlLCB6b29tX2NlbnRlcjsKLSAgICAgICAgfSBvZmZz
ZXQ7Ci0gICAgfSB2aWV3OwotICAgIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7Ci0gICAgc3RydWN0
IHsKLSAgICAgICAgRXdrX1RpbGVfTWF0cml4ICptYXRyaXg7Ci0gICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgICAgICB9IGJhc2U7Ci0gICAg
ICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7Ci0gICAg
ICAgIH0gY3VyLCBvbGQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKLSAgICB9
IG1vZGVsOwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRh
LCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOwotICAgICAgICB2b2lk
ICpkYXRhOwotICAgICAgICBFaW5hX0lubGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAgICAg
ICAgRWNvcmVfSWRsZXIgKmlkbGVyOwotICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7Ci0gICAg
ICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7Ci0gICAgfSByZW5kZXI7Ci0gICAgc3RydWN0IHsKLSAg
ICAgICAgdm9pZCAqKCpwcmVfY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAg
ICAgdm9pZCAqcHJlX2RhdGE7Ci0gICAgICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwg
dm9pZCAqcHJlX2RhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAgICAgdm9pZCAqcG9zdF9kYXRh
OwotICAgIH0gcHJvY2VzczsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgYW55OjE7
Ci0gICAgICAgIEVpbmFfQm9vbCBwb3M6MTsKLSAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKLSAg
ICAgICAgRWluYV9Cb29sIG1vZGVsOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKLSAg
ICB9IGNoYW5nZWQ7Ci0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgRWNvcmVfRXZlbnRfSGFu
ZGxlciAqc2lnX3VzcjsKLSNlbmRpZgotfTsKLQotc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3Bh
cmVudF9zYyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwotaW50IF9ld2tfdGlsZWRfbG9n
X2RvbSA9IC0xOwotCi0jZGVmaW5lIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAu
Li4pICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHRyID0gZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQob2JqKTsgXAotICAgIGlmICgh
cHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBDUklUSUNBTCgibm8gcHJpdmF0ZSBkYXRhIGluIG9iaj0lcCIsIG9iaik7
ICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLQotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpOwotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKLQotc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICB2b2lkICpkYXRhID0gTlVMTDsKLQotICAgIC8q
IERvIG5vdCBwcm9jZXNzIHVwZGF0ZXMuIE5vdGUgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGdldCB1
cGRhdGVzIHJlcXVlc3RzCi0gICAgICogaW4gdGhlIHF1ZXVlIGluIG9yZGVyIHRvIG5vdCBtaXNz
IGFueSB1cGRhdGVzIGFmdGVyIHRoZSByZW5kZXIgaXMKLSAgICAgKiByZXN1bWVkLgotICAgICAq
LwotICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9n
ZXQocHJpdi0+c2VsZikpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcml2LT5wcm9jZXNz
LnByZV9jYikKLSAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nl
c3MucHJlX2RhdGEsIHByaXYtPnNlbGYpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNf
cHJvY2Vzcyhwcml2LT5tb2RlbC5tYXRyaXgpOwotCi0gICAgaWYgKHByaXYtPnByb2Nlc3MucG9z
dF9jYikKLSAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9k
YXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKLX0KLQotc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmx1c2godm9pZCAqZGF0YSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2ID0gZGF0YTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAg
ICBpZiAodHVjKSB7Ci0gICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7Ci0g
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIEVSUigibm8gY2FjaGU/ISIpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp
YyBFd2tfVGlsZSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25n
IHJvdywgZmxvYXQgem9vbSkKLXsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFdmFzICpldmFzID0g
ZXZhc19vYmplY3RfZXZhc19nZXQocHJpdi0+c2VsZik7Ci0gICAgaWYgKCFldmFzKSB7Ci0gICAg
ICAgIENSSVRJQ0FMKCJldmFzX29iamVjdF9ldmFzX2dldCBmYWlsZWQhIik7Ci0gICAgICAgIHJl
dHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcKLSAg
ICAgICAgKHByaXYtPm1vZGVsLm1hdHJpeCwgZXZhcywgY29sLCByb3csIHpvb20pOwotCi0gICAg
aWYgKCF0KSB7Ci0gICAgICAgIENSSVRJQ0FMKCJld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcgZmFp
bGVkISIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17
Ci0gICAgaXQtPmdlb21ldHJ5LnggPSB4OwotICAgIGl0LT5nZW9tZXRyeS55ID0geTsKLQotICAg
IGlmIChpdC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2Us
IHgsIHkpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9y
ZXNpemUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoKQotewotICAgIGl0LT5nZW9tZXRyeS53ID0gdzsKLSAgICBpdC0+Z2VvbWV0cnku
aCA9IGg7Ci0KLSAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXpl
KGl0LT50aWxlLT5pbWFnZSwgdywgaCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxf
c2V0KGl0LT50aWxlLT5pbWFnZSwgMCwgMCwgdywgaCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGUgKnQsIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0KQotewotICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgQ1JJVElDQUwoIml0LT50
aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIE5VTEwhIiwgaXQtPnRpbGUpOwotICAgIGl0LT50aWxl
ID0gdDsKLSAgICBldmFzX29iamVjdF9tb3ZlKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5
LngsIGl0LT5nZW9tZXRyeS55KTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmlt
YWdlLCBpdC0+Z2VvbWV0cnkudywgaXQtPmdlb21ldHJ5LmgpOwotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX2ZpbGxfc2V0Ci0gICAgICAgIChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRy
eS53LCBpdC0+Z2VvbWV0cnkuaCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxl
X3NldChpdC0+dGlsZS0+aW1hZ2UsIGl0LT5zbW9vdGhfc2NhbGUpOwotCi0gICAgaWYgKCFld2tf
dGlsZV92aXNpYmxlX2dldCh0KSkKLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Fk
ZCh0LT5pbWFnZSwgcHJpdi0+c2VsZik7Ci0KLSAgICBld2tfdGlsZV9zaG93KHQpOwotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0gKml0LCBkb3VibGUgbGFzdF91c2VkKQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjOwotICAgIGV3a190aWxlX2hpZGUoaXQtPnRpbGUpOwotICAgIGlmICghZXdrX3RpbGVfdmlz
aWJsZV9nZXQoaXQtPnRpbGUpKQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVs
KGl0LT50aWxlLT5pbWFnZSk7Ci0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1v
ZGVsLm1hdHJpeCwgaXQtPnRpbGUsIGxhc3RfdXNlZCk7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwotCi0gICAgaXQtPnRpbGUgPSBOVUxMOwotfQot
Ci1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2Fs
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIEVpbmFfSW5saXN0
ICppdDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdGVtOwotICAgIGludCBp
OwotICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICBm
b3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKLSAgICAgICAgaXQgPSBwcml2
LT52aWV3Lml0ZW1zW2ldOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQot
ICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOwotICAg
IH0KLX0KLQotc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tLCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHByaW9yaXR5KQotewotICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKLQotICAgIE1B
TExPQ19PUl9PT01fUkVUKHIsIHNpemVvZigqciksIEVJTkFfRkFMU0UpOwotCi0gICAgaWYgKHBy
aW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKLSAgICAgICAgcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCi0gICAgICAgICAgICAo
cHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7Ci0g
ICAgZWxzZQotICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFf
aW5saXN0X2FwcGVuZAotICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwotCi0gICAgci0+Y29sID0gY29sOwotICAgIHItPnJv
dyA9IHJvdzsKLSAgICByLT56b29tID0gem9vbTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCi17Ci0gICAgcHJpdi0+cmVu
ZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUKLSAgICAgICAgKHBy
aXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwotICAg
IGZyZWUocik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0g
ICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCi0gICAgICAgIHByaXYtPnJlbmRl
ci5wcmVfcmVuZGVyX3JlcXVlc3RzLAotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3Jl
bmRlcl9yZXF1ZXN0czsKLSAgICB3aGlsZSAoKnBsKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKLSAgICAgICAgciA9IF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7Ci0gICAgICAgICpw
bCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7Ci0gICAgICAgIGZyZWUocik7Ci0gICAg
fQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9y
ZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAg
RWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAg
ICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKLSAgICB3aGlsZSAoaXRlcikgewotICAg
ICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIgPQotICAg
ICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKLSAgICAgICAgICAgICAgICBpdGVy
LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwotICAgICAgICB0
bXAgPSBpdGVyLT5uZXh0OwotICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCBp
dGVyKTsKLSAgICAgICAgaXRlciA9IHRtcDsKLSAgICAgICAgZnJlZShyKTsKLSAgICB9Ci19Ci0K
LS8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEg
Ki8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnJlcTsKLSAg
ICBFaW5hX1JlY3RhbmdsZSBhcmVhOwotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBwcml2LT5t
b2RlbC5tYXRyaXg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWM7Ci0gICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKLSAgICBmbG9hdCB6b29tOwotICAg
IGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICByZXEgPSBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwot
ICAgIGlmICghcmVxKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjb2wgPSByZXEtPmNvbDsKLSAg
ICByb3cgPSByZXEtPnJvdzsKLSAgICB6b29tID0gcmVxLT56b29tOwotCi0gICAgaWYgKGV3a190
aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpvb20pKSB7Ci0gICAg
ICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwg
Y29sLCByb3csIHpvb20pOwotICAgICAgICBnb3RvIGVuZDsKLSAgICB9Ci0KLSAgICB0ID0gX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93LCB6b29tKTsKLSAg
ICBpZiAoIXQpCi0gICAgICAgIGdvdG8gZW5kOwotCi0gICAgYXJlYS54ID0gMDsKLSAgICBhcmVh
LnkgPSAwOwotICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIGFyZWEuaCA9IHBy
aXYtPnZpZXcudGlsZS5oOwotCi0gICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRh
LCB0LCAmYXJlYSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKAotICAg
ICAgICB0LT5pbWFnZSwKLSAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywgYXJlYS5oKTsK
LSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0KTsKLQotICAgIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKLQotZW5kOgotICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHByaXYsIHJlcSk7
Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwotfQot
Ci1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3Nf
aWRsZXJfY2Iodm9pZCAqZGF0YSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2ID0gZGF0YTsKLQotICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKLSAgICAgICAg
ZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEsIHByaXYt
PnNlbGYpOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9wcm9jZXNzX3NpbmdsZShwcml2KTsKLQotICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RfY2Ip
Ci0gICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSwg
ZGF0YSwgcHJpdi0+c2VsZik7Ci0KLSAgICBpZiAoIXByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3Jl
cXVlc3RzKSB7Ci0gICAgICAgIHByaXYtPnJlbmRlci5pZGxlciA9IE5VTEw7Ci0gICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0b3AoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAo
IXByaXYtPnJlbmRlci5pZGxlcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZWNvcmVfaWRsZXJf
ZGVsKHByaXYtPnJlbmRlci5pZGxlcik7Ci0gICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gTlVMTDsK
LX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3By
b2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBpZiAocHJpdi0+cmVuZGVyLmlkbGVyKQotICAgICAgICByZXR1cm47Ci0gICAgcHJpdi0+
cmVuZGVyLmlkbGVyID0gZWNvcmVfaWRsZXJfYWRkKAotICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiLCBwcml2KTsKLX0KLQotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAocHJpdi0+cmVuZGVyLnN1c3BlbmQp
Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfVFJVRTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0b3AocHJpdik7Ci0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQp
Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfRkFMU0U7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxl
cl9zdGFydChwcml2KTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKLXsKLSAgICB1bnNpZ25l
ZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBjb2w7Ci0gICAgdW5zaWduZWQg
bG9uZyBtX3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OwotICAgIGRvdWJsZSBsYXN0
X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0KLSAgICBpZiAobV9jb2wgPj0gcHJpdi0+
bW9kZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJpdi0+bW9kZWwuY3VyLnJvd3MpIHsKLSAgICAg
ICAgaWYgKGl0LT50aWxlKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBFd2tfVGlsZSAqdDsKLSAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYtPnZpZXcudGls
ZS56b29tOwotCi0gICAgICAgIGlmIChpdC0+dGlsZSkgewotICAgICAgICAgICAgRXdrX1RpbGUg
Km9sZCA9IGl0LT50aWxlOwotICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9s
ZC0+Y29sICE9IG1fY29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQotICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNl
ZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChvbGQtPnJvdyA9PSBtX3JvdyAmJiBvbGQtPmNvbCA9
PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0gem9vbSkKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsK
LSAgICAgICAgfQotCi0gICAgICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQo
cHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOwotCi0gICAgICAgIGlmICgh
dCkgewotICAgICAgICAgICAgLyogTk9URTogaXQgbmV2ZXIgcmV0dXJucyBOVUxMIGlmIGl0LT50
aWxlIHdhcyBzZXQhICovCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAgICAgICAg
ICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgTlVMTCEiLCBpdC0+
dGlsZSk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZShwcml2LCBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8KLSAg
ICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKLSAgICAgICAgICAgICAgICB0
ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jvdywg
em9vbSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0KQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKHQgIT0gaXQtPnRpbGUpIHsKLSAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKLSAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXQsIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOwotICAgICAgICB9Ci0KLSAgICAgIGVuZDoK
LQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RS
VUU7Ci19Ci0KLXN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQotewotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRoOwot
Ci0gICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChp
dCwgc2l6ZW9mKCppdCksIE5VTEwpOwotCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAg
ICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggKyBwcml2LT52aWV3LnggKyB0dyAgKmNvbDsKLSAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICsgcHJpdi0+dmlldy55ICsgdGggICpyb3c7Ci0KLSAgICBpdC0+dGlsZSA9IE5VTEw7
Ci0KLSAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9v
dGhfc2NhbGU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgeCwg
eSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgp
OwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwg
Y29sLCByb3cpKSB7Ci0gICAgICAgIGZyZWUoaXQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gaXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkKLXsKLSAgICBpZiAoaXQtPnRpbGUpIHsKLSAg
ICAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKLSAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91
c2VkKTsKLSAgICB9Ci0KLSAgICBmcmVlKGl0KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKLXsKLSAgICBpZiAoaXQtPnNt
b290aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChp
dC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+
dGlsZS0+aW1hZ2UsIHNtb290aF9zY2FsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KQotewotICAgIGlmIChwcml2LT5jaGFuZ2VkLmFueSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5nZWQocHJpdi0+c2VsZik7Ci0gICAgcHJpdi0+Y2hh
bmdlZC5hbnkgPSBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0gICAgRWlu
YV9Jbmxpc3QgKm47Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0KLSAgICBpZiAoIWNvdW50KQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBuID0gKCpwX3JvdyktPmxhc3Q7Ci0KLSAgICBmb3IgKGkgPSAw
OyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdDsKLSAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICBuID0gbi0+cHJldjsKLSAgICAgICAgKnBf
cm93ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7Ci0g
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7Ci0gICAg
fQotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlz
dCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkKLXsK
LSAgICB1bnNpZ25lZCBpbnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKLQotICAg
IGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7Ci0gICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotCi0gICAgICAgIGl0ID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKLSAgICAgICAgaWYgKCFp
dCkgewotICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1
IGluIHJvdyAldS4iLCBpLCBjb3VudCwgcik7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOwotICAgICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICAgIH0KLQotICAgICAgICAqcF9yb3cgPSBlaW5hX2lu
bGlzdF9hcHBlbmQoKnBfcm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIEVJTkFfVFJVRTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfcm93X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lu
bGlzdCAqcm93KQotewotICAgIHdoaWxlIChyb3cpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICByb3cgPSByb3ct
Pm5leHQ7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBp
dCk7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5h
X0lubGlzdCAqKnN0YXJ0LCBFaW5hX0lubGlzdCAqKmVuZCkKLXsKLSAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cm93X2RlbChwcml2LCAqc3RhcnQpOwotICAgICAgICAqc3RhcnQgPSBOVUxMOwotICAgIH0KLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3Qg
KipzdGFydDsKLSAgICBFaW5hX0lubGlzdCAqKmVuZDsKLQotICAgIHN0YXJ0ID0gcHJpdi0+dmll
dy5pdGVtczsKLSAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOwot
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0
YXJ0LCBlbmQpOwotCi0gICAgZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKLSAgICBwcml2LT52aWV3
Lml0ZW1zID0gTlVMTDsKLSAgICBwcml2LT52aWV3LmNvbHMgPSAwOwotICAgIHByaXYtPnZpZXcu
cm93cyA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5k
ZXIodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQot
ewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSBkYXRhOwotCi0gICAg
SU5GKCJUT0RPICVwICh2aXNpYmxlPyAlZCkgWyVsdSwlbHVdICVkLCVkICsgJWR4JWQiLAotICAg
ICAgICB0LCB0LT52aXNpYmxlLCB0LT5jb2wsIHQtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJl
YS0+dywgYXJlYS0+aCk7Ci0KLSAgICBpZiAoIXQtPnZpc2libGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChwcml2LT52aWV3LnRpbGUudyAhPSB0LT53IHx8IHByaXYtPnZpZXcudGlsZS5o
ICE9IHQtPmgpCi0gICAgICAgIHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24n
dCBldmVuIGZsYWcgYXMgZGlydHkhCi0KLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihw
cml2LT5yZW5kZXIuY2IpOwotICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5k
YXRhLCB0LCBhcmVhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
ZGF0YV91cGRhdGVfYWRkKHQtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVh
LT5oKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9t
b2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgp
IHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHBy
aXYpOwotCi0gICAgICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9GQUxTRTsKLSAgICAg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwotCi0gICAgICAgIGV3a190aWxlX21h
dHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgfQotCi0gICAgcHJpdi0+bW9kZWwu
bWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0dWMsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBw
cml2LT5tb2RlbC5jdXIucm93cywgcHJpdi0+Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcmVuZGVyLCBwcml2KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICptZW1iZXIp
Ci17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgaWYgKCFwcml2
LT5jb250ZW50c19jbGlwcGVyKQotICAgICAgICByZXR1cm47Ci0gICAgZXZhc19vYmplY3RfY2xp
cF91bnNldChtZW1iZXIpOwotICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+
Y29udGVudHNfY2xpcHBlcikpCi0gICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVu
dHNfY2xpcHBlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQotewot
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIGlmICghcHJpdi0+Y29u
dGVudHNfY2xpcHBlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0
KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgaWYgKGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KG8pKQotICAgICAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIpOwotfQotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1zdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2KQotewotICAgIHN0YXRpYyBpbnQgcnVuID0gMDsKLQotICAgIHJ1bisrOwotCi0gICAgcHJp
bnRmKCJcbi0tLSBCRUdJTiBERUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0t
XG4iCi0gICAgICAgICAgICJ0PSUwLjJmLCBvYmo9JXAsIHByaXY9JXAsIHZpZXcuaXRlbXM9JXAs
IG1hdHJpeD0lcFxuIiwKLSAgICAgICAgICAgcnVuLCBlY29yZV9sb29wX3RpbWVfZ2V0KCksCi0g
ICAgICAgICAgIHByaXYtPnNlbGYsIHByaXYsIHByaXYtPnZpZXcuaXRlbXMsIHByaXYtPm1vZGVs
Lm1hdHJpeCk7Ci0KLSAgICBld2tfdGlsZV9tYXRyaXhfZGJnKHByaXYtPm1vZGVsLm1hdHJpeCk7
Ci0gICAgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcoKTsKLQotICAgIHByaW50ZigiLS0tIEVORCBE
RUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0tXG5cbiIsIHJ1bik7Ci19Ci0K
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCAq
ZGF0YSwgaW50IHR5cGUsIHZvaWQgKmV2ZW50KQotewotICAgIEVjb3JlX0V2ZW50X1NpZ25hbF9V
c2VyICpzaWcgPSAoRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50OwotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSopZGF0YTsKLQotICAgIGlmIChzaWctPm51bWJlciA9PSAyKSB7Ci0gICAgICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOwotICAgICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2Vk
X2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgICAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfYXV0b19mbHVzaCh0dWMpOwotICAgIH0KLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2RiZyhwcml2KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2Ri
Zyhwcml2KTsKLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCi17Ci0g
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdjsKLQotICAgIERCRygibz0lcCIs
IG8pOwotCi0gICAgQ0FMTE9DX09SX09PTV9SRVQocHJpdiwgc2l6ZW9mKCpwcml2KSk7Ci0KLSAg
ICBwcml2LT5zZWxmID0gbzsKLSAgICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEuMDsKLSAgICBw
cml2LT52aWV3LnRpbGUudyA9IERFRkFVTFRfVElMRV9XOwotICAgIHByaXYtPnZpZXcudGlsZS5o
ID0gREVGQVVMVF9USUxFX0g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwotICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSAwOwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKLQot
ICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IDA7Ci0gICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5y
b3dzID0gMTsKLSAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwu
b2xkLnJvd3MgPSAwOwotICAgIHByaXYtPm1vZGVsLndpZHRoID0gMDsKLSAgICBwcml2LT5tb2Rl
bC5oZWlnaHQgPSAwOwotICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKLSAg
ICBwcml2LT5jc3BhY2UgPSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVj
dCBpdC4KLQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHByaXYpOwotICAgIF9w
YXJlbnRfc2MuYWRkKG8pOwotCi0gICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2Jq
ZWN0X3JlY3RhbmdsZV9hZGQoCi0gICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pKTsKLSAg
ICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOwotICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICAgICAgICAg
ICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKLSAgICBldmFz
X29iamVjdF9jb2xvcl9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwg
MjU1KTsKLSAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbyk7
Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2
LCBOVUxMKTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7
Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7Ci0gICAg
ZXZhc19vYmplY3RfY2xpcF9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5j
bGlwcGVyKTsKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHByaXYtPnNpZ191c3IgPSBl
Y29yZV9ldmVudF9oYW5kbGVyX2FkZAotICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIs
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyLCBwcml2KTsKLSNlbmRpZgotfQotCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0
ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIERCRygi
bz0lcCIsIG8pOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOwotCi0gICAgdHVjID0g
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKLQotICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9mbHVzaChwcml2KTsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKHByaXYpOwotICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChwcml2KTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOwotICAg
IGlmIChwcml2LT5zaWdfdXNyKQotICAgICAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRf
aGFuZGxlcl9kZWwocHJpdi0+c2lnX3Vzcik7Ci0jZW5kaWYKLQotICAgIGV3a190aWxlX21hdHJp
eF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2RlbChwcml2LT5jb250ZW50c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9kZWwocHJpdi0+
Y29udGVudHNfY2xpcHBlcik7Ci0KLSAgICBfcGFyZW50X3NjLmRlbChvKTsKLQotI2lmZGVmIERF
QlVHX01FTV9MRUFLUwotICAgIHByaW50ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RP
UkUgREVMRVRFRCAobWF5IGJlIHJlYWwgbGVha3MpXG4iKTsKLSAgICBld2tfdGlsZV9hY2NvdW50
aW5nX2RiZygpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQg
eSkKLXsKLSAgICBEQkcoIm89JXAsIG5ldyBwb3M6ICVkeCVkIiwgbywgeCwgeSk7Ci0KLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQotICAgIGlmIChwcml2LT5jaGFuZ2Vk
LnBvcykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHBy
aXYtPnZpZXcueSA9PSB5KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5jaGFuZ2VkLnBv
cyA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6
ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCi17Ci0gICAgREJH
KCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBvLCB3LCBoKTsKLQotICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKHByaXYtPnZpZXcudyA9PSB3ICYmIHByaXYtPnZpZXcuaCA9
PSBoKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RS
VUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Ci19Ci0KLXN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBo
LCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nvb3JkIHRoKQotewotICAgIGxvbmcgY29scywgcm93cywg
b2xkX3Jvd3MsIG9sZF9jb2xzOwotICAgIElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJp
di0+c2VsZiwgdywgaCk7Ci0KLSAgICBjb2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChm
bG9hdCl0dyk7Ci0gICAgcm93cyA9IDEgKyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgp
OwotCi0gICAgSU5GKCJvPSVwIG5ldyBncmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQsIHdh
cyAlbGQsICVsZCIsCi0gICAgICAgIHByaXYtPnNlbGYsIGNvbHMsIHJvd3MsIHByaXYtPnZpZXcu
Y29scywgcHJpdi0+dmlldy5yb3dzKTsKLQotICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29s
cyAmJiBwcml2LT52aWV3LnJvd3MgPT0gcm93cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgb2xk
X2NvbHMgPSBwcml2LT52aWV3LmNvbHM7Ci0gICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7
Ci0KLSAgICBpZiAocm93cyA8IG9sZF9yb3dzKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqc3Rh
cnQsICoqZW5kOwotICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAg
ICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7Ci0gICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOwot
ICAgIH0KLSAgICBSRUFMTE9DX09SX09PTV9SRVQocHJpdi0+dmlldy5pdGVtcywgc2l6ZW9mKEVp
bmFfSW5saXN0KikgKiAoaW50KXJvd3MpOwotICAgIHByaXYtPnZpZXcucm93cyA9IHJvd3M7Ci0g
ICAgcHJpdi0+dmlldy5jb2xzID0gY29sczsKLSAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0g
ICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOwotICAgICAgICBzdGFydCA9IHByaXYt
PnZpZXcuaXRlbXMgKyBvbGRfcm93czsKLSAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyAr
IHJvd3M7Ci0gICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAgICAg
ICAgRWluYV9Cb29sIHI7Ci0gICAgICAgICAgICAqc3RhcnQgPSBOVUxMOwotICAgICAgICAgICAg
ciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAotICAgICAgICAg
ICAgICAgIChwcml2LCBzdGFydCwgMCwgY29scyk7Ci0gICAgICAgICAgICBpZiAoIXIpIHsKLSAg
ICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwg
Y29scyk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93
c19yYW5nZV9kZWwKLSAgICAgICAgICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcuaXRlbXMg
KyBvbGRfcm93cywgc3RhcnQpOwotICAgICAgICAgICAgICAgIHByaXYtPnZpZXcucm93cyA9IG9s
ZF9yb3dzOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChjb2xzICE9IG9sZF9jb2xzKSB7Ci0gICAgICAgIEVpbmFfSW5s
aXN0ICoqc3RhcnQsICoqZW5kOwotICAgICAgICBpbnQgdG9kbyA9IGNvbHMgLSBvbGRfY29sczsK
LSAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgICAgICBlbmQgPSBzdGFydCAr
IE1JTihvbGRfcm93cywgcm93cyk7Ci0gICAgICAgIGlmICh0b2RvID4gMCkgewotICAgICAgICAg
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgICAgICAgICAgRWluYV9C
b29sIHI7Ci0gICAgICAgICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2FkZAotICAgICAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xz
LCB0b2RvKTsKLSAgICAgICAgICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgICAgICAgICAg
Q1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1bW5zISIsIHRvZG8pOwotCi0gICAg
ICAgICAgICAgICAgICAgIGZvciAoc3RhcnQtLTsgc3RhcnQgPj0gcHJpdi0+dmlldy5pdGVtczsg
c3RhcnQtLSkKLSAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBm
b3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0
b2RvKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHRv
ZG8gPCAwKSB7Ci0gICAgICAgICAgICB0b2RvID0gLXRvZG87Ci0gICAgICAgICAgICBmb3IgKDsg
c3RhcnQgPCBlbmQ7IHN0YXJ0KyspCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQotewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNs
aXBwZXIsIHcsIGgpOwotCi0gICAgcHJpdi0+dmlldy53ID0gdzsKLSAgICBwcml2LT52aWV3Lmgg
PSBoOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCi0g
ICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZpZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7
Ci19Ci0KLS8vIFRPRE86IHJlbW92ZSBtZSBsYXRlci4KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSAqcHJpdikKLXsKLSAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICBw
cmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9kZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNs
ZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9sZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIs
Ci0gICAgICAgICAgIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzLAotICAgICAgICAg
ICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsCi0gICAgICAgICAg
IHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQsCi0gICAgICAgICAgIHByaXYt
Pm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2RlbC5iYXNlLnJvdywKLSAgICAgICAgICAgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55LAotICAgICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJpdi0+dmlldy5vZmZzZXQub2xkLnksCi0gICAgICAg
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsK
LQotICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBlbmQgPSBwcml2LT52aWV3Lml0
ZW1zICsgcHJpdi0+dmlldy5yb3dzOwotICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykg
ewotICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLQotICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFydCwgaXQpIHsKLSAgICAgICAgICAgIHByaW50
ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0cnkueCwgaXQtPmdlb21ldHJ5LnkpOwotCi0gICAg
ICAgICAgICBpZiAoIWl0LT50aWxlKQotICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAg
ICAgOyIpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVs
dSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxlLT5jb2wsIGl0LT50aWxlLT5yb3cpOwotICAgICAg
ICB9Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICB9Ci0gICAgcHJpbnRmKCItLS1cbiIpOwot
fQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92ZSB0b3Agcm93IGRvd24gYXMgbGFzdC4KLSAq
Ci0gKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZpc3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5
IHRoZSB0b3AgdGhhdAotICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBib3R0b20gYW5k
IGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0gKiBUaGlzIGlzIHdvcnRoIGp1c3Qg
d2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAqIHByaXYtPnZpZXcucm93cywgYWZ0
ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKLSAqIGlzIGJl
dHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAqIEBwYXJhbSBjb3VudCB0aGUgbnVt
YmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KLSAqLwotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNv
dW50KQotewotICAgIHVuc2lnbmVkIGludCBsYXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7
Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQg
dGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0aDsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIChs
YXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCArIG9mZl95OwotICAgIEVpbmFfSW5saXN0ICoqaXRy
X3N0YXJ0LCAqKml0cl9lbmQ7Ci0KLSAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwot
ICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBsYXN0X3JvdzsKLQotICAgIGZvciAoOyBjb3VudCA+
IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVpbmFf
SW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtICppdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLng7Ci0gICAgICAgIGludCBjID0gMDsKLQotICAgICAgICBmb3IgKGl0ciA9IGl0cl9z
dGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspCi0gICAgICAgICAgICAqaXRyID0gKihpdHIgKyAx
KTsKLSAgICAgICAgKml0ciA9IHRtcDsKLQotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysr
OwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAg
ICBveCArPSB0dzsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Zp
bGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsKLSAgICAgICAgICAgIGMrKzsKLSAgICAgICAgfQot
ICAgICAgICBveSArPSB0aDsKLSAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0g
b2ZmX3k7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBNb3ZlIGJvdHRvbSByb3cgdXAgYXMg
Zmlyc3QuCi0gKgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0
IGxvZ2ljYWxseSB0aGUgYm90dG9tIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cg
YXQgdG9wIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMuCi0gKgotICogVGhpcyBpcyB3
b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFuIEBjCi0gKiBwcml2LT52aWV3
LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0
Ci0gKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4KLSAqCi0gKiBAcGFyYW0gY291
bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCi0gKi8KLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5z
aWduZWQgaW50IGNvdW50KQotewotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUu
dzsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29y
ZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGNvdW50ICogdGg7Ci0gICAgRXZh
c19Db29yZCBveSA9IHkgKyBvZmZfeSArIChjb3VudCAtIDEpICogdGg7Ci0gICAgRWluYV9Jbmxp
c3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsKLQotICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcu
aXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAxOwotICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0
ZW1zOwotCi0gICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewotICAgICAgICBFaW5hX0lu
bGlzdCAqKml0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7Ci0gICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFdmFzX0Nvb3Jk
IG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICAgICAgaW50IGMgPSAwOwot
Ci0gICAgICAgIGZvciAoaXRyID0gaXRyX3N0YXJ0OyBpdHIgPiBpdHJfZW5kOyBpdHItLSkKLSAg
ICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEpOwotICAgICAgICAqaXRyID0gdG1wOwotCi0gICAg
ICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
dG1wLCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92
ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgMCk7Ci0gICAgICAgICAg
ICBjKys7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgLT0gdGg7Ci0gICAgfQotICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95OwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92
ZSBsZWZ0LW1vc3QgKGZpcnN0KSBjb2x1bW4gcmlnaHQgYXMgbGFzdCAocmlnaHQtbW9zdCkuCi0g
KgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxs
eSB0aGUgZmlyc3QgY29sIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgbGFz
dCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgotICoKLSAqIFRoaXMgaXMgd29ydGgg
anVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYwotICogcHJpdi0+dmlldy5jb2xz
LCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAotICog
aXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCi0gKgotICogQHBhcmFtIGNvdW50IHRo
ZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVk
IGludCBjb3VudCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2LT52aWV3
LmNvbHMgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICBF
dmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29yZCBvZmZfeCA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICogdHc7Ci0gICAgRXZhc19Db29yZCBv
eSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3QgKippdHI7
Ci0gICAgRWluYV9Jbmxpc3QgKippdHJfZW5kOwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVt
czsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIHIgPSAwOwotCi0g
ICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0gY291bnQ7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRy
X2VuZDsgaXRyKyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2Nv
bCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9
IGxhc3RfY29sIC0gY291bnQgKyAxOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrLCBjKyssIG94ICs9IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtICppdDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgq
aXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAgICAgICppdHIgPSBl
aW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0cik7Ci0KLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsKLSAgICAgICAgfQot
ICAgICAgICBveSArPSB0aDsKLSAgICB9Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
PSBvZmZfeDsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIE1vdmUgcmlnaHQtbW9zdCAobGFz
dCkgY29sdW1uIGxlZnQgYXMgZmlyc3QgKGxlZnQtbW9zdCkuCi0gKgotICogVGhlIGZpbmFsIHJl
c3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgbGFzdCBjb2wgdGhh
dAotICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBmaXJzdCBhbmQgZmlsbGVkIHdpdGgg
bmV3IG1vZGVsIGl0ZW1zLgotICoKLSAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50
IGlzIHNtYWxsZXIgdGhhbiBAYwotICogcHJpdi0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBp
cyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAotICogaXMgYmV0dGVyIHRvIHRyaWdn
ZXIgZnVsbCByZWZpbGwuCi0gKgotICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMg
dG8gcmVwZWF0IHRoZSBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0g
ICAgdW5zaWduZWQgaW50IHI7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53
OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICBFdmFzX0Nvb3Jk
IG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IC0gY291bnQgKiB0dzsKLSAgICBFdmFz
X0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFaW5hX0lubGlz
dCAqKml0ciwgKippdHJfZW5kOwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBp
dHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIHIgPSAwOwotCi0gICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRy
KyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChjb3VudCAtIDEpICogdHcg
KyBvZmZfeDsKLSAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBjb3VudCAtIDE7Ci0KLSAgICAg
ICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwgb3ggLT0gdHcpIHsKLSAgICAgICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICAgICAgaXQgPSBF
SU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSk7Ci0gICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRy
LCAoKml0ciktPmxhc3QpOwotCi0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0g
dGg7Ci0gICAgfQotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Ci19Ci0K
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
aW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKLXsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJf
ZW5kOwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKLSAgICB1bnNpZ25lZCBp
bnQgcjsKLQotICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsK
LQotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKLQotICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgIG95
ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcu
aXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICByID0gMDsK
LQotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sIC09IHN0ZXBfeDsKLSAgICBwcml2LT5tb2RlbC5i
YXNlLnJvdyAtPSBzdGVwX3k7Ci0KLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIr
KykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICAgICAg
RXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKLSAg
ICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAg
ICAgICAgYysrOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAgICAgb3kg
Kz0gdGg7Ci0gICAgfQotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2Vu
ZDsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7Ci0KLSAgICBldmFzX29iamVj
dF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7Ci0KLSAgICB0dyA9IHByaXYtPnZpZXcu
dGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAgICBiYXNlX294ID0geCAr
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnk7Ci0KLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBp
dHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFdmFz
X0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBp
dCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICB9Ci0gICAgICAgIG95ICs9
IHRoOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdikKLXsKLSAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBw
cml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAgICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKLSAgICBFdmFzX0Nvb3JkIHR3
LCB0aDsKLSAgICBpbnQgc3RlcF95LCBzdGVwX3g7Ci0KLSAgICBJTkYoIm89JXAsIG9mZnNldDog
JSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAotICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7Ci0KLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAg
ICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBzdGVw
X3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93ID0g
LXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9kZWwu
YmFzZS5yb3cgLSBuZXdfcm93OwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55OwotICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJp
di0+dmlldy54LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcu
eSk7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKLQotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAocHJpdiwgcHJp
di0+dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBfeCwgc3RlcF95KTsKLX0KLQotc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkp
Ci17Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+
dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7
Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OwotCi0gICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQs
ICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwotCi0gICAgaWYgKCFk
eCAmJiAhZHkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7
Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2
LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OwotICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2Uu
Y29sIC0gbmV3X2NvbDsKLSAgICBsb25nIG5ld19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgLyB0aDsKLSAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7Ci0K
LSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54Owot
ICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Ci0g
ICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAg
ICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCi0gICAgICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKLQotICAgIGlmICgoc3RlcF94
IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeCA+
IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeSA8IDAg
JiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJvd3MpCi0gICAgICAgIHx8IChzdGVwX3kgPiAwICYm
IHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3MpKSB7Ci0KLSAgICAgICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICogdHc7Ci0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRoOwotCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJp
di0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICs9IGR5OwotCi0gICAgaWYgKHN0ZXBfeSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAocHJpdiwgeCwgeSwgLXN0ZXBfeSk7Ci0gICAgZWxz
ZSBpZiAoc3RlcF95ID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBfeSk7Ci0KLSAgICBpZiAoc3RlcF94IDwgMCkKLSAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHks
IC1zdGVwX3gpOwotICAgIGVsc2UgaWYgKHN0ZXBfeCA+IDApCi0gICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcF94KTsKLQotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKLX0K
LQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9w
b3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpCi17Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5
KHByaXYsIHgsIHkpOwotICAgIHByaXYtPnZpZXcueCA9IHg7Ci0gICAgcHJpdi0+dmlldy55ID0g
eTsKLSAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVy
LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKLSAgICAg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2LT52aWV3LnkpOwotfQotCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBFaW5hX0lubGlzdCAqaXQ7Ci0gICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKLSAgICBpbnQgaSwgajsKLQotICAgIGZv
ciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgewotICAgICAgICBpdCA9IHByaXYt
PnZpZXcuaXRlbXNbaV07Ci0gICAgICAgIGogPSAwOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKGl0LCBpdGVtKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
ZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKLXsKLSAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0KLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
bywgJngsICZ5LCAmdywgJmgpOwotICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgbywg
eCwgeSwgdywgaCk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQot
ICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlOQV9GQUxTRTsKLQotICAgIGV3a190aWxlX21hdHJp
eF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4KTsKLQotICAgIGlmICghcHJpdi0+cmVuZGVyLnN1
c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewotICAgICAgICB1bnNpZ25lZCBsb25nIGNv
bHMsIHJvd3M7Ci0KLSAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmll
dy50aWxlLncgKyAxOwotICAgICAgICByb3dzID0gcHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+
dmlldy50aWxlLmggKyAxOwotCi0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+
bW9kZWwuY3VyLmNvbHM7Ci0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9k
ZWwuY3VyLnJvd3M7Ci0gICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gY29sczsKLSAgICAg
ICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSByb3dzOwotICAgICAgICBpZiAocHJpdi0+bW9kZWwu
b2xkLmNvbHMgPiBjb2xzKQotICAgICAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xz
OwotICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLnJvd3MgPiByb3dzKQotICAgICAgICAgICAg
cm93cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dzOwotICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVz
aXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29scywgcm93cyk7Ci0gICAgfQotCi0gICAgaWYgKHBy
aXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0g
eSkpIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9w
b3MocHJpdiwgeCwgeSk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQucG9zID0gRUlOQV9GQUxTRTsK
LSAgICB9Ci0gICAgaWYgKHByaXYtPmNoYW5nZWQub2Zmc2V0KSB7Ci0gICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KHByaXYsIHgsIHkpOwotICAg
ICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYg
KHByaXYtPmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgdywgaCk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQu
c2l6ZSA9IEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVu
ZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7
Ci0gICAgICAgIHJlY3QueCA9IDA7Ci0gICAgICAgIHJlY3QueSA9IDA7Ci0gICAgICAgIHJlY3Qu
dyA9IHByaXYtPm1vZGVsLndpZHRoOwotICAgICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWln
aHQ7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKLSAgICAgICAgcHJpdi0+
Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShw
cml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVp
Z2h0KTsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9v
ZmZzZXRfZm9yY2UocHJpdik7Ci0KLSAgICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNz
IGFueSBpbXBvcnRhbnQgcmVwYWludCBieQotICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9s
ZSB2aWV3cG9ydCAqLwotICAgICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSByID0KLSAgICAgICAg
ICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OwotICAg
ICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwotICAgIH0K
LQotICAgIGV3a190aWxlX21hdHJpeF90aGF3KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwotCi0gICAgaWYg
KHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLncKLSAgICAgICAgfHwgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID4gMAotICAgICAgICB8fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0g
LSBwcml2LT52aWV3LnRpbGUuaCkKLSAgICAgICAgRVJSKCJpbmNvcnJlY3QgYmFzZSBvZmZzZXQg
JSs0ZCwlKzRkLCB0aWxlPSVkeCVkLCBjdXI9JSs0ZCwlKzRkXG4iLAotICAgICAgICAgICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnksCi0gICAgICAg
ICAgICBwcml2LT52aWV3LnRpbGUudywgcHJpdi0+dmlldy50aWxlLmgsCi0gICAgICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwotCi19Ci0K
LUV2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoRXZhcyAqZSkKLXsKLSAg
ICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQgPSBOVUxMOwotCi0gICAgaWYgKF9ld2tfdGlsZWRf
bG9nX2RvbSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFp
bl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiLCBOVUxMKTsKLQotICAgIGlmICgh
c21hcnQpIHsKLSAgICAgICAgc3RhdGljIEV2YXNfU21hcnRfQ2xhc3Mgc2MgPQotICAgICAgICAg
ICAgRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTigiRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmUiKTsKLQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3NldCgm
c2MpOwotICAgICAgICBfcGFyZW50X3NjID0gc2M7Ci0KLSAgICAgICAgc2MuYWRkID0gX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZDsKLSAgICAgICAgc2MuZGVsID0gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbDsKLSAgICAgICAgc2MucmVzaXplID0gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZTsKLSAgICAgICAgc2MubW92ZSA9IF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlOwotICAgICAgICBzYy5jYWxjdWxhdGUgPSBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlOwotICAgICAgICBzYy5tZW1iZXJf
YWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQ7Ci0gICAgICAg
IHNjLm1lbWJlcl9kZWwgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2Rl
bDsKLQotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBzbWFydCk7Ci19Ci0KLXZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2NiX3NldChFdmFzX09iamVjdCAqbywgRWlu
YV9Cb29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqYXJlYSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oY2IpOwotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIHBy
aXYtPnJlbmRlci5jYiA9IGNiOwotICAgIHByaXYtPnJlbmRlci5kYXRhID0gKHZvaWQqKWRhdGE7
Ci19Ci0KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIE5VTEwpOwotICAgIHJldHVybiBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotfQotCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBpZiAoZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCi0gICAgICAgIHJldHVybjsKLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIHR1Yyk7Ci19Ci0K
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29m
ZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgLyogVE9ETzogY2hlY2sgb2Zmc2V0IGdv
IG91dCBvZiBib3VuZHMsIGNsYW1wICovCi0gICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkK
LSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCA9IHg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSB5OwotCi0gICAgcHJpdi0+Y2hh
bmdlZC5vZmZzZXQgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2No
YW5nZWQocHJpdik7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCAq
bywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgREJHKCJvPSVwLCB4PSVkLCB5
PSVkIiwgbywgeCwgeSk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBF
SU5BX0ZBTFNFKTsKLSAgICBpZiAoeCA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5ID09
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotCi0g
ICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0
X2ludGVybmFsKHByaXYsIHgsIHkpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCBk
eCwgRXZhc19Db29yZCBkeSkKLXsKLSAgICBEQkcoIm89JXAsIGR4PSVkLCBkeT0lZCIsIG8sIGR4
LCBkeSk7Ci0KLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNF
KTsKLSAgICBpZiAoIWR4ICYmICFkeSkKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLQotICAg
IHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9p
bnRlcm5hbAotICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkeCwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5
LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQotewotICAgICpvZmZ4ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7Ci0gICAgKm9mZnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eTsKLQotICAgIGlmIChmYWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6b29tKSA8IFpPT01f
U1RFUF9NSU4pIHsKLSAgICAgICAgREJHKCJpZ25vcmVkIGFzIHpvb20gZGlmZmVyZW5jZSBpcyA8
ICVmOiAlZiIsCi0gICAgICAgICAgICAoZG91YmxlKVpPT01fU1RFUF9NSU4sIGZhYnNmKHByaXYt
PnZpZXcudGlsZS56b29tIC0gKnpvb20pKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAg
ICB9Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zs
dXNoKHByaXYpOwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotCi0gICAgKnpvb20gPSBST1VOREVE
X1pPT00ocHJpdi0+dmlldy50aWxlLncsICp6b29tKTsKLQotICAgIHR3ID0gcHJpdi0+dmlldy50
aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIGZsb2F0IHNjYWxlID0g
Knpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKLQotICAgIHByaXYtPnZpZXcudGlsZS56b29t
ID0gKnpvb207Ci0gICAgLy8gdG9kbzogY2hlY2sgY3ggWzAsIHddLi4uCi0gICAgcHJpdi0+dmll
dy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21f
Y2VudGVyLnkgPSBjeTsKLQotCi0gICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcu
aCkgewotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwotICAgICAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAg
IH0KLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0OwotCi0gICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9
IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7Ci0gICAgRXZhc19D
b29yZCBieCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGN4KSAqIHNjYWxlOwot
ICAgIEV2YXNfQ29vcmQgYnkgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgLSBjeSkg
KiBzY2FsZTsKLQotICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lkdGggPSBwcml2LT5tb2RlbC53aWR0
aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVp
Z2h0ICogc2NhbGU7Ci0KLSAgICBpZiAobW9kZWxfd2lkdGggPCBwcml2LT52aWV3LncgfHwgbmV3
X3ggPj0gMCkKLSAgICAgICAgbmV3X3ggPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeCArIHByaXYt
PnZpZXcudyA+PSBtb2RlbF93aWR0aCkKLSAgICAgICAgbmV3X3ggPSAtbW9kZWxfd2lkdGggKyBw
cml2LT52aWV3Lnc7Ci0KLSAgICBpZiAobW9kZWxfaGVpZ2h0IDwgcHJpdi0+dmlldy5oIHx8IG5l
d195ID49IDApCi0gICAgICAgIG5ld195ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3kgKyBwcml2
LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0KQotICAgICAgICBuZXdfeSA9IC1tb2RlbF9oZWlnaHQg
KyBwcml2LT52aWV3Lmg7Ci0KLSAgICBieCA9IG5ld194ICUgdHc7Ci0gICAgcHJpdi0+bW9kZWwu
YmFzZS5jb2wgPSAtIG5ld194IC8gdHc7Ci0gICAgYnkgPSBuZXdfeSAlIHRoOwotICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93ID0gLSBuZXdfeSAvIHRoOwotCi0gICAgcHJpdi0+Y2hhbmdlZC5zaXpl
ID0gRUlOQV9UUlVFOwotICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7Ci0gICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Ci0KLSAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3
X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gYng7Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID0gYnk7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnk7Ci0gICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsK
LSAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwotCi0gICAgZXZhc19vYmplY3Rf
bW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgbmV3X3ggKyBw
cml2LT52aWV3LngsCi0gICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKLQotICAgIEV2YXNfQ29v
cmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAgRXZh
c19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
OwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOwotCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAg
ICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0g
Kml0cjsKLQotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7
Ci0gICAgICAgICAgICBveCArPSB0dzsKLSAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0ICp6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5
KQotewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpKnpvb20pOwotCi0gICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0KLSAgICByZXR1
cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKHByaXYsIHpvb20s
IGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3Jk
IGN4LCBFdmFzX0Nvb3JkIGN5KQotewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3Vi
bGUpem9vbSk7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxT
RSk7Ci0gICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcuaCkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsK
LSAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsKLQotICAgIGZsb2F0IHNjYWxlID0g
em9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwotCi0gICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9P
TShwcml2LT52aWV3LnRpbGUudywgc2NhbGUpOwotICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJ
WkUodHcsIHByaXYtPnZpZXcudGlsZS53KTsKLSAgICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKHBy
aXYtPnZpZXcudGlsZS5oLCBzY2FsZSk7Ci0gICAgem9vbSA9IHNjYWxlICogcHJpdi0+dmlldy50
aWxlLnpvb207Ci0KLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3dpZHRoID0gcHJpdi0+bW9kZWwud2lk
dGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX2hlaWdodCA9IHByaXYtPm1vZGVsLmhl
aWdodCAqIHNjYWxlOwotCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIsIG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOwotCi0gICAgaW50IHZyb3dzID0gY2Vp
bCgoZmxvYXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSArIDE7Ci0gICAgaW50IHZjb2xzID0g
Y2VpbCgoZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3KSArIDE7Ci0gICAgRXZhc19Db29y
ZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0g
ICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kp
ICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBieCA9IG5ld194ICUgdHc7Ci0gICAgRXZhc19Db29y
ZCBieSA9IG5ld195ICUgdGg7Ci0gICAgdW5zaWduZWQgbG9uZyBiYXNlX3JvdyA9IC1uZXdfeSAv
IHRoOwotICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAtbmV3X3ggLyB0dzsKLQotICAgIGlm
IChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlX2NvbCAhPSBwcml2LT5t
b2RlbC5iYXNlLmNvbCkgewotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IGJhc2Vfcm93
OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJhc2VfY29sOwotICAgICAgICByZWNh
bGMgPSBFSU5BX1RSVUU7Ci0gICAgfQotCi0gICAgaWYgKHZyb3dzID4gcHJpdi0+dmlldy5yb3dz
IHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQotICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7
Ci0KLSAgICBpZiAocmVjYWxjKSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgdywgaDsKLSAgICAgICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIE5VTEwsIE5VTEwsICZ3LCAmaCk7Ci0gICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKHByaXYsIHcsIGgsIHR3
LCB0aCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhw
cml2KTsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhw
cml2KTsKLSAgICB9Ci0KLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBieCArIHByaXYtPnZpZXcu
eDsKLSAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7Ci0KLSAgICBldmFzX29i
amVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICBu
ZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+
dmlldy55KTsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0
ciArIHByaXYtPnZpZXcucm93czsKLQotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykg
ewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRWluYV9Jbmxpc3Qg
KmxzdCA9ICppdHI7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7Ci0g
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kp
OwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0
dywgdGgpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0g
dGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBF
dmFzX0Nvb3JkIGgpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0g
ICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLng7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55Owot
ICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgRXZhc19D
b29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0g
cHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OwotCi0gICAgaWYgKC1uZXdfeCA+IHcpIHsKLSAgICAgICAgbmV3X3ggPSAtdzsKLSAgICAgICAg
YnggPSBuZXdfeCAlIHR3OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAv
IHR3OwotICAgIH0KLQotICAgIGlmICgtbmV3X3kgPiBoKSB7Ci0gICAgICAgIG5ld195ID0gLWg7
Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cg
PSAtbmV3X3kgLyB0aDsKLSAgICB9Ci0KLSAgICBpZiAoYnggPj0gMCB8fCBieCA8PSAtMiAqIHBy
aXYtPnZpZXcudGlsZS53KSB7Ci0gICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKLSAgICB9Ci0KLSAgICBpZiAoYnkgPj0g
MCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKSB7Ci0gICAgICAgIGJ5ID0gbmV3X3kg
JSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKLSAgICB9
Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdf
eDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IGJ4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5Owot
ICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgICAg
ICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAgICAgICAgICAgICAgICAgICAgbmV3
X3kgKyBwcml2LT52aWV3LnkpOwotCi0gICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2
LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0KLSAgICBpdHIgPSBwcml2LT52
aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0KLSAgICBm
b3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJh
c2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwotCi0gICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3
OwotICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLX0KLQotdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAq
bywgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotCi0gICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OwotICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoX3Nj
YWxlOwotCi0gICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
Kml0ciwgaXQpCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldAotICAgICAgICAgICAg
ICAgICAgICAoaXQsIHNtb290aF9zY2FsZSk7Ci0gICAgfQotfQotCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqdXBkYXRlKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJ
TkFfRkFMU0UpOwotCi0gICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICByZXR1cm4gZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2
LT5tb2RlbC5tYXRyaXgsIHVwZGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcml2LT52aWV3LnRpbGUuem9vbSk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLSAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9jYiA9
IGNiOwotICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0YTsKLX0KLQotdm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19P
YmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09i
amVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2I7Ci0gICAgcHJpdi0+
cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8pCi17Ci0gICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIocHJp
di0+bW9kZWwubWF0cml4KTsKLX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250
ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQg
aGVpZ2h0KQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAg
aWYgKHdpZHRoID09IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9PSBwcml2LT5tb2RlbC5o
ZWlnaHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIHByaXYtPm1vZGVsLndpZHRoID0gd2lkdGg7
Ci0gICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OwotICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX1RSVUU7Ci0KLSAgICBEQkcoIndpZHRoLGhlaWdodD0lZCwgJWQiLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKLX0K
LQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KEV2YXNf
T2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVuZGVyLmRpc2FibGVkKQot
ICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKLX0KLQotdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9
IE5VTEw7Ci0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7Ci0gICAgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkgPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gMDsKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgIHByaXYtPm1v
ZGVsLmJhc2UuY29sID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7Ci0gICAgcHJp
di0+bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKLSAg
ICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAw
OwotICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUsIFNUQVRVUyBCRUZP
UkUgREVMRVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfbWVtX2RiZyhwcml2KTsKLSNlbmRpZgotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2KTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9jbGVhcih0dWMpOwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgcHJp
bnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJFQ1JFQVRJTkcgVElM
RSBNQVRSSVg6XG4iKTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2
KTsKLSNlbmRpZgotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKLXsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBFaW5hX1RpbGVfR3JpZF9T
bGljZXIgc2xpY2VyOwotICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8gKmluZm87Ci0gICAg
RXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0KLSAg
ICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0g
ICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7Ci0KLSAgICBp
ZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywg
dGgpKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xpY2VyIGZvciAlZCwl
ZCslZHglZCB0aWxlPSVkeCVkIiwKLSAgICAgICAgICAgIHgsIHksIHcsIGgsIHR3LCB0aCk7Ci0g
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIHdoaWxlIChlaW5hX3RpbGVf
Z3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKLSAgICAgICAgY29uc3QgdW5zaWdu
ZWQgbG9uZyBjID0gaW5mby0+Y29sOwotICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIHIgPSBp
bmZvLT5yb3c7Ci0gICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9hZGQocHJpdiwgYywgciwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKLQotICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpvb20pOwotICAgIHJl
dHVybiBFSU5BX1RSVUU7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5zaWduZWQgaW50IG4s
IGZsb2F0IHpvb20pCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlO
QV9GQUxTRSk7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2Nv
bCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
LQotICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBwcml2LT52aWV3LnJv
d3M9JWx1IiwKLSAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBuLCBwcml2LT52aWV3
LnJvd3MpOwotICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVsLmJhc2Uucm93IC0gbjsK
LSAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG47Ci0gICAgZW5k
X3JvdyA9IE1JTihwcml2LT5tb2RlbC5jdXIucm93cyAtIDEsCi0gICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC5iYXNlLnJvdyArIHByaXYtPnZpZXcucm93cyArIG4gLSAxKTsKLSAgICBlbmRf
Y29sID0gTUlOKHByaXYtPm1vZGVsLmN1ci5jb2xzIC0gMSwKLSAgICAgICAgICAgICAgICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAtIDEpOwotCi0gICAgSU5G
KCJzdGFydF9yb3c9JWx1LCBlbmRfcm93PSVsdSwgc3RhcnRfY29sPSVsdSwgZW5kX2NvbD0lbHUi
LAotICAgICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOwotCi0g
ICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7Ci0KLSAgICBm
b3IgKGkgPSBzdGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsrKQotICAgICAgICBmb3IgKGogPSBz
dGFydF9jb2w7IGogPD0gZW5kX2NvbDsgaisrKQotICAgICAgICAgICAgaWYgKCFfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChwcml2LCBqLCBpLCB6b29tLCBQ
UkVfUkVOREVSX1BSSU9SSVRZX0xPVykpCi0gICAgICAgICAgICAgICAgZ290byBzdGFydF9wcm9j
ZXNzaW5nOwotCi1zdGFydF9wcm9jZXNzaW5nOgotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0KLSAgICB0dWMgPSBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGggPSAoZW5k
X3JvdyAtIHN0YXJ0X3JvdyArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxl
LmgsIHpvb20pOwotICAgIHcgPSAoZW5kX2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpF
X0FUX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pOwotICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9sb2NrX2FyZWEodHVjLAotICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpFX0FU
X1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pLAotICAgICAgICAgICAgc3RhcnRfcm93ICog
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHpvb20pLCB3LCBoLCB6b29tKTsK
LQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pCi17Ci0gICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0K
LSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKHBy
aXYpOwotCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+
bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVj
KTsKLX0KLQotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVy
KEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYs
IEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJs
ZV9yZW5kZXIocHJpdik7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9l
bmFibGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9j
aGFuZ2VkKHByaXYpOwotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxl
X3JlbmRlcihwcml2KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1YjljZWExMGVkMmI1YjQyZTg5MDk4NGU2
YjliMmMxODNlN2U5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCkBAIC0wLDAgKzEsMTkyMiBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKKworI2luY2x1
ZGUgImV3a190aWxlZF9tYXRyaXguaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgor
I2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRp
by5oPiAvLyBYWFggUkVNT1ZFIE1FIExBVEVSCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgSURYKGNvbCwgcm93LCByb3dzcGFuKSAoY29sICsgKHJv
dyAqIHJvd3NwYW4pKQorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbTsKK3R5
cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0OworCitlbnVtIF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHsKKyAgICBQUkVfUkVOREVS
X1BSSU9SSVRZX0xPVyA9IDAsIC8qKjwgQXBwZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0ICov
CisgICAgUFJFX1JFTkRFUl9QUklPUklUWV9ISUdIICAgICAvKio8IFByZXBlbmQgdGhlIHJlcXVl
c3QgdG8gdGhlIGxpc3QgKi8KK307Cit0eXBlZGVmIGVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0
b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRl
cl9Qcmlvcml0eTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIHsKKyAg
ICBFSU5BX0lOTElTVDsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBzdHJ1Y3QgeworICAgICAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgfSBnZW9tZXRyeTsKKyAgICBFaW5hX0Jvb2wg
c21vb3RoX3NjYWxlOworfTsKKworc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVf
UmVuZGVyX1JlcXVlc3QgeworICAgIEVJTkFfSU5MSVNUOworICAgIHVuc2lnbmVkIGxvbmcgY29s
LCByb3c7CisgICAgZmxvYXQgem9vbTsKK307CisKK3N0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSB7CisgICAgRXZhc19PYmplY3RfU21hcnRfQ2xpcHBlZF9EYXRhIGJhc2U7Cisg
ICAgRXZhc19PYmplY3QgKnNlbGY7CisgICAgRXZhc19PYmplY3QgKmNvbnRlbnRzX2NsaXBwZXI7
CisgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9Jbmxpc3QgKippdGVtczsKKyAgICAgICAgRXZh
c19Db29yZCB4LCB5LCB3LCBoOworICAgICAgICBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIHN0
cnVjdCB7CisgICAgICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgICAgICAgICBmbG9hdCB6
b29tOworICAgICAgICAgICAgRWluYV9Cb29sIHpvb21fd2Vha19zbW9vdGhfc2NhbGU6MTsKKyAg
ICAgICAgfSB0aWxlOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0IHsKKyAg
ICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CisgICAgICAgICAgICB9IGN1ciwgb2xkLCBi
YXNlLCB6b29tX2NlbnRlcjsKKyAgICAgICAgfSBvZmZzZXQ7CisgICAgfSB2aWV3OworICAgIEV2
YXNfQ29sb3JzcGFjZSBjc3BhY2U7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXdrX1RpbGVfTWF0
cml4ICptYXRyaXg7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGNvbCwgcm93OworICAgICAgICB9IGJhc2U7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIH0gY3VyLCBvbGQ7CisgICAgICAg
IEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKKyAgICB9IG1vZGVsOworICAgIHN0cnVjdCB7Cisg
ICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWlu
YV9SZWN0YW5nbGUgKmFyZWEpOworICAgICAgICB2b2lkICpkYXRhOworICAgICAgICBFaW5hX0lu
bGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICAgICAgRWNvcmVfSWRsZXIgKmlkbGVyOwor
ICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7CisgICAgICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7
CisgICAgfSByZW5kZXI7CisgICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAqKCpwcmVfY2IpKHZv
aWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcHJlX2RhdGE7CisgICAg
ICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEsIEV2YXNfT2Jq
ZWN0ICpvKTsKKyAgICAgICAgdm9pZCAqcG9zdF9kYXRhOworICAgIH0gcHJvY2VzczsKKyAgICBz
dHJ1Y3QgeworICAgICAgICBFaW5hX0Jvb2wgYW55OjE7CisgICAgICAgIEVpbmFfQm9vbCBwb3M6
MTsKKyAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKKyAgICAgICAgRWluYV9Cb29sIG1vZGVsOjE7
CisgICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKKyAgICB9IGNoYW5nZWQ7CisjaWZkZWYgREVC
VUdfTUVNX0xFQUtTCisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciAqc2lnX3VzcjsKKyNlbmRpZgor
fTsKKworc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVWQVNfU01BUlRfQ0xB
U1NfSU5JVF9OVUxMOworaW50IF9ld2tfdGlsZWRfbG9nX2RvbSA9IC0xOworCisjZGVmaW5lIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG9iaiwgcHRyLCAuLi4pICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0
KG9iaikpOyBcCisgICAgaWYgKCFwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIENSSVRJQ0FMKCJubyBwcml2YXRlIGRh
dGEgaW4gb2JqPSVwIiwgb2JqKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBf
X1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7CitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpOworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpOwor
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIHZvaWQgKmRh
dGEgPSAwOworCisgICAgLyogRG8gbm90IHByb2Nlc3MgdXBkYXRlcy4gTm90ZSB0aGF0IHdlIHN0
aWxsIHdhbnQgdG8gZ2V0IHVwZGF0ZXMgcmVxdWVzdHMKKyAgICAgKiBpbiB0aGUgcXVldWUgaW4g
b3JkZXIgdG8gbm90IG1pc3MgYW55IHVwZGF0ZXMgYWZ0ZXIgdGhlIHJlbmRlciBpcworICAgICAq
IHJlc3VtZWQuCisgICAgICovCisgICAgaWYgKHByaXYtPnJlbmRlci5zdXNwZW5kIHx8ICFldmFz
X29iamVjdF92aXNpYmxlX2dldChwcml2LT5zZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQorICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5w
cmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+c2VsZik7CisKKyAgICBld2tfdGls
ZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBpZiAo
cHJpdi0+cHJvY2Vzcy5wb3N0X2NiKQorICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IocHJp
di0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOworfQorCitzdGF0aWMgaW50
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lkICpkYXRhKQoreworICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMg
PSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwor
CisgICAgaWYgKHR1YykgeworICAgICAgICBEQkcoImZsdXNoIHVudXNlZCB0aWxlIGNhY2hlLiIp
OworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgIH0g
ZWxzZQorICAgICAgICBFUlIoIm5vIGNhY2hlPyEiKTsKKworICAgIHJldHVybiAwOworfQorCitz
dGF0aWMgRXdrX1RpbGUgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQg
bG9uZyByb3csIGZsb2F0IHpvb20pCit7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRXZhcyAqZXZh
cyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYpOworICAgIGlmICghZXZhcykgewor
ICAgICAgICBDUklUSUNBTCgiZXZhc19vYmplY3RfZXZhc19nZXQgZmFpbGVkISIpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0ID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3Cisg
ICAgICAgIChwcml2LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93LCB6b29tKTsKKworICAg
IGlmICghdCkgeworICAgICAgICBDUklUSUNBTCgiZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3IGZh
aWxlZCEiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorewor
ICAgIGl0LT5nZW9tZXRyeS54ID0geDsKKyAgICBpdC0+Z2VvbWV0cnkueSA9IHk7CisKKyAgICBp
ZiAoaXQtPnRpbGUpCisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCB4
LCB5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVz
aXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCkKK3sKKyAgICBpdC0+Z2VvbWV0cnkudyA9IHc7CisgICAgaXQtPmdlb21ldHJ5Lmgg
PSBoOworCisgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShp
dC0+dGlsZS0+aW1hZ2UsIHcsIGgpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3Nl
dChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIHcsIGgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlICp0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdCkKK3sKKyAgICBpZiAoaXQtPnRpbGUpCisgICAgICAgIENSSVRJQ0FMKCJpdC0+dGls
ZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKKyAgICBpdC0+dGlsZSA9IHQ7
CisgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS54LCBp
dC0+Z2VvbWV0cnkueSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5pbWFnZSwg
aXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9m
aWxsX3NldAorICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCBpdC0+Z2VvbWV0cnkudywg
aXQtPmdlb21ldHJ5LmgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQo
aXQtPnRpbGUtPmltYWdlLCBpdC0+c21vb3RoX3NjYWxlKTsKKworICAgIGlmICghZXdrX3RpbGVf
dmlzaWJsZV9nZXQodCkpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQodC0+
aW1hZ2UsIHByaXYtPnNlbGYpOworCisgICAgZXdrX3RpbGVfc2hvdyh0KTsKK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpp
dCwgZG91YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
KyAgICBld2tfdGlsZV9oaWRlKGl0LT50aWxlKTsKKyAgICBpZiAoIWV3a190aWxlX3Zpc2libGVf
Z2V0KGl0LT50aWxlKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChpdC0+
dGlsZS0+aW1hZ2UpOworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChwcml2LT5tb2RlbC5t
YXRyaXgsIGl0LT50aWxlLCBsYXN0X3VzZWQpOworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKworICAgIGl0LT50aWxlID0gMDsKK30KKworc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5hX0lubGlzdCAqaXQ7Cisg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKKyAgICBpbnQgaTsKKyAgICBk
b3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworCisgICAgZm9yIChpID0g
MDsgaSA8IHByaXYtPnZpZXcucm93czsgaSsrKSB7CisgICAgICAgIGl0ID0gcHJpdi0+dmlldy5p
dGVtc1tpXTsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAgICAg
ICAgIGlmIChpdGVtLT50aWxlKQorICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKKyAgICB9Cit9CisK
K3N0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2ln
bmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSwgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0eSkKK3sKKyAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7CisKKyAgICByID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0Kj4obWFsbG9j
KHNpemVvZigqcikpKTsKKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwor
CisgICAgaWYgKHByaW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKKyAgICAgICAg
cHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCisg
ICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNU
X0dFVChyKSk7CisgICAgZWxzZQorICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1
ZXN0cyA9IGVpbmFfaW5saXN0X2FwcGVuZAorICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVf
cmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworCisgICAgci0+Y29sID0gY29s
OworICAgIHItPnJvdyA9IHJvdzsKKyAgICByLT56b29tID0gem9vbTsKKworICAgIHJldHVybiBF
SU5BX1RSVUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCit7Cisg
ICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUK
KyAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9H
RVQocikpOworICAgIGZyZWUocik7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXYpCit7CisgICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCisgICAgICAg
IHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLAorICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5y
ZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICB3aGlsZSAoKnBsKSB7CisgICAgICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcjsKKyAgICAgICAgciA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7
CisgICAgICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7CisgICAgICAgIGZy
ZWUocik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9y
ZXF1ZXN0czsKKyAgICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKKyAgICB3aGlsZSAo
aXRlcikgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnIgPQorICAgICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKKyAgICAgICAg
ICAgICAgICBpdGVyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qp
OworICAgICAgICB0bXAgPSBpdGVyLT5uZXh0OworICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9y
ZW1vdmUoKnBsLCBpdGVyKTsKKyAgICAgICAgaXRlciA9IHRtcDsKKyAgICAgICAgZnJlZShyKTsK
KyAgICB9Cit9CisKKy8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBp
ZiByZXF1aXJlZCEgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnJlcTsKKyAgICBFaW5hX1JlY3RhbmdsZSBhcmVhOworICAgIEV3a19UaWxlX01hdHJpeCAq
dG0gPSBwcml2LT5tb2RlbC5tYXRyaXg7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWM7CisgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICBmbG9h
dCB6b29tOworICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisK
KyAgICByZXEgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zp
cnN0KHByaXYpOworICAgIGlmICghcmVxKQorICAgICAgICByZXR1cm47CisKKyAgICBjb2wgPSBy
ZXEtPmNvbDsKKyAgICByb3cgPSByZXEtPnJvdzsKKyAgICB6b29tID0gcmVxLT56b29tOworCisg
ICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpv
b20pKSB7CisgICAgICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUs
JWx1IEAgJWYuIiwgY29sLCByb3csIHpvb20pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisK
KyAgICB0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93
LCB6b29tKTsKKyAgICBpZiAoIXQpCisgICAgICAgIGdvdG8gZW5kOworCisgICAgYXJlYS54ID0g
MDsKKyAgICBhcmVhLnkgPSAwOworICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53OworICAg
IGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgcHJpdi0+cmVuZGVyLmNiKHByaXYt
PnJlbmRlci5kYXRhLCB0LCAmYXJlYSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRh
dGVfYWRkKAorICAgICAgICB0LT5pbWFnZSwKKyAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEu
dywgYXJlYS5oKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0
KTsKKworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKKwor
ZW5kOgorICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVs
KHByaXYsIHJlcSk7CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aCh0dWMpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSo+KGRhdGEpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQorICAgICAgICBk
YXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+
c2VsZik7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X3Byb2Nlc3Nfc2luZ2xlKHByaXYpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikK
KyAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBk
YXRhLCBwcml2LT5zZWxmKTsKKworICAgIGlmICghcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVx
dWVzdHMpIHsKKyAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gMDsKKyAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJf
c3RvcChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlmICghcHJp
di0+cmVuZGVyLmlkbGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBlY29yZV9pZGxlcl9kZWwo
cHJpdi0+cmVuZGVyLmlkbGVyKTsKKyAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSAwOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlm
IChwcml2LT5yZW5kZXIuaWRsZXIpCisgICAgICAgIHJldHVybjsKKyAgICBwcml2LT5yZW5kZXIu
aWRsZXIgPSBlY29yZV9pZGxlcl9hZGQoCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2IsIHByaXYpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQoreworICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9U
UlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rv
cChwcml2KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYpCit7CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkKKyAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9G
QUxTRTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2
KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0
KHByaXYpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3RhdGljIGlubGluZSBFaW5h
X0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgdW5z
aWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQoreworICAgIHVuc2lnbmVkIGxvbmcg
bV9jb2wgPSBwcml2LT5tb2RlbC5iYXNlLmNvbCArIGNvbDsKKyAgICB1bnNpZ25lZCBsb25nIG1f
cm93ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyByb3c7CisgICAgZG91YmxlIGxhc3RfdXNlZCA9
IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKworICAgIGlmIChtX2NvbCA+PSBwcml2LT5tb2RlbC5j
dXIuY29scyB8fCBtX3JvdyA+PSBwcml2LT5tb2RlbC5jdXIucm93cykgeworICAgICAgICBpZiAo
aXQtPnRpbGUpCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNz
b2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEV3a19U
aWxlICp0OworICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207
CisKKyAgICAgICAgaWYgKGl0LT50aWxlKSB7CisgICAgICAgICAgICBFd2tfVGlsZSAqb2xkID0g
aXQtPnRpbGU7CisgICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gbV9yb3cgfHwgb2xkLT5jb2wg
IT0gbV9jb2wgfHwgb2xkLT56b29tICE9IHpvb20pCisgICAgICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAg
ICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09IG1fY29s
ICYmIG9sZC0+em9vbSA9PSB6b29tKQorICAgICAgICAgICAgICAgIGdvdG8gZW5kOworICAgICAg
ICB9CisKKyAgICAgICAgdCA9IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChwcml2LT5t
b2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jvdywgem9vbSk7CisKKyAgICAgICAgaWYgKCF0KSB7Cisg
ICAgICAgICAgICAvKiBOT1RFOiBpdCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNl
dCEgKi8KKyAgICAgICAgICAgIGlmIChpdC0+dGlsZSkgeworICAgICAgICAgICAgICAgIENSSVRJ
Q0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKKyAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
IGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdF91c2VkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRG8gbm90
IGFkZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRlciBxdWV1ZSAqLworICAgICAgICAgICAgaWYg
KCFwcml2LT5yZW5kZXIuc3VzcGVuZCkgeworICAgICAgICAgICAgICAgIHQgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0
ZShwcml2LCB0LCBpdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodCAhPSBp
dC0+dGlsZSkgeworICAgICAgICAgICAgaWYgKGl0LT50aWxlKQorICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgbGFz
dF91c2VkKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29j
aWF0ZShwcml2LCB0LCBpdCk7CisgICAgICAgIH0KKworICAgICAgZW5kOgorCisgICAgICAgIHJl
dHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3Rh
dGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBs
b25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqaXQ7CisgICAgRXZhc19Db29yZCB4LCB5LCB0dywgdGg7CisKKyAgICBEQkcoIm89
JXAiLCBwcml2LT5zZWxmKTsKKworICAgIGl0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSo+KG1hbGxvYyhzaXplb2YoKml0KSkpOworICAgIGlmICghaXQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2
LT52aWV3LnggKyB0dyAgKmNvbDsKKyAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsg
cHJpdi0+dmlldy55ICsgdGggICpyb3c7CisKKyAgICBpdC0+dGlsZSA9IDA7CisKKyAgICBpdC0+
c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGU7Cisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgeCwgeSk7CisgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgIGlmICgh
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgY29sLCByb3cpKSB7
CisgICAgICAgIGZyZWUoaXQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1
cm4gaXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Rl
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdCkKK3sKKyAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAgICAgZG91YmxlIGxh
c3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAgICB9CisK
KyAgICBmcmVlKGl0KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwg
RWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBpZiAoaXQtPnNtb290aF9zY2FsZSA9PSBz
bW9vdGhfc2NhbGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpdC0+dGlsZSkKKyAgICAg
ICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGlsZS0+aW1hZ2UsIHNt
b290aF9zY2FsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAg
IGlmIChwcml2LT5jaGFuZ2VkLmFueSkKKyAgICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NoYW5nZWQocHJpdi0+c2VsZik7CisgICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBFSU5B
X1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlz
dCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgRWluYV9Jbmxpc3QgKm47Cisg
ICAgdW5zaWduZWQgaW50IGk7CisKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBuID0gKCpwX3JvdyktPmxhc3Q7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KykgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAg
aXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0pOworICAgICAgICBuID0gbi0+cHJldjsKKyAgICAgICAgKnBfcm93ID0gZWluYV9pbmxp
c3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CisgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgfQorfQorCitzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNp
Z25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25lZCBp
bnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKKworICAgIGZvciAoaSA9IDA7IGkg
PCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKml0OworCisgICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKKyAgICAgICAgaWYgKCFpdCkgeworICAgICAgICAg
ICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1IGluIHJvdyAldS4iLCBp
LCBjb3VudCwgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19j
b2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOworICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CisgICAgICAgIH0KKworICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnBf
cm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKKyAgICB9CisgICAgcmV0dXJuIEVJTkFfVFJVRTsK
K30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqcm93KQorewor
ICAgIHdoaWxlIChyb3cpIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQ7CisgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICByb3cgPSByb3ctPm5leHQ7CisgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2Rl
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnN0YXJ0
LCBFaW5hX0lubGlzdCAqKmVuZCkKK3sKKyAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0Kysp
IHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChwcml2LCAq
c3RhcnQpOworICAgICAgICAqc3RhcnQgPSAwOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipzdGFydDsKKyAgICBFaW5h
X0lubGlzdCAqKmVuZDsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBlbmQg
PSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOworCisgICAg
ZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKKyAgICBwcml2LT52aWV3Lml0ZW1zID0gMDsKKyAgICBw
cml2LT52aWV3LmNvbHMgPSAwOworICAgIHByaXYtPnZpZXcucm93cyA9IDA7Cit9CisKK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIodm9pZCAqZGF0YSwgRXdrX1Rp
bGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQoreworICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKj4oZGF0YSk7CisKKyAgICBJTkYoIlRPRE8gJXAgKHZpc2libGU/ICVkKSBbJWx1LCVs
dV0gJWQsJWQgKyAlZHglZCIsCisgICAgICAgIHQsIHQtPnZpc2libGUsIHQtPmNvbCwgdC0+cm93
LCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKKworICAgIGlmICghdC0+dmlz
aWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByaXYtPnZpZXcudGlsZS53ICE9IHQt
PncgfHwgcHJpdi0+dmlldy50aWxlLmggIT0gdC0+aCkKKyAgICAgICAgcmV0dXJuOyAvLyB0b2Rv
OiByZW1vdmUgbWUgbGF0ZXIsIGRvbid0IGV2ZW4gZmxhZyBhcyBkaXJ0eSEKKworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5jYik7CisgICAgaWYgKCFwcml2LT5y
ZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHQsIGFyZWEpKQorICAgICAgICByZXR1cm47CisK
KyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQodC0+aW1hZ2UsIGFyZWEtPngs
IGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAg
aWYgKHByaXYtPm1vZGVsLm1hdHJpeCkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7CisKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5vZmZz
ZXQgPSBFSU5BX0ZBTFNFOworICAgICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7
CisKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWUocHJpdi0+bW9kZWwubWF0cml4KTsKKyAg
ICB9CisKKyAgICBwcml2LT5tb2RlbC5tYXRyaXggPSBld2tfdGlsZV9tYXRyaXhfbmV3KHR1Yywg
cHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLCBwcml2LT5jc3BhY2Us
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIsIHByaXYpOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbChFdmFzX09iamVjdCAq
bywgRXZhc19PYmplY3QgKm1lbWJlcikKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKyAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCisgICAgICAgIHJldHVy
bjsKKyAgICBldmFzX29iamVjdF9jbGlwX3Vuc2V0KG1lbWJlcik7CisgICAgaWYgKCFldmFzX29i
amVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c19jbGlwcGVyKSkKKyAgICAgICAgZXZhc19v
YmplY3RfaGlkZShwcml2LT5jb250ZW50c19jbGlwcGVyKTsKK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQoRXZhc19PYmplY3QgKm8sIEV2
YXNfT2JqZWN0ICptZW1iZXIpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
dik7CisgICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgZXZhc19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c19jbGlwcGVyKTsK
KyAgICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQobykpCisgICAgICAgIGV2YXNfb2JqZWN0
X3Nob3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cit9CisKKyNpZmRlZiBERUJVR19NRU1fTEVB
S1MKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgc3RhdGljIGludCBydW4gPSAwOwor
CisgICAgcnVuKys7CisKKyAgICBwcmludGYoIlxuLS0tIEJFR0lOIERFQlVHIFRJTEVEIEJBQ0tJ
TkcgU1RPUkUgTUVNT1JZIFslZF0gLS1cbiIKKyAgICAgICAgICAgInQ9JTAuMmYsIG9iaj0lcCwg
cHJpdj0lcCwgdmlldy5pdGVtcz0lcCwgbWF0cml4PSVwXG4iLAorICAgICAgICAgICBydW4sIGVj
b3JlX2xvb3BfdGltZV9nZXQoKSwKKyAgICAgICAgICAgcHJpdi0+c2VsZiwgcHJpdiwgcHJpdi0+
dmlldy5pdGVtcywgcHJpdi0+bW9kZWwubWF0cml4KTsKKworICAgIGV3a190aWxlX21hdHJpeF9k
YmcocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOwor
CisgICAgcHJpbnRmKCItLS0gRU5EIERFQlVHIFRJTEVEIEJBQ0tJTkcgU1RPUkUgTUVNT1JZIFsl
ZF0gLS1cblxuIiwgcnVuKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc2lnX3Vzcih2b2lkICpkYXRhLCBpbnQgdHlwZSwgdm9pZCAqZXZlbnQpCit7Cisg
ICAgRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIgKnNpZyA9IChFY29yZV9FdmVudF9TaWduYWxfVXNl
ciopZXZlbnQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKilkYXRhOworCisgICAgaWYgKHNpZy0+bnVtYmVyID09
IDIpIHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgICAgIHR1YyA9
IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Cisg
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgfQorCisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKHByaXYpOworICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9
CisjZW5kaWYKKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCAqbykKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2OworCisgICAgREJHKCJvPSVwIiwgbyk7CisKKyAgICBwcml2ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoKnByaXYpKSk7Cisg
ICAgaWYgKCFwcml2KQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5zZWxmID0gbzsKKyAg
ICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEuMDsKKyAgICBwcml2LT52aWV3LnRpbGUudyA9IERF
RkFVTFRfVElMRV9XOworICAgIHByaXYtPnZpZXcudGlsZS5oID0gREVGQVVMVF9USUxFX0g7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IDA7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQub2xkLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2Uu
Y29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7CisgICAgcHJpdi0+bW9kZWwu
Y3VyLmNvbHMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKKyAgICBwcml2LT5t
b2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAwOworICAgIHBy
aXYtPm1vZGVsLndpZHRoID0gMDsKKyAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSAwOworICAgIHBy
aXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKKyAgICBwcml2LT5jc3BhY2UgPSBFVkFT
X0NPTE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KKworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHByaXYpOworICAgIF9wYXJlbnRfc2MuYWRkKG8pOworCisg
ICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoCisg
ICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pKTsKKyAgICBldmFzX29iamVjdF9tb3ZlKHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2
LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC53
aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9zZXQocHJp
di0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwgMjU1KTsKKyAgICBldmFzX29iamVj
dF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21l
bWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbyk7CisKKyAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCAwKTsKKyAgICBldmFzX29iamVj
dF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfcmVzaXpl
KHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfY2xpcF9zZXQocHJp
di0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsKKworI2lmZGVmIERFQlVH
X01FTV9MRUFLUworICAgIHByaXYtPnNpZ191c3IgPSBlY29yZV9ldmVudF9oYW5kbGVyX2FkZAor
ICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zaWdfdXNyLCBwcml2KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIERCRygibz0lcCIsIG8pOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5sb2NrX2FyZWEodHVjKTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChw
cml2KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3Rf
Zmx1c2gocHJpdik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdG9wKHByaXYpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3Nf
YWxsX2RlbChwcml2KTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworICAgIGlmIChwcml2LT5zaWdfdXNyKQorICAg
ICAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9kZWwocHJpdi0+c2lnX3Vz
cik7CisjZW5kaWYKKworICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJp
eCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c19jbGlw
cGVyKTsKKyAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisKKyAg
ICBfcGFyZW50X3NjLmRlbChvKTsKKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50
ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RPUkUgREVMRVRFRCAobWF5IGJlIHJlYWwg
bGVha3MpXG4iKTsKKyAgICBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpOworI2VuZGlmCit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2Jq
ZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBEQkcoIm89JXAsIG5l
dyBwb3M6ICVkeCVkIiwgbywgeCwgeSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKKworICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHByaXYtPnZpZXcueSA9PSB5KQorICAgICAg
ICByZXR1cm47CisKKyAgICBwcml2LT5jaGFuZ2VkLnBvcyA9IEVJTkFfVFJVRTsKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19D
b29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgREJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQi
LCBvLCB3LCBoKTsKKworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisg
ICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHBy
aXYtPnZpZXcudyA9PSB3ICYmIHByaXYtPnZpZXcuaCA9PSBoKQorICAgICAgICByZXR1cm47CisK
KyAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nv
b3JkIHRoKQoreworICAgIGxvbmcgY29scywgcm93cywgb2xkX3Jvd3MsIG9sZF9jb2xzOworICAg
IElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgdywgaCk7CisKKyAgICBj
b2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChmbG9hdCl0dyk7CisgICAgcm93cyA9IDEg
KyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgpOworCisgICAgSU5GKCJvPSVwIG5ldyBn
cmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQsIHdhcyAlbGQsICVsZCIsCisgICAgICAgIHBy
aXYtPnNlbGYsIGNvbHMsIHJvd3MsIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsK
KworICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29scyAmJiBwcml2LT52aWV3LnJvd3MgPT0g
cm93cykKKyAgICAgICAgcmV0dXJuOworCisgICAgb2xkX2NvbHMgPSBwcml2LT52aWV3LmNvbHM7
CisgICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7CisKKyAgICBpZiAocm93cyA8IG9sZF9y
b3dzKSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgICAgICBzdGFy
dCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0
ZW1zICsgb2xkX3Jvd3M7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jv
d3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOworICAgIH0KKworICAgIHZvaWQqIG5ld0l0
ZW1zID0gcmVhbGxvYyhwcml2LT52aWV3Lml0ZW1zLCBzaXplb2YoRWluYV9Jbmxpc3QqKSAqIChp
bnQpcm93cyk7CisgICAgaWYgKCFuZXdJdGVtcykKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJp
di0+dmlldy5pdGVtcyA9IHN0YXRpY19jYXN0PEVpbmFfSW5saXN0Kio+KG5ld0l0ZW1zKTsKKyAg
ICBwcml2LT52aWV3LnJvd3MgPSByb3dzOworICAgIHByaXYtPnZpZXcuY29scyA9IGNvbHM7Cisg
ICAgaWYgKHJvd3MgPiBvbGRfcm93cykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAq
KmVuZDsKKyAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAg
ICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAgICAgIEVpbmFfQm9vbCByOworICAgICAgICAgICAg
KnN0YXJ0ID0gMDsKKyAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19jb2xzX2VuZF9hZGQKKyAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOwor
ICAgICAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0
byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMpOworICAgICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsCisgICAgICAgICAgICAgICAgICAg
IChwcml2LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0YXJ0KTsKKyAgICAgICAgICAg
ICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRfcm93czsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY29scyAhPSBvbGRf
Y29scykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICAgICAgaW50
IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CisgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVt
czsKKyAgICAgICAgZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywgcm93cyk7CisgICAg
ICAgIGlmICh0b2RvID4gMCkgeworICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFy
dCsrKSB7CisgICAgICAgICAgICAgICAgRWluYV9Cb29sIHI7CisgICAgICAgICAgICAgICAgciA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAorICAgICAgICAgICAg
ICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIXIpIHsKKyAgICAgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0
ZSAlZCBjb2x1bW5zISIsIHRvZG8pOworCisgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhcnQt
LTsgc3RhcnQgPj0gcHJpdi0+dmlldy5pdGVtczsgc3RhcnQtLSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBz
dGFydCwgdG9kbyk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9y
b3dzOworICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJv
d3M7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0Kysp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHRvZG8gPCAwKSB7CisgICAgICAgICAgICB0b2Rv
ID0gLXRvZG87CisgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCisgICAg
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHBy
aXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIHcsIGgpOworCisgICAgcHJpdi0+
dmlldy53ID0gdzsKKyAgICBwcml2LT52aWV3LmggPSBoOworCisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCisgICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZp
ZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7Cit9CisKKy8vIFRPRE86IHJlbW92ZSBtZSBs
YXRlci4KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19k
YmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFaW5h
X0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICBwcmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9k
ZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNsZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9s
ZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIsCisgICAgICAgICAgIHByaXYtPnZpZXcuY29s
cywgcHJpdi0+dmlldy5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJp
di0+bW9kZWwuY3VyLnJvd3MsCisgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5t
b2RlbC5oZWlnaHQsCisgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2Rl
bC5iYXNlLnJvdywKKyAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55LAorICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCwgcHJp
di0+dmlldy5vZmZzZXQub2xkLnksCisgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsKKworICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5p
dGVtczsKKyAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOworICAg
IGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgeworICAgICAgICBjb25zdCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdDsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpz
dGFydCwgaXQpIHsKKyAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0
cnkueCwgaXQtPmdlb21ldHJ5LnkpOworCisgICAgICAgICAgICBpZiAoIWl0LT50aWxlKQorICAg
ICAgICAgICAgICAgIHByaW50ZigiICAgICAgICAgICAgOyIpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVsdSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxl
LT5jb2wsIGl0LT50aWxlLT5yb3cpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiXG4iKTsK
KyAgICB9CisgICAgcHJpbnRmKCItLS1cbiIpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
TW92ZSB0b3Agcm93IGRvd24gYXMgbGFzdC4KKyAqCisgKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZp
c3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSB0b3AgdGhhdAorICogd2VudCBvdXQg
b2Ygc2NyZWVuIGlzIG5vdyBhdCBib3R0b20gYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVt
cy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRo
YW4gQGMKKyAqIHByaXYtPnZpZXcucm93cywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRo
ZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxs
LgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUg
cHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHVuc2lnbmVkIGludCBs
YXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYt
PnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAg
ICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0
aDsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCAr
IG9mZl95OworICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisKKyAgICBp
dHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBs
YXN0X3JvdzsKKworICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKyAgICAgICAgRWlu
YV9Jbmxpc3QgKippdHI7CisgICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0Owor
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19D
b29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgICAgIGludCBjID0g
MDsKKworICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKysp
CisgICAgICAgICAgICAqaXRyID0gKihpdHIgKyAxKTsKKyAgICAgICAgKml0ciA9IHRtcDsKKwor
ICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysrOworICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKHRtcCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsK
KyAgICAgICAgICAgIGMrKzsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7Cit9CisKKy8qKgorICogQGludGVy
bmFsCisgKiBNb3ZlIGJvdHRvbSByb3cgdXAgYXMgZmlyc3QuCisgKgorICogVGhlIGZpbmFsIHJl
c3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgYm90dG9tIHRoYXQK
KyAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgdG9wIGFuZCBmaWxsZWQgd2l0aCBuZXcg
bW9kZWwgaXRlbXMuCisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMg
c21hbGxlciB0aGFuIEBjCisgKiBwcml2LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJl
ZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBm
dWxsIHJlZmlsbC4KKyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byBy
ZXBlYXQgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIEV2
YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJp
di0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSAtIGNvdW50ICogdGg7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyBvZmZfeSArIChj
b3VudCAtIDEpICogdGg7CisgICAgRWluYV9Jbmxpc3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsK
KworICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAx
OworICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0ZW1zOworCisgICAgZm9yICg7IGNvdW50ID4g
MDsgY291bnQtLSkgeworICAgICAgICBFaW5hX0lubGlzdCAqKml0cjsKKyAgICAgICAgRWluYV9J
bmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKKyAgICAgICAgaW50IGMgPSAwOworCisgICAgICAgIGZvciAoaXRyID0gaXRyX3N0
YXJ0OyBpdHIgPiBpdHJfZW5kOyBpdHItLSkKKyAgICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEp
OworICAgICAgICAqaXRyID0gdG1wOworCisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godG1wLCBpdCkgeworICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAg
IG94ICs9IHR3OworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdCwgYywgMCk7CisgICAgICAgICAgICBjKys7CisgICAgICAgIH0KKyAgICAgICAg
b3kgLT0gdGg7CisgICAgfQorICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95Owor
fQorCisvKioKKyAqIEBpbnRlcm5hbAorICogTW92ZSBsZWZ0LW1vc3QgKGZpcnN0KSBjb2x1bW4g
cmlnaHQgYXMgbGFzdCAocmlnaHQtbW9zdCkuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2
aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgZmlyc3QgY29sIHRoYXQKKyAqIHdl
bnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgbGFzdCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVs
IGl0ZW1zLgorICoKKyAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxs
ZXIgdGhhbiBAYworICogcHJpdi0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxp
bmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCBy
ZWZpbGwuCisgKgorICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0
IHRoZSBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25l
ZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2LT52aWV3LmNvbHMgLSAxOworICAgIEV2YXNfQ29vcmQg
dHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50
aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAr
IGNvdW50ICogdHc7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnk7CisgICAgRWluYV9Jbmxpc3QgKippdHI7CisgICAgRWluYV9Jbmxpc3QgKippdHJfZW5k
OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0g
Y291bnQ7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAg
ICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2NvbCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94
OworICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGxhc3RfY29sIC0gY291bnQgKyAxOworCisg
ICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjKyssIG94ICs9IHR3KSB7CisgICAg
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgICAgIGl0
ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgqaXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKTsKKyAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0
cik7CisKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxs
KHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisK
KyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKK30KKworLyoqCisgKiBAaW50
ZXJuYWwKKyAqIE1vdmUgcmlnaHQtbW9zdCAobGFzdCkgY29sdW1uIGxlZnQgYXMgZmlyc3QgKGxl
ZnQtbW9zdCkuCisgKgorICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwg
YnV0IGxvZ2ljYWxseSB0aGUgbGFzdCBjb2wgdGhhdAorICogd2VudCBvdXQgb2Ygc2NyZWVuIGlz
IG5vdyBhdCBmaXJzdCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgorICoKKyAqIFRo
aXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYworICogcHJp
di0+dmlldy5jb2xzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJp
eCBzbyBpdAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCisgKgorICogQHBh
cmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgorICov
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgdW5zaWduZWQgaW50IHI7CisgICAgRXZh
c19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2
LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54IC0gY291bnQgKiB0dzsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworCisgICAg
aXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5y
b3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7CisK
KyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFdmFzX0Nv
b3JkIG94ID0geCArIChjb3VudCAtIDEpICogdHcgKyBvZmZfeDsKKyAgICAgICAgdW5zaWduZWQg
aW50IGksIGMgPSBjb3VudCAtIDE7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyssIGMtLSwgb3ggLT0gdHcpIHsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgq
aXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgICAgICAq
aXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOworCisgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgaW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKK3sK
KyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV2YXNfQ29vcmQgYmFzZV9v
eCwgb3ksIHR3LCB0aDsKKyAgICB1bnNpZ25lZCBpbnQgcjsKKworICAgIGV2YXNfb2JqZWN0X21v
dmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxl
Lnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIGJhc2Vfb3ggPSB4ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciAr
IHByaXYtPnZpZXcucm93czsKKyAgICByID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
IC09IHN0ZXBfeDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyAtPSBzdGVwX3k7CisKKyAgICBm
b3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgeworICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgq
aXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgYysrOworICAgICAgICAgICAgb3gg
Kz0gdHc7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gs
IG95LCB0dywgdGg7CisKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwg
eCwgeSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmg7CisKKyAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsK
KyAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisKKyAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAg
Zm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAg
ICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIG94ICs9
IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30KKworc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2Uo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBFdmFzX0Nvb3JkIGR4
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKKyAg
ICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9m
ZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBpbnQgc3RlcF95LCBzdGVw
X3g7CisKKyAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAor
ICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnggLyB0dzsKKyAgICBzdGVwX3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAt
IG5ld19jb2w7CisgICAgbG9uZyBuZXdfcm93ID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8g
dGg7CisgICAgc3RlcF95ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuZXdfcm93OworCisgICAg
cHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgIGV2
YXNfb2JqZWN0X21vdmUoCisgICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAorICAgICAgICBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CisKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3JlZmlsbAorICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0
ZXBfeCwgc3RlcF95KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgRXZhc19Db29yZCBkeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7CisgICAgRXZh
c19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnk7CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgaW50IHN0ZXBfeSwgc3RlcF94Owor
CisgICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKKyAgICAg
ICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkpOworCisgICAgaWYgKCFkeCAmJiAhZHkpCisgICAgICAgIHJldHVybjsK
KworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKKworICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3Owor
ICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKKyAgICBsb25nIG5l
d19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0aDsKKyAgICBzdGVwX3kgPSBwcml2
LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAg
ICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnggKyBwcml2LT52aWV3LngsCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJp
di0+dmlldy55KTsKKworICAgIGlmICgoc3RlcF94IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZp
ZXcuY29scykKKyAgICAgICAgfHwgKHN0ZXBfeCA+IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcu
Y29scykKKyAgICAgICAgfHwgKHN0ZXBfeSA8IDAgJiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJv
d3MpCisgICAgICAgIHx8IChzdGVwX3kgPiAwICYmIHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3Mp
KSB7CisKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICog
dHc7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRo
OworCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAorICAgICAg
ICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
Kz0gZHg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5OworCisgICAgaWYgKHN0
ZXBfeSA8IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAo
cHJpdiwgeCwgeSwgLXN0ZXBfeSk7CisgICAgZWxzZSBpZiAoc3RlcF95ID4gMCkKKyAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBf
eSk7CisKKyAgICBpZiAoc3RlcF94IDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHksIC1zdGVwX3gpOworICAgIGVsc2UgaWYgKHN0
ZXBfeCA+IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmln
aHQocHJpdiwgeCwgeSwgc3RlcF94KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOworICAgIHByaXYtPnZp
ZXcueCA9IHg7CisgICAgcHJpdi0+dmlldy55ID0geTsKKyAgICBldmFzX29iamVjdF9tb3ZlKAor
ICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
KyBwcml2LT52aWV3LnkpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sK
KyAgICBFaW5hX0lubGlzdCAqaXQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXRlbTsKKyAgICBpbnQgaSwgajsKKworICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJv
d3M7IGkrKykgeworICAgICAgICBpdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CisgICAgICAgIGog
PSAwOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZShFdmFzX09iamVjdCAqbykKK3sKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisK
KyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgJngsICZ5LCAmdywgJmgpOworICAgIERC
Rygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgbywgeCwgeSwgdywgaCk7CisKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlO
QV9GQUxTRTsKKworICAgIGV3a190aWxlX21hdHJpeF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4
KTsKKworICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2Rl
bCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisKKyAgICAgICAgY29scyA9
IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLncgKyAxOworICAgICAgICByb3dz
ID0gcHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmggKyAxOworCisgICAgICAg
IHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+bW9kZWwuY3VyLmNvbHM7CisgICAgICAgIHBy
aXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VyLnJvd3M7CisgICAgICAgIHByaXYt
Pm1vZGVsLmN1ci5jb2xzID0gY29sczsKKyAgICAgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSBy
b3dzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLmNvbHMgPiBjb2xzKQorICAgICAgICAg
ICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwu
b2xkLnJvd3MgPiByb3dzKQorICAgICAgICAgICAgcm93cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dz
OworICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29s
cywgcm93cyk7CisgICAgfQorCisgICAgaWYgKHByaXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52
aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0geSkpIHsKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MocHJpdiwgeCwgeSk7CisgICAgICAgIHBy
aXYtPmNoYW5nZWQucG9zID0gRUlOQV9GQUxTRTsKKyAgICB9CisgICAgaWYgKHByaXYtPmNoYW5n
ZWQub2Zmc2V0KSB7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGVfb2Zmc2V0KHByaXYsIHgsIHkpOworICAgICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9
IEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkgeworICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwg
dywgaCk7CisgICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CisgICAgfQor
CisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7
CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7CisgICAgICAgIHJlY3QueCA9IDA7CisgICAg
ICAgIHJlY3QueSA9IDA7CisgICAgICAgIHJlY3QudyA9IHByaXYtPm1vZGVsLndpZHRoOworICAg
ICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWlnaHQ7CisgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4
X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC5jdXIuY29scywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1v
ZGVsLmN1ci5yb3dzKTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7
CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2
LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UocHJpdik7CisKKyAgICAg
ICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBieQor
ICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAqLworICAgICAgICBjb25z
dCBFaW5hX1JlY3RhbmdsZSByID0KKyAgICAgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lk
dGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OworICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRl
KHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpdi0+dmlldy50aWxlLnpvb20pOworICAgIH0KKworICAgIGV3a190aWxlX21hdHJpeF90aGF3
KHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlc19wcm9jZXNzKHByaXYpOworCisgICAgaWYgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+
IDAKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50
aWxlLncKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID4gMAorICAgICAgICB8
fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0gLSBwcml2LT52aWV3LnRpbGUuaCkKKyAgICAg
ICAgRVJSKCJpbmNvcnJlY3QgYmFzZSBvZmZzZXQgJSs0ZCwlKzRkLCB0aWxlPSVkeCVkLCBjdXI9
JSs0ZCwlKzRkXG4iLAorICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnksCisgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUudywgcHJp
di0+dmlldy50aWxlLmgsCisgICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkpOworCit9CisKK0V2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9hZGQoRXZhcyAqZSkKK3sKKyAgICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQg
PSAwOworCisgICAgaWYgKF9ld2tfdGlsZWRfbG9nX2RvbSA8IDApCisgICAgICAgIF9ld2tfdGls
ZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFpbl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmUiLCAwKTsKKworICAgIGlmICghc21hcnQpIHsKKyAgICAgICAgc3RhdGljIEV2YXNfU21h
cnRfQ2xhc3Mgc2MgPQorICAgICAgICAgICAgRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVS
U0lPTigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiKTsKKworICAgICAgICBldmFzX29iamVjdF9z
bWFydF9jbGlwcGVkX3NtYXJ0X3NldCgmc2MpOworICAgICAgICBfcGFyZW50X3NjID0gc2M7CisK
KyAgICAgICAgc2MuYWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZDsKKyAg
ICAgICAgc2MuZGVsID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbDsKKyAgICAg
ICAgc2MucmVzaXplID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZTsKKyAg
ICAgICAgc2MubW92ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlOworICAg
ICAgICBzYy5jYWxjdWxhdGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3Vs
YXRlOworICAgICAgICBzYy5tZW1iZXJfYWRkID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X21lbWJlcl9hZGQ7CisgICAgICAgIHNjLm1lbWJlcl9kZWwgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbDsKKworICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRf
Y2xhc3NfbmV3KCZzYyk7CisgICAgfQorCisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChlLCBzbWFydCk7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2Ni
X3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxl
ICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSksIGNvbnN0IHZvaWQgKmRhdGEpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2IpOworICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOworICAgIHByaXYtPnJlbmRlci5jYiA9IGNiOworICAgIHByaXYtPnJl
bmRlci5kYXRhID0gKHZvaWQqKWRhdGE7Cit9CisKK0V3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIDApOworICAg
IHJldHVybiBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hl
X3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAoZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCisgICAgICAg
IHJldHVybjsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3Jl
YXRlKHByaXYsIHR1Yyk7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7CisgICAgLyog
VE9ETzogY2hlY2sgb2Zmc2V0IGdvIG91dCBvZiBib3VuZHMsIGNsYW1wICovCisgICAgaWYgKHBy
aXYtPnJlbmRlci5kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCA9IHg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
PSB5OworCisgICAgcHJpdi0+Y2hhbmdlZC5vZmZzZXQgPSBFSU5BX1RSVUU7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CisKKyAgICByZXR1cm4gRUlOQV9UUlVF
OworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zm
c2V0X3NldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgREJHKCJvPSVwLCB4PSVkLCB5PSVkIiwgbywgeCwgeSk7CisKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoeCA9PSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCAmJiB5ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQorICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworCisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
Y3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKHByaXYsIHgsIHkpOworfQorCitFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSkKK3sKKyAgICBEQkcoIm89JXAs
IGR4PSVkLCBkeT0lZCIsIG8sIGR4LCBkeSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoIWR4ICYmICFkeSkKKyAgICAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKKworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbAorICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnggKyBkeCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7Cit9CisKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5
KQoreworICAgICpvZmZ4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgKm9mZnkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueTsKKworICAgIGlmIChmYWJzZihwcml2LT52aWV3LnRpbGUu
em9vbSAtICp6b29tKSA8IFpPT01fU1RFUF9NSU4pIHsKKyAgICAgICAgREJHKCJpZ25vcmVkIGFz
IHpvb20gZGlmZmVyZW5jZSBpcyA8ICVmOiAlZiIsCisgICAgICAgICAgICAoZG91YmxlKVpPT01f
U1RFUF9NSU4sIGZhYnNmKHByaXYtPnZpZXcudGlsZS56b29tIC0gKnpvb20pKTsKKyAgICAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOworICAgIEV2YXNfQ29vcmQgdHcsIHRoOwor
CisgICAgKnpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncsICp6b29tKTsKKwor
ICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsK
KworICAgIGZsb2F0IHNjYWxlID0gKnpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKKworICAg
IHByaXYtPnZpZXcudGlsZS56b29tID0gKnpvb207CisgICAgLy8gdG9kbzogY2hlY2sgY3ggWzAs
IHddLi4uCisgICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OworICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnkgPSBjeTsKKworCisgICAgaWYgKCFwcml2LT52
aWV3LncgfHwgIXByaXYtPnZpZXcuaCkgeworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggPSAwOworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOworICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5k
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworCisgICAgRXZhc19Db29y
ZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Cisg
ICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kp
ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBieCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCAtIGN4KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgYnkgPSBjeSArIChwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgLSBjeSkgKiBzY2FsZTsKKworICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lk
dGggPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVp
Z2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CisKKyAgICBpZiAobW9kZWxfd2lkdGgg
PCBwcml2LT52aWV3LncgfHwgbmV3X3ggPj0gMCkKKyAgICAgICAgbmV3X3ggPSAwOworICAgIGVs
c2UgaWYgKC1uZXdfeCArIHByaXYtPnZpZXcudyA+PSBtb2RlbF93aWR0aCkKKyAgICAgICAgbmV3
X3ggPSAtbW9kZWxfd2lkdGggKyBwcml2LT52aWV3Lnc7CisKKyAgICBpZiAobW9kZWxfaGVpZ2h0
IDwgcHJpdi0+dmlldy5oIHx8IG5ld195ID49IDApCisgICAgICAgIG5ld195ID0gMDsKKyAgICBl
bHNlIGlmICgtbmV3X3kgKyBwcml2LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0KQorICAgICAgICBu
ZXdfeSA9IC1tb2RlbF9oZWlnaHQgKyBwcml2LT52aWV3Lmg7CisKKyAgICBieCA9IG5ld194ICUg
dHc7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtIG5ld194IC8gdHc7CisgICAgYnkgPSBu
ZXdfeSAlIHRoOworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLSBuZXdfeSAvIHRoOworCisg
ICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJp
dik7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OworICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0g
Yng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisKKyAgICBwcml2LT52aWV3
Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIHByaXYtPnZpZXcu
b2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgKm9mZnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
OworCisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCisgICAgICAgIG5ld195ICsgcHJpdi0+
dmlldy55KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhw
cml2KTsKKworICAgIEV2YXNfQ29vcmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBw
cml2LT52aWV3Lnk7CisgICAgRXZhc19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAg
ICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9yICg7IGl0ciA8IGl0
cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OworICAgICAg
ICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KGxzdCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21v
dmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9yZXNpemUoaXQsIHR3LCB0aCk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgfQor
ICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitF
aW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QgKm8s
IGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpv
ZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQoreworICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChk
b3VibGUpKnpvb20pOworCisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlO
QV9GQUxTRSk7CisKKyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0
X2ludGVybmFsKHByaXYsIHpvb20sIGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Cit9CisKK0VpbmFfQm9v
bCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBm
bG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQoreworICAgIERCRygibz0l
cCwgem9vbT0lZiIsIG8sIChkb3VibGUpem9vbSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYt
PnZpZXcuaCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgRWluYV9Jbmxpc3QgKipp
dHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAg
ICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsK
KworICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOworCisgICAg
dHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUudywgc2NhbGUpOworICAgIHNj
YWxlID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGlsZS53KTsKKyAgICB0aCA9
IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCBzY2FsZSk7CisgICAgem9vbSA9
IHNjYWxlICogcHJpdi0+dmlldy50aWxlLnpvb207CisKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3dp
ZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX2hl
aWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOworCisgICAgZXZhc19vYmplY3RfcmVz
aXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOwor
CisgICAgaW50IHZyb3dzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSAr
IDE7CisgICAgaW50IHZjb2xzID0gY2VpbCgoZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3
KSArIDE7CisgICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC0gY3gpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBieCA9IG5ld194
ICUgdHc7CisgICAgRXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7CisgICAgdW5zaWduZWQgbG9u
ZyBiYXNlX3JvdyA9IC1uZXdfeSAvIHRoOworICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAt
bmV3X3ggLyB0dzsKKworICAgIGlmIChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8
fCBiYXNlX2NvbCAhPSBwcml2LT5tb2RlbC5iYXNlLmNvbCkgeworICAgICAgICBwcml2LT5tb2Rl
bC5iYXNlLnJvdyA9IGJhc2Vfcm93OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJh
c2VfY29sOworICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7CisgICAgfQorCisgICAgaWYgKHZy
b3dzID4gcHJpdi0+dmlldy5yb3dzIHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQorICAgICAg
ICByZWNhbGMgPSBFSU5BX1RSVUU7CisKKyAgICBpZiAocmVjYWxjKSB7CisgICAgICAgIEV2YXNf
Q29vcmQgdywgaDsKKyAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIDAsIDAsICZ3
LCAmaCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJz
KHByaXYsIHcsIGgsIHR3LCB0aCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9m
aWxsX3JlbmRlcmVycyhwcml2KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Vw
ZGF0ZXNfcHJvY2Vzcyhwcml2KTsKKyAgICB9CisKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBi
eCArIHByaXYtPnZpZXcueDsKKyAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7
CisKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAg
ICAgICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAg
IG5ld195ICsgcHJpdi0+dmlldy55KTsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Cisg
ICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKworICAgIGZvciAoOyBpdHIgPCBp
dHJfZW5kOyBpdHIrKykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAg
ICAgRWluYV9Jbmxpc3QgKmxzdCA9ICppdHI7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFD
SChsc3QsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9t
b3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIH0K
KyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwor
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55OworICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lng7CisgICAgRXZhc19Db29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBF
dmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZhc19Db29yZCB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworCisgICAgaWYgKC1uZXdfeCA+IHcpIHsKKyAgICAgICAgbmV3X3gg
PSAtdzsKKyAgICAgICAgYnggPSBuZXdfeCAlIHR3OworICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbCA9IC1uZXdfeCAvIHR3OworICAgIH0KKworICAgIGlmICgtbmV3X3kgPiBoKSB7CisgICAg
ICAgIG5ld195ID0gLWg7CisgICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICB9CisKKyAgICBpZiAoYnggPj0gMCB8
fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53KSB7CisgICAgICAgIGJ4ID0gbmV3X3ggJSB0
dzsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKKyAgICB9CisK
KyAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oKSB7CisgICAg
ICAgIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3
X3kgLyB0aDsKKyAgICB9CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194Owor
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnggPSBuZXdfeDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195Owor
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJ4OworICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSA9IGJ5OworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgICAgICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAorICAgICAgICAg
ICAgICAgICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOworCisgICAgRXZhc19Db29yZCBveSA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3Jk
IGJhc2Vfb3ggPSBwcml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisKKyAg
ICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3
LnJvd3M7CisKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXZh
c19Db29yZCBveCA9IGJhc2Vfb3g7CisgICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwor
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgeworICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKKyAgICAg
ICAgICAgIG94ICs9IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KK30K
Kwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3Nl
dChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3sKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJf
ZW5kOworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsg
cHJpdi0+dmlldy5yb3dzOworICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3Nj
YWxlID0gc21vb3RoX3NjYWxlOworCisgICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsK
KyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpCisgICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAg
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3Nl
dAorICAgICAgICAgICAgICAgICAgICAoaXQsIHNtb290aF9zY2FsZSk7CisgICAgfQorfQorCitF
aW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworCisgICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxl
ZCkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICByZXR1cm4gZXdrX3RpbGVfbWF0
cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsIHVwZGF0ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUuem9vbSk7Cit9CisKK3ZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QgKm8s
IHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0
YSkKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBwcml2LT5w
cm9jZXNzLnByZV9jYiA9IGNiOworICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCop
ZGF0YTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Nf
cG9zdF9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnBy
ZV9kYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0g
Y2I7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKK30KKwordm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8p
Cit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKK30KKwordm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgZXdrX3RpbGVfbWF0cml4X3Vw
ZGF0ZXNfY2xlYXIocHJpdi0+bW9kZWwubWF0cml4KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9jb250ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYpOworCisgICAgaWYgKHdpZHRoID09IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9
PSBwcml2LT5tb2RlbC5oZWlnaHQpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYtPm1vZGVs
LndpZHRoID0gd2lkdGg7CisgICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OworICAgIHBy
aXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7CisKKyAgICBEQkcoIndpZHRoLGhlaWdodD0l
ZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hh
bmdlZChwcml2KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91
cGRhdGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCit7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVu
ZGVyLmRpc2FibGVkKQorICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKK30K
Kwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKK3sK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YyA9IDA7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IDA7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwor
ICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IDA7CisgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1ci5y
b3dzID0gMTsKKyAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwu
b2xkLnJvd3MgPSAwOworICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUs
IFNUQVRVUyBCRUZPUkUgREVMRVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKKyAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2KTsKKyNlbmRpZgorCisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2KTsKKyAgICB0dWMgPSBl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOworCisjaWZkZWYgREVCVUdfTUVNX0xF
QUtTCisgICAgcHJpbnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJF
Q1JFQVRJTkcgVElMRSBNQVRSSVg6XG4iKTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
bWVtX2RiZyhwcml2KTsKKyNlbmRpZgorfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK3sKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFaW5h
X1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOworICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8g
KmluZm87CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWM7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmg7CisgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9v
bSk7CisKKyAgICBpZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5
LCB3LCBoLCB0dywgdGgpKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IHNldHVwIGdyaWQgc2xp
Y2VyIGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwKKyAgICAgICAgICAgIHgsIHksIHcsIGgs
IHR3LCB0aCk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIHdoaWxl
IChlaW5hX3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgbG9uZyBjID0gaW5mby0+Y29sOworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBsb25nIHIgPSBpbmZvLT5yb3c7CisgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJpdiwgYywgciwgem9vbSwgUFJFX1JFTkRFUl9Q
UklPUklUWV9MT1cpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKKworICAgIHR1
YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpv
b20pOworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5z
aWduZWQgaW50IG4sIGZsb2F0IHpvb20pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
bywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9y
b3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKKyAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YzsKKworICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBw
cml2LT52aWV3LnJvd3M9JWx1IiwKKyAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBu
LCBwcml2LT52aWV3LnJvd3MpOworICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVsLmJh
c2Uucm93IC0gbjsKKyAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNvbCAt
IG47CisgICAgZW5kX3JvdyA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1ci5yb3dzIC0gMSwKKyAg
ICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5yb3dzICsg
biAtIDEpOworICAgIGVuZF9jb2wgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIuY29scyAtIDEs
CisgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYtPnZpZXcuY29s
cyArIG4gLSAxKTsKKworICAgIElORigic3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0
X2NvbD0lbHUsIGVuZF9jb2w9JWx1IiwKKyAgICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3Rh
cnRfY29sLCBlbmRfY29sKTsKKworICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50
aWxlLncsIHpvb20pOworCisgICAgZm9yIChpID0gc3RhcnRfcm93OyBpIDw9IGVuZF9yb3c7IGkr
KykKKyAgICAgICAgZm9yIChqID0gc3RhcnRfY29sOyBqIDw9IGVuZF9jb2w7IGorKykKKyAgICAg
ICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9h
ZGQocHJpdiwgaiwgaSwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cpKQorICAgICAgICAg
ICAgICAgIGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKKworc3RhcnRfcHJvY2Vzc2luZzoKKyAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwor
CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKKyAgICBoID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0laRV9B
VF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCB6b29tKTsKKyAgICB3ID0gKGVuZF9jb2wgLSBzdGFy
dF9jb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsK
KyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywKKyAgICAgICAgICAgIHN0
YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKSwKKyAg
ICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5o
LCB6b29tKSwgdywgaCwgem9vbSk7CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpv
KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9jbGVhcihwcml2KTsKKworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHByaXYpOworfQorCitFaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKK3sKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKKyAgICByZXR1cm4gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIocHJpdik7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCmluZGV4IDQ2YWFhODM5MTIyZWU1
M2JhMTdkNTAwZjJlODA5ZjA5YjM4MThiZjIuLjMwMTAzZWQxZDMwZDY5ZDFiZjU1MjBkNDJlZjQ5
ZjczNThjNjRjMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZS5oCkBAIC00MiwxMCArNDIsNiBAQAogI2RlZmluZSBUSUxFX1pPT01fQVRfU0la
RShTSVpFLCBPUklHX1RJTEUpICgoZmxvYXQpKFNJWkUpIC8gKGZsb2F0KShPUklHX1RJTEUpKQog
I2RlZmluZSBST1VOREVEX1pPT00oU0laRSwgWk9PTSkgKChmbG9hdCkoU0laRSkgLyAoZmxvYXQp
KCgoaW50KXJvdW5kZigoU0laRSkgLyAoWk9PTSkpKSkpCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwot
ZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxjYWly
by5oPgogCkBAIC0xMjMsNyArMTE5LDQgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogbyk7CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7CiBFaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7Ci0j
aWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgogI2VuZGlmIC8vIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0
cml4LmMgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmY5Yzg0NDMwNTgyNzY5MjlkOTgwMjJlYzFjZGU2NzVj
MTQ1ZTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKKysrIC9kZXYvbnVsbApAQCAt
MSw2NDggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVs
ZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVk
IHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiZXdrX3RpbGVkX21h
dHJpeC5oIgotCi0jZGVmaW5lIF9HTlVfU09VUkNFCi0jaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuaCIKLSNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVp
bmEuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jaW5jbHVk
ZSA8bWF0aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCByZW1vdmUgbWUgbGF0ZXIKLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotc3RydWN0IF9Fd2tfVGls
ZV9NYXRyaXggewotICAgIEVpbmFfTWF0cml4c3BhcnNlICptYXRyaXg7Ci0gICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWM7Ci0gICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKLSAgICBzdHJ1
Y3QgewotICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBF
aW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKLSAgICAgICAgdm9pZCAqZGF0YTsKLSAgICB9IHJlbmRl
cjsKLSAgICB1bnNpZ25lZCBpbnQgZnJvemVuOwotICAgIEVpbmFfTGlzdCAqdXBkYXRlczsKLSAg
ICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7Ci0gICAgfSB0aWxlOwotI2lmZGVm
IERFQlVHX01FTV9MRUFLUwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHN0cnVjdCB7Ci0gICAgICAg
ICAgICB1aW50NjRfdCBhbGxvY2F0ZWQsIGZyZWVkOwotICAgICAgICB9IHRpbGVzLCBieXRlczsK
LSAgICB9IHN0YXRzOwotI2VuZGlmCi19OwotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1zdGF0
aWMgdWludDY0X3QgdGlsZXNfbGVha2VkID0gMDsKLXN0YXRpYyB1aW50NjRfdCBieXRlc19sZWFr
ZWQgPSAwOwotI2VuZGlmCi0KLS8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyByZXNpemVk
IG9yIGZyZWVkICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lk
ICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKLXsKLSAgICBFd2tfVGlsZV9NYXRyaXggKnRt
ID0gdXNlcl9kYXRhOwotICAgIEV3a19UaWxlICp0ID0gY2VsbF9kYXRhOwotCi0gICAgaWYgKCF0
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRt
LT50dWMpOwotCi0gICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0g
ICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7Ci0K
LSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgRVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2
aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCi0gICAgICAgICAgICBF
UlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIsIHQsIHRtLT50dWMp
OwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIERCRygidGlsZSBjZWxsIGRvZXMgbm90IGV4
aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0KTsKLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAg
ICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKLSAgICAgICAgICAg
IHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOwotI2VuZGlmCi0gICAgICAgICAgICBld2tfdGlsZV9m
cmVlKHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Ro
YXcodG0tPnR1Yyk7Ci19Ci0KLS8qIGNhbGxlZCB3aGVuIGNhY2hlIG9mIHVudXNlZCB0aWxlIGlz
IGZsdXNoZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0KQotewotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBkYXRhOwot
ICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0gCi0gICAgaWYgKCFlaW5hX21hdHJp
eHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxsKSkg
ewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRy
aXg/IExlYWtpbmcuLi4iLCB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
Y2VsbCkgewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRo
ZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBk
YXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQpOwotCi0gICAgLyogc2V0IHRv
IG51bGwgdG8gYXZvaWQgZG91YmxlIGZyZWUgKi8KLSAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxs
X2RhdGFfcmVwbGFjZShjZWxsLCBOVUxMLCBOVUxMKTsKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9j
ZWxsX2NsZWFyKGNlbGwpOwotCi0gICAgaWYgKEVJTkFfVU5MSUtFTFkoISF0LT52aXNpYmxlKSkg
ewotICAgICAgICBFUlIoImNhY2hlIG9mIHVudXNlZCB0aWxlcyByZXF1ZXN0aW5nIGRlbGV0aW9u
IG9mIHVzZWQgdGlsZSAlcD8gIgotICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0KTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRtLT5zdGF0
cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKLSAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsK
LSNlbmRpZgotCi0gICAgZXdrX3RpbGVfZnJlZSh0KTsKLX0KLQotLyoqCi0gKiBDcmVhdGVzIGEg
bmV3IG1hdHJpeCBvZiB0aWxlcy4KLSAqCi0gKiBUaGUgdGlsZSBtYXRyaXggaXMgcmVzcG9uc2li
bGUgZm9yIGtlZXBpbmcgdGlsZXMgYXJvdW5kIGFuZAotICogcHJvdmlkaW5nIGZhc3QgYWNjZXNz
IHRvIHRoZW0uIE9uZSBjYW4gdXNlIGl0IHRvIHJldHJpZXZlIG5ldyBvcgotICogZXhpc3Rpbmcg
dGlsZXMgYW5kIGdpdmUgdGhlbSBiYWNrLCBhbGxvd2luZyB0aGVtIHRvIGJlCi0gKiBmcmVlZC9y
ZXBsYWNlZCBieSB0aGUgY2FjaGUuCi0gKgotICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMgb3IgQGMgTlVMTCB0byBjcmVhdGUgb25lCi0gKiAgICAgICAgYXV0b21hdGljYWxseS4K
LSAqIEBwYXJhbSBjb2xzIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCi0gKiBAcGFy
YW0gcm93cyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LgotICogQHBhcmFtIGNzcGFjZSB0
aGUgY29sb3Igc3BhY2UgdXNlZCB0byBjcmVhdGUgdGlsZXMgaW4gdGhpcyBtYXRyaXguCi0gKiBA
cGFyYW0gcmVuZGVyX2NiIGZ1bmN0aW9uIHVzZWQgdG8gcmVuZGVyIGdpdmVuIHRpbGUgdXBkYXRl
LgotICogQHBhcmFtIHJlbmRlcl9kYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNrIHRvIEBhIHJlbmRl
cl9jYi4KLSAqCi0gKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBpbnN0YW5jZSBvbiBzdWNjZXNz
LCBAYyBOVUxMIG9uIGZhaWx1cmUuCi0gKi8KLUV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0
cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjb2xzLCB1
bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UsIHZvaWQgKCpyZW5kZXJf
Y2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRl
KSwgY29uc3Qgdm9pZCAqcmVuZGVyX2RhdGEpCi17Ci0gICAgRXdrX1RpbGVfTWF0cml4ICp0bTsK
LQotICAgIENBTExPQ19PUl9PT01fUkVUKHRtLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSwgTlVM
TCk7Ci0KLSAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3MsIGNvbHMs
IF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7Ci0gICAgaWYgKCF0bS0+bWF0cml4KSB7
Ci0gICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4LiIpOwotICAgICAg
ICBmcmVlKHRtKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKHR1YykK
LSAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodHVjKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5NjAw
MDApOwotICAgICAgICBpZiAoIXRtLT50dWMpIHsKLSAgICAgICAgICAgIEVSUigibm8gY2FjaGUg
b2YgdW51c2VkIHRpbGUhIik7Ci0gICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRt
LT5tYXRyaXgpOwotICAgICAgICAgICAgZnJlZSh0bSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVM
TDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7Ci0gICAgdG0t
PnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKLSAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKXJl
bmRlcl9kYXRhOwotICAgIHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAgICB0bS0+dGls
ZS5oID0gREVGQVVMVF9USUxFX0g7Ci0KLSAgICByZXR1cm4gdG07Ci19Ci0KLS8qKgotICogRGVz
dHJveXMgdGlsZXMgbWF0cml4LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KLSAqCi0gKiBUaGUg
Y2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgotICov
Ci12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0jaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwotI2VuZGlmCi0K
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKLQotICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0t
Pm1hdHJpeCk7Ci0KLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodG0tPnR1Yyk7Ci0KLSNpZmRlZiBERUJVR19N
RU1fTEVBS1MKLSAgICB0aWxlcyA9IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQ7Ci0gICAgYnl0ZXMgPSB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLmJ5dGVzLmZyZWVkOwotCi0gICAgdGlsZXNfbGVha2VkICs9IHRpbGVzOwotICAg
IGJ5dGVzX2xlYWtlZCArPSBieXRlczsKLQotICAgIGlmICh0aWxlcyB8fCBieXRlcykKLSAgICAg
ICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6
JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSIsCi0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsIHRpbGVzLAotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7Ci0gICAgZWxzZSBpZiAodGlsZXNf
bGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKLSAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5v
IGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCi0gICAgICAg
ICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwKLSAgICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKLSAgICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKLSAg
ICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKLSAgICBlbHNlCi0gICAgICAg
IElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdIiwKLSAgICAg
ICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwK
LSAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCk7Ci0jZW5kaWYKLQotICAgIGZyZWUodG0pOwotfQotCi0vKioKLSAqIFJlc2l6ZSBtYXRy
aXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCi0gKi8KLXZvaWQgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
bSk7Ci0gICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQodG0tPm1hdHJpeCwgcm93cywgY29s
cyk7Ci19Ci0KLS8qKgotICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgaW4gdXNlIGJ5
IGdpdmVuIG1hdHJpeC4KLSAqCi0gKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hl
LgotICovCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCBOVUxMKTsKLSAgICByZXR1cm4gdG0tPnR1YzsKLX0KLQotLyoq
Ci0gKiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4K
LSAqCi0gKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhl
IGNhY2hlLgotICoKLSAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBiYWNrIHVzaW5nCi0g
KiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4gSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBp
ZiBpdCBleGlzdHMsCi0gKiB0aGVuIHVzZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlz
dHMoKS4KLSAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxlIGZyb20u
Ci0gKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHJvdyB0aGUgcm93
IG51bWJlci4KLSAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KLSAqCi0gKiBA
cmV0dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIE5VTEwgaWYgbm9uZSBpcyBmb3VuZC4gSWYg
dGhlIHRpbGUKLSAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2lsbCBiZSBA
YiByZW1vdmVkICh0aHVzCi0gKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9uZSBzaG91
bGQgZ2l2ZSBpdCBiYWNrIHdpdGgKLSAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0
KCkgYWZ0ZXJ3YXJkcy4KLSAqCi0gKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dl
dCgpCi0gKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1Rp
bGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9h
dCB6b29tKQotewotICAgIEV3a19UaWxlICp0OwotICAgIHQgPSBlaW5hX21hdHJpeHNwYXJzZV9k
YXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOwotICAgIGlmICghdCkKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAodC0+em9vbSA9PSB6b29tKQotICAgICAgICBnb3RvIGVu
ZDsKLQotICBlbmQ6Ci0gICAgaWYgKCF0LT52aXNpYmxlKSB7Ci0gICAgICAgIGlmICghZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQotICAgICAgICAgICAgV1JOKCJF
d2tfVGlsZSB3YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdDsKLX0KLQotLyoqCi0gKiBDaGVja3MgaWYgdGlsZSBvZiBnaXZlbiB6b29tIGV4
aXN0cyBpbiBtYXRyaXguCi0gKgotICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBjaGVj
ayB0aWxlIGV4aXN0ZW5jZS4KLSAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCi0gKiBA
cGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgotICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20g
dG8gcXVlcnkuCi0gKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZm91bmQsIEBjIEVJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3Rf
Z2V0KCkKLSAqLwotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhF
d2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cs
IGZsb2F0IHpvb20pCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0KLSAgICB0ID0gZWluYV9tYXRyaXhz
cGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKLSAgICBpZiAoIXQpCi0g
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQot
LyoqCi0gKiBDcmVhdGUgYSBuZXcgdGlsZSBhdCBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbSBsZXZl
bCBpbiB0aGUgbWF0cml4LgotICoKLSAqIFRoZSBuZXdseSBjcmVhdGVkIHRpbGUgaXMgY29uc2lk
ZXJlZCBpbiB1c2UgYW5kIG5vdCBwdXQgaW50byBjYWNoZQotICogb2YgdW51c2VkIHRpbGVzLiBB
ZnRlciBpdCBpcyB1c2VkIG9uZSBzaG91bGQgY2FsbAotICogZXdrX3RpbGVfbWF0cml4X3RpbGVf
cHV0KCkgdG8gZ2l2ZSBpdCBiYWNrIHRvIG1hdHJpeC4KLSAqCi0gKiBAcGFyYW0gdG0gdGhlIHRp
bGUgbWF0cml4IHRvIGNyZWF0ZSB0aWxlIG9uLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51
bWJlci4KLSAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCi0gKiBAcGFyYW0gem9vbSB0aGUg
bGV2ZWwgdG8gY3JlYXRlIHRpbGUsIHVzZWQgdG8gZGV0ZXJtaW5lIHRpbGUgc2l6ZS4KLSAqLwot
RXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBF
dmFzICpldmFzLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpv
b20pCi17Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0KLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIE5VTEwpOwotICAgIEVJTkFfU0FGRVRZ
X09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgTlVMTCk7Ci0KLSAgICB0dyA9IHRtLT50
aWxlLnc7Ci0gICAgdGggPSB0bS0+dGlsZS5oOwotCi0gICAgdCA9IGV3a190aWxlX25ldyhldmFz
LCB0dywgdGgsIHpvb20sIHRtLT5jc3BhY2UpOwotICAgIGlmICghdCkgewotICAgICAgICBFUlIo
ImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVkIiwgdHcsIHRoLCAo
ZG91YmxlKXpvb20sIHRtLT5jc3BhY2UpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0K
LSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3NldCh0bS0+bWF0cml4LCByb3cs
IGNvbCwgdCkpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0IG1hdHJpeCBjZWxsLCByb3cv
Y29sIG91dHNpZGUgbWF0cml4IGRpbWVuc2lvbnMhIik7Ci0gICAgICAgIGV3a190aWxlX2ZyZWUo
dCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQtPmNvbCA9IGNvbDsKLSAg
ICB0LT5yb3cgPSByb3c7Ci0gICAgdC0+eCA9IGNvbCAqIHR3OwotICAgIHQtPnkgPSByb3cgKiB0
aDsKLQotICAgIGNhaXJvX3RyYW5zbGF0ZSh0LT5jYWlybywgLXQtPngsIC10LT55KTsKLQotICAg
IHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwotICAgIHRtLT51cGRhdGVzID0gZWlu
YV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MK
LSAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwotICAgIHRtLT5zdGF0
cy50aWxlcy5hbGxvY2F0ZWQrKzsKLSNlbmRpZgotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLS8qKgot
ICogR2l2ZXMgYmFjayB0aGUgdGlsZSB0byB0aGUgdGlsZSBtYXRyaXguCi0gKgotICogVGhpcyB3
aWxsIHJlcG9ydCB0aGUgdGlsZSBpcyBubyBsb25nZXIgaW4gdXNlIGJ5IHRoZSBvbmUgdGhhdCBn
b3QKLSAqIGl0IHdpdGggZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkuCi0gKgotICog
QW55IHByZXZpb3VzIHJlZmVyZW5jZSB0byB0aWxlIHNob3VsZCBiZSByZWxlYXNlZAotICogKGV3
a190aWxlX2hpZGUoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAot
ICogYmUga25vd24gaWYgaXQgaXMgbm90IHZpc2liaWxlIGFueW1vcmUgYW5kIHRodXMgY2FuIGJl
IHB1dCBpbnRvIHRoZQotICogdW51c2VkIGNhY2hlLgotICoKLSAqIEBwYXJhbSB0bSB0aGUgdGls
ZSBtYXRyaXggdG8gcmV0dXJuIHRpbGUgdG8uCi0gKiBAcGFyYW0gdCB0aGUgdGlsZSBpbnN0YW5j
ZSB0byByZXR1cm4sIG11c3QgQGIgbm90IGJlIEBjIE5VTEwuCi0gKiBAcGFyYW0gbGFzdF91c2Vk
IHRpbWUgaW4gd2hpY2ggdGlsZSB3YXMgbGFzdCB1c2VkLgotICoKLSAqIEByZXR1cm4gI0VJTkFf
VFJVRSBvbiBzdWNjZXNzIG9yICNFSU5BX0ZBTFNFIG9uIGZhaWx1cmUuCi0gKi8KLUVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUg
KnQsIGRvdWJsZSBsYXN0X3VzZWQpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dCwgRUlOQV9GQUxTRSk7Ci0KLSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKLQotICAgIHQtPnN0YXRzLmxhc3RfdXNlZCA9IGxhc3RfdXNlZDsKLSAgICByZXR1
cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KHRtLT50dWMsIHQsIF9ld2tfdGlsZV9t
YXRyaXhfdGlsZV9mcmVlLCB0bSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVk
IGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQotewotICAgIEV3a19UaWxl
ICp0OwotICAgIEVpbmFfUmVjdGFuZ2xlIG5ld191cGRhdGU7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKLQotICAgIG1lbWNweSgmbmV3X3VwZGF0
ZSwgdXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkpOwotICAgIC8vIGNoZWNrIHVwZGF0ZSBpcyB2
YWxpZCwgb3RoZXJ3aXNlIHJldHVybiBFSU5BX0ZBTFNFCi0gICAgaWYgKHVwZGF0ZS0+eCA8IDAg
fHwgdXBkYXRlLT55IDwgMCB8fCB1cGRhdGUtPncgPD0gMCB8fCB1cGRhdGUtPmggPD0gMCkgewot
ICAgICAgICBFUlIoImludmFsaWQgdXBkYXRlIHJlZ2lvbi4iKTsKLSAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7Ci0gICAgfQotCi0gICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0g
dG0tPnRpbGUudykKLSAgICAgICAgbmV3X3VwZGF0ZS53ID0gdG0tPnRpbGUudyAtIHVwZGF0ZS0+
eDsKLSAgICBpZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0gMSA+PSB0bS0+dGlsZS5oKQotICAg
ICAgICBuZXdfdXBkYXRlLmggPSB0bS0+dGlsZS5oIC0gdXBkYXRlLT55OwotCi0gICAgdCA9IGVp
bmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7Ci0KLSAg
ICBpZiAoIXQpCi0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICBpZiAoIXQtPnVwZGF0
ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFf
bGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQs
ICZuZXdfdXBkYXRlKTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLUVpbmFfQm9vbCBl
d2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNp
Z25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0g
ICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOwotCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJz
ZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsICZjZWxsKSkKLSAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICBpZiAoIWNlbGwpCi0gICAgICAgIHJldHVybiBFSU5BX1RS
VUU7Ci0KLSAgICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKTsKLSAg
ICBpZiAoIXQpIHsKLSAgICAgICAgQ1JJVElDQUwoIm1hdHJpeCBjZWxsIHdpdGggbm8gdGlsZSEi
KTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoIXQtPnVwZGF0
ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFf
bGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQp
OwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdm9pZCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0sIEV3a19UaWxlICp0KQotewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAoIXQtPnVwZGF0ZXMgJiYg
IXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICByZXR1cm47Ci0gICAgZXdrX3RpbGVfdXBk
YXRlc19jbGVhcih0KTsKLSAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVw
ZGF0ZXMsIHQpOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9tYXRyaXhfc2xpY2Vy
X3NldHVwKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhLCBm
bG9hdCB6b29tLCBFaW5hX1RpbGVfR3JpZF9TbGljZXIgKnNsaWNlcikKLXsKLSAgICB1bnNpZ25l
ZCBsb25nIHJvd3MsIGNvbHM7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCB0dywgdGg7Ci0K
LSAgICBpZiAoYXJlYS0+dyA8PSAwIHx8IGFyZWEtPmggPD0gMCkgewotICAgICAgICBXUk4oImlu
dmFsaWQgYXJlYSByZWdpb246ICVkLCVkKyVkeCVkLiIsCi0gICAgICAgICAgICBhcmVhLT54LCBh
cmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0g
ICAgfQotCi0gICAgeCA9IGFyZWEtPng7Ci0gICAgeSA9IGFyZWEtPnk7Ci0gICAgdyA9IGFyZWEt
Pnc7Ci0gICAgaCA9IGFyZWEtPmg7Ci0KLSAgICB0dyA9IHRtLT50aWxlLnc7Ci0gICAgdGggPSB0
bS0+dGlsZS5oOwotCi0gICAgLy8gY3JvcHBpbmcgYXJlYSByZWdpb24gdG8gZml0IG1hdHJpeAot
ICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfZ2V0KHRtLT5tYXRyaXgsICZyb3dzLCAmY29scyk7
Ci0gICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIHcgKz0geDsKLSAgICAgICAgeCA9IDA7Ci0gICAg
fQotICAgIGlmICh5IDwgMCkgewotICAgICAgICBoICs9IHk7Ci0gICAgICAgIHkgPSAwOwotICAg
IH0KLQotICAgIGlmICh5ICsgaCAtIDEgPiAobG9uZykocm93cyAqIHRoKSkKLSAgICAgICAgaCA9
IHJvd3MgKiB0aCAtIHk7Ci0gICAgaWYgKHggKyB3IC0gMSA+IChsb25nKShjb2xzICogdHcpKQot
ICAgICAgICB3ID0gY29scyAqIHR3IC0geDsKLQotICAgIHJldHVybiBlaW5hX3RpbGVfZ3JpZF9z
bGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywgdGgpOwotfQotCi0KLUVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlICp1cGRhdGUsIGZsb2F0IHpvb20pCi17Ci0gICAgY29uc3QgRWluYV9UaWxlX0dy
aWRfSW5mbyAqaW5mbzsKLSAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7Ci0KLSAgICBpZiAo
dXBkYXRlLT53IDwgMSB8fCB1cGRhdGUtPmggPCAxKSB7Ci0gICAgICAgIERCRygiV2h5IHdlIGdl
dCB1cGRhdGVzIHdpdGggZW1wdHkgYXJlYXM/ICVkLCVkKyVkeCVkIGF0IHpvb20gJWYiLAotICAg
ICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywgdXBkYXRlLT5oLCB6b29t
KTsKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAgICBpZiAoIV9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKHRtLCB1cGRhdGUsIHpvb20sICZzbGljZXIpKSB7Ci0gICAg
ICAgIEVSUigiQ291bGQgbm90IHNldHVwIHNsaWNlciBmb3IgdXBkYXRlICVkLCVkKyVkeCVkIGF0
IHpvb20gJWYiLAotICAgICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywg
dXBkYXRlLT5oLCB6b29tKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgfQotCi0g
ICAgd2hpbGUgKGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9uZXh0KCZzbGljZXIsICZpbmZvKSkgewot
ICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgICAgICBFd2tfVGlsZSAqdDsKLSAg
ICAgICAgY29sID0gaW5mby0+Y29sOwotICAgICAgICByb3cgPSBpbmZvLT5yb3c7Ci0KLSAgICAg
ICAgdCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNv
bCk7Ci0gICAgICAgIGlmICghdCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
ICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgICAgICB0bS0+
dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotICAgICAgICBpZiAo
aW5mby0+ZnVsbCkKLSAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmaW5mby0+cmVjdCk7
Ci0gICAgfQotCi0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi12b2lkIGV3a190aWxlX21h
dHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsKLSAgICBFaW5hX0xp
c3QgKmwsICpsX25leHQ7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4odG0pOwotCi0gICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKLSAg
ICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRtLT51cGRhdGVzLCBsLCBsX25leHQsIHQpIHsKLSAg
ICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHQsIHRtLT5yZW5kZXIuY2IsIHRtLT5yZW5k
ZXIuZGF0YSk7Ci0gICAgICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgICAgICBld2tfdGls
ZV91cGRhdGVzX2NsZWFyKHQpOwotICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3Rf
cmVtb3ZlX2xpc3QodG0tPnVwZGF0ZXMsIGwpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lk
IGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0g
ICAgRXdrX1RpbGUgKnQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotCi0g
ICAgRUlOQV9MSVNUX0ZSRUUodG0tPnVwZGF0ZXMsIHQpCi0gICAgICAgIGV3a190aWxlX3VwZGF0
ZXNfY2xlYXIodCk7Ci0gICAgdG0tPnVwZGF0ZXMgPSBOVUxMOwotfQotCi0vLyByZW1vdmUgbWUg
bGF0ZXIhCi12b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0
bSkKLXsKLSAgICBFaW5hX0l0ZXJhdG9yICppdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9y
X2NvbXBsZXRlX25ldyh0bS0+bWF0cml4KTsKLSAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpj
ZWxsOwotICAgIEVpbmFfQm9vbCBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKLQotI2lmZGVmIERF
QlVHX01FTV9MRUFLUwotICAgIHByaW50ZigiRXdrX1RpbGUgTWF0cml4OiB0aWxlc1srJSJQUkl1
NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQi
LC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFs
bG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAotICAgICAgICAgICB0bS0+c3RhdHMudGls
ZXMuYWxsb2NhdGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAotICAgICAgICAgICB0bS0+c3Rh
dHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCi0gICAgICAgICAgIHRt
LT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOwotI2Vsc2UK
LSAgICBwcmludGYoIkV3a19UaWxlIE1hdHJpeDpcbiIpOwotI2VuZGlmCi0KLSAgICBFSU5BX0lU
RVJBVE9SX0ZPUkVBQ0goaXQsIGNlbGwpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNv
bDsKLSAgICAgICAgRXdrX1RpbGUgKnQ7Ci0gICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxf
cG9zaXRpb25fZ2V0KGNlbGwsICZyb3csICZjb2wpOwotICAgICAgICB0ID0gZWluYV9tYXRyaXhz
cGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKTsKLQotICAgICAgICBpZiAoIXQpIHsKLSAgICAgICAg
ICAgIGlmICghbGFzdF9lbXB0eSkgewotICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5B
X1RSVUU7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFbXB0eToiKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHByaW50ZigiIFslbHUsJWx1XSIsIGNvbCwgcm93KTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIGlmIChsYXN0X2VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgbGFz
dF9lbXB0eSA9IEVJTkFfRkFMU0U7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJv
dywgdCk7Ci0gICAgICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0l
YyIsIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLCB0LT52aXNpYmxlID8gJyon
OiAnICcpOwotICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChsYXN0X2VtcHR5KQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0KTsKLQotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodG0tPnR1Yyk7Ci19
Ci0KLS8qKgotICogRnJlZXplIG1hdHJpeCB0byBub3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCi0g
KgotICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93
IHdlIHNob3VsZCBob2xkCi0gKiBvbiB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlv
biwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQotICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRo
YXcgd2hlbiB3ZSdyZSBkb25lLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RoYXcoKQot
ICovCi12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgaWYgKCF0bS0+ZnJvemVu
KQotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwotICAgIHRt
LT5mcm96ZW4rKzsKLX0KLQotLyoqCi0gKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3MuCi0g
KgotICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4gbWFp
bnRlbmFuY2UgdGFza3MKLSAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgotICovCi12b2lkIGV3a190
aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCAqdG0pCi17Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odG0pOwotICAgIGlmICghdG0tPmZyb3plbikgewotICAgICAgICBFUlIo
InRoYXdpbmcgbW9yZSB0aGFuIGZyZWV6aW5nISIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgdG0tPmZyb3plbi0tOwotICAgIGlmICghdG0tPmZyb3plbikKLSAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX21hdHJpeC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY0YzQxYzcxOTEzNDdmMDFhNjE5YjNk
MWNiZWU5YmNiNTRhNjJjZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfbWF0cml4LmNwcApAQCAtMCwwICsxLDYzOSBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0IChDKSAy
MDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX21hdHJpeC5oIgorCisjaW5jbHVkZSAiZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1
ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+Cisj
aW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCByZW1vdmUgbWUgbGF0
ZXIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RydWN0IF9F
d2tfVGlsZV9NYXRyaXggeworICAgIEVpbmFfTWF0cml4c3BhcnNlICptYXRyaXg7CisgICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKKyAg
ICBzdHJ1Y3QgeworICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKTsKKyAgICAgICAgdm9pZCAqZGF0YTsKKyAgICB9
IHJlbmRlcjsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOworICAgIEVpbmFfTGlzdCAqdXBkYXRl
czsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgfSB0aWxlOwor
I2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCB7Cisg
ICAgICAgICAgICB1aW50NjRfdCBhbGxvY2F0ZWQsIGZyZWVkOworICAgICAgICB9IHRpbGVzLCBi
eXRlczsKKyAgICB9IHN0YXRzOworI2VuZGlmCit9OworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CitzdGF0aWMgdWludDY0X3QgdGlsZXNfbGVha2VkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRl
c19sZWFrZWQgPSAwOworI2VuZGlmCisKKy8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyBy
ZXNpemVkIG9yIGZyZWVkICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJl
ZSh2b2lkICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKK3sKKyAgICBFd2tfVGlsZV9NYXRy
aXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4odXNlcl9kYXRhKTsKKyAgICBF
d2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oY2VsbF9kYXRhKTsKKworICAgIGlm
ICghdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6
ZSh0bS0+dHVjKTsKKworICAgIGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRl
KQorICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQp
OworCisgICAgaWYgKHQtPnZpc2libGUpCisgICAgICAgIEVSUigiZnJlZWluZyBjZWxsIHRoYXQg
aXMgdmlzaWJsZSwgbGVha2luZyB0aWxlICVwIiwgdCk7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQorICAgICAgICAg
ICAgRVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0LCB0bS0+
dHVjKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBEQkcoInRpbGUgY2VsbCBkb2VzIG5v
dCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwgdCk7CisjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CisgICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgICAg
ICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsKKyNlbmRpZgorICAgICAgICAgICAgZXdrX3Rp
bGVfZnJlZSh0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGV3a190aWxlX3VudXNlZF9jYWNo
ZV90aGF3KHRtLT50dWMpOworfQorCisvKiBjYWxsZWQgd2hlbiBjYWNoZSBvZiB1bnVzZWQgdGls
ZSBpcyBmbHVzaGVkICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2
b2lkICpkYXRhLCBFd2tfVGlsZSAqdCkKK3sKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oZGF0YSk7CisgICAgRWluYV9NYXRyaXhzcGFyc2Vf
Q2VsbCAqY2VsbDsKKyAKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0
bS0+bWF0cml4LCB0LT5yb3csIHQtPmNvbCwgJmNlbGwpKSB7CisgICAgICAgIEVSUigicmVtb3Zp
bmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjZWxsKSB7CisgICAgICAgIEVSUigi
cmVtb3ZpbmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIs
IHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92
ZSh0bS0+dXBkYXRlcywgdCk7CisKKyAgICAvKiBzZXQgdG8gbnVsbCB0byBhdm9pZCBkb3VibGUg
ZnJlZSAqLworICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9yZXBsYWNlKGNlbGwsIDAs
IDApOworICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfY2xlYXIoY2VsbCk7CisKKyAgICBpZiAo
RUlOQV9VTkxJS0VMWSghIXQtPnZpc2libGUpKSB7CisgICAgICAgIEVSUigiY2FjaGUgb2YgdW51
c2VkIHRpbGVzIHJlcXVlc3RpbmcgZGVsZXRpb24gb2YgdXNlZCB0aWxlICVwPyAiCisgICAgICAg
ICAgICAiTGVha2luZy4uLiIsIHQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisjaWZkZWYg
REVCVUdfTUVNX0xFQUtTCisgICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwor
ICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOworI2VuZGlmCisKKyAgICBld2tfdGlsZV9mcmVl
KHQpOworfQorCisvKioKKyAqIENyZWF0ZXMgYSBuZXcgbWF0cml4IG9mIHRpbGVzLgorICoKKyAq
IFRoZSB0aWxlIG1hdHJpeCBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0aWxlcyBhcm91bmQg
YW5kCisgKiBwcm92aWRpbmcgZmFzdCBhY2Nlc3MgdG8gdGhlbS4gT25lIGNhbiB1c2UgaXQgdG8g
cmV0cmlldmUgbmV3IG9yCisgKiBleGlzdGluZyB0aWxlcyBhbmQgZ2l2ZSB0aGVtIGJhY2ssIGFs
bG93aW5nIHRoZW0gdG8gYmUKKyAqIGZyZWVkL3JlcGxhY2VkIGJ5IHRoZSBjYWNoZS4KKyAqCisg
KiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcyBvciBAYyAwIHRvIGNyZWF0ZSBvbmUK
KyAqICAgICAgICBhdXRvbWF0aWNhbGx5LgorICogQHBhcmFtIGNvbHMgbnVtYmVyIG9mIGNvbHVt
bnMgaW4gdGhlIG1hdHJpeC4KKyAqIEBwYXJhbSByb3dzIG51bWJlciBvZiByb3dzIGluIHRoZSBt
YXRyaXguCisgKiBAcGFyYW0gY3NwYWNlIHRoZSBjb2xvciBzcGFjZSB1c2VkIHRvIGNyZWF0ZSB0
aWxlcyBpbiB0aGlzIG1hdHJpeC4KKyAqIEBwYXJhbSByZW5kZXJfY2IgZnVuY3Rpb24gdXNlZCB0
byByZW5kZXIgZ2l2ZW4gdGlsZSB1cGRhdGUuCisgKiBAcGFyYW0gcmVuZGVyX2RhdGEgY29udGV4
dCB0byBnaXZlIGJhY2sgdG8gQGEgcmVuZGVyX2NiLgorICoKKyAqIEByZXR1cm4gbmV3bHkgYWxs
b2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFpbHVyZS4KKyAqLworRXdrX1Rp
bGVfTWF0cml4ICpld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
LCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNl
IGNzcGFjZSwgdm9pZCAoKnJlbmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpyZW5kZXJfZGF0YSkKK3sKKyAg
ICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oY2Fs
bG9jKDEsIHNpemVvZihFd2tfVGlsZV9NYXRyaXgpKSk7CisgICAgaWYgKCF0bSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3Ms
IGNvbHMsIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7CisgICAgaWYgKCF0bS0+bWF0
cml4KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4LiIpOwor
ICAgICAgICBmcmVlKHRtKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKHR1
YykKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodHVjKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5
NjAwMDApOworICAgICAgICBpZiAoIXRtLT50dWMpIHsKKyAgICAgICAgICAgIEVSUigibm8gY2Fj
aGUgb2YgdW51c2VkIHRpbGUhIik7CisgICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVl
KHRtLT5tYXRyaXgpOworICAgICAgICAgICAgZnJlZSh0bSk7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7CisgICAgdG0t
PnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKKyAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKXJl
bmRlcl9kYXRhOworICAgIHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKKyAgICB0bS0+dGls
ZS5oID0gREVGQVVMVF9USUxFX0g7CisKKyAgICByZXR1cm4gdG07Cit9CisKKy8qKgorICogRGVz
dHJveXMgdGlsZXMgbWF0cml4LCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KKyAqCisgKiBUaGUg
Y2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICov
Cit2b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisjaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCisgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOworI2VuZGlmCisK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKworICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0t
Pm1hdHJpeCk7CisKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKKyAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodG0tPnR1Yyk7CisKKyNpZmRlZiBERUJVR19N
RU1fTEVBS1MKKyAgICB0aWxlcyA9IHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQ7CisgICAgYnl0ZXMgPSB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLmJ5dGVzLmZyZWVkOworCisgICAgdGlsZXNfbGVha2VkICs9IHRpbGVzOworICAg
IGJ5dGVzX2xlYWtlZCArPSBieXRlczsKKworICAgIGlmICh0aWxlcyB8fCBieXRlcykKKyAgICAg
ICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6
JSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSIsCisgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7CisgICAgZWxzZSBpZiAodGlsZXNf
bGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKKyAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5v
IGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCisgICAgICAg
ICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwKKyAgICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAg
ICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKKyAgICBlbHNlCisgICAgICAg
IElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdIiwKKyAgICAg
ICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwK
KyAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCk7CisjZW5kaWYKKworICAgIGZyZWUodG0pOworfQorCisvKioKKyAqIFJlc2l6ZSBtYXRy
aXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCisgKi8KK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
bSk7CisgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQodG0tPm1hdHJpeCwgcm93cywgY29s
cyk7Cit9CisKKy8qKgorICogR2V0IHRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgaW4gdXNlIGJ5
IGdpdmVuIG1hdHJpeC4KKyAqCisgKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hl
LgorICovCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKKyAgICByZXR1cm4gdG0tPnR1YzsKK30KKworLyoqCisg
KiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4KKyAq
CisgKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhlIGNh
Y2hlLgorICoKKyAqIEFmdGVyIHVzYWdlLCBwbGVhc2UgZ2l2ZSBpdCBiYWNrIHVzaW5nCisgKiBl
d2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKS4gSWYgeW91IGp1c3Qgd2FudCB0byBjaGVjayBpZiBp
dCBleGlzdHMsCisgKiB0aGVuIHVzZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMo
KS4KKyAqCisgKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGdldCB0aWxlIGZyb20uCisg
KiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51
bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KKyAqCisgKiBAcmV0
dXJuIFRoZSB0aWxlIGluc3RhbmNlIG9yIEBjIDAgaWYgbm9uZSBpcyBmb3VuZC4gSWYgdGhlIHRp
bGUKKyAqICAgICAgICAgd2FzIGluIHRoZSB1bnVzZWQgY2FjaGUgaXQgd2lsbCBiZSBAYiByZW1v
dmVkICh0aHVzCisgKiAgICAgICAgIGNvbnNpZGVyZWQgdXNlZCkgYW5kIG9uZSBzaG91bGQgZ2l2
ZSBpdCBiYWNrIHdpdGgKKyAqICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkgYWZ0
ZXJ3YXJkcy4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgpCisg
Ki8KK0V3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1RpbGVfTWF0
cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29t
KQoreworICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJp
eHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpKTsKKyAgICBpZiAoIXQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKHQtPnpvb20gPT0gem9vbSkKKyAgICAgICAg
Z290byBlbmQ7CisKKyAgZW5kOgorICAgIGlmICghdC0+dmlzaWJsZSkgeworICAgICAgICBpZiAo
IWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0KSkKKyAgICAgICAgICAg
IFdSTigiRXdrX1RpbGUgd2FzIHVudXNlZCBidXQgbm90IGluIGNhY2hlPyBidWchIik7CisgICAg
fQorCisgICAgcmV0dXJuIHQ7Cit9CisKKy8qKgorICogQ2hlY2tzIGlmIHRpbGUgb2YgZ2l2ZW4g
em9vbSBleGlzdHMgaW4gbWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXgg
dG8gY2hlY2sgdGlsZSBleGlzdGVuY2UuCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVy
LgorICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBleGFj
dCB6b29tIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGZvdW5kLCBA
YyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxl
X2V4YWN0X2dldCgpCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9l
eGlzdHMoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93LCBmbG9hdCB6b29tKQoreworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9p
ZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyB0aWxl
IGF0IGdpdmVuIHBvc2l0aW9uIGFuZCB6b29tIGxldmVsIGluIHRoZSBtYXRyaXguCisgKgorICog
VGhlIG5ld2x5IGNyZWF0ZWQgdGlsZSBpcyBjb25zaWRlcmVkIGluIHVzZSBhbmQgbm90IHB1dCBp
bnRvIGNhY2hlCisgKiBvZiB1bnVzZWQgdGlsZXMuIEFmdGVyIGl0IGlzIHVzZWQgb25lIHNob3Vs
ZCBjYWxsCisgKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoKSB0byBnaXZlIGl0IGJhY2sgdG8g
bWF0cml4LgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gY3JlYXRlIHRpbGUg
b24uCisgKiBAcGFyYW0gY29sIHRoZSBjb2x1bW4gbnVtYmVyLgorICogQHBhcmFtIHJvdyB0aGUg
cm93IG51bWJlci4KKyAqIEBwYXJhbSB6b29tIHRoZSBsZXZlbCB0byBjcmVhdGUgdGlsZSwgdXNl
ZCB0byBkZXRlcm1pbmUgdGlsZSBzaXplLgorICovCitFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4
X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbmcg
Y29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK3sKKyAgICBFdmFzX0Nvb3JkIHR3
LCB0aDsKKyAgICBFd2tfVGlsZSAqdDsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTCh0bSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTCh6b29tID4g
MC4wLCAwKTsKKworICAgIHR3ID0gdG0tPnRpbGUudzsKKyAgICB0aCA9IHRtLT50aWxlLmg7CisK
KyAgICB0ID0gZXdrX3RpbGVfbmV3KGV2YXMsIHR3LCB0aCwgem9vbSwgdG0tPmNzcGFjZSk7Cisg
ICAgaWYgKCF0KSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0
ICVmLCBjc3BhY2U9JWQiLCB0dywgdGgsIChkb3VibGUpem9vbSwgdG0tPmNzcGFjZSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9p
ZHhfc2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCB0KSkgeworICAgICAgICBFUlIoImNvdWxkIG5v
dCBzZXQgbWF0cml4IGNlbGwsIHJvdy9jb2wgb3V0c2lkZSBtYXRyaXggZGltZW5zaW9ucyEiKTsK
KyAgICAgICAgZXdrX3RpbGVfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgdC0+Y29sID0gY29sOworICAgIHQtPnJvdyA9IHJvdzsKKyAgICB0LT54ID0gY29sICogdHc7
CisgICAgdC0+eSA9IHJvdyAqIHRoOworCisgICAgY2Fpcm9fdHJhbnNsYXRlKHQtPmNhaXJvLCAt
dC0+eCwgLXQtPnkpOworCisgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Cisg
ICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+
Ynl0ZXM7CisgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCsrOworI2VuZGlmCisKKyAgICBy
ZXR1cm4gdDsKK30KKworLyoqCisgKiBHaXZlcyBiYWNrIHRoZSB0aWxlIHRvIHRoZSB0aWxlIG1h
dHJpeC4KKyAqCisgKiBUaGlzIHdpbGwgcmVwb3J0IHRoZSB0aWxlIGlzIG5vIGxvbmdlciBpbiB1
c2UgYnkgdGhlIG9uZSB0aGF0IGdvdAorICogaXQgd2l0aCBld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9nZXQoKS4KKyAqCisgKiBBbnkgcHJldmlvdXMgcmVmZXJlbmNlIHRvIHRpbGUgc2hvdWxk
IGJlIHJlbGVhc2VkCisgKiAoZXdrX3RpbGVfaGlkZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1
bmN0aW9uLCBzbyBpdCB3aWxsCisgKiBiZSBrbm93biBpZiBpdCBpcyBub3QgdmlzaWJpbGUgYW55
bW9yZSBhbmQgdGh1cyBjYW4gYmUgcHV0IGludG8gdGhlCisgKiB1bnVzZWQgY2FjaGUuCisgKgor
ICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KKyAqIEBwYXJh
bSB0IHRoZSB0aWxlIGluc3RhbmNlIHRvIHJldHVybiwgbXVzdCBAYiBub3QgYmUgQGMgMC4KKyAq
IEBwYXJhbSBsYXN0X3VzZWQgdGltZSBpbiB3aGljaCB0aWxlIHdhcyBsYXN0IHVzZWQuCisgKgor
ICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3Mgb3IgI0VJTkFfRkFMU0Ugb24gZmFpbHVy
ZS4KKyAqLworRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRy
aXggKnRtLCBFd2tfVGlsZSAqdCwgZG91YmxlIGxhc3RfdXNlZCkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh0LCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh0LT52aXNpYmxlKQor
ICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworCisgICAgdC0+c3RhdHMubGFzdF91c2VkID0gbGFz
dF91c2VkOworICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0tPnR1
YywgdCwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRtKTsKK30KKworRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBs
b25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUp
Cit7CisgICAgRWluYV9SZWN0YW5nbGUgbmV3X3VwZGF0ZTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOworCisgICAgbWVtY3B5KCZuZXdfdXBkYXRl
LCB1cGRhdGUsIHNpemVvZihuZXdfdXBkYXRlKSk7CisgICAgLy8gY2hlY2sgdXBkYXRlIGlzIHZh
bGlkLCBvdGhlcndpc2UgcmV0dXJuIEVJTkFfRkFMU0UKKyAgICBpZiAodXBkYXRlLT54IDwgMCB8
fCB1cGRhdGUtPnkgPCAwIHx8IHVwZGF0ZS0+dyA8PSAwIHx8IHVwZGF0ZS0+aCA8PSAwKSB7Cisg
ICAgICAgIEVSUigiaW52YWxpZCB1cGRhdGUgcmVnaW9uLiIpOworICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKKyAgICB9CisKKyAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSB0
bS0+dGlsZS53KQorICAgICAgICBuZXdfdXBkYXRlLncgPSB0bS0+dGlsZS53IC0gdXBkYXRlLT54
OworICAgIGlmICh1cGRhdGUtPnkgKyB1cGRhdGUtPmggLSAxID49IHRtLT50aWxlLmgpCisgICAg
ICAgIG5ld191cGRhdGUuaCA9IHRtLT50aWxlLmggLSB1cGRhdGUtPnk7CisKKyAgICBFd2tfVGls
ZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhf
Z2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSk7CisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOworCisgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0
ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0
KTsKKyAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmbmV3X3VwZGF0ZSk7CisKKyAgICByZXR1
cm4gRUlOQV9UUlVFOworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRl
X2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93KQoreworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICghZWlu
YV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCAmY2VsbCkp
CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgaWYgKCFjZWxsKQorICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOworCisgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOworICAgIGlmICghdCkg
eworICAgICAgICBDUklUSUNBTCgibWF0cml4IGNlbGwgd2l0aCBubyB0aWxlISIpOworICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVu
ZCh0bS0+dXBkYXRlcywgdCk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisKKyAgICBy
ZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNf
Y2xlYXIoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUgKnQpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMu
ZnVsbF91cGRhdGUpCisgICAgICAgIHJldHVybjsKKyAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFy
KHQpOworICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7
Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAoRXdr
X1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEsIGZsb2F0IHpvb20s
IEVpbmFfVGlsZV9HcmlkX1NsaWNlciAqc2xpY2VyKQoreworICAgIHVuc2lnbmVkIGxvbmcgcm93
cywgY29sczsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgsIHR3LCB0aDsKKworICAgIGlmIChh
cmVhLT53IDw9IDAgfHwgYXJlYS0+aCA8PSAwKSB7CisgICAgICAgIFdSTigiaW52YWxpZCBhcmVh
IHJlZ2lvbjogJWQsJWQrJWR4JWQuIiwKKyAgICAgICAgICAgIGFyZWEtPngsIGFyZWEtPnksIGFy
ZWEtPncsIGFyZWEtPmgpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAg
ICB4ID0gYXJlYS0+eDsKKyAgICB5ID0gYXJlYS0+eTsKKyAgICB3ID0gYXJlYS0+dzsKKyAgICBo
ID0gYXJlYS0+aDsKKworICAgIHR3ID0gdG0tPnRpbGUudzsKKyAgICB0aCA9IHRtLT50aWxlLmg7
CisKKyAgICAvLyBjcm9wcGluZyBhcmVhIHJlZ2lvbiB0byBmaXQgbWF0cml4CisgICAgZWluYV9t
YXRyaXhzcGFyc2Vfc2l6ZV9nZXQodG0tPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKKyAgICBpZiAo
eCA8IDApIHsKKyAgICAgICAgdyArPSB4OworICAgICAgICB4ID0gMDsKKyAgICB9CisgICAgaWYg
KHkgPCAwKSB7CisgICAgICAgIGggKz0geTsKKyAgICAgICAgeSA9IDA7CisgICAgfQorCisgICAg
aWYgKHkgKyBoIC0gMSA+IChsb25nKShyb3dzICogdGgpKQorICAgICAgICBoID0gcm93cyAqIHRo
IC0geTsKKyAgICBpZiAoeCArIHcgLSAxID4gKGxvbmcpKGNvbHMgKiB0dykpCisgICAgICAgIHcg
PSBjb2xzICogdHcgLSB4OworCisgICAgcmV0dXJuIGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1
cChzbGljZXIsIHgsIHksIHcsIGgsIHR3LCB0aCk7Cit9CisKKworRWluYV9Cb29sIGV3a190aWxl
X21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUg
KnVwZGF0ZSwgZmxvYXQgem9vbSkKK3sKKyAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvICpp
bmZvOworICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKKworICAgIGlmICh1cGRhdGUtPncg
PCAxIHx8IHVwZGF0ZS0+aCA8IDEpIHsKKyAgICAgICAgREJHKCJXaHkgd2UgZ2V0IHVwZGF0ZXMg
d2l0aCBlbXB0eSBhcmVhcz8gJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIsCisgICAgICAgICAgICB1
cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgsIHpvb20pOworICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIGlmICghX2V3a190aWxlX21hdHJpeF9z
bGljZXJfc2V0dXAodG0sIHVwZGF0ZSwgem9vbSwgJnNsaWNlcikpIHsKKyAgICAgICAgRVJSKCJD
b3VsZCBub3Qgc2V0dXAgc2xpY2VyIGZvciB1cGRhdGUgJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIs
CisgICAgICAgICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgs
IHpvb20pOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICB3aGlsZSAo
ZWluYV90aWxlX2dyaWRfc2xpY2VyX25leHQoJnNsaWNlciwgJmluZm8pKSB7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgICAgIGNvbCA9IGluZm8tPmNvbDsKKyAgICAgICAg
cm93ID0gaW5mby0+cm93OworCisgICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBj
b2wpKTsKKyAgICAgICAgaWYgKCF0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgICAgIHRt
LT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7CisgICAgICAgIGlm
IChpbmZvLT5mdWxsKQorICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZpbmZvLT5yZWN0
KTsKKyAgICB9CisKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVf
bWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVpbmFf
TGlzdCAqbCwgKmxfbmV4dDsKKyAgICB2b2lkKiBpdGVtOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHRtKTsKKworICAgIC8vIHByb2Nlc3MgdXBkYXRlcywgdW5mbGFnIHRpbGVzCisg
ICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0bS0+dXBkYXRlcywgbCwgbF9uZXh0LCBpdGVtKSB7
CisgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihpdGVtKTsK
KyAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHRpbGUsIHRtLT5yZW5kZXIuY2IsIHRt
LT5yZW5kZXIuZGF0YSk7CisgICAgICAgIGlmICh0aWxlLT52aXNpYmxlKSB7CisgICAgICAgICAg
ICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGUpOworICAgICAgICAgICAgdG0tPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodG0tPnVwZGF0ZXMsIGwpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJp
eCAqdG0pCit7CisgICAgdm9pZCogaXRlbTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tih0bSk7CisKKyAgICBFSU5BX0xJU1RfRlJFRSh0bS0+dXBkYXRlcywgaXRlbSkKKyAgICAgICAg
ZXdrX3RpbGVfdXBkYXRlc19jbGVhcihzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGl0ZW0pKTsKKyAg
ICB0bS0+dXBkYXRlcyA9IDA7Cit9CisKKy8vIHJlbW92ZSBtZSBsYXRlciEKK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVpbmFfSXRl
cmF0b3IgKml0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRlcmF0b3JfY29tcGxldGVfbmV3KHRtLT5t
YXRyaXgpOworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgICAgRWluYV9Cb29s
IGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAg
cHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBS
SXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2
NCJdXG4iLAorICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMu
dGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+
c3RhdHMudGlsZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQs
IHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCk7CisjZWxzZQorICAgIHByaW50ZigiRXdrX1Rp
bGUgTWF0cml4OlxuIik7CisjZW5kaWYKKworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwg
Y2VsbCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sOworICAgICAgICBlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sKTsKKworICAgICAg
ICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2Vf
Y2VsbF9kYXRhX2dldChjZWxsKSk7CisgICAgICAgIGlmICghdCkgeworICAgICAgICAgICAgaWYg
KCFsYXN0X2VtcHR5KSB7CisgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfVFJVRTsK
KyAgICAgICAgICAgICAgICBwcmludGYoIkVtcHR5OiIpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29sLCByb3cpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWYgKGxhc3RfZW1wdHkpIHsKKyAgICAgICAgICAgICAgICBsYXN0X2VtcHR5
ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBwcmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0KTsK
KyAgICAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdC0+
Y29sLCB0LT5yb3csIHQtPncsIHQtPmgsIHQtPnpvb20sIHQtPnZpc2libGUgPyAnKic6ICcgJyk7
CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGxh
c3RfZW1wdHkpCisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUo
aXQpOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0bS0+dHVjKTsKK30KKworLyoq
CisgKiBGcmVlemUgbWF0cml4IHRvIG5vdCBkbyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBN
YWludGVuYW5jZSB0YXNrcyBvcHRpbWl6ZSB1c2FnZSwgYnV0IG1heWJlIHdlIGtub3cgd2Ugc2hv
dWxkIGhvbGQKKyAqIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxhc3Qgb3BlcmF0aW9uLCBpbiB0
aGlzIGNhc2Ugd2UgZnJlZXplCisgKiB3aGlsZSBvcGVyYXRpbmcgYW5kIHRoZW4gdGhhdyB3aGVu
IHdlJ3JlIGRvbmUuCisgKgorICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGhhdygpCisgKi8KK3Zv
aWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBpZiAoIXRtLT5mcm96ZW4pCisgICAg
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgdG0tPmZyb3pl
bisrOworfQorCisvKioKKyAqIFVuZnJlZXplcyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBJ
ZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5j
ZSB0YXNrcworICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfbWF0
cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0bSk7CisgICAgaWYgKCF0bS0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhhd2lu
ZyBtb3JlIHRoYW4gZnJlZXppbmchIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0
bS0+ZnJvemVuLS07CisgICAgaWYgKCF0bS0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfbW9kZWwuYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
bW9kZWwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJlOTQ3OTNiNmRiY2IxZGVh
Y2YxYjhjNTQwMWRlMmI0YTU3NzZkYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMKKysr
IC9kZXYvbnVsbApAQCAtMSw4NDggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJv
RlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiZXdrX3RpbGVkX21vZGVsLmgiCi0KLSNkZWZpbmUgX0dOVV9TT1VSQ0UKLSNpbmNsdWRlICJl
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIgotI2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRlLmgi
Ci0jaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgotI2luY2x1ZGUgPEVpbmEuaD4KLSNpbmNsdWRlIDxl
aW5hX3NhZmV0eV9jaGVja3MuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGludHR5
cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWZkZWYgVElMRV9TVEFUU19B
Q0NPVU5UX1JFTkRFUl9USU1FCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotCi0jaWZu
ZGVmIENBSVJPX0ZPUk1BVF9SR0IxNl81NjUKLSNkZWZpbmUgQ0FJUk9fRk9STUFUX1JHQjE2XzU2
NSA0Ci0jZW5kaWYKLQotI2RlZmluZSBJRFgoY29sLCByb3csIHJvd3NwYW4pIChjb2wgKyAocm93
ICogcm93c3BhbikpCi0jZGVmaW5lIE1JTihhLCBiKSAoKGEgPCBiKSA/IGEgOiBiKQotI2RlZmlu
ZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwot
c3RhdGljIHVpbnQ2NF90IHRpbGVzX2FsbG9jYXRlZCA9IDA7Ci1zdGF0aWMgdWludDY0X3QgdGls
ZXNfZnJlZWQgPSAwOwotc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2FsbG9jYXRlZCA9IDA7Ci1zdGF0
aWMgdWludDY0X3QgYnl0ZXNfZnJlZWQgPSAwOwotCi1zdHJ1Y3QgdGlsZV9hY2NvdW50IHsKLSAg
ICBFdmFzX0Nvb3JkIHNpemU7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdWludDY0X3QgYWxsb2Nh
dGVkOwotICAgICAgICB1aW50NjRfdCBmcmVlZDsKLSAgICB9IHRpbGVzLCBieXRlczsKLX07Ci0K
LXN0YXRpYyBzaXplX3QgYWNjb3VudGluZ19sZW4gPSAwOwotc3RhdGljIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKmFjY291bnRpbmcgPSBOVUxMOwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKl9ld2tfdGlsZV9hY2NvdW50X2dldChjb25zdCBFd2tfVGlsZSAqdCkKLXsKLSAgICBz
dHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7Ci0gICAgc2l6ZV90IGk7Ci0KLSAgICBmb3IgKGkgPSAw
OyBpIDwgYWNjb3VudGluZ19sZW47IGkrKykgewotICAgICAgICBpZiAoYWNjb3VudGluZ1tpXS5z
aXplID09IHQtPncpCi0gICAgICAgICAgICByZXR1cm4gYWNjb3VudGluZyArIGk7Ci0gICAgfQot
Ci0gICAgaSA9IChhY2NvdW50aW5nX2xlbiArIDEpICogc2l6ZW9mKHN0cnVjdCB0aWxlX2FjY291
bnQpOwotICAgIFJFQUxMT0NfT1JfT09NX1JFVChhY2NvdW50aW5nLCBpLCBOVUxMKTsKLQotICAg
IGFjYyA9IGFjY291bnRpbmcgKyBhY2NvdW50aW5nX2xlbjsKLSAgICBhY2MtPnNpemUgPSB0LT53
OwotICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkID0gMDsKLSAgICBhY2MtPnRpbGVzLmZyZWVkID0g
MDsKLSAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCA9IDA7Ci0gICAgYWNjLT5ieXRlcy5mcmVlZCA9
IDA7Ci0KLSAgICBhY2NvdW50aW5nX2xlbisrOwotCi0gICAgcmV0dXJuIGFjYzsKLX0KLQotc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGls
ZSAqdCkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2MgPSBfZXdrX3RpbGVfYWNjb3Vu
dF9nZXQodCk7Ci0gICAgaWYgKCFhY2MpCi0gICAgICAgIHJldHVybjsKLSAgICBhY2MtPmJ5dGVz
LmFsbG9jYXRlZCArPSB0LT5ieXRlczsKLSAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCsrOwotCi0g
ICAgYnl0ZXNfYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwotICAgIHRpbGVzX2FsbG9jYXRlZCsrOwot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdr
X1RpbGUgKnQpCi17Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2Fj
Y291bnRfZ2V0KHQpOwotICAgIGlmICghYWNjKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhY2Mt
PmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwotICAgIGFjYy0+dGlsZXMuZnJlZWQrKzsKLQotICAg
IGJ5dGVzX2ZyZWVkICs9IHQtPmJ5dGVzOwotICAgIHRpbGVzX2ZyZWVkKys7Ci19Ci0KLXZvaWQg
ZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50
ICphY2M7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjX2VuZDsKLQotICAgIHByaW50Zigi
VElMRSBCQUxBTkNFOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0g
ICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAg
ICAgICAgICAgIHRpbGVzX2FsbG9jYXRlZCwgdGlsZXNfZnJlZWQsIHRpbGVzX2FsbG9jYXRlZCAt
IHRpbGVzX2ZyZWVkLAotICAgICAgICAgICAgYnl0ZXNfYWxsb2NhdGVkLCBieXRlc19mcmVlZCwg
Ynl0ZXNfYWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQpOwotCi0gICAgaWYgKCFhY2NvdW50aW5nX2xl
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYWNjID0gYWNjb3VudGluZzsKLSAgICBhY2NfZW5k
ID0gYWNjICsgYWNjb3VudGluZ19sZW47Ci0gICAgcHJpbnRmKCJCRUdJTjogVElMRSBCQUxBTkNF
IERFVEFJTFMgKFRPIFRISVMgTU9NRU5UISk6XG4iKTsKLSAgICBmb3IgKDsgYWNjIDwgYWNjX2Vu
ZDsgYWNjKyspIHsKLSAgICAgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwotCi0gICAgICAgIHRp
bGVzID0gYWNjLT50aWxlcy5hbGxvY2F0ZWQgLSBhY2MtPnRpbGVzLmZyZWVkOwotICAgICAgICBi
eXRlcyA9IGFjYy0+Ynl0ZXMuYWxsb2NhdGVkIC0gYWNjLT5ieXRlcy5mcmVlZDsKLQotICAgICAg
ICBwcmludGYoIiAgICU0ZDogdGlsZXNbKyU0IlBSSXU2NCIsLSU0IlBSSXU2NCI6JTQiUFJJdTY0
Il0gIgotICAgICAgICAgICAgICAgImJ5dGVzWyslOCJQUkl1NjQiLC0lOCJQUkl1NjQiOiU4IlBS
SXU2NCJdJXNcbiIsCi0gICAgICAgICAgICAgICBhY2MtPnNpemUsCi0gICAgICAgICAgICAgICBh
Y2MtPnRpbGVzLmFsbG9jYXRlZCwgYWNjLT50aWxlcy5mcmVlZCwgdGlsZXMsCi0gICAgICAgICAg
ICAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCwgYWNjLT5ieXRlcy5mcmVlZCwgYnl0ZXMsCi0gICAg
ICAgICAgICAgICAoYnl0ZXMgfHwgdGlsZXMpID8gIiBQT1NTSUJMRSBMRUFLIiA6ICIiKTsKLSAg
ICB9Ci0gICAgcHJpbnRmKCJFTkQ6IFRJTEUgQkFMQU5DRSBERVRBSUxTIChUTyBUSElTIE1PTUVO
VCEpOlxuIik7Ci19Ci0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291
bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxlICp0KSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9Ci0KLXZvaWQgZXdr
X3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKLXsKLSAgICBwcmludGYoImNvbXBpbGUgd2Via2l0
IHdpdGggREVCVUdfTUVNX0xFQUtTIGRlZmluZWQhXG4iKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAqdCwgdWludDhfdCBy
LCB1aW50OF90IGcsIHVpbnQ4X3QgYikKLXsKLSAgICB1aW50MzJfdCAqZHN0MzIsICpkc3QzMl9l
bmQsIGMxOwotICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7Ci0KLSAgICBjMSA9
IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXIgPDwgMTYpIHwgKCh1aW50MzJfdClnIDw8IDgpIHwg
YjsKLSAgICBjMiA9ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7Ci0KLSAgICBkc3Q2NCA9ICh1
aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+Ynl0ZXMg
LyA4KSAmIH43KTsKLSAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsK
LSAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KLSAg
ICAgICAgZHN0NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAgICAgZHN0
NjRbMl0gPSBjMjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRbNF0gPSBj
MjsKLSAgICAgICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsKLSAgICAg
ICAgZHN0NjRbN10gPSBjMjsKLSAgICB9Ci0KLSAgICBkc3QzMiA9ICh1aW50MzJfdCAqKWRzdDY0
X2VuZDsKLSAgICBkc3QzMl9lbmQgPSAodWludDMyX3QgKikodC0+cGl4ZWxzICsgdC0+Ynl0ZXMp
OwotICAgIGZvciAoOyBkc3QzMiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKLSAgICAgICAgKmRzdDMy
ID0gYzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3
a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQotewotICAgIHVpbnQx
Nl90ICpkc3QxNiwgKmRzdDE2X2VuZCwgYzE7Ci0gICAgdWludDY0X3QgKmRzdDY0LCAqZHN0NjRf
ZW5kLCBjMjsKLQotICAgIGMxID0gKCgoKHIgPj4gMykgJiAweDFmKSA8PCAxMSkgfAotICAgICAg
ICAgICgoKGcgPj4gMikgJiAweDNmKSA8PCA1KSB8Ci0gICAgICAgICAgKChiID4+IDMpICYgMHgx
ZikpOwotCi0gICAgYzIgPSAoKCh1aW50NjRfdCljMSA8PCA0OCkgfCAoKHVpbnQ2NF90KWMxIDw8
IDMyKSB8Ci0gICAgICAgICAgKCh1aW50NjRfdCljMSA8PCAxNikgfCBjMSk7Ci0KLSAgICBkc3Q2
NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+
Ynl0ZXMgLyA4KSAmIH43KTsKLSAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9
IDgpIHsKLSAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMg
Ki8KLSAgICAgICAgZHN0NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAg
ICAgZHN0NjRbMl0gPSBjMjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRb
NF0gPSBjMjsKLSAgICAgICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsK
LSAgICAgICAgZHN0NjRbN10gPSBjMjsKLSAgICB9Ci0KLSAgICBkc3QxNiA9ICh1aW50MTZfdCAq
KWRzdDE2X2VuZDsKLSAgICBkc3QxNl9lbmQgPSAodWludDE2X3QgKikodC0+cGl4ZWxzICsgdC0+
Ynl0ZXMpOwotICAgIGZvciAoOyBkc3QxNiA8IGRzdDE2X2VuZDsgZHN0MTYrKykKLSAgICAgICAg
KmRzdDE2ID0gYzE7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdr
X1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCi17Ci0gICAgaWYgKHQt
PmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpCi0gICAgICAgIF9ld2tfdGlsZV9w
YWludF9yZ2I4ODgodCwgciwgZywgYik7Ci0gICAgZWxzZSBpZiAodC0+Y3NwYWNlID09IEVWQVNf
Q09MT1JTUEFDRV9SR0I1NjVfQTVQKQotICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KHQs
IHIsIGcsIGIpOwotICAgIGVsc2UKLSAgICAgICAgRVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAl
ZCIsIHQtPmNzcGFjZSk7Ci19Ci0KLS8qKgotICogQ3JlYXRlIGEgbmV3IHRpbGUgb2YgZ2l2ZW4g
c2l6ZSwgem9vbSBsZXZlbCBhbmQgY29sb3JzcGFjZS4KLSAqCi0gKiBBZnRlciBjcmVhdGVkIHRo
ZXNlIHByb3BlcnRpZXMgYXJlIGltbXV0YWJsZSBhcyB0aGV5J3JlIHRoZSBiYXNpYwotICogY2hh
cmFjdGVyaXN0aWMgb2YgdGhlIHRpbGUgYW5kIGFueSBjaGFuZ2Ugd2lsbCBsZWFkIHRvIGludmFs
aWQKLSAqIG1lbW9yeSBhY2Nlc3MuCi0gKgotICogT3RoZXIgbWVtYmVycyBhcmUgb2YgZnJlZS1h
Y2Nlc3MgYW5kIG5vIGdldHRlcnMvc2V0dGVycyBhcmUKLSAqIHByb3ZpZGVkIGluIG9yZGVyciB0
byBhdm9pZCBleHBlbnNpdmUgb3BlcmF0aW9ucyBvbiB0aG9zZSwgaG93ZXZlcgotICogc29tZSBh
cmUgYmV0dGVyIG1hbmlwdWxhdGVkIHdpdGggcHJvdmlkZWQgZnVuY3Rpb25zLCBzdWNoIGFzCi0g
KiBld2tfdGlsZV9zaG93KCkgYW5kIGV3a190aWxlX2hpZGUoKSB0byBjaGFuZ2UKLSAqIEBjIHZp
c2libGUgb3IgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoKSwgZXdrX3RpbGVfdXBkYXRlX2FyZWEoKSwK
LSAqIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSB0byBjaGFuZ2UgQGMgc3RhdHMubWlzc2VzLAot
ICogQGMgc3RhdHMuZnVsbF91cGRhdGUgYW5kIEBjIHVwZGF0ZXMuCi0gKi8KLUV3a19UaWxlICpl
d2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0
IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UpCi17Ci0gICAgRXZhc19Db29yZCAqZWM7Ci0g
ICAgRXZhc19Db2xvcnNwYWNlICplY3M7Ci0gICAgZmxvYXQgKmY7Ci0gICAgc2l6ZV90ICpzOwot
ICAgIEV3a19UaWxlICp0OwotICAgIHVuc2lnbmVkIGludCBhcmVhOwotICAgIHNpemVfdCBieXRl
czsKLSAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7Ci0gICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVz
OwotICAgIGludCBzdHJpZGU7Ci0gICAgRWNvcmVfRXZhcyAqZWU7Ci0gICAgY29uc3QgY2hhciAq
ZW5naW5lOwotCi0gICAgYXJlYSA9IHcgKiBoOwotCi0gICAgaWYgKGNzcGFjZSA9PSBFVkFTX0NP
TE9SU1BBQ0VfQVJHQjg4ODgpIHsKLSAgICAgICAgYnl0ZXMgPSBhcmVhICogNDsKLSAgICAgICAg
c3RyaWRlID0gdyAqIDQ7Ci0gICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7Ci0g
ICAgfSBlbHNlIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApIHsKLSAg
ICAgICAgYnl0ZXMgPSBhcmVhICogMjsKLSAgICAgICAgc3RyaWRlID0gdyAqIDI7Ci0gICAgICAg
IGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IxNl81NjU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
RVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAlZCIsIGNzcGFjZSk7Ci0gICAgICAgIHJldHVybiBO
VUxMOwotICAgIH0KLQotICAgIERCRygic2l6ZTogJWR4JWQgKCVkKSwgem9vbTogJWYsIGNzcGFj
ZT0lZCIsIHcsIGgsIGFyZWEsIChkb3VibGUpem9vbSwgY3NwYWNlKTsKLQotICAgIE1BTExPQ19P
Ul9PT01fUkVUKHQsIHNpemVvZihFd2tfVGlsZSksIE5VTEwpOwotICAgIHQtPmltYWdlID0gZXZh
c19vYmplY3RfaW1hZ2VfYWRkKGV2YXMpOwotCi0gICAgZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2
YXNfZ2V0KGV2YXMpOwotICAgIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVl
KTsKLSAgICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gxMSIpKQotICAg
ICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHQtPmltYWdlLCBFVkFTX0lN
QUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKLQotICAgIHQtPnZpc2libGUgPSAwOwotICAgIHQt
PnVwZGF0ZXMgPSBOVUxMOwotCi0gICAgbWVtc2V0KCZ0LT5zdGF0cywgMCwgc2l6ZW9mKEV3a19U
aWxlX1N0YXRzKSk7Ci0gICAgdC0+c3RhdHMuYXJlYSA9IGFyZWE7Ci0KLSAgICAvKiB1Z2x5LCBi
dXQgbGV0J3MgYXZvaWQgYXQgYWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2Ug
Ki8KLSAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPnc7Ci0gICAgKmVjID0gdzsKLQotICAgIGVj
ID0gKEV2YXNfQ29vcmQgKikmdC0+aDsKLSAgICAqZWMgPSBoOwotCi0gICAgZWNzID0gKEV2YXNf
Q29sb3JzcGFjZSAqKSZ0LT5jc3BhY2U7Ci0gICAgKmVjcyA9IGNzcGFjZTsKLQotICAgIGYgPSAo
ZmxvYXQgKikmdC0+em9vbTsKLSAgICAqZiA9IHpvb207Ci0KLSAgICBzID0gKHNpemVfdCAqKSZ0
LT5ieXRlczsKLSAgICAqcyA9IGJ5dGVzOwotCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9z
ZXQodC0+aW1hZ2UsIHQtPncsIHQtPmgpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3Bh
Y2Vfc2V0KHQtPmltYWdlLCB0LT5jc3BhY2UpOwotICAgIHQtPnBpeGVscyA9IGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfZ2V0KHQtPmltYWdlLCBFSU5BX1RSVUUpOwotICAgIHQtPnN1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0LT5waXhlbHMsIGZvcm1hdCwgdywg
aCwgc3RyaWRlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyh0LT5zdXJmYWNl
KTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7Ci0gICAgICAgIEVS
UigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsCi0gICAgICAgICAgICBjYWly
b19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAgICAgICBmcmVlKHQpOwotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJm
YWNlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8pOwotICAgIGlmIChzdGF0
dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKLSAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3Jl
YXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKLSAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKHQtPmltYWdlKTsKLSAgICAgICAgZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0g
ICAgfQotCi0gICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOwotCi0gICAgcmV0dXJu
IHQ7Ci19Ci0KLS8qKgotICogRnJlZSB0aWxlIG1lbW9yeS4KLSAqLwotdm9pZCBld2tfdGlsZV9m
cmVlKEV3a19UaWxlICp0KQotewotICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOwotCi0g
ICAgaWYgKHQtPnVwZGF0ZXMpCi0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsK
LQotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKLSAgICBjYWlyb19kZXN0
cm95KHQtPmNhaXJvKTsKLSAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOwotICAgIGZyZWUo
dCk7Ci19Ci0KLS8qKgotICogTWFrZSB0aGUgdGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRz
IGNvdW50ZXIuCi0gKi8KLXZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSAqdCkKLXsKLSAgICB0
LT52aXNpYmxlKys7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyh0LT5pbWFnZSk7Ci19Ci0KLS8qKgot
ICogRGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBpbnZpc2libGUg
aWYgbmVjZXNzYXJ5LgotICovCi12b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpCi17Ci0g
ICAgdC0+dmlzaWJsZS0tOwotICAgIGlmICghdC0+dmlzaWJsZSkKLSAgICAgICAgZXZhc19vYmpl
Y3RfaGlkZSh0LT5pbWFnZSk7Ci19Ci0KLS8qKgotICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhl
IHRpbGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KLUVpbmFfQm9vbCBl
d2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKLXsKLSAgICByZXR1cm4gISF0LT52aXNp
YmxlOwotfQotCi0vKioKLSAqIE1hcmsgd2hvbGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5n
IHVwZGF0ZS4KLSAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKLXsK
LSAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0LT5z
dGF0cy5taXNzZXMrKzsKLQotICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKLSAgICAg
ICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRh
dGVzKSB7Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAg
ICAgICB0LT51cGRhdGVzID0gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLX0KLQotLyoqCi0gKiBN
YXJrIHRoZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgot
ICovCi12b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqcikKLXsKLSAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRl
cz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMrKzsKLQotICAgIGlmICh0LT5zdGF0cy5mdWxsX3Vw
ZGF0ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncg
PT0gdC0+dyAmJiByLT5oID09IHQtPmgpIHsKLSAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUg
PSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBlaW5h
X3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAgICAgICB0LT51cGRhdGVzID0gTlVMTDsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF0LT51cGRhdGVz
KSB7Ci0gICAgICAgIHQtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKLSAg
ICAgICAgaWYgKCF0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90
IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHQtPncsIHQtPmgpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRh
dGVzLCByKTsKLX0KLQotLyoqCi0gKiBGb3IgZWFjaCB1cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUg
Z2l2ZW4gZnVuY3Rpb24uCi0gKgotICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3Rh
dGlzdGljcyBvciBjbGVhciB0aGUgcHJvY2Vzc2VkCi0gKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVf
dXBkYXRlc19jbGVhcigpIGZvciB0aGF0LgotICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJv
Y2VzcyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29u
c3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgaWYg
KHQtPnN0YXRzLmZ1bGxfdXBkYXRlKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7Ci0gICAg
ICAgIHIueCA9IDA7Ci0gICAgICAgIHIueSA9IDA7Ci0gICAgICAgIHIudyA9IHQtPnc7Ci0gICAg
ICAgIHIuaCA9IHQtPmg7Ci0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCi0g
ICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWV2OwotICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0
OwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCBOVUxMKTsKLSAgICAgICAgcmVuZGVyX3N0
YXJ0ID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwotICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2
LnR2X3VzZWMpIC8gMTAwMDAwMCk7Ci0jZW5kaWYKLSAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0
LCAmcik7Ci0jaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCi0gICAgICAgIGdl
dHRpbWVvZmRheSgmdGltZXYsIE5VTEwpOwotICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9
IChkb3VibGUpdGltZXYudHZfc2VjICsKLSAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91
c2VjKSAvIDEwMDAwMDApIC0gcmVuZGVyX3N0YXJ0OwotI2VuZGlmCi0gICAgfSBlbHNlIGlmICh0
LT51cGRhdGVzKSB7Ci0gICAgICAgIEVpbmFfSXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRl
cmF0b3JfbmV3KHQtPnVwZGF0ZXMpOwotICAgICAgICBFaW5hX1JlY3RhbmdsZSAqcjsKLSAgICAg
ICAgaWYgKCFpdHIpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRp
bGVyIGl0ZXJhdG9yISIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAg
IEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdHIsIHIpCi0gICAgICAgICAgICBjYigodm9pZCAqKWRh
dGEsIHQsIHIpOwotICAgICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKLSAgICB9Ci19Ci0K
LS8qKgotICogQ2xlYXIgYWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCi0gKgotICogVGhp
cyB3aWxsIGNoYW5nZSB0aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1p
c3NlcwotICogYW5kIHVuc2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0
ZWQsIHRoZW4gaXQgd2lsbCBiZQotICogZGVzdHJveWVkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24g
aXMgdXN1YWxseSBjYWxsZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKLSAq
IGNhbGxlZC4KLSAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQot
ewotICAgIC8qIFRPRE86IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVzPyAqLwot
ICAgIHQtPnN0YXRzLm1pc3NlcyA9IDA7Ci0KLSAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUp
Ci0gICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gMDsKLSAgICBlbHNlIGlmICh0LT51cGRh
dGVzKSB7Ci0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKLSAgICAgICAgdC0+
dXBkYXRlcyA9IE5VTEw7Ci0gICAgfQotfQotCi10eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5IEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKLXN0cnVjdCBfRXdr
X1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IHsKLSAgICBFd2tfVGlsZSAqdGlsZTsKLSAgICBpbnQg
d2VpZ2h0OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdr
X1RpbGUgKnQpOwotICAgICAgICB2b2lkICpkYXRhOwotICAgIH0gdGlsZV9mcmVlOwotfTsKLQot
c3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgewotICAgIHN0cnVjdCB7Ci0gICAgICAgIEVp
bmFfTGlzdCAqbGlzdDsKLSAgICAgICAgc2l6ZV90IGNvdW50OwotICAgICAgICBzaXplX3QgYWxs
b2NhdGVkOwotICAgIH0gZW50cmllczsKLSAgICBzdHJ1Y3QgewotICAgICAgICBzaXplX3QgbWF4
OyAgLyoqPCB3YXRlcm1hcmsgKGluIGJ5dGVzKSB0byBzdGFydCBmcmVlaW5nIHRpbGVzICovCi0g
ICAgICAgIHNpemVfdCB1c2VkOyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3JlIHRoYW4gbWF4LiAq
LwotICAgIH0gbWVtb3J5OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwg
dywgaDsKLSAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgRWluYV9Cb29sIGxvY2tlZDsKLSAg
ICB9IGxvY2tlZDsKLSAgICBpbnQgcmVmZXJlbmNlczsKLSAgICB1bnNpZ25lZCBpbnQgZnJvemVu
OwotfTsKLQotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9J
TklUSUFMID0gMTI4Owotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExP
Q0FURV9TVEVQID0gMTY7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01B
WF9GUkVFID0gMzI7Ci0KLS8qKgotICogQ2FjaGUgb2YgdW51c2VkIHRpbGVzICh0aG9zZSB0aGF0
IGFyZSBub3QgdmlzaWJsZSkuCi0gKgotICogVGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KLSAq
Ci0gKiBAcGFyYW0gbWF4IGNhY2hlIHNpemUgaW4gYnl0ZXMuCi0gKgotICogQHJldHVybiBuZXds
eSBhbGxvY2F0ZWQgY2FjaGUgb2YgdW51c2VkIHRpbGVzLCB1c2UKLSAqICAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4gSWYgbm90Ci0gKiAg
ICAgICAgIHBvc3NpYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSwgQGMgTlVMTCBpcyByZXR1cm5lZC4K
LSAqLwotRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNp
emVfdCBtYXgpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Ci0KLSAgICBDQUxM
T0NfT1JfT09NX1JFVCh0dWMsIHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUpLCBOVUxMKTsK
LQotICAgIERCRygidHVjPSVwIiwgdHVjKTsKLSAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7Ci0g
ICAgdHVjLT5yZWZlcmVuY2VzID0gMTsKLSAgICByZXR1cm4gdHVjOwotfQotCi12b2lkIGV3a190
aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxv
YXQgem9vbSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotCi0gICAg
dHVjLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVFOwotICAgIHR1Yy0+bG9ja2VkLnggPSB4Owot
ICAgIHR1Yy0+bG9ja2VkLnkgPSB5OwotICAgIHR1Yy0+bG9ja2VkLncgPSB3OwotICAgIHR1Yy0+
bG9ja2VkLmggPSBoOwotICAgIHR1Yy0+bG9ja2VkLnpvb20gPSB6b29tOwotfQotCi12b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotCi0gICAgdHVjLT5s
b2NrZWQubG9ja2VkID0gRUlOQV9GQUxTRTsKLX0KLQotLyoqCi0gKiBGcmVlIGNhY2hlIG9mIHVu
dXNlZCB0aWxlcy4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBi
eSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYKLSAqIGZ1bmN0aW9uLiBDYWxsaW5nIHRoaXMg
ZnVuY3Rpb24gd2l0aG91dCBjb25zaWRlcmluZyByZWZlcmVuY2UgY291bnRpbmcKLSAqIG1heSBs
ZWFkIHRvIHVua25vd24gcmVzdWx0cy4KLSAqCi0gKiBUaG9zZSB0aWxlcyB0aGF0IGFyZSBzdGls
bCB2aXNpYmxlIHdpbGwgcmVtYWluIGxpdmUuIFRoZSB1bnVzZWQKLSAqIHRpbGVzIHdpbGwgYmUg
ZnJlZWQuCi0gKgotICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQotICovCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLQotICAg
IERCRygidHVjPSVwLCAiCi0gICAgICAgICJlbnRyaWVzPShjb3VudDolemQsIGFsbG9jYXRlZDol
emQpLCAiCi0gICAgICAgICJtZW1vcnk9KG1heDolemQsIHVzZWQ6JXpkKSIsCi0gICAgICAgIHR1
YywgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAotICAgICAgICB0
dWMtPm1lbW9yeS5tYXgsIHR1Yy0+bWVtb3J5LnVzZWQpOwotCi0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2NsZWFyKHR1Yyk7Ci0gICAgZnJlZSh0dWMpOwotfQotCi0vKioKLSAqIENsZWFyIGNh
Y2hlIG9mIHVudXNlZCB0aWxlcy4KLSAqCi0gKiBBbnkgdGlsZXMgdGhhdCBhcmUgaW4gdGhlIGNh
Y2hlIGFyZSBmcmVlZC4gVGhlIG9ubHkgdGlsZXMgdGhhdCBhcmUKLSAqIGtlcHQgYXJlIHRob3Nl
IHRoYXQgYXJlbid0IGluIHRoZSBjYWNoZSAoaS5lLiB0aGF0IGFyZSB2aXNpYmxlKS4KLSAqLwot
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLQotICAgIGlmICghdHVjLT5lbnRyaWVzLmNvdW50
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBFSU5BX0xJU1RfRlJFRSh0dWMtPmVudHJpZXMubGlz
dCwgaXRyKSB7Ci0gICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVlLmRhdGEs
IGl0ci0+dGlsZSk7Ci0gICAgICAgIGZyZWUoaXRyKTsKLSAgICB9Ci0KLSAgICB0dWMtPm1lbW9y
eS51c2VkID0gMDsKLSAgICB0dWMtPmVudHJpZXMuY291bnQgPSAwOwotfQotCi0vKioKLSAqIEhv
bGQgcmVmZXJlbmNlIHRvIGNhY2hlLgotICoKLSAqIEByZXR1cm4gc2FtZSBwb2ludGVyIGFzIHRh
a2VuLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKLSAqLwotRXdr
X1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0
dWMsIE5VTEwpOwotICAgIHR1Yy0+cmVmZXJlbmNlcysrOwotICAgIHJldHVybiB0dWM7Ci19Ci0K
LS8qKgotICogUmVsZWFzZSBjYWNoZSByZWZlcmVuY2UsIGZyZWVpbmcgaXQgaWYgaXQgZHJvcHMg
dG8gemVyby4KLSAqCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoKQotICogQHNl
ZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpCi0gKi8KLXZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0gICAgdHVjLT5yZWZlcmVuY2VzLS07Ci0gICAgaWYg
KCF0dWMtPnJlZmVyZW5jZXMpCi0gICAgICAgIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSh0
dWMpOwotfQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgbWF4KQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHR1Yyk7Ci0gICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OwotfQotCi1zaXplX3QgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Ci0gICAg
cmV0dXJuIHR1Yy0+bWVtb3J5Lm1heDsKLX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNo
ZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKLSAgICByZXR1cm4gdHVjLT5tZW1v
cnkudXNlZDsKLX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQotewotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSAqaXRyOwotICAgIEVpbmFfTGlzdCAqbCwgKmxfbmV4dDsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKLSAgICBzaXplX3QgZG9uZTsKLSAg
ICB1bnNpZ25lZCBpbnQgY291bnQ7Ci0KLSAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGJ5dGVzIDwgMSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICAvKgotICAgICAqIE5PVEU6IHRoZSBjYWNoZSBpcyBhIEZJRk8gcXVldWUgY3VycmVudGx5
LgotICAgICAqIERvbid0IG5lZWQgdG8gc29ydCBhbnkgbW9yZS4KLSAgICAgKi8KLQotICAgIGRv
bmUgPSAwOwotICAgIGNvdW50ID0gMDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+
ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0cikgewotICAgICAgICBFd2tfVGlsZSAqdCA9IGl0
ci0+dGlsZTsKLSAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBpZiAodHVjLT5sb2NrZWQubG9ja2VkCi0gICAgICAgICAgICAmJiB0LT54ICsgdC0+
dyA+IHR1Yy0+bG9ja2VkLngKLSAgICAgICAgICAgICYmIHQtPnkgKyB0LT5oID4gdHVjLT5sb2Nr
ZWQueQotICAgICAgICAgICAgJiYgdC0+eCA8IHR1Yy0+bG9ja2VkLnggKyB0dWMtPmxvY2tlZC53
Ci0gICAgICAgICAgICAmJiB0LT55IDwgdHVjLT5sb2NrZWQueSArIHR1Yy0+bG9ja2VkLmgKLSAg
ICAgICAgICAgICYmIHQtPnpvb20gPT0gdHVjLT5sb2NrZWQuem9vbSkgewotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgZG9uZSArPSBzaXplb2YoRXdrX1RpbGUpICsg
aXRyLT50aWxlLT5ieXRlczsKLSAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2Zy
ZWUuZGF0YSwgaXRyLT50aWxlKTsKLSAgICAgICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xp
c3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGwpOwotICAgICAgICBmcmVlKGl0cik7
Ci0gICAgICAgIGNvdW50Kys7Ci0gICAgfQotCi0gICAgdHVjLT5tZW1vcnkudXNlZCAtPSBkb25l
OwotICAgIHR1Yy0+ZW50cmllcy5jb3VudCAtPSBjb3VudDsKLQotICAgIHJldHVybiBkb25lOwot
fQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0g
ICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPD0gdHVjLT5tZW1vcnkubWF4KQotICAgICAgICByZXR1
cm47Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKHR1YywgdHVjLT5tZW1vcnkudXNl
ZCAtIHR1Yy0+bWVtb3J5Lm1heCk7Ci0gICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPiB0dWMtPm1l
bW9yeS5tYXgpCi0gICAgICAgIENSSVRJQ0FMKCJDYWNoZSBzdGlsbCB1c2luZyB0b28gbXVjaCBt
ZW1vcnk6ICV6ZCBLQjsgbWF4OiAlemQgS0IiLAotICAgICAgICAgICAgICAgICB0dWMtPm1lbW9y
eS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOwotfQotCi0vKioKLSAqIEZyZWV6ZSBjYWNoZSB0byBu
b3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCi0gKgotICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1p
emUgY2FjaGUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93IHdlIHNob3VsZAotICogaG9sZCBvbiB0
aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6
ZQotICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgotICoK
LSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoKQotICovCi12b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAg
dHVjLT5mcm96ZW4rKzsKLX0KLQotLyoqCi0gKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2UgdGFza3Mu
Ci0gKgotICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4g
bWFpbnRlbmFuY2UgdGFza3MKLSAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgotICovCi12b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewot
ICAgIGlmICghdHVjLT5mcm96ZW4pIHsKLSAgICAgICAgRVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBm
cmVlemluZyEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHR1Yy0+ZnJvemVuLS07
Ci19Ci0KLS8qKgotICogR2V0IHRpbGUgZnJvbSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIHJlbW92
aW5nIGl0IGZyb20gdGhlIGNhY2hlLgotICoKLSAqIElmIHRoZSB0aWxlIGlzIHVzZWQsIHRoZW4g
aXQncyBub3QgaW4gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCBzbyBpdAotICogaXMgcmVtb3ZlZCBm
cm9tIHRoZSBjYWNoZSBhbmQgbWF5IGJlIGdpdmVuIGJhY2sgd2l0aAotICogZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RpbGVfcHV0KCkuCi0gKgotICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQg
dGlsZXMKLSAqIEBwYXJhbSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUuCi0gKgotICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KLSAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90
aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQpCi17Ci0gICAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICplbnRyeTsKLSAgICBFaW5hX0xpc3QgKmUsICps
OwotCi0gICAgZSA9IE5VTEw7Ci0gICAgRUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxp
c3QsIGwsIGVudHJ5KQotICAgIHsKLSAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHQpIHsKLSAg
ICAgICAgICAgIGUgPSBsOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKCFlKSB7Ci0gICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4gY2FjaGUgJXAi
LCB0LCB0dWMpOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICB0dWMt
PmVudHJpZXMuY291bnQtLTsKLSAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNpemVvZihFd2tfVGls
ZSkgKyB0LT5ieXRlczsKLSAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1vdmVf
bGlzdCh0dWMtPmVudHJpZXMubGlzdCwgZSk7Ci0gICAgZnJlZShlbnRyeSk7Ci0KLSAgICByZXR1
cm4gRUlOQV9UUlVFOwotfQotCi0vKioKLSAqIFB1dCB0aWxlIGludG8gY2FjaGUgb2YgdW51c2Vk
IHRpbGVzLCBhZGRpbmcgaXQgdG8gdGhlIGNhY2hlLgotICoKLSAqIFRoaXMgc2hvdWxkIGJlIGNh
bGxlZCB3aGVuIEBjIHQtPnZpc2libGUgaXMgQGMgMCBhbmQgbm8gb2JqZWN0cyBhcmUKLSAqIHVz
aW5nIHRoZSB0aWxlIGFueW1vcmUsIG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYmUgZXhwaXJlZCBh
bmQgaGF2ZQotICogaXRzIG1lbW9yeSByZXBsYWNlZC4KLSAqCi0gKiBOb3RlIHRoYXQgdGlsZXMg
YXJlIG5vdCBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQgaWYgY2FjaGUgaXMgZnVsbCwKLSAqIGluc3Rl
YWQgdGhlIGNhY2hlIHdpbGwgaGF2ZSBtb3JlIGJ5dGVzIHVzZWQgdGhhbiBtYXhpbXVtIGFuZCBv
bmUKLSAqIGNhbiBjYWxsIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkgdG8gZnJl
ZSB0aGVtLiBUaGlzIGlzIGRvbmUKLSAqIGJlY2F1c2UgdXN1YWxseSB3ZSB3YW50IGEgbGF6eSBv
cGVyYXRpb24gZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KLSAqCi0gKiBAcGFyYW0gdHVjIGNhY2hl
IG9mIHVudXNlZCB0aWxlcwotICogQHBhcmFtIHQgdGlsZSB0byBiZSBhZGRlZCB0byBjYWNoZS4K
LSAqIEBwYXJhbSB0aWxlX2ZyZWVfY2IgZnVuY3Rpb24gdXNlZCB0byBmcmVlIHRpbGVzLgotICog
QHBhcmFtIGRhdGEgY29udGV4dCB0byBnaXZlIGJhY2sgdG8gQGEgdGlsZV9mcmVlX2NiIGFzIGZp
cnN0IGFyZ3VtZW50LgotICoKLSAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlO
QV9GQUxTRSBvdGhlcndpc2UuIElmIEBjIHQtPnZpc2libGUKLSAqICAgICAgICAgaXMgbm90ICNF
SU5BX0ZBTFNFLCB0aGVuIGl0IHdpbGwgcmV0dXJuICNFSU5BX0ZBTFNFLgotICoKLSAqIEBzZWUg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKQotICovCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tf
VGlsZSAqdCwgdm9pZCAoKnRpbGVfZnJlZV9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpLCBj
b25zdCB2b2lkICpkYXRhKQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqZTsK
LQotICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51
c2VkICh2aXNpYmxlPSVkKSIsIHQsIHQtPnZpc2libGUpOwotICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKLSAgICB9Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChlLCBzaXplb2YoRXdrX1RpbGVf
VW51c2VkX0NhY2hlX0VudHJ5KSwgRUlOQV9GQUxTRSk7Ci0gICAgdHVjLT5lbnRyaWVzLmxpc3Qg
PSBlaW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKLSAgICBpZiAoZWluYV9l
cnJvcl9nZXQoKSkgewotICAgICAgICBFUlIoIkxpc3QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgZS0+dGlsZSA9IHQ7Ci0gICAg
ZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCi0gICAgZS0+
dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOwotICAgIGUtPnRpbGVfZnJlZS5kYXRhID0gKHZv
aWQgKilkYXRhOwotCi0gICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7Ci0gICAgdHVjLT5tZW1vcnku
dXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7Ci0KLSAgICByZXR1cm4gRUlOQV9U
UlVFOwotfQotCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICpp
dHI7Ci0gICAgRWluYV9MaXN0ICpsOwotICAgIGludCBjb3VudCA9IDA7Ci0gICAgcHJpbnRmKCJD
YWNoZSBvZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9yeTogJXp1LyV6dVxu
IiwKLSAgICAgICAgICAgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVk
LAotICAgICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOwotCi0gICAg
RUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0cikgewotICAgICAgICBj
b25zdCBFd2tfVGlsZSAqdCA9IGl0ci0+dGlsZTsKLSAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNs
dSArICVkeCVkIEAgJTAuM2ZdJWMiLAotICAgICAgICAgICAgICAgdC0+Y29sLCB0LT5yb3csIHQt
PncsIHQtPmgsIHQtPnpvb20sCi0gICAgICAgICAgICAgICB0LT52aXNpYmxlID8gJyonOiAnICcp
OwotCi0gICAgICAgIGlmICghKGNvdW50ICUgNCkpCi0gICAgICAgICAgICBwcmludGYoIlxuIik7
Ci0gICAgfQotCi0gICAgcHJpbnRmKCJcbiIpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3RpbGVkX21vZGVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MTY4NTcyOTQwODk5YmRiZTg3MWQ2MzAxZmZk
Y2IxNGFjNDUzYmJkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tb2RlbC5jcHAKQEAgLTAsMCArMSw4NTEgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAgIENvcHlyaWdodCAoQykgMjAwOS0y
MDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAg
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgImV3a190aWxlZF9tb2RlbC5oIgorCisjaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPEVj
b3JlX0V2YXMuaD4KKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hl
Y2tzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+IC8vIFhYWCBSRU1PVkUgTUUgTEFURVIKKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJf
VElNRQorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKworI2RlZmluZSBJRFgoY29sLCBy
b3csIHJvd3NwYW4pIChjb2wgKyAocm93ICogcm93c3BhbikpCisKKyNpZmRlZiBERUJVR19NRU1f
TEVBS1MKK3N0YXRpYyB1aW50NjRfdCB0aWxlc19hbGxvY2F0ZWQgPSAwOworc3RhdGljIHVpbnQ2
NF90IHRpbGVzX2ZyZWVkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRlc19hbGxvY2F0ZWQgPSAw
Oworc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2ZyZWVkID0gMDsKKworc3RydWN0IHRpbGVfYWNjb3Vu
dCB7CisgICAgRXZhc19Db29yZCBzaXplOworICAgIHN0cnVjdCB7CisgICAgICAgIHVpbnQ2NF90
IGFsbG9jYXRlZDsKKyAgICAgICAgdWludDY0X3QgZnJlZWQ7CisgICAgfSB0aWxlcywgYnl0ZXM7
Cit9OworCitzdGF0aWMgc2l6ZV90IGFjY291bnRpbmdfbGVuID0gMDsKK3N0YXRpYyBzdHJ1Y3Qg
dGlsZV9hY2NvdW50ICphY2NvdW50aW5nID0gMDsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdGls
ZV9hY2NvdW50ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCit7Cisg
ICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjOworICAgIHNpemVfdCBpOworCisgICAgZm9yIChp
ID0gMDsgaSA8IGFjY291bnRpbmdfbGVuOyBpKyspIHsKKyAgICAgICAgaWYgKGFjY291bnRpbmdb
aV0uc2l6ZSA9PSB0LT53KQorICAgICAgICAgICAgcmV0dXJuIGFjY291bnRpbmcgKyBpOworICAg
IH0KKworICAgIGkgPSAoYWNjb3VudGluZ19sZW4gKyAxKSAqIHNpemVvZihzdHJ1Y3QgdGlsZV9h
Y2NvdW50KTsKKyAgICBSRUFMTE9DX09SX09PTV9SRVQoYWNjb3VudGluZywgaSwgMCk7CisKKyAg
ICBhY2MgPSBhY2NvdW50aW5nICsgYWNjb3VudGluZ19sZW47CisgICAgYWNjLT5zaXplID0gdC0+
dzsKKyAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCA9IDA7CisgICAgYWNjLT50aWxlcy5mcmVlZCA9
IDA7CisgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgPSAwOworICAgIGFjYy0+Ynl0ZXMuZnJlZWQg
PSAwOworCisgICAgYWNjb3VudGluZ19sZW4rKzsKKworICAgIHJldHVybiBhY2M7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1Rp
bGUgKnQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2FjY291
bnRfZ2V0KHQpOworICAgIGlmICghYWNjKQorICAgICAgICByZXR1cm47CisgICAgYWNjLT5ieXRl
cy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQrKzsKKwor
ICAgIGJ5dGVzX2FsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICB0aWxlc19hbGxvY2F0ZWQrKzsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3
a19UaWxlICp0KQoreworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9IF9ld2tfdGlsZV9h
Y2NvdW50X2dldCh0KTsKKyAgICBpZiAoIWFjYykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWNj
LT5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPnRpbGVzLmZyZWVkKys7CisKKyAg
ICBieXRlc19mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0aWxlc19mcmVlZCsrOworfQorCit2b2lk
IGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3Vu
dCAqYWNjOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY19lbmQ7CisKKyAgICBwcmludGYo
IlRJTEUgQkFMQU5DRTogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgor
ICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il1cbiIsCisg
ICAgICAgICAgICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2ZyZWVkLCB0aWxlc19hbGxvY2F0ZWQg
LSB0aWxlc19mcmVlZCwKKyAgICAgICAgICAgIGJ5dGVzX2FsbG9jYXRlZCwgYnl0ZXNfZnJlZWQs
IGJ5dGVzX2FsbG9jYXRlZCAtIGJ5dGVzX2ZyZWVkKTsKKworICAgIGlmICghYWNjb3VudGluZ19s
ZW4pCisgICAgICAgIHJldHVybjsKKworICAgIGFjYyA9IGFjY291bnRpbmc7CisgICAgYWNjX2Vu
ZCA9IGFjYyArIGFjY291bnRpbmdfbGVuOworICAgIHByaW50ZigiQkVHSU46IFRJTEUgQkFMQU5D
RSBERVRBSUxTIChUTyBUSElTIE1PTUVOVCEpOlxuIik7CisgICAgZm9yICg7IGFjYyA8IGFjY19l
bmQ7IGFjYysrKSB7CisgICAgICAgIHVpbnQ2NF90IHRpbGVzLCBieXRlczsKKworICAgICAgICB0
aWxlcyA9IGFjYy0+dGlsZXMuYWxsb2NhdGVkIC0gYWNjLT50aWxlcy5mcmVlZDsKKyAgICAgICAg
Ynl0ZXMgPSBhY2MtPmJ5dGVzLmFsbG9jYXRlZCAtIGFjYy0+Ynl0ZXMuZnJlZWQ7CisKKyAgICAg
ICAgcHJpbnRmKCIgICAlNGQ6IHRpbGVzWyslNCJQUkl1NjQiLC0lNCJQUkl1NjQiOiU0IlBSSXU2
NCJdICIKKyAgICAgICAgICAgICAgICJieXRlc1srJTgiUFJJdTY0IiwtJTgiUFJJdTY0IjolOCJQ
Ukl1NjQiXSVzXG4iLAorICAgICAgICAgICAgICAgYWNjLT5zaXplLAorICAgICAgICAgICAgICAg
YWNjLT50aWxlcy5hbGxvY2F0ZWQsIGFjYy0+dGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAg
ICAgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQsIGFjYy0+Ynl0ZXMuZnJlZWQsIGJ5dGVzLAorICAg
ICAgICAgICAgICAgKGJ5dGVzIHx8IHRpbGVzKSA/ICIgUE9TU0lCTEUgTEVBSyIgOiAiIik7Cisg
ICAgfQorICAgIHByaW50ZigiRU5EOiBUSUxFIEJBTEFOQ0UgREVUQUlMUyAoVE8gVEhJUyBNT01F
TlQhKTpcbiIpOworfQorI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2Nv
dW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQorCit2b2lkIGV3
a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit7CisgICAgcHJpbnRmKCJjb21waWxlIHdlYmtp
dCB3aXRoIERFQlVHX01FTV9MRUFLUyBkZWZpbmVkIVxuIik7Cit9CisjZW5kaWYKKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1RpbGUgKnQsIHVpbnQ4X3Qg
ciwgdWludDhfdCBnLCB1aW50OF90IGIpCit7CisgICAgdWludDMyX3QgKmRzdDMyLCAqZHN0MzJf
ZW5kLCBjMTsKKyAgICB1aW50NjRfdCAqZHN0NjQsICpkc3Q2NF9lbmQsIGMyOworCisgICAgYzEg
PSAweGZmMDAwMDAwIHwgKCh1aW50MzJfdClyIDw8IDE2KSB8ICgodWludDMyX3QpZyA8PCA4KSB8
IGI7CisgICAgYzIgPSAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8IGMxOworCisgICAgZHN0NjQgPSAo
dWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHQtPmJ5dGVz
IC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7
CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCisg
ICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAgIGRzdDY0WzFdID0gYzI7CisgICAgICAgIGRz
dDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNdID0gYzI7CisgICAgICAgIGRzdDY0WzRdID0g
YzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7CisgICAgICAgIGRzdDY0WzZdID0gYzI7CisgICAg
ICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisgICAgZHN0MzIgPSAodWludDMyX3QgKilkc3Q2
NF9lbmQ7CisgICAgZHN0MzJfZW5kID0gKHVpbnQzMl90ICopKHQtPnBpeGVscyArIHQtPmJ5dGVz
KTsKKyAgICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRzdDMyKyspCisgICAgICAgICpkc3Qz
MiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjU2NShF
d2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKK3sKKyAgICB1aW50
MTZfdCAqZHN0MTYsICpkc3QxNl9lbmQsIGMxOworICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0
X2VuZCwgYzI7CisKKyAgICBjMSA9ICgoKChyID4+IDMpICYgMHgxZikgPDwgMTEpIHwKKyAgICAg
ICAgICAoKChnID4+IDIpICYgMHgzZikgPDwgNSkgfAorICAgICAgICAgICgoYiA+PiAzKSAmIDB4
MWYpKTsKKworICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwgKCh1aW50NjRfdCljMSA8
PCAzMikgfAorICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwgYzEpOworCisgICAgZHN0
NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHQt
PmJ5dGVzIC8gOCkgJiB+Nyk7CisgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCAr
PSA4KSB7CisgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25z
ICovCisgICAgICAgIGRzdDY0WzBdID0gYzI7CisgICAgICAgIGRzdDY0WzFdID0gYzI7CisgICAg
ICAgIGRzdDY0WzJdID0gYzI7CisgICAgICAgIGRzdDY0WzNdID0gYzI7CisgICAgICAgIGRzdDY0
WzRdID0gYzI7CisgICAgICAgIGRzdDY0WzVdID0gYzI7CisgICAgICAgIGRzdDY0WzZdID0gYzI7
CisgICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgfQorCisgICAgZHN0MTYgPSAodWludDE2X3Qg
Kilkc3QxNl9lbmQ7CisgICAgZHN0MTZfZW5kID0gKHVpbnQxNl90ICopKHQtPnBpeGVscyArIHQt
PmJ5dGVzKTsKKyAgICBmb3IgKDsgZHN0MTYgPCBkc3QxNl9lbmQ7IGRzdDE2KyspCisgICAgICAg
ICpkc3QxNiA9IGMxOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3
a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQoreworICAgIGlmICh0
LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KQorICAgICAgICBfZXdrX3RpbGVf
cGFpbnRfcmdiODg4KHQsIHIsIGcsIGIpOworICAgIGVsc2UgaWYgKHQtPmNzcGFjZSA9PSBFVkFT
X0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkKKyAgICAgICAgX2V3a190aWxlX3BhaW50X3JnYjU2NSh0
LCByLCBnLCBiKTsKKyAgICBlbHNlCisgICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTog
JWQiLCB0LT5jc3BhY2UpOworfQorCisvKioKKyAqIENyZWF0ZSBhIG5ldyB0aWxlIG9mIGdpdmVu
IHNpemUsIHpvb20gbGV2ZWwgYW5kIGNvbG9yc3BhY2UuCisgKgorICogQWZ0ZXIgY3JlYXRlZCB0
aGVzZSBwcm9wZXJ0aWVzIGFyZSBpbW11dGFibGUgYXMgdGhleSdyZSB0aGUgYmFzaWMKKyAqIGNo
YXJhY3RlcmlzdGljIG9mIHRoZSB0aWxlIGFuZCBhbnkgY2hhbmdlIHdpbGwgbGVhZCB0byBpbnZh
bGlkCisgKiBtZW1vcnkgYWNjZXNzLgorICoKKyAqIE90aGVyIG1lbWJlcnMgYXJlIG9mIGZyZWUt
YWNjZXNzIGFuZCBubyBnZXR0ZXJzL3NldHRlcnMgYXJlCisgKiBwcm92aWRlZCBpbiBvcmRlcnIg
dG8gYXZvaWQgZXhwZW5zaXZlIG9wZXJhdGlvbnMgb24gdGhvc2UsIGhvd2V2ZXIKKyAqIHNvbWUg
YXJlIGJldHRlciBtYW5pcHVsYXRlZCB3aXRoIHByb3ZpZGVkIGZ1bmN0aW9ucywgc3VjaCBhcwor
ICogZXdrX3RpbGVfc2hvdygpIGFuZCBld2tfdGlsZV9oaWRlKCkgdG8gY2hhbmdlCisgKiBAYyB2
aXNpYmxlIG9yIGV3a190aWxlX3VwZGF0ZV9mdWxsKCksIGV3a190aWxlX3VwZGF0ZV9hcmVhKCks
CisgKiBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkgdG8gY2hhbmdlIEBjIHN0YXRzLm1pc3NlcywK
KyAqIEBjIHN0YXRzLmZ1bGxfdXBkYXRlIGFuZCBAYyB1cGRhdGVzLgorICovCitFd2tfVGlsZSAq
ZXdrX3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9h
dCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlKQoreworICAgIEV2YXNfQ29vcmQgKmVjOwor
ICAgIEV2YXNfQ29sb3JzcGFjZSAqZWNzOworICAgIGZsb2F0ICpmOworICAgIHNpemVfdCAqczsK
KyAgICBFd2tfVGlsZSAqdDsKKyAgICB1bnNpZ25lZCBpbnQgYXJlYTsKKyAgICBzaXplX3QgYnl0
ZXM7CisgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OworICAgIGNhaXJvX3N0YXR1c190IHN0YXR1
czsKKyAgICBpbnQgc3RyaWRlOworICAgIEVjb3JlX0V2YXMgKmVlOworICAgIGNvbnN0IGNoYXIg
KmVuZ2luZTsKKworICAgIGFyZWEgPSB3ICogaDsKKworICAgIGlmIChjc3BhY2UgPT0gRVZBU19D
T0xPUlNQQUNFX0FSR0I4ODg4KSB7CisgICAgICAgIGJ5dGVzID0gYXJlYSAqIDQ7CisgICAgICAg
IHN0cmlkZSA9IHcgKiA0OworICAgICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwor
ICAgIH0gZWxzZSBpZiAoY3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKSB7Cisg
ICAgICAgIGJ5dGVzID0gYXJlYSAqIDI7CisgICAgICAgIHN0cmlkZSA9IHcgKiAyOworICAgICAg
ICBmb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMTZfNTY1OworICAgIH0gZWxzZSB7CisgICAgICAg
IEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQiLCBjc3BhY2UpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBEQkcoInNpemU6ICVkeCVkICglZCksIHpvb206ICVmLCBjc3BhY2U9
JWQiLCB3LCBoLCBhcmVhLCAoZG91YmxlKXpvb20sIGNzcGFjZSk7CisKKyAgICB0ID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGUqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlKSkpOworICAgIGlmICghdCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0LT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2Fk
ZChldmFzKTsKKworICAgIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKKyAg
ICBlbmdpbmUgPSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlZSk7CisgICAgaWYgKGVuZ2lu
ZSAmJiAhc3RyY21wKGVuZ2luZSwgIm9wZW5nbF94MTEiKSkKKyAgICAgICAgZXZhc19vYmplY3Rf
aW1hZ2VfY29udGVudF9oaW50X3NldCh0LT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRf
RFlOQU1JQyk7CisKKyAgICB0LT52aXNpYmxlID0gMDsKKyAgICB0LT51cGRhdGVzID0gMDsKKwor
ICAgIG1lbXNldCgmdC0+c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9TdGF0cykpOworICAgIHQt
PnN0YXRzLmFyZWEgPSBhcmVhOworCisgICAgLyogdWdseSwgYnV0IGxldCdzIGF2b2lkIGF0IGFs
bCBjb3N0cyBoYXZpbmcgdXNlcnMgdG8gbW9kaWZ5IHRob3NlICovCisgICAgZWMgPSAoRXZhc19D
b29yZCAqKSZ0LT53OworICAgICplYyA9IHc7CisKKyAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQt
Pmg7CisgICAgKmVjID0gaDsKKworICAgIGVjcyA9IChFdmFzX0NvbG9yc3BhY2UgKikmdC0+Y3Nw
YWNlOworICAgICplY3MgPSBjc3BhY2U7CisKKyAgICBmID0gKGZsb2F0ICopJnQtPnpvb207Cisg
ICAgKmYgPSB6b29tOworCisgICAgcyA9IChzaXplX3QgKikmdC0+Ynl0ZXM7CisgICAgKnMgPSBi
eXRlczsKKworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHQtPmltYWdlLCB0LT53LCB0
LT5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0LT5pbWFnZSwgdC0+
Y3NwYWNlKTsKKyAgICB0LT5waXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZXZhc19vYmpl
Y3RfaW1hZ2VfZGF0YV9nZXQodC0+aW1hZ2UsIEVJTkFfVFJVRSkpOworICAgIHQtPnN1cmZhY2Ug
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0LT5waXhlbHMsIGZvcm1hdCwg
dywgaCwgc3RyaWRlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyh0LT5zdXJm
YWNlKTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAg
IEVSUigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsCisgICAgICAgICAgICBj
YWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOworICAgICAgICBmcmVlKHQpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJm
YWNlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8pOworICAgIGlmIChzdGF0
dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3Jl
YXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKHQtPmltYWdlKTsKKyAgICAgICAgZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOworCisgICAgcmV0dXJuIHQ7
Cit9CisKKy8qKgorICogRnJlZSB0aWxlIG1lbW9yeS4KKyAqLwordm9pZCBld2tfdGlsZV9mcmVl
KEV3a19UaWxlICp0KQoreworICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOworCisgICAg
aWYgKHQtPnVwZGF0ZXMpCisgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKwor
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKKyAgICBjYWlyb19kZXN0cm95
KHQtPmNhaXJvKTsKKyAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOworICAgIGZyZWUodCk7
Cit9CisKKy8qKgorICogTWFrZSB0aGUgdGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRzIGNv
dW50ZXIuCisgKi8KK3ZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSAqdCkKK3sKKyAgICB0LT52
aXNpYmxlKys7CisgICAgZXZhc19vYmplY3Rfc2hvdyh0LT5pbWFnZSk7Cit9CisKKy8qKgorICog
RGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBpbnZpc2libGUgaWYg
bmVjZXNzYXJ5LgorICovCit2b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUgKnQpCit7CisgICAg
dC0+dmlzaWJsZS0tOworICAgIGlmICghdC0+dmlzaWJsZSkKKyAgICAgICAgZXZhc19vYmplY3Rf
aGlkZSh0LT5pbWFnZSk7Cit9CisKKy8qKgorICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhlIHRp
bGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tf
dGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKK3sKKyAgICByZXR1cm4gISF0LT52aXNpYmxl
OworfQorCisvKioKKyAqIE1hcmsgd2hvbGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5nIHVw
ZGF0ZS4KKyAqLwordm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKK3sKKyAg
ICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KKyAgICB0LT5zdGF0
cy5taXNzZXMrKzsKKworICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKKyAgICAgICAg
dC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CisgICAgICAgIGlmICh0LT51cGRhdGVz
KSB7CisgICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgICAg
ICB0LT51cGRhdGVzID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBNYXJrIHRo
ZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgorICovCit2
b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqcikKK3sKKyAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8K
KyAgICB0LT5zdGF0cy5taXNzZXMrKzsKKworICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncgPT0gdC0+
dyAmJiByLT5oID09IHQtPmgpIHsKKyAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5B
X1RSVUU7CisgICAgICAgIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAgICAgICBlaW5hX3RpbGVy
X2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgICAgICB0LT51cGRhdGVzID0gMDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF0LT51cGRhdGVzKSB7CisgICAg
ICAgIHQtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKKyAgICAgICAgaWYg
KCF0LT51cGRhdGVzKSB7CisgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSBl
aW5hX3RpbGVyICVkeCVkLiIsIHQtPncsIHQtPmgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRhdGVzLCByKTsK
K30KKworLyoqCisgKiBGb3IgZWFjaCB1cGRhdGVkIHJlZ2lvbiwgY2FsbCB0aGUgZ2l2ZW4gZnVu
Y3Rpb24uCisgKgorICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcyBv
ciBjbGVhciB0aGUgcHJvY2Vzc2VkCisgKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVfdXBkYXRlc19j
bGVhcigpIGZvciB0aGF0LgorICovCit2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tf
VGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9S
ZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgaWYgKHQtPnN0YXRz
LmZ1bGxfdXBkYXRlKSB7CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7CisgICAgICAgIHIueCA9
IDA7CisgICAgICAgIHIueSA9IDA7CisgICAgICAgIHIudyA9IHQtPnc7CisgICAgICAgIHIuaCA9
IHQtPmg7CisjaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIHN0
cnVjdCB0aW1ldmFsIHRpbWV2OworICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0OworICAgICAg
ICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCAwKTsKKyAgICAgICAgcmVuZGVyX3N0YXJ0ID0gKGRvdWJs
ZSl0aW1ldi50dl9zZWMgKworICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8g
MTAwMDAwMCk7CisjZW5kaWYKKyAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0LCAmcik7CisjaWZk
ZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCisgICAgICAgIGdldHRpbWVvZmRheSgm
dGltZXYsIDApOworICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9IChkb3VibGUpdGltZXYu
dHZfc2VjICsKKyAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDAp
IC0gcmVuZGVyX3N0YXJ0OworI2VuZGlmCisgICAgfSBlbHNlIGlmICh0LT51cGRhdGVzKSB7Cisg
ICAgICAgIEVpbmFfSXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHQtPnVw
ZGF0ZXMpOworICAgICAgICBFaW5hX1JlY3RhbmdsZSAqcjsKKyAgICAgICAgaWYgKCFpdHIpIHsK
KyAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVyIGl0ZXJhdG9yISIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIEVJTkFfSVRFUkFUT1Jf
Rk9SRUFDSChpdHIsIHIpCisgICAgICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQsIHIpOworICAg
ICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKKyAgICB9Cit9CisKKy8qKgorICogQ2xlYXIg
YWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCisgKgorICogVGhpcyB3aWxsIGNoYW5nZSB0
aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1pc3NlcworICogYW5kIHVu
c2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0ZWQsIHRoZW4gaXQgd2ls
bCBiZQorICogZGVzdHJveWVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxs
ZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKKyAqIGNhbGxlZC4KKyAqLwor
dm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQoreworICAgIC8qIFRPRE86
IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVzPyAqLworICAgIHQtPnN0YXRzLm1p
c3NlcyA9IDA7CisKKyAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHQtPnN0
YXRzLmZ1bGxfdXBkYXRlID0gMDsKKyAgICBlbHNlIGlmICh0LT51cGRhdGVzKSB7CisgICAgICAg
IGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKyAgICAgICAgdC0+dXBkYXRlcyA9IDA7Cisg
ICAgfQorfQorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IEV3
a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKK3N0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5IHsKKyAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBpbnQgd2VpZ2h0OworICAgIHN0cnVj
dCB7CisgICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpOworICAgICAg
ICB2b2lkICpkYXRhOworICAgIH0gdGlsZV9mcmVlOworfTsKKworc3RydWN0IF9Fd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgeworICAgIHN0cnVjdCB7CisgICAgICAgIEVpbmFfTGlzdCAqbGlzdDsKKyAg
ICAgICAgc2l6ZV90IGNvdW50OworICAgICAgICBzaXplX3QgYWxsb2NhdGVkOworICAgIH0gZW50
cmllczsKKyAgICBzdHJ1Y3QgeworICAgICAgICBzaXplX3QgbWF4OyAgLyoqPCB3YXRlcm1hcmsg
KGluIGJ5dGVzKSB0byBzdGFydCBmcmVlaW5nIHRpbGVzICovCisgICAgICAgIHNpemVfdCB1c2Vk
OyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3JlIHRoYW4gbWF4LiAqLworICAgIH0gbWVtb3J5Owor
ICAgIHN0cnVjdCB7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgZmxv
YXQgem9vbTsKKyAgICAgICAgRWluYV9Cb29sIGxvY2tlZDsKKyAgICB9IGxvY2tlZDsKKyAgICBp
bnQgcmVmZXJlbmNlczsKKyAgICB1bnNpZ25lZCBpbnQgZnJvemVuOworfTsKKworc3RhdGljIGNv
bnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9JTklUSUFMID0gMTI4Oworc3Rh
dGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9BTExPQ0FURV9TVEVQID0gMTY7Citz
dGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01BWF9GUkVFID0gMzI7CisKKy8q
KgorICogQ2FjaGUgb2YgdW51c2VkIHRpbGVzICh0aG9zZSB0aGF0IGFyZSBub3QgdmlzaWJsZSku
CisgKgorICogVGhlIGNhY2hlIG9mIHVudXNlZCB0aWxlcy4KKyAqCisgKiBAcGFyYW0gbWF4IGNh
Y2hlIHNpemUgaW4gYnl0ZXMuCisgKgorICogQHJldHVybiBuZXdseSBhbGxvY2F0ZWQgY2FjaGUg
b2YgdW51c2VkIHRpbGVzLCB1c2UKKyAqICAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Zy
ZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4gSWYgbm90CisgKiAgICAgICAgIHBvc3NpYmxlIHRv
IGFsbG9jYXRlIG1lbW9yeSwgQGMgMCBpcyByZXR1cm5lZC4KKyAqLworRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNpemVfdCBtYXgpCit7CisgICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisKKyAgICB0dWMgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZSkp
KTsKKyAgICBpZiAoIXR1YykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBEQkcoInR1Yz0lcCIs
IHR1Yyk7CisgICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OworICAgIHR1Yy0+cmVmZXJlbmNlcyA9
IDE7CisgICAgcmV0dXJuIHR1YzsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9j
a19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9
IEVJTkFfVFJVRTsKKyAgICB0dWMtPmxvY2tlZC54ID0geDsKKyAgICB0dWMtPmxvY2tlZC55ID0g
eTsKKyAgICB0dWMtPmxvY2tlZC53ID0gdzsKKyAgICB0dWMtPmxvY2tlZC5oID0gaDsKKyAgICB0
dWMtPmxvY2tlZC56b29tID0gem9vbTsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9IEVJTkFf
RkFMU0U7Cit9CisKKy8qKgorICogRnJlZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCisgKgorICog
VGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgb25seSBjYWxsZWQgYnkgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3VucmVmCisgKiBmdW5jdGlvbi4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY29u
c2lkZXJpbmcgcmVmZXJlbmNlIGNvdW50aW5nCisgKiBtYXkgbGVhZCB0byB1bmtub3duIHJlc3Vs
dHMuCisgKgorICogVGhvc2UgdGlsZXMgdGhhdCBhcmUgc3RpbGwgdmlzaWJsZSB3aWxsIHJlbWFp
biBsaXZlLiBUaGUgdW51c2VkCisgKiB0aWxlcyB3aWxsIGJlIGZyZWVkLgorICoKKyAqIEBzZWUg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBEQkcoInR1Yz0lcCwgIgorICAg
ICAgICAiZW50cmllcz0oY291bnQ6JXpkLCBhbGxvY2F0ZWQ6JXpkKSwgIgorICAgICAgICAibWVt
b3J5PShtYXg6JXpkLCB1c2VkOiV6ZCkiLAorICAgICAgICB0dWMsIHR1Yy0+ZW50cmllcy5jb3Vu
dCwgdHVjLT5lbnRyaWVzLmFsbG9jYXRlZCwKKyAgICAgICAgdHVjLT5tZW1vcnkubWF4LCB0dWMt
Pm1lbW9yeS51c2VkKTsKKworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOwor
ICAgIGZyZWUodHVjKTsKK30KKworLyoqCisgKiBDbGVhciBjYWNoZSBvZiB1bnVzZWQgdGlsZXMu
CisgKgorICogQW55IHRpbGVzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSBhcmUgZnJlZWQuIFRoZSBv
bmx5IHRpbGVzIHRoYXQgYXJlCisgKiBrZXB0IGFyZSB0aG9zZSB0aGF0IGFyZW4ndCBpbiB0aGUg
Y2FjaGUgKGkuZS4gdGhhdCBhcmUgdmlzaWJsZSkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgdm9pZCogaXRlbTsKKyAgICBFSU5BX0xJU1RfRlJFRSh0
dWMtPmVudHJpZXMubGlzdCwgaXRlbSkgeworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVf
RW50cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0
ZW0pOworICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHIt
PnRpbGUpOworICAgICAgICBmcmVlKGl0cik7CisgICAgfQorCisgICAgdHVjLT5tZW1vcnkudXNl
ZCA9IDA7CisgICAgdHVjLT5lbnRyaWVzLmNvdW50ID0gMDsKK30KKworLyoqCisgKiBIb2xkIHJl
ZmVyZW5jZSB0byBjYWNoZS4KKyAqCisgKiBAcmV0dXJuIHNhbWUgcG9pbnRlciBhcyB0YWtlbi4K
KyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigpCisgKi8KK0V3a19UaWxl
X1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAw
KTsKKyAgICB0dWMtPnJlZmVyZW5jZXMrKzsKKyAgICByZXR1cm4gdHVjOworfQorCisvKioKKyAq
IFJlbGVhc2UgY2FjaGUgcmVmZXJlbmNlLCBmcmVlaW5nIGl0IGlmIGl0IGRyb3BzIHRvIHplcm8u
CisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKCkKKyAqIEBzZWUgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUoKQorICovCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91
bnJlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih0dWMpOworICAgIHR1Yy0+cmVmZXJlbmNlcy0tOworICAgIGlmICghdHVjLT5y
ZWZlcmVuY2VzKQorICAgICAgICBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUodHVjKTsKK30K
Kwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1Yywgc2l6ZV90IG1heCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOworICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKK30KKworc2l6ZV90IGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOworICAgIHJldHVybiB0
dWMtPm1lbW9yeS5tYXg7Cit9CisKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9n
ZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CisgICAgcmV0dXJuIHR1Yy0+bWVtb3J5LnVzZWQ7
Cit9CisKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMsIHNpemVfdCBieXRlcykKK3sKKyAgICBFaW5hX0xpc3QgKmwsICpsX25leHQ7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7CisgICAgc2l6ZV90
IGRvbmU7CisgICAgdW5zaWduZWQgaW50IGNvdW50OworCisgICAgaWYgKCF0dWMtPmVudHJpZXMu
Y291bnQpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChieXRlcyA8IDEpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgLyoKKyAgICAgKiBOT1RFOiB0aGUgY2FjaGUgaXMgYSBGSUZPIHF1ZXVl
IGN1cnJlbnRseS4KKyAgICAgKiBEb24ndCBuZWVkIHRvIHNvcnQgYW55IG1vcmUuCisgICAgICov
CisKKyAgICB2b2lkKiBpdGVtOworICAgIGRvbmUgPSAwOworICAgIGNvdW50ID0gMDsKKyAgICBF
SU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0ZW0p
IHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKKyAgICAgICAgRXdrX1RpbGUg
KnQgPSBpdHItPnRpbGU7CisgICAgICAgIGlmIChkb25lID4gYnl0ZXMpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgaWYgKHR1Yy0+bG9ja2VkLmxvY2tlZAorICAgICAgICAgICAgJiYgdC0+
eCArIHQtPncgPiB0dWMtPmxvY2tlZC54CisgICAgICAgICAgICAmJiB0LT55ICsgdC0+aCA+IHR1
Yy0+bG9ja2VkLnkKKyAgICAgICAgICAgICYmIHQtPnggPCB0dWMtPmxvY2tlZC54ICsgdHVjLT5s
b2NrZWQudworICAgICAgICAgICAgJiYgdC0+eSA8IHR1Yy0+bG9ja2VkLnkgKyB0dWMtPmxvY2tl
ZC5oCisgICAgICAgICAgICAmJiB0LT56b29tID09IHR1Yy0+bG9ja2VkLnpvb20pIHsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGRvbmUgKz0gc2l6ZW9mKEV3a19U
aWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7CisgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+
dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7CisgICAgICAgIHR1Yy0+ZW50cmllcy5saXN0ID0g
ZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBsKTsKKyAgICAgICAgZnJl
ZShpdHIpOworICAgICAgICBjb3VudCsrOworICAgIH0KKworICAgIHR1Yy0+bWVtb3J5LnVzZWQg
LT0gZG9uZTsKKyAgICB0dWMtPmVudHJpZXMuY291bnQgLT0gY291bnQ7CisKKyAgICByZXR1cm4g
ZG9uZTsKK30KKwordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOworICAgIGlmICh0dWMtPm1lbW9yeS51c2VkIDw9IHR1Yy0+bWVtb3J5Lm1heCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCh0dWMsIHR1Yy0+bWVt
b3J5LnVzZWQgLSB0dWMtPm1lbW9yeS5tYXgpOworICAgIGlmICh0dWMtPm1lbW9yeS51c2VkID4g
dHVjLT5tZW1vcnkubWF4KQorICAgICAgICBDUklUSUNBTCgiQ2FjaGUgc3RpbGwgdXNpbmcgdG9v
IG11Y2ggbWVtb3J5OiAlemQgS0I7IG1heDogJXpkIEtCIiwKKyAgICAgICAgICAgICAgICAgdHVj
LT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4KTsKK30KKworLyoqCisgKiBGcmVlemUgY2Fj
aGUgdG8gbm90IGRvIG1haW50ZW5hbmNlIHRhc2tzLgorICoKKyAqIE1haW50ZW5hbmNlIHRhc2tz
IG9wdGltaXplIGNhY2hlIHVzYWdlLCBidXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91bGQKKyAqIGhv
bGQgb24gdGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3
ZSBmcmVlemUKKyAqIHdoaWxlIG9wZXJhdGluZyBhbmQgdGhlbiB0aGF3IHdoZW4gd2UncmUgZG9u
ZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KCkKKyAqLwordm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQor
eworICAgIHR1Yy0+ZnJvemVuKys7Cit9CisKKy8qKgorICogVW5mcmVlemVzIG1haW50ZW5hbmNl
IHRhc2tzLgorICoKKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXpl
LCB0aGVuIG1haW50ZW5hbmNlIHRhc2tzCisgKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KKyAqLwor
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKK3sKKyAgICBpZiAoIXR1Yy0+ZnJvemVuKSB7CisgICAgICAgIEVSUigidGhhd2luZyBtb3Jl
IHRoYW4gZnJlZXppbmchIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0dWMtPmZy
b3plbi0tOworfQorCisvKioKKyAqIEdldCB0aWxlIGZyb20gY2FjaGUgb2YgdW51c2VkIHRpbGVz
LCByZW1vdmluZyBpdCBmcm9tIHRoZSBjYWNoZS4KKyAqCisgKiBJZiB0aGUgdGlsZSBpcyB1c2Vk
LCB0aGVuIGl0J3Mgbm90IGluIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgc28gaXQKKyAqIGlzIHJl
bW92ZWQgZnJvbSB0aGUgY2FjaGUgYW5kIG1heSBiZSBnaXZlbiBiYWNrIHdpdGgKKyAqIGV3a190
aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCgpLgorICoKKyAqIEBwYXJhbSB0dWMgY2FjaGUgb2Yg
dW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdCB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdr
X1RpbGVfVW51c2VkX0NhY2hlLgorICoKKyAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNz
LCAjRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0KQor
eworICAgIEVpbmFfTGlzdCAqZSwgKmw7CisKKyAgICB2b2lkKiBpdGVtOworICAgIGUgPSAwOwor
ICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7CisgICAg
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogZW50cnkgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKKyAgICAgICAgaWYgKGVudHJ5LT50aWxl
ID09IHQpIHsKKyAgICAgICAgICAgIGUgPSBsOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKCFlKSB7CisgICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQg
aW4gY2FjaGUgJXAiLCB0LCB0dWMpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9
CisKKyAgICB0dWMtPmVudHJpZXMuY291bnQtLTsKKyAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNp
emVvZihFd2tfVGlsZSkgKyB0LT5ieXRlczsKKyAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFf
bGlzdF9yZW1vdmVfbGlzdCh0dWMtPmVudHJpZXMubGlzdCwgZSk7CisgICAgZnJlZShpdGVtKTsK
KworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKKy8qKgorICogUHV0IHRpbGUgaW50byBjYWNo
ZSBvZiB1bnVzZWQgdGlsZXMsIGFkZGluZyBpdCB0byB0aGUgY2FjaGUuCisgKgorICogVGhpcyBz
aG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdC0+dmlzaWJsZSBpcyBAYyAwIGFuZCBubyBvYmplY3Rz
IGFyZQorICogdXNpbmcgdGhlIHRpbGUgYW55bW9yZSwgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBi
ZSBleHBpcmVkIGFuZCBoYXZlCisgKiBpdHMgbWVtb3J5IHJlcGxhY2VkLgorICoKKyAqIE5vdGUg
dGhhdCB0aWxlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBpZiBjYWNoZSBpcyBmdWxs
LAorICogaW5zdGVhZCB0aGUgY2FjaGUgd2lsbCBoYXZlIG1vcmUgYnl0ZXMgdXNlZCB0aGFuIG1h
eGltdW0gYW5kIG9uZQorICogY2FuIGNhbGwgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2goKSB0byBmcmVlIHRoZW0uIFRoaXMgaXMgZG9uZQorICogYmVjYXVzZSB1c3VhbGx5IHdlIHdh
bnQgYSBsYXp5IG9wZXJhdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgorICoKKyAqIEBwYXJh
bSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdCB0aWxlIHRvIGJlIGFkZGVk
IHRvIGNhY2hlLgorICogQHBhcmFtIHRpbGVfZnJlZV9jYiBmdW5jdGlvbiB1c2VkIHRvIGZyZWUg
dGlsZXMuCisgKiBAcGFyYW0gZGF0YSBjb250ZXh0IHRvIGdpdmUgYmFjayB0byBAYSB0aWxlX2Zy
ZWVfY2IgYXMgZmlyc3QgYXJndW1lbnQuCisgKgorICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1
Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lzZS4gSWYgQGMgdC0+dmlzaWJsZQorICogICAgICAg
ICBpcyBub3QgI0VJTkFfRkFMU0UsIHRoZW4gaXQgd2lsbCByZXR1cm4gI0VJTkFfRkFMU0UuCisg
KgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpCisgKi8KK0VpbmFf
Qm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMsIEV3a19UaWxlICp0LCB2b2lkICgqdGlsZV9mcmVlX2NiKSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCksIGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5ICplOworCisgICAgaWYgKHQtPnZpc2libGUpIHsKKyAgICAgICAgRVJSKCJ0aWxlPSVw
IGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwgdCwgdC0+dmlzaWJsZSk7CisgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9F
bnRyeSkpKTsKKyAgICBpZiAoIWUpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAg
dHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBl
KTsKKyAgICBpZiAoZWluYV9lcnJvcl9nZXQoKSkgeworICAgICAgICBFUlIoIkxpc3QgYWxsb2Nh
dGlvbiBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAg
ZS0+dGlsZSA9IHQ7CisgICAgZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9y
ZSBzb3J0ICovCisgICAgZS0+dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOworICAgIGUtPnRp
bGVfZnJlZS5kYXRhID0gKHZvaWQgKilkYXRhOworCisgICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7
CisgICAgdHVjLT5tZW1vcnkudXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7CisK
KyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9k
YmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgdm9pZCogaXRlbTsK
KyAgICBFaW5hX0xpc3QgKmw7CisgICAgaW50IGNvdW50ID0gMDsKKyAgICBwcmludGYoIkNhY2hl
IG9mIHVudXNlZCB0aWxlczogZW50cmllczogJXp1LyV6dSwgbWVtb3J5OiAlenUvJXp1XG4iLAor
ICAgICAgICAgICB0dWMtPmVudHJpZXMuY291bnQsIHR1Yy0+ZW50cmllcy5hbGxvY2F0ZWQsCisg
ICAgICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+bWVtb3J5Lm1heCk7CisKKyAgICBFSU5B
X0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgICAgICBjb25z
dCBFd2tfVGlsZSAqdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+
KGl0ZW0pLT50aWxlOworICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4z
Zl0lYyIsCisgICAgICAgICAgICAgICB0LT5jb2wsIHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9v
bSwKKyAgICAgICAgICAgICAgIHQtPnZpc2libGUgPyAnKic6ICcgJyk7CisKKyAgICAgICAgaWYg
KCEoY291bnQgJSA0KSkKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgICBw
cmludGYoIlxuIik7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109117</attachid>
            <date>2011-09-28 20:42:29 -0700</date>
            <delta_ts>2011-09-29 17:30:53 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>bug-68599-20110929124227.patch</filename>
            <type>text/plain</type>
            <size>218969</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYyOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
aW5kZXggZjlkYjM1Yzk0MzE3MjUzOTJiMWNjNjcxMThmNDUxZjJiNWFkNGU2OS4uNzZkY2RkOTdh
YmRiMzNjZTcxZjc3NTU5MDUyY2RiYjhkODgxZDAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKQEAgLTc0LDkgKzc0LDkgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBlZmwvZXdrL2V3a19uZXR3b3JrLmNwcAogICAgIGVmbC9ld2svZXdrX3NldHRpbmdzLmNwcAog
ICAgIGVmbC9ld2svZXdrX3Byb3RvY29sX2hhbmRsZXIuY3BwCi0gICAgZWZsL2V3ay9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZS5jCi0gICAgZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKLSAgICBl
ZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZS5jcHAKKyAgICBlZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCisgICAgZWZsL2V3ay9l
d2tfdGlsZWRfbW9kZWwuY3BwCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAgICBlZmwvZXdr
L2V3a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCmluZGV4IDczMjVkNTFiYjE0NmQxNGQxZTU4ODVhNTIxYTRiNWJmYjdkMmYzZmEuLjMyZThl
Y2M5MDZiYjJiODcwMDUxYzM0M2RjOGVmZWM3YzEzNTcxNzQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMS0wOS0yOCAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0VGTF0gUmVuYW1lIGV3a190aWxlZF8qLmMgdG8gZXdrX3RpbGVk
XyouY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODU5OQorCisgICAgICAgIFVzZSBhIEMrKyBjb21waWxlciBmb3IgdGhlc2UgZmlsZXMgYW5kIGZp
eCBjb21waWxlIGlzc3VlcyBhbmQgY29kaW5nIHN0eWxlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jLgorICAgICAgICAqIGV3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbWF0cml4
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4
LmMuCisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2RlbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMuCisKIDIwMTEtMDktMjggIEt3YW5n
SHl1ayBLaW0gIDxoeXVraS5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gUmVtb3Zl
IHVzZWxlc3MgYXNzaWdubWVudCBjb2RlIGluIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29t
X3NldF9pbnRlcm5hbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZS5jIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMjUxMzU3YmIyNzVi
MDA2NWZhMTQ3YWFhNTg2N2ZlYWI0YzVlYjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5n
X3N0b3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTE2ICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwotICAgIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0b3JlLmgiCi0KLSNkZWZpbmUgX0dO
VV9TT1VSQ0UKLSNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVjb3Jl
Lmg+Ci0jaW5jbHVkZSA8RWluYS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bWF0
aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCBSRU1PVkUgTUUgTEFURVIKLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBJRFgoY29sLCByb3cs
IHJvd3NwYW4pIChjb2wgKyAocm93ICogcm93c3BhbikpCi0KLSNpZiAhZGVmaW5lZChNSU4pCi0j
IGRlZmluZSBNSU4oYSwgYikgKChhIDwgYikgPyBhIDogYikKLSNlbmRpZgotCi0jaWYgIWRlZmlu
ZWQoTUFYKQotIyBkZWZpbmUgTUFYKGEsIGIpICgoYSA+IGIpID8gYSA6IGIpCi0jZW5kaWYKLQot
dHlwZWRlZiBlbnVtIF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHk7Ci10eXBlZGVmIHN0
cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhOwotdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbTsKLXR5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0OwotCi1lbnVtIF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVu
ZGVyX1ByaW9yaXR5IHsKLSAgICBQUkVfUkVOREVSX1BSSU9SSVRZX0xPVyA9IDAsIC8qKjwgQXBw
ZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0ICovCi0gICAgUFJFX1JFTkRFUl9QUklPUklUWV9I
SUdIICAgICAvKio8IFByZXBlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGxpc3QgKi8KLX07Ci0KLXN0
cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSB7Ci0gICAgRUlOQV9JTkxJU1Q7Ci0g
ICAgRXdrX1RpbGUgKnRpbGU7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5
LCB3LCBoOwotICAgIH0gZ2VvbWV0cnk7Ci0gICAgRWluYV9Cb29sIHNtb290aF9zY2FsZTsKLX07
Ci0KLXN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0IHsK
LSAgICBFSU5BX0lOTElTVDsKLSAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgIGZsb2F0
IHpvb207Ci19OwotCi1zdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgewotICAg
IEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBwZWRfRGF0YSBiYXNlOwotICAgIEV2YXNfT2JqZWN0ICpz
ZWxmOwotICAgIEV2YXNfT2JqZWN0ICpjb250ZW50c19jbGlwcGVyOwotICAgIHN0cnVjdCB7Ci0g
ICAgICAgIEVpbmFfSW5saXN0ICoqaXRlbXM7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywg
aDsKLSAgICAgICAgbG9uZyBjb2xzLCByb3dzOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAg
ICAgRXZhc19Db29yZCB3LCBoOwotICAgICAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgICAg
IEVpbmFfQm9vbCB6b29tX3dlYWtfc21vb3RoX3NjYWxlOjE7Ci0gICAgICAgIH0gdGlsZTsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgRXZh
c19Db29yZCB4LCB5OwotICAgICAgICAgICAgfSBjdXIsIG9sZCwgYmFzZSwgem9vbV9jZW50ZXI7
Ci0gICAgICAgIH0gb2Zmc2V0OwotICAgIH0gdmlldzsKLSAgICBFdmFzX0NvbG9yc3BhY2UgY3Nw
YWNlOwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEV3a19UaWxlX01hdHJpeCAqbWF0cml4OwotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKLSAgICAg
ICAgfSBiYXNlOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBj
b2xzLCByb3dzOwotICAgICAgICB9IGN1ciwgb2xkOwotICAgICAgICBFdmFzX0Nvb3JkIHdpZHRo
LCBoZWlnaHQ7Ci0gICAgfSBtb2RlbDsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wg
KCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVh
KTsKLSAgICAgICAgdm9pZCAqZGF0YTsKLSAgICAgICAgRWluYV9Jbmxpc3QgKnByZV9yZW5kZXJf
cmVxdWVzdHM7Ci0gICAgICAgIEVjb3JlX0lkbGVyICppZGxlcjsKLSAgICAgICAgRWluYV9Cb29s
IGRpc2FibGVkOwotICAgICAgICBFaW5hX0Jvb2wgc3VzcGVuZDoxOwotICAgIH0gcmVuZGVyOwot
ICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKigqcHJlX2NiKSh2b2lkICpkYXRhLCBFdmFzX09i
amVjdCAqbyk7Ci0gICAgICAgIHZvaWQgKnByZV9kYXRhOwotICAgICAgICB2b2lkICooKnBvc3Rf
Y2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09iamVjdCAqbyk7Ci0gICAgICAg
IHZvaWQgKnBvc3RfZGF0YTsKLSAgICB9IHByb2Nlc3M7Ci0gICAgc3RydWN0IHsKLSAgICAgICAg
RWluYV9Cb29sIGFueToxOwotICAgICAgICBFaW5hX0Jvb2wgcG9zOjE7Ci0gICAgICAgIEVpbmFf
Qm9vbCBzaXplOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBtb2RlbDoxOwotICAgICAgICBFaW5hX0Jv
b2wgb2Zmc2V0OjE7Ci0gICAgfSBjaGFuZ2VkOwotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAg
IEVjb3JlX0V2ZW50X0hhbmRsZXIgKnNpZ191c3I7Ci0jZW5kaWYKLX07Ci0KLXN0YXRpYyBFdmFz
X1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKLWlu
dCBfZXdrX3RpbGVkX2xvZ19kb20gPSAtMTsKLQotI2RlZmluZSBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihvYmosIHB0ciwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnB0ciA9IGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG9i
aik7IFwKLSAgICBpZiAoIXB0cikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ1JJVElDQUwoIm5vIHByaXZhdGUgZGF0YSBp
biBvYmo9JXAiLCBvYmopOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIF9fVkFf
QVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9
Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNz
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgdm9pZCAqZGF0YSA9
IE5VTEw7Ci0KLSAgICAvKiBEbyBub3QgcHJvY2VzcyB1cGRhdGVzLiBOb3RlIHRoYXQgd2Ugc3Rp
bGwgd2FudCB0byBnZXQgdXBkYXRlcyByZXF1ZXN0cwotICAgICAqIGluIHRoZSBxdWV1ZSBpbiBv
cmRlciB0byBub3QgbWlzcyBhbnkgdXBkYXRlcyBhZnRlciB0aGUgcmVuZGVyIGlzCi0gICAgICog
cmVzdW1lZC4KLSAgICAgKi8KLSAgICBpZiAocHJpdi0+cmVuZGVyLnN1c3BlbmQgfHwgIWV2YXNf
b2JqZWN0X3Zpc2libGVfZ2V0KHByaXYtPnNlbGYpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAocHJpdi0+cHJvY2Vzcy5wcmVfY2IpCi0gICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnBy
ZV9jYihwcml2LT5wcm9jZXNzLnByZV9kYXRhLCBwcml2LT5zZWxmKTsKLQotICAgIGV3a190aWxl
X21hdHJpeF91cGRhdGVzX3Byb2Nlc3MocHJpdi0+bW9kZWwubWF0cml4KTsKLQotICAgIGlmIChw
cml2LT5wcm9jZXNzLnBvc3RfY2IpCi0gICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2
LT5wcm9jZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7Ci19Ci0KLXN0YXRpYyBpbnQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQgKmRhdGEpCi17Ci0gICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IGRhdGE7Ci0gICAgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2Rl
bC5tYXRyaXgpOwotCi0gICAgaWYgKHR1YykgewotICAgICAgICBEQkcoImZsdXNoIHVudXNlZCB0
aWxlIGNhY2hlLiIpOwotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0
dWMpOwotICAgIH0gZWxzZQotICAgICAgICBFUlIoIm5vIGNhY2hlPyEiKTsKLQotICAgIHJldHVy
biAwOwotfQotCi1zdGF0aWMgRXdrX1RpbGUgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X25ldyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNv
bCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0g
ICAgRXZhcyAqZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYpOwotICAgIGlm
ICghZXZhcykgewotICAgICAgICBDUklUSUNBTCgiZXZhc19vYmplY3RfZXZhc19nZXQgZmFpbGVk
ISIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0ID0gZXdrX3RpbGVfbWF0
cml4X3RpbGVfbmV3Ci0gICAgICAgIChwcml2LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93
LCB6b29tKTsKLQotICAgIGlmICghdCkgewotICAgICAgICBDUklUSUNBTCgiZXdrX3RpbGVfbWF0
cml4X3RpbGVfbmV3IGZhaWxlZCEiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgeCwg
RXZhc19Db29yZCB5KQotewotICAgIGl0LT5nZW9tZXRyeS54ID0geDsKLSAgICBpdC0+Z2VvbWV0
cnkueSA9IHk7Ci0KLSAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUo
aXQtPnRpbGUtPmltYWdlLCB4LCB5KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fcmVzaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKLXsKLSAgICBpdC0+Z2VvbWV0cnkudyA9IHc7Ci0g
ICAgaXQtPmdlb21ldHJ5LmggPSBoOwotCi0gICAgaWYgKGl0LT50aWxlKSB7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShpdC0+dGlsZS0+aW1hZ2UsIHcsIGgpOwotICAgICAgICBldmFzX29i
amVjdF9pbWFnZV9maWxsX3NldChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIHcsIGgpOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRl
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlICp0LCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkKLXsKLSAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAg
IENSSVRJQ0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSBOVUxMISIsIGl0LT50aWxl
KTsKLSAgICBpdC0+dGlsZSA9IHQ7Ci0gICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1h
Z2UsIGl0LT5nZW9tZXRyeS54LCBpdC0+Z2VvbWV0cnkueSk7Ci0gICAgZXZhc19vYmplY3RfcmVz
aXplKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKLSAg
ICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldAotICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAw
LCAwLCBpdC0+Z2VvbWV0cnkudywgaXQtPmdlb21ldHJ5LmgpOwotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX3Ntb290aF9zY2FsZV9zZXQoaXQtPnRpbGUtPmltYWdlLCBpdC0+c21vb3RoX3NjYWxlKTsK
LQotICAgIGlmICghZXdrX3RpbGVfdmlzaWJsZV9nZXQodCkpCi0gICAgICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9hZGQodC0+aW1hZ2UsIHByaXYtPnNlbGYpOwotCi0gICAgZXdrX3RpbGVf
c2hvdyh0KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdCwgZG91YmxlIGxhc3RfdXNlZCkKLXsKLSAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YzsKLSAgICBld2tfdGlsZV9oaWRlKGl0LT50aWxlKTsKLSAgICBp
ZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KGl0LT50aWxlKSkKLSAgICAgICAgZXZhc19vYmplY3Rf
c21hcnRfbWVtYmVyX2RlbChpdC0+dGlsZS0+aW1hZ2UpOwotICAgIGV3a190aWxlX21hdHJpeF90
aWxlX3B1dChwcml2LT5tb2RlbC5tYXRyaXgsIGl0LT50aWxlLCBsYXN0X3VzZWQpOwotICAgIHR1
YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKLQotICAgIGl0LT50
aWxlID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBFaW5hX0lubGlzdCAqaXQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXRlbTsKLSAgICBpbnQgaTsKLSAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1l
X2dldCgpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnZpZXcucm93czsgaSsrKSB7Ci0g
ICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9S
RUFDSChpdCwgaXRlbSkKLSAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKQotICAgICAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwg
bGFzdF91c2VkKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywg
ZmxvYXQgem9vbSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBw
cmlvcml0eSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnI7Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChyLCBzaXplb2YoKnIpLCBFSU5BX0ZBTFNF
KTsKLQotICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0gpCi0gICAg
ICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3RfcHJlcGVu
ZAotICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lO
TElTVF9HRVQocikpOwotICAgIGVsc2UKLSAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJf
cmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBlbmQKLSAgICAgICAgICAgIChwcml2LT5yZW5kZXIu
cHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKLQotICAgIHItPmNvbCA9
IGNvbDsKLSAgICByLT5yb3cgPSByb3c7Ci0gICAgci0+em9vbSA9IHpvb207Ci0KLSAgICByZXR1
cm4gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyKQot
ewotICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3RfcmVt
b3ZlCi0gICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJ
U1RfR0VUKHIpKTsKLSAgICBmcmVlKHIpOwotfQotCi1zdGF0aWMgaW5saW5lIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2KQotewotICAgIHJldHVybiBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKAotICAg
ICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywKLSAgICAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJp
di0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7Ci0gICAgd2hpbGUgKCpwbCkgewotICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7Ci0gICAgICAg
IHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHBy
aXYpOwotICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCAqcGwpOwotICAgICAg
ICBmcmVlKHIpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KQotewotICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5k
ZXJfcmVxdWVzdHM7Ci0gICAgRWluYV9Jbmxpc3QgKml0ZXIgPSAqcGwsICp0bXA7Ci0gICAgd2hp
bGUgKGl0ZXIpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0ICpyID0KLSAgICAgICAgICAgIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCi0gICAg
ICAgICAgICAgICAgaXRlciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1
ZXN0KTsKLSAgICAgICAgdG1wID0gaXRlci0+bmV4dDsKLSAgICAgICAgKnBsID0gZWluYV9pbmxp
c3RfcmVtb3ZlKCpwbCwgaXRlcik7Ci0gICAgICAgIGl0ZXIgPSB0bXA7Ci0gICAgICAgIGZyZWUo
cik7Ci0gICAgfQotfQotCi0vKiBhc3N1bWVzIHByaXYtPnByb2Nlc3MucHJlX2NiIHdhcyBjYWxs
ZWQgaWYgcmVxdWlyZWQhICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYpCi17Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0ICpyZXE7Ci0gICAgRWluYV9SZWN0YW5nbGUgYXJlYTsKLSAgICBFd2tfVGlsZV9NYXRy
aXggKnRtID0gcHJpdi0+bW9kZWwubWF0cml4OwotICAgIEV3a19UaWxlICp0OwotICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjOwotICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Ci0gICAg
ZmxvYXQgem9vbTsKLSAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgp
OwotCi0gICAgcmVxID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9maXJzdChwcml2KTsKLSAgICBpZiAoIXJlcSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29s
ID0gcmVxLT5jb2w7Ci0gICAgcm93ID0gcmVxLT5yb3c7Ci0gICAgem9vbSA9IHJlcS0+em9vbTsK
LQotICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHModG0sIGNvbCwgcm93
LCB6b29tKSkgewotICAgICAgICBEQkcoIm5vIHByZS1yZW5kZXIgcmVxdWlyZWQgZm9yIHRpbGUg
JWx1LCVsdSBAICVmLiIsIGNvbCwgcm93LCB6b29tKTsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAg
fQotCi0gICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2ws
IHJvdywgem9vbSk7Ci0gICAgaWYgKCF0KQotICAgICAgICBnb3RvIGVuZDsKLQotICAgIGFyZWEu
eCA9IDA7Ci0gICAgYXJlYS55ID0gMDsKLSAgICBhcmVhLncgPSBwcml2LT52aWV3LnRpbGUudzsK
LSAgICBhcmVhLmggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIHByaXYtPnJlbmRlci5jYihw
cml2LT5yZW5kZXIuZGF0YSwgdCwgJmFyZWEpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFf
dXBkYXRlX2FkZCgKLSAgICAgICAgdC0+aW1hZ2UsCi0gICAgICAgIGFyZWEueCwgYXJlYS55LCBh
cmVhLncsIGFyZWEuaCk7Ci0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0
bSwgdCk7Ci0KLSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQodG0sIHQsIGxhc3RfdXNlZCk7
Ci0KLWVuZDoKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X2RlbChwcml2LCByZXEpOwotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVf
Z2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9f
Zmx1c2godHVjKTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiKHZvaWQgKmRhdGEpCi17Ci0gICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IGRhdGE7Ci0KLSAgICBpZiAocHJpdi0+cHJvY2Vzcy5w
cmVfY2IpCi0gICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZV9jYihwcml2LT5wcm9jZXNz
LnByZV9kYXRhLCBwcml2LT5zZWxmKTsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUocHJpdik7Ci0KLSAgICBpZiAocHJpdi0+
cHJvY2Vzcy5wb3N0X2NiKQotICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IocHJpdi0+cHJv
Y2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOwotCi0gICAgaWYgKCFwcml2LT5yZW5k
ZXIucHJlX3JlbmRlcl9yZXF1ZXN0cykgewotICAgICAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSBO
VUxMOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUlO
QV9UUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCi17Ci0gICAgaWYgKCFwcml2LT5yZW5kZXIuaWRsZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGVjb3JlX2lkbGVyX2RlbChwcml2LT5yZW5kZXIuaWRsZXIpOwotICAgIHByaXYtPnJlbmRl
ci5pZGxlciA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYpCi17Ci0gICAgaWYgKHByaXYtPnJlbmRlci5pZGxlcikKLSAgICAgICAgcmV0
dXJuOwotICAgIHByaXYtPnJlbmRlci5pZGxlciA9IGVjb3JlX2lkbGVyX2FkZCgKLSAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYiwgcHJpdik7Ci19
Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVu
ZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgaWYgKHByaXYt
PnJlbmRlci5zdXNwZW5kKQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotCi0gICAgcHJpdi0+
cmVuZGVyLnN1c3BlbmQgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKHByaXYpOwotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19
Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5k
ZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAoIXByaXYt
PnJlbmRlci5zdXNwZW5kKQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotCi0gICAgcHJpdi0+
cmVuZGVyLnN1c3BlbmQgPSBFSU5BX0ZBTFNFOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwot
fQotCi1zdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cp
Ci17Ci0gICAgdW5zaWduZWQgbG9uZyBtX2NvbCA9IHByaXYtPm1vZGVsLmJhc2UuY29sICsgY29s
OwotICAgIHVuc2lnbmVkIGxvbmcgbV9yb3cgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHJvdzsK
LSAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwotCi0gICAgaWYg
KG1fY29sID49IHByaXYtPm1vZGVsLmN1ci5jb2xzIHx8IG1fcm93ID49IHByaXYtPm1vZGVsLmN1
ci5yb3dzKSB7Ci0gICAgICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNlZCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgRXdrX1RpbGUgKnQ7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHpvb20g
PSBwcml2LT52aWV3LnRpbGUuem9vbTsKLQotICAgICAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAg
ICAgICAgIEV3a19UaWxlICpvbGQgPSBpdC0+dGlsZTsKLSAgICAgICAgICAgIGlmIChvbGQtPnJv
dyAhPSBtX3JvdyB8fCBvbGQtPmNvbCAhPSBtX2NvbCB8fCBvbGQtPnpvb20gIT0gem9vbSkKLSAg
ICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHBy
aXYsIGl0LCBsYXN0X3VzZWQpOwotICAgICAgICAgICAgZWxzZSBpZiAob2xkLT5yb3cgPT0gbV9y
b3cgJiYgb2xkLT5jb2wgPT0gbV9jb2wgJiYgb2xkLT56b29tID09IHpvb20pCi0gICAgICAgICAg
ICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLQotICAgICAgICB0ID0gZXdrX3RpbGVfbWF0cml4
X3RpbGVfZXhhY3RfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCwgbV9jb2wsIG1fcm93LCB6b29tKTsK
LQotICAgICAgICBpZiAoIXQpIHsKLSAgICAgICAgICAgIC8qIE5PVEU6IGl0IG5ldmVyIHJldHVy
bnMgTlVMTCBpZiBpdC0+dGlsZSB3YXMgc2V0ISAqLwotICAgICAgICAgICAgaWYgKGl0LT50aWxl
KSB7Ci0gICAgICAgICAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxk
IGJlIE5VTEwhIiwgaXQtPnRpbGUpOwotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3VzZWQpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvKiBEbyBub3QgYWRkIG5ldyByZXF1ZXN0cyB0byB0aGUgcmVu
ZGVyIHF1ZXVlICovCi0gICAgICAgICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKSB7Ci0g
ICAgICAgICAgICAgICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2
LCBtX2NvbCwgbV9yb3csIHpvb20pOwotICAgICAgICAgICAgICAgIGlmICghdCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHQsIGl0KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmICh0ICE9IGl0LT50aWxlKSB7Ci0gICAgICAgICAgICBpZiAo
aXQtPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGl0LCBsYXN0X3VzZWQpOwotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHQsIGl0KTsKLSAgICAgICAg
fQotCi0gICAgICBlbmQ6Ci0KLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykK
LXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3Jk
IHgsIHksIHR3LCB0aDsKLQotICAgIERCRygibz0lcCIsIHByaXYtPnNlbGYpOwotCi0gICAgTUFM
TE9DX09SX09PTV9SRVQoaXQsIHNpemVvZigqaXQpLCBOVUxMKTsKLQotICAgIHR3ID0gcHJpdi0+
dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICB4ID0gcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54ICsgcHJpdi0+dmlldy54ICsgdHcgICpjb2w7Ci0gICAgeSA9IHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueSArIHRoICAqcm93OwotCi0gICAg
aXQtPnRpbGUgPSBOVUxMOwotCi0gICAgaXQtPnNtb290aF9zY2FsZSA9IHByaXYtPnZpZXcudGls
ZS56b29tX3dlYWtfc21vb3RoX3NjYWxlOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXQsIHgsIHkpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jl
c2l6ZShpdCwgdHcsIHRoKTsKLSAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X2ZpbGwocHJpdiwgaXQsIGNvbCwgcm93KSkgewotICAgICAgICBmcmVlKGl0KTsKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGl0OwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCi17Ci0gICAgaWYg
KGl0LT50aWxlKSB7Ci0gICAgICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVf
Z2V0KCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUo
cHJpdiwgaXQsIGxhc3RfdXNlZCk7Ci0gICAgfQotCi0gICAgZnJlZShpdCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCi17
Ci0gICAgaWYgKGl0LT5zbW9vdGhfc2NhbGUgPT0gc21vb3RoX3NjYWxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290
aF9zY2FsZV9zZXQoaXQtPnRpbGUtPmltYWdlLCBzbW9vdGhfc2NhbGUpOwotfQotCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAocHJpdi0+Y2hhbmdlZC5hbnkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBldmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHByaXYtPnNlbGYp
OwotICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGNv
dW50KQotewotICAgIEVpbmFfSW5saXN0ICpuOwotICAgIHVuc2lnbmVkIGludCBpOwotCi0gICAg
aWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbiA9ICgqcF9yb3cpLT5sYXN0Owot
Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVS
X0dFVChuLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAgbiA9IG4tPnBy
ZXY7Ci0gICAgICAgICpwX3JvdyA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcF9yb3csIEVJTkFfSU5M
SVNUX0dFVChpdCkpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwo
cHJpdiwgaXQpOwotICAgIH0KLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdiwgRWluYV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGJhc2VfY29sLCB1bnNpZ25l
ZCBpbnQgY291bnQpCi17Ci0gICAgdW5zaWduZWQgaW50IGksIHIgPSBwX3JvdyAtIHByaXYtPnZp
ZXcuaXRlbXM7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYmFzZV9jb2wrKykg
ewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLQotICAgICAgICBp
dCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2NvbCwgcik7
Ci0gICAgICAgIGlmICghaXQpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRk
IGNvbHVtbiAldSBvZiAldSBpbiByb3cgJXUuIiwgaSwgY291bnQsIHIpOwotICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHBfcm93LCBp
KTsKLSAgICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAg
KnBfcm93ID0gZWluYV9pbmxpc3RfYXBwZW5kKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7
Ci0gICAgfQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd19kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdiwgRWluYV9Jbmxpc3QgKnJvdykKLXsKLSAgICB3aGlsZSAocm93KSB7Ci0gICAgICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBpdCA9IEVJTkFfSU5M
SVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAg
ICAgICAgcm93ID0gcm93LT5uZXh0OwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9kZWwocHJpdiwgaXQpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRWluYV9Jbmxpc3QgKipzdGFydCwgRWluYV9Jbmxpc3QgKiplbmQpCi17Ci0g
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3Jvd19kZWwocHJpdiwgKnN0YXJ0KTsKLSAgICAgICAgKnN0YXJ0ID0g
TlVMTDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3Jvd3NfYWxsX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQotewot
ICAgIEVpbmFfSW5saXN0ICoqc3RhcnQ7Ci0gICAgRWluYV9Jbmxpc3QgKiplbmQ7Ci0KLSAgICBz
dGFydCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHBy
aXYtPnZpZXcucm93czsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3Jh
bmdlX2RlbChwcml2LCBzdGFydCwgZW5kKTsKLQotICAgIGZyZWUocHJpdi0+dmlldy5pdGVtcyk7
Ci0gICAgcHJpdi0+dmlldy5pdGVtcyA9IE5VTEw7Ci0gICAgcHJpdi0+dmlldy5jb2xzID0gMDsK
LSAgICBwcml2LT52aWV3LnJvd3MgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcmVuZGVyKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqYXJlYSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
ID0gZGF0YTsKLQotICAgIElORigiVE9ETyAlcCAodmlzaWJsZT8gJWQpIFslbHUsJWx1XSAlZCwl
ZCArICVkeCVkIiwKLSAgICAgICAgdCwgdC0+dmlzaWJsZSwgdC0+Y29sLCB0LT5yb3csIGFyZWEt
PngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwotCi0gICAgaWYgKCF0LT52aXNpYmxlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJpdi0+dmlldy50aWxlLncgIT0gdC0+dyB8fCBw
cml2LT52aWV3LnRpbGUuaCAhPSB0LT5oKQotICAgICAgICByZXR1cm47IC8vIHRvZG86IHJlbW92
ZSBtZSBsYXRlciwgZG9uJ3QgZXZlbiBmbGFnIGFzIGRpcnR5IQotCi0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4ocHJpdi0+cmVuZGVyLmNiKTsKLSAgICBpZiAoIXByaXYtPnJlbmRlci5j
Yihwcml2LT5yZW5kZXIuZGF0YSwgdCwgYXJlYSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCh0LT5pbWFnZSwgYXJlYS0+eCwgYXJlYS0+
eSwgYXJlYS0+dywgYXJlYS0+aCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2LCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBpZiAocHJp
di0+bW9kZWwubWF0cml4KSB7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3Jvd3NfYWxsX2RlbChwcml2KTsKLQotICAgICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IEVJ
TkFfRkFMU0U7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLQotICAg
ICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIH0KLQot
ICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxlX21hdHJpeF9uZXcodHVjLCBwcml2LT5t
b2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsIHByaXYtPmNzcGFjZSwgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwgcHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsKEV2YXNfT2JqZWN0ICpvLCBFdmFz
X09iamVjdCAqbWVtYmVyKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYp
OwotICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKLSAgICAgICAgcmV0dXJuOwotICAg
IGV2YXNfb2JqZWN0X2NsaXBfdW5zZXQobWVtYmVyKTsKLSAgICBpZiAoIWV2YXNfb2JqZWN0X2Ns
aXBlZXNfZ2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpKQotICAgICAgICBldmFzX29iamVjdF9o
aWRlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2FkZChFdmFzX09iamVjdCAqbywgRXZhc19PYmpl
Y3QgKm1lbWJlcikKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAg
ICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBldmFz
X29iamVjdF9jbGlwX3NldChtZW1iZXIsIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAgIGlm
IChldmFzX29iamVjdF92aXNpYmxlX2dldChvKSkKLSAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhw
cml2LT5jb250ZW50c19jbGlwcGVyKTsKLX0KLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBzdGF0aWMgaW50IHJ1biA9IDA7Ci0KLSAgICBy
dW4rKzsKLQotICAgIHByaW50ZigiXG4tLS0gQkVHSU4gREVCVUcgVElMRUQgQkFDS0lORyBTVE9S
RSBNRU1PUlkgWyVkXSAtLVxuIgotICAgICAgICAgICAidD0lMC4yZiwgb2JqPSVwLCBwcml2PSVw
LCB2aWV3Lml0ZW1zPSVwLCBtYXRyaXg9JXBcbiIsCi0gICAgICAgICAgIHJ1biwgZWNvcmVfbG9v
cF90aW1lX2dldCgpLAotICAgICAgICAgICBwcml2LT5zZWxmLCBwcml2LCBwcml2LT52aWV3Lml0
ZW1zLCBwcml2LT5tb2RlbC5tYXRyaXgpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X2RiZyhwcml2
LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX2FjY291bnRpbmdfZGJnKCk7Ci0KLSAgICBw
cmludGYoIi0tLSBFTkQgREVCVUcgVElMRUQgQkFDS0lORyBTVE9SRSBNRU1PUlkgWyVkXSAtLVxu
XG4iLCBydW4pOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zaWdfdXNyKHZvaWQgKmRhdGEsIGludCB0eXBlLCB2b2lkICpldmVudCkKLXsKLSAgICBFY29y
ZV9FdmVudF9TaWduYWxfVXNlciAqc2lnID0gKEVjb3JlX0V2ZW50X1NpZ25hbF9Vc2VyKilldmVu
dDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2ID0gKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqKWRhdGE7Ci0KLSAgICBpZiAoc2lnLT5udW1iZXIgPT0gMikgewot
ICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKLSAgICAgICAgdHVjID0gZXdrX3Rp
bGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICAgICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKLSAgICB9Ci0KLSAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX21lbV9kYmcocHJpdik7Ci0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLSNlbmRp
ZgotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNf
T2JqZWN0ICpvKQotewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXY7Ci0K
LSAgICBEQkcoIm89JXAiLCBvKTsKLQotICAgIENBTExPQ19PUl9PT01fUkVUKHByaXYsIHNpemVv
ZigqcHJpdikpOwotCi0gICAgcHJpdi0+c2VsZiA9IG87Ci0gICAgcHJpdi0+dmlldy50aWxlLnpv
b20gPSAxLjA7Ci0gICAgcHJpdi0+dmlldy50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAgICBw
cml2LT52aWV3LnRpbGUuaCA9IERFRkFVTFRfVElMRV9IOwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7Ci0gICAgcHJpdi0+
dmlldy5vZmZzZXQub2xkLnggPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gMDsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSA9IDA7Ci0KLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IDA7Ci0gICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3cgPSAwOwotICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKLSAgICBw
cml2LT5tb2RlbC5jdXIucm93cyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOwot
ICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gMDsKLSAgICBwcml2LT5tb2RlbC53aWR0aCA9IDA7
Ci0gICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gMDsKLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfRkFMU0U7Ci0gICAgcHJpdi0+Y3NwYWNlID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4
OyAvLyBUT0RPOiBkZXRlY3QgaXQuCi0KLSAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChv
LCBwcml2KTsKLSAgICBfcGFyZW50X3NjLmFkZChvKTsKLQotICAgIHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKAotICAgICAgICBldmFzX29iamVjdF9l
dmFzX2dldChvKSk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVy
LCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhl
aWdodCk7Ci0gICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIs
IDI1NSwgMjU1LCAyNTUsIDI1NSk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50
c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsIG8pOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21h
dHJpeF9jcmVhdGUocHJpdiwgTlVMTCk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNl
LmNsaXBwZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBw
ZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIsIHByaXYtPmJhc2UuY2xpcHBlcik7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBw
cml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQKLSAgICAgICAgKEVDT1JFX0VW
RU5UX1NJR05BTF9VU0VSLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2lnX3VzciwgcHJpdik7
Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2RlbChFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBw
cml2KTsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YzsKLQotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1v
ZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7
Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2gocHJpdik7Ci0KLSAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOwotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChwcml2KTsK
LSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7Ci0K
LSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVt
X2RiZyhwcml2KTsKLSAgICBpZiAocHJpdi0+c2lnX3VzcikKLSAgICAgICAgcHJpdi0+c2lnX3Vz
ciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfZGVsKHByaXYtPnNpZ191c3IpOwotI2VuZGlmCi0KLSAg
ICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgZXZhc19v
YmplY3RfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotCi0gICAgX3BhcmVudF9zYy5kZWwo
byk7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBwcmludGYoIlxuSU1QT1JUQU5UOiBU
SUxFRCBCQUNLSU5HIFNUT1JFIERFTEVURUQgKG1heSBiZSByZWFsIGxlYWtzKVxuIik7Ci0gICAg
ZXdrX3RpbGVfYWNjb3VudGluZ19kYmcoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgREJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIG8s
IHgsIHkpOwotCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0KLSAgICBp
ZiAocHJpdi0+Y2hhbmdlZC5wb3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcml2LT52
aWV3LnggPT0geCAmJiBwcml2LT52aWV3LnkgPT0geSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2NoYW5nZWQocHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29y
ZCBoKQotewotICAgIERCRygibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgbywgdywgaCk7Ci0KLSAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQotICAgIGlmIChwcml2LT5jaGFu
Z2VkLnNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcml2LT52aWV3LncgPT0gdyAm
JiBwcml2LT52aWV3LmggPT0gaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJpdi0+Y2hhbmdl
ZC5zaXplID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2Vk
KHByaXYpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxj
X3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3Jk
IHcsIEV2YXNfQ29vcmQgaCwgRXZhc19Db29yZCB0dywgRXZhc19Db29yZCB0aCkKLXsKLSAgICBs
b25nIGNvbHMsIHJvd3MsIG9sZF9yb3dzLCBvbGRfY29sczsKLSAgICBJTkYoIm89JXAsIG5ldyBz
aXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHcsIGgpOwotCi0gICAgY29scyA9IDEgKyAoaW50KWNl
aWwoKGZsb2F0KXcgLyAoZmxvYXQpdHcpOwotICAgIHJvd3MgPSAxICsgKGludCljZWlsKChmbG9h
dCloIC8gKGZsb2F0KXRoKTsKLQotICAgIElORigibz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVs
ZCwgcm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAotICAgICAgICBwcml2LT5zZWxmLCBjb2xzLCBy
b3dzLCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cyk7Ci0KLSAgICBpZiAocHJpdi0+
dmlldy5jb2xzID09IGNvbHMgJiYgcHJpdi0+dmlldy5yb3dzID09IHJvd3MpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG9sZF9jb2xzID0gcHJpdi0+dmlldy5jb2xzOwotICAgIG9sZF9yb3dzID0g
cHJpdi0+dmlldy5yb3dzOwotCi0gICAgaWYgKHJvd3MgPCBvbGRfcm93cykgewotICAgICAgICBF
aW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0
ZW1zICsgcm93czsKLSAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwot
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2
LCBzdGFydCwgZW5kKTsKLSAgICB9Ci0gICAgUkVBTExPQ19PUl9PT01fUkVUKHByaXYtPnZpZXcu
aXRlbXMsIHNpemVvZihFaW5hX0lubGlzdCopICogKGludClyb3dzKTsKLSAgICBwcml2LT52aWV3
LnJvd3MgPSByb3dzOwotICAgIHByaXYtPnZpZXcuY29scyA9IGNvbHM7Ci0gICAgaWYgKHJvd3Mg
PiBvbGRfcm93cykgewotICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICAg
ICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7Ci0gICAgICAgIGVuZCA9IHBy
aXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0
KyspIHsKLSAgICAgICAgICAgIEVpbmFfQm9vbCByOwotICAgICAgICAgICAgKnN0YXJ0ID0gTlVM
TDsKLSAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2Vu
ZF9hZGQKLSAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOwotICAgICAgICAg
ICAgaWYgKCFyKSB7Ci0gICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0
ZSAlbGQgY29sdW1ucyIsIGNvbHMpOwotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsCi0gICAgICAgICAgICAgICAgICAgIChwcml2LCBw
cml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICBwcml2
LT52aWV3LnJvd3MgPSBvbGRfcm93czsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29scyAhPSBvbGRfY29scykgewot
ICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICAgICAgaW50IHRvZG8gPSBj
b2xzIC0gb2xkX2NvbHM7Ci0gICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICAg
ICAgZW5kID0gc3RhcnQgKyBNSU4ob2xkX3Jvd3MsIHJvd3MpOwotICAgICAgICBpZiAodG9kbyA+
IDApIHsKLSAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAg
ICAgICAgICAgIEVpbmFfQm9vbCByOwotICAgICAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQKLSAgICAgICAgICAgICAgICAgICAgKHByaXYs
IHN0YXJ0LCBvbGRfY29scywgdG9kbyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgY29sdW1ucyEi
LCB0b2RvKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YXJ0LS07IHN0YXJ0ID49IHBy
aXYtPnZpZXcuaXRlbXM7IHN0YXJ0LS0pCi0gICAgICAgICAgICAgICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgc3RhcnQsIHRvZG8pOwot
ICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93czsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2Rl
bChwcml2LCBzdGFydCwgdG9kbyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmICh0b2RvIDwgMCkgewotICAgICAgICAgICAgdG9kbyA9IC10b2RvOwotICAg
ICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQotICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9k
byk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmls
bF9yZW5kZXJlcnMocHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKLXsKLSAgICBldmFzX29iamVjdF9yZXNp
emUocHJpdi0+YmFzZS5jbGlwcGVyLCB3LCBoKTsKLQotICAgIHByaXYtPnZpZXcudyA9IHc7Ci0g
ICAgcHJpdi0+dmlldy5oID0gaDsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNh
bGNfcmVuZGVyZXJzKAotICAgICAgICBwcml2LCB3LCBoLCBwcml2LT52aWV3LnRpbGUudywgcHJp
di0+dmlldy50aWxlLmgpOwotfQotCi0vLyBUT0RPOiByZW1vdmUgbWUgbGF0ZXIuCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3QgKipzdGFy
dCwgKiplbmQ7Ci0gICAgcHJpbnRmKCJ0aWxlcz0lMmxkLCUybGQgIG1vZGVsPSUybGQsJTJsZCBb
JWR4JWRdIGJhc2U9JSszbGQsJSs0bGQgb2Zmc2V0PSUrNGQsJSs0ZCBvbGQ9JSs0ZCwlKzRkIGJh
c2U9JSszZCwlKzNkXG4iLAotICAgICAgICAgICBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcu
cm93cywKLSAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1ci5y
b3dzLAotICAgICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0LAot
ICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCwgcHJpdi0+bW9kZWwuYmFzZS5yb3csCi0g
ICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eSwKLSAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLngsIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC55LAotICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSk7Ci0KLSAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgZW5k
ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKLSAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAgICAgY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqaXQ7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqc3RhcnQsIGl0KSB7Ci0g
ICAgICAgICAgICBwcmludGYoIiAlKzRkLCUrNGQgIiwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9t
ZXRyeS55KTsKLQotICAgICAgICAgICAgaWYgKCFpdC0+dGlsZSkKLSAgICAgICAgICAgICAgICBw
cmludGYoIiAgICAgICAgICAgIDsiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBwcmludGYoIiU4cCAlbHUsJWx1OyIsIGl0LT50aWxlLCBpdC0+dGlsZS0+Y29sLCBpdC0+dGls
ZS0+cm93KTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotICAgIHBy
aW50ZigiLS0tXG4iKTsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIE1vdmUgdG9wIHJvdyBk
b3duIGFzIGxhc3QuCi0gKgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2Ft
ZSwgYnV0IGxvZ2ljYWxseSB0aGUgdG9wIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBu
b3cgYXQgYm90dG9tIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMuCi0gKgotICogVGhp
cyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFuIEBjCi0gKiBwcml2
LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4
IHNvIGl0Ci0gKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4KLSAqCi0gKiBAcGFy
YW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCi0gKi8K
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHks
IHVuc2lnbmVkIGludCBjb3VudCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgbGFzdF9yb3cgPSBwcml2
LT52aWV3LnJvd3MgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsK
LSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29yZCBv
ZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIGNvdW50ICogdGg7Ci0gICAgRXZhc19D
b29yZCBveSA9IHkgKyAobGFzdF9yb3cgLSBjb3VudCArIDEpICogdGggKyBvZmZfeTsKLSAgICBF
aW5hX0lubGlzdCAqKml0cl9zdGFydCwgKippdHJfZW5kOwotCi0gICAgaXRyX3N0YXJ0ID0gcHJp
di0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyX3N0YXJ0ICsgbGFzdF9yb3c7Ci0KLSAg
ICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqaXRy
OwotICAgICAgICBFaW5hX0lubGlzdCAqdG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgICAgICBpbnQgYyA9IDA7Ci0KLSAgICAgICAg
Zm9yIChpdHIgPSBpdHJfc3RhcnQ7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKQotICAgICAgICAgICAg
Kml0ciA9ICooaXRyICsgMSk7Ci0gICAgICAgICppdHIgPSB0bXA7Ci0KLSAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3crKzsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0bXAsIGl0KSB7
Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwg
b3kpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCBsYXN0X3Jvdyk7Ci0gICAgICAgICAgICBj
Kys7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7Ci0gICAgfQotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSA9IG9mZl95OwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92ZSBi
b3R0b20gcm93IHVwIGFzIGZpcnN0LgotICoKLSAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFs
bHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGJvdHRvbSB0aGF0Ci0gKiB3ZW50IG91dCBv
ZiBzY3JlZW4gaXMgbm93IGF0IHRvcCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgot
ICoKLSAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBA
YwotICogcHJpdi0+dmlldy5yb3dzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdo
b2xlIG1hdHJpeCBzbyBpdAotICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCi0g
KgotICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9j
ZXNzLgotICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLSAgICBFdmFzX0Nvb3JkIHR3ID0g
cHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OwotICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgLSBjb3Vu
dCAqIHRoOwotICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgb2ZmX3kgKyAoY291bnQgLSAxKSAqIHRo
OwotICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7Ci0KLSAgICBpdHJfc3Rh
cnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzIC0gMTsKLSAgICBpdHJfZW5k
ID0gcHJpdi0+dmlldy5pdGVtczsKLQotICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsK
LSAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAq
aXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAg
ICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAg
ICAgIGludCBjID0gMDsKLQotICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyID4gaXRy
X2VuZDsgaXRyLS0pCi0gICAgICAgICAgICAqaXRyID0gKihpdHIgLSAxKTsKLSAgICAgICAgKml0
ciA9IHRtcDsKLQotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdy0tOwotICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBveCArPSB0dzsKLSAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMs
IDApOwotICAgICAgICAgICAgYysrOwotICAgICAgICB9Ci0gICAgICAgIG95IC09IHRoOwotICAg
IH0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZfeTsKLX0KLQotLyoqCi0gKiBA
aW50ZXJuYWwKLSAqIE1vdmUgbGVmdC1tb3N0IChmaXJzdCkgY29sdW1uIHJpZ2h0IGFzIGxhc3Qg
KHJpZ2h0LW1vc3QpLgotICoKLSAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNh
bWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGZpcnN0IGNvbCB0aGF0Ci0gKiB3ZW50IG91dCBvZiBzY3Jl
ZW4gaXMgbm93IGF0IGxhc3QgYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0g
KiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAq
IHByaXYtPnZpZXcuY29scywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBt
YXRyaXggc28gaXQKLSAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAq
IEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4K
LSAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0gICAgdW5zaWduZWQgaW50IHIsIGxhc3Rf
Y29sID0gcHJpdi0+dmlldy5jb2xzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmll
dy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotICAgIEV2
YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBjb3VudCAqIHR3Owot
ICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVp
bmFfSW5saXN0ICoqaXRyOwotICAgIEVpbmFfSW5saXN0ICoqaXRyX2VuZDsKLQotICAgIGl0ciA9
IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsK
LSAgICByID0gMDsKLQotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sICs9IGNvdW50OwotCi0gICAg
Zm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBv
eCA9IHggKyAobGFzdF9jb2wgLSBjb3VudCArIDEpICogdHcgKyBvZmZfeDsKLSAgICAgICAgdW5z
aWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAtIGNvdW50ICsgMTsKLQotICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBveCArPSB0dykgewotICAgICAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNU
X0NPTlRBSU5FUl9HRVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAg
ICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIsICppdHIpOwotCi0gICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7Ci0gICAgfQotCi0gICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBNb3Zl
IHJpZ2h0LW1vc3QgKGxhc3QpIGNvbHVtbiBsZWZ0IGFzIGZpcnN0IChsZWZ0LW1vc3QpLgotICoK
LSAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkg
dGhlIGxhc3QgY29sIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgZmlyc3Qg
YW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0gKiBUaGlzIGlzIHdvcnRoIGp1
c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAqIHByaXYtPnZpZXcuY29scywg
YWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKLSAqIGlz
IGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAqIEBwYXJhbSBjb3VudCB0aGUg
bnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KLSAqLwotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQg
aW50IGNvdW50KQotewotICAgIHVuc2lnbmVkIGludCByOwotICAgIEV2YXNfQ29vcmQgdHcgPSBw
cml2LT52aWV3LnRpbGUudzsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7
Ci0gICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50
ICogdHc7Ci0gICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7
Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLQotICAgIGl0ciA9IHByaXYtPnZp
ZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICByID0g
MDsKLQotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sIC09IGNvdW50OwotCi0gICAgZm9yICg7IGl0
ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyAo
Y291bnQgLSAxKSAqIHR3ICsgb2ZmX3g7Ci0gICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gY291
bnQgLSAxOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjLS0sIG94IC09
IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAg
ICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgoKml0ciktPmxhc3QsIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICAgICAgKml0ciA9IGVpbmFfaW5s
aXN0X3Byb21vdGUoKml0ciwgKCppdHIpLT5sYXN0KTsKLQotICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIHIpOwotICAgICAgICB9
Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLQotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCA9IG9mZl94OwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwX3gsIGludCBzdGVwX3kpCi17Ci0gICAgRWluYV9Jbmxp
c3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7
Ci0gICAgdW5zaWduZWQgaW50IHI7Ci0KLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2Uu
Y2xpcHBlciwgeCwgeSk7Ci0KLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0g
cHJpdi0+dmlldy50aWxlLmg7Ci0KLSAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0KLSAgICBp
dHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJv
d3M7Ci0gICAgciA9IDA7Ci0KLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCAtPSBzdGVwX3g7Ci0g
ICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgLT0gc3RlcF95OwotCi0gICAgZm9yICg7IGl0ciA8IGl0
cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSAqaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICB1bnNpZ25l
ZCBpbnQgYyA9IDA7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpIHsKLSAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMs
IHIpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIG95KTsKLSAgICAgICAgICAgIGMrKzsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAg
ICB9Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQotewotICAgIEVpbmFfSW5saXN0
ICoqaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXZhc19Db29yZCBiYXNlX294LCBveSwgdHcsIHRoOwot
Ci0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIHgsIHkpOwotCi0gICAg
dHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotCi0g
ICAgYmFzZV9veCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgb3kgPSB5ICsg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsK
LSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIGZvciAoOyBpdHIgPCBp
dHJfZW5kOyBpdHIrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpp
dDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVJTkFfSU5MSVNU
X0ZPUkVBQ0goKml0ciwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBveCArPSB0dzsKLSAgICAgICAg
fQotICAgICAgICBveSArPSB0aDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19Db29yZCBk
eSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7Ci0g
ICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OwotCi0gICAgSU5G
KCJvPSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+
c2VsZiwgZHgsIGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkpOwotCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZp
ZXcudGlsZS5oOwotCi0gICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54
IC8gdHc7Ci0gICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOwotICAg
IGxvbmcgbmV3X3JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRoOwotICAgIHN0ZXBf
eSA9IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3X3JvdzsKLQotICAgIHByaXYtPnZpZXcub2Zm
c2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7Ci0gICAgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKLSAgICBldmFzX29iamVjdF9tb3Zl
KAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgKyBwcml2LT52aWV3LnkpOwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4
IC0gc3RlcF94ICogdHc7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0gc3Rl
cF95ICogdGg7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKLSAg
ICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxh
dGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5KQotewotICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwotICAgIEV2YXNfQ29vcmQgZHkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwotICAgIEV2
YXNfQ29vcmQgdHcsIHRoOwotICAgIGludCBzdGVwX3ksIHN0ZXBfeDsKLQotICAgIElORigibz0l
cCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCi0gICAgICAgIHByaXYtPnNlbGYs
IGR4LCBkeSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
KTsKLQotICAgIGlmICghZHggJiYgIWR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0dyA9IHBy
aXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAgICBsb25n
IG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBzdGVwX3ggPSBw
cml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93ID0gLXByaXYt
PnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9kZWwuYmFzZS5y
b3cgLSBuZXdfcm93OwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55OwotICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmll
dy54LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7Ci0K
LSAgICBpZiAoKHN0ZXBfeCA8IDAgJiYgc3RlcF94IDw9IC1wcml2LT52aWV3LmNvbHMpCi0gICAg
ICAgIHx8IChzdGVwX3ggPiAwICYmIHN0ZXBfeCA+PSBwcml2LT52aWV3LmNvbHMpCi0gICAgICAg
IHx8IChzdGVwX3kgPCAwICYmIHN0ZXBfeSA8PSAtcHJpdi0+dmlldy5yb3dzKQotICAgICAgICB8
fCAoc3RlcF95ID4gMCAmJiBzdGVwX3kgPj0gcHJpdi0+dmlldy5yb3dzKSkgewotCi0gICAgICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBkeCAtIHN0ZXBfeCAqIHR3OwotICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKLQotICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKLSAgICAgICAgICAgIChwcml2LCBw
cml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4OwotICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeTsKLQotICAgIGlmIChzdGVwX3kgPCAwKQotICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3VwKHByaXYsIHgsIHksIC1z
dGVwX3kpOwotICAgIGVsc2UgaWYgKHN0ZXBfeSA+IDApCi0gICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihwcml2LCB4LCB5LCBzdGVwX3kpOwotCi0gICAgaWYg
KHN0ZXBfeCA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBf
bGVmdChwcml2LCB4LCB5LCAtc3RlcF94KTsKLSAgICBlbHNlIGlmIChzdGVwX3ggPiAwKQotICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KHByaXYsIHgsIHks
IHN0ZXBfeCk7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHko
cHJpdiwgeCwgeSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQotewotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKLSAgICBwcml2LT52aWV3LnggPSB4OwotICAg
IHByaXYtPnZpZXcueSA9IHk7Ci0gICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+
Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2
LT52aWV3LngsCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVy
ZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxp
c3QgKml0OwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0ZW07Ci0gICAgaW50
IGksIGo7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKLSAg
ICAgICAgaXQgPSBwcml2LT52aWV3Lml0ZW1zW2ldOwotICAgICAgICBqID0gMDsKLSAgICAgICAg
RUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgaisrLCBpKTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19P
YmplY3QgKm8pCi17Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwotCi0gICAgZXZhc19vYmpl
Y3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwgJncsICZoKTsKLSAgICBEQkcoIm89JXAgYXQgJWQs
JWQgKyAlZHglZCIsIG8sIHgsIHksIHcsIGgpOwotCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBwcml2LT5jaGFuZ2VkLmFueSA9IEVJTkFfRkFMU0U7Ci0KLSAg
ICBld2tfdGlsZV9tYXRyaXhfZnJlZXplKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAgICBpZiAo
IXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNoYW5nZWQubW9kZWwpIHsKLSAgICAgICAg
dW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOwotCi0gICAgICAgIGNvbHMgPSBwcml2LT5tb2RlbC53
aWR0aCAvIHByaXYtPnZpZXcudGlsZS53ICsgMTsKLSAgICAgICAgcm93cyA9IHByaXYtPm1vZGVs
LmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oICsgMTsKLQotICAgICAgICBwcml2LT5tb2RlbC5v
bGQuY29scyA9IHByaXYtPm1vZGVsLmN1ci5jb2xzOwotICAgICAgICBwcml2LT5tb2RlbC5vbGQu
cm93cyA9IHByaXYtPm1vZGVsLmN1ci5yb3dzOwotICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29s
cyA9IGNvbHM7Ci0gICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gcm93czsKLSAgICAgICAg
aWYgKHByaXYtPm1vZGVsLm9sZC5jb2xzID4gY29scykKLSAgICAgICAgICAgIGNvbHMgPSBwcml2
LT5tb2RlbC5vbGQuY29sczsKLSAgICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5yb3dzID4gcm93
cykKLSAgICAgICAgICAgIHJvd3MgPSBwcml2LT5tb2RlbC5vbGQucm93czsKLSAgICAgICAgZXdr
X3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsIGNvbHMsIHJvd3MpOwotICAg
IH0KLQotICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcyAmJiAocHJpdi0+dmlldy54ICE9IHggfHwg
cHJpdi0+dmlldy55ICE9IHkpKSB7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfcG9zKHByaXYsIHgsIHkpOwotICAgICAgICBwcml2LT5jaGFuZ2VkLnBv
cyA9IEVJTkFfRkFMU0U7Ci0gICAgfQotICAgIGlmIChwcml2LT5jaGFuZ2VkLm9mZnNldCkgewot
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChw
cml2LCB4LCB5KTsKLSAgICAgICAgcHJpdi0+Y2hhbmdlZC5vZmZzZXQgPSBFSU5BX0ZBTFNFOwot
ICAgIH0KLQotICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUpIHsKLSAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKHByaXYsIHcsIGgpOwotICAgICAg
ICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIGlmICghcHJp
di0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewotICAgICAgICBFaW5h
X1JlY3RhbmdsZSByZWN0OwotICAgICAgICByZWN0LnggPSAwOwotICAgICAgICByZWN0LnkgPSAw
OwotICAgICAgICByZWN0LncgPSBwcml2LT5tb2RlbC53aWR0aDsKLSAgICAgICAgcmVjdC5oID0g
cHJpdi0+bW9kZWwuaGVpZ2h0OwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmls
bF9yZW5kZXJlcnMocHJpdik7Ci0gICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNpemUocHJpdi0+
bW9kZWwubWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3Vy
LmNvbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyk7
Ci0gICAgICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX0ZBTFNFOwotICAgICAgICBldmFz
X29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+bW9kZWwud2lkdGgs
IHByaXYtPm1vZGVsLmhlaWdodCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKHByaXYpOwotCi0gICAgICAgIC8qIE1ha2Ugc3Vy
ZSB3ZSBkbyBub3QgbWlzcyBhbnkgaW1wb3J0YW50IHJlcGFpbnQgYnkKLSAgICAgICAgICogcmVw
YWludGluZyB0aGUgd2hvbGUgdmlld3BvcnQgKi8KLSAgICAgICAgY29uc3QgRWluYV9SZWN0YW5n
bGUgciA9Ci0gICAgICAgICAgICB7IDAsIDAsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2Rl
bC5oZWlnaHQgfTsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2LT5tb2RlbC5t
YXRyaXgsICZyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnZpZXcudGls
ZS56b29tKTsKLSAgICB9Ci0KLSAgICBld2tfdGlsZV9tYXRyaXhfdGhhdyhwcml2LT5tb2RlbC5t
YXRyaXgpOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhw
cml2KTsKLQotICAgIGlmIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPiAwCi0gICAgICAgIHx8
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA8PSAtIHByaXYtPnZpZXcudGlsZS53Ci0gICAgICAg
IHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55IDw9IC0gcHJpdi0+dmlldy50aWxlLmgpCi0gICAgICAgIEVSUigiaW5jb3Jy
ZWN0IGJhc2Ugb2Zmc2V0ICUrNGQsJSs0ZCwgdGlsZT0lZHglZCwgY3VyPSUrNGQsJSs0ZFxuIiwK
LSAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55LAotICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLncsIHByaXYtPnZpZXcudGlsZS5o
LAotICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55KTsKLQotfQotCi1FdmFzX09iamVjdCAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRk
KEV2YXMgKmUpCi17Ci0gICAgc3RhdGljIEV2YXNfU21hcnQgKnNtYXJ0ID0gTlVMTDsKLQotICAg
IGlmIChfZXdrX3RpbGVkX2xvZ19kb20gPCAwKQotICAgICAgICBfZXdrX3RpbGVkX2xvZ19kb20g
PSBlaW5hX2xvZ19kb21haW5fcmVnaXN0ZXIoIkV3a19UaWxlZF9CYWNraW5nX1N0b3JlIiwgTlVM
TCk7Ci0KLSAgICBpZiAoIXNtYXJ0KSB7Ci0gICAgICAgIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNz
IHNjID0KLSAgICAgICAgICAgIEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3
a19UaWxlZF9CYWNraW5nX1N0b3JlIik7Ci0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xp
cHBlZF9zbWFydF9zZXQoJnNjKTsKLSAgICAgICAgX3BhcmVudF9zYyA9IHNjOwotCi0gICAgICAg
IHNjLmFkZCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQ7Ci0gICAgICAgIHNj
LmRlbCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWw7Ci0gICAgICAgIHNjLnJl
c2l6ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemU7Ci0gICAgICAgIHNj
Lm1vdmUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZTsKLSAgICAgICAgc2Mu
Y2FsY3VsYXRlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZTsKLSAg
ICAgICAgc2MubWVtYmVyX2FkZCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1i
ZXJfYWRkOwotICAgICAgICBzYy5tZW1iZXJfZGVsID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X21lbWJlcl9kZWw7Ci0KLSAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25l
dygmc2MpOwotICAgIH0KLQotICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgc21h
cnQpOwotfQotCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZh
c19PYmplY3QgKm8sIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29u
c3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpLCBjb25zdCB2b2lkICpkYXRhKQotewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGNiKTsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKLSAgICBwcml2LT5yZW5kZXIuY2IgPSBjYjsKLSAgICBwcml2LT5yZW5kZXIuZGF0
YSA9ICh2b2lkKilkYXRhOwotfQotCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCAqbykK
LXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBOVUxMKTsKLSAgICByZXR1
cm4gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsK
LX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQo
RXZhc19PYmplY3QgKm8sIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAgaWYgKGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCkgPT0gdHVjKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShw
cml2LCB0dWMpOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQotewotICAgIC8qIFRPRE86
IGNoZWNrIG9mZnNldCBnbyBvdXQgb2YgYm91bmRzLCBjbGFtcCAqLwotICAgIGlmIChwcml2LT5y
ZW5kZXIuZGlzYWJsZWQpCi0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnggPSB4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0geTsK
LQotICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0K
LQotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9z
ZXQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQotewotICAgIERC
Rygibz0lcCwgeD0lZCwgeT0lZCIsIG8sIHgsIHkpOwotCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHggPT0gcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnggJiYgeSA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSkKLSAgICAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKLQotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xs
X2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChwcml2LCB4LCB5KTsKLX0KLQotRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3Qg
Km8sIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHkpCi17Ci0gICAgREJHKCJvPSVwLCBkeD0l
ZCwgZHk9JWQiLCBvLCBkeCwgZHkpOwotCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywg
cHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKCFkeCAmJiAhZHkpCi0gICAgICAgIHJldHVybiBF
SU5BX1RSVUU7Ci0KLSAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9m
dWxsX29mZnNldF9zZXRfaW50ZXJuYWwKLSAgICAgICAgKHByaXYsIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54ICsgZHgsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgZHkpOwotfQotCi1zdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBmbG9hdCAqem9vbSwgRXZhc19Db29yZCBj
eCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCAqb2ZmeCwgRXZhc19Db29yZCAqb2ZmeSkKLXsK
LSAgICAqb2ZmeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OwotICAgICpvZmZ5ID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnk7Ci0KLSAgICBpZiAoZmFic2YocHJpdi0+dmlldy50aWxlLnpvb20g
LSAqem9vbSkgPCBaT09NX1NURVBfTUlOKSB7Ci0gICAgICAgIERCRygiaWdub3JlZCBhcyB6b29t
IGRpZmZlcmVuY2UgaXMgPCAlZjogJWYiLAotICAgICAgICAgICAgKGRvdWJsZSlaT09NX1NURVBf
TUlOLCBmYWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6b29tKSk7Ci0gICAgICAgIHJldHVy
biBFSU5BX1RSVUU7Ci0gICAgfQotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLQotICAg
ICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53LCAqem9vbSk7Ci0KLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAg
ICBmbG9hdCBzY2FsZSA9ICp6b29tIC8gcHJpdi0+dmlldy50aWxlLnpvb207Ci0KLSAgICBwcml2
LT52aWV3LnRpbGUuem9vbSA9ICp6b29tOwotICAgIC8vIHRvZG86IGNoZWNrIGN4IFswLCB3XS4u
LgotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnggPSBjeDsKLSAgICBwcml2LT52
aWV3Lm9mZnNldC56b29tX2NlbnRlci55ID0gY3k7Ci0KLQotICAgIGlmICghcHJpdi0+dmlldy53
IHx8ICFwcml2LT52aWV3LmgpIHsKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0g
MDsKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKLSAgICAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKLSAgICB9Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLQotICAgIEV2YXNfQ29vcmQgbmV3
X3ggPSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN4KSAqIHNjYWxlOwotICAgIEV2
YXNfQ29vcmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN5KSAqIHNj
YWxlOwotCi0gICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICog
c2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5tb2RlbC5oZWlnaHQg
KiBzY2FsZTsKLQotICAgIGlmIChtb2RlbF93aWR0aCA8IHByaXYtPnZpZXcudyB8fCBuZXdfeCA+
PSAwKQotICAgICAgICBuZXdfeCA9IDA7Ci0gICAgZWxzZSBpZiAoLW5ld194ICsgcHJpdi0+dmll
dy53ID49IG1vZGVsX3dpZHRoKQotICAgICAgICBuZXdfeCA9IC1tb2RlbF93aWR0aCArIHByaXYt
PnZpZXcudzsKLQotICAgIGlmIChtb2RlbF9oZWlnaHQgPCBwcml2LT52aWV3LmggfHwgbmV3X3kg
Pj0gMCkKLSAgICAgICAgbmV3X3kgPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeSArIHByaXYtPnZp
ZXcuaCA+PSBtb2RlbF9oZWlnaHQpCi0gICAgICAgIG5ld195ID0gLW1vZGVsX2hlaWdodCArIHBy
aXYtPnZpZXcuaDsKLQotICAgIEV2YXNfQ29vcmQgYnggPSBuZXdfeCAlIHR3OwotICAgIEV2YXNf
Q29vcmQgYnkgPSBuZXdfeSAlIHRoOwotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194
IC8gdHc7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKLQotICAgIHBy
aXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLSAgICBwcml2LT5jaGFuZ2VkLm1vZGVsID0g
RUlOQV9UUlVFOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOwot
Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdfeDsKLSAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJ4Owot
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5OwotCi0gICAgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICBwcml2LT52aWV3Lm9mZnNl
dC5vbGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwotICAgICpvZmZ4ID0gcHJpdi0+dmll
dy5vZmZzZXQuY3VyLng7Ci0gICAgKm9mZnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKLQot
ICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0g
ICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAgICAgICBuZXdfeSArIHByaXYtPnZpZXcu
eSk7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7
Ci0KLSAgICBFdmFzX0Nvb3JkIG95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+
dmlldy55OwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueDsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRy
X2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLQotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5k
OyBpdHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRWlu
YV9Jbmxpc3QgKmxzdCA9ICppdHI7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3Qs
IGl0KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0
LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVz
aXplKGl0LCB0dywgdGgpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAg
ICAgb3kgKz0gdGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotRWluYV9C
b29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9h
dCAqem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCAqb2ZmeCwg
RXZhc19Db29yZCAqb2ZmeSkKLXsKLSAgICBEQkcoIm89JXAsIHpvb209JWYiLCBvLCAoZG91Ymxl
KSp6b29tKTsKLQotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFM
U0UpOwotCi0gICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRl
cm5hbChwcml2LCB6b29tLCBjeCwgY3ksIG9mZngsIG9mZnkpOwotfQotCi1FaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQg
em9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKLXsKLSAgICBEQkcoIm89JXAsIHpv
b209JWYiLCBvLCAoZG91YmxlKXpvb20pOwotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmICghcHJpdi0+dmlldy53IHx8ICFwcml2LT52aWV3
LmgpCi0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAq
Kml0cl9lbmQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgRXZh
c19Db29yZCB0dywgdGg7Ci0gICAgRWluYV9Cb29sIHJlY2FsYyA9IEVJTkFfRkFMU0U7Ci0KLSAg
ICBmbG9hdCBzY2FsZSA9IHpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKLQotICAgIHR3ID0g
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHNjYWxlKTsKLSAgICBzY2FsZSA9
IFRJTEVfWk9PTV9BVF9TSVpFKHR3LCBwcml2LT52aWV3LnRpbGUudyk7Ci0gICAgdGggPSBUSUxF
X1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaCwgc2NhbGUpOwotICAgIHpvb20gPSBzY2Fs
ZSAqIHByaXYtPnZpZXcudGlsZS56b29tOwotCi0gICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9
IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQg
PSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsKLQotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShw
cml2LT5jb250ZW50c19jbGlwcGVyLCBtb2RlbF93aWR0aCwgbW9kZWxfaGVpZ2h0KTsKLQotICAg
IGludCB2cm93cyA9IGNlaWwoKGZsb2F0KXByaXYtPnZpZXcuaCAvIChmbG9hdCl0aCkgKyAxOwot
ICAgIGludCB2Y29scyA9IGNlaWwoKGZsb2F0KXByaXYtPnZpZXcudyAvIChmbG9hdCl0dykgKyAx
OwotICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAt
IGN4KSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSAtIGN5KSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgYnggPSBuZXdfeCAlIHR3
OwotICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwotICAgIHVuc2lnbmVkIGxvbmcgYmFz
ZV9yb3cgPSAtbmV3X3kgLyB0aDsKLSAgICB1bnNpZ25lZCBsb25nIGJhc2VfY29sID0gLW5ld194
IC8gdHc7Ci0KLSAgICBpZiAoYmFzZV9yb3cgIT0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgfHwgYmFz
ZV9jb2wgIT0gcHJpdi0+bW9kZWwuYmFzZS5jb2wpIHsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5yb3cgPSBiYXNlX3JvdzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSBiYXNlX2Nv
bDsKLSAgICAgICAgcmVjYWxjID0gRUlOQV9UUlVFOwotICAgIH0KLQotICAgIGlmICh2cm93cyA+
IHByaXYtPnZpZXcucm93cyB8fCB2Y29scyA+IHByaXYtPnZpZXcuY29scykKLSAgICAgICAgcmVj
YWxjID0gRUlOQV9UUlVFOwotCi0gICAgaWYgKHJlY2FsYykgewotICAgICAgICBFdmFzX0Nvb3Jk
IHcsIGg7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCBOVUxMLCBOVUxMLCAm
dywgJmgpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVy
cyhwcml2LCB3LCBoLCB0dywgdGgpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
ZmlsbF9yZW5kZXJlcnMocHJpdik7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91
cGRhdGVzX3Byb2Nlc3MocHJpdik7Ci0gICAgfQotCi0gICAgRXZhc19Db29yZCBiYXNlX294ID0g
YnggKyBwcml2LT52aWV3Lng7Ci0gICAgRXZhc19Db29yZCBveSA9IGJ5ICsgcHJpdi0+dmlldy55
OwotCi0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAg
ICAgICAgICAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCi0gICAgICAgICAgICAgICAgICAg
ICBuZXdfeSArIHByaXYtPnZpZXcueSk7Ci0KLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwot
ICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0KLSAgICBmb3IgKDsgaXRyIDwg
aXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAg
ICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwotCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVB
Q0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
bW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICB9
Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0K
LXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QgKm8s
IEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYpOwotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgRXZhc19Db29yZCBuZXdfeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54OwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueTsKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54OwotICAgIEV2YXNfQ29vcmQgYnkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAg
RXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQgdGggPSBw
cml2LT52aWV3LnRpbGUuaDsKLQotICAgIGlmICgtbmV3X3ggPiB3KSB7Ci0gICAgICAgIG5ld194
ID0gLXc7Ci0gICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5jb2wgPSAtbmV3X3ggLyB0dzsKLSAgICB9Ci0KLSAgICBpZiAoLW5ld195ID4gaCkgewotICAg
ICAgICBuZXdfeSA9IC1oOwotICAgICAgICBieSA9IG5ld195ICUgdGg7Ci0gICAgICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7Ci0gICAgfQotCi0gICAgaWYgKGJ4ID49IDAg
fHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUudykgewotICAgICAgICBieCA9IG5ld194ICUg
dHc7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHc7Ci0gICAgfQot
Ci0gICAgaWYgKGJ5ID49IDAgfHwgYnkgPD0gLTIgKiBwcml2LT52aWV3LnRpbGUuaCkgewotICAg
ICAgICBieSA9IG5ld195ICUgdGg7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5l
d195IC8gdGg7Ci0gICAgfQotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdfeDsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zm
c2V0Lm9sZC54ID0gbmV3X3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBuZXdfeTsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBieDsKLSAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnkgPSBieTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAg
ICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKLQotICAgIEV2YXNfQ29vcmQgb3kg
PSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAgRXZhc19Db29y
ZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotCi0g
ICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmll
dy5yb3dzOwotCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAgICAgIEV2
YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsK
LQotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAg
ICAgICAgICBveCArPSB0dzsKLSAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKLSAgICB9Ci19
Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9z
ZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCi17Ci0gICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRy
X2VuZDsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciAr
IHByaXYtPnZpZXcucm93czsKLSAgICBwcml2LT52aWV3LnRpbGUuem9vbV93ZWFrX3Ntb290aF9z
Y2FsZSA9IHNtb290aF9zY2FsZTsKLQotICAgIGZvciAoOyBpdHI8IGl0cl9lbmQ7IGl0cisrKSB7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KQotICAgICAgICAgICAgaWYgKGl0LT50aWxlKQotICAg
ICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9z
ZXQKLSAgICAgICAgICAgICAgICAgICAgKGl0LCBzbW9vdGhfc2NhbGUpOwotICAgIH0KLX0KLQot
RWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShFdmFzX09iamVjdCAqbywg
Y29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLQotICAgIGlmIChwcml2LT5yZW5kZXIuZGlzYWJs
ZWQpCi0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgcmV0dXJuIGV3a190aWxlX21h
dHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCB1cGRhdGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwotfQotCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0ICpv
LCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRh
dGEpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgcHJpdi0+
cHJvY2Vzcy5wcmVfY2IgPSBjYjsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9kYXRhID0gKHZvaWQq
KWRhdGE7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNz
X3Bvc3Rfc2V0KEV2YXNfT2JqZWN0ICpvLCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCB2b2lkICpw
cmVfZGF0YSwgRXZhc19PYmplY3QgKm8pLCBjb25zdCB2b2lkICpkYXRhKQotewotICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYiA9
IGNiOwotICAgIHByaXYtPnByb2Nlc3MucG9zdF9kYXRhID0gKHZvaWQqKWRhdGE7Ci19Ci0KLXZv
aWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV2YXNfT2JqZWN0ICpv
KQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7Ci19Ci0KLXZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19jbGVhcihFdmFzX09iamVjdCAqbykKLXsKLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQotICAgIGV3a190aWxlX21hdHJpeF91
cGRhdGVzX2NsZWFyKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHdp
ZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKLQotICAgIGlmICh3aWR0aCA9PSBwcml2LT5tb2RlbC53aWR0aCAmJiBoZWlnaHQg
PT0gcHJpdi0+bW9kZWwuaGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5tb2Rl
bC53aWR0aCA9IHdpZHRoOwotICAgIHByaXYtPm1vZGVsLmhlaWdodCA9IGhlaWdodDsKLSAgICBw
cml2LT5jaGFuZ2VkLm1vZGVsID0gRUlOQV9UUlVFOwotCi0gICAgREJHKCJ3aWR0aCxoZWlnaHQ9
JWQsICVkIiwgd2lkdGgsIGhlaWdodCk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2No
YW5nZWQocHJpdik7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRf
dXBkYXRlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHZhbHVlKQotewotICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAgaWYgKHZhbHVlICE9IHByaXYtPnJl
bmRlci5kaXNhYmxlZCkKLSAgICAgICAgcHJpdi0+cmVuZGVyLmRpc2FibGVkID0gdmFsdWU7Ci19
Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QgKm8pCi17
Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlICp0dWMgPSBOVUxMOwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAw
OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNl
dC5vbGQueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSAwOwotICAgIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0g
MDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IDA7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5y
b3cgPSAwOwotICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKLSAgICBwcml2LT5tb2RlbC5j
dXIucm93cyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOwotICAgIHByaXYtPm1v
ZGVsLm9sZC5yb3dzID0gMDsKLSAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7Ci0K
LSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBwcmludGYoIlxuRkxVU0hFRCBCQUNLSU5HIFNU
T1JFLCBTVEFUVVMgQkVGT1JFIERFTEVUSU5HIFRJTEUgTUFUUklYOlxuIik7Ci0gICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcocHJpdik7Ci0jZW5kaWYKLQotICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7Ci0gICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwocHJpdik7Ci0gICAgdHVj
ID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsK
LSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIodHVjKTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUsIFNUQVRVUyBBRlRF
UiBSRUNSRUFUSU5HIFRJTEUgTUFUUklYOlxuIik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX21lbV9kYmcocHJpdik7Ci0jZW5kaWYKLX0KLQotRWluYV9Cb29sIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCi17
Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAg
RWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsKLSAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9J
bmZvICppbmZvOwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjOwotCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYt
PnZpZXcudGlsZS5oOwotICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncs
IHpvb20pOwotCi0gICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNlciwg
eCwgeSwgdywgaCwgdHcsIHRoKSkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBzZXR1cCBncmlk
IHNsaWNlciBmb3IgJWQsJWQrJWR4JWQgdGlsZT0lZHglZCIsCi0gICAgICAgICAgICB4LCB5LCB3
LCBoLCB0dywgdGgpOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICB3
aGlsZSAoZWluYV90aWxlX2dyaWRfc2xpY2VyX25leHQoJnNsaWNlciwgJmluZm8pKSB7Ci0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYyA9IGluZm8tPmNvbDsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgbG9uZyByID0gaW5mby0+cm93OwotICAgICAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKHByaXYsIGMsIHIsIHpvb20sIFBSRV9SRU5E
RVJfUFJJT1JJVFlfTE9XKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0KLSAg
ICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVjLCB4LCB5LCB3LCBo
LCB6b29tKTsKLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QgKm8s
IHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcm93LCBl
bmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wsIGksIGosIHcsIGg7Ci0gICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlICp0dWM7Ci0KLSAgICBJTkYoInByaXYtPm1vZGVsLmJhc2Uucm93ID0lbGQsIG49
JXUgcHJpdi0+dmlldy5yb3dzPSVsdSIsCi0gICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dywgbiwgcHJpdi0+dmlldy5yb3dzKTsKLSAgICBzdGFydF9yb3cgPSAobG9uZylwcml2LT5tb2Rl
bC5iYXNlLnJvdyAtIG47Ci0gICAgc3RhcnRfY29sID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5j
b2wgLSBuOwotICAgIGVuZF9yb3cgPSBNSU4ocHJpdi0+bW9kZWwuY3VyLnJvd3MgLSAxLAotICAg
ICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyBwcml2LT52aWV3LnJvd3MgKyBu
IC0gMSk7Ci0gICAgZW5kX2NvbCA9IE1JTihwcml2LT5tb2RlbC5jdXIuY29scyAtIDEsCi0gICAg
ICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYtPnZpZXcuY29scyArIG4g
LSAxKTsKLQotICAgIElORigic3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0X2NvbD0l
bHUsIGVuZF9jb2w9JWx1IiwKLSAgICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29s
LCBlbmRfY29sKTsKLQotICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncs
IHpvb20pOwotCi0gICAgZm9yIChpID0gc3RhcnRfcm93OyBpIDw9IGVuZF9yb3c7IGkrKykKLSAg
ICAgICAgZm9yIChqID0gc3RhcnRfY29sOyBqIDw9IGVuZF9jb2w7IGorKykKLSAgICAgICAgICAg
IGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJp
diwgaiwgaSwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cpKQotICAgICAgICAgICAgICAg
IGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKLQotc3RhcnRfcHJvY2Vzc2luZzoKLSAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwotCi0gICAg
dHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4
KTsKLSAgICBoID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09N
KHByaXYtPnZpZXcudGlsZS5oLCB6b29tKTsKLSAgICB3ID0gKGVuZF9jb2wgLSBzdGFydF9jb2wg
KyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsKLSAgICBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywKLSAgICAgICAgICAgIHN0YXJ0X2Nv
bCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKSwKLSAgICAgICAg
ICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCB6b29t
KSwgdywgaCwgem9vbSk7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpvKQotewot
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVxdWVzdF9jbGVhcihwcml2KTsKLQotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRf
Y2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3VubG9ja19hcmVhKHR1Yyk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHByaXYpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKLSAgICByZXR1cm4gX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIocHJpdik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42OGU3MDRlYTBi
MTI0NTc3NWY3NTkwM2VmZGU5M2M0OWJiZmE0OTg2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApAQCAtMCwwICsxLDE5
MjAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1z
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0
b3JlLmgiCisKKyNpbmNsdWRlICJld2tfdGlsZWRfbWF0cml4LmgiCisjaW5jbHVkZSAiZXdrX3Rp
bGVkX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgorI2luY2x1ZGUgPHN0
ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIElEWChjb2wsIHJvdywgcm93
c3BhbikgKGNvbCArIChyb3cgKiByb3dzcGFuKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YTsKK3R5cGVk
ZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW07Cit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVz
dDsKKworZW51bSBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSB7
CisgICAgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cgPSAwLCAvKio8IEFwcGVuZCB0aGUgcmVxdWVz
dCB0byB0aGUgbGlzdCAqLworICAgIFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCAgICAgLyoqPCBQ
cmVwZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0ICovCit9OwordHlwZWRlZiBlbnVtIF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHk7CisKK3N0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSB7CisgICAgRUlOQV9JTkxJU1Q7CisgICAgRXdrX1RpbGUgKnRpbGU7CisgICAg
c3RydWN0IHsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgIH0gZ2VvbWV0cnk7
CisgICAgRWluYV9Cb29sIHNtb290aF9zY2FsZTsKK307CisKK3N0cnVjdCBfRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0IHsKKyAgICBFSU5BX0lOTElTVDsKKyAgICB1
bnNpZ25lZCBsb25nIGNvbCwgcm93OworICAgIGZsb2F0IHpvb207Cit9OworCitzdHJ1Y3QgX0V3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgeworICAgIEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBw
ZWRfRGF0YSBiYXNlOworICAgIEV2YXNfT2JqZWN0ICpzZWxmOworICAgIEV2YXNfT2JqZWN0ICpj
b250ZW50c19jbGlwcGVyOworICAgIHN0cnVjdCB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqaXRl
bXM7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgbG9uZyBjb2xzLCBy
b3dzOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRXZhc19Db29yZCB3LCBoOworICAg
ICAgICAgICAgZmxvYXQgem9vbTsKKyAgICAgICAgICAgIEVpbmFfQm9vbCB6b29tX3dlYWtfc21v
b3RoX3NjYWxlOjE7CisgICAgICAgIH0gdGlsZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgRXZhc19Db29yZCB4LCB5OworICAgICAgICAg
ICAgfSBjdXIsIG9sZCwgYmFzZSwgem9vbV9jZW50ZXI7CisgICAgICAgIH0gb2Zmc2V0OworICAg
IH0gdmlldzsKKyAgICBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOworICAgIHN0cnVjdCB7CisgICAg
ICAgIEV3a19UaWxlX01hdHJpeCAqbWF0cml4OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICAgICAgfSBiYXNlOworICAgICAgICBzdHJ1
Y3QgeworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOworICAgICAgICB9IGN1
ciwgb2xkOworICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CisgICAgfSBtb2RlbDsK
KyAgICBzdHJ1Y3QgeworICAgICAgICBFaW5hX0Jvb2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1Rp
bGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKTsKKyAgICAgICAgdm9pZCAqZGF0YTsK
KyAgICAgICAgRWluYV9Jbmxpc3QgKnByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgICAgIEVjb3Jl
X0lkbGVyICppZGxlcjsKKyAgICAgICAgRWluYV9Cb29sIGRpc2FibGVkOworICAgICAgICBFaW5h
X0Jvb2wgc3VzcGVuZDoxOworICAgIH0gcmVuZGVyOworICAgIHN0cnVjdCB7CisgICAgICAgIHZv
aWQgKigqcHJlX2NiKSh2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbyk7CisgICAgICAgIHZvaWQg
KnByZV9kYXRhOworICAgICAgICB2b2lkICooKnBvc3RfY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnBy
ZV9kYXRhLCBFdmFzX09iamVjdCAqbyk7CisgICAgICAgIHZvaWQgKnBvc3RfZGF0YTsKKyAgICB9
IHByb2Nlc3M7CisgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9Cb29sIGFueToxOworICAgICAg
ICBFaW5hX0Jvb2wgcG9zOjE7CisgICAgICAgIEVpbmFfQm9vbCBzaXplOjE7CisgICAgICAgIEVp
bmFfQm9vbCBtb2RlbDoxOworICAgICAgICBFaW5hX0Jvb2wgb2Zmc2V0OjE7CisgICAgfSBjaGFu
Z2VkOworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIEVjb3JlX0V2ZW50X0hhbmRsZXIgKnNp
Z191c3I7CisjZW5kaWYKK307CisKK3N0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2Mg
PSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKK2ludCBfZXdrX3RpbGVkX2xvZ19kb20gPSAt
MTsKKworI2RlZmluZSBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvYmosIHB0ciwgLi4uKSAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHB0
ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihldmFzX29iamVj
dF9zbWFydF9kYXRhX2dldChvYmopKTsgXAorICAgIGlmICghcHRyKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDUklUSUNB
TCgibm8gcHJpdmF0ZSBkYXRhIGluIG9iaj0lcCIsIG9iaik7ICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIH0KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpOwor
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25z
dCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2KTsKKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikK
K3sKKyAgICB2b2lkICpkYXRhID0gMDsKKworICAgIC8qIERvIG5vdCBwcm9jZXNzIHVwZGF0ZXMu
IE5vdGUgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGdldCB1cGRhdGVzIHJlcXVlc3RzCisgICAgICog
aW4gdGhlIHF1ZXVlIGluIG9yZGVyIHRvIG5vdCBtaXNzIGFueSB1cGRhdGVzIGFmdGVyIHRoZSBy
ZW5kZXIgaXMKKyAgICAgKiByZXN1bWVkLgorICAgICAqLworICAgIGlmIChwcml2LT5yZW5kZXIu
c3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9nZXQocHJpdi0+c2VsZikpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKKyAgICAgICAgZGF0YSA9
IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEsIHByaXYtPnNlbGYp
OworCisgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2Vzcyhwcml2LT5tb2RlbC5tYXRy
aXgpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKKyAgICAgICAgcHJpdi0+cHJv
Y2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsK
K30KKworc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2godm9pZCAqZGF0
YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOworICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+
bW9kZWwubWF0cml4KTsKKworICAgIGlmICh0dWMpIHsKKyAgICAgICAgREJHKCJmbHVzaCB1bnVz
ZWQgdGlsZSBjYWNoZS4iKTsKKyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2godHVjKTsKKyAgICB9IGVsc2UKKyAgICAgICAgRVJSKCJubyBjYWNoZT8hIik7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworc3RhdGljIEV3a19UaWxlICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9uZXcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgdW5zaWduZWQgbG9u
ZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQoreworICAgIEV3a19UaWxlICp0
OworICAgIEV2YXMgKmV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChwcml2LT5zZWxmKTsKKyAg
ICBpZiAoIWV2YXMpIHsKKyAgICAgICAgQ1JJVElDQUwoImV2YXNfb2JqZWN0X2V2YXNfZ2V0IGZh
aWxlZCEiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdCA9IGV3a190aWxlX21h
dHJpeF90aWxlX25ldworICAgICAgICAocHJpdi0+bW9kZWwubWF0cml4LCBldmFzLCBjb2wsIHJv
dywgem9vbSk7CisKKyAgICBpZiAoIXQpIHsKKyAgICAgICAgQ1JJVElDQUwoImV3a190aWxlX21h
dHJpeF90aWxlX25ldyBmYWlsZWQhIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHJldHVybiB0OworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9tb3ZlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSkKK3sKKyAgICBpdC0+Z2VvbWV0cnkueCA9IHg7CisgICAgaXQtPmdlb21ldHJ5
LnkgPSB5OworCisgICAgaWYgKGl0LT50aWxlKQorICAgICAgICBldmFzX29iamVjdF9tb3ZlKGl0
LT50aWxlLT5pbWFnZSwgeCwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX3Jlc2l6ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZh
c19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgaXQtPmdlb21ldHJ5LncgPSB3OworICAg
IGl0LT5nZW9tZXRyeS5oID0gaDsKKworICAgIGlmIChpdC0+dGlsZSkgeworICAgICAgICBldmFz
X29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCB3LCBoKTsKKyAgICAgICAgZXZhc19vYmpl
Y3RfaW1hZ2VfZmlsbF9zZXQoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCB3LCBoKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZSAqdCwgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCit7CisgICAgaWYgKGl0LT50aWxlKQorICAgICAgICBD
UklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgMCEiLCBpdC0+dGlsZSk7Cisg
ICAgaXQtPnRpbGUgPSB0OworICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCBp
dC0+Z2VvbWV0cnkueCwgaXQtPmdlb21ldHJ5LnkpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShp
dC0+dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS53LCBpdC0+Z2VvbWV0cnkuaCk7CisgICAgZXZh
c19vYmplY3RfaW1hZ2VfZmlsbF9zZXQKKyAgICAgICAgKGl0LT50aWxlLT5pbWFnZSwgMCwgMCwg
aXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9z
bW9vdGhfc2NhbGVfc2V0KGl0LT50aWxlLT5pbWFnZSwgaXQtPnNtb290aF9zY2FsZSk7CisKKyAg
ICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KHQpKQorICAgICAgICBldmFzX29iamVjdF9zbWFy
dF9tZW1iZXJfYWRkKHQtPmltYWdlLCBwcml2LT5zZWxmKTsKKworICAgIGV3a190aWxlX3Nob3co
dCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3Nv
Y2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQsIGRvdWJsZSBsYXN0X3VzZWQpCit7CisgICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlICp0dWM7CisgICAgZXdrX3RpbGVfaGlkZShpdC0+dGlsZSk7CisgICAgaWYgKCFl
d2tfdGlsZV92aXNpYmxlX2dldChpdC0+dGlsZSkpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X21lbWJlcl9kZWwoaXQtPnRpbGUtPmltYWdlKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9w
dXQocHJpdi0+bW9kZWwubWF0cml4LCBpdC0+dGlsZSwgbGFzdF91c2VkKTsKKyAgICB0dWMgPSBl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisKKyAgICBpdC0+dGlsZSA9
IDA7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3Nv
Y2lhdGVfYWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWlu
YV9Jbmxpc3QgKml0OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0ZW07Cisg
ICAgaW50IGk7CisgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsK
KworICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgeworICAgICAgICBp
dCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goaXQs
IGl0ZW0pCisgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkKKyAgICAgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sIGxhc3RfdXNl
ZCk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpv
b20sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgcHJpb3JpdHkp
Cit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyOwor
CisgICAgciA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UmVxdWVzdCo+KG1hbGxvYyhzaXplb2YoKnIpKSk7CisgICAgaWYgKCFyKQorICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKKworICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BSSU9SSVRZ
X0hJR0gpCisgICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9p
bmxpc3RfcHJlcGVuZAorICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworICAgIGVsc2UKKyAgICAgICAgcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBlbmQKKyAgICAgICAgICAgIChw
cml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKwor
ICAgIHItPmNvbCA9IGNvbDsKKyAgICByLT5yb3cgPSByb3c7CisgICAgci0+em9vbSA9IHpvb207
CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0ICpyKQoreworICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWlu
YV9pbmxpc3RfcmVtb3ZlCisgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0
cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAgICBmcmVlKHIpOworfQorCitzdGF0aWMgaW5saW5l
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChjb25zdCBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIHJldHVybiBFSU5BX0lOTElTVF9DT05UQUlO
RVJfR0VUKAorICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywKKyAgICAg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKK30KKworc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVz
aChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0
ICoqcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgd2hpbGUgKCpw
bCkgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qg
KnI7CisgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2ZpcnN0KHByaXYpOworICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCAq
cGwpOworICAgICAgICBmcmVlKHIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJpdi0+cmVu
ZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgRWluYV9Jbmxpc3QgKml0ZXIgPSAqcGwsICp0
bXA7CisgICAgd2hpbGUgKGl0ZXIpIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
UHJlX1JlbmRlcl9SZXF1ZXN0ICpyID0KKyAgICAgICAgICAgIEVJTkFfSU5MSVNUX0NPTlRBSU5F
Ul9HRVQoCisgICAgICAgICAgICAgICAgaXRlciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0KTsKKyAgICAgICAgdG1wID0gaXRlci0+bmV4dDsKKyAgICAgICAgKnBs
ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwbCwgaXRlcik7CisgICAgICAgIGl0ZXIgPSB0bXA7Cisg
ICAgICAgIGZyZWUocik7CisgICAgfQorfQorCisvKiBhc3N1bWVzIHByaXYtPnByb2Nlc3MucHJl
X2NiIHdhcyBjYWxsZWQgaWYgcmVxdWlyZWQhICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
UHJlX1JlbmRlcl9SZXF1ZXN0ICpyZXE7CisgICAgRWluYV9SZWN0YW5nbGUgYXJlYTsKKyAgICBF
d2tfVGlsZV9NYXRyaXggKnRtID0gcHJpdi0+bW9kZWwubWF0cml4OworICAgIEV3a19UaWxlICp0
OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIHVuc2lnbmVkIGxvbmcgY29s
LCByb3c7CisgICAgZmxvYXQgem9vbTsKKyAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9v
cF90aW1lX2dldCgpOworCisgICAgcmVxID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKKyAgICBpZiAoIXJlcSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29sID0gcmVxLT5jb2w7CisgICAgcm93ID0gcmVxLT5yb3c7CisgICAgem9vbSA9
IHJlcS0+em9vbTsKKworICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMo
dG0sIGNvbCwgcm93LCB6b29tKSkgeworICAgICAgICBEQkcoIm5vIHByZS1yZW5kZXIgcmVxdWly
ZWQgZm9yIHRpbGUgJWx1LCVsdSBAICVmLiIsIGNvbCwgcm93LCB6b29tKTsKKyAgICAgICAgZ290
byBlbmQ7CisgICAgfQorCisgICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25l
dyhwcml2LCBjb2wsIHJvdywgem9vbSk7CisgICAgaWYgKCF0KQorICAgICAgICBnb3RvIGVuZDsK
KworICAgIGFyZWEueCA9IDA7CisgICAgYXJlYS55ID0gMDsKKyAgICBhcmVhLncgPSBwcml2LT52
aWV3LnRpbGUudzsKKyAgICBhcmVhLmggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIHByaXYt
PnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0YSwgdCwgJmFyZWEpOworICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCgKKyAgICAgICAgdC0+aW1hZ2UsCisgICAgICAgIGFyZWEu
eCwgYXJlYS55LCBhcmVhLncsIGFyZWEuaCk7CisgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBk
YXRlc19jbGVhcih0bSwgdCk7CisKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQodG0sIHQs
IGxhc3RfdXNlZCk7CisKK2VuZDoKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZXF1ZXN0X2RlbChwcml2LCByZXEpOworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godHVjKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiKHZvaWQgKmRhdGEpCit7CisgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqPihkYXRhKTsKKworICAgIGlmIChwcml2LT5wcm9jZXNzLnBy
ZV9jYikKKyAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3Mu
cHJlX2RhdGEsIHByaXYtPnNlbGYpOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShwcml2KTsKKworICAgIGlmIChwcml2LT5w
cm9jZXNzLnBvc3RfY2IpCisgICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9j
ZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CisKKyAgICBpZiAoIXByaXYtPnJlbmRl
ci5wcmVfcmVuZGVyX3JlcXVlc3RzKSB7CisgICAgICAgIHByaXYtPnJlbmRlci5pZGxlciA9IDA7
CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIHJldHVybiBFSU5BX1RS
VUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9wcm9jZXNzX2lkbGVyX3N0b3AoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikK
K3sKKyAgICBpZiAoIXByaXYtPnJlbmRlci5pZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZWNvcmVfaWRsZXJfZGVsKHByaXYtPnJlbmRlci5pZGxlcik7CisgICAgcHJpdi0+cmVuZGVyLmlk
bGVyID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdikKK3sKKyAgICBpZiAocHJpdi0+cmVuZGVyLmlkbGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gZWNvcmVfaWRsZXJfYWRkKAorICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiLCBwcml2KTsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBpZiAocHJpdi0+cmVuZGVy
LnN1c3BlbmQpCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBwcml2LT5yZW5kZXIu
c3VzcGVuZCA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9w
cm9jZXNzX2lkbGVyX3N0b3AocHJpdik7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlmICghcHJpdi0+cmVuZGVy
LnN1c3BlbmQpCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBwcml2LT5yZW5kZXIu
c3VzcGVuZCA9IEVJTkFfRkFMU0U7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmls
bF9yZW5kZXJlcnMocHJpdik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJv
Y2Vzc19pZGxlcl9zdGFydChwcml2KTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0
YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqaXQsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKK3sKKyAg
ICB1bnNpZ25lZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBjb2w7CisgICAg
dW5zaWduZWQgbG9uZyBtX3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OworICAgIGRv
dWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisKKyAgICBpZiAobV9jb2wg
Pj0gcHJpdi0+bW9kZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJpdi0+bW9kZWwuY3VyLnJvd3Mp
IHsKKyAgICAgICAgaWYgKGl0LT50aWxlKQorICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBFd2tfVGlsZSAqdDsKKyAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYt
PnZpZXcudGlsZS56b29tOworCisgICAgICAgIGlmIChpdC0+dGlsZSkgeworICAgICAgICAgICAg
RXdrX1RpbGUgKm9sZCA9IGl0LT50aWxlOworICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1f
cm93IHx8IG9sZC0+Y29sICE9IG1fY29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQorICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQs
IGxhc3RfdXNlZCk7CisgICAgICAgICAgICBlbHNlIGlmIChvbGQtPnJvdyA9PSBtX3JvdyAmJiBv
bGQtPmNvbCA9PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0gem9vbSkKKyAgICAgICAgICAgICAgICBn
b3RvIGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOworCisgICAg
ICAgIGlmICghdCkgeworICAgICAgICAgICAgLyogTk9URTogaXQgbmV2ZXIgcmV0dXJucyAwIGlm
IGl0LT50aWxlIHdhcyBzZXQhICovCisgICAgICAgICAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAg
ICAgICAgICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgMCEiLCBp
dC0+dGlsZSk7CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShwcml2LCBpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8K
KyAgICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKKyAgICAgICAgICAgICAg
ICB0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jv
dywgem9vbSk7CisgICAgICAgICAgICAgICAgaWYgKCF0KQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHQgIT0gaXQtPnRpbGUpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKKyAg
ICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHBy
aXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXQsIGxhc3RfdXNlZCk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOworICAgICAgICB9CisKKyAgICAgIGVu
ZDoKKworICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIHJldHVybiBFSU5B
X1RSVUU7Cit9CisKK3N0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdiwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQoreworICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRo
OworCisgICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7CisKKyAgICBpdCA9IHN0YXRpY19jYXN0
PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qPihtYWxsb2Moc2l6ZW9mKCppdCkpKTsKKyAg
ICBpZiAoIWl0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxl
Lnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICB4ID0gcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ICsgcHJpdi0+dmlldy54ICsgdHcgICpjb2w7CisgICAgeSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueSArIHRoICAqcm93OworCisgICAgaXQtPnRpbGUg
PSAwOworCisgICAgaXQtPnNtb290aF9zY2FsZSA9IHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtf
c21vb3RoX3NjYWxlOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IHgsIHkpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcs
IHRoKTsKKyAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwg
aXQsIGNvbCwgcm93KSkgeworICAgICAgICBmcmVlKGl0KTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgcmV0dXJuIGl0OworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCit7CisgICAgaWYgKGl0LT50aWxlKSB7Cisg
ICAgICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3Rf
dXNlZCk7CisgICAgfQorCisgICAgZnJlZShpdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSAqaXQsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit7CisgICAgaWYgKGl0LT5z
bW9vdGhfc2NhbGUgPT0gc21vb3RoX3NjYWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aXQtPnRpbGUpCisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXQt
PnRpbGUtPmltYWdlLCBzbW9vdGhfc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3sKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5hbnkpCisgICAgICAgIHJldHVybjsK
KyAgICBldmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHByaXYtPnNlbGYpOworICAgIHByaXYtPmNo
YW5nZWQuYW55ID0gRUlOQV9UUlVFOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdiwgRWluYV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIEVp
bmFfSW5saXN0ICpuOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgaWYgKCFjb3VudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbiA9ICgqcF9yb3cpLT5sYXN0OworCisgICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSAqaXQ7CisgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChuLCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgbiA9IG4tPnByZXY7CisgICAgICAgICpw
X3JvdyA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcF9yb3csIEVJTkFfSU5MSVNUX0dFVChpdCkpOwor
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAg
IH0KK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19j
b2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxp
c3QgKipwX3JvdywgdW5zaWduZWQgaW50IGJhc2VfY29sLCB1bnNpZ25lZCBpbnQgY291bnQpCit7
CisgICAgdW5zaWduZWQgaW50IGksIHIgPSBwX3JvdyAtIHByaXYtPnZpZXcuaXRlbXM7CisKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYmFzZV9jb2wrKykgeworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKworICAgICAgICBpdCA9IF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2NvbCwgcik7CisgICAgICAgIGlmICgh
aXQpIHsKKyAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRkIGNvbHVtbiAldSBvZiAl
dSBpbiByb3cgJXUuIiwgaSwgY291bnQsIHIpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHBfcm93LCBpKTsKKyAgICAgICAgICAg
IHJldHVybiBFSU5BX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgKnBfcm93ID0gZWluYV9p
bmxpc3RfYXBwZW5kKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CisgICAgfQorICAgIHJl
dHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3Jvd19kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9J
bmxpc3QgKnJvdykKK3sKKyAgICB3aGlsZSAocm93KSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9H
RVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgcm93ID0gcm93
LT5uZXh0OworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwg
aXQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWlu
YV9Jbmxpc3QgKipzdGFydCwgRWluYV9Jbmxpc3QgKiplbmQpCit7CisgICAgZm9yICg7IHN0YXJ0
IDwgZW5kOyBzdGFydCsrKSB7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3Jvd19kZWwocHJpdiwgKnN0YXJ0KTsKKyAgICAgICAgKnN0YXJ0ID0gMDsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICoq
c3RhcnQ7CisgICAgRWluYV9Jbmxpc3QgKiplbmQ7CisKKyAgICBzdGFydCA9IHByaXYtPnZpZXcu
aXRlbXM7CisgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKKyAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFy
dCwgZW5kKTsKKworICAgIGZyZWUocHJpdi0+dmlldy5pdGVtcyk7CisgICAgcHJpdi0+dmlldy5p
dGVtcyA9IDA7CisgICAgcHJpdi0+dmlldy5jb2xzID0gMDsKKyAgICBwcml2LT52aWV3LnJvd3Mg
PSAwOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyKHZv
aWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSkKK3sKKyAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOworCisgICAgSU5GKCJUT0RPICVwICh2aXNp
YmxlPyAlZCkgWyVsdSwlbHVdICVkLCVkICsgJWR4JWQiLAorICAgICAgICB0LCB0LT52aXNpYmxl
LCB0LT5jb2wsIHQtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CisK
KyAgICBpZiAoIXQtPnZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT52
aWV3LnRpbGUudyAhPSB0LT53IHx8IHByaXYtPnZpZXcudGlsZS5oICE9IHQtPmgpCisgICAgICAg
IHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24ndCBldmVuIGZsYWcgYXMgZGly
dHkhCisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5yZW5kZXIuY2IpOwor
ICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0LCBhcmVhKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHQt
PmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRl
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqdHVjKQoreworICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgpIHsKKyAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHByaXYpOworCisgICAgICAgIHBy
aXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5z
aXplID0gRUlOQV9UUlVFOworCisgICAgICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1v
ZGVsLm1hdHJpeCk7CisgICAgfQorCisgICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVf
bWF0cml4X25ldyh0dWMsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93
cywgcHJpdi0+Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyLCBwcml2KTsK
K30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9k
ZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICptZW1iZXIpCit7CisgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVy
KQorICAgICAgICByZXR1cm47CisgICAgZXZhc19vYmplY3RfY2xpcF91bnNldChtZW1iZXIpOwor
ICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+Y29udGVudHNfY2xpcHBlcikp
CisgICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkKEV2
YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQoreworICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKG8sIHByaXYpOworICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29u
dGVudHNfY2xpcHBlcik7CisgICAgaWYgKGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KG8pKQorICAg
ICAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworfQorCisjaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
bWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIHN0YXRp
YyBpbnQgcnVuID0gMDsKKworICAgIHJ1bisrOworCisgICAgcHJpbnRmKCJcbi0tLSBCRUdJTiBE
RUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0tXG4iCisgICAgICAgICAgICJ0
PSUwLjJmLCBvYmo9JXAsIHByaXY9JXAsIHZpZXcuaXRlbXM9JXAsIG1hdHJpeD0lcFxuIiwKKyAg
ICAgICAgICAgcnVuLCBlY29yZV9sb29wX3RpbWVfZ2V0KCksCisgICAgICAgICAgIHByaXYtPnNl
bGYsIHByaXYsIHByaXYtPnZpZXcuaXRlbXMsIHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBl
d2tfdGlsZV9tYXRyaXhfZGJnKHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfYWNj
b3VudGluZ19kYmcoKTsKKworICAgIHByaW50ZigiLS0tIEVORCBERUJVRyBUSUxFRCBCQUNLSU5H
IFNUT1JFIE1FTU9SWSBbJWRdIC0tXG5cbiIsIHJ1bik7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCAqZGF0YSwgaW50IHR5cGUsIHZv
aWQgKmV2ZW50KQoreworICAgIEVjb3JlX0V2ZW50X1NpZ25hbF9Vc2VyICpzaWcgPSAoRWNvcmVf
RXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSopZGF0YTsKKworICAgIGlm
IChzaWctPm51bWJlciA9PSAyKSB7CisgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
OworICAgICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5t
b2RlbC5tYXRyaXgpOworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0
dWMpOworICAgIH0KKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhwcml2
KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2KTsKKyAgICByZXR1
cm4gRUlOQV9UUlVFOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCit7CisgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdjsKKworICAgIERCRygibz0lcCIsIG8pOworCisgICAgcHJpdiA9
IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihjYWxsb2MoMSwgc2l6
ZW9mKCpwcml2KSkpOworICAgIGlmICghcHJpdikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJp
di0+c2VsZiA9IG87CisgICAgcHJpdi0+dmlldy50aWxlLnpvb20gPSAxLjA7CisgICAgcHJpdi0+
dmlldy50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKKyAgICBwcml2LT52aWV3LnRpbGUuaCA9IERF
RkFVTFRfVElMRV9IOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gMDsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSAw
OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7CisKKyAgICBw
cml2LT5tb2RlbC5iYXNlLmNvbCA9IDA7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAwOwor
ICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKKyAgICBwcml2LT5tb2RlbC5jdXIucm93cyA9
IDE7CisgICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOworICAgIHByaXYtPm1vZGVsLm9sZC5y
b3dzID0gMDsKKyAgICBwcml2LT5tb2RlbC53aWR0aCA9IDA7CisgICAgcHJpdi0+bW9kZWwuaGVp
Z2h0ID0gMDsKKyAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9IEVJTkFfRkFMU0U7CisgICAgcHJp
di0+Y3NwYWNlID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4OyAvLyBUT0RPOiBkZXRlY3QgaXQu
CisKKyAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChvLCBwcml2KTsKKyAgICBfcGFyZW50
X3NjLmFkZChvKTsKKworICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIgPSBldmFzX29iamVjdF9y
ZWN0YW5nbGVfYWRkKAorICAgICAgICBldmFzX29iamVjdF9ldmFzX2dldChvKSk7CisgICAgZXZh
c19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCAwLCAwKTsKKyAgICBldmFzX29i
amVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7CisgICAgZXZhc19vYmpl
Y3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7
CisgICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIG8pOworCisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUocHJpdiwgMCk7
CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAsIDApOworICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2Jq
ZWN0X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIHByaXYtPmJhc2UuY2xpcHBlcik7
CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZl
bnRfaGFuZGxlcl9hZGQKKyAgICAgICAgKEVDT1JFX0VWRU5UX1NJR05BTF9VU0VSLCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc2lnX3VzciwgcHJpdik7CisjZW5kaWYKK30KKworc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbChFdmFzX09iamVjdCAqbykKK3sK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBEQkcoIm89JXAiLCBv
KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKworICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmx1c2gocHJpdik7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChwcml2KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MK
KyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2KTsKKyAgICBpZiAocHJp
di0+c2lnX3VzcikKKyAgICAgICAgcHJpdi0+c2lnX3VzciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJf
ZGVsKHByaXYtPnNpZ191c3IpOworI2VuZGlmCisKKyAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShw
cml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJp
di0+Y29udGVudHNfY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfZGVsKHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIpOworCisgICAgX3BhcmVudF9zYy5kZWwobyk7CisKKyNpZmRlZiBERUJVR19NRU1f
TEVBS1MKKyAgICBwcmludGYoIlxuSU1QT1JUQU5UOiBUSUxFRCBCQUNLSU5HIFNUT1JFIERFTEVU
RUQgKG1heSBiZSByZWFsIGxlYWtzKVxuIik7CisgICAgZXdrX3RpbGVfYWNjb3VudGluZ19kYmco
KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21h
cnRfbW92ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgREJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIG8sIHgsIHkpOworCisgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3MpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT52aWV3LnggPT0geCAmJiBwcml2LT52aWV3
LnkgPT0geSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5B
X1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemUoRXZhc19P
YmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIERCRygibz0lcCwg
bmV3IHNpemU6ICVkeCVkIiwgbywgdywgaCk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2KTsKKworICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChwcml2LT52aWV3LncgPT0gdyAmJiBwcml2LT52aWV3LmggPT0gaCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgRXZhc19D
b29yZCB0dywgRXZhc19Db29yZCB0aCkKK3sKKyAgICBsb25nIGNvbHMsIHJvd3MsIG9sZF9yb3dz
LCBvbGRfY29sczsKKyAgICBJTkYoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYs
IHcsIGgpOworCisgICAgY29scyA9IDEgKyAoaW50KWNlaWwoKGZsb2F0KXcgLyAoZmxvYXQpdHcp
OworICAgIHJvd3MgPSAxICsgKGludCljZWlsKChmbG9hdCloIC8gKGZsb2F0KXRoKTsKKworICAg
IElORigibz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVsZCwgcm93czogJWxkLCB3YXMgJWxkLCAl
bGQiLAorICAgICAgICBwcml2LT5zZWxmLCBjb2xzLCByb3dzLCBwcml2LT52aWV3LmNvbHMsIHBy
aXYtPnZpZXcucm93cyk7CisKKyAgICBpZiAocHJpdi0+dmlldy5jb2xzID09IGNvbHMgJiYgcHJp
di0+dmlldy5yb3dzID09IHJvd3MpCisgICAgICAgIHJldHVybjsKKworICAgIG9sZF9jb2xzID0g
cHJpdi0+dmlldy5jb2xzOworICAgIG9sZF9yb3dzID0gcHJpdi0+dmlldy5yb3dzOworCisgICAg
aWYgKHJvd3MgPCBvbGRfcm93cykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVu
ZDsKKyAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKKyAgICAgICAgZW5k
ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFydCwgZW5kKTsKKyAgICB9CisK
KyAgICB2b2lkKiBuZXdJdGVtcyA9IHJlYWxsb2MocHJpdi0+dmlldy5pdGVtcywgc2l6ZW9mKEVp
bmFfSW5saXN0KikgKiAoaW50KXJvd3MpOworICAgIGlmICghbmV3SXRlbXMpCisgICAgICAgIHJl
dHVybjsKKworICAgIHByaXYtPnZpZXcuaXRlbXMgPSBzdGF0aWNfY2FzdDxFaW5hX0lubGlzdCoq
PihuZXdJdGVtcyk7CisgICAgcHJpdi0+dmlldy5yb3dzID0gcm93czsKKyAgICBwcml2LT52aWV3
LmNvbHMgPSBjb2xzOworICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKKyAgICAgICAgRWluYV9J
bmxpc3QgKipzdGFydCwgKiplbmQ7CisgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyAr
IG9sZF9yb3dzOworICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKKyAgICAg
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7CisgICAgICAgICAgICBFaW5hX0Jvb2wg
cjsKKyAgICAgICAgICAgICpzdGFydCA9IDA7CisgICAgICAgICAgICByID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkCisgICAgICAgICAgICAgICAgKHByaXYsIHN0
YXJ0LCAwLCBjb2xzKTsKKyAgICAgICAgICAgIGlmICghcikgeworICAgICAgICAgICAgICAgIENS
SVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGNvbHVtbnMiLCBjb2xzKTsKKyAgICAgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbAorICAg
ICAgICAgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzLCBzdGFy
dCk7CisgICAgICAgICAgICAgICAgcHJpdi0+dmlldy5yb3dzID0gb2xkX3Jvd3M7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKGNvbHMgIT0gb2xkX2NvbHMpIHsKKyAgICAgICAgRWluYV9Jbmxpc3QgKipzdGFydCwgKipl
bmQ7CisgICAgICAgIGludCB0b2RvID0gY29scyAtIG9sZF9jb2xzOworICAgICAgICBzdGFydCA9
IHByaXYtPnZpZXcuaXRlbXM7CisgICAgICAgIGVuZCA9IHN0YXJ0ICsgc3RkOjptaW4ob2xkX3Jv
d3MsIHJvd3MpOworICAgICAgICBpZiAodG9kbyA+IDApIHsKKyAgICAgICAgICAgIGZvciAoOyBz
dGFydCA8IGVuZDsgc3RhcnQrKykgeworICAgICAgICAgICAgICAgIEVpbmFfQm9vbCByOworICAg
ICAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9h
ZGQKKyAgICAgICAgICAgICAgICAgICAgKHByaXYsIHN0YXJ0LCBvbGRfY29scywgdG9kbyk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJm
YWlsZWQgdG8gYWxsb2NhdGUgJWQgY29sdW1ucyEiLCB0b2RvKTsKKworICAgICAgICAgICAgICAg
ICAgICBmb3IgKHN0YXJ0LS07IHN0YXJ0ID49IHByaXYtPnZpZXcuaXRlbXM7IHN0YXJ0LS0pCisg
ICAgICAgICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xz
X2VuZF9kZWwocHJpdiwgc3RhcnQsIHRvZG8pOworICAgICAgICAgICAgICAgICAgICBpZiAocm93
cyA+IG9sZF9yb3dzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHByaXYtPnZp
ZXcuaXRlbXMgKyBvbGRfcm93czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHByaXYt
PnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHN0YXJ0
IDwgZW5kOyBzdGFydCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICh0b2RvIDwgMCkgewor
ICAgICAgICAgICAgdG9kbyA9IC10b2RvOworICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5k
OyBzdGFydCsrKQorICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7Cit9CisKK3N0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29v
cmQgaCkKK3sKKyAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+YmFzZS5jbGlwcGVyLCB3LCBo
KTsKKworICAgIHByaXYtPnZpZXcudyA9IHc7CisgICAgcHJpdi0+dmlldy5oID0gaDsKKworICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKAorICAgICAgICBwcml2
LCB3LCBoLCBwcml2LT52aWV3LnRpbGUudywgcHJpdi0+dmlldy50aWxlLmgpOworfQorCisvLyBU
T0RPOiByZW1vdmUgbWUgbGF0ZXIuCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCit7CisgICAgRWluYV9Jbmxpc3QgKipzdGFydCwgKiplbmQ7CisgICAgcHJpbnRmKCJ0aWxl
cz0lMmxkLCUybGQgIG1vZGVsPSUybGQsJTJsZCBbJWR4JWRdIGJhc2U9JSszbGQsJSs0bGQgb2Zm
c2V0PSUrNGQsJSs0ZCBvbGQ9JSs0ZCwlKzRkIGJhc2U9JSszZCwlKzNkXG4iLAorICAgICAgICAg
ICBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cywKKyAgICAgICAgICAgcHJpdi0+bW9k
ZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2Rl
bC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0LAorICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbCwgcHJpdi0+bW9kZWwuYmFzZS5yb3csCisgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSwKKyAgICAgICAgICAgcHJpdi0+dmlldy5v
ZmZzZXQub2xkLngsIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55LAorICAgICAgICAgICBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSk7CisKKyAgICBzdGFy
dCA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYt
PnZpZXcucm93czsKKyAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAg
Y29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisKKyAgICAgICAgRUlOQV9J
TkxJU1RfRk9SRUFDSCgqc3RhcnQsIGl0KSB7CisgICAgICAgICAgICBwcmludGYoIiAlKzRkLCUr
NGQgIiwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9tZXRyeS55KTsKKworICAgICAgICAgICAgaWYg
KCFpdC0+dGlsZSkKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgICAgICAgICAgIDsiKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIiU4cCAlbHUsJWx1OyIsIGl0
LT50aWxlLCBpdC0+dGlsZS0+Y29sLCBpdC0+dGlsZS0+cm93KTsKKyAgICAgICAgfQorICAgICAg
ICBwcmludGYoIlxuIik7CisgICAgfQorICAgIHByaW50ZigiLS0tXG4iKTsKK30KKworLyoqCisg
KiBAaW50ZXJuYWwKKyAqIE1vdmUgdG9wIHJvdyBkb3duIGFzIGxhc3QuCisgKgorICogVGhlIGZp
bmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2FtZSwgYnV0IGxvZ2ljYWxseSB0aGUgdG9wIHRo
YXQKKyAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgYm90dG9tIGFuZCBmaWxsZWQgd2l0
aCBuZXcgbW9kZWwgaXRlbXMuCisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291
bnQgaXMgc21hbGxlciB0aGFuIEBjCisgKiBwcml2LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25l
IGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJp
Z2dlciBmdWxsIHJlZmlsbC4KKyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1l
cyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAg
ICB1bnNpZ25lZCBpbnQgbGFzdF9yb3cgPSBwcml2LT52aWV3LnJvd3MgLSAxOworICAgIEV2YXNf
Q29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+
dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSArIGNvdW50ICogdGg7CisgICAgRXZhc19Db29yZCBveSA9IHkgKyAobGFzdF9yb3cgLSBj
b3VudCArIDEpICogdGggKyBvZmZfeTsKKyAgICBFaW5hX0lubGlzdCAqKml0cl9zdGFydCwgKipp
dHJfZW5kOworCisgICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5k
ID0gaXRyX3N0YXJ0ICsgbGFzdF9yb3c7CisKKyAgICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0t
KSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqaXRyOworICAgICAgICBFaW5hX0lubGlzdCAqdG1w
ID0gKml0cl9zdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7
CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54Owor
ICAgICAgICBpbnQgYyA9IDA7CisKKyAgICAgICAgZm9yIChpdHIgPSBpdHJfc3RhcnQ7IGl0ciA8
IGl0cl9lbmQ7IGl0cisrKQorICAgICAgICAgICAgKml0ciA9ICooaXRyICsgMSk7CisgICAgICAg
ICppdHIgPSB0bXA7CisKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3crKzsKKyAgICAgICAg
RUlOQV9JTkxJU1RfRk9SRUFDSCh0bXAsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgb3ggKz0gdHc7
CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0
LCBjLCBsYXN0X3Jvdyk7CisgICAgICAgICAgICBjKys7CisgICAgICAgIH0KKyAgICAgICAgb3kg
Kz0gdGg7CisgICAgfQorICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95OworfQor
CisvKioKKyAqIEBpbnRlcm5hbAorICogTW92ZSBib3R0b20gcm93IHVwIGFzIGZpcnN0LgorICoK
KyAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkg
dGhlIGJvdHRvbSB0aGF0CisgKiB3ZW50IG91dCBvZiBzY3JlZW4gaXMgbm93IGF0IHRvcCBhbmQg
ZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgorICoKKyAqIFRoaXMgaXMgd29ydGgganVzdCB3
aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBAYworICogcHJpdi0+dmlldy5yb3dzLCBhZnRl
ciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAorICogaXMgYmV0
dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCisgKgorICogQHBhcmFtIGNvdW50IHRoZSBudW1i
ZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBj
b3VudCkKK3sKKyAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZh
c19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgLSBjb3VudCAqIHRoOworICAgIEV2YXNfQ29vcmQgb3kg
PSB5ICsgb2ZmX3kgKyAoY291bnQgLSAxKSAqIHRoOworICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0
YXJ0LCAqKml0cl9lbmQ7CisKKyAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJp
di0+dmlldy5yb3dzIC0gMTsKKyAgICBpdHJfZW5kID0gcHJpdi0+dmlldy5pdGVtczsKKworICAg
IGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKyAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7
CisgICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0OworICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgICAgIGludCBjID0gMDsKKworICAgICAgICBm
b3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyID4gaXRyX2VuZDsgaXRyLS0pCisgICAgICAgICAgICAq
aXRyID0gKihpdHIgLSAxKTsKKyAgICAgICAgKml0ciA9IHRtcDsKKworICAgICAgICBwcml2LT5t
b2RlbC5iYXNlLnJvdy0tOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsK
KyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBv
eSk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIDApOworICAgICAgICAgICAgYysrOworICAg
ICAgICB9CisgICAgICAgIG95IC09IHRoOworICAgIH0KKyAgICBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnkgPSBvZmZfeTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIE1vdmUgbGVmdC1tb3N0
IChmaXJzdCkgY29sdW1uIHJpZ2h0IGFzIGxhc3QgKHJpZ2h0LW1vc3QpLgorICoKKyAqIFRoZSBm
aW5hbCByZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGZpcnN0
IGNvbCB0aGF0CisgKiB3ZW50IG91dCBvZiBzY3JlZW4gaXMgbm93IGF0IGxhc3QgYW5kIGZpbGxl
ZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBA
YSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKKyAqIHByaXYtPnZpZXcuY29scywgYWZ0ZXIgdGhh
dCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0
byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9m
IHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQp
Cit7CisgICAgdW5zaWduZWQgaW50IHIsIGxhc3RfY29sID0gcHJpdi0+dmlldy5jb2xzIC0gMTsK
KyAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZhc19Db29yZCB0
aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIEV2YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnggKyBjb3VudCAqIHR3OworICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS55OworICAgIEVpbmFfSW5saXN0ICoqaXRyOworICAgIEVpbmFf
SW5saXN0ICoqaXRyX2VuZDsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRy
X2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKyAgICByID0gMDsKKworICAgIHByaXYtPm1v
ZGVsLmJhc2UuY29sICs9IGNvdW50OworCisgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisr
LCByKyspIHsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyAobGFzdF9jb2wgLSBjb3VudCAr
IDEpICogdHcgKyBvZmZfeDsKKyAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAt
IGNvdW50ICsgMTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBv
eCArPSB0dykgeworICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7
CisgICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoKml0ciwgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3Rf
ZGVtb3RlKCppdHIsICppdHIpOworCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7CisgICAgICAgIH0KKyAgICAgICAgb3kg
Kz0gdGg7CisgICAgfQorCisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Cit9
CisKKy8qKgorICogQGludGVybmFsCisgKiBNb3ZlIHJpZ2h0LW1vc3QgKGxhc3QpIGNvbHVtbiBs
ZWZ0IGFzIGZpcnN0IChsZWZ0LW1vc3QpLgorICoKKyAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlz
dWFsbHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGxhc3QgY29sIHRoYXQKKyAqIHdlbnQg
b3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgZmlyc3QgYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBp
dGVtcy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVy
IHRoYW4gQGMKKyAqIHByaXYtPnZpZXcuY29scywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5n
IHRoZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVm
aWxsLgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0
aGUgcHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfd3JhcF9yaWdodChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIHVuc2lnbmVk
IGludCByOworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFz
X0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCBvZmZfeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50ICogdHc7CisgICAgRXZhc19Db29yZCBveSA9
IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoq
aXRyX2VuZDsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0
ciArIHByaXYtPnZpZXcucm93czsKKyAgICByID0gMDsKKworICAgIHByaXYtPm1vZGVsLmJhc2Uu
Y29sIC09IGNvdW50OworCisgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsK
KyAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyAoY291bnQgLSAxKSAqIHR3ICsgb2ZmX3g7Cisg
ICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gY291bnQgLSAxOworCisgICAgICAgIGZvciAoaSA9
IDA7IGkgPCBjb3VudDsgaSsrLCBjLS0sIG94IC09IHR3KSB7CisgICAgICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1Rf
Q09OVEFJTkVSX0dFVCgoKml0ciktPmxhc3QsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0p
OworICAgICAgICAgICAgKml0ciA9IGVpbmFfaW5saXN0X3Byb21vdGUoKml0ciwgKCppdHIpLT5s
YXN0KTsKKworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShp
dCwgb3gsIG95KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Zp
bGwocHJpdiwgaXQsIGMsIHIpOworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0K
KworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IG9mZl94OworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwX3gs
IGludCBzdGVwX3kpCit7CisgICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBF
dmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CisgICAgdW5zaWduZWQgaW50IHI7CisKKyAg
ICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7CisKKyAgICB0dyA9
IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBi
YXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICBveSA9IHkgKyBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnk7CisKKyAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOworICAg
IGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgciA9IDA7CisKKyAgICBwcml2
LT5tb2RlbC5iYXNlLmNvbCAtPSBzdGVwX3g7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgLT0g
c3RlcF95OworCisgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKKyAgICAg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV2YXNfQ29vcmQg
b3ggPSBiYXNlX294OworICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IDA7CisgICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIHIpOworICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIGMrKzsK
KyAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2Fw
cGx5KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5KQoreworICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRXZh
c19Db29yZCBiYXNlX294LCBveSwgdHcsIHRoOworCisgICAgZXZhc19vYmplY3RfbW92ZShwcml2
LT5iYXNlLmNsaXBwZXIsIHgsIHkpOworCisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAg
ICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgYmFzZV9veCA9IHggKyBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLng7CisgICAgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55Owor
CisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+
dmlldy5yb3dzOworICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgeworICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXZhc19Db29yZCBveCA9
IGJhc2Vfb3g7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpIHsKKyAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Cisg
ICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxh
dGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7Cisg
ICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5v
ZmZzZXQub2xkLng7CisgICAgRXZhc19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAg
aW50IHN0ZXBfeSwgc3RlcF94OworCisgICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQg
KCUrNGQsICUrNGQpIiwKKyAgICAgICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOworCisgICAgdHcgPSBwcml2LT52
aWV3LnRpbGUudzsKKyAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgbG9uZyBuZXdf
Y29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC8gdHc7CisgICAgc3RlcF94ID0gcHJpdi0+
bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOworICAgIGxvbmcgbmV3X3JvdyA9IC1wcml2LT52aWV3
Lm9mZnNldC5jdXIueSAvIHRoOworICAgIHN0ZXBfeSA9IHByaXYtPm1vZGVsLmJhc2Uucm93IC0g
bmV3X3JvdzsKKworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLng7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueTsKKyAgICBldmFzX29iamVjdF9tb3ZlKAorICAgICAgICBwcml2LT5jb250ZW50c19j
bGlwcGVyLAorICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwK
KyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2LT52aWV3LnkpOworCisgICAg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICogdHc7CisgICAgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0gc3RlcF95ICogdGg7CisKKyAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKKyAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwg
cHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQoreworICAgIEV2
YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC54OworICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55OworICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIGludCBz
dGVwX3ksIHN0ZXBfeDsKKworICAgIElORigibz0lcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRk
LCAlKzRkKSIsCisgICAgICAgIHByaXYtPnNlbGYsIGR4LCBkeSwgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKKworICAgIGlmICghZHggJiYgIWR5KQor
ICAgICAgICByZXR1cm47CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0g
cHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnggLyB0dzsKKyAgICBzdGVwX3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19j
b2w7CisgICAgbG9uZyBuZXdfcm93ID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Cisg
ICAgc3RlcF95ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuZXdfcm93OworCisgICAgcHJpdi0+
dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICBwcml2LT52
aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgIGV2YXNfb2Jq
ZWN0X21vdmUoCisgICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAorICAgICAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CisKKyAgICBpZiAoKHN0ZXBfeCA8IDAgJiYgc3Rl
cF94IDw9IC1wcml2LT52aWV3LmNvbHMpCisgICAgICAgIHx8IChzdGVwX3ggPiAwICYmIHN0ZXBf
eCA+PSBwcml2LT52aWV3LmNvbHMpCisgICAgICAgIHx8IChzdGVwX3kgPCAwICYmIHN0ZXBfeSA8
PSAtcHJpdi0+dmlldy5yb3dzKQorICAgICAgICB8fCAoc3RlcF95ID4gMCAmJiBzdGVwX3kgPj0g
cHJpdi0+dmlldy5yb3dzKSkgeworCisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAr
PSBkeCAtIHN0ZXBfeCAqIHR3OworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0g
ZHkgLSBzdGVwX3kgKiB0aDsKKworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yZWZpbGwKKyAgICAgICAgICAgIChwcml2LCBwcml2LT52aWV3LngsIHByaXYtPnZpZXcueSwg
c3RlcF94LCBzdGVwX3kpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ICs9IGR4OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBk
eTsKKworICAgIGlmIChzdGVwX3kgPCAwKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld193cmFwX3VwKHByaXYsIHgsIHksIC1zdGVwX3kpOworICAgIGVsc2UgaWYgKHN0ZXBf
eSA+IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihw
cml2LCB4LCB5LCBzdGVwX3kpOworCisgICAgaWYgKHN0ZXBfeCA8IDApCisgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChwcml2LCB4LCB5LCAtc3RlcF94KTsK
KyAgICBlbHNlIGlmIChzdGVwX3ggPiAwKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld193cmFwX3JpZ2h0KHByaXYsIHgsIHksIHN0ZXBfeCk7CisKKyAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7Cit9CisKK3N0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQor
eworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5
KTsKKyAgICBwcml2LT52aWV3LnggPSB4OworICAgIHByaXYtPnZpZXcueSA9IHk7CisgICAgZXZh
c19vYmplY3RfbW92ZSgKKyAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAg
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCisgICAgICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKK30KKworc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYpCit7CisgICAgRWluYV9Jbmxpc3QgKml0OworICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0ZW07CisgICAgaW50IGksIGo7CisKKyAgICBmb3IgKGkgPSAwOyBp
IDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKKyAgICAgICAgaXQgPSBwcml2LT52aWV3Lml0ZW1z
W2ldOworICAgICAgICBqID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRl
bSkKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwg
aXRlbSwgaisrLCBpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QgKm8pCit7CisgICAgRXZhc19Db29y
ZCB4LCB5LCB3LCBoOworCisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwg
JncsICZoKTsKKyAgICBEQkcoIm89JXAgYXQgJWQsJWQgKyAlZHglZCIsIG8sIHgsIHksIHcsIGgp
OworCisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBwcml2LT5j
aGFuZ2VkLmFueSA9IEVJTkFfRkFMU0U7CisKKyAgICBld2tfdGlsZV9tYXRyaXhfZnJlZXplKHBy
aXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHBy
aXYtPmNoYW5nZWQubW9kZWwpIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOwor
CisgICAgICAgIGNvbHMgPSBwcml2LT5tb2RlbC53aWR0aCAvIHByaXYtPnZpZXcudGlsZS53ICsg
MTsKKyAgICAgICAgcm93cyA9IHByaXYtPm1vZGVsLmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5o
ICsgMTsKKworICAgICAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IHByaXYtPm1vZGVsLmN1ci5j
b2xzOworICAgICAgICBwcml2LT5tb2RlbC5vbGQucm93cyA9IHByaXYtPm1vZGVsLmN1ci5yb3dz
OworICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scyA9IGNvbHM7CisgICAgICAgIHByaXYtPm1v
ZGVsLmN1ci5yb3dzID0gcm93czsKKyAgICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5jb2xzID4g
Y29scykKKyAgICAgICAgICAgIGNvbHMgPSBwcml2LT5tb2RlbC5vbGQuY29sczsKKyAgICAgICAg
aWYgKHByaXYtPm1vZGVsLm9sZC5yb3dzID4gcm93cykKKyAgICAgICAgICAgIHJvd3MgPSBwcml2
LT5tb2RlbC5vbGQucm93czsKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5t
b2RlbC5tYXRyaXgsIGNvbHMsIHJvd3MpOworICAgIH0KKworICAgIGlmIChwcml2LT5jaGFuZ2Vk
LnBvcyAmJiAocHJpdi0+dmlldy54ICE9IHggfHwgcHJpdi0+dmlldy55ICE9IHkpKSB7CisgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfcG9zKHByaXYsIHgs
IHkpOworICAgICAgICBwcml2LT5jaGFuZ2VkLnBvcyA9IEVJTkFfRkFMU0U7CisgICAgfQorICAg
IGlmIChwcml2LT5jaGFuZ2VkLm9mZnNldCkgeworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChwcml2LCB4LCB5KTsKKyAgICAgICAgcHJpdi0+
Y2hhbmdlZC5vZmZzZXQgPSBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIGlmIChwcml2LT5jaGFu
Z2VkLnNpemUpIHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZV9zaXplKHByaXYsIHcsIGgpOworICAgICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5B
X0ZBTFNFOworICAgIH0KKworICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+
Y2hhbmdlZC5tb2RlbCkgeworICAgICAgICBFaW5hX1JlY3RhbmdsZSByZWN0OworICAgICAgICBy
ZWN0LnggPSAwOworICAgICAgICByZWN0LnkgPSAwOworICAgICAgICByZWN0LncgPSBwcml2LT5t
b2RlbC53aWR0aDsKKyAgICAgICAgcmVjdC5oID0gcHJpdi0+bW9kZWwuaGVpZ2h0OworICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7CisgICAgICAg
IGV3a190aWxlX21hdHJpeF9yZXNpemUocHJpdi0+bW9kZWwubWF0cml4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyk7CisgICAgICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX0ZBTFNFOworICAgICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVu
dHNfY2xpcHBlciwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7CisgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNl
KHByaXYpOworCisgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgbWlzcyBhbnkgaW1wb3J0
YW50IHJlcGFpbnQgYnkKKyAgICAgICAgICogcmVwYWludGluZyB0aGUgd2hvbGUgdmlld3BvcnQg
Ki8KKyAgICAgICAgY29uc3QgRWluYV9SZWN0YW5nbGUgciA9CisgICAgICAgICAgICB7IDAsIDAs
IHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQgfTsKKyAgICAgICAgZXdrX3Rp
bGVfbWF0cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsICZyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS56b29tKTsKKyAgICB9CisKKyAgICBld2tf
dGlsZV9tYXRyaXhfdGhhdyhwcml2LT5tb2RlbC5tYXRyaXgpOworCisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKKworICAgIGlmIChwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnggPiAwCisgICAgICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA8
PSAtIHByaXYtPnZpZXcudGlsZS53CisgICAgICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSA+IDAKKyAgICAgICAgfHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55IDw9IC0gcHJpdi0+dmll
dy50aWxlLmgpCisgICAgICAgIEVSUigiaW5jb3JyZWN0IGJhc2Ugb2Zmc2V0ICUrNGQsJSs0ZCwg
dGlsZT0lZHglZCwgY3VyPSUrNGQsJSs0ZFxuIiwKKyAgICAgICAgICAgIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55LAorICAgICAgICAgICAgcHJpdi0+
dmlldy50aWxlLncsIHByaXYtPnZpZXcudGlsZS5oLAorICAgICAgICAgICAgcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKKworfQorCitFdmFzX09iamVj
dCAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKEV2YXMgKmUpCit7CisgICAgc3RhdGljIEV2
YXNfU21hcnQgKnNtYXJ0ID0gMDsKKworICAgIGlmIChfZXdrX3RpbGVkX2xvZ19kb20gPCAwKQor
ICAgICAgICBfZXdrX3RpbGVkX2xvZ19kb20gPSBlaW5hX2xvZ19kb21haW5fcmVnaXN0ZXIoIkV3
a19UaWxlZF9CYWNraW5nX1N0b3JlIiwgMCk7CisKKyAgICBpZiAoIXNtYXJ0KSB7CisgICAgICAg
IHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIHNjID0KKyAgICAgICAgICAgIEVWQVNfU01BUlRfQ0xB
U1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3a19UaWxlZF9CYWNraW5nX1N0b3JlIik7CisKKyAgICAg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9zZXQoJnNjKTsKKyAgICAgICAgX3Bh
cmVudF9zYyA9IHNjOworCisgICAgICAgIHNjLmFkZCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zbWFydF9hZGQ7CisgICAgICAgIHNjLmRlbCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9kZWw7CisgICAgICAgIHNjLnJlc2l6ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9yZXNpemU7CisgICAgICAgIHNjLm1vdmUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfbW92ZTsKKyAgICAgICAgc2MuY2FsY3VsYXRlID0gX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X2NhbGN1bGF0ZTsKKyAgICAgICAgc2MubWVtYmVyX2FkZCA9IF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkOworICAgICAgICBzYy5tZW1iZXJfZGVsID0g
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9kZWw7CisKKyAgICAgICAgc21h
cnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmc2MpOworICAgIH0KKworICAgIHJldHVybiBldmFz
X29iamVjdF9zbWFydF9hZGQoZSwgc21hcnQpOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCAoKmNiKSh2b2lk
ICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpLCBjb25zdCB2
b2lkICpkYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNiKTsKKyAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBwcml2LT5yZW5kZXIuY2IgPSBj
YjsKKyAgICBwcml2LT5yZW5kZXIuZGF0YSA9ICh2b2lkKilkYXRhOworfQorCitFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKmV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dl
dChjb25zdCBFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2LCAwKTsKKyAgICByZXR1cm4gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90
aWxlX3VudXNlZF9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqdHVjKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAg
aWYgKGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCkg
PT0gdHVjKQorICAgICAgICByZXR1cm47CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
bW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCB0dWMpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5KQoreworICAgIC8qIFRPRE86IGNoZWNrIG9mZnNldCBnbyBvdXQgb2YgYm91bmRzLCBjbGFt
cCAqLworICAgIGlmIChwcml2LT5yZW5kZXIuZGlzYWJsZWQpCisgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOworCisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSB4OworICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55ID0geTsKKworICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9U
UlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOworCisgICAg
cmV0dXJuIEVJTkFfVFJVRTsKK30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5KQoreworICAgIERCRygibz0lcCwgeD0lZCwgeT0lZCIsIG8sIHgsIHkpOworCisg
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYg
KHggPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggJiYgeSA9PSBwcml2LT52aWV3Lm9mZnNldC5j
dXIueSkKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHJldHVybiBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChwcml2LCB4LCB5
KTsKK30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29m
ZnNldF9hZGQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHkpCit7
CisgICAgREJHKCJvPSVwLCBkeD0lZCwgZHk9JWQiLCBvLCBkeCwgZHkpOworCisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKCFkeCAmJiAh
ZHkpCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICByZXR1cm4gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwKKyAgICAgICAgKHBy
aXYsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgZHgsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
ICsgZHkpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96
b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBmbG9h
dCAqem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCAqb2ZmeCwg
RXZhc19Db29yZCAqb2ZmeSkKK3sKKyAgICAqb2ZmeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54
OworICAgICpvZmZ5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisKKyAgICBpZiAoZmFic2Yo
cHJpdi0+dmlldy50aWxlLnpvb20gLSAqem9vbSkgPCBaT09NX1NURVBfTUlOKSB7CisgICAgICAg
IERCRygiaWdub3JlZCBhcyB6b29tIGRpZmZlcmVuY2UgaXMgPCAlZjogJWYiLAorICAgICAgICAg
ICAgKGRvdWJsZSlaT09NX1NURVBfTUlOLCBmYWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6
b29tKSk7CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKKyAgICBFdmFz
X0Nvb3JkIHR3LCB0aDsKKworICAgICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGls
ZS53LCAqem9vbSk7CisKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIHRoID0gcHJp
di0+dmlldy50aWxlLmg7CisKKyAgICBmbG9hdCBzY2FsZSA9ICp6b29tIC8gcHJpdi0+dmlldy50
aWxlLnpvb207CisKKyAgICBwcml2LT52aWV3LnRpbGUuem9vbSA9ICp6b29tOworICAgIC8vIHRv
ZG86IGNoZWNrIGN4IFswLCB3XS4uLgorICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVy
LnggPSBjeDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC56b29tX2NlbnRlci55ID0gY3k7CisKKwor
ICAgIGlmICghcHJpdi0+dmlldy53IHx8ICFwcml2LT52aWV3LmgpIHsKKyAgICAgICAgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54ID0gMDsKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55
ID0gMDsKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisgICAgRWluYV9Jbmxpc3Qg
KippdHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsK
KworICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAt
IGN4KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSAtIGN5KSAqIHNjYWxlOworCisgICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9
IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQg
PSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsKKworICAgIGlmIChtb2RlbF93aWR0aCA8IHBy
aXYtPnZpZXcudyB8fCBuZXdfeCA+PSAwKQorICAgICAgICBuZXdfeCA9IDA7CisgICAgZWxzZSBp
ZiAoLW5ld194ICsgcHJpdi0+dmlldy53ID49IG1vZGVsX3dpZHRoKQorICAgICAgICBuZXdfeCA9
IC1tb2RlbF93aWR0aCArIHByaXYtPnZpZXcudzsKKworICAgIGlmIChtb2RlbF9oZWlnaHQgPCBw
cml2LT52aWV3LmggfHwgbmV3X3kgPj0gMCkKKyAgICAgICAgbmV3X3kgPSAwOworICAgIGVsc2Ug
aWYgKC1uZXdfeSArIHByaXYtPnZpZXcuaCA+PSBtb2RlbF9oZWlnaHQpCisgICAgICAgIG5ld195
ID0gLW1vZGVsX2hlaWdodCArIHByaXYtPnZpZXcuaDsKKworICAgIEV2YXNfQ29vcmQgYnggPSBu
ZXdfeCAlIHR3OworICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOworICAgIHByaXYtPm1v
ZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHc7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAt
bmV3X3kgLyB0aDsKKworICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKKyAgICBw
cml2LT5jaGFuZ2VkLm1vZGVsID0gRUlOQV9UUlVFOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9jaGFuZ2VkKHByaXYpOworCisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdf
eDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IG5ld195OworICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IGJ4OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5Owor
CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsK
KyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55Owor
ICAgICpvZmZ4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgKm9mZnkgPSBwcml2LT52
aWV3Lm9mZnNldC5jdXIueTsKKworICAgIGV2YXNfb2JqZWN0X21vdmUoCisgICAgICAgIHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAorICAgICAg
ICBuZXdfeSArIHByaXYtPnZpZXcueSk7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
ZmlsbF9yZW5kZXJlcnMocHJpdik7CisKKyAgICBFdmFzX0Nvb3JkIG95ID0gcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IHBy
aXYtPnZpZXcueCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKworICAgIGl0ciA9IHByaXYt
PnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKworICAg
IGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0g
YmFzZV9veDsKKyAgICAgICAgRWluYV9Jbmxpc3QgKmxzdCA9ICppdHI7CisKKyAgICAgICAgRUlO
QV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOworICAgICAgICAgICAgb3ggKz0g
dHc7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorCisgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKK30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0
KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCAqem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBj
eSwgRXZhc19Db29yZCAqb2ZmeCwgRXZhc19Db29yZCAqb2ZmeSkKK3sKKyAgICBEQkcoIm89JXAs
IHpvb209JWYiLCBvLCAoZG91YmxlKSp6b29tKTsKKworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworCisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3NldF9pbnRlcm5hbChwcml2LCB6b29tLCBjeCwgY3ksIG9mZngsIG9mZnkp
OworfQorCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChF
dmFzX09iamVjdCAqbywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkK
K3sKKyAgICBEQkcoIm89JXAsIHpvb209JWYiLCBvLCAoZG91YmxlKXpvb20pOworICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmICghcHJpdi0+
dmlldy53IHx8ICFwcml2LT52aWV3LmgpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAg
IEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqaXQ7CisgICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRWluYV9Cb29sIHJlY2Fs
YyA9IEVJTkFfRkFMU0U7CisKKyAgICBmbG9hdCBzY2FsZSA9IHpvb20gLyBwcml2LT52aWV3LnRp
bGUuem9vbTsKKworICAgIHR3ID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLncs
IHNjYWxlKTsKKyAgICBzY2FsZSA9IFRJTEVfWk9PTV9BVF9TSVpFKHR3LCBwcml2LT52aWV3LnRp
bGUudyk7CisgICAgdGggPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaCwgc2Nh
bGUpOworICAgIHpvb20gPSBzY2FsZSAqIHByaXYtPnZpZXcudGlsZS56b29tOworCisgICAgRXZh
c19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7CisgICAgRXZh
c19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsKKworICAg
IGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBtb2RlbF93aWR0aCwg
bW9kZWxfaGVpZ2h0KTsKKworICAgIGludCB2cm93cyA9IGNlaWwoKGZsb2F0KXByaXYtPnZpZXcu
aCAvIChmbG9hdCl0aCkgKyAxOworICAgIGludCB2Y29scyA9IGNlaWwoKGZsb2F0KXByaXYtPnZp
ZXcudyAvIChmbG9hdCl0dykgKyAxOworICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjeCArIChwcml2
LT52aWV3Lm9mZnNldC5jdXIueCAtIGN4KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3X3kg
PSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN5KSAqIHNjYWxlOworICAgIEV2YXNf
Q29vcmQgYnggPSBuZXdfeCAlIHR3OworICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwor
ICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICB1bnNpZ25lZCBs
b25nIGJhc2VfY29sID0gLW5ld194IC8gdHc7CisKKyAgICBpZiAoYmFzZV9yb3cgIT0gcHJpdi0+
bW9kZWwuYmFzZS5yb3cgfHwgYmFzZV9jb2wgIT0gcHJpdi0+bW9kZWwuYmFzZS5jb2wpIHsKKyAg
ICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSBiYXNlX3JvdzsKKyAgICAgICAgcHJpdi0+bW9k
ZWwuYmFzZS5jb2wgPSBiYXNlX2NvbDsKKyAgICAgICAgcmVjYWxjID0gRUlOQV9UUlVFOworICAg
IH0KKworICAgIGlmICh2cm93cyA+IHByaXYtPnZpZXcucm93cyB8fCB2Y29scyA+IHByaXYtPnZp
ZXcuY29scykKKyAgICAgICAgcmVjYWxjID0gRUlOQV9UUlVFOworCisgICAgaWYgKHJlY2FsYykg
eworICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5
X2dldChvLCAwLCAwLCAmdywgJmgpOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cmVjYWxjX3JlbmRlcmVycyhwcml2LCB3LCBoLCB0dywgdGgpOworICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7CisgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CisgICAgfQorCisgICAgRXZhc19D
b29yZCBiYXNlX294ID0gYnggKyBwcml2LT52aWV3Lng7CisgICAgRXZhc19Db29yZCBveSA9IGJ5
ICsgcHJpdi0+dmlldy55OworCisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19j
bGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCisgICAg
ICAgICAgICAgICAgICAgICBuZXdfeSArIHByaXYtPnZpZXcueSk7CisKKyAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisKKyAg
ICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXZhc19Db29yZCBveCA9
IGJhc2Vfb3g7CisgICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOworCisgICAgICAgIEVJ
TkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKKyAgICAgICAgICAgIG94ICs9
IHR3OworICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KKworICAgIHJldHVybiBF
SU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMo
RXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0
cl9lbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgRXZhc19D
b29yZCBuZXdfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIEV2YXNfQ29vcmQgbmV3
X3kgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICBFdmFzX0Nvb3JkIGJ4ID0gcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54OworICAgIEV2YXNfQ29vcmQgYnkgPSBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnk7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2
YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIGlmICgtbmV3X3ggPiB3KSB7
CisgICAgICAgIG5ld194ID0gLXc7CisgICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKKyAgICAgICAg
cHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKKyAgICB9CisKKyAgICBpZiAoLW5l
d195ID4gaCkgeworICAgICAgICBuZXdfeSA9IC1oOworICAgICAgICBieSA9IG5ld195ICUgdGg7
CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7CisgICAgfQorCisg
ICAgaWYgKGJ4ID49IDAgfHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUudykgeworICAgICAg
ICBieCA9IG5ld194ICUgdHc7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194
IC8gdHc7CisgICAgfQorCisgICAgaWYgKGJ5ID49IDAgfHwgYnkgPD0gLTIgKiBwcml2LT52aWV3
LnRpbGUuaCkgeworICAgICAgICBieSA9IG5ld195ICUgdGg7CisgICAgICAgIHByaXYtPm1vZGVs
LmJhc2Uucm93ID0gLW5ld195IC8gdGg7CisgICAgfQorCisgICAgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnggPSBuZXdfeDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IG5ld195OworICAg
IHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gbmV3X3g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnkgPSBuZXdfeTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBieDsKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBieTsKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgICAgICAgICAgICAgICBuZXdfeCArIHByaXYtPnZp
ZXcueCwKKyAgICAgICAgICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKKworICAg
IEV2YXNfQ29vcmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7
CisgICAgRXZhc19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJfZW5kID0g
aXRyICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisr
KSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OworICAgICAgICBFaW5hX0lubGlz
dCAqbHN0ID0gKml0cjsKKworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsK
KyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBv
eSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQs
IHR3LCB0aCk7CisgICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgfQorICAgICAgICBveSAr
PSB0aDsKKyAgICB9Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFr
X3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUp
Cit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgRWluYV9Jbmxp
c3QgKippdHIsICoqaXRyX2VuZDsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAg
aXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKyAgICBwcml2LT52aWV3LnRpbGUuem9v
bV93ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aF9zY2FsZTsKKworICAgIGZvciAoOyBpdHI8IGl0
cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0
OworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KQorICAgICAgICAgICAgaWYg
KGl0LT50aWxlKQorICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X3Ntb290aF9zY2FsZV9zZXQKKyAgICAgICAgICAgICAgICAgICAgKGl0LCBzbW9vdGhfc2NhbGUp
OworICAgIH0KK30KKworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShF
dmFzX09iamVjdCAqbywgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSkKK3sKKyAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKworICAgIGlmIChwcml2
LT5yZW5kZXIuZGlzYWJsZWQpCisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworCisgICAgcmV0
dXJuIGV3a190aWxlX21hdHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCB1cGRhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwor
fQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0
KEV2YXNfT2JqZWN0ICpvLCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbyks
IGNvbnN0IHZvaWQgKmRhdGEpCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
dik7CisgICAgcHJpdi0+cHJvY2Vzcy5wcmVfY2IgPSBjYjsKKyAgICBwcml2LT5wcm9jZXNzLnBy
ZV9kYXRhID0gKHZvaWQqKWRhdGE7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0ICpvLCB2b2lkICooKmNiKSh2b2lk
ICpkYXRhLCB2b2lkICpwcmVfZGF0YSwgRXZhc19PYmplY3QgKm8pLCBjb25zdCB2b2lkICpkYXRh
KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIHByaXYtPnBy
b2Nlc3MucG9zdF9jYiA9IGNiOworICAgIHByaXYtPnByb2Nlc3MucG9zdF9kYXRhID0gKHZvaWQq
KWRhdGE7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNz
KEV2YXNfT2JqZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYp
OworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7Cit9
CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19jbGVhcihFdmFzX09iamVj
dCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIGV3
a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKHByaXYtPm1vZGVsLm1hdHJpeCk7Cit9CisKK3Zv
aWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKEV2YXNfT2JqZWN0ICpv
LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKK3sKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIGlmICh3aWR0aCA9PSBwcml2LT5tb2RlbC53
aWR0aCAmJiBoZWlnaHQgPT0gcHJpdi0+bW9kZWwuaGVpZ2h0KQorICAgICAgICByZXR1cm47CisK
KyAgICBwcml2LT5tb2RlbC53aWR0aCA9IHdpZHRoOworICAgIHByaXYtPm1vZGVsLmhlaWdodCA9
IGhlaWdodDsKKyAgICBwcml2LT5jaGFuZ2VkLm1vZGVsID0gRUlOQV9UUlVFOworCisgICAgREJH
KCJ3aWR0aCxoZWlnaHQ9JWQsICVkIiwgd2lkdGgsIGhlaWdodCk7CisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHZhbHVl
KQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgaWYgKHZh
bHVlICE9IHByaXYtPnJlbmRlci5kaXNhYmxlZCkKKyAgICAgICAgcHJpdi0+cmVuZGVyLmRpc2Fi
bGVkID0gdmFsdWU7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZh
c19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Cisg
ICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMgPSAwOworCisgICAgcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5vbGQueCA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSAw
OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS55ID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IDA7CisgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3cgPSAwOworICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKKyAgICBw
cml2LT5tb2RlbC5jdXIucm93cyA9IDE7CisgICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOwor
ICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gMDsKKyAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBF
SU5BX1RSVUU7CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBwcmludGYoIlxuRkxVU0hF
RCBCQUNLSU5HIFNUT1JFLCBTVEFUVVMgQkVGT1JFIERFTEVUSU5HIFRJTEUgTUFUUklYOlxuIik7
CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcocHJpdik7CisjZW5kaWYKKwor
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJp
dik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwocHJp
dik7CisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9k
ZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIodHVjKTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUs
IFNUQVRVUyBBRlRFUiBSRUNSRUFUSU5HIFRJTEUgTUFUUklYOlxuIik7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX21lbV9kYmcocHJpdik7CisjZW5kaWYKK30KKworRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0ICpvLCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZs
b2F0IHpvb20pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsKKyAgICBjb25zdCBFaW5h
X1RpbGVfR3JpZF9JbmZvICppbmZvOworICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAg
ICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+
dmlldy50aWxlLncsIHpvb20pOworCisgICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0
dXAoJnNsaWNlciwgeCwgeSwgdywgaCwgdHcsIHRoKSkgeworICAgICAgICBFUlIoImNvdWxkIG5v
dCBzZXR1cCBncmlkIHNsaWNlciBmb3IgJWQsJWQrJWR4JWQgdGlsZT0lZHglZCIsCisgICAgICAg
ICAgICB4LCB5LCB3LCBoLCB0dywgdGgpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAg
ICB9CisKKyAgICB3aGlsZSAoZWluYV90aWxlX2dyaWRfc2xpY2VyX25leHQoJnNsaWNlciwgJmlu
Zm8pKSB7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYyA9IGluZm8tPmNvbDsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgbG9uZyByID0gaW5mby0+cm93OworICAgICAgICBpZiAoIV9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKHByaXYsIGMsIHIsIHpv
b20sIFBSRV9SRU5ERVJfUFJJT1JJVFlfTE9XKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQo
cHJpdik7CisKKyAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2
LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVj
LCB4LCB5LCB3LCBoLCB6b29tKTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZh
c19PYmplY3QgKm8sIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQoreworICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHVuc2lnbmVkIGxvbmcg
c3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wsIGksIGosIHcsIGg7CisgICAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisKKyAgICBJTkYoInByaXYtPm1vZGVsLmJhc2Uu
cm93ID0lbGQsIG49JXUgcHJpdi0+dmlldy5yb3dzPSVsdSIsCisgICAgICAgICAgICBwcml2LT5t
b2RlbC5iYXNlLnJvdywgbiwgcHJpdi0+dmlldy5yb3dzKTsKKyAgICBzdGFydF9yb3cgPSAobG9u
Zylwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG47CisgICAgc3RhcnRfY29sID0gKGxvbmcpcHJpdi0+
bW9kZWwuYmFzZS5jb2wgLSBuOworICAgIGVuZF9yb3cgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5j
dXIucm93cyAtIDEsCisgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHBy
aXYtPnZpZXcucm93cyArIG4gLSAxKTsKKyAgICBlbmRfY29sID0gc3RkOjptaW4ocHJpdi0+bW9k
ZWwuY3VyLmNvbHMgLSAxLAorICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wg
KyBwcml2LT52aWV3LmNvbHMgKyBuIC0gMSk7CisKKyAgICBJTkYoInN0YXJ0X3Jvdz0lbHUsIGVu
ZF9yb3c9JWx1LCBzdGFydF9jb2w9JWx1LCBlbmRfY29sPSVsdSIsCisgICAgICAgICBzdGFydF9y
b3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCk7CisKKyAgICB6b29tID0gUk9VTkRFRF9a
T09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsKKworICAgIGZvciAoaSA9IHN0YXJ0X3Jvdzsg
aSA8PSBlbmRfcm93OyBpKyspCisgICAgICAgIGZvciAoaiA9IHN0YXJ0X2NvbDsgaiA8PSBlbmRf
Y29sOyBqKyspCisgICAgICAgICAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlcXVlc3RfYWRkKHByaXYsIGosIGksIHpvb20sIFBSRV9SRU5ERVJfUFJJT1JJVFlf
TE9XKSkKKyAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0X3Byb2Nlc3Npbmc7CisKK3N0YXJ0X3By
b2Nlc3Npbmc6CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxl
cl9zdGFydChwcml2KTsKKworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVf
Z2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgaCA9IChlbmRfcm93IC0gc3RhcnRfcm93ICsg
MSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaCwgem9vbSk7CisgICAgdyA9
IChlbmRfY29sIC0gc3RhcnRfY29sICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3
LnRpbGUudywgem9vbSk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMs
CisgICAgICAgICAgICBzdGFydF9jb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRp
bGUudywgem9vbSksCisgICAgICAgICAgICBzdGFydF9yb3cgKiBUSUxFX1NJWkVfQVRfWk9PTShw
cml2LT52aWV3LnRpbGUuaCwgem9vbSksIHcsIGgsIHpvb20pOworCisgICAgcmV0dXJuIEVJTkFf
VFJVRTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNl
bChFdmFzX09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfY2xlYXIocHJpdik7CisKKyAgICB0dWMgPSBl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0dWMpOworfQorCitFaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19PYmplY3QgKm8pCit7
CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAg
cmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihwcml2KTsKK30K
KworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXZhc19P
YmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CisgICAg
cmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKHByaXYpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaAppbmRl
eCA0NmFhYTgzOTEyMmVlNTNiYTE3ZDUwMGYyZTgwOWYwOWIzODE4YmYyLi4zMDEwM2VkMWQzMGQ2
OWQxYmY1NTIwZDQyZWY0OWY3MzU4YzY0YzMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaApAQCAtNDIsMTAgKzQyLDYgQEAKICNkZWZpbmUg
VElMRV9aT09NX0FUX1NJWkUoU0laRSwgT1JJR19USUxFKSAoKGZsb2F0KShTSVpFKSAvIChmbG9h
dCkoT1JJR19USUxFKSkKICNkZWZpbmUgUk9VTkRFRF9aT09NKFNJWkUsIFpPT00pICgoZmxvYXQp
KFNJWkUpIC8gKGZsb2F0KSgoKGludClyb3VuZGYoKFNJWkUpIC8gKFpPT00pKSkpKQogCi0jaWZk
ZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KICNpbmNsdWRlIDxFdmFzLmg+
CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KIApAQCAtMTIzLDcgKzExOSw0IEBAIHZvaWQgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QqIG8pOwogCiBFaW5h
X0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19PYmplY3Qq
IG8pOwogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXZh
c19PYmplY3QqIG8pOwotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKICNlbmRpZiAvLyBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3RpbGVkX21hdHJpeC5jIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9t
YXRyaXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzJmOWM4NDQzMDU4Mjc2OTI5
ZDk4MDIyZWMxY2RlNjc1YzE0NWU2Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jCisr
KyAvZGV2L251bGwKQEAgLTEsNjQ4ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFBy
b0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAg
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgImV3a190aWxlZF9tYXRyaXguaCIKLQotI2RlZmluZSBfR05VX1NPVVJDRQotI2luY2x1ZGUg
ImV3a190aWxlZF9iYWNraW5nX3N0b3JlLmgiCi0jaW5jbHVkZSAiZXdrX3RpbGVkX3ByaXZhdGUu
aCIKLSNpbmNsdWRlIDxFaW5hLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLSNpbmNsdWRlIDxpbnR0
eXBlcy5oPgotI2luY2x1ZGUgPG1hdGguaD4KLSNpbmNsdWRlIDxzdGRpby5oPiAvLyBYWFggcmVt
b3ZlIG1lIGxhdGVyCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0K
LXN0cnVjdCBfRXdrX1RpbGVfTWF0cml4IHsKLSAgICBFaW5hX01hdHJpeHNwYXJzZSAqbWF0cml4
OwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOwotICAgIEV2YXNfQ29sb3JzcGFjZSBj
c3BhY2U7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSk7Ci0gICAgICAgIHZvaWQgKmRh
dGE7Ci0gICAgfSByZW5kZXI7Ci0gICAgdW5zaWduZWQgaW50IGZyb3plbjsKLSAgICBFaW5hX0xp
c3QgKnVwZGF0ZXM7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgRXZhc19Db29yZCB3LCBoOwotICAg
IH0gdGlsZTsKLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBzdHJ1Y3QgewotICAgICAgICBz
dHJ1Y3QgewotICAgICAgICAgICAgdWludDY0X3QgYWxsb2NhdGVkLCBmcmVlZDsKLSAgICAgICAg
fSB0aWxlcywgYnl0ZXM7Ci0gICAgfSBzdGF0czsKLSNlbmRpZgotfTsKLQotI2lmZGVmIERFQlVH
X01FTV9MRUFLUwotc3RhdGljIHVpbnQ2NF90IHRpbGVzX2xlYWtlZCA9IDA7Ci1zdGF0aWMgdWlu
dDY0X3QgYnl0ZXNfbGVha2VkID0gMDsKLSNlbmRpZgotCi0vKiBjYWxsZWQgd2hlbiBtYXRyaXhz
cGFyc2UgaXMgcmVzaXplZCBvciBmcmVlZCAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJp
eF9jZWxsX2ZyZWUodm9pZCAqdXNlcl9kYXRhLCB2b2lkICpjZWxsX2RhdGEpCi17Ci0gICAgRXdr
X1RpbGVfTWF0cml4ICp0bSA9IHVzZXJfZGF0YTsKLSAgICBFd2tfVGlsZSAqdCA9IGNlbGxfZGF0
YTsKLQotICAgIGlmICghdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKLQotICAgIGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRz
LmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0t
PnVwZGF0ZXMsIHQpOwotCi0gICAgaWYgKHQtPnZpc2libGUpCi0gICAgICAgIEVSUigiZnJlZWlu
ZyBjZWxsIHRoYXQgaXMgdmlzaWJsZSwgbGVha2luZyB0aWxlICVwIiwgdCk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQp
KQotICAgICAgICAgICAgRVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcu
Li4iLCB0LCB0bS0+dHVjKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBEQkcoInRpbGUg
Y2VsbCBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwgdCk7Ci0jaWZkZWYgREVC
VUdfTUVNX0xFQUtTCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdC0+Ynl0
ZXM7Ci0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsKLSNlbmRpZgotICAgICAg
ICAgICAgZXdrX3RpbGVfZnJlZSh0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV90aGF3KHRtLT50dWMpOwotfQotCi0vKiBjYWxsZWQgd2hlbiBjYWNoZSBv
ZiB1bnVzZWQgdGlsZSBpcyBmbHVzaGVkICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4
X3RpbGVfZnJlZSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCkKLXsKLSAgICBFd2tfVGlsZV9NYXRy
aXggKnRtID0gZGF0YTsKLSAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpjZWxsOwotIAotICAg
IGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHQtPnJvdywg
dC0+Y29sLCAmY2VsbCkpIHsKLSAgICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2Fz
IG5vdCBpbiB0aGUgbWF0cml4PyBMZWFraW5nLi4uIiwgdCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoIWNlbGwpIHsKLSAgICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRo
YXQgd2FzIG5vdCBpbiB0aGUgbWF0cml4PyBMZWFraW5nLi4uIiwgdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAodC0+dXBkYXRlcyB8fCB0LT5zdGF0cy5mdWxsX3VwZGF0ZSkK
LSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0KTsK
LQotICAgIC8qIHNldCB0byBudWxsIHRvIGF2b2lkIGRvdWJsZSBmcmVlICovCi0gICAgZWluYV9t
YXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2VsbCwgTlVMTCwgTlVMTCk7Ci0gICAgZWlu
YV9tYXRyaXhzcGFyc2VfY2VsbF9jbGVhcihjZWxsKTsKLQotICAgIGlmIChFSU5BX1VOTElLRUxZ
KCEhdC0+dmlzaWJsZSkpIHsKLSAgICAgICAgRVJSKCJjYWNoZSBvZiB1bnVzZWQgdGlsZXMgcmVx
dWVzdGluZyBkZWxldGlvbiBvZiB1c2VkIHRpbGUgJXA/ICIKLSAgICAgICAgICAgICJMZWFraW5n
Li4uIiwgdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVB
S1MKLSAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7Ci0gICAgdG0tPnN0YXRz
LnRpbGVzLmZyZWVkKys7Ci0jZW5kaWYKLQotICAgIGV3a190aWxlX2ZyZWUodCk7Ci19Ci0KLS8q
KgotICogQ3JlYXRlcyBhIG5ldyBtYXRyaXggb2YgdGlsZXMuCi0gKgotICogVGhlIHRpbGUgbWF0
cml4IGlzIHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIHRpbGVzIGFyb3VuZCBhbmQKLSAqIHByb3Zp
ZGluZyBmYXN0IGFjY2VzcyB0byB0aGVtLiBPbmUgY2FuIHVzZSBpdCB0byByZXRyaWV2ZSBuZXcg
b3IKLSAqIGV4aXN0aW5nIHRpbGVzIGFuZCBnaXZlIHRoZW0gYmFjaywgYWxsb3dpbmcgdGhlbSB0
byBiZQotICogZnJlZWQvcmVwbGFjZWQgYnkgdGhlIGNhY2hlLgotICoKLSAqIEBwYXJhbSB0dWMg
Y2FjaGUgb2YgdW51c2VkIHRpbGVzIG9yIEBjIE5VTEwgdG8gY3JlYXRlIG9uZQotICogICAgICAg
IGF1dG9tYXRpY2FsbHkuCi0gKiBAcGFyYW0gY29scyBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUg
bWF0cml4LgotICogQHBhcmFtIHJvd3MgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4KLSAq
IEBwYXJhbSBjc3BhY2UgdGhlIGNvbG9yIHNwYWNlIHVzZWQgdG8gY3JlYXRlIHRpbGVzIGluIHRo
aXMgbWF0cml4LgotICogQHBhcmFtIHJlbmRlcl9jYiBmdW5jdGlvbiB1c2VkIHRvIHJlbmRlciBn
aXZlbiB0aWxlIHVwZGF0ZS4KLSAqIEBwYXJhbSByZW5kZXJfZGF0YSBjb250ZXh0IHRvIGdpdmUg
YmFjayB0byBAYSByZW5kZXJfY2IuCi0gKgotICogQHJldHVybiBuZXdseSBhbGxvY2F0ZWQgaW5z
dGFuY2Ugb24gc3VjY2VzcywgQGMgTlVMTCBvbiBmYWlsdXJlLgotICovCi1Fd2tfVGlsZV9NYXRy
aXggKmV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHVuc2ln
bmVkIGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNl
LCB2b2lkICgqcmVuZGVyX2NiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9S
ZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKnJlbmRlcl9kYXRhKQotewotICAgIEV3a19U
aWxlX01hdHJpeCAqdG07Ci0KLSAgICBDQUxMT0NfT1JfT09NX1JFVCh0bSwgc2l6ZW9mKEV3a19U
aWxlX01hdHJpeCksIE5VTEwpOwotCi0gICAgdG0tPm1hdHJpeCA9IGVpbmFfbWF0cml4c3BhcnNl
X25ldyhyb3dzLCBjb2xzLCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSwgdG0pOwotICAgIGlm
ICghdG0tPm1hdHJpeCkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgc3BhcnNlIG1h
dHJpeC4iKTsKLSAgICAgICAgZnJlZSh0bSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0K
LQotICAgIGlmICh0dWMpCi0gICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVf
cmVmKHR1Yyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfbmV3KDQwOTYwMDAwKTsKLSAgICAgICAgaWYgKCF0bS0+dHVjKSB7Ci0gICAgICAgICAg
ICBFUlIoIm5vIGNhY2hlIG9mIHVudXNlZCB0aWxlISIpOwotICAgICAgICAgICAgZWluYV9tYXRy
aXhzcGFyc2VfZnJlZSh0bS0+bWF0cml4KTsKLSAgICAgICAgICAgIGZyZWUodG0pOwotICAgICAg
ICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB0bS0+Y3NwYWNlID0g
Y3NwYWNlOwotICAgIHRtLT5yZW5kZXIuY2IgPSByZW5kZXJfY2I7Ci0gICAgdG0tPnJlbmRlci5k
YXRhID0gKHZvaWQgKilyZW5kZXJfZGF0YTsKLSAgICB0bS0+dGlsZS53ID0gREVGQVVMVF9USUxF
X1c7Ci0gICAgdG0tPnRpbGUuaCA9IERFRkFVTFRfVElMRV9IOwotCi0gICAgcmV0dXJuIHRtOwot
fQotCi0vKioKLSAqIERlc3Ryb3lzIHRpbGVzIG1hdHJpeCwgcmVsZWFzaW5nIGl0cyByZXNvdXJj
ZXMuCi0gKgotICogVGhlIGNhY2hlIGluc3RhbmNlIGlzIHVucmVmZXJlbmNlZCwgcG9zc2libHkg
ZnJlZWluZyBpdC4KLSAqLwotdm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRy
aXggKnRtKQotewotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHVpbnQ2NF90IHRpbGVzLCBi
eXRlczsKLSNlbmRpZgotCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7Ci0KLSAgICBlaW5hX21hdHJp
eHNwYXJzZV9mcmVlKHRtLT5tYXRyaXgpOwotCi0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Ro
YXcodG0tPnR1Yyk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKHRtLT50dWMpOwot
Ci0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgdGlsZXMgPSB0bS0+c3RhdHMudGlsZXMuYWxs
b2NhdGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVkOwotICAgIGJ5dGVzID0gdG0tPnN0YXRzLmJ5
dGVzLmFsbG9jYXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVlZDsKLQotICAgIHRpbGVzX2xlYWtl
ZCArPSB0aWxlczsKLSAgICBieXRlc19sZWFrZWQgKz0gYnl0ZXM7Ci0KLSAgICBpZiAodGlsZXMg
fHwgYnl0ZXMpCi0gICAgICAgIEVSUigidGlsZWQgbWF0cml4IGxlYWtlZDogdGlsZXNbKyUiUFJJ
dTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgotICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0
IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0iLAotICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFs
bG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLCB0aWxlcywKLSAgICAgICAgICAgIHRtLT5z
dGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwgYnl0ZXMpOwotICAg
IGVsc2UgaWYgKHRpbGVzX2xlYWtlZCB8fCBieXRlc19sZWFrZWQpCi0gICAgICAgIFdSTigidGls
ZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSAiCi0g
ICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdLCBidXQgc29tZSBvdGhlciBs
ZWFrZWQgIgotICAgICAgICAgICAgIiUiUFJJdTY0IiB0aWxlcyAoJSJQUkl1NjQiIGJ5dGVzKSIs
Ci0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGlsZXMu
ZnJlZWQsCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMu
Ynl0ZXMuZnJlZWQsCi0gICAgICAgICAgICB0aWxlc19sZWFrZWQsIGJ5dGVzX2xlYWtlZCk7Ci0g
ICAgZWxzZQotICAgICAgICBJTkYoInRpbGVkIG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWysl
IlBSSXU2NCIsLSUiUFJJdTY0Il0gIgotICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQ
Ukl1NjQiXSIsCi0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0
bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOwotI2VuZGlmCi0KLSAgICBmcmVlKHRtKTsKLX0KLQotLyoq
Ci0gKiBSZXNpemUgbWF0cml4IHRvIGdpdmVuIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zLgot
ICovCi12b2lkIGV3a190aWxlX21hdHJpeF9yZXNpemUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5z
aWduZWQgbG9uZyBjb2xzLCB1bnNpZ25lZCBsb25nIHJvd3MpCi17Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odG0pOwotICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfc2V0KHRtLT5t
YXRyaXgsIHJvd3MsIGNvbHMpOwotfQotCi0vKioKLSAqIEdldCB0aGUgY2FjaGUgb2YgdW51c2Vk
IHRpbGVzIGluIHVzZSBieSBnaXZlbiBtYXRyaXguCi0gKgotICogTm8gcmVmZXJlbmNlIGlzIHRh
a2VuIHRvIHRoZSBjYWNoZS4KLSAqLwotRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQotewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgTlVMTCk7Ci0gICAgcmV0dXJuIHRt
LT50dWM7Ci19Ci0KLS8qKgotICogR2V0IHRoZSBleGFjdCB0aWxlIGZvciB0aGUgZ2l2ZW4gcG9z
aXRpb24gYW5kIHpvb20uCi0gKgotICogSWYgdGhlIHRpbGUgd2FzIHVudXNlZCB0aGVuIGl0J3Mg
cmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4KLSAqCi0gKiBBZnRlciB1c2FnZSwgcGxlYXNlIGdpdmUg
aXQgYmFjayB1c2luZwotICogZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkuIElmIHlvdSBqdXN0
IHdhbnQgdG8gY2hlY2sgaWYgaXQgZXhpc3RzLAotICogdGhlbiB1c2UgZXdrX3RpbGVfbWF0cml4
X3RpbGVfZXhhY3RfZXhpc3RzKCkuCi0gKgotICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0
byBnZXQgdGlsZSBmcm9tLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51bWJlci4KLSAqIEBw
YXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCi0gKiBAcGFyYW0gem9vbSB0aGUgZXhhY3Qgem9vbSB0
byB1c2UuCi0gKgotICogQHJldHVybiBUaGUgdGlsZSBpbnN0YW5jZSBvciBAYyBOVUxMIGlmIG5v
bmUgaXMgZm91bmQuIElmIHRoZSB0aWxlCi0gKiAgICAgICAgIHdhcyBpbiB0aGUgdW51c2VkIGNh
Y2hlIGl0IHdpbGwgYmUgQGIgcmVtb3ZlZCAodGh1cwotICogICAgICAgICBjb25zaWRlcmVkIHVz
ZWQpIGFuZCBvbmUgc2hvdWxkIGdpdmUgaXQgYmFjayB3aXRoCi0gKiAgICAgICAgIGV3a190aWxl
X21hdHJpeF90aWxlX3B1dCgpIGFmdGVyd2FyZHMuCi0gKgotICogQHNlZSBld2tfdGlsZV9tYXRy
aXhfdGlsZV9leGFjdF9nZXQoKQotICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVf
ZXhhY3RfZ2V0KEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25l
ZCBsb25nIHJvdywgZmxvYXQgem9vbSkKLXsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICB0ID0gZWlu
YV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKLSAgICBp
ZiAoIXQpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHQtPnpvb20gPT0gem9vbSkK
LSAgICAgICAgZ290byBlbmQ7Ci0KLSAgZW5kOgotICAgIGlmICghdC0+dmlzaWJsZSkgewotICAg
ICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0KSkKLSAg
ICAgICAgICAgIFdSTigiRXdrX1RpbGUgd2FzIHVudXNlZCBidXQgbm90IGluIGNhY2hlPyBidWch
Iik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLS8qKgotICogQ2hlY2tzIGlmIHRpbGUg
b2YgZ2l2ZW4gem9vbSBleGlzdHMgaW4gbWF0cml4LgotICoKLSAqIEBwYXJhbSB0bSB0aGUgdGls
ZSBtYXRyaXggdG8gY2hlY2sgdGlsZSBleGlzdGVuY2UuCi0gKiBAcGFyYW0gY29sIHRoZSBjb2x1
bW4gbnVtYmVyLgotICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KLSAqIEBwYXJhbSB6b29t
IHRoZSBleGFjdCB6b29tIHRvIHF1ZXJ5LgotICoKLSAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlm
IGZvdW5kLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqCi0gKiBAc2VlIGV3a190aWxlX21h
dHJpeF90aWxlX2V4YWN0X2dldCgpCi0gKi8KLUVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGls
ZV9leGFjdF9leGlzdHMoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVu
c2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQotewotICAgIEV3a19UaWxlICp0OwotCi0gICAg
dCA9IGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7
Ci0gICAgaWYgKCF0KQotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLQotICAgIHJldHVybiBF
SU5BX1RSVUU7Ci19Ci0KLS8qKgotICogQ3JlYXRlIGEgbmV3IHRpbGUgYXQgZ2l2ZW4gcG9zaXRp
b24gYW5kIHpvb20gbGV2ZWwgaW4gdGhlIG1hdHJpeC4KLSAqCi0gKiBUaGUgbmV3bHkgY3JlYXRl
ZCB0aWxlIGlzIGNvbnNpZGVyZWQgaW4gdXNlIGFuZCBub3QgcHV0IGludG8gY2FjaGUKLSAqIG9m
IHVudXNlZCB0aWxlcy4gQWZ0ZXIgaXQgaXMgdXNlZCBvbmUgc2hvdWxkIGNhbGwKLSAqIGV3a190
aWxlX21hdHJpeF90aWxlX3B1dCgpIHRvIGdpdmUgaXQgYmFjayB0byBtYXRyaXguCi0gKgotICog
QHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBjcmVhdGUgdGlsZSBvbi4KLSAqIEBwYXJhbSBj
b2wgdGhlIGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgotICog
QHBhcmFtIHpvb20gdGhlIGxldmVsIHRvIGNyZWF0ZSB0aWxlLCB1c2VkIHRvIGRldGVybWluZSB0
aWxlIHNpemUuCi0gKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1Rp
bGVfTWF0cml4ICp0bSwgRXZhcyAqZXZhcywgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93LCBmbG9hdCB6b29tKQotewotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIEV3a19U
aWxlICp0OwotCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBOVUxMKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHpvb20gPiAwLjAsIE5VTEwpOwot
Ci0gICAgdHcgPSB0bS0+dGlsZS53OwotICAgIHRoID0gdG0tPnRpbGUuaDsKLQotICAgIHQgPSBl
d2tfdGlsZV9uZXcoZXZhcywgdHcsIHRoLCB6b29tLCB0bS0+Y3NwYWNlKTsKLSAgICBpZiAoIXQp
IHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHRpbGUgJWR4JWQgYXQgJWYsIGNzcGFj
ZT0lZCIsIHR3LCB0aCwgKGRvdWJsZSl6b29tLCB0bS0+Y3NwYWNlKTsKLSAgICAgICAgcmV0dXJu
IE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9zZXQo
dG0tPm1hdHJpeCwgcm93LCBjb2wsIHQpKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IHNldCBt
YXRyaXggY2VsbCwgcm93L2NvbCBvdXRzaWRlIG1hdHJpeCBkaW1lbnNpb25zISIpOwotICAgICAg
ICBld2tfdGlsZV9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0
LT5jb2wgPSBjb2w7Ci0gICAgdC0+cm93ID0gcm93OwotICAgIHQtPnggPSBjb2wgKiB0dzsKLSAg
ICB0LT55ID0gcm93ICogdGg7Ci0KLSAgICBjYWlyb190cmFuc2xhdGUodC0+Y2Fpcm8sIC10LT54
LCAtdC0+eSk7Ci0KLSAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKLSAgICB0
bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOwotCi0jaWZkZWYg
REVCVUdfTUVNX0xFQUtTCi0gICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCArPSB0LT5ieXRl
czsKLSAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkKys7Ci0jZW5kaWYKLQotICAgIHJldHVy
biB0OwotfQotCi0vKioKLSAqIEdpdmVzIGJhY2sgdGhlIHRpbGUgdG8gdGhlIHRpbGUgbWF0cml4
LgotICoKLSAqIFRoaXMgd2lsbCByZXBvcnQgdGhlIHRpbGUgaXMgbm8gbG9uZ2VyIGluIHVzZSBi
eSB0aGUgb25lIHRoYXQgZ290Ci0gKiBpdCB3aXRoIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0
X2dldCgpLgotICoKLSAqIEFueSBwcmV2aW91cyByZWZlcmVuY2UgdG8gdGlsZSBzaG91bGQgYmUg
cmVsZWFzZWQKLSAqIChld2tfdGlsZV9oaWRlKCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rp
b24sIHNvIGl0IHdpbGwKLSAqIGJlIGtub3duIGlmIGl0IGlzIG5vdCB2aXNpYmlsZSBhbnltb3Jl
IGFuZCB0aHVzIGNhbiBiZSBwdXQgaW50byB0aGUKLSAqIHVudXNlZCBjYWNoZS4KLSAqCi0gKiBA
cGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIHJldHVybiB0aWxlIHRvLgotICogQHBhcmFtIHQg
dGhlIHRpbGUgaW5zdGFuY2UgdG8gcmV0dXJuLCBtdXN0IEBiIG5vdCBiZSBAYyBOVUxMLgotICog
QHBhcmFtIGxhc3RfdXNlZCB0aW1lIGluIHdoaWNoIHRpbGUgd2FzIGxhc3QgdXNlZC4KLSAqCi0g
KiBAcmV0dXJuICNFSU5BX1RSVUUgb24gc3VjY2VzcyBvciAjRUlOQV9GQUxTRSBvbiBmYWlsdXJl
LgotICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01hdHJp
eCAqdG0sIEV3a19UaWxlICp0LCBkb3VibGUgbGFzdF91c2VkKQotewotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHQsIEVJTkFfRkFMU0UpOwotCi0gICAgaWYgKHQtPnZpc2libGUpCi0g
ICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0KLSAgICB0LT5zdGF0cy5sYXN0X3VzZWQgPSBsYXN0
X3VzZWQ7Ci0gICAgcmV0dXJuIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCh0bS0+dHVj
LCB0LCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSwgdG0pOwotfQotCi1FaW5hX0Jvb2wgZXdr
X3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxv
bmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSkK
LXsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFaW5hX1JlY3RhbmdsZSBuZXdfdXBkYXRlOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7Ci0KLSAgICBt
ZW1jcHkoJm5ld191cGRhdGUsIHVwZGF0ZSwgc2l6ZW9mKG5ld191cGRhdGUpKTsKLSAgICAvLyBj
aGVjayB1cGRhdGUgaXMgdmFsaWQsIG90aGVyd2lzZSByZXR1cm4gRUlOQV9GQUxTRQotICAgIGlm
ICh1cGRhdGUtPnggPCAwIHx8IHVwZGF0ZS0+eSA8IDAgfHwgdXBkYXRlLT53IDw9IDAgfHwgdXBk
YXRlLT5oIDw9IDApIHsKLSAgICAgICAgRVJSKCJpbnZhbGlkIHVwZGF0ZSByZWdpb24uIik7Ci0g
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIGlmICh1cGRhdGUtPnggKyB1
cGRhdGUtPncgLSAxID49IHRtLT50aWxlLncpCi0gICAgICAgIG5ld191cGRhdGUudyA9IHRtLT50
aWxlLncgLSB1cGRhdGUtPng7Ci0gICAgaWYgKHVwZGF0ZS0+eSArIHVwZGF0ZS0+aCAtIDEgPj0g
dG0tPnRpbGUuaCkKLSAgICAgICAgbmV3X3VwZGF0ZS5oID0gdG0tPnRpbGUuaCAtIHVwZGF0ZS0+
eTsKLQotICAgIHQgPSBlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwg
cm93LCBjb2wpOwotCi0gICAgaWYgKCF0KQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotCi0g
ICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0t
PnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKLSAgICBld2tfdGls
ZV91cGRhdGVfYXJlYSh0LCAmbmV3X3VwZGF0ZSk7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwot
fQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGVf
TWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQotewotICAg
IEV3a19UaWxlICp0OwotICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKLQotICAgIGlmICgh
ZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCAmY2Vs
bCkpCi0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgaWYgKCFjZWxsKQotICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOwotCi0gICAgdCA9IGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0
YV9nZXQoY2VsbCk7Ci0gICAgaWYgKCF0KSB7Ci0gICAgICAgIENSSVRJQ0FMKCJtYXRyaXggY2Vs
bCB3aXRoIG5vIHRpbGUhIik7Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0gICAgfQotCi0g
ICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0t
PnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKLSAgICBld2tfdGls
ZV91cGRhdGVfZnVsbCh0KTsKLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXZvaWQgZXdr
X3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXggKnRtLCBFd2tf
VGlsZSAqdCkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgaWYg
KCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIodCk7Ci0gICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xp
c3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0KTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Rp
bGVfbWF0cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqYXJlYSwgZmxvYXQgem9vbSwgRWluYV9UaWxlX0dyaWRfU2xpY2VyICpzbGljZXIp
Ci17Ci0gICAgdW5zaWduZWQgbG9uZyByb3dzLCBjb2xzOwotICAgIEV2YXNfQ29vcmQgeCwgeSwg
dywgaCwgdHcsIHRoOwotCi0gICAgaWYgKGFyZWEtPncgPD0gMCB8fCBhcmVhLT5oIDw9IDApIHsK
LSAgICAgICAgV1JOKCJpbnZhbGlkIGFyZWEgcmVnaW9uOiAlZCwlZCslZHglZC4iLAotICAgICAg
ICAgICAgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7Ci0gICAgICAgIHJldHVy
biBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIHggPSBhcmVhLT54OwotICAgIHkgPSBhcmVhLT55
OwotICAgIHcgPSBhcmVhLT53OwotICAgIGggPSBhcmVhLT5oOwotCi0gICAgdHcgPSB0bS0+dGls
ZS53OwotICAgIHRoID0gdG0tPnRpbGUuaDsKLQotICAgIC8vIGNyb3BwaW5nIGFyZWEgcmVnaW9u
IHRvIGZpdCBtYXRyaXgKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX2dldCh0bS0+bWF0cml4
LCAmcm93cywgJmNvbHMpOwotICAgIGlmICh4IDwgMCkgewotICAgICAgICB3ICs9IHg7Ci0gICAg
ICAgIHggPSAwOwotICAgIH0KLSAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgaCArPSB5OwotICAg
ICAgICB5ID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoeSArIGggLSAxID4gKGxvbmcpKHJvd3MgKiB0
aCkpCi0gICAgICAgIGggPSByb3dzICogdGggLSB5OwotICAgIGlmICh4ICsgdyAtIDEgPiAobG9u
ZykoY29scyAqIHR3KSkKLSAgICAgICAgdyA9IGNvbHMgKiB0dyAtIHg7Ci0KLSAgICByZXR1cm4g
ZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKHNsaWNlciwgeCwgeSwgdywgaCwgdHcsIHRoKTsK
LX0KLQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgg
KnRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlLCBmbG9hdCB6b29tKQotewotICAgIGNv
bnN0IEVpbmFfVGlsZV9HcmlkX0luZm8gKmluZm87Ci0gICAgRWluYV9UaWxlX0dyaWRfU2xpY2Vy
IHNsaWNlcjsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFM
U0UpOwotCi0gICAgaWYgKHVwZGF0ZS0+dyA8IDEgfHwgdXBkYXRlLT5oIDwgMSkgewotICAgICAg
ICBEQkcoIldoeSB3ZSBnZXQgdXBkYXRlcyB3aXRoIGVtcHR5IGFyZWFzPyAlZCwlZCslZHglZCBh
dCB6b29tICVmIiwKLSAgICAgICAgICAgIHVwZGF0ZS0+eCwgdXBkYXRlLT55LCB1cGRhdGUtPncs
IHVwZGF0ZS0+aCwgem9vbSk7Ci0gICAgICAgIHJldHVybiBFSU5BX1RSVUU7Ci0gICAgfQotCi0g
ICAgaWYgKCFfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cCh0bSwgdXBkYXRlLCB6b29tLCAm
c2xpY2VyKSkgewotICAgICAgICBFUlIoIkNvdWxkIG5vdCBzZXR1cCBzbGljZXIgZm9yIHVwZGF0
ZSAlZCwlZCslZHglZCBhdCB6b29tICVmIiwKLSAgICAgICAgICAgIHVwZGF0ZS0+eCwgdXBkYXRl
LT55LCB1cGRhdGUtPncsIHVwZGF0ZS0+aCwgem9vbSk7Ci0gICAgICAgIHJldHVybiBFSU5BX0ZB
TFNFOwotICAgIH0KLQotICAgIHdoaWxlIChlaW5hX3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xp
Y2VyLCAmaW5mbykpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKLSAgICAgICAg
RXdrX1RpbGUgKnQ7Ci0gICAgICAgIGNvbCA9IGluZm8tPmNvbDsKLSAgICAgICAgcm93ID0gaW5m
by0+cm93OwotCi0gICAgICAgIHQgPSBlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0t
Pm1hdHJpeCwgcm93LCBjb2wpOwotICAgICAgICBpZiAoIXQpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQot
ICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0
KTsKLSAgICAgICAgaWYgKGluZm8tPmZ1bGwpCi0gICAgICAgICAgICBld2tfdGlsZV91cGRhdGVf
ZnVsbCh0KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEo
dCwgJmluZm8tPnJlY3QpOwotICAgIH0KLQotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQot
dm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01hdHJpeCAqdG0p
Ci17Ci0gICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0OwotICAgIEV3a19UaWxlICp0OwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLQotICAgIC8vIHByb2Nlc3MgdXBkYXRlcywg
dW5mbGFnIHRpbGVzCi0gICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0bS0+dXBkYXRlcywgbCwg
bF9uZXh0LCB0KSB7Ci0gICAgICAgIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0LCB0bS0+cmVu
ZGVyLmNiLCB0bS0+cmVuZGVyLmRhdGEpOwotICAgICAgICBpZiAodC0+dmlzaWJsZSkgewotICAg
ICAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0KTsKLSAgICAgICAgICAgIHRtLT51cGRh
dGVzID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRtLT51cGRhdGVzLCBsKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9N
YXRyaXggKnRtKQotewotICAgIEV3a19UaWxlICp0OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHRtKTsKLQotICAgIEVJTkFfTElTVF9GUkVFKHRtLT51cGRhdGVzLCB0KQotICAgICAg
ICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHQpOwotICAgIHRtLT51cGRhdGVzID0gTlVMTDsKLX0K
LQotLy8gcmVtb3ZlIG1lIGxhdGVyIQotdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3
a19UaWxlX01hdHJpeCAqdG0pCi17Ci0gICAgRWluYV9JdGVyYXRvciAqaXQgPSBlaW5hX21hdHJp
eHNwYXJzZV9pdGVyYXRvcl9jb21wbGV0ZV9uZXcodG0tPm1hdHJpeCk7Ci0gICAgRWluYV9NYXRy
aXhzcGFyc2VfQ2VsbCAqY2VsbDsKLSAgICBFaW5hX0Jvb2wgbGFzdF9lbXB0eSA9IEVJTkFfRkFM
U0U7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBwcmludGYoIkV3a19UaWxlIE1hdHJp
eDogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgotICAgICAgICAgICAi
Ynl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il1cbiIsCi0gICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKLSAgICAgICAg
ICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCAtIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKLSAg
ICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVk
LAotICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0gdG0tPnN0YXRzLmJ5dGVz
LmZyZWVkKTsKLSNlbHNlCi0gICAgcHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6XG4iKTsKLSNlbmRp
ZgotCi0gICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0LCBjZWxsKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGxvbmcgcm93LCBjb2w7Ci0gICAgICAgIEV3a19UaWxlICp0OwotICAgICAgICBlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sKTsKLSAgICAgICAg
dCA9IGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCk7Ci0KLSAgICAgICAgaWYg
KCF0KSB7Ci0gICAgICAgICAgICBpZiAoIWxhc3RfZW1wdHkpIHsKLSAgICAgICAgICAgICAgICBs
YXN0X2VtcHR5ID0gRUlOQV9UUlVFOwotICAgICAgICAgICAgICAgIHByaW50ZigiRW1wdHk6Iik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIiBbJWx1LCVsdV0iLCBjb2wsIHJv
dyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobGFzdF9lbXB0eSkgewotICAg
ICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOwotICAgICAgICAgICAgICAgIHBy
aW50ZigiXG4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiJTNsdSwlM2x1
ICUxMHA6IiwgY29sLCByb3csIHQpOwotICAgICAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSAr
ICVkeCVkIEAgJTAuM2ZdJWMiLCB0LT5jb2wsIHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9vbSwg
dC0+dmlzaWJsZSA/ICcqJzogJyAnKTsKLSAgICAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAobGFzdF9lbXB0eSkKLSAgICAgICAgcHJpbnRmKCJcbiIpOwot
ICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdCk7Ci0KLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
ZGJnKHRtLT50dWMpOwotfQotCi0vKioKLSAqIEZyZWV6ZSBtYXRyaXggdG8gbm90IGRvIG1haW50
ZW5hbmNlIHRhc2tzLgotICoKLSAqIE1haW50ZW5hbmNlIHRhc2tzIG9wdGltaXplIHVzYWdlLCBi
dXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91bGQgaG9sZAotICogb24gdGhlbSB1bnRpbCB3ZSBkbyB0
aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3ZSBmcmVlemUKLSAqIHdoaWxlIG9wZXJh
dGluZyBhbmQgdGhlbiB0aGF3IHdoZW4gd2UncmUgZG9uZS4KLSAqCi0gKiBAc2VlIGV3a190aWxl
X21hdHJpeF90aGF3KCkKLSAqLwotdm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxl
X01hdHJpeCAqdG0pCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotICAg
IGlmICghdG0tPmZyb3plbikKLSAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0
bS0+dHVjKTsKLSAgICB0bS0+ZnJvemVuKys7Ci19Ci0KLS8qKgotICogVW5mcmVlemVzIG1haW50
ZW5hbmNlIHRhc2tzLgotICoKLSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2Yg
ZnJlZXplLCB0aGVuIG1haW50ZW5hbmNlIHRhc2tzCi0gKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4K
LSAqLwotdm9pZCBld2tfdGlsZV9tYXRyaXhfdGhhdyhFd2tfVGlsZV9NYXRyaXggKnRtKQotewot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAoIXRtLT5mcm96ZW4p
IHsKLSAgICAgICAgRVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBmcmVlemluZyEiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIHRtLT5mcm96ZW4tLTsKLSAgICBpZiAoIXRtLT5mcm96ZW4p
Ci0gICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRtLT50dWMpOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmNGM0MWM3
MTkxMzQ3ZjAxYTYxOWIzZDFjYmVlOWJjYjU0YTYyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKQEAgLTAsMCArMSw2MzkgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICAg
IENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a190aWxlZF9tYXRyaXguaCIKKworI2lu
Y2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0b3JlLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX3By
aXZhdGUuaCIKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRl
IDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPiAvLyBY
WFggcmVtb3ZlIG1lIGxhdGVyCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CisKK3N0cnVjdCBfRXdrX1RpbGVfTWF0cml4IHsKKyAgICBFaW5hX01hdHJpeHNwYXJzZSAq
bWF0cml4OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIEV2YXNfQ29sb3Jz
cGFjZSBjc3BhY2U7CisgICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAoKmNiKSh2b2lkICpkYXRh
LCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSk7CisgICAgICAgIHZv
aWQgKmRhdGE7CisgICAgfSByZW5kZXI7CisgICAgdW5zaWduZWQgaW50IGZyb3plbjsKKyAgICBF
aW5hX0xpc3QgKnVwZGF0ZXM7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXZhc19Db29yZCB3LCBo
OworICAgIH0gdGlsZTsKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBzdHJ1Y3QgeworICAg
ICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDY0X3QgYWxsb2NhdGVkLCBmcmVlZDsKKyAg
ICAgICAgfSB0aWxlcywgYnl0ZXM7CisgICAgfSBzdGF0czsKKyNlbmRpZgorfTsKKworI2lmZGVm
IERFQlVHX01FTV9MRUFLUworc3RhdGljIHVpbnQ2NF90IHRpbGVzX2xlYWtlZCA9IDA7CitzdGF0
aWMgdWludDY0X3QgYnl0ZXNfbGVha2VkID0gMDsKKyNlbmRpZgorCisvKiBjYWxsZWQgd2hlbiBt
YXRyaXhzcGFyc2UgaXMgcmVzaXplZCBvciBmcmVlZCAqLworc3RhdGljIHZvaWQgX2V3a190aWxl
X21hdHJpeF9jZWxsX2ZyZWUodm9pZCAqdXNlcl9kYXRhLCB2b2lkICpjZWxsX2RhdGEpCit7Cisg
ICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KHVz
ZXJfZGF0YSk7CisgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGNlbGxf
ZGF0YSk7CisKKyAgICBpZiAoIXQpCisgICAgICAgIHJldHVybjsKKworICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisKKyAgICBpZiAodC0+dXBkYXRlcyB8fCB0LT5z
dGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3Zl
KHRtLT51cGRhdGVzLCB0KTsKKworICAgIGlmICh0LT52aXNpYmxlKQorICAgICAgICBFUlIoImZy
ZWVpbmcgY2VsbCB0aGF0IGlzIHZpc2libGUsIGxlYWtpbmcgdGlsZSAlcCIsIHQpOworICAgIGVs
c2UgeworICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVj
LCB0KSkKKyAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBsZWFr
aW5nLi4uIiwgdCwgdG0tPnR1Yyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgREJHKCJ0
aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJlZSBpdCAlcCIsIHQpOworI2lmZGVm
IERFQlVHX01FTV9MRUFLUworICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHQt
PmJ5dGVzOworICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVkKys7CisjZW5kaWYKKyAg
ICAgICAgICAgIGV3a190aWxlX2ZyZWUodCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKK30KKworLyogY2FsbGVkIHdoZW4gY2Fj
aGUgb2YgdW51c2VkIHRpbGUgaXMgZmx1c2hlZCAqLworc3RhdGljIHZvaWQgX2V3a190aWxlX21h
dHJpeF90aWxlX2ZyZWUodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpCit7CisgICAgRXdrX1RpbGVf
TWF0cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGRhdGEpOworICAgIEVp
bmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CisgCisgICAgaWYgKCFlaW5hX21hdHJpeHNwYXJz
ZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxsKSkgeworICAg
ICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExl
YWtpbmcuLi4iLCB0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghY2VsbCkg
eworICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRy
aXg/IExlYWtpbmcuLi4iLCB0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0
LT51cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICB0bS0+dXBkYXRlcyA9
IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQpOworCisgICAgLyogc2V0IHRvIG51bGwg
dG8gYXZvaWQgZG91YmxlIGZyZWUgKi8KKyAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFf
cmVwbGFjZShjZWxsLCAwLCAwKTsKKyAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2NsZWFyKGNl
bGwpOworCisgICAgaWYgKEVJTkFfVU5MSUtFTFkoISF0LT52aXNpYmxlKSkgeworICAgICAgICBF
UlIoImNhY2hlIG9mIHVudXNlZCB0aWxlcyByZXF1ZXN0aW5nIGRlbGV0aW9uIG9mIHVzZWQgdGls
ZSAlcD8gIgorICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVl
ZCArPSB0LT5ieXRlczsKKyAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsKKyNlbmRpZgorCisg
ICAgZXdrX3RpbGVfZnJlZSh0KTsKK30KKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IG1hdHJpeCBv
ZiB0aWxlcy4KKyAqCisgKiBUaGUgdGlsZSBtYXRyaXggaXMgcmVzcG9uc2libGUgZm9yIGtlZXBp
bmcgdGlsZXMgYXJvdW5kIGFuZAorICogcHJvdmlkaW5nIGZhc3QgYWNjZXNzIHRvIHRoZW0uIE9u
ZSBjYW4gdXNlIGl0IHRvIHJldHJpZXZlIG5ldyBvcgorICogZXhpc3RpbmcgdGlsZXMgYW5kIGdp
dmUgdGhlbSBiYWNrLCBhbGxvd2luZyB0aGVtIHRvIGJlCisgKiBmcmVlZC9yZXBsYWNlZCBieSB0
aGUgY2FjaGUuCisgKgorICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgb3IgQGMg
MCB0byBjcmVhdGUgb25lCisgKiAgICAgICAgYXV0b21hdGljYWxseS4KKyAqIEBwYXJhbSBjb2xz
IG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCisgKiBAcGFyYW0gcm93cyBudW1iZXIg
b2Ygcm93cyBpbiB0aGUgbWF0cml4LgorICogQHBhcmFtIGNzcGFjZSB0aGUgY29sb3Igc3BhY2Ug
dXNlZCB0byBjcmVhdGUgdGlsZXMgaW4gdGhpcyBtYXRyaXguCisgKiBAcGFyYW0gcmVuZGVyX2Ni
IGZ1bmN0aW9uIHVzZWQgdG8gcmVuZGVyIGdpdmVuIHRpbGUgdXBkYXRlLgorICogQHBhcmFtIHJl
bmRlcl9kYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNrIHRvIEBhIHJlbmRlcl9jYi4KKyAqCisgKiBA
cmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBpbnN0YW5jZSBvbiBzdWNjZXNzLCBAYyAwIG9uIGZhaWx1
cmUuCisgKi8KK0V3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjb2xzLCB1bnNpZ25lZCBsb25nIHJvd3Ms
IEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UsIHZvaWQgKCpyZW5kZXJfY2IpKHZvaWQgKmRhdGEsIEV3
a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKSwgY29uc3Qgdm9pZCAqcmVu
ZGVyX2RhdGEpCit7CisgICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3a19U
aWxlX01hdHJpeCo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSkpOworICAgIGlm
ICghdG0pCisgICAgICAgIHJldHVybiAwOworCisgICAgdG0tPm1hdHJpeCA9IGVpbmFfbWF0cml4
c3BhcnNlX25ldyhyb3dzLCBjb2xzLCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSwgdG0pOwor
ICAgIGlmICghdG0tPm1hdHJpeCkgeworICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgc3Bh
cnNlIG1hdHJpeC4iKTsKKyAgICAgICAgZnJlZSh0bSk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIGlmICh0dWMpCisgICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfcmVmKHR1Yyk7CisgICAgZWxzZSB7CisgICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfbmV3KDQwOTYwMDAwKTsKKyAgICAgICAgaWYgKCF0bS0+dHVjKSB7CisgICAgICAg
ICAgICBFUlIoIm5vIGNhY2hlIG9mIHVudXNlZCB0aWxlISIpOworICAgICAgICAgICAgZWluYV9t
YXRyaXhzcGFyc2VfZnJlZSh0bS0+bWF0cml4KTsKKyAgICAgICAgICAgIGZyZWUodG0pOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0bS0+Y3NwYWNlID0g
Y3NwYWNlOworICAgIHRtLT5yZW5kZXIuY2IgPSByZW5kZXJfY2I7CisgICAgdG0tPnJlbmRlci5k
YXRhID0gKHZvaWQgKilyZW5kZXJfZGF0YTsKKyAgICB0bS0+dGlsZS53ID0gREVGQVVMVF9USUxF
X1c7CisgICAgdG0tPnRpbGUuaCA9IERFRkFVTFRfVElMRV9IOworCisgICAgcmV0dXJuIHRtOwor
fQorCisvKioKKyAqIERlc3Ryb3lzIHRpbGVzIG1hdHJpeCwgcmVsZWFzaW5nIGl0cyByZXNvdXJj
ZXMuCisgKgorICogVGhlIGNhY2hlIGluc3RhbmNlIGlzIHVucmVmZXJlbmNlZCwgcG9zc2libHkg
ZnJlZWluZyBpdC4KKyAqLwordm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRy
aXggKnRtKQoreworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIHVpbnQ2NF90IHRpbGVzLCBi
eXRlczsKKyNlbmRpZgorCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisKKyAgICBlaW5hX21hdHJp
eHNwYXJzZV9mcmVlKHRtLT5tYXRyaXgpOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Ro
YXcodG0tPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKHRtLT50dWMpOwor
CisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgdGlsZXMgPSB0bS0+c3RhdHMudGlsZXMuYWxs
b2NhdGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVkOworICAgIGJ5dGVzID0gdG0tPnN0YXRzLmJ5
dGVzLmFsbG9jYXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVlZDsKKworICAgIHRpbGVzX2xlYWtl
ZCArPSB0aWxlczsKKyAgICBieXRlc19sZWFrZWQgKz0gYnl0ZXM7CisKKyAgICBpZiAodGlsZXMg
fHwgYnl0ZXMpCisgICAgICAgIEVSUigidGlsZWQgbWF0cml4IGxlYWtlZDogdGlsZXNbKyUiUFJJ
dTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgorICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0
IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0iLAorICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFs
bG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLCB0aWxlcywKKyAgICAgICAgICAgIHRtLT5z
dGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwgYnl0ZXMpOworICAg
IGVsc2UgaWYgKHRpbGVzX2xlYWtlZCB8fCBieXRlc19sZWFrZWQpCisgICAgICAgIFdSTigidGls
ZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSAiCisg
ICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdLCBidXQgc29tZSBvdGhlciBs
ZWFrZWQgIgorICAgICAgICAgICAgIiUiUFJJdTY0IiB0aWxlcyAoJSJQUkl1NjQiIGJ5dGVzKSIs
CisgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGlsZXMu
ZnJlZWQsCisgICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMu
Ynl0ZXMuZnJlZWQsCisgICAgICAgICAgICB0aWxlc19sZWFrZWQsIGJ5dGVzX2xlYWtlZCk7Cisg
ICAgZWxzZQorICAgICAgICBJTkYoInRpbGVkIG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWysl
IlBSSXU2NCIsLSUiUFJJdTY0Il0gIgorICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQ
Ukl1NjQiXSIsCisgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsCisgICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0
bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOworI2VuZGlmCisKKyAgICBmcmVlKHRtKTsKK30KKworLyoq
CisgKiBSZXNpemUgbWF0cml4IHRvIGdpdmVuIG51bWJlciBvZiByb3dzIGFuZCBjb2x1bW5zLgor
ICovCit2b2lkIGV3a190aWxlX21hdHJpeF9yZXNpemUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5z
aWduZWQgbG9uZyBjb2xzLCB1bnNpZ25lZCBsb25nIHJvd3MpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odG0pOworICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfc2V0KHRtLT5t
YXRyaXgsIHJvd3MsIGNvbHMpOworfQorCisvKioKKyAqIEdldCB0aGUgY2FjaGUgb2YgdW51c2Vk
IHRpbGVzIGluIHVzZSBieSBnaXZlbiBtYXRyaXguCisgKgorICogTm8gcmVmZXJlbmNlIGlzIHRh
a2VuIHRvIHRoZSBjYWNoZS4KKyAqLworRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgMCk7CisgICAgcmV0dXJuIHRtLT50
dWM7Cit9CisKKy8qKgorICogR2V0IHRoZSBleGFjdCB0aWxlIGZvciB0aGUgZ2l2ZW4gcG9zaXRp
b24gYW5kIHpvb20uCisgKgorICogSWYgdGhlIHRpbGUgd2FzIHVudXNlZCB0aGVuIGl0J3MgcmVt
b3ZlZCBmcm9tIHRoZSBjYWNoZS4KKyAqCisgKiBBZnRlciB1c2FnZSwgcGxlYXNlIGdpdmUgaXQg
YmFjayB1c2luZworICogZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkuIElmIHlvdSBqdXN0IHdh
bnQgdG8gY2hlY2sgaWYgaXQgZXhpc3RzLAorICogdGhlbiB1c2UgZXdrX3RpbGVfbWF0cml4X3Rp
bGVfZXhhY3RfZXhpc3RzKCkuCisgKgorICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBn
ZXQgdGlsZSBmcm9tLgorICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJh
bSByb3cgdGhlIHJvdyBudW1iZXIuCisgKiBAcGFyYW0gem9vbSB0aGUgZXhhY3Qgem9vbSB0byB1
c2UuCisgKgorICogQHJldHVybiBUaGUgdGlsZSBpbnN0YW5jZSBvciBAYyAwIGlmIG5vbmUgaXMg
Zm91bmQuIElmIHRoZSB0aWxlCisgKiAgICAgICAgIHdhcyBpbiB0aGUgdW51c2VkIGNhY2hlIGl0
IHdpbGwgYmUgQGIgcmVtb3ZlZCAodGh1cworICogICAgICAgICBjb25zaWRlcmVkIHVzZWQpIGFu
ZCBvbmUgc2hvdWxkIGdpdmUgaXQgYmFjayB3aXRoCisgKiAgICAgICAgIGV3a190aWxlX21hdHJp
eF90aWxlX3B1dCgpIGFmdGVyd2FyZHMuCisgKgorICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGls
ZV9leGFjdF9nZXQoKQorICovCitFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3Rf
Z2V0KEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25n
IHJvdywgZmxvYXQgem9vbSkKK3sKKyAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19U
aWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29s
KSk7CisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICh0LT56b29tID09
IHpvb20pCisgICAgICAgIGdvdG8gZW5kOworCisgIGVuZDoKKyAgICBpZiAoIXQtPnZpc2libGUp
IHsKKyAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1Yywg
dCkpCisgICAgICAgICAgICBXUk4oIkV3a19UaWxlIHdhcyB1bnVzZWQgYnV0IG5vdCBpbiBjYWNo
ZT8gYnVnISIpOworICAgIH0KKworICAgIHJldHVybiB0OworfQorCisvKioKKyAqIENoZWNrcyBp
ZiB0aWxlIG9mIGdpdmVuIHpvb20gZXhpc3RzIGluIG1hdHJpeC4KKyAqCisgKiBAcGFyYW0gdG0g
dGhlIHRpbGUgbWF0cml4IHRvIGNoZWNrIHRpbGUgZXhpc3RlbmNlLgorICogQHBhcmFtIGNvbCB0
aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCisgKiBAcGFy
YW0gem9vbSB0aGUgZXhhY3Qgem9vbSB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBpZiBmb3VuZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNlZSBld2tf
dGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoKQorICovCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0
cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcg
Y29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK3sKKyAgICBpZiAoIWVpbmFfbWF0
cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCkpCisgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworLyoqCisgKiBD
cmVhdGUgYSBuZXcgdGlsZSBhdCBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbSBsZXZlbCBpbiB0aGUg
bWF0cml4LgorICoKKyAqIFRoZSBuZXdseSBjcmVhdGVkIHRpbGUgaXMgY29uc2lkZXJlZCBpbiB1
c2UgYW5kIG5vdCBwdXQgaW50byBjYWNoZQorICogb2YgdW51c2VkIHRpbGVzLiBBZnRlciBpdCBp
cyB1c2VkIG9uZSBzaG91bGQgY2FsbAorICogZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkgdG8g
Z2l2ZSBpdCBiYWNrIHRvIG1hdHJpeC4KKyAqCisgKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4
IHRvIGNyZWF0ZSB0aWxlIG9uLgorICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51bWJlci4KKyAq
IEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCisgKiBAcGFyYW0gem9vbSB0aGUgbGV2ZWwgdG8g
Y3JlYXRlIHRpbGUsIHVzZWQgdG8gZGV0ZXJtaW5lIHRpbGUgc2l6ZS4KKyAqLworRXdrX1RpbGUg
KmV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBFdmFzICpldmFz
LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCit7Cisg
ICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXdrX1RpbGUgKnQ7CisKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIDApOworICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JF
VFVSTl9WQUwoem9vbSA+IDAuMCwgMCk7CisKKyAgICB0dyA9IHRtLT50aWxlLnc7CisgICAgdGgg
PSB0bS0+dGlsZS5oOworCisgICAgdCA9IGV3a190aWxlX25ldyhldmFzLCB0dywgdGgsIHpvb20s
IHRtLT5jc3BhY2UpOworICAgIGlmICghdCkgeworICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVh
dGUgdGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVkIiwgdHcsIHRoLCAoZG91YmxlKXpvb20sIHRt
LT5jc3BhY2UpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoIWVpbmFfbWF0
cml4c3BhcnNlX2RhdGFfaWR4X3NldCh0bS0+bWF0cml4LCByb3csIGNvbCwgdCkpIHsKKyAgICAg
ICAgRVJSKCJjb3VsZCBub3Qgc2V0IG1hdHJpeCBjZWxsLCByb3cvY29sIG91dHNpZGUgbWF0cml4
IGRpbWVuc2lvbnMhIik7CisgICAgICAgIGV3a190aWxlX2ZyZWUodCk7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KKworICAgIHQtPmNvbCA9IGNvbDsKKyAgICB0LT5yb3cgPSByb3c7CisgICAg
dC0+eCA9IGNvbCAqIHR3OworICAgIHQtPnkgPSByb3cgKiB0aDsKKworICAgIGNhaXJvX3RyYW5z
bGF0ZSh0LT5jYWlybywgLXQtPngsIC10LT55KTsKKworICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRl
ID0gRUlOQV9UUlVFOworICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBk
YXRlcywgdCk7CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICB0bS0+c3RhdHMuYnl0ZXMu
YWxsb2NhdGVkICs9IHQtPmJ5dGVzOworICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQrKzsK
KyNlbmRpZgorCisgICAgcmV0dXJuIHQ7Cit9CisKKy8qKgorICogR2l2ZXMgYmFjayB0aGUgdGls
ZSB0byB0aGUgdGlsZSBtYXRyaXguCisgKgorICogVGhpcyB3aWxsIHJlcG9ydCB0aGUgdGlsZSBp
cyBubyBsb25nZXIgaW4gdXNlIGJ5IHRoZSBvbmUgdGhhdCBnb3QKKyAqIGl0IHdpdGggZXdrX3Rp
bGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkuCisgKgorICogQW55IHByZXZpb3VzIHJlZmVyZW5j
ZSB0byB0aWxlIHNob3VsZCBiZSByZWxlYXNlZAorICogKGV3a190aWxlX2hpZGUoKSkgYmVmb3Jl
IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAorICogYmUga25vd24gaWYgaXQgaXMg
bm90IHZpc2liaWxlIGFueW1vcmUgYW5kIHRodXMgY2FuIGJlIHB1dCBpbnRvIHRoZQorICogdW51
c2VkIGNhY2hlLgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gcmV0dXJuIHRp
bGUgdG8uCisgKiBAcGFyYW0gdCB0aGUgdGlsZSBpbnN0YW5jZSB0byByZXR1cm4sIG11c3QgQGIg
bm90IGJlIEBjIDAuCisgKiBAcGFyYW0gbGFzdF91c2VkIHRpbWUgaW4gd2hpY2ggdGlsZSB3YXMg
bGFzdCB1c2VkLgorICoKKyAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzIG9yICNFSU5B
X0ZBTFNFIG9uIGZhaWx1cmUuCisgKi8KK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9w
dXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUgKnQsIGRvdWJsZSBsYXN0X3VzZWQpCit7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodCwgRUlOQV9GQUxTRSk7CisKKyAgICBp
ZiAodC0+dmlzaWJsZSkKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIHQtPnN0YXRz
Lmxhc3RfdXNlZCA9IGxhc3RfdXNlZDsKKyAgICByZXR1cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3RpbGVfcHV0KHRtLT50dWMsIHQsIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlLCB0bSk7Cit9
CisKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4
ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqdXBkYXRlKQoreworICAgIEVpbmFfUmVjdGFuZ2xlIG5ld191cGRhdGU7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKKworICAgIG1l
bWNweSgmbmV3X3VwZGF0ZSwgdXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkpOworICAgIC8vIGNo
ZWNrIHVwZGF0ZSBpcyB2YWxpZCwgb3RoZXJ3aXNlIHJldHVybiBFSU5BX0ZBTFNFCisgICAgaWYg
KHVwZGF0ZS0+eCA8IDAgfHwgdXBkYXRlLT55IDwgMCB8fCB1cGRhdGUtPncgPD0gMCB8fCB1cGRh
dGUtPmggPD0gMCkgeworICAgICAgICBFUlIoImludmFsaWQgdXBkYXRlIHJlZ2lvbi4iKTsKKyAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgaWYgKHVwZGF0ZS0+eCArIHVw
ZGF0ZS0+dyAtIDEgPj0gdG0tPnRpbGUudykKKyAgICAgICAgbmV3X3VwZGF0ZS53ID0gdG0tPnRp
bGUudyAtIHVwZGF0ZS0+eDsKKyAgICBpZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0gMSA+PSB0
bS0+dGlsZS5oKQorICAgICAgICBuZXdfdXBkYXRlLmggPSB0bS0+dGlsZS5oIC0gdXBkYXRlLT55
OworCisgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4
c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCkpOworICAgIGlmICghdCkK
KyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVu
ZCh0bS0+dXBkYXRlcywgdCk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodCwgJm5ld191cGRh
dGUpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworRWluYV9Cb29sIGV3a190aWxlX21h
dHJpeF90aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcg
Y29sLCB1bnNpZ25lZCBsb25nIHJvdykKK3sKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpj
ZWxsOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7
CisKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0bS0+bWF0cml4LCBy
b3csIGNvbCwgJmNlbGwpKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIGlmICgh
Y2VsbCkKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKworICAgIEV3a19UaWxlKiB0ID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwp
KTsKKyAgICBpZiAoIXQpIHsKKyAgICAgICAgQ1JJVElDQUwoIm1hdHJpeCBjZWxsIHdpdGggbm8g
dGlsZSEiKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisKKyAgICBpZiAoIXQt
PnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICB0bS0+dXBkYXRlcyA9
IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOworICAgIGV3a190aWxlX3VwZGF0ZV9m
dWxsKHQpOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwordm9pZCBld2tfdGlsZV9tYXRy
aXhfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0sIEV3a19UaWxlICp0KQor
eworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBpZiAoIXQtPnVwZGF0
ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICByZXR1cm47CisgICAgZXdrX3Rp
bGVfdXBkYXRlc19jbGVhcih0KTsKKyAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUo
dG0tPnVwZGF0ZXMsIHQpOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9tYXRyaXhf
c2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICph
cmVhLCBmbG9hdCB6b29tLCBFaW5hX1RpbGVfR3JpZF9TbGljZXIgKnNsaWNlcikKK3sKKyAgICB1
bnNpZ25lZCBsb25nIHJvd3MsIGNvbHM7CisgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCB0dywg
dGg7CisKKyAgICBpZiAoYXJlYS0+dyA8PSAwIHx8IGFyZWEtPmggPD0gMCkgeworICAgICAgICBX
Uk4oImludmFsaWQgYXJlYSByZWdpb246ICVkLCVkKyVkeCVkLiIsCisgICAgICAgICAgICBhcmVh
LT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CisgICAgfQorCisgICAgeCA9IGFyZWEtPng7CisgICAgeSA9IGFyZWEtPnk7CisgICAgdyA9
IGFyZWEtPnc7CisgICAgaCA9IGFyZWEtPmg7CisKKyAgICB0dyA9IHRtLT50aWxlLnc7CisgICAg
dGggPSB0bS0+dGlsZS5oOworCisgICAgLy8gY3JvcHBpbmcgYXJlYSByZWdpb24gdG8gZml0IG1h
dHJpeAorICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfZ2V0KHRtLT5tYXRyaXgsICZyb3dzLCAm
Y29scyk7CisgICAgaWYgKHggPCAwKSB7CisgICAgICAgIHcgKz0geDsKKyAgICAgICAgeCA9IDA7
CisgICAgfQorICAgIGlmICh5IDwgMCkgeworICAgICAgICBoICs9IHk7CisgICAgICAgIHkgPSAw
OworICAgIH0KKworICAgIGlmICh5ICsgaCAtIDEgPiAobG9uZykocm93cyAqIHRoKSkKKyAgICAg
ICAgaCA9IHJvd3MgKiB0aCAtIHk7CisgICAgaWYgKHggKyB3IC0gMSA+IChsb25nKShjb2xzICog
dHcpKQorICAgICAgICB3ID0gY29scyAqIHR3IC0geDsKKworICAgIHJldHVybiBlaW5hX3RpbGVf
Z3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywgdGgpOworfQorCisKK0Vp
bmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUsIGZsb2F0IHpvb20pCit7CisgICAgY29uc3QgRWluYV9U
aWxlX0dyaWRfSW5mbyAqaW5mbzsKKyAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7CisKKyAg
ICBpZiAodXBkYXRlLT53IDwgMSB8fCB1cGRhdGUtPmggPCAxKSB7CisgICAgICAgIERCRygiV2h5
IHdlIGdldCB1cGRhdGVzIHdpdGggZW1wdHkgYXJlYXM/ICVkLCVkKyVkeCVkIGF0IHpvb20gJWYi
LAorICAgICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywgdXBkYXRlLT5o
LCB6b29tKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKKyAgICB9CisKKyAgICBpZiAoIV9l
d2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKHRtLCB1cGRhdGUsIHpvb20sICZzbGljZXIpKSB7
CisgICAgICAgIEVSUigiQ291bGQgbm90IHNldHVwIHNsaWNlciBmb3IgdXBkYXRlICVkLCVkKyVk
eCVkIGF0IHpvb20gJWYiLAorICAgICAgICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0
ZS0+dywgdXBkYXRlLT5oLCB6b29tKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAg
fQorCisgICAgd2hpbGUgKGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9uZXh0KCZzbGljZXIsICZpbmZv
KSkgeworICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OworICAgICAgICBjb2wgPSBpbmZv
LT5jb2w7CisgICAgICAgIHJvdyA9IGluZm8tPnJvdzsKKworICAgICAgICBFd2tfVGlsZSogdCA9
IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRt
LT5tYXRyaXgsIHJvdywgY29sKSk7CisgICAgICAgIGlmICghdCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUp
CisgICAgICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMs
IHQpOworICAgICAgICBpZiAoaW5mby0+ZnVsbCkKKyAgICAgICAgICAgIGV3a190aWxlX3VwZGF0
ZV9mdWxsKHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfYXJl
YSh0LCAmaW5mby0+cmVjdCk7CisgICAgfQorCisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQor
Cit2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4ICp0
bSkKK3sKKyAgICBFaW5hX0xpc3QgKmwsICpsX25leHQ7CisgICAgdm9pZCogaXRlbTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisKKyAgICAvLyBwcm9jZXNzIHVwZGF0ZXMs
IHVuZmxhZyB0aWxlcworICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodG0tPnVwZGF0ZXMsIGws
IGxfbmV4dCwgaXRlbSkgeworICAgICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3
a19UaWxlKj4oaXRlbSk7CisgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0aWxlLCB0
bS0+cmVuZGVyLmNiLCB0bS0+cmVuZGVyLmRhdGEpOworICAgICAgICBpZiAodGlsZS0+dmlzaWJs
ZSkgeworICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0aWxlKTsKKyAgICAgICAg
ICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRtLT51cGRhdGVzLCBsKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19jbGVh
cihFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIHZvaWQqIGl0ZW07CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odG0pOworCisgICAgRUlOQV9MSVNUX0ZSRUUodG0tPnVwZGF0ZXMs
IGl0ZW0pCisgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoc3RhdGljX2Nhc3Q8RXdrX1Rp
bGUqPihpdGVtKSk7CisgICAgdG0tPnVwZGF0ZXMgPSAwOworfQorCisvLyByZW1vdmUgbWUgbGF0
ZXIhCit2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkK
K3sKKyAgICBFaW5hX0l0ZXJhdG9yICppdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9yX2Nv
bXBsZXRlX25ldyh0bS0+bWF0cml4KTsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpjZWxs
OworICAgIEVpbmFfQm9vbCBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKKworI2lmZGVmIERFQlVH
X01FTV9MRUFLUworICAgIHByaW50ZigiRXdrX1RpbGUgTWF0cml4OiB0aWxlc1srJSJQUkl1NjQi
LC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0l
IlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKKyAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9j
YXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMu
YWxsb2NhdGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICB0bS0+c3RhdHMu
Ynl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCisgICAgICAgICAgIHRtLT5z
dGF0cy5ieXRlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOworI2Vsc2UKKyAg
ICBwcmludGYoIkV3a19UaWxlIE1hdHJpeDpcbiIpOworI2VuZGlmCisKKyAgICBFSU5BX0lURVJB
VE9SX0ZPUkVBQ0goaXQsIGNlbGwpIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNvbDsK
KyAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9wb3NpdGlvbl9nZXQoY2VsbCwgJnJvdywg
JmNvbCk7CisKKyAgICAgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVp
bmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOworICAgICAgICBpZiAoIXQpIHsK
KyAgICAgICAgICAgIGlmICghbGFzdF9lbXB0eSkgeworICAgICAgICAgICAgICAgIGxhc3RfZW1w
dHkgPSBFSU5BX1RSVUU7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFbXB0eToiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigiIFslbHUsJWx1XSIsIGNvbCwgcm93KTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChsYXN0X2VtcHR5KSB7CisgICAgICAgICAg
ICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfRkFMU0U7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJc
biIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoi
LCBjb2wsIHJvdywgdCk7CisgICAgICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQg
QCAlMC4zZl0lYyIsIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLCB0LT52aXNp
YmxlID8gJyonOiAnICcpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChsYXN0X2VtcHR5KQorICAgICAgICBwcmludGYoIlxuIik7CisgICAgZWlu
YV9pdGVyYXRvcl9mcmVlKGl0KTsKKworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodG0t
PnR1Yyk7Cit9CisKKy8qKgorICogRnJlZXplIG1hdHJpeCB0byBub3QgZG8gbWFpbnRlbmFuY2Ug
dGFza3MuCisgKgorICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgdXNhZ2UsIGJ1dCBtYXli
ZSB3ZSBrbm93IHdlIHNob3VsZCBob2xkCisgKiBvbiB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0
IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQorICogd2hpbGUgb3BlcmF0aW5nIGFu
ZCB0aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfbWF0cml4
X3RoYXcoKQorICovCit2b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4
ICp0bSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgaWYgKCF0
bS0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMp
OworICAgIHRtLT5mcm96ZW4rKzsKK30KKworLyoqCisgKiBVbmZyZWV6ZXMgbWFpbnRlbmFuY2Ug
dGFza3MuCisgKgorICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUs
IHRoZW4gbWFpbnRlbmFuY2UgdGFza3MKKyAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgorICovCit2
b2lkIGV3a190aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCAqdG0pCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGlmICghdG0tPmZyb3plbikgeworICAg
ICAgICBFUlIoInRoYXdpbmcgbW9yZSB0aGFuIGZyZWV6aW5nISIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgdG0tPmZyb3plbi0tOworICAgIGlmICghdG0tPmZyb3plbikKKyAgICAg
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3RpbGVkX21vZGVsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQy
ZTk0NzkzYjZkYmNiMWRlYWNmMWI4YzU0MDFkZTJiNGE1Nzc2ZGIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190
aWxlZF9tb2RlbC5jCisrKyAvZGV2L251bGwKQEAgLTEsODQ4ICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwotICAgIENvcHlyaWdodCAo
QykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0KLSAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgImV3a190aWxlZF9tb2RlbC5oIgotCi0jZGVmaW5lIF9HTlVfU09V
UkNFCi0jaW5jbHVkZSAiZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCIKLSNpbmNsdWRlICJld2tf
dGlsZWRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVjb3JlX0V2YXMuaD4KLSNpbmNsdWRlIDxFaW5h
Lmg+Ci0jaW5jbHVkZSA8ZWluYV9zYWZldHlfY2hlY2tzLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4K
LSNpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCBSRU1PVkUg
TUUgTEFURVIKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lm
ZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJfVElNRQotI2luY2x1ZGUgPHN5cy90aW1lLmg+
Ci0jZW5kaWYKLQotI2lmbmRlZiBDQUlST19GT1JNQVRfUkdCMTZfNTY1Ci0jZGVmaW5lIENBSVJP
X0ZPUk1BVF9SR0IxNl81NjUgNAotI2VuZGlmCi0KLSNkZWZpbmUgSURYKGNvbCwgcm93LCByb3dz
cGFuKSAoY29sICsgKHJvdyAqIHJvd3NwYW4pKQotI2RlZmluZSBNSU4oYSwgYikgKChhIDwgYikg
PyBhIDogYikKLSNkZWZpbmUgTUFYKGEsIGIpICgoYSA+IGIpID8gYSA6IGIpCi0KLSNpZmRlZiBE
RUJVR19NRU1fTEVBS1MKLXN0YXRpYyB1aW50NjRfdCB0aWxlc19hbGxvY2F0ZWQgPSAwOwotc3Rh
dGljIHVpbnQ2NF90IHRpbGVzX2ZyZWVkID0gMDsKLXN0YXRpYyB1aW50NjRfdCBieXRlc19hbGxv
Y2F0ZWQgPSAwOwotc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2ZyZWVkID0gMDsKLQotc3RydWN0IHRp
bGVfYWNjb3VudCB7Ci0gICAgRXZhc19Db29yZCBzaXplOwotICAgIHN0cnVjdCB7Ci0gICAgICAg
IHVpbnQ2NF90IGFsbG9jYXRlZDsKLSAgICAgICAgdWludDY0X3QgZnJlZWQ7Ci0gICAgfSB0aWxl
cywgYnl0ZXM7Ci19OwotCi1zdGF0aWMgc2l6ZV90IGFjY291bnRpbmdfbGVuID0gMDsKLXN0YXRp
YyBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NvdW50aW5nID0gTlVMTDsKLQotc3RhdGljIGlubGlu
ZSBzdHJ1Y3QgdGlsZV9hY2NvdW50ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1Rp
bGUgKnQpCi17Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjOwotICAgIHNpemVfdCBpOwot
Ci0gICAgZm9yIChpID0gMDsgaSA8IGFjY291bnRpbmdfbGVuOyBpKyspIHsKLSAgICAgICAgaWYg
KGFjY291bnRpbmdbaV0uc2l6ZSA9PSB0LT53KQotICAgICAgICAgICAgcmV0dXJuIGFjY291bnRp
bmcgKyBpOwotICAgIH0KLQotICAgIGkgPSAoYWNjb3VudGluZ19sZW4gKyAxKSAqIHNpemVvZihz
dHJ1Y3QgdGlsZV9hY2NvdW50KTsKLSAgICBSRUFMTE9DX09SX09PTV9SRVQoYWNjb3VudGluZywg
aSwgTlVMTCk7Ci0KLSAgICBhY2MgPSBhY2NvdW50aW5nICsgYWNjb3VudGluZ19sZW47Ci0gICAg
YWNjLT5zaXplID0gdC0+dzsKLSAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCA9IDA7Ci0gICAgYWNj
LT50aWxlcy5mcmVlZCA9IDA7Ci0gICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgPSAwOwotICAgIGFj
Yy0+Ynl0ZXMuZnJlZWQgPSAwOwotCi0gICAgYWNjb3VudGluZ19sZW4rKzsKLQotICAgIHJldHVy
biBhY2M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0
ZWQoY29uc3QgRXdrX1RpbGUgKnQpCi17Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0g
X2V3a190aWxlX2FjY291bnRfZ2V0KHQpOwotICAgIGlmICghYWNjKQotICAgICAgICByZXR1cm47
Ci0gICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7Ci0gICAgYWNjLT50aWxlcy5h
bGxvY2F0ZWQrKzsKLQotICAgIGJ5dGVzX2FsbG9jYXRlZCArPSB0LT5ieXRlczsKLSAgICB0aWxl
c19hbGxvY2F0ZWQrKzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50
X2ZyZWVkKGNvbnN0IEV3a19UaWxlICp0KQotewotICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFj
YyA9IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0KTsKLSAgICBpZiAoIWFjYykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYWNjLT5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKLSAgICBhY2MtPnRpbGVz
LmZyZWVkKys7Ci0KLSAgICBieXRlc19mcmVlZCArPSB0LT5ieXRlczsKLSAgICB0aWxlc19mcmVl
ZCsrOwotfQotCi12b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCi17Ci0gICAgc3Ry
dWN0IHRpbGVfYWNjb3VudCAqYWNjOwotICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY19lbmQ7
Ci0KLSAgICBwcmludGYoIlRJTEUgQkFMQU5DRTogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQi
OiUiUFJJdTY0Il0gIgotICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUi
UFJJdTY0Il1cbiIsCi0gICAgICAgICAgICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2ZyZWVkLCB0
aWxlc19hbGxvY2F0ZWQgLSB0aWxlc19mcmVlZCwKLSAgICAgICAgICAgIGJ5dGVzX2FsbG9jYXRl
ZCwgYnl0ZXNfZnJlZWQsIGJ5dGVzX2FsbG9jYXRlZCAtIGJ5dGVzX2ZyZWVkKTsKLQotICAgIGlm
ICghYWNjb3VudGluZ19sZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGFjYyA9IGFjY291bnRp
bmc7Ci0gICAgYWNjX2VuZCA9IGFjYyArIGFjY291bnRpbmdfbGVuOwotICAgIHByaW50ZigiQkVH
SU46IFRJTEUgQkFMQU5DRSBERVRBSUxTIChUTyBUSElTIE1PTUVOVCEpOlxuIik7Ci0gICAgZm9y
ICg7IGFjYyA8IGFjY19lbmQ7IGFjYysrKSB7Ci0gICAgICAgIHVpbnQ2NF90IHRpbGVzLCBieXRl
czsKLQotICAgICAgICB0aWxlcyA9IGFjYy0+dGlsZXMuYWxsb2NhdGVkIC0gYWNjLT50aWxlcy5m
cmVlZDsKLSAgICAgICAgYnl0ZXMgPSBhY2MtPmJ5dGVzLmFsbG9jYXRlZCAtIGFjYy0+Ynl0ZXMu
ZnJlZWQ7Ci0KLSAgICAgICAgcHJpbnRmKCIgICAlNGQ6IHRpbGVzWyslNCJQUkl1NjQiLC0lNCJQ
Ukl1NjQiOiU0IlBSSXU2NCJdICIKLSAgICAgICAgICAgICAgICJieXRlc1srJTgiUFJJdTY0Iiwt
JTgiUFJJdTY0IjolOCJQUkl1NjQiXSVzXG4iLAotICAgICAgICAgICAgICAgYWNjLT5zaXplLAot
ICAgICAgICAgICAgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQsIGFjYy0+dGlsZXMuZnJlZWQsIHRp
bGVzLAotICAgICAgICAgICAgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQsIGFjYy0+Ynl0ZXMuZnJl
ZWQsIGJ5dGVzLAotICAgICAgICAgICAgICAgKGJ5dGVzIHx8IHRpbGVzKSA/ICIgUE9TU0lCTEUg
TEVBSyIgOiAiIik7Ci0gICAgfQotICAgIHByaW50ZigiRU5EOiBUSUxFIEJBTEFOQ0UgREVUQUlM
UyAoVE8gVEhJUyBNT01FTlQhKTpcbiIpOwotfQotI2Vsc2UKLQotc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9Ci1zdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQp
IHsgfQotCi12b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCi17Ci0gICAgcHJpbnRm
KCJjb21waWxlIHdlYmtpdCB3aXRoIERFQlVHX01FTV9MRUFLUyBkZWZpbmVkIVxuIik7Ci19Ci0j
ZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1Rp
bGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCi17Ci0gICAgdWludDMyX3Qg
KmRzdDMyLCAqZHN0MzJfZW5kLCBjMTsKLSAgICB1aW50NjRfdCAqZHN0NjQsICpkc3Q2NF9lbmQs
IGMyOwotCi0gICAgYzEgPSAweGZmMDAwMDAwIHwgKCh1aW50MzJfdClyIDw8IDE2KSB8ICgodWlu
dDMyX3QpZyA8PCA4KSB8IGI7Ci0gICAgYzIgPSAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8IGMxOwot
Ci0gICAgZHN0NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7Ci0gICAgZHN0NjRfZW5kID0gZHN0
NjQgKyAoKHQtPmJ5dGVzIC8gOCkgJiB+Nyk7Ci0gICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5k
OyBkc3Q2NCArPSA4KSB7Ci0gICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5z
dHJ1Y3Rpb25zICovCi0gICAgICAgIGRzdDY0WzBdID0gYzI7Ci0gICAgICAgIGRzdDY0WzFdID0g
YzI7Ci0gICAgICAgIGRzdDY0WzJdID0gYzI7Ci0gICAgICAgIGRzdDY0WzNdID0gYzI7Ci0gICAg
ICAgIGRzdDY0WzRdID0gYzI7Ci0gICAgICAgIGRzdDY0WzVdID0gYzI7Ci0gICAgICAgIGRzdDY0
WzZdID0gYzI7Ci0gICAgICAgIGRzdDY0WzddID0gYzI7Ci0gICAgfQotCi0gICAgZHN0MzIgPSAo
dWludDMyX3QgKilkc3Q2NF9lbmQ7Ci0gICAgZHN0MzJfZW5kID0gKHVpbnQzMl90ICopKHQtPnBp
eGVscyArIHQtPmJ5dGVzKTsKLSAgICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRzdDMyKysp
Ci0gICAgICAgICpkc3QzMiA9IGMxOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxl
X3BhaW50X3JnYjU2NShFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3Qg
YikKLXsKLSAgICB1aW50MTZfdCAqZHN0MTYsICpkc3QxNl9lbmQsIGMxOwotICAgIHVpbnQ2NF90
ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7Ci0KLSAgICBjMSA9ICgoKChyID4+IDMpICYgMHgxZikg
PDwgMTEpIHwKLSAgICAgICAgICAoKChnID4+IDIpICYgMHgzZikgPDwgNSkgfAotICAgICAgICAg
ICgoYiA+PiAzKSAmIDB4MWYpKTsKLQotICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwg
KCh1aW50NjRfdCljMSA8PCAzMikgfAotICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwg
YzEpOwotCi0gICAgZHN0NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7Ci0gICAgZHN0NjRfZW5k
ID0gZHN0NjQgKyAoKHQtPmJ5dGVzIC8gOCkgJiB+Nyk7Ci0gICAgZm9yICg7IGRzdDY0IDwgZHN0
NjRfZW5kOyBkc3Q2NCArPSA4KSB7Ci0gICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5F
T04gaW5zdHJ1Y3Rpb25zICovCi0gICAgICAgIGRzdDY0WzBdID0gYzI7Ci0gICAgICAgIGRzdDY0
WzFdID0gYzI7Ci0gICAgICAgIGRzdDY0WzJdID0gYzI7Ci0gICAgICAgIGRzdDY0WzNdID0gYzI7
Ci0gICAgICAgIGRzdDY0WzRdID0gYzI7Ci0gICAgICAgIGRzdDY0WzVdID0gYzI7Ci0gICAgICAg
IGRzdDY0WzZdID0gYzI7Ci0gICAgICAgIGRzdDY0WzddID0gYzI7Ci0gICAgfQotCi0gICAgZHN0
MTYgPSAodWludDE2X3QgKilkc3QxNl9lbmQ7Ci0gICAgZHN0MTZfZW5kID0gKHVpbnQxNl90ICop
KHQtPnBpeGVscyArIHQtPmJ5dGVzKTsKLSAgICBmb3IgKDsgZHN0MTYgPCBkc3QxNl9lbmQ7IGRz
dDE2KyspCi0gICAgICAgICpkc3QxNiA9IGMxOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlX3BhaW50KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBi
KQotewotICAgIGlmICh0LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KQotICAg
ICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KHQsIHIsIGcsIGIpOwotICAgIGVsc2UgaWYgKHQt
PmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkKLSAgICAgICAgX2V3a190aWxl
X3BhaW50X3JnYjU2NSh0LCByLCBnLCBiKTsKLSAgICBlbHNlCi0gICAgICAgIEVSUigidW5rbm93
biBjb2xvciBzcGFjZTogJWQiLCB0LT5jc3BhY2UpOwotfQotCi0vKioKLSAqIENyZWF0ZSBhIG5l
dyB0aWxlIG9mIGdpdmVuIHNpemUsIHpvb20gbGV2ZWwgYW5kIGNvbG9yc3BhY2UuCi0gKgotICog
QWZ0ZXIgY3JlYXRlZCB0aGVzZSBwcm9wZXJ0aWVzIGFyZSBpbW11dGFibGUgYXMgdGhleSdyZSB0
aGUgYmFzaWMKLSAqIGNoYXJhY3RlcmlzdGljIG9mIHRoZSB0aWxlIGFuZCBhbnkgY2hhbmdlIHdp
bGwgbGVhZCB0byBpbnZhbGlkCi0gKiBtZW1vcnkgYWNjZXNzLgotICoKLSAqIE90aGVyIG1lbWJl
cnMgYXJlIG9mIGZyZWUtYWNjZXNzIGFuZCBubyBnZXR0ZXJzL3NldHRlcnMgYXJlCi0gKiBwcm92
aWRlZCBpbiBvcmRlcnIgdG8gYXZvaWQgZXhwZW5zaXZlIG9wZXJhdGlvbnMgb24gdGhvc2UsIGhv
d2V2ZXIKLSAqIHNvbWUgYXJlIGJldHRlciBtYW5pcHVsYXRlZCB3aXRoIHByb3ZpZGVkIGZ1bmN0
aW9ucywgc3VjaCBhcwotICogZXdrX3RpbGVfc2hvdygpIGFuZCBld2tfdGlsZV9oaWRlKCkgdG8g
Y2hhbmdlCi0gKiBAYyB2aXNpYmxlIG9yIGV3a190aWxlX3VwZGF0ZV9mdWxsKCksIGV3a190aWxl
X3VwZGF0ZV9hcmVhKCksCi0gKiBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkgdG8gY2hhbmdlIEBj
IHN0YXRzLm1pc3NlcywKLSAqIEBjIHN0YXRzLmZ1bGxfdXBkYXRlIGFuZCBAYyB1cGRhdGVzLgot
ICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoLCBmbG9hdCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlKQotewotICAgIEV2
YXNfQ29vcmQgKmVjOwotICAgIEV2YXNfQ29sb3JzcGFjZSAqZWNzOwotICAgIGZsb2F0ICpmOwot
ICAgIHNpemVfdCAqczsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICB1bnNpZ25lZCBpbnQgYXJlYTsK
LSAgICBzaXplX3QgYnl0ZXM7Ci0gICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OwotICAgIGNhaXJv
X3N0YXR1c190IHN0YXR1czsKLSAgICBpbnQgc3RyaWRlOwotICAgIEVjb3JlX0V2YXMgKmVlOwot
ICAgIGNvbnN0IGNoYXIgKmVuZ2luZTsKLQotICAgIGFyZWEgPSB3ICogaDsKLQotICAgIGlmIChj
c3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KSB7Ci0gICAgICAgIGJ5dGVzID0gYXJl
YSAqIDQ7Ci0gICAgICAgIHN0cmlkZSA9IHcgKiA0OwotICAgICAgICBmb3JtYXQgPSBDQUlST19G
T1JNQVRfQVJHQjMyOwotICAgIH0gZWxzZSBpZiAoY3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9S
R0I1NjVfQTVQKSB7Ci0gICAgICAgIGJ5dGVzID0gYXJlYSAqIDI7Ci0gICAgICAgIHN0cmlkZSA9
IHcgKiAyOwotICAgICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMTZfNTY1OwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQiLCBjc3BhY2UpOwot
ICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBEQkcoInNpemU6ICVkeCVkICglZCks
IHpvb206ICVmLCBjc3BhY2U9JWQiLCB3LCBoLCBhcmVhLCAoZG91YmxlKXpvb20sIGNzcGFjZSk7
Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVCh0LCBzaXplb2YoRXdrX1RpbGUpLCBOVUxMKTsKLSAg
ICB0LT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChldmFzKTsKLQotICAgIGVlID0gZWNv
cmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKLSAgICBlbmdpbmUgPSBlY29yZV9ldmFzX2Vu
Z2luZV9uYW1lX2dldChlZSk7Ci0gICAgaWYgKGVuZ2luZSAmJiAhc3RyY21wKGVuZ2luZSwgIm9w
ZW5nbF94MTEiKSkKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfY29udGVudF9oaW50X3NldCh0
LT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRfRFlOQU1JQyk7Ci0KLSAgICB0LT52aXNp
YmxlID0gMDsKLSAgICB0LT51cGRhdGVzID0gTlVMTDsKLQotICAgIG1lbXNldCgmdC0+c3RhdHMs
IDAsIHNpemVvZihFd2tfVGlsZV9TdGF0cykpOwotICAgIHQtPnN0YXRzLmFyZWEgPSBhcmVhOwot
Ci0gICAgLyogdWdseSwgYnV0IGxldCdzIGF2b2lkIGF0IGFsbCBjb3N0cyBoYXZpbmcgdXNlcnMg
dG8gbW9kaWZ5IHRob3NlICovCi0gICAgZWMgPSAoRXZhc19Db29yZCAqKSZ0LT53OwotICAgICpl
YyA9IHc7Ci0KLSAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPmg7Ci0gICAgKmVjID0gaDsKLQot
ICAgIGVjcyA9IChFdmFzX0NvbG9yc3BhY2UgKikmdC0+Y3NwYWNlOwotICAgICplY3MgPSBjc3Bh
Y2U7Ci0KLSAgICBmID0gKGZsb2F0ICopJnQtPnpvb207Ci0gICAgKmYgPSB6b29tOwotCi0gICAg
cyA9IChzaXplX3QgKikmdC0+Ynl0ZXM7Ci0gICAgKnMgPSBieXRlczsKLQotICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX3NpemVfc2V0KHQtPmltYWdlLCB0LT53LCB0LT5oKTsKLSAgICBldmFzX29iamVj
dF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0LT5pbWFnZSwgdC0+Y3NwYWNlKTsKLSAgICB0LT5waXhl
bHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldCh0LT5pbWFnZSwgRUlOQV9UUlVFKTsKLSAg
ICB0LT5zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEodC0+cGl4
ZWxzLCBmb3JtYXQsIHcsIGgsIHN0cmlkZSk7Ci0gICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9z
dGF0dXModC0+c3VyZmFjZSk7Ci0gICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VT
UykgewotICAgICAgICBFUlIoImZhaWxlZCB0byBjcmVhdGUgY2Fpcm8gc3VyZmFjZTogJXMiLAot
ICAgICAgICAgICAgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKLSAgICAgICAgZnJl
ZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdC0+Y2Fpcm8gPSBjYWly
b19jcmVhdGUodC0+c3VyZmFjZSk7Ci0gICAgc3RhdHVzID0gY2Fpcm9fc3RhdHVzKHQtPmNhaXJv
KTsKLSAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7Ci0gICAgICAgIEVS
UigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybzogJXMiLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0
YXR1cykpOwotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7Ci0gICAg
ICAgIGV2YXNfb2JqZWN0X2RlbCh0LT5pbWFnZSk7Ci0gICAgICAgIGZyZWUodCk7Ci0gICAgICAg
IHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZCh0
KTsKLQotICAgIHJldHVybiB0OwotfQotCi0vKioKLSAqIEZyZWUgdGlsZSBtZW1vcnkuCi0gKi8K
LXZvaWQgZXdrX3RpbGVfZnJlZShFd2tfVGlsZSAqdCkKLXsKLSAgICBfZXdrX3RpbGVfYWNjb3Vu
dF9mcmVlZCh0KTsKLQotICAgIGlmICh0LT51cGRhdGVzKQotICAgICAgICBlaW5hX3RpbGVyX2Zy
ZWUodC0+dXBkYXRlcyk7Ci0KLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7
Ci0gICAgY2Fpcm9fZGVzdHJveSh0LT5jYWlybyk7Ci0gICAgZXZhc19vYmplY3RfZGVsKHQtPmlt
YWdlKTsKLSAgICBmcmVlKHQpOwotfQotCi0vKioKLSAqIE1ha2UgdGhlIHRpbGUgdmlzaWJsZSwg
aW5jcmVtZW50aW5nIGl0cyBjb3VudGVyLgotICovCi12b2lkIGV3a190aWxlX3Nob3coRXdrX1Rp
bGUgKnQpCi17Ci0gICAgdC0+dmlzaWJsZSsrOwotICAgIGV2YXNfb2JqZWN0X3Nob3codC0+aW1h
Z2UpOwotfQotCi0vKioKLSAqIERlY3JlbWVudCB0aGUgdmlzaWJpbGl0eSBjb3VudGVyLCBtYWtp
bmcgaXQgaW52aXNpYmxlIGlmIG5lY2Vzc2FyeS4KLSAqLwotdm9pZCBld2tfdGlsZV9oaWRlKEV3
a19UaWxlICp0KQotewotICAgIHQtPnZpc2libGUtLTsKLSAgICBpZiAoIXQtPnZpc2libGUpCi0g
ICAgICAgIGV2YXNfb2JqZWN0X2hpZGUodC0+aW1hZ2UpOwotfQotCi0vKioKLSAqIFJldHVybnMg
RUlOQV9UUlVFIGlmIHRoZSB0aWxlIGlzIHZpc2libGUsIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgot
ICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfdmlzaWJsZV9nZXQoRXdrX1RpbGUgKnQpCi17Ci0gICAg
cmV0dXJuICEhdC0+dmlzaWJsZTsKLX0KLQotLyoqCi0gKiBNYXJrIHdob2xlIHRpbGUgYXMgZGly
dHkgYW5kIHJlcXVpcmluZyB1cGRhdGUuCi0gKi8KLXZvaWQgZXdrX3RpbGVfdXBkYXRlX2Z1bGwo
RXdrX1RpbGUgKnQpCi17Ci0gICAgLyogVE9ETzogbGlzdCBvZiB0aWxlcyBwZW5kaW5nIHVwZGF0
ZXM/ICovCi0gICAgdC0+c3RhdHMubWlzc2VzKys7Ci0KLSAgICBpZiAoIXQtPnN0YXRzLmZ1bGxf
dXBkYXRlKSB7Ci0gICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwotICAg
ICAgICBpZiAodC0+dXBkYXRlcykgewotICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVw
ZGF0ZXMpOwotICAgICAgICAgICAgdC0+dXBkYXRlcyA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLS8qKgotICogTWFyayB0aGUgc3BlY2lmaWMgc3ViYXJlYSBhcyBkaXJ0eSBhbmQgcmVx
dWlyaW5nIHVwZGF0ZS4KLSAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVfYXJlYShFd2tfVGlsZSAq
dCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnIpCi17Ci0gICAgLyogVE9ETzogbGlzdCBvZiB0aWxl
cyBwZW5kaW5nIHVwZGF0ZXM/ICovCi0gICAgdC0+c3RhdHMubWlzc2VzKys7Ci0KLSAgICBpZiAo
dC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghci0+eCAm
JiAhci0+eSAmJiByLT53ID09IHQtPncgJiYgci0+aCA9PSB0LT5oKSB7Ci0gICAgICAgIHQtPnN0
YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwotICAgICAgICBpZiAodC0+dXBkYXRlcykgewot
ICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOwotICAgICAgICAgICAgdC0+
dXBkYXRlcyA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGlmICghdC0+dXBkYXRlcykgewotICAgICAgICB0LT51cGRhdGVzID0gZWluYV90aWxlcl9uZXco
dC0+dywgdC0+aCk7Ci0gICAgICAgIGlmICghdC0+dXBkYXRlcykgewotICAgICAgICAgICAgQ1JJ
VElDQUwoImNvdWxkIG5vdCBjcmVhdGUgZWluYV90aWxlciAlZHglZC4iLCB0LT53LCB0LT5oKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGVpbmFfdGlsZXJf
cmVjdF9hZGQodC0+dXBkYXRlcywgcik7Ci19Ci0KLS8qKgotICogRm9yIGVhY2ggdXBkYXRlZCBy
ZWdpb24sIGNhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uLgotICoKLSAqIFRoaXMgd2lsbCBub3QgY2hh
bmdlIHRoZSB0aWxlIHN0YXRpc3RpY3Mgb3IgY2xlYXIgdGhlIHByb2Nlc3NlZAotICogdXBkYXRl
cywgdXNlIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSBmb3IgdGhhdC4KLSAqLwotdm9pZCBld2tf
dGlsZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGUgKnQsIHZvaWQgKCpjYikodm9pZCAqZGF0YSwg
RXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpk
YXRhKQotewotICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkgewotICAgICAgICBFaW5hX1Jl
Y3RhbmdsZSByOwotICAgICAgICByLnggPSAwOwotICAgICAgICByLnkgPSAwOwotICAgICAgICBy
LncgPSB0LT53OwotICAgICAgICByLmggPSB0LT5oOwotI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VO
VF9SRU5ERVJfVElNRQotICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1ldjsKLSAgICAgICAgZG91
YmxlIHJlbmRlcl9zdGFydDsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0aW1ldiwgTlVMTCk7Ci0g
ICAgICAgIHJlbmRlcl9zdGFydCA9IChkb3VibGUpdGltZXYudHZfc2VjICsKLSAgICAgICAgICAg
ICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDApOwotI2VuZGlmCi0gICAgICAgIGNi
KCh2b2lkICopZGF0YSwgdCwgJnIpOwotI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJf
VElNRQotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCBOVUxMKTsKLSAgICAgICAgdC0+c3Rh
dHMucmVuZGVyX3RpbWUgPSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCi0gICAgICAgICAgICAoKChk
b3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKSAtIHJlbmRlcl9zdGFydDsKLSNlbmRpZgot
ICAgIH0gZWxzZSBpZiAodC0+dXBkYXRlcykgewotICAgICAgICBFaW5hX0l0ZXJhdG9yICppdHIg
PSBlaW5hX3RpbGVyX2l0ZXJhdG9yX25ldyh0LT51cGRhdGVzKTsKLSAgICAgICAgRWluYV9SZWN0
YW5nbGUgKnI7Ci0gICAgICAgIGlmICghaXRyKSB7Ci0gICAgICAgICAgICBDUklUSUNBTCgiY291
bGQgbm90IGNyZWF0ZSB0aWxlciBpdGVyYXRvciEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRyLCByKQotICAgICAgICAg
ICAgY2IoKHZvaWQgKilkYXRhLCB0LCByKTsKLSAgICAgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0
cik7Ci0gICAgfQotfQotCi0vKioKLSAqIENsZWFyIGFsbCB1cGRhdGVzIGluIHJlZ2lvbiwgaWYg
YW55LgotICoKLSAqIFRoaXMgd2lsbCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcywgc3BlY2lh
bGx5IHplcm8gc3RhdC5taXNzZXMKLSAqIGFuZCB1bnNldCBzdGF0cy5mdWxsX3VwZGF0ZS4gSWYg
dC0+dXBkYXRlcyBleGlzdGVkLCB0aGVuIGl0IHdpbGwgYmUKLSAqIGRlc3Ryb3llZC4KLSAqCi0g
KiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGFmdGVyIGV3a190aWxlX3VwZGF0ZXNf
cHJvY2VzcygpIGlzCi0gKiBjYWxsZWQuCi0gKi8KLXZvaWQgZXdrX3RpbGVfdXBkYXRlc19jbGVh
cihFd2tfVGlsZSAqdCkKLXsKLSAgICAvKiBUT0RPOiByZW1vdmUgZnJvbSBsaXN0IG9mIHBlbmRp
bmcgdXBkYXRlcz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMgPSAwOwotCi0gICAgaWYgKHQtPnN0
YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IDA7Ci0gICAg
ZWxzZSBpZiAodC0+dXBkYXRlcykgewotICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRl
cyk7Ci0gICAgICAgIHQtPnVwZGF0ZXMgPSBOVUxMOwotICAgIH0KLX0KLQotdHlwZWRlZiBzdHJ1
Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50
cnk7Ci1zdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSB7Ci0gICAgRXdrX1RpbGUg
KnRpbGU7Ci0gICAgaW50IHdlaWdodDsKLSAgICBzdHJ1Y3QgewotICAgICAgICB2b2lkICgqY2Ip
KHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KTsKLSAgICAgICAgdm9pZCAqZGF0YTsKLSAgICB9IHRp
bGVfZnJlZTsKLX07Ci0KLXN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlIHsKLSAgICBzdHJ1
Y3QgewotICAgICAgICBFaW5hX0xpc3QgKmxpc3Q7Ci0gICAgICAgIHNpemVfdCBjb3VudDsKLSAg
ICAgICAgc2l6ZV90IGFsbG9jYXRlZDsKLSAgICB9IGVudHJpZXM7Ci0gICAgc3RydWN0IHsKLSAg
ICAgICAgc2l6ZV90IG1heDsgIC8qKjwgd2F0ZXJtYXJrIChpbiBieXRlcykgdG8gc3RhcnQgZnJl
ZWluZyB0aWxlcyAqLwotICAgICAgICBzaXplX3QgdXNlZDsgLyoqPCBpbiBieXRlcywgbWF5YmUg
bW9yZSB0aGFuIG1heC4gKi8KLSAgICB9IG1lbW9yeTsKLSAgICBzdHJ1Y3QgewotICAgICAgICBF
dmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0gICAgICAgIGZsb2F0IHpvb207Ci0gICAgICAgIEVpbmFf
Qm9vbCBsb2NrZWQ7Ci0gICAgfSBsb2NrZWQ7Ci0gICAgaW50IHJlZmVyZW5jZXM7Ci0gICAgdW5z
aWduZWQgaW50IGZyb3plbjsKLX07Ci0KLXN0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURf
Q0FDSEVfQUxMT0NBVEVfSU5JVElBTCA9IDEyODsKLXN0YXRpYyBjb25zdCBzaXplX3QgVElMRV9V
TlVTRURfQ0FDSEVfQUxMT0NBVEVfU1RFUCA9IDE2Owotc3RhdGljIGNvbnN0IHNpemVfdCBUSUxF
X1VOVVNFRF9DQUNIRV9NQVhfRlJFRSA9IDMyOwotCi0vKioKLSAqIENhY2hlIG9mIHVudXNlZCB0
aWxlcyAodGhvc2UgdGhhdCBhcmUgbm90IHZpc2libGUpLgotICoKLSAqIFRoZSBjYWNoZSBvZiB1
bnVzZWQgdGlsZXMuCi0gKgotICogQHBhcmFtIG1heCBjYWNoZSBzaXplIGluIGJ5dGVzLgotICoK
LSAqIEByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgdXNlCi0g
KiAgICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKCkgdG8gcmVsZWFzZSByZXNvdXJj
ZXMuIElmIG5vdAotICogICAgICAgICBwb3NzaWJsZSB0byBhbGxvY2F0ZSBtZW1vcnksIEBjIE5V
TEwgaXMgcmV0dXJuZWQuCi0gKi8KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51
c2VkX2NhY2hlX25ldyhzaXplX3QgbWF4KQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjOwotCi0gICAgQ0FMTE9DX09SX09PTV9SRVQodHVjLCBzaXplb2YoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlKSwgTlVMTCk7Ci0KLSAgICBEQkcoInR1Yz0lcCIsIHR1Yyk7Ci0gICAgdHVjLT5tZW1v
cnkubWF4ID0gbWF4OwotICAgIHR1Yy0+cmVmZXJlbmNlcyA9IDE7Ci0gICAgcmV0dXJuIHR1YzsK
LX0KLQotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBF
dmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4odHVjKTsKLQotICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfVFJVRTsKLSAgICB0dWMt
PmxvY2tlZC54ID0geDsKLSAgICB0dWMtPmxvY2tlZC55ID0geTsKLSAgICB0dWMtPmxvY2tlZC53
ID0gdzsKLSAgICB0dWMtPmxvY2tlZC5oID0gaDsKLSAgICB0dWMtPmxvY2tlZC56b29tID0gem9v
bTsKLX0KLQotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEoRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVj
KTsKLQotICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfRkFMU0U7Ci19Ci0KLS8qKgotICog
RnJlZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCi0gKgotICogVGhpcyBmdW5jdGlvbiBzaG91bGQg
YmUgb25seSBjYWxsZWQgYnkgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmCi0gKiBmdW5jdGlv
bi4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGhvdXQgY29uc2lkZXJpbmcgcmVmZXJlbmNlIGNv
dW50aW5nCi0gKiBtYXkgbGVhZCB0byB1bmtub3duIHJlc3VsdHMuCi0gKgotICogVGhvc2UgdGls
ZXMgdGhhdCBhcmUgc3RpbGwgdmlzaWJsZSB3aWxsIHJlbWFpbiBsaXZlLiBUaGUgdW51c2VkCi0g
KiB0aWxlcyB3aWxsIGJlIGZyZWVkLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3VucmVmKCkKLSAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHR1Yyk7Ci0KLSAgICBEQkcoInR1Yz0lcCwgIgotICAgICAgICAiZW50cmllcz0oY291bnQ6
JXpkLCBhbGxvY2F0ZWQ6JXpkKSwgIgotICAgICAgICAibWVtb3J5PShtYXg6JXpkLCB1c2VkOiV6
ZCkiLAotICAgICAgICB0dWMsIHR1Yy0+ZW50cmllcy5jb3VudCwgdHVjLT5lbnRyaWVzLmFsbG9j
YXRlZCwKLSAgICAgICAgdHVjLT5tZW1vcnkubWF4LCB0dWMtPm1lbW9yeS51c2VkKTsKLQotICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOwotICAgIGZyZWUodHVjKTsKLX0KLQot
LyoqCi0gKiBDbGVhciBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCi0gKgotICogQW55IHRpbGVzIHRo
YXQgYXJlIGluIHRoZSBjYWNoZSBhcmUgZnJlZWQuIFRoZSBvbmx5IHRpbGVzIHRoYXQgYXJlCi0g
KiBrZXB0IGFyZSB0aG9zZSB0aGF0IGFyZW4ndCBpbiB0aGUgY2FjaGUgKGkuZS4gdGhhdCBhcmUg
dmlzaWJsZSkuCi0gKi8KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAq
aXRyOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0KLSAgICBpZiAoIXR1
Yy0+ZW50cmllcy5jb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRUlOQV9MSVNUX0ZSRUUo
dHVjLT5lbnRyaWVzLmxpc3QsIGl0cikgewotICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHIt
PnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUpOwotICAgICAgICBmcmVlKGl0cik7Ci0gICAgfQot
Ci0gICAgdHVjLT5tZW1vcnkudXNlZCA9IDA7Ci0gICAgdHVjLT5lbnRyaWVzLmNvdW50ID0gMDsK
LX0KLQotLyoqCi0gKiBIb2xkIHJlZmVyZW5jZSB0byBjYWNoZS4KLSAqCi0gKiBAcmV0dXJuIHNh
bWUgcG9pbnRlciBhcyB0YWtlbi4KLSAqCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91
bnJlZigpCi0gKi8KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3JlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodHVjLCBOVUxMKTsKLSAgICB0dWMtPnJlZmVyZW5jZXMrKzsKLSAgICBy
ZXR1cm4gdHVjOwotfQotCi0vKioKLSAqIFJlbGVhc2UgY2FjaGUgcmVmZXJlbmNlLCBmcmVlaW5n
IGl0IGlmIGl0IGRyb3BzIHRvIHplcm8uCi0gKgotICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfcmVmKCkKLSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoKQotICovCi12b2lk
IGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykK
LXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotICAgIHR1Yy0+cmVmZXJl
bmNlcy0tOwotICAgIGlmICghdHVjLT5yZWZlcmVuY2VzKQotICAgICAgICBfZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2ZyZWUodHVjKTsKLX0KLQotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4
X3NldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IG1heCkKLXsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsK
LX0KLQotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh0dWMsIDApOwotICAgIHJldHVybiB0dWMtPm1lbW9yeS5tYXg7Ci19Ci0KLXNpemVfdCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Ci0gICAg
cmV0dXJuIHR1Yy0+bWVtb3J5LnVzZWQ7Ci19Ci0KLXNpemVfdCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBieXRlcykKLXsKLSAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgKml0cjsKLSAgICBFaW5hX0xpc3QgKmwsICps
X25leHQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Ci0gICAg
c2l6ZV90IGRvbmU7Ci0gICAgdW5zaWduZWQgaW50IGNvdW50OwotCi0gICAgaWYgKCF0dWMtPmVu
dHJpZXMuY291bnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChieXRlcyA8IDEpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgLyoKLSAgICAgKiBOT1RFOiB0aGUgY2FjaGUgaXMgYSBGSUZP
IHF1ZXVlIGN1cnJlbnRseS4KLSAgICAgKiBEb24ndCBuZWVkIHRvIHNvcnQgYW55IG1vcmUuCi0g
ICAgICovCi0KLSAgICBkb25lID0gMDsKLSAgICBjb3VudCA9IDA7Ci0gICAgRUlOQV9MSVNUX0ZP
UkVBQ0hfU0FGRSh0dWMtPmVudHJpZXMubGlzdCwgbCwgbF9uZXh0LCBpdHIpIHsKLSAgICAgICAg
RXdrX1RpbGUgKnQgPSBpdHItPnRpbGU7Ci0gICAgICAgIGlmIChkb25lID4gYnl0ZXMpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKHR1Yy0+bG9ja2VkLmxvY2tlZAotICAgICAgICAg
ICAgJiYgdC0+eCArIHQtPncgPiB0dWMtPmxvY2tlZC54Ci0gICAgICAgICAgICAmJiB0LT55ICsg
dC0+aCA+IHR1Yy0+bG9ja2VkLnkKLSAgICAgICAgICAgICYmIHQtPnggPCB0dWMtPmxvY2tlZC54
ICsgdHVjLT5sb2NrZWQudwotICAgICAgICAgICAgJiYgdC0+eSA8IHR1Yy0+bG9ja2VkLnkgKyB0
dWMtPmxvY2tlZC5oCi0gICAgICAgICAgICAmJiB0LT56b29tID09IHR1Yy0+bG9ja2VkLnpvb20p
IHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIGRvbmUgKz0gc2l6
ZW9mKEV3a19UaWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7Ci0gICAgICAgIGl0ci0+dGlsZV9mcmVl
LmNiKGl0ci0+dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7Ci0gICAgICAgIHR1Yy0+ZW50cmll
cy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBsKTsKLSAg
ICAgICAgZnJlZShpdHIpOwotICAgICAgICBjb3VudCsrOwotICAgIH0KLQotICAgIHR1Yy0+bWVt
b3J5LnVzZWQgLT0gZG9uZTsKLSAgICB0dWMtPmVudHJpZXMuY291bnQgLT0gY291bnQ7Ci0KLSAg
ICByZXR1cm4gZG9uZTsKLX0KLQotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0dWMpOwotICAgIGlmICh0dWMtPm1lbW9yeS51c2VkIDw9IHR1Yy0+bWVtb3J5Lm1h
eCkKLSAgICAgICAgcmV0dXJuOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCh0dWMs
IHR1Yy0+bWVtb3J5LnVzZWQgLSB0dWMtPm1lbW9yeS5tYXgpOwotICAgIGlmICh0dWMtPm1lbW9y
eS51c2VkID4gdHVjLT5tZW1vcnkubWF4KQotICAgICAgICBDUklUSUNBTCgiQ2FjaGUgc3RpbGwg
dXNpbmcgdG9vIG11Y2ggbWVtb3J5OiAlemQgS0I7IG1heDogJXpkIEtCIiwKLSAgICAgICAgICAg
ICAgICAgdHVjLT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4KTsKLX0KLQotLyoqCi0gKiBG
cmVlemUgY2FjaGUgdG8gbm90IGRvIG1haW50ZW5hbmNlIHRhc2tzLgotICoKLSAqIE1haW50ZW5h
bmNlIHRhc2tzIG9wdGltaXplIGNhY2hlIHVzYWdlLCBidXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91
bGQKLSAqIGhvbGQgb24gdGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFzdCBvcGVyYXRpb24sIGluIHRo
aXMgY2FzZSB3ZSBmcmVlemUKLSAqIHdoaWxlIG9wZXJhdGluZyBhbmQgdGhlbiB0aGF3IHdoZW4g
d2UncmUgZG9uZS4KLSAqCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KCkKLSAq
Lwotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKEV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqdHVjKQotewotICAgIHR1Yy0+ZnJvemVuKys7Ci19Ci0KLS8qKgotICogVW5mcmVlemVzIG1h
aW50ZW5hbmNlIHRhc2tzLgotICoKLSAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQg
b2YgZnJlZXplLCB0aGVuIG1haW50ZW5hbmNlIHRhc2tzCi0gKiB3aWxsIHJ1biBpbW1lZGlhdGVs
eS4KLSAqLwotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YykKLXsKLSAgICBpZiAoIXR1Yy0+ZnJvemVuKSB7Ci0gICAgICAgIEVSUigidGhh
d2luZyBtb3JlIHRoYW4gZnJlZXppbmchIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICB0dWMtPmZyb3plbi0tOwotfQotCi0vKioKLSAqIEdldCB0aWxlIGZyb20gY2FjaGUgb2YgdW51
c2VkIHRpbGVzLCByZW1vdmluZyBpdCBmcm9tIHRoZSBjYWNoZS4KLSAqCi0gKiBJZiB0aGUgdGls
ZSBpcyB1c2VkLCB0aGVuIGl0J3Mgbm90IGluIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgc28gaXQK
LSAqIGlzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUgYW5kIG1heSBiZSBnaXZlbiBiYWNrIHdpdGgK
LSAqIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCgpLgotICoKLSAqIEBwYXJhbSB0dWMg
Y2FjaGUgb2YgdW51c2VkIHRpbGVzCi0gKiBAcGFyYW0gdCB0aGUgdGlsZSB0byBiZSByZW1vdmVk
IGZyb20gRXdrX1RpbGVfVW51c2VkX0NhY2hlLgotICoKLSAqIEByZXR1cm4gI0VJTkFfVFJVRSBv
biBzdWNjZXNzLCAjRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKi8KLUVpbmFfQm9vbCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19U
aWxlICp0KQotewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqZW50cnk7Ci0gICAg
RWluYV9MaXN0ICplLCAqbDsKLQotICAgIGUgPSBOVUxMOwotICAgIEVJTkFfTElTVF9GT1JFQUNI
KHR1Yy0+ZW50cmllcy5saXN0LCBsLCBlbnRyeSkKLSAgICB7Ci0gICAgICAgIGlmIChlbnRyeS0+
dGlsZSA9PSB0KSB7Ci0gICAgICAgICAgICBlID0gbDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGlmICghZSkgewotICAgICAgICBFUlIoInRpbGUgJXAgbm90IGZv
dW5kIGluIGNhY2hlICVwIiwgdCwgdHVjKTsKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0g
ICAgfQotCi0gICAgdHVjLT5lbnRyaWVzLmNvdW50LS07Ci0gICAgdHVjLT5tZW1vcnkudXNlZCAt
PSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7Ci0gICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBl
aW5hX2xpc3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGUpOwotICAgIGZyZWUoZW50
cnkpOwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotLyoqCi0gKiBQdXQgdGlsZSBpbnRv
IGNhY2hlIG9mIHVudXNlZCB0aWxlcywgYWRkaW5nIGl0IHRvIHRoZSBjYWNoZS4KLSAqCi0gKiBU
aGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBAYyB0LT52aXNpYmxlIGlzIEBjIDAgYW5kIG5vIG9i
amVjdHMgYXJlCi0gKiB1c2luZyB0aGUgdGlsZSBhbnltb3JlLCBtYWtpbmcgaXQgYXZhaWxhYmxl
IHRvIGJlIGV4cGlyZWQgYW5kIGhhdmUKLSAqIGl0cyBtZW1vcnkgcmVwbGFjZWQuCi0gKgotICog
Tm90ZSB0aGF0IHRpbGVzIGFyZSBub3QgYXV0b21hdGljYWxseSBkZWxldGVkIGlmIGNhY2hlIGlz
IGZ1bGwsCi0gKiBpbnN0ZWFkIHRoZSBjYWNoZSB3aWxsIGhhdmUgbW9yZSBieXRlcyB1c2VkIHRo
YW4gbWF4aW11bSBhbmQgb25lCi0gKiBjYW4gY2FsbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0
b19mbHVzaCgpIHRvIGZyZWUgdGhlbS4gVGhpcyBpcyBkb25lCi0gKiBiZWNhdXNlIHVzdWFsbHkg
d2Ugd2FudCBhIGxhenkgb3BlcmF0aW9uIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCi0gKgotICog
QHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMKLSAqIEBwYXJhbSB0IHRpbGUgdG8gYmUg
YWRkZWQgdG8gY2FjaGUuCi0gKiBAcGFyYW0gdGlsZV9mcmVlX2NiIGZ1bmN0aW9uIHVzZWQgdG8g
ZnJlZSB0aWxlcy4KLSAqIEBwYXJhbSBkYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNrIHRvIEBhIHRp
bGVfZnJlZV9jYiBhcyBmaXJzdCBhcmd1bWVudC4KLSAqCi0gKiBAcmV0dXJuICNFSU5BX1RSVUUg
b24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLiBJZiBAYyB0LT52aXNpYmxlCi0gKiAg
ICAgICAgIGlzIG5vdCAjRUlOQV9GQUxTRSwgdGhlbiBpdCB3aWxsIHJldHVybiAjRUlOQV9GQUxT
RS4KLSAqCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkKLSAqLwot
RWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YywgRXdrX1RpbGUgKnQsIHZvaWQgKCp0aWxlX2ZyZWVfY2IpKHZvaWQgKmRhdGEs
IEV3a19UaWxlICp0KSwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLSAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGVfRW50cnkgKmU7Ci0KLSAgICBpZiAodC0+dmlzaWJsZSkgewotICAgICAgICBFUlIoInRp
bGU9JXAgaXMgbm90IHVudXNlZCAodmlzaWJsZT0lZCkiLCB0LCB0LT52aXNpYmxlKTsKLSAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgfQotCi0gICAgTUFMTE9DX09SX09PTV9SRVQoZSwg
c2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSksIEVJTkFfRkFMU0UpOwotICAgIHR1
Yy0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X2FwcGVuZCh0dWMtPmVudHJpZXMubGlzdCwgZSk7
Ci0gICAgaWYgKGVpbmFfZXJyb3JfZ2V0KCkpIHsKLSAgICAgICAgRVJSKCJMaXN0IGFsbG9jYXRp
b24gZmFpbGVkIik7Ci0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIGUt
PnRpbGUgPSB0OwotICAgIGUtPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUg
c29ydCAqLwotICAgIGUtPnRpbGVfZnJlZS5jYiA9IHRpbGVfZnJlZV9jYjsKLSAgICBlLT50aWxl
X2ZyZWUuZGF0YSA9ICh2b2lkICopZGF0YTsKLQotICAgIHR1Yy0+ZW50cmllcy5jb3VudCsrOwot
ICAgIHR1Yy0+bWVtb3J5LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxlKSArIHQtPmJ5dGVzOwotCi0g
ICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJn
KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSAqaXRyOwotICAgIEVpbmFfTGlzdCAqbDsKLSAgICBpbnQgY291bnQgPSAw
OwotICAgIHByaW50ZigiQ2FjaGUgb2YgdW51c2VkIHRpbGVzOiBlbnRyaWVzOiAlenUvJXp1LCBt
ZW1vcnk6ICV6dS8lenVcbiIsCi0gICAgICAgICAgIHR1Yy0+ZW50cmllcy5jb3VudCwgdHVjLT5l
bnRyaWVzLmFsbG9jYXRlZCwKLSAgICAgICAgICAgdHVjLT5tZW1vcnkudXNlZCwgdHVjLT5tZW1v
cnkubWF4KTsKLQotICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBp
dHIpIHsKLSAgICAgICAgY29uc3QgRXdrX1RpbGUgKnQgPSBpdHItPnRpbGU7Ci0gICAgICAgIHBy
aW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwKLSAgICAgICAgICAgICAgIHQt
PmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLAotICAgICAgICAgICAgICAgdC0+dmlz
aWJsZSA/ICcqJzogJyAnKTsKLQotICAgICAgICBpZiAoIShjb3VudCAlIDQpKQotICAgICAgICAg
ICAgcHJpbnRmKCJcbiIpOwotICAgIH0KLQotICAgIHByaW50ZigiXG4iKTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjE2ODU3Mjk0MDg5
OWJkYmU4NzFkNjMwMWZmZGNiMTRhYzQ1M2JiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCkBAIC0wLDAgKzEsODUxIEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfbW9kZWwuaCIKKworI2luY2x1ZGUg
ImV3a190aWxlZF9iYWNraW5nX3N0b3JlLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX3ByaXZhdGUu
aCIKKyNpbmNsdWRlIDxFY29yZV9FdmFzLmg+CisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUg
PGVpbmFfc2FmZXR5X2NoZWNrcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50
dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPiAvLyBYWFggUkVNT1ZFIE1FIExBVEVSCisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZmRlZiBUSUxFX1NUQVRT
X0FDQ09VTlRfUkVOREVSX1RJTUUKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisKKyNk
ZWZpbmUgSURYKGNvbCwgcm93LCByb3dzcGFuKSAoY29sICsgKHJvdyAqIHJvd3NwYW4pKQorCisj
aWZkZWYgREVCVUdfTUVNX0xFQUtTCitzdGF0aWMgdWludDY0X3QgdGlsZXNfYWxsb2NhdGVkID0g
MDsKK3N0YXRpYyB1aW50NjRfdCB0aWxlc19mcmVlZCA9IDA7CitzdGF0aWMgdWludDY0X3QgYnl0
ZXNfYWxsb2NhdGVkID0gMDsKK3N0YXRpYyB1aW50NjRfdCBieXRlc19mcmVlZCA9IDA7CisKK3N0
cnVjdCB0aWxlX2FjY291bnQgeworICAgIEV2YXNfQ29vcmQgc2l6ZTsKKyAgICBzdHJ1Y3Qgewor
ICAgICAgICB1aW50NjRfdCBhbGxvY2F0ZWQ7CisgICAgICAgIHVpbnQ2NF90IGZyZWVkOworICAg
IH0gdGlsZXMsIGJ5dGVzOworfTsKKworc3RhdGljIHNpemVfdCBhY2NvdW50aW5nX2xlbiA9IDA7
CitzdGF0aWMgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjb3VudGluZyA9IDA7CisKK3N0YXRpYyBp
bmxpbmUgc3RydWN0IHRpbGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3
a19UaWxlICp0KQoreworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYzsKKyAgICBzaXplX3Qg
aTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBhY2NvdW50aW5nX2xlbjsgaSsrKSB7CisgICAgICAg
IGlmIChhY2NvdW50aW5nW2ldLnNpemUgPT0gdC0+dykKKyAgICAgICAgICAgIHJldHVybiBhY2Nv
dW50aW5nICsgaTsKKyAgICB9CisKKyAgICBpID0gKGFjY291bnRpbmdfbGVuICsgMSkgKiBzaXpl
b2Yoc3RydWN0IHRpbGVfYWNjb3VudCk7CisgICAgUkVBTExPQ19PUl9PT01fUkVUKGFjY291bnRp
bmcsIGksIDApOworCisgICAgYWNjID0gYWNjb3VudGluZyArIGFjY291bnRpbmdfbGVuOworICAg
IGFjYy0+c2l6ZSA9IHQtPnc7CisgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQgPSAwOworICAgIGFj
Yy0+dGlsZXMuZnJlZWQgPSAwOworICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkID0gMDsKKyAgICBh
Y2MtPmJ5dGVzLmZyZWVkID0gMDsKKworICAgIGFjY291bnRpbmdfbGVuKys7CisKKyAgICByZXR1
cm4gYWNjOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfYWxsb2Nh
dGVkKGNvbnN0IEV3a19UaWxlICp0KQoreworICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9
IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0KTsKKyAgICBpZiAoIWFjYykKKyAgICAgICAgcmV0dXJu
OworICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOworICAgIGFjYy0+dGlsZXMu
YWxsb2NhdGVkKys7CisKKyAgICBieXRlc19hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgdGls
ZXNfYWxsb2NhdGVkKys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3Vu
dF9mcmVlZChjb25zdCBFd2tfVGlsZSAqdCkKK3sKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICph
Y2MgPSBfZXdrX3RpbGVfYWNjb3VudF9nZXQodCk7CisgICAgaWYgKCFhY2MpCisgICAgICAgIHJl
dHVybjsKKworICAgIGFjYy0+Ynl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgYWNjLT50aWxl
cy5mcmVlZCsrOworCisgICAgYnl0ZXNfZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgdGlsZXNfZnJl
ZWQrKzsKK30KKwordm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQoreworICAgIHN0
cnVjdCB0aWxlX2FjY291bnQgKmFjYzsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NfZW5k
OworCisgICAgcHJpbnRmKCJUSUxFIEJBTEFOQ0U6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0
IjolIlBSSXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Ijol
IlBSSXU2NCJdXG4iLAorICAgICAgICAgICAgdGlsZXNfYWxsb2NhdGVkLCB0aWxlc19mcmVlZCwg
dGlsZXNfYWxsb2NhdGVkIC0gdGlsZXNfZnJlZWQsCisgICAgICAgICAgICBieXRlc19hbGxvY2F0
ZWQsIGJ5dGVzX2ZyZWVkLCBieXRlc19hbGxvY2F0ZWQgLSBieXRlc19mcmVlZCk7CisKKyAgICBp
ZiAoIWFjY291bnRpbmdfbGVuKQorICAgICAgICByZXR1cm47CisKKyAgICBhY2MgPSBhY2NvdW50
aW5nOworICAgIGFjY19lbmQgPSBhY2MgKyBhY2NvdW50aW5nX2xlbjsKKyAgICBwcmludGYoIkJF
R0lOOiBUSUxFIEJBTEFOQ0UgREVUQUlMUyAoVE8gVEhJUyBNT01FTlQhKTpcbiIpOworICAgIGZv
ciAoOyBhY2MgPCBhY2NfZW5kOyBhY2MrKykgeworICAgICAgICB1aW50NjRfdCB0aWxlcywgYnl0
ZXM7CisKKyAgICAgICAgdGlsZXMgPSBhY2MtPnRpbGVzLmFsbG9jYXRlZCAtIGFjYy0+dGlsZXMu
ZnJlZWQ7CisgICAgICAgIGJ5dGVzID0gYWNjLT5ieXRlcy5hbGxvY2F0ZWQgLSBhY2MtPmJ5dGVz
LmZyZWVkOworCisgICAgICAgIHByaW50ZigiICAgJTRkOiB0aWxlc1srJTQiUFJJdTY0IiwtJTQi
UFJJdTY0IjolNCJQUkl1NjQiXSAiCisgICAgICAgICAgICAgICAiYnl0ZXNbKyU4IlBSSXU2NCIs
LSU4IlBSSXU2NCI6JTgiUFJJdTY0Il0lc1xuIiwKKyAgICAgICAgICAgICAgIGFjYy0+c2l6ZSwK
KyAgICAgICAgICAgICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkLCBhY2MtPnRpbGVzLmZyZWVkLCB0
aWxlcywKKyAgICAgICAgICAgICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkLCBhY2MtPmJ5dGVzLmZy
ZWVkLCBieXRlcywKKyAgICAgICAgICAgICAgIChieXRlcyB8fCB0aWxlcykgPyAiIFBPU1NJQkxF
IExFQUsiIDogIiIpOworICAgIH0KKyAgICBwcmludGYoIkVORDogVElMRSBCQUxBTkNFIERFVEFJ
TFMgKFRPIFRISVMgTU9NRU5UISk6XG4iKTsKK30KKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQorc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3a19UaWxlICp0
KSB7IH0KKwordm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQoreworICAgIHByaW50
ZigiY29tcGlsZSB3ZWJraXQgd2l0aCBERUJVR19NRU1fTEVBS1MgZGVmaW5lZCFcbiIpOworfQor
I2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KEV3a19U
aWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQoreworICAgIHVpbnQzMl90
ICpkc3QzMiwgKmRzdDMyX2VuZCwgYzE7CisgICAgdWludDY0X3QgKmRzdDY0LCAqZHN0NjRfZW5k
LCBjMjsKKworICAgIGMxID0gMHhmZjAwMDAwMCB8ICgodWludDMyX3QpciA8PCAxNikgfCAoKHVp
bnQzMl90KWcgPDwgOCkgfCBiOworICAgIGMyID0gKCh1aW50NjRfdCljMSA8PCAzMikgfCBjMTsK
KworICAgIGRzdDY0ID0gKHVpbnQ2NF90ICopdC0+cGl4ZWxzOworICAgIGRzdDY0X2VuZCA9IGRz
dDY0ICsgKCh0LT5ieXRlcyAvIDgpICYgfjcpOworICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2Vu
ZDsgZHN0NjQgKz0gOCkgeworICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGlu
c3RydWN0aW9ucyAqLworICAgICAgICBkc3Q2NFswXSA9IGMyOworICAgICAgICBkc3Q2NFsxXSA9
IGMyOworICAgICAgICBkc3Q2NFsyXSA9IGMyOworICAgICAgICBkc3Q2NFszXSA9IGMyOworICAg
ICAgICBkc3Q2NFs0XSA9IGMyOworICAgICAgICBkc3Q2NFs1XSA9IGMyOworICAgICAgICBkc3Q2
NFs2XSA9IGMyOworICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAgIH0KKworICAgIGRzdDMyID0g
KHVpbnQzMl90ICopZHN0NjRfZW5kOworICAgIGRzdDMyX2VuZCA9ICh1aW50MzJfdCAqKSh0LT5w
aXhlbHMgKyB0LT5ieXRlcyk7CisgICAgZm9yICg7IGRzdDMyIDwgZHN0MzJfZW5kOyBkc3QzMisr
KQorICAgICAgICAqZHN0MzIgPSBjMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGls
ZV9wYWludF9yZ2I1NjUoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90
IGIpCit7CisgICAgdWludDE2X3QgKmRzdDE2LCAqZHN0MTZfZW5kLCBjMTsKKyAgICB1aW50NjRf
dCAqZHN0NjQsICpkc3Q2NF9lbmQsIGMyOworCisgICAgYzEgPSAoKCgociA+PiAzKSAmIDB4MWYp
IDw8IDExKSB8CisgICAgICAgICAgKCgoZyA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKKyAgICAgICAg
ICAoKGIgPj4gMykgJiAweDFmKSk7CisKKyAgICBjMiA9ICgoKHVpbnQ2NF90KWMxIDw8IDQ4KSB8
ICgodWludDY0X3QpYzEgPDwgMzIpIHwKKyAgICAgICAgICAoKHVpbnQ2NF90KWMxIDw8IDE2KSB8
IGMxKTsKKworICAgIGRzdDY0ID0gKHVpbnQ2NF90ICopdC0+cGl4ZWxzOworICAgIGRzdDY0X2Vu
ZCA9IGRzdDY0ICsgKCh0LT5ieXRlcyAvIDgpICYgfjcpOworICAgIGZvciAoOyBkc3Q2NCA8IGRz
dDY0X2VuZDsgZHN0NjQgKz0gOCkgeworICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBO
RU9OIGluc3RydWN0aW9ucyAqLworICAgICAgICBkc3Q2NFswXSA9IGMyOworICAgICAgICBkc3Q2
NFsxXSA9IGMyOworICAgICAgICBkc3Q2NFsyXSA9IGMyOworICAgICAgICBkc3Q2NFszXSA9IGMy
OworICAgICAgICBkc3Q2NFs0XSA9IGMyOworICAgICAgICBkc3Q2NFs1XSA9IGMyOworICAgICAg
ICBkc3Q2NFs2XSA9IGMyOworICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAgIH0KKworICAgIGRz
dDE2ID0gKHVpbnQxNl90ICopZHN0MTZfZW5kOworICAgIGRzdDE2X2VuZCA9ICh1aW50MTZfdCAq
KSh0LT5waXhlbHMgKyB0LT5ieXRlcyk7CisgICAgZm9yICg7IGRzdDE2IDwgZHN0MTZfZW5kOyBk
c3QxNisrKQorICAgICAgICAqZHN0MTYgPSBjMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZV9wYWludChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3Qg
YikKK3sKKyAgICBpZiAodC0+Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkKKyAg
ICAgICAgX2V3a190aWxlX3BhaW50X3JnYjg4OCh0LCByLCBnLCBiKTsKKyAgICBlbHNlIGlmICh0
LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApCisgICAgICAgIF9ld2tfdGls
ZV9wYWludF9yZ2I1NjUodCwgciwgZywgYik7CisgICAgZWxzZQorICAgICAgICBFUlIoInVua25v
d24gY29sb3Igc3BhY2U6ICVkIiwgdC0+Y3NwYWNlKTsKK30KKworLyoqCisgKiBDcmVhdGUgYSBu
ZXcgdGlsZSBvZiBnaXZlbiBzaXplLCB6b29tIGxldmVsIGFuZCBjb2xvcnNwYWNlLgorICoKKyAq
IEFmdGVyIGNyZWF0ZWQgdGhlc2UgcHJvcGVydGllcyBhcmUgaW1tdXRhYmxlIGFzIHRoZXkncmUg
dGhlIGJhc2ljCisgKiBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgdGlsZSBhbmQgYW55IGNoYW5nZSB3
aWxsIGxlYWQgdG8gaW52YWxpZAorICogbWVtb3J5IGFjY2Vzcy4KKyAqCisgKiBPdGhlciBtZW1i
ZXJzIGFyZSBvZiBmcmVlLWFjY2VzcyBhbmQgbm8gZ2V0dGVycy9zZXR0ZXJzIGFyZQorICogcHJv
dmlkZWQgaW4gb3JkZXJyIHRvIGF2b2lkIGV4cGVuc2l2ZSBvcGVyYXRpb25zIG9uIHRob3NlLCBo
b3dldmVyCisgKiBzb21lIGFyZSBiZXR0ZXIgbWFuaXB1bGF0ZWQgd2l0aCBwcm92aWRlZCBmdW5j
dGlvbnMsIHN1Y2ggYXMKKyAqIGV3a190aWxlX3Nob3coKSBhbmQgZXdrX3RpbGVfaGlkZSgpIHRv
IGNoYW5nZQorICogQGMgdmlzaWJsZSBvciBld2tfdGlsZV91cGRhdGVfZnVsbCgpLCBld2tfdGls
ZV91cGRhdGVfYXJlYSgpLAorICogZXdrX3RpbGVfdXBkYXRlc19jbGVhcigpIHRvIGNoYW5nZSBA
YyBzdGF0cy5taXNzZXMsCisgKiBAYyBzdGF0cy5mdWxsX3VwZGF0ZSBhbmQgQGMgdXBkYXRlcy4K
KyAqLworRXdrX1RpbGUgKmV3a190aWxlX25ldyhFdmFzICpldmFzLCBFdmFzX0Nvb3JkIHcsIEV2
YXNfQ29vcmQgaCwgZmxvYXQgem9vbSwgRXZhc19Db2xvcnNwYWNlIGNzcGFjZSkKK3sKKyAgICBF
dmFzX0Nvb3JkICplYzsKKyAgICBFdmFzX0NvbG9yc3BhY2UgKmVjczsKKyAgICBmbG9hdCAqZjsK
KyAgICBzaXplX3QgKnM7CisgICAgRXdrX1RpbGUgKnQ7CisgICAgdW5zaWduZWQgaW50IGFyZWE7
CisgICAgc2l6ZV90IGJ5dGVzOworICAgIGNhaXJvX2Zvcm1hdF90IGZvcm1hdDsKKyAgICBjYWly
b19zdGF0dXNfdCBzdGF0dXM7CisgICAgaW50IHN0cmlkZTsKKyAgICBFY29yZV9FdmFzICplZTsK
KyAgICBjb25zdCBjaGFyICplbmdpbmU7CisKKyAgICBhcmVhID0gdyAqIGg7CisKKyAgICBpZiAo
Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkgeworICAgICAgICBieXRlcyA9IGFy
ZWEgKiA0OworICAgICAgICBzdHJpZGUgPSB3ICogNDsKKyAgICAgICAgZm9ybWF0ID0gQ0FJUk9f
Rk9STUFUX0FSR0IzMjsKKyAgICB9IGVsc2UgaWYgKGNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0Vf
UkdCNTY1X0E1UCkgeworICAgICAgICBieXRlcyA9IGFyZWEgKiAyOworICAgICAgICBzdHJpZGUg
PSB3ICogMjsKKyAgICAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX1JHQjE2XzU2NTsKKyAgICB9
IGVsc2UgeworICAgICAgICBFUlIoInVua25vd24gY29sb3Igc3BhY2U6ICVkIiwgY3NwYWNlKTsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgREJHKCJzaXplOiAlZHglZCAoJWQpLCB6
b29tOiAlZiwgY3NwYWNlPSVkIiwgdywgaCwgYXJlYSwgKGRvdWJsZSl6b29tLCBjc3BhY2UpOwor
CisgICAgdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4obWFsbG9jKHNpemVvZihFd2tfVGlsZSkp
KTsKKyAgICBpZiAoIXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgdC0+aW1hZ2UgPSBldmFz
X29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CisKKyAgICBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZh
c19nZXQoZXZhcyk7CisgICAgZW5naW5lID0gZWNvcmVfZXZhc19lbmdpbmVfbmFtZV9nZXQoZWUp
OworICAgIGlmIChlbmdpbmUgJiYgIXN0cmNtcChlbmdpbmUsICJvcGVuZ2xfeDExIikpCisgICAg
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQodC0+aW1hZ2UsIEVWQVNfSU1B
R0VfQ09OVEVOVF9ISU5UX0RZTkFNSUMpOworCisgICAgdC0+dmlzaWJsZSA9IDA7CisgICAgdC0+
dXBkYXRlcyA9IDA7CisKKyAgICBtZW1zZXQoJnQtPnN0YXRzLCAwLCBzaXplb2YoRXdrX1RpbGVf
U3RhdHMpKTsKKyAgICB0LT5zdGF0cy5hcmVhID0gYXJlYTsKKworICAgIC8qIHVnbHksIGJ1dCBs
ZXQncyBhdm9pZCBhdCBhbGwgY29zdHMgaGF2aW5nIHVzZXJzIHRvIG1vZGlmeSB0aG9zZSAqLwor
ICAgIGVjID0gKEV2YXNfQ29vcmQgKikmdC0+dzsKKyAgICAqZWMgPSB3OworCisgICAgZWMgPSAo
RXZhc19Db29yZCAqKSZ0LT5oOworICAgICplYyA9IGg7CisKKyAgICBlY3MgPSAoRXZhc19Db2xv
cnNwYWNlICopJnQtPmNzcGFjZTsKKyAgICAqZWNzID0gY3NwYWNlOworCisgICAgZiA9IChmbG9h
dCAqKSZ0LT56b29tOworICAgICpmID0gem9vbTsKKworICAgIHMgPSAoc2l6ZV90ICopJnQtPmJ5
dGVzOworICAgICpzID0gYnl0ZXM7CisKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldCh0
LT5pbWFnZSwgdC0+dywgdC0+aCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfY29sb3JzcGFjZV9z
ZXQodC0+aW1hZ2UsIHQtPmNzcGFjZSk7CisgICAgdC0+cGl4ZWxzID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHQtPmltYWdlLCBFSU5BX1RSVUUpKTsK
KyAgICB0LT5zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEodC0+
cGl4ZWxzLCBmb3JtYXQsIHcsIGgsIHN0cmlkZSk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFj
ZV9zdGF0dXModC0+c3VyZmFjZSk7CisgICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VD
Q0VTUykgeworICAgICAgICBFUlIoImZhaWxlZCB0byBjcmVhdGUgY2Fpcm8gc3VyZmFjZTogJXMi
LAorICAgICAgICAgICAgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKKyAgICAgICAg
ZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdC0+Y2Fpcm8gPSBjYWly
b19jcmVhdGUodC0+c3VyZmFjZSk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3RhdHVzKHQtPmNhaXJv
KTsKKyAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAgIEVS
UigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybzogJXMiLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0
YXR1cykpOworICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7CisgICAg
ICAgIGV2YXNfb2JqZWN0X2RlbCh0LT5pbWFnZSk7CisgICAgICAgIGZyZWUodCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZCh0KTsK
KworICAgIHJldHVybiB0OworfQorCisvKioKKyAqIEZyZWUgdGlsZSBtZW1vcnkuCisgKi8KK3Zv
aWQgZXdrX3RpbGVfZnJlZShFd2tfVGlsZSAqdCkKK3sKKyAgICBfZXdrX3RpbGVfYWNjb3VudF9m
cmVlZCh0KTsKKworICAgIGlmICh0LT51cGRhdGVzKQorICAgICAgICBlaW5hX3RpbGVyX2ZyZWUo
dC0+dXBkYXRlcyk7CisKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7Cisg
ICAgY2Fpcm9fZGVzdHJveSh0LT5jYWlybyk7CisgICAgZXZhc19vYmplY3RfZGVsKHQtPmltYWdl
KTsKKyAgICBmcmVlKHQpOworfQorCisvKioKKyAqIE1ha2UgdGhlIHRpbGUgdmlzaWJsZSwgaW5j
cmVtZW50aW5nIGl0cyBjb3VudGVyLgorICovCit2b2lkIGV3a190aWxlX3Nob3coRXdrX1RpbGUg
KnQpCit7CisgICAgdC0+dmlzaWJsZSsrOworICAgIGV2YXNfb2JqZWN0X3Nob3codC0+aW1hZ2Up
OworfQorCisvKioKKyAqIERlY3JlbWVudCB0aGUgdmlzaWJpbGl0eSBjb3VudGVyLCBtYWtpbmcg
aXQgaW52aXNpYmxlIGlmIG5lY2Vzc2FyeS4KKyAqLwordm9pZCBld2tfdGlsZV9oaWRlKEV3a19U
aWxlICp0KQoreworICAgIHQtPnZpc2libGUtLTsKKyAgICBpZiAoIXQtPnZpc2libGUpCisgICAg
ICAgIGV2YXNfb2JqZWN0X2hpZGUodC0+aW1hZ2UpOworfQorCisvKioKKyAqIFJldHVybnMgRUlO
QV9UUlVFIGlmIHRoZSB0aWxlIGlzIHZpc2libGUsIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICov
CitFaW5hX0Jvb2wgZXdrX3RpbGVfdmlzaWJsZV9nZXQoRXdrX1RpbGUgKnQpCit7CisgICAgcmV0
dXJuICEhdC0+dmlzaWJsZTsKK30KKworLyoqCisgKiBNYXJrIHdob2xlIHRpbGUgYXMgZGlydHkg
YW5kIHJlcXVpcmluZyB1cGRhdGUuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdr
X1RpbGUgKnQpCit7CisgICAgLyogVE9ETzogbGlzdCBvZiB0aWxlcyBwZW5kaW5nIHVwZGF0ZXM/
ICovCisgICAgdC0+c3RhdHMubWlzc2VzKys7CisKKyAgICBpZiAoIXQtPnN0YXRzLmZ1bGxfdXBk
YXRlKSB7CisgICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOworICAgICAg
ICBpZiAodC0+dXBkYXRlcykgeworICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0
ZXMpOworICAgICAgICAgICAgdC0+dXBkYXRlcyA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisK
Ky8qKgorICogTWFyayB0aGUgc3BlY2lmaWMgc3ViYXJlYSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5n
IHVwZGF0ZS4KKyAqLwordm9pZCBld2tfdGlsZV91cGRhdGVfYXJlYShFd2tfVGlsZSAqdCwgY29u
c3QgRWluYV9SZWN0YW5nbGUgKnIpCit7CisgICAgLyogVE9ETzogbGlzdCBvZiB0aWxlcyBwZW5k
aW5nIHVwZGF0ZXM/ICovCisgICAgdC0+c3RhdHMubWlzc2VzKys7CisKKyAgICBpZiAodC0+c3Rh
dHMuZnVsbF91cGRhdGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghci0+eCAmJiAhci0+
eSAmJiByLT53ID09IHQtPncgJiYgci0+aCA9PSB0LT5oKSB7CisgICAgICAgIHQtPnN0YXRzLmZ1
bGxfdXBkYXRlID0gRUlOQV9UUlVFOworICAgICAgICBpZiAodC0+dXBkYXRlcykgeworICAgICAg
ICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOworICAgICAgICAgICAgdC0+dXBkYXRl
cyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdC0+
dXBkYXRlcykgeworICAgICAgICB0LT51cGRhdGVzID0gZWluYV90aWxlcl9uZXcodC0+dywgdC0+
aCk7CisgICAgICAgIGlmICghdC0+dXBkYXRlcykgeworICAgICAgICAgICAgQ1JJVElDQUwoImNv
dWxkIG5vdCBjcmVhdGUgZWluYV90aWxlciAlZHglZC4iLCB0LT53LCB0LT5oKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIGVpbmFfdGlsZXJfcmVjdF9hZGQo
dC0+dXBkYXRlcywgcik7Cit9CisKKy8qKgorICogRm9yIGVhY2ggdXBkYXRlZCByZWdpb24sIGNh
bGwgdGhlIGdpdmVuIGZ1bmN0aW9uLgorICoKKyAqIFRoaXMgd2lsbCBub3QgY2hhbmdlIHRoZSB0
aWxlIHN0YXRpc3RpY3Mgb3IgY2xlYXIgdGhlIHByb2Nlc3NlZAorICogdXBkYXRlcywgdXNlIGV3
a190aWxlX3VwZGF0ZXNfY2xlYXIoKSBmb3IgdGhhdC4KKyAqLwordm9pZCBld2tfdGlsZV91cGRh
dGVzX3Byb2Nlc3MoRXdrX1RpbGUgKnQsIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUg
KnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpkYXRhKQorewor
ICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkgeworICAgICAgICBFaW5hX1JlY3RhbmdsZSBy
OworICAgICAgICByLnggPSAwOworICAgICAgICByLnkgPSAwOworICAgICAgICByLncgPSB0LT53
OworICAgICAgICByLmggPSB0LT5oOworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJf
VElNRQorICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1ldjsKKyAgICAgICAgZG91YmxlIHJlbmRl
cl9zdGFydDsKKyAgICAgICAgZ2V0dGltZW9mZGF5KCZ0aW1ldiwgMCk7CisgICAgICAgIHJlbmRl
cl9zdGFydCA9IChkb3VibGUpdGltZXYudHZfc2VjICsKKyAgICAgICAgICAgICgoKGRvdWJsZSl0
aW1ldi50dl91c2VjKSAvIDEwMDAwMDApOworI2VuZGlmCisgICAgICAgIGNiKCh2b2lkICopZGF0
YSwgdCwgJnIpOworI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJfVElNRQorICAgICAg
ICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCAwKTsKKyAgICAgICAgdC0+c3RhdHMucmVuZGVyX3RpbWUg
PSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCisgICAgICAgICAgICAoKChkb3VibGUpdGltZXYudHZf
dXNlYykgLyAxMDAwMDAwKSAtIHJlbmRlcl9zdGFydDsKKyNlbmRpZgorICAgIH0gZWxzZSBpZiAo
dC0+dXBkYXRlcykgeworICAgICAgICBFaW5hX0l0ZXJhdG9yICppdHIgPSBlaW5hX3RpbGVyX2l0
ZXJhdG9yX25ldyh0LT51cGRhdGVzKTsKKyAgICAgICAgRWluYV9SZWN0YW5nbGUgKnI7CisgICAg
ICAgIGlmICghaXRyKSB7CisgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSB0
aWxlciBpdGVyYXRvciEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRyLCByKQorICAgICAgICAgICAgY2IoKHZvaWQgKilk
YXRhLCB0LCByKTsKKyAgICAgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0cik7CisgICAgfQorfQor
CisvKioKKyAqIENsZWFyIGFsbCB1cGRhdGVzIGluIHJlZ2lvbiwgaWYgYW55LgorICoKKyAqIFRo
aXMgd2lsbCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcywgc3BlY2lhbGx5IHplcm8gc3RhdC5t
aXNzZXMKKyAqIGFuZCB1bnNldCBzdGF0cy5mdWxsX3VwZGF0ZS4gSWYgdC0+dXBkYXRlcyBleGlz
dGVkLCB0aGVuIGl0IHdpbGwgYmUKKyAqIGRlc3Ryb3llZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9u
IGlzIHVzdWFsbHkgY2FsbGVkIGFmdGVyIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcygpIGlzCisg
KiBjYWxsZWQuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZSAqdCkK
K3sKKyAgICAvKiBUT0RPOiByZW1vdmUgZnJvbSBsaXN0IG9mIHBlbmRpbmcgdXBkYXRlcz8gKi8K
KyAgICB0LT5zdGF0cy5taXNzZXMgPSAwOworCisgICAgaWYgKHQtPnN0YXRzLmZ1bGxfdXBkYXRl
KQorICAgICAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IDA7CisgICAgZWxzZSBpZiAodC0+dXBk
YXRlcykgeworICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7CisgICAgICAgIHQt
PnVwZGF0ZXMgPSAwOworICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnk7CitzdHJ1Y3QgX0V3a19U
aWxlX1VudXNlZF9DYWNoZV9FbnRyeSB7CisgICAgRXdrX1RpbGUgKnRpbGU7CisgICAgaW50IHdl
aWdodDsKKyAgICBzdHJ1Y3QgeworICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19U
aWxlICp0KTsKKyAgICAgICAgdm9pZCAqZGF0YTsKKyAgICB9IHRpbGVfZnJlZTsKK307CisKK3N0
cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlIHsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFaW5h
X0xpc3QgKmxpc3Q7CisgICAgICAgIHNpemVfdCBjb3VudDsKKyAgICAgICAgc2l6ZV90IGFsbG9j
YXRlZDsKKyAgICB9IGVudHJpZXM7CisgICAgc3RydWN0IHsKKyAgICAgICAgc2l6ZV90IG1heDsg
IC8qKjwgd2F0ZXJtYXJrIChpbiBieXRlcykgdG8gc3RhcnQgZnJlZWluZyB0aWxlcyAqLworICAg
ICAgICBzaXplX3QgdXNlZDsgLyoqPCBpbiBieXRlcywgbWF5YmUgbW9yZSB0aGFuIG1heC4gKi8K
KyAgICB9IG1lbW9yeTsKKyAgICBzdHJ1Y3QgeworICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcs
IGg7CisgICAgICAgIGZsb2F0IHpvb207CisgICAgICAgIEVpbmFfQm9vbCBsb2NrZWQ7CisgICAg
fSBsb2NrZWQ7CisgICAgaW50IHJlZmVyZW5jZXM7CisgICAgdW5zaWduZWQgaW50IGZyb3plbjsK
K307CisKK3N0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURfQ0FDSEVfQUxMT0NBVEVfSU5J
VElBTCA9IDEyODsKK3N0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURfQ0FDSEVfQUxMT0NB
VEVfU1RFUCA9IDE2Oworc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNFRF9DQUNIRV9NQVhf
RlJFRSA9IDMyOworCisvKioKKyAqIENhY2hlIG9mIHVudXNlZCB0aWxlcyAodGhvc2UgdGhhdCBh
cmUgbm90IHZpc2libGUpLgorICoKKyAqIFRoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMuCisgKgor
ICogQHBhcmFtIG1heCBjYWNoZSBzaXplIGluIGJ5dGVzLgorICoKKyAqIEByZXR1cm4gbmV3bHkg
YWxsb2NhdGVkIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgdXNlCisgKiAgICAgICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlKCkgdG8gcmVsZWFzZSByZXNvdXJjZXMuIElmIG5vdAorICogICAg
ICAgICBwb3NzaWJsZSB0byBhbGxvY2F0ZSBtZW1vcnksIEBjIDAgaXMgcmV0dXJuZWQuCisgKi8K
K0V3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyhzaXplX3Qg
bWF4KQoreworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgdHVjID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUpKSk7CisgICAgaWYgKCF0dWMpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgREJHKCJ0dWM9JXAiLCB0dWMpOworICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKKyAgICB0
dWMtPnJlZmVyZW5jZXMgPSAxOworICAgIHJldHVybiB0dWM7Cit9CisKK3ZvaWQgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2xvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6
b29tKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICB0dWMt
PmxvY2tlZC5sb2NrZWQgPSBFSU5BX1RSVUU7CisgICAgdHVjLT5sb2NrZWQueCA9IHg7CisgICAg
dHVjLT5sb2NrZWQueSA9IHk7CisgICAgdHVjLT5sb2NrZWQudyA9IHc7CisgICAgdHVjLT5sb2Nr
ZWQuaCA9IGg7CisgICAgdHVjLT5sb2NrZWQuem9vbSA9IHpvb207Cit9CisKK3ZvaWQgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQor
eworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisKKyAgICB0dWMtPmxvY2tl
ZC5sb2NrZWQgPSBFSU5BX0ZBTFNFOworfQorCisvKioKKyAqIEZyZWUgY2FjaGUgb2YgdW51c2Vk
IHRpbGVzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG9ubHkgY2FsbGVkIGJ5IGV3
a190aWxlX3VudXNlZF9jYWNoZV91bnJlZgorICogZnVuY3Rpb24uIENhbGxpbmcgdGhpcyBmdW5j
dGlvbiB3aXRob3V0IGNvbnNpZGVyaW5nIHJlZmVyZW5jZSBjb3VudGluZworICogbWF5IGxlYWQg
dG8gdW5rbm93biByZXN1bHRzLgorICoKKyAqIFRob3NlIHRpbGVzIHRoYXQgYXJlIHN0aWxsIHZp
c2libGUgd2lsbCByZW1haW4gbGl2ZS4gVGhlIHVudXNlZAorICogdGlsZXMgd2lsbCBiZSBmcmVl
ZC4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigpCisgKi8KK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOworCisgICAgREJH
KCJ0dWM9JXAsICIKKyAgICAgICAgImVudHJpZXM9KGNvdW50OiV6ZCwgYWxsb2NhdGVkOiV6ZCks
ICIKKyAgICAgICAgIm1lbW9yeT0obWF4OiV6ZCwgdXNlZDolemQpIiwKKyAgICAgICAgdHVjLCB0
dWMtPmVudHJpZXMuY291bnQsIHR1Yy0+ZW50cmllcy5hbGxvY2F0ZWQsCisgICAgICAgIHR1Yy0+
bWVtb3J5Lm1heCwgdHVjLT5tZW1vcnkudXNlZCk7CisKKyAgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfY2xlYXIodHVjKTsKKyAgICBmcmVlKHR1Yyk7Cit9CisKKy8qKgorICogQ2xlYXIgY2FjaGUg
b2YgdW51c2VkIHRpbGVzLgorICoKKyAqIEFueSB0aWxlcyB0aGF0IGFyZSBpbiB0aGUgY2FjaGUg
YXJlIGZyZWVkLiBUaGUgb25seSB0aWxlcyB0aGF0IGFyZQorICoga2VwdCBhcmUgdGhvc2UgdGhh
dCBhcmVuJ3QgaW4gdGhlIGNhY2hlIChpLmUuIHRoYXQgYXJlIHZpc2libGUpLgorICovCit2b2lk
IGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykK
K3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOworCisgICAgaWYgKCF0dWMt
PmVudHJpZXMuY291bnQpCisgICAgICAgIHJldHVybjsKKworICAgIHZvaWQqIGl0ZW07CisgICAg
RUlOQV9MSVNUX0ZSRUUodHVjLT5lbnRyaWVzLmxpc3QsIGl0ZW0pIHsKKyAgICAgICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRf
Q2FjaGVfRW50cnkqPihpdGVtKTsKKyAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxl
X2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKKyAgICAgICAgZnJlZShpdHIpOworICAgIH0KKworICAg
IHR1Yy0+bWVtb3J5LnVzZWQgPSAwOworICAgIHR1Yy0+ZW50cmllcy5jb3VudCA9IDA7Cit9CisK
Ky8qKgorICogSG9sZCByZWZlcmVuY2UgdG8gY2FjaGUuCisgKgorICogQHJldHVybiBzYW1lIHBv
aW50ZXIgYXMgdGFrZW4uCisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYo
KQorICovCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYo
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHR1YywgMCk7CisgICAgdHVjLT5yZWZlcmVuY2VzKys7CisgICAgcmV0dXJuIHR1
YzsKK30KKworLyoqCisgKiBSZWxlYXNlIGNhY2hlIHJlZmVyZW5jZSwgZnJlZWluZyBpdCBpZiBp
dCBkcm9wcyB0byB6ZXJvLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZigp
CisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKCkKKyAqLwordm9pZCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKyAgICB0dWMtPnJlZmVyZW5jZXMtLTsK
KyAgICBpZiAoIXR1Yy0+cmVmZXJlbmNlcykKKyAgICAgICAgX2V3a190aWxlX3VudXNlZF9jYWNo
ZV9mcmVlKHR1Yyk7Cit9CisKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9zZXQoRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBtYXgpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odHVjKTsKKyAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7Cit9CisKK3Np
emVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAw
KTsKKyAgICByZXR1cm4gdHVjLT5tZW1vcnkubWF4OworfQorCitzaXplX3QgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOworICAgIHJldHVybiB0
dWMtPm1lbW9yeS51c2VkOworfQorCitzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNo
KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0ZXMpCit7CisgICAgRWluYV9M
aXN0ICpsLCAqbF9uZXh0OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMs
IDApOworICAgIHNpemVfdCBkb25lOworICAgIHVuc2lnbmVkIGludCBjb3VudDsKKworICAgIGlm
ICghdHVjLT5lbnRyaWVzLmNvdW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoYnl0ZXMg
PCAxKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qCisgICAgICogTk9URTogdGhlIGNhY2hl
IGlzIGEgRklGTyBxdWV1ZSBjdXJyZW50bHkuCisgICAgICogRG9uJ3QgbmVlZCB0byBzb3J0IGFu
eSBtb3JlLgorICAgICAqLworCisgICAgdm9pZCogaXRlbTsKKyAgICBkb25lID0gMDsKKyAgICBj
b3VudCA9IDA7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0dWMtPmVudHJpZXMubGlzdCwg
bCwgbF9uZXh0LCBpdGVtKSB7CisgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSog
aXRyID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7Cisg
ICAgICAgIEV3a19UaWxlICp0ID0gaXRyLT50aWxlOworICAgICAgICBpZiAoZG9uZSA+IGJ5dGVz
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICh0dWMtPmxvY2tlZC5sb2NrZWQKKyAg
ICAgICAgICAgICYmIHQtPnggKyB0LT53ID4gdHVjLT5sb2NrZWQueAorICAgICAgICAgICAgJiYg
dC0+eSArIHQtPmggPiB0dWMtPmxvY2tlZC55CisgICAgICAgICAgICAmJiB0LT54IDwgdHVjLT5s
b2NrZWQueCArIHR1Yy0+bG9ja2VkLncKKyAgICAgICAgICAgICYmIHQtPnkgPCB0dWMtPmxvY2tl
ZC55ICsgdHVjLT5sb2NrZWQuaAorICAgICAgICAgICAgJiYgdC0+em9vbSA9PSB0dWMtPmxvY2tl
ZC56b29tKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBkb25l
ICs9IHNpemVvZihFd2tfVGlsZSkgKyBpdHItPnRpbGUtPmJ5dGVzOworICAgICAgICBpdHItPnRp
bGVfZnJlZS5jYihpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUpOworICAgICAgICB0dWMt
PmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0dWMtPmVudHJpZXMubGlzdCwg
bCk7CisgICAgICAgIGZyZWUoaXRyKTsKKyAgICAgICAgY291bnQrKzsKKyAgICB9CisKKyAgICB0
dWMtPm1lbW9yeS51c2VkIC09IGRvbmU7CisgICAgdHVjLT5lbnRyaWVzLmNvdW50IC09IGNvdW50
OworCisgICAgcmV0dXJuIGRvbmU7Cit9CisKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1
dG9fZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odHVjKTsKKyAgICBpZiAodHVjLT5tZW1vcnkudXNlZCA8PSB0dWMtPm1l
bW9yeS5tYXgpCisgICAgICAgIHJldHVybjsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1
c2godHVjLCB0dWMtPm1lbW9yeS51c2VkIC0gdHVjLT5tZW1vcnkubWF4KTsKKyAgICBpZiAodHVj
LT5tZW1vcnkudXNlZCA+IHR1Yy0+bWVtb3J5Lm1heCkKKyAgICAgICAgQ1JJVElDQUwoIkNhY2hl
IHN0aWxsIHVzaW5nIHRvbyBtdWNoIG1lbW9yeTogJXpkIEtCOyBtYXg6ICV6ZCBLQiIsCisgICAg
ICAgICAgICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+bWVtb3J5Lm1heCk7Cit9CisKKy8q
KgorICogRnJlZXplIGNhY2hlIHRvIG5vdCBkbyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBN
YWludGVuYW5jZSB0YXNrcyBvcHRpbWl6ZSBjYWNoZSB1c2FnZSwgYnV0IG1heWJlIHdlIGtub3cg
d2Ugc2hvdWxkCisgKiBob2xkIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxhc3Qgb3BlcmF0aW9u
LCBpbiB0aGlzIGNhc2Ugd2UgZnJlZXplCisgKiB3aGlsZSBvcGVyYXRpbmcgYW5kIHRoZW4gdGhh
dyB3aGVuIHdlJ3JlIGRvbmUuCisgKgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhh
dygpCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZShFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YykKK3sKKyAgICB0dWMtPmZyb3plbisrOworfQorCisvKioKKyAqIFVuZnJl
ZXplcyBtYWludGVuYW5jZSB0YXNrcy4KKyAqCisgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50
ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5jZSB0YXNrcworICogd2lsbCBydW4gaW1t
ZWRpYXRlbHkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCit7CisgICAgaWYgKCF0dWMtPmZyb3plbikgeworICAgICAgICBF
UlIoInRoYXdpbmcgbW9yZSB0aGFuIGZyZWV6aW5nISIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgdHVjLT5mcm96ZW4tLTsKK30KKworLyoqCisgKiBHZXQgdGlsZSBmcm9tIGNhY2hl
IG9mIHVudXNlZCB0aWxlcywgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgY2FjaGUuCisgKgorICogSWYg
dGhlIHRpbGUgaXMgdXNlZCwgdGhlbiBpdCdzIG5vdCBpbiBjYWNoZSBvZiB1bnVzZWQgdGlsZXMs
IHNvIGl0CisgKiBpcyByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGFuZCBtYXkgYmUgZ2l2ZW4gYmFj
ayB3aXRoCisgKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoKS4KKyAqCisgKiBAcGFy
YW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcworICogQHBhcmFtIHQgdGhlIHRpbGUgdG8gYmUg
cmVtb3ZlZCBmcm9tIEV3a19UaWxlX1VudXNlZF9DYWNoZS4KKyAqCisgKiBAcmV0dXJuICNFSU5B
X1RSVUUgb24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitFaW5hX0Jvb2wg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
LCBFd2tfVGlsZSAqdCkKK3sKKyAgICBFaW5hX0xpc3QgKmUsICpsOworCisgICAgdm9pZCogaXRl
bTsKKyAgICBlID0gMDsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwg
bCwgaXRlbSkgeworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGVudHJ5ID0g
c3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7CisgICAgICAg
IGlmIChlbnRyeS0+dGlsZSA9PSB0KSB7CisgICAgICAgICAgICBlID0gbDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICghZSkgeworICAgICAgICBFUlIoInRp
bGUgJXAgbm90IGZvdW5kIGluIGNhY2hlICVwIiwgdCwgdHVjKTsKKyAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CisgICAgfQorCisgICAgdHVjLT5lbnRyaWVzLmNvdW50LS07CisgICAgdHVjLT5t
ZW1vcnkudXNlZCAtPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7CisgICAgdHVjLT5lbnRy
aWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGUpOwor
ICAgIGZyZWUoaXRlbSk7CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCisvKioKKyAqIFB1
dCB0aWxlIGludG8gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCBhZGRpbmcgaXQgdG8gdGhlIGNhY2hl
LgorICoKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIEBjIHQtPnZpc2libGUgaXMgQGMg
MCBhbmQgbm8gb2JqZWN0cyBhcmUKKyAqIHVzaW5nIHRoZSB0aWxlIGFueW1vcmUsIG1ha2luZyBp
dCBhdmFpbGFibGUgdG8gYmUgZXhwaXJlZCBhbmQgaGF2ZQorICogaXRzIG1lbW9yeSByZXBsYWNl
ZC4KKyAqCisgKiBOb3RlIHRoYXQgdGlsZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGRlbGV0ZWQg
aWYgY2FjaGUgaXMgZnVsbCwKKyAqIGluc3RlYWQgdGhlIGNhY2hlIHdpbGwgaGF2ZSBtb3JlIGJ5
dGVzIHVzZWQgdGhhbiBtYXhpbXVtIGFuZCBvbmUKKyAqIGNhbiBjYWxsIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9hdXRvX2ZsdXNoKCkgdG8gZnJlZSB0aGVtLiBUaGlzIGlzIGRvbmUKKyAqIGJlY2F1
c2UgdXN1YWxseSB3ZSB3YW50IGEgbGF6eSBvcGVyYXRpb24gZm9yIGJldHRlciBwZXJmb3JtYW5j
ZS4KKyAqCisgKiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcworICogQHBhcmFtIHQg
dGlsZSB0byBiZSBhZGRlZCB0byBjYWNoZS4KKyAqIEBwYXJhbSB0aWxlX2ZyZWVfY2IgZnVuY3Rp
b24gdXNlZCB0byBmcmVlIHRpbGVzLgorICogQHBhcmFtIGRhdGEgY29udGV4dCB0byBnaXZlIGJh
Y2sgdG8gQGEgdGlsZV9mcmVlX2NiIGFzIGZpcnN0IGFyZ3VtZW50LgorICoKKyAqIEByZXR1cm4g
I0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlOQV9GQUxTRSBvdGhlcndpc2UuIElmIEBjIHQtPnZp
c2libGUKKyAqICAgICAgICAgaXMgbm90ICNFSU5BX0ZBTFNFLCB0aGVuIGl0IHdpbGwgcmV0dXJu
ICNFSU5BX0ZBTFNFLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2goKQorICovCitFaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tfVGlsZSAqdCwgdm9pZCAoKnRpbGVfZnJlZV9jYiko
dm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpLCBjb25zdCB2b2lkICpkYXRhKQoreworICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqZTsKKworICAgIGlmICh0LT52aXNpYmxlKSB7CisgICAg
ICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51c2VkICh2aXNpYmxlPSVkKSIsIHQsIHQtPnZpc2li
bGUpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICBlID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4obWFsbG9jKHNpemVvZihFd2tfVGls
ZV9VbnVzZWRfQ2FjaGVfRW50cnkpKSk7CisgICAgaWYgKCFlKQorICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKKworICAgIHR1Yy0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X2FwcGVuZCh0dWMt
PmVudHJpZXMubGlzdCwgZSk7CisgICAgaWYgKGVpbmFfZXJyb3JfZ2V0KCkpIHsKKyAgICAgICAg
RVJSKCJMaXN0IGFsbG9jYXRpb24gZmFpbGVkIik7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OworICAgIH0KKworICAgIGUtPnRpbGUgPSB0OworICAgIGUtPndlaWdodCA9IDA7IC8qIGNhbGN1
bGF0ZWQganVzdCBiZWZvcmUgc29ydCAqLworICAgIGUtPnRpbGVfZnJlZS5jYiA9IHRpbGVfZnJl
ZV9jYjsKKyAgICBlLT50aWxlX2ZyZWUuZGF0YSA9ICh2b2lkICopZGF0YTsKKworICAgIHR1Yy0+
ZW50cmllcy5jb3VudCsrOworICAgIHR1Yy0+bWVtb3J5LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxl
KSArIHQtPmJ5dGVzOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwordm9pZCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorewor
ICAgIHZvaWQqIGl0ZW07CisgICAgRWluYV9MaXN0ICpsOworICAgIGludCBjb3VudCA9IDA7Cisg
ICAgcHJpbnRmKCJDYWNoZSBvZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9y
eTogJXp1LyV6dVxuIiwKKyAgICAgICAgICAgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJp
ZXMuYWxsb2NhdGVkLAorICAgICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5t
YXgpOworCisgICAgRUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0ZW0p
IHsKKyAgICAgICAgY29uc3QgRXdrX1RpbGUgKnQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGVfRW50cnkqPihpdGVtKS0+dGlsZTsKKyAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNs
dSArICVkeCVkIEAgJTAuM2ZdJWMiLAorICAgICAgICAgICAgICAgdC0+Y29sLCB0LT5yb3csIHQt
PncsIHQtPmgsIHQtPnpvb20sCisgICAgICAgICAgICAgICB0LT52aXNpYmxlID8gJyonOiAnICcp
OworCisgICAgICAgIGlmICghKGNvdW50ICUgNCkpCisgICAgICAgICAgICBwcmludGYoIlxuIik7
CisgICAgfQorCisgICAgcHJpbnRmKCJcbiIpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109119</attachid>
            <date>2011-09-28 21:00:15 -0700</date>
            <delta_ts>2011-09-29 17:30:57 -0700</delta_ts>
            <desc>diff_for_easy_review</desc>
            <filename>diff_for_easy_review</filename>
            <type>text/plain</type>
            <size>34690</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggZjlkYjM1Yy4uNzZkY2RkOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTc0LDkgKzc0LDkgQEAgTElTVChBUFBF
TkQgV2ViS2l0X1NPVVJDRVMKICAgICBlZmwvZXdrL2V3a19uZXR3b3JrLmNwcAogICAgIGVmbC9l
d2svZXdrX3NldHRpbmdzLmNwcAogICAgIGVmbC9ld2svZXdrX3Byb3RvY29sX2hhbmRsZXIuY3Bw
Ci0gICAgZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jCi0gICAgZWZsL2V3ay9ld2tf
dGlsZWRfbWF0cml4LmMKLSAgICBlZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCisgICAgZWZsL2V3
ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKKyAgICBlZmwvZXdrL2V3a190aWxlZF9tYXRy
aXguY3BwCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCiAgICAgZWZsL2V3ay9ld2tf
dXRpbC5jcHAKICAgICBlZmwvZXdrL2V3a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXdf
c2luZ2xlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDczMjVkNTEuLjMyZThlY2MgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wOS0yOCAgUnl1YW4gQ2hvaSAgPHJ5dWFu
LmNob2lAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF0gUmVuYW1lIGV3a190aWxlZF8qLmMg
dG8gZXdrX3RpbGVkXyouY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02ODU5OQorCisgICAgICAgIFVzZSBhIEMrKyBjb21waWxlciBmb3IgdGhlc2Ug
ZmlsZXMgYW5kIGZpeCBjb21waWxlIGlzc3VlcyBhbmQgY29kaW5nIHN0eWxlLgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50
eHQ6CisgICAgICAgICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jLgorICAg
ICAgICAqIGV3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oOgorICAgICAgICAqIGV3ay9ld2tf
dGlsZWRfbWF0cml4LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfbWF0cml4LmMuCisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2RlbC5jcHA6IFJlbmFt
ZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMuCisKIDIwMTEt
MDktMjggIEt3YW5nSHl1ayBLaW0gIDxoeXVraS5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAg
W0VGTF0gUmVtb3ZlIHVzZWxlc3MgYXNzaWdubWVudCBjb2RlIGluIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3NldF9pbnRlcm5hbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCmluZGV4IGIzMjUxMzUuLjY4ZTcwNGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApA
QCAtMjEsMTAgKzIxLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmUuaCIKIAotI2RlZmluZSBfR05VX1NPVVJDRQorI2luY2x1ZGUgImV3
a190aWxlZF9tYXRyaXguaCIKICNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgogI2luY2x1
ZGUgPEVjb3JlLmg+CiAjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KICNp
bmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNsdWRlIDxzdGRpby5oPiAv
LyBYWFggUkVNT1ZFIE1FIExBVEVSCkBAIC0zMywxNSArMzQsNiBAQAogCiAjZGVmaW5lIElEWChj
b2wsIHJvdywgcm93c3BhbikgKGNvbCArIChyb3cgKiByb3dzcGFuKSkKIAotI2lmICFkZWZpbmVk
KE1JTikKLSMgZGVmaW5lIE1JTihhLCBiKSAoKGEgPCBiKSA/IGEgOiBiKQotI2VuZGlmCi0KLSNp
ZiAhZGVmaW5lZChNQVgpCi0jIGRlZmluZSBNQVgoYSwgYikgKChhID4gYikgPyBhIDogYikKLSNl
bmRpZgotCi10eXBlZGVmIGVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eTsKIHR5
cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGE7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtOwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19U
aWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Q7CkBAIC01MCw2ICs0Miw3IEBAIGVudW0gX0V3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgewogICAgIFBSRV9SRU5ERVJfUFJJ
T1JJVFlfTE9XID0gMCwgLyoqPCBBcHBlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGxpc3QgKi8KICAg
ICBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0ggICAgIC8qKjwgUHJlcGVuZCB0aGUgcmVxdWVzdCB0
byB0aGUgbGlzdCAqLwogfTsKK3R5cGVkZWYgZW51bSBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
UHJlX1JlbmRlcl9Qcmlvcml0eSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1By
aW9yaXR5OwogCiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gewogICAgIEVJ
TkFfSU5MSVNUOwpAQCAtMTI2LDcgKzExOSw3IEBAIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9w
YXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKIGludCBfZXdrX3RpbGVkX2xv
Z19kb20gPSAtMTsKIAogI2RlZmluZSBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvYmosIHB0ciwg
Li4uKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnB0ciA9IGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG9iaik7IFwKKyAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwdHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQob2JqKSk7IFwKICAg
ICBpZiAoIXB0cikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgQ1JJVElDQUwoIm5vIHByaXZhdGUgZGF0YSBpbiBvYmo9JXAi
LCBvYmopOyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTEzOCw3ICsxMzEs
NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2KQogewotICAgIHZvaWQgKmRhdGEgPSBOVUxMOworICAgIHZvaWQgKmRhdGEg
PSAwOwogCiAgICAgLyogRG8gbm90IHByb2Nlc3MgdXBkYXRlcy4gTm90ZSB0aGF0IHdlIHN0aWxs
IHdhbnQgdG8gZ2V0IHVwZGF0ZXMgcmVxdWVzdHMKICAgICAgKiBpbiB0aGUgcXVldWUgaW4gb3Jk
ZXIgdG8gbm90IG1pc3MgYW55IHVwZGF0ZXMgYWZ0ZXIgdGhlIHJlbmRlciBpcwpAQCAtMTU4LDcg
KzE1MSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlc19wcm9jZXNzKEV3a19UaWxlZF9CYWNraW5nX1N0CiAKIHN0YXRpYyBpbnQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQgKmRhdGEpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiA9IGRhdGE7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihk
YXRhKTsKICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CiAKICAgICBpZiAodHVjKSB7CkBA
IC0xNzYsNyArMTY5LDcgQEAgc3RhdGljIEV3a19UaWxlICpfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9uZXcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICAgIEV2YXMgKmV2YXMg
PSBldmFzX29iamVjdF9ldmFzX2dldChwcml2LT5zZWxmKTsKICAgICBpZiAoIWV2YXMpIHsKICAg
ICAgICAgQ1JJVElDQUwoImV2YXNfb2JqZWN0X2V2YXNfZ2V0IGZhaWxlZCEiKTsKLSAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIHQgPSBld2tfdGls
ZV9tYXRyaXhfdGlsZV9uZXcKQEAgLTE4NCw3ICsxNzcsNyBAQCBzdGF0aWMgRXdrX1RpbGUgKl9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhCiAKICAgICBpZiAoIXQpIHsKICAgICAgICAgQ1JJVElDQUwoImV3a190aWxlX21hdHJpeF90
aWxlX25ldyBmYWlsZWQhIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKICAgICByZXR1cm4gdDsKQEAgLTIxMyw3ICsyMDYsNyBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSAqaQogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
YXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlICp0
LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkKIHsKICAgICBpZiAoaXQtPnRpbGUp
Ci0gICAgICAgIENSSVRJQ0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSBOVUxMISIs
IGl0LT50aWxlKTsKKyAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxk
IGJlIDAhIiwgaXQtPnRpbGUpOwogICAgIGl0LT50aWxlID0gdDsKICAgICBldmFzX29iamVjdF9t
b3ZlKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9tZXRyeS55KTsKICAg
ICBldmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCBpdC0+Z2VvbWV0cnkudywgaXQt
Pmdlb21ldHJ5LmgpOwpAQCAtMjM3LDcgKzIzMCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
CiAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwogCi0g
ICAgaXQtPnRpbGUgPSBOVUxMOworICAgIGl0LT50aWxlID0gMDsKIH0KIAogc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKQEAgLTI1OSw3ICsyNTIsOSBAQCBzdGF0aWMgaW5saW5l
IEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Fk
ZChFd2tfVGlsZQogewogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVx
dWVzdCAqcjsKIAotICAgIE1BTExPQ19PUl9PT01fUkVUKHIsIHNpemVvZigqciksIEVJTkFfRkFM
U0UpOworICAgIHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVu
ZGVyX1JlcXVlc3QqPihtYWxsb2Moc2l6ZW9mKCpyKSkpOworICAgIGlmICghcikKKyAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBpZiAocHJpb3JpdHkgPT0gUFJFX1JFTkRFUl9QUklP
UklUWV9ISUdIKQogICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVp
bmFfaW5saXN0X3ByZXBlbmQKQEAgLTM2NSw3ICszNjAsNyBAQCBlbmQ6CiAKIHN0YXRpYyBFaW5h
X0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYih2b2lk
ICpkYXRhKQogewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSBkYXRh
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CiAKICAgICBpZiAocHJpdi0+cHJv
Y2Vzcy5wcmVfY2IpCiAgICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZV9jYihwcml2LT5w
cm9jZXNzLnByZV9kYXRhLCBwcml2LT5zZWxmKTsKQEAgLTM3Niw3ICszNzEsNyBAQCBzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2Io
dm9pZCAqZGF0YSkKICAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3Mu
cG9zdF9kYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKIAogICAgIGlmICghcHJpdi0+cmVuZGVyLnBy
ZV9yZW5kZXJfcmVxdWVzdHMpIHsKLSAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gTlVMTDsK
KyAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gMDsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CiAgICAgfQogCkBAIC0zODksNyArMzg0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChFd2tfVGlsZWRfQmEK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgZWNvcmVfaWRsZXJfZGVsKHByaXYtPnJlbmRlci5pZGxl
cik7Ci0gICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gTlVMTDsKKyAgICBwcml2LT5yZW5kZXIuaWRs
ZXIgPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2KQpAQCAtNDQ3LDkgKzQ0Miw5IEBAIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgICAgICAg
IHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBt
X2NvbCwgbV9yb3csIHpvb20pOwogCiAgICAgICAgIGlmICghdCkgewotICAgICAgICAgICAgLyog
Tk9URTogaXQgbmV2ZXIgcmV0dXJucyBOVUxMIGlmIGl0LT50aWxlIHdhcyBzZXQhICovCisgICAg
ICAgICAgICAvKiBOT1RFOiBpdCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNldCEg
Ki8KICAgICAgICAgICAgIGlmIChpdC0+dGlsZSkgewotICAgICAgICAgICAgICAgIENSSVRJQ0FM
KCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSBOVUxMISIsIGl0LT50aWxlKTsKKyAgICAg
ICAgICAgICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgMCEiLCBp
dC0+dGlsZSk7CiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShwcml2LCBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7CiAgICAgICAgICAgICB9CkBAIC00ODMs
MjEgKzQ3OCwyMyBAQCBzdGF0aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKEV3a19UaWxlZAogCiAgICAgREJHKCJvPSVwIiwg
cHJpdi0+c2VsZik7CiAKLSAgICBNQUxMT0NfT1JfT09NX1JFVChpdCwgc2l6ZW9mKCppdCksIE5V
TEwpOworICAgIGl0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSo+
KG1hbGxvYyhzaXplb2YoKml0KSkpOworICAgIGlmICghaXQpCisgICAgICAgIHJldHVybiAwOwog
CiAgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKICAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OwogICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52aWV3LnggKyB0dyAg
KmNvbDsKICAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55ICsg
dGggICpyb3c7CiAKLSAgICBpdC0+dGlsZSA9IE5VTEw7CisgICAgaXQtPnRpbGUgPSAwOwogCiAg
ICAgaXQtPnNtb290aF9zY2FsZSA9IHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3Nj
YWxlOwogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIHgsIHkpOwog
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKICAg
ICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGNvbCwg
cm93KSkgewogICAgICAgICBmcmVlKGl0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAogICAgIHJldHVybiBpdDsKQEAgLTU4Miw3ICs1NzksNyBAQCBz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZQogewogICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQr
KykgewogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dfZGVsKHByaXYs
ICpzdGFydCk7Ci0gICAgICAgICpzdGFydCA9IE5VTEw7CisgICAgICAgICpzdGFydCA9IDA7CiAg
ICAgfQogfQogCkBAIC01OTYsMTQgKzU5MywxNCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRAog
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0
YXJ0LCBlbmQpOwogCiAgICAgZnJlZShwcml2LT52aWV3Lml0ZW1zKTsKLSAgICBwcml2LT52aWV3
Lml0ZW1zID0gTlVMTDsKKyAgICBwcml2LT52aWV3Lml0ZW1zID0gMDsKICAgICBwcml2LT52aWV3
LmNvbHMgPSAwOwogICAgIHByaXYtPnZpZXcucm93cyA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQogewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYgPSBkYXRhOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CiAK
ICAgICBJTkYoIlRPRE8gJXAgKHZpc2libGU/ICVkKSBbJWx1LCVsdV0gJWQsJWQgKyAlZHglZCIs
CiAgICAgICAgIHQsIHQtPnZpc2libGUsIHQtPmNvbCwgdC0+cm93LCBhcmVhLT54LCBhcmVhLT55
LCBhcmVhLT53LCBhcmVhLT5oKTsKQEAgLTY5Niw3ICs2OTMsOSBAQCBzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0ICpvKQogCiAgICAgREJH
KCJvPSVwIiwgbyk7CiAKLSAgICBDQUxMT0NfT1JfT09NX1JFVChwcml2LCBzaXplb2YoKnByaXYp
KTsKKyAgICBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+
KGNhbGxvYygxLCBzaXplb2YoKnByaXYpKSk7CisgICAgaWYgKCFwcml2KQorICAgICAgICByZXR1
cm47CiAKICAgICBwcml2LT5zZWxmID0gbzsKICAgICBwcml2LT52aWV3LnRpbGUuem9vbSA9IDEu
MDsKQEAgLTczMiw3ICs3MzEsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0ICpvKQogICAgIGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+
Y29udGVudHNfY2xpcHBlcik7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChwcml2
LT5jb250ZW50c19jbGlwcGVyLCBvKTsKIAotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9t
b2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIE5VTEwpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIDApOwogICAgIGV2YXNfb2JqZWN0X21vdmUo
cHJpdi0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+
YmFzZS5jbGlwcGVyLCAwLCAwKTsKICAgICBldmFzX29iamVjdF9jbGlwX3NldChwcml2LT5jb250
ZW50c19jbGlwcGVyLCBwcml2LT5iYXNlLmNsaXBwZXIpOwpAQCAtODMxLDcgKzgzMCwxMiBAQCBz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYQogICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsg
b2xkX3Jvd3M7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFu
Z2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOwogICAgIH0KLSAgICBSRUFMTE9DX09SX09PTV9SRVQo
cHJpdi0+dmlldy5pdGVtcywgc2l6ZW9mKEVpbmFfSW5saXN0KikgKiAoaW50KXJvd3MpOworCisg
ICAgdm9pZCogbmV3SXRlbXMgPSByZWFsbG9jKHByaXYtPnZpZXcuaXRlbXMsIHNpemVvZihFaW5h
X0lubGlzdCopICogKGludClyb3dzKTsKKyAgICBpZiAoIW5ld0l0ZW1zKQorICAgICAgICByZXR1
cm47CisKKyAgICBwcml2LT52aWV3Lml0ZW1zID0gc3RhdGljX2Nhc3Q8RWluYV9Jbmxpc3QqKj4o
bmV3SXRlbXMpOwogICAgIHByaXYtPnZpZXcucm93cyA9IHJvd3M7CiAgICAgcHJpdi0+dmlldy5j
b2xzID0gY29sczsKICAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7CkBAIC04NDAsNyArODQ0LDcg
QEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVt
cyArIHJvd3M7CiAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewogICAgICAg
ICAgICAgRWluYV9Cb29sIHI7Ci0gICAgICAgICAgICAqc3RhcnQgPSBOVUxMOworICAgICAgICAg
ICAgKnN0YXJ0ID0gMDsKICAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19jb2xzX2VuZF9hZGQKICAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMp
OwogICAgICAgICAgICAgaWYgKCFyKSB7CkBAIC04NTcsNyArODYxLDcgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGEKICAgICAgICAgRWluYV9Jbmxpc3QgKipzdGFydCwgKiplbmQ7CiAgICAgICAg
IGludCB0b2RvID0gY29scyAtIG9sZF9jb2xzOwogICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcu
aXRlbXM7Ci0gICAgICAgIGVuZCA9IHN0YXJ0ICsgTUlOKG9sZF9yb3dzLCByb3dzKTsKKyAgICAg
ICAgZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywgcm93cyk7CiAgICAgICAgIGlmICh0
b2RvID4gMCkgewogICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7CiAg
ICAgICAgICAgICAgICAgRWluYV9Cb29sIHI7CkBAIC0xMzc1LDEwICsxMzc5LDEwIEBAIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmpl
Y3QgKm8pCiAKIEV2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoRXZhcyAq
ZSkKIHsKLSAgICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQgPSBOVUxMOworICAgIHN0YXRpYyBF
dmFzX1NtYXJ0ICpzbWFydCA9IDA7CiAKICAgICBpZiAoX2V3a190aWxlZF9sb2dfZG9tIDwgMCkK
LSAgICAgICAgX2V3a190aWxlZF9sb2dfZG9tID0gZWluYV9sb2dfZG9tYWluX3JlZ2lzdGVyKCJF
d2tfVGlsZWRfQmFja2luZ19TdG9yZSIsIE5VTEwpOworICAgICAgICBfZXdrX3RpbGVkX2xvZ19k
b20gPSBlaW5hX2xvZ19kb21haW5fcmVnaXN0ZXIoIkV3a19UaWxlZF9CYWNraW5nX1N0b3JlIiwg
MCk7CiAKICAgICBpZiAoIXNtYXJ0KSB7CiAgICAgICAgIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNz
IHNjID0KQEAgLTE0MTEsNyArMTQxNSw3IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cmVuZGVyX2NiX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sICgqY2IpKHZvaWQKIAogRXdr
X1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9j
YWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4obywgcHJpdiwgTlVMTCk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
diwgMCk7CiAgICAgcmV0dXJuIGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYt
Pm1vZGVsLm1hdHJpeCk7CiB9CiAKQEAgLTE2MTMsNyArMTYxNyw3IEBAIEVpbmFfQm9vbCBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6
b29tLCBFdmFzCiAKICAgICBpZiAocmVjYWxjKSB7CiAgICAgICAgIEV2YXNfQ29vcmQgdywgaDsK
LSAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIE5VTEwsIE5VTEwsICZ3LCAmaCk7
CisgICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAwLCAwLCAmdywgJmgpOwogICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2LCB3LCBo
LCB0dywgdGgpOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJl
cnMocHJpdik7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nl
c3MocHJpdik7CkBAIC0xNzg5LDcgKzE3OTMsNyBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCB2YWx1ZQog
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKIHsKICAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YyA9IE5VTEw7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMgPSAwOwog
CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55ID0gMDsKQEAgLTE4NjMsOSArMTg2Nyw5IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCAqbywgdW5z
CiAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdywgbiwgcHJpdi0+dmlldy5yb3dzKTsK
ICAgICBzdGFydF9yb3cgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG47CiAgICAgc3Rh
cnRfY29sID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuOwotICAgIGVuZF9yb3cgPSBN
SU4ocHJpdi0+bW9kZWwuY3VyLnJvd3MgLSAxLAorICAgIGVuZF9yb3cgPSBzdGQ6Om1pbihwcml2
LT5tb2RlbC5jdXIucm93cyAtIDEsCiAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LnJvdyArIHByaXYtPnZpZXcucm93cyArIG4gLSAxKTsKLSAgICBlbmRfY29sID0gTUlOKHByaXYt
Pm1vZGVsLmN1ci5jb2xzIC0gMSwKKyAgICBlbmRfY29sID0gc3RkOjptaW4ocHJpdi0+bW9kZWwu
Y3VyLmNvbHMgLSAxLAogICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBw
cml2LT52aWV3LmNvbHMgKyBuIC0gMSk7CiAKICAgICBJTkYoInN0YXJ0X3Jvdz0lbHUsIGVuZF9y
b3c9JWx1LCBzdGFydF9jb2w9JWx1LCBlbmRfY29sPSVsdSIsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCmluZGV4IDQ2YWFhODMuLjMwMTAzZWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5o
CkBAIC00MiwxMCArNDIsNiBAQAogI2RlZmluZSBUSUxFX1pPT01fQVRfU0laRShTSVpFLCBPUklH
X1RJTEUpICgoZmxvYXQpKFNJWkUpIC8gKGZsb2F0KShPUklHX1RJTEUpKQogI2RlZmluZSBST1VO
REVEX1pPT00oU0laRSwgWk9PTSkgKChmbG9hdCkoU0laRSkgLyAoZmxvYXQpKCgoaW50KXJvdW5k
ZigoU0laRSkgLyAoWk9PTSkpKSkpCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7
Ci0jZW5kaWYKLQogI2luY2x1ZGUgPEV2YXMuaD4KICNpbmNsdWRlIDxjYWlyby5oPgogCkBAIC0x
MjMsNyArMTE5LDQgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2Nh
bmNlbChFdmFzX09iamVjdCogbyk7CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7CiBFaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCogbyk7Ci0jaWZkZWYgX19jcGx1
c3BsdXMKLX0KLSNlbmRpZgogI2VuZGlmIC8vIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcAppbmRleCBjMmY5Yzg0Li5m
ZjRjNDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJp
eC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCkBA
IC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiZXdrX3RpbGVk
X21hdHJpeC5oIgogCi0jZGVmaW5lIF9HTlVfU09VUkNFCiAjaW5jbHVkZSAiZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmUuaCIKICNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
PEVpbmEuaD4KQEAgLTYyLDggKzYxLDggQEAgc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2xlYWtlZCA9
IDA7CiAvKiBjYWxsZWQgd2hlbiBtYXRyaXhzcGFyc2UgaXMgcmVzaXplZCBvciBmcmVlZCAqLwog
c3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUodm9pZCAqdXNlcl9kYXRhLCB2
b2lkICpjZWxsX2RhdGEpCiB7Ci0gICAgRXdrX1RpbGVfTWF0cml4ICp0bSA9IHVzZXJfZGF0YTsK
LSAgICBFd2tfVGlsZSAqdCA9IGNlbGxfZGF0YTsKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0g
c3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4odXNlcl9kYXRhKTsKKyAgICBFd2tfVGlsZSog
dCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oY2VsbF9kYXRhKTsKIAogICAgIGlmICghdCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtOTQsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0
cml4X2NlbGxfZnJlZSh2b2lkICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKIC8qIGNhbGxl
ZCB3aGVuIGNhY2hlIG9mIHVudXNlZCB0aWxlIGlzIGZsdXNoZWQgKi8KIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KQogewotICAg
IEV3a19UaWxlX01hdHJpeCAqdG0gPSBkYXRhOworICAgIEV3a19UaWxlX01hdHJpeCogdG0gPSBz
dGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPihkYXRhKTsKICAgICBFaW5hX01hdHJpeHNwYXJz
ZV9DZWxsICpjZWxsOwogIAogICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0
KHRtLT5tYXRyaXgsIHQtPnJvdywgdC0+Y29sLCAmY2VsbCkpIHsKQEAgLTExMSw3ICsxMTAsNyBA
QCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCkKICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRh
dGVzLCB0KTsKIAogICAgIC8qIHNldCB0byBudWxsIHRvIGF2b2lkIGRvdWJsZSBmcmVlICovCi0g
ICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2VsbCwgTlVMTCwgTlVMTCk7
CisgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2VsbCwgMCwgMCk7CiAg
ICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9jbGVhcihjZWxsKTsKIAogICAgIGlmIChFSU5BX1VO
TElLRUxZKCEhdC0+dmlzaWJsZSkpIHsKQEAgLTEzNiw3ICsxMzUsNyBAQCBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCkKICAqIGV4
aXN0aW5nIHRpbGVzIGFuZCBnaXZlIHRoZW0gYmFjaywgYWxsb3dpbmcgdGhlbSB0byBiZQogICog
ZnJlZWQvcmVwbGFjZWQgYnkgdGhlIGNhY2hlLgogICoKLSAqIEBwYXJhbSB0dWMgY2FjaGUgb2Yg
dW51c2VkIHRpbGVzIG9yIEBjIE5VTEwgdG8gY3JlYXRlIG9uZQorICogQHBhcmFtIHR1YyBjYWNo
ZSBvZiB1bnVzZWQgdGlsZXMgb3IgQGMgMCB0byBjcmVhdGUgb25lCiAgKiAgICAgICAgYXV0b21h
dGljYWxseS4KICAqIEBwYXJhbSBjb2xzIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXgu
CiAgKiBAcGFyYW0gcm93cyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LgpAQCAtMTQ0LDE5
ICsxNDMsMTkgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUodm9pZCAq
ZGF0YSwgRXdrX1RpbGUgKnQpCiAgKiBAcGFyYW0gcmVuZGVyX2NiIGZ1bmN0aW9uIHVzZWQgdG8g
cmVuZGVyIGdpdmVuIHRpbGUgdXBkYXRlLgogICogQHBhcmFtIHJlbmRlcl9kYXRhIGNvbnRleHQg
dG8gZ2l2ZSBiYWNrIHRvIEBhIHJlbmRlcl9jYi4KICAqCi0gKiBAcmV0dXJuIG5ld2x5IGFsbG9j
YXRlZCBpbnN0YW5jZSBvbiBzdWNjZXNzLCBAYyBOVUxMIG9uIGZhaWx1cmUuCisgKiBAcmV0dXJu
IG5ld2x5IGFsbG9jYXRlZCBpbnN0YW5jZSBvbiBzdWNjZXNzLCBAYyAwIG9uIGZhaWx1cmUuCiAg
Ki8KIEV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjb2xzLCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNf
Q29sb3JzcGFjZSBjc3BhY2UsIHZvaWQgKCpyZW5kZXJfY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxl
ICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKSwgY29uc3Qgdm9pZCAqcmVuZGVyX2Rh
dGEpCiB7Ci0gICAgRXdrX1RpbGVfTWF0cml4ICp0bTsKLQotICAgIENBTExPQ19PUl9PT01fUkVU
KHRtLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSwgTlVMTCk7CisgICAgRXdrX1RpbGVfTWF0cml4
KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGNhbGxvYygxLCBzaXplb2YoRXdr
X1RpbGVfTWF0cml4KSkpOworICAgIGlmICghdG0pCisgICAgICAgIHJldHVybiAwOwogCiAgICAg
dG0tPm1hdHJpeCA9IGVpbmFfbWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2xzLCBfZXdrX3RpbGVf
bWF0cml4X2NlbGxfZnJlZSwgdG0pOwogICAgIGlmICghdG0tPm1hdHJpeCkgewogICAgICAgICBF
UlIoImNvdWxkIG5vdCBjcmVhdGUgc3BhcnNlIG1hdHJpeC4iKTsKICAgICAgICAgZnJlZSh0bSk7
Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBp
ZiAodHVjKQpAQCAtMTY3LDcgKzE2Niw3IEBAIEV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0
cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjCiAgICAg
ICAgICAgICBFUlIoIm5vIGNhY2hlIG9mIHVudXNlZCB0aWxlISIpOwogICAgICAgICAgICAgZWlu
YV9tYXRyaXhzcGFyc2VfZnJlZSh0bS0+bWF0cml4KTsKICAgICAgICAgICAgIGZyZWUodG0pOwot
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMjQ0LDcgKzI0Myw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3Jlc2l6
ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvCiAg
Ki8KIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9n
ZXQoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodG0sIE5VTEwpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh0bSwgMCk7CiAgICAgcmV0dXJuIHRtLT50dWM7CiB9CiAKQEAgLTI2Miw3ICsyNjEsNyBAQCBF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNv
bnN0IEV3a19UaWxlX01hdHJpeCAqdAogICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KICAq
IEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29tIHRvIHVzZS4KICAqCi0gKiBAcmV0dXJuIFRoZSB0
aWxlIGluc3RhbmNlIG9yIEBjIE5VTEwgaWYgbm9uZSBpcyBmb3VuZC4gSWYgdGhlIHRpbGUKKyAq
IEByZXR1cm4gVGhlIHRpbGUgaW5zdGFuY2Ugb3IgQGMgMCBpZiBub25lIGlzIGZvdW5kLiBJZiB0
aGUgdGlsZQogICogICAgICAgICB3YXMgaW4gdGhlIHVudXNlZCBjYWNoZSBpdCB3aWxsIGJlIEBi
IHJlbW92ZWQgKHRodXMKICAqICAgICAgICAgY29uc2lkZXJlZCB1c2VkKSBhbmQgb25lIHNob3Vs
ZCBnaXZlIGl0IGJhY2sgd2l0aAogICogICAgICAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQo
KSBhZnRlcndhcmRzLgpAQCAtMjcxLDEwICsyNzAsOSBAQCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KmV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAq
dAogICovCiBFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KEV3a19UaWxl
X01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQg
em9vbSkKIHsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfZGF0
YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKKyAgICBFd2tfVGlsZSogdCA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRy
aXgsIHJvdywgY29sKSk7CiAgICAgaWYgKCF0KQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICBpZiAodC0+em9vbSA9PSB6b29tKQogICAgICAgICBnb3RvIGVu
ZDsKQEAgLTMwMiwxMCArMzAwLDcgQEAgRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX2V4
YWN0X2dldChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwKICAqLwogRWlu
YV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9NYXRyaXgg
KnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCiB7
Ci0gICAgRXdrX1RpbGUgKnQ7Ci0KLSAgICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhf
Z2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKLSAgICBpZiAoIXQpCisgICAgaWYgKCFlaW5hX21h
dHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpKQogICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0zMjgsOCArMzIz
LDggQEAgRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXgg
KnRtLCBFdmFzICpldmFzLCB1bnNpZ25lZCBsb24KICAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKICAg
ICBFd2tfVGlsZSAqdDsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwg
TlVMTCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTCh6b29tID4gMC4wLCBO
VUxMKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIDApOworICAgIEVJ
TkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgMCk7CiAKICAgICB0dyA9
IHRtLT50aWxlLnc7CiAgICAgdGggPSB0bS0+dGlsZS5oOwpAQCAtMzM3LDEzICszMzIsMTMgQEAg
RXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBF
dmFzICpldmFzLCB1bnNpZ25lZCBsb24KICAgICB0ID0gZXdrX3RpbGVfbmV3KGV2YXMsIHR3LCB0
aCwgem9vbSwgdG0tPmNzcGFjZSk7CiAgICAgaWYgKCF0KSB7CiAgICAgICAgIEVSUigiY291bGQg
bm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBjc3BhY2U9JWQiLCB0dywgdGgsIChkb3VibGUp
em9vbSwgdG0tPmNzcGFjZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKICAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3NldCh0bS0+
bWF0cml4LCByb3csIGNvbCwgdCkpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0IG1hdHJp
eCBjZWxsLCByb3cvY29sIG91dHNpZGUgbWF0cml4IGRpbWVuc2lvbnMhIik7CiAgICAgICAgIGV3
a190aWxlX2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKICAgICB0LT5jb2wgPSBjb2w7CkBAIC0zNzYsNyArMzcxLDcgQEAgRXdrX1RpbGUg
KmV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBFdmFzICpldmFz
LCB1bnNpZ25lZCBsb24KICAqIHVudXNlZCBjYWNoZS4KICAqCiAgKiBAcGFyYW0gdG0gdGhlIHRp
bGUgbWF0cml4IHRvIHJldHVybiB0aWxlIHRvLgotICogQHBhcmFtIHQgdGhlIHRpbGUgaW5zdGFu
Y2UgdG8gcmV0dXJuLCBtdXN0IEBiIG5vdCBiZSBAYyBOVUxMLgorICogQHBhcmFtIHQgdGhlIHRp
bGUgaW5zdGFuY2UgdG8gcmV0dXJuLCBtdXN0IEBiIG5vdCBiZSBAYyAwLgogICogQHBhcmFtIGxh
c3RfdXNlZCB0aW1lIGluIHdoaWNoIHRpbGUgd2FzIGxhc3QgdXNlZC4KICAqCiAgKiBAcmV0dXJu
ICNFSU5BX1RSVUUgb24gc3VjY2VzcyBvciAjRUlOQV9GQUxTRSBvbiBmYWlsdXJlLgpAQCAtMzk1
LDcgKzM5MCw2IEBAIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVf
TWF0cml4ICp0bSwgRXdrX1RpbGUgKnQsIGRvdWJsZSBsYXN0CiAKIEVpbmFfQm9vbCBld2tfdGls
ZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBj
b2wsIHVuc2lnbmVkIGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQogewot
ICAgIEV3a19UaWxlICp0OwogICAgIEVpbmFfUmVjdGFuZ2xlIG5ld191cGRhdGU7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKQEAgLTQxMiw4ICs0
MDYsNyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19UaWxlX01h
dHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bgogICAgIGlmICh1cGRhdGUtPnkgKyB1cGRh
dGUtPmggLSAxID49IHRtLT50aWxlLmgpCiAgICAgICAgIG5ld191cGRhdGUuaCA9IHRtLT50aWxl
LmggLSB1cGRhdGUtPnk7CiAKLSAgICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0
KHRtLT5tYXRyaXgsIHJvdywgY29sKTsKLQorICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93
LCBjb2wpKTsKICAgICBpZiAoIXQpCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKQEAgLTQy
Niw3ICs0MTksNiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19U
aWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bgogCiBFaW5hX0Jvb2wgZXdrX3Rp
bGVfbWF0cml4X3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQg
bG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQogewotICAgIEV3a19UaWxlICp0OwogICAgIEVp
bmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKIApAQCAtNDM2LDcgKzQyOCw3IEBAIEVpbmFfQm9vbCBl
d2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNp
Z25lZCBsb25nIGNvCiAgICAgaWYgKCFjZWxsKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwog
Ci0gICAgdCA9IGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCk7CisgICAgRXdr
X1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxf
ZGF0YV9nZXQoY2VsbCkpOwogICAgIGlmICghdCkgewogICAgICAgICBDUklUSUNBTCgibWF0cml4
IGNlbGwgd2l0aCBubyB0aWxlISIpOwogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtNTE4
LDExICs1MTAsMTAgQEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVf
TWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGEKIAogICAgIHdoaWxlIChlaW5h
X3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsKICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBjb2wsIHJvdzsKLSAgICAgICAgRXdrX1RpbGUgKnQ7CiAgICAgICAgIGNvbCA9IGlu
Zm8tPmNvbDsKICAgICAgICAgcm93ID0gaW5mby0+cm93OwogCi0gICAgICAgIHQgPSBlaW5hX21h
dHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOworICAgICAgICBF
d2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0
YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSk7CiAgICAgICAgIGlmICghdCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCkBAIC01NDEsMTQgKzUzMiwxNSBAQCBFaW5hX0Jvb2wgZXdrX3Rp
bGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqdXBkYQogdm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01h
dHJpeCAqdG0pCiB7CiAgICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0OwotICAgIEV3a19UaWxlICp0
OworICAgIHZvaWQqIGl0ZW07CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwog
CiAgICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKLSAgICBFSU5BX0xJU1RfRk9S
RUFDSF9TQUZFKHRtLT51cGRhdGVzLCBsLCBsX25leHQsIHQpIHsKLSAgICAgICAgZXdrX3RpbGVf
dXBkYXRlc19wcm9jZXNzKHQsIHRtLT5yZW5kZXIuY2IsIHRtLT5yZW5kZXIuZGF0YSk7Ci0gICAg
ICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgICAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFy
KHQpOworICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodG0tPnVwZGF0ZXMsIGwsIGxfbmV4dCwg
aXRlbSkgeworICAgICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4o
aXRlbSk7CisgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0aWxlLCB0bS0+cmVuZGVy
LmNiLCB0bS0+cmVuZGVyLmRhdGEpOworICAgICAgICBpZiAodGlsZS0+dmlzaWJsZSkgeworICAg
ICAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0aWxlKTsKICAgICAgICAgICAgIHRtLT51
cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRtLT51cGRhdGVzLCBsKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTU1NiwxMiArNTQ4LDEyIEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0
ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXggKnRtKQogCiB2b2lkIGV3a190aWxlX21hdHJpeF91
cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCAqdG0pCiB7Ci0gICAgRXdrX1RpbGUgKnQ7Cisg
ICAgdm9pZCogaXRlbTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CiAKLSAg
ICBFSU5BX0xJU1RfRlJFRSh0bS0+dXBkYXRlcywgdCkKLSAgICAgICAgZXdrX3RpbGVfdXBkYXRl
c19jbGVhcih0KTsKLSAgICB0bS0+dXBkYXRlcyA9IE5VTEw7CisgICAgRUlOQV9MSVNUX0ZSRUUo
dG0tPnVwZGF0ZXMsIGl0ZW0pCisgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoc3RhdGlj
X2Nhc3Q8RXdrX1RpbGUqPihpdGVtKSk7CisgICAgdG0tPnVwZGF0ZXMgPSAwOwogfQogCiAvLyBy
ZW1vdmUgbWUgbGF0ZXIhCkBAIC01ODQsMTAgKzU3Niw5IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4
X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQogCiAgICAgRUlOQV9JVEVSQVRPUl9GT1JF
QUNIKGl0LCBjZWxsKSB7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgcm93LCBjb2w7Ci0gICAgICAg
IEV3a19UaWxlICp0OwogICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dl
dChjZWxsLCAmcm93LCAmY29sKTsKLSAgICAgICAgdCA9IGVpbmFfbWF0cml4c3BhcnNlX2NlbGxf
ZGF0YV9nZXQoY2VsbCk7CiAKKyAgICAgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOwogICAgICAgICBp
ZiAoIXQpIHsKICAgICAgICAgICAgIGlmICghbGFzdF9lbXB0eSkgewogICAgICAgICAgICAgICAg
IGxhc3RfZW1wdHkgPSBFSU5BX1RSVUU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3RpbGVkX21vZGVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
bW9kZWwuY3BwCmluZGV4IGQyZTk0NzkuLjYxNjg1NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfbW9kZWwuY3BwCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiZXdrX3RpbGVkX21vZGVsLmgiCiAKLSNkZWZpbmUgX0dOVV9TT1VSQ0UK
ICNpbmNsdWRlICJld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIgogI2luY2x1ZGUgImV3a190aWxl
ZF9wcml2YXRlLmgiCiAjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgpAQCAtMzcsMTMgKzM2LDcgQEAK
ICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCiAKLSNpZm5kZWYgQ0FJUk9fRk9STUFUX1JH
QjE2XzU2NQotI2RlZmluZSBDQUlST19GT1JNQVRfUkdCMTZfNTY1IDQKLSNlbmRpZgotCiAjZGVm
aW5lIElEWChjb2wsIHJvdywgcm93c3BhbikgKGNvbCArIChyb3cgKiByb3dzcGFuKSkKLSNkZWZp
bmUgTUlOKGEsIGIpICgoYSA8IGIpID8gYSA6IGIpCi0jZGVmaW5lIE1BWChhLCBiKSAoKGEgPiBi
KSA/IGEgOiBiKQogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiBzdGF0aWMgdWludDY0X3QgdGls
ZXNfYWxsb2NhdGVkID0gMDsKQEAgLTYwLDcgKzUzLDcgQEAgc3RydWN0IHRpbGVfYWNjb3VudCB7
CiB9OwogCiBzdGF0aWMgc2l6ZV90IGFjY291bnRpbmdfbGVuID0gMDsKLXN0YXRpYyBzdHJ1Y3Qg
dGlsZV9hY2NvdW50ICphY2NvdW50aW5nID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgdGlsZV9hY2Nv
dW50ICphY2NvdW50aW5nID0gMDsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlsZV9hY2NvdW50
ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCiB7CkBAIC03Myw3ICs2
Niw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRpbGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291
bnRfZ2V0KGNvbnN0IEV3a19UaWxlICp0KQogICAgIH0KIAogICAgIGkgPSAoYWNjb3VudGluZ19s
ZW4gKyAxKSAqIHNpemVvZihzdHJ1Y3QgdGlsZV9hY2NvdW50KTsKLSAgICBSRUFMTE9DX09SX09P
TV9SRVQoYWNjb3VudGluZywgaSwgTlVMTCk7CisgICAgUkVBTExPQ19PUl9PT01fUkVUKGFjY291
bnRpbmcsIGksIDApOwogCiAgICAgYWNjID0gYWNjb3VudGluZyArIGFjY291bnRpbmdfbGVuOwog
ICAgIGFjYy0+c2l6ZSA9IHQtPnc7CkBAIC0yNjYsMTIgKzI1OSwxNSBAQCBFd2tfVGlsZSAqZXdr
X3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6
b29tLCBFdmFzXwogICAgICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMTZfNTY1OwogICAg
IH0gZWxzZSB7CiAgICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQiLCBjc3BhY2Up
OwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAg
REJHKCJzaXplOiAlZHglZCAoJWQpLCB6b29tOiAlZiwgY3NwYWNlPSVkIiwgdywgaCwgYXJlYSwg
KGRvdWJsZSl6b29tLCBjc3BhY2UpOwogCi0gICAgTUFMTE9DX09SX09PTV9SRVQodCwgc2l6ZW9m
KEV3a19UaWxlKSwgTlVMTCk7CisgICAgdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4obWFsbG9j
KHNpemVvZihFd2tfVGlsZSkpKTsKKyAgICBpZiAoIXQpCisgICAgICAgIHJldHVybiAwOworCiAg
ICAgdC0+aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CiAKICAgICBlZSA9IGVj
b3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CkBAIC0yODAsNyArMjc2LDcgQEAgRXdrX1Rp
bGUgKmV3a190aWxlX25ldyhFdmFzICpldmFzLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwg
ZmxvYXQgem9vbSwgRXZhc18KICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfY29udGVudF9oaW50
X3NldCh0LT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRfRFlOQU1JQyk7CiAKICAgICB0
LT52aXNpYmxlID0gMDsKLSAgICB0LT51cGRhdGVzID0gTlVMTDsKKyAgICB0LT51cGRhdGVzID0g
MDsKIAogICAgIG1lbXNldCgmdC0+c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9TdGF0cykpOwog
ICAgIHQtPnN0YXRzLmFyZWEgPSBhcmVhOwpAQCAtMzAzLDE0ICsyOTksMTQgQEAgRXdrX1RpbGUg
KmV3a190aWxlX25ldyhFdmFzICpldmFzLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxv
YXQgem9vbSwgRXZhc18KIAogICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHQtPmltYWdl
LCB0LT53LCB0LT5oKTsKICAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0LT5p
bWFnZSwgdC0+Y3NwYWNlKTsKLSAgICB0LT5waXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRh
X2dldCh0LT5pbWFnZSwgRUlOQV9UUlVFKTsKKyAgICB0LT5waXhlbHMgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQodC0+aW1hZ2UsIEVJTkFfVFJVRSkp
OwogICAgIHQtPnN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0
LT5waXhlbHMsIGZvcm1hdCwgdywgaCwgc3RyaWRlKTsKICAgICBzdGF0dXMgPSBjYWlyb19zdXJm
YWNlX3N0YXR1cyh0LT5zdXJmYWNlKTsKICAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19T
VUNDRVNTKSB7CiAgICAgICAgIEVSUigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAl
cyIsCiAgICAgICAgICAgICBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwogICAgICAg
ICBmcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCiAgICAgdC0+Y2Fpcm8gPSBjYWlyb19jcmVhdGUodC0+c3VyZmFjZSk7CkBAIC0zMjAsNyAr
MzE2LDcgQEAgRXdrX1RpbGUgKmV3a190aWxlX25ldyhFdmFzICpldmFzLCBFdmFzX0Nvb3JkIHcs
IEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSwgRXZhc18KICAgICAgICAgY2Fpcm9fc3VyZmFjZV9k
ZXN0cm95KHQtPnN1cmZhY2UpOwogICAgICAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOwog
ICAgICAgICBmcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCiAgICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOwpAQCAtMzgzLDcg
KzM3OSw3IEBAIHZvaWQgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGUgKnQpCiAgICAgICAg
IHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwogICAgICAgICBpZiAodC0+dXBkYXRl
cykgewogICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOwotICAgICAgICAg
ICAgdC0+dXBkYXRlcyA9IE5VTEw7CisgICAgICAgICAgICB0LT51cGRhdGVzID0gMDsKICAgICAg
ICAgfQogICAgIH0KIH0KQEAgLTQwMyw3ICszOTksNyBAQCB2b2lkIGV3a190aWxlX3VwZGF0ZV9h
cmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqcikKICAgICAgICAgdC0+c3Rh
dHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CiAgICAgICAgIGlmICh0LT51cGRhdGVzKSB7CiAg
ICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAgICAgICB0LT51
cGRhdGVzID0gTlVMTDsKKyAgICAgICAgICAgIHQtPnVwZGF0ZXMgPSAwOwogICAgICAgICB9CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MzYsMTMgKzQzMiwxMyBAQCB2b2lkIGV3a190aWxl
X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCwgYwogI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJfVElNRQogICAgICAg
ICBzdHJ1Y3QgdGltZXZhbCB0aW1ldjsKICAgICAgICAgZG91YmxlIHJlbmRlcl9zdGFydDsKLSAg
ICAgICAgZ2V0dGltZW9mZGF5KCZ0aW1ldiwgTlVMTCk7CisgICAgICAgIGdldHRpbWVvZmRheSgm
dGltZXYsIDApOwogICAgICAgICByZW5kZXJfc3RhcnQgPSAoZG91YmxlKXRpbWV2LnR2X3NlYyAr
CiAgICAgICAgICAgICAoKChkb3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKTsKICNlbmRp
ZgogICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQsICZyKTsKICNpZmRlZiBUSUxFX1NUQVRTX0FD
Q09VTlRfUkVOREVSX1RJTUUKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0aW1ldiwgTlVMTCk7Cisg
ICAgICAgIGdldHRpbWVvZmRheSgmdGltZXYsIDApOwogICAgICAgICB0LT5zdGF0cy5yZW5kZXJf
dGltZSA9IChkb3VibGUpdGltZXYudHZfc2VjICsKICAgICAgICAgICAgICgoKGRvdWJsZSl0aW1l
di50dl91c2VjKSAvIDEwMDAwMDApIC0gcmVuZGVyX3N0YXJ0OwogI2VuZGlmCkBAIC00NzgsNyAr
NDc0LDcgQEAgdm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQogICAgICAg
ICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IDA7CiAgICAgZWxzZSBpZiAodC0+dXBkYXRlcykgewog
ICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAgIHQtPnVwZGF0ZXMg
PSBOVUxMOworICAgICAgICB0LT51cGRhdGVzID0gMDsKICAgICB9CiB9CiAKQEAgLTUyNCwxMyAr
NTIwLDE1IEBAIHN0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURfQ0FDSEVfTUFYX0ZSRUUg
PSAzMjsKICAqCiAgKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBjYWNoZSBvZiB1bnVzZWQgdGls
ZXMsIHVzZQogICogICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpIHRvIHJlbGVh
c2UgcmVzb3VyY2VzLiBJZiBub3QKLSAqICAgICAgICAgcG9zc2libGUgdG8gYWxsb2NhdGUgbWVt
b3J5LCBAYyBOVUxMIGlzIHJldHVybmVkLgorICogICAgICAgICBwb3NzaWJsZSB0byBhbGxvY2F0
ZSBtZW1vcnksIEBjIDAgaXMgcmV0dXJuZWQuCiAgKi8KIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyhzaXplX3QgbWF4KQogewogICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjOwogCi0gICAgQ0FMTE9DX09SX09PTV9SRVQodHVjLCBzaXplb2YoRXdr
X1RpbGVfVW51c2VkX0NhY2hlKSwgTlVMTCk7CisgICAgdHVjID0gc3RhdGljX2Nhc3Q8RXdrX1Rp
bGVfVW51c2VkX0NhY2hlKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUp
KSk7CisgICAgaWYgKCF0dWMpCisgICAgICAgIHJldHVybiAwOwogCiAgICAgREJHKCJ0dWM9JXAi
LCB0dWMpOwogICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKQEAgLTU5MSwxMyArNTg5LDE0IEBA
IHN0YXRpYyB2b2lkIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YykKICAqLwogdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1Rp
bGVfVW51c2VkX0NhY2hlICp0dWMpCiB7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5
ICppdHI7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKIAogICAgIGlmICgh
dHVjLT5lbnRyaWVzLmNvdW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBFSU5BX0xJU1RfRlJF
RSh0dWMtPmVudHJpZXMubGlzdCwgaXRyKSB7CisgICAgdm9pZCogaXRlbTsKKyAgICBFSU5BX0xJ
U1RfRlJFRSh0dWMtPmVudHJpZXMubGlzdCwgaXRlbSkgeworICAgICAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGVfRW50cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9F
bnRyeSo+KGl0ZW0pOwogICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHItPnRpbGVfZnJlZS5k
YXRhLCBpdHItPnRpbGUpOwogICAgICAgICBmcmVlKGl0cik7CiAgICAgfQpAQCAtNjE1LDcgKzYx
NCw3IEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjKQogICovCiBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9j
YWNoZV9yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiB7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHR1YywgTlVMTCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHR1YywgMCk7CiAgICAgdHVjLT5yZWZlcmVuY2VzKys7CiAgICAgcmV0dXJuIHR1
YzsKIH0KQEAgLTY1NCw3ICs2NTMsNiBAQCBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Vz
ZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQogCiBzaXplX3QgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3Qg
Ynl0ZXMpCiB7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7CiAgICAgRWlu
YV9MaXN0ICpsLCAqbF9uZXh0OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0
dWMsIDApOwogICAgIHNpemVfdCBkb25lOwpAQCAtNjcwLDkgKzY2OCwxMSBAQCBzaXplX3QgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXpl
X3QgYnl0ZXMpCiAgICAgICogRG9uJ3QgbmVlZCB0byBzb3J0IGFueSBtb3JlLgogICAgICAqLwog
CisgICAgdm9pZCogaXRlbTsKICAgICBkb25lID0gMDsKICAgICBjb3VudCA9IDA7Ci0gICAgRUlO
QV9MSVNUX0ZPUkVBQ0hfU0FGRSh0dWMtPmVudHJpZXMubGlzdCwgbCwgbF9uZXh0LCBpdHIpIHsK
KyAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBsX25leHQs
IGl0ZW0pIHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0
aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKICAgICAgICAgRXdr
X1RpbGUgKnQgPSBpdHItPnRpbGU7CiAgICAgICAgIGlmIChkb25lID4gYnl0ZXMpCiAgICAgICAg
ICAgICBicmVhazsKQEAgLTc1MiwxMiArNzUyLDEyIEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKi8KIEVpbmFfQm9vbCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3
a19UaWxlICp0KQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqZW50cnk7CiAg
ICAgRWluYV9MaXN0ICplLCAqbDsKIAotICAgIGUgPSBOVUxMOwotICAgIEVJTkFfTElTVF9GT1JF
QUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBlbnRyeSkKLSAgICB7CisgICAgdm9pZCogaXRlbTsK
KyAgICBlID0gMDsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwg
aXRlbSkgeworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGVudHJ5ID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7CiAgICAgICAgIGlm
IChlbnRyeS0+dGlsZSA9PSB0KSB7CiAgICAgICAgICAgICBlID0gbDsKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtNzcxLDcgKzc3MSw3IEBAIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0CiAgICAgdHVj
LT5lbnRyaWVzLmNvdW50LS07CiAgICAgdHVjLT5tZW1vcnkudXNlZCAtPSBzaXplb2YoRXdrX1Rp
bGUpICsgdC0+Ynl0ZXM7CiAgICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3Zl
X2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGUpOwotICAgIGZyZWUoZW50cnkpOworICAgIGZyZWUo
aXRlbSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAtODA3LDcgKzgwNywxMCBAQCBF
aW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjLCBFd2tfVGlsZSAqdAogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9
CiAKLSAgICBNQUxMT0NfT1JfT09NX1JFVChlLCBzaXplb2YoRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5KSwgRUlOQV9GQUxTRSk7CisgICAgZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSo+KG1hbGxvYyhzaXplb2YoRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5
KSkpOworICAgIGlmICghZSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKICAgICB0dWMt
PmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQodHVjLT5lbnRyaWVzLmxpc3QsIGUpOwog
ICAgIGlmIChlaW5hX2Vycm9yX2dldCgpKSB7CiAgICAgICAgIEVSUigiTGlzdCBhbGxvY2F0aW9u
IGZhaWxlZCIpOwpAQCAtODI3LDE1ICs4MzAsMTUgQEAgRWluYV9Cb29sIGV3a190aWxlX3VudXNl
ZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQK
IAogdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjKQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqaXRyOworICAg
IHZvaWQqIGl0ZW07CiAgICAgRWluYV9MaXN0ICpsOwogICAgIGludCBjb3VudCA9IDA7CiAgICAg
cHJpbnRmKCJDYWNoZSBvZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9yeTog
JXp1LyV6dVxuIiwKICAgICAgICAgICAgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMu
YWxsb2NhdGVkLAogICAgICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgp
OwogCi0gICAgRUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0cikgewot
ICAgICAgICBjb25zdCBFd2tfVGlsZSAqdCA9IGl0ci0+dGlsZTsKKyAgICBFSU5BX0xJU1RfRk9S
RUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgICAgICBjb25zdCBFd2tfVGls
ZSAqdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pLT50
aWxlOwogICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsCiAg
ICAgICAgICAgICAgICB0LT5jb2wsIHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9vbSwKICAgICAg
ICAgICAgICAgIHQtPnZpc2libGUgPyAnKic6ICcgJyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109225</attachid>
            <date>2011-09-29 17:31:08 -0700</date>
            <delta_ts>2011-10-03 07:12:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68599-20110930093106.patch</filename>
            <type>text/plain</type>
            <size>218964</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzMDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NNYWtlTGlzdHNFZmwudHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
aW5kZXggZjlkYjM1Yzk0MzE3MjUzOTJiMWNjNjcxMThmNDUxZjJiNWFkNGU2OS4uNzZkY2RkOTdh
YmRiMzNjZTcxZjc3NTU5MDUyY2RiYjhkODgxZDAxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKKysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0
c0VmbC50eHQKQEAgLTc0LDkgKzc0LDkgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAg
ICBlZmwvZXdrL2V3a19uZXR3b3JrLmNwcAogICAgIGVmbC9ld2svZXdrX3NldHRpbmdzLmNwcAog
ICAgIGVmbC9ld2svZXdrX3Byb3RvY29sX2hhbmRsZXIuY3BwCi0gICAgZWZsL2V3ay9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZS5jCi0gICAgZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmMKLSAgICBl
ZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jCisgICAgZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZS5jcHAKKyAgICBlZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCisgICAgZWZsL2V3ay9l
d2tfdGlsZWRfbW9kZWwuY3BwCiAgICAgZWZsL2V3ay9ld2tfdXRpbC5jcHAKICAgICBlZmwvZXdr
L2V3a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdl
TG9nCmluZGV4IDczMjVkNTFiYjE0NmQxNGQxZTU4ODVhNTIxYTRiNWJmYjdkMmYzZmEuLjMyZThl
Y2M5MDZiYjJiODcwMDUxYzM0M2RjOGVmZWM3YzEzNTcxNzQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAxMS0wOS0yOCAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3Vu
Zy5jb20+CisKKyAgICAgICAgW0VGTF0gUmVuYW1lIGV3a190aWxlZF8qLmMgdG8gZXdrX3RpbGVk
XyouY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
ODU5OQorCisgICAgICAgIFVzZSBhIEMrKyBjb21waWxlciBmb3IgdGhlc2UgZmlsZXMgYW5kIGZp
eCBjb21waWxlIGlzc3VlcyBhbmQgY29kaW5nIHN0eWxlLgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jLgorICAgICAgICAqIGV3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbWF0cml4
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4
LmMuCisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2RlbC5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmMuCisKIDIwMTEtMDktMjggIEt3YW5n
SHl1ayBLaW0gIDxoeXVraS5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gUmVtb3Zl
IHVzZWxlc3MgYXNzaWdubWVudCBjb2RlIGluIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29t
X3NldF9pbnRlcm5hbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZS5jIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzMjUxMzU3YmIyNzVi
MDA2NWZhMTQ3YWFhNTg2N2ZlYWI0YzVlYjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5n
X3N0b3JlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTE2ICswLDAgQEAKLS8qCi0gICAgQ29weXJp
Z2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcwotICAgIENvcHlyaWdodCAoQykg
MjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCi0KLSAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
LSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
Ci0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0b3JlLmgiCi0KLSNkZWZpbmUgX0dO
VV9TT1VSQ0UKLSNpbmNsdWRlICJld2tfdGlsZWRfcHJpdmF0ZS5oIgotI2luY2x1ZGUgPEVjb3Jl
Lmg+Ci0jaW5jbHVkZSA8RWluYS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bWF0
aC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+IC8vIFhYWCBSRU1PVkUgTUUgTEFURVIKLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSBJRFgoY29sLCByb3cs
IHJvd3NwYW4pIChjb2wgKyAocm93ICogcm93c3BhbikpCi0KLSNpZiAhZGVmaW5lZChNSU4pCi0j
IGRlZmluZSBNSU4oYSwgYikgKChhIDwgYikgPyBhIDogYikKLSNlbmRpZgotCi0jaWYgIWRlZmlu
ZWQoTUFYKQotIyBkZWZpbmUgTUFYKGEsIGIpICgoYSA+IGIpID8gYSA6IGIpCi0jZW5kaWYKLQot
dHlwZWRlZiBlbnVtIF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHk7Ci10eXBlZGVmIHN0
cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhOwotdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbTsKLXR5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0OwotCi1lbnVtIF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVu
ZGVyX1ByaW9yaXR5IHsKLSAgICBQUkVfUkVOREVSX1BSSU9SSVRZX0xPVyA9IDAsIC8qKjwgQXBw
ZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0ICovCi0gICAgUFJFX1JFTkRFUl9QUklPUklUWV9I
SUdIICAgICAvKio8IFByZXBlbmQgdGhlIHJlcXVlc3QgdG8gdGhlIGxpc3QgKi8KLX07Ci0KLXN0
cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSB7Ci0gICAgRUlOQV9JTkxJU1Q7Ci0g
ICAgRXdrX1RpbGUgKnRpbGU7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5
LCB3LCBoOwotICAgIH0gZ2VvbWV0cnk7Ci0gICAgRWluYV9Cb29sIHNtb290aF9zY2FsZTsKLX07
Ci0KLXN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0IHsK
LSAgICBFSU5BX0lOTElTVDsKLSAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwotICAgIGZsb2F0
IHpvb207Ci19OwotCi1zdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgewotICAg
IEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBwZWRfRGF0YSBiYXNlOwotICAgIEV2YXNfT2JqZWN0ICpz
ZWxmOwotICAgIEV2YXNfT2JqZWN0ICpjb250ZW50c19jbGlwcGVyOwotICAgIHN0cnVjdCB7Ci0g
ICAgICAgIEVpbmFfSW5saXN0ICoqaXRlbXM7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywg
aDsKLSAgICAgICAgbG9uZyBjb2xzLCByb3dzOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAg
ICAgRXZhc19Db29yZCB3LCBoOwotICAgICAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgICAg
IEVpbmFfQm9vbCB6b29tX3dlYWtfc21vb3RoX3NjYWxlOjE7Ci0gICAgICAgIH0gdGlsZTsKLSAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgRXZh
c19Db29yZCB4LCB5OwotICAgICAgICAgICAgfSBjdXIsIG9sZCwgYmFzZSwgem9vbV9jZW50ZXI7
Ci0gICAgICAgIH0gb2Zmc2V0OwotICAgIH0gdmlldzsKLSAgICBFdmFzX0NvbG9yc3BhY2UgY3Nw
YWNlOwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEV3a19UaWxlX01hdHJpeCAqbWF0cml4OwotICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKLSAgICAg
ICAgfSBiYXNlOwotICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBj
b2xzLCByb3dzOwotICAgICAgICB9IGN1ciwgb2xkOwotICAgICAgICBFdmFzX0Nvb3JkIHdpZHRo
LCBoZWlnaHQ7Ci0gICAgfSBtb2RlbDsKLSAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wg
KCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVh
KTsKLSAgICAgICAgdm9pZCAqZGF0YTsKLSAgICAgICAgRWluYV9Jbmxpc3QgKnByZV9yZW5kZXJf
cmVxdWVzdHM7Ci0gICAgICAgIEVjb3JlX0lkbGVyICppZGxlcjsKLSAgICAgICAgRWluYV9Cb29s
IGRpc2FibGVkOwotICAgICAgICBFaW5hX0Jvb2wgc3VzcGVuZDoxOwotICAgIH0gcmVuZGVyOwot
ICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKigqcHJlX2NiKSh2b2lkICpkYXRhLCBFdmFzX09i
amVjdCAqbyk7Ci0gICAgICAgIHZvaWQgKnByZV9kYXRhOwotICAgICAgICB2b2lkICooKnBvc3Rf
Y2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09iamVjdCAqbyk7Ci0gICAgICAg
IHZvaWQgKnBvc3RfZGF0YTsKLSAgICB9IHByb2Nlc3M7Ci0gICAgc3RydWN0IHsKLSAgICAgICAg
RWluYV9Cb29sIGFueToxOwotICAgICAgICBFaW5hX0Jvb2wgcG9zOjE7Ci0gICAgICAgIEVpbmFf
Qm9vbCBzaXplOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBtb2RlbDoxOwotICAgICAgICBFaW5hX0Jv
b2wgb2Zmc2V0OjE7Ci0gICAgfSBjaGFuZ2VkOwotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAg
IEVjb3JlX0V2ZW50X0hhbmRsZXIgKnNpZ191c3I7Ci0jZW5kaWYKLX07Ci0KLXN0YXRpYyBFdmFz
X1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKLWlu
dCBfZXdrX3RpbGVkX2xvZ19kb20gPSAtMTsKLQotI2RlZmluZSBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihvYmosIHB0ciwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnB0ciA9IGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG9i
aik7IFwKLSAgICBpZiAoIXB0cikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ1JJVElDQUwoIm5vIHByaXZhdGUgZGF0YSBp
biBvYmo9JXAiLCBvYmopOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIF9fVkFf
QVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9
Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNz
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgdm9pZCAqZGF0YSA9
IE5VTEw7Ci0KLSAgICAvKiBEbyBub3QgcHJvY2VzcyB1cGRhdGVzLiBOb3RlIHRoYXQgd2Ugc3Rp
bGwgd2FudCB0byBnZXQgdXBkYXRlcyByZXF1ZXN0cwotICAgICAqIGluIHRoZSBxdWV1ZSBpbiBv
cmRlciB0byBub3QgbWlzcyBhbnkgdXBkYXRlcyBhZnRlciB0aGUgcmVuZGVyIGlzCi0gICAgICog
cmVzdW1lZC4KLSAgICAgKi8KLSAgICBpZiAocHJpdi0+cmVuZGVyLnN1c3BlbmQgfHwgIWV2YXNf
b2JqZWN0X3Zpc2libGVfZ2V0KHByaXYtPnNlbGYpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAocHJpdi0+cHJvY2Vzcy5wcmVfY2IpCi0gICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnBy
ZV9jYihwcml2LT5wcm9jZXNzLnByZV9kYXRhLCBwcml2LT5zZWxmKTsKLQotICAgIGV3a190aWxl
X21hdHJpeF91cGRhdGVzX3Byb2Nlc3MocHJpdi0+bW9kZWwubWF0cml4KTsKLQotICAgIGlmIChw
cml2LT5wcm9jZXNzLnBvc3RfY2IpCi0gICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2
LT5wcm9jZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7Ci19Ci0KLXN0YXRpYyBpbnQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQgKmRhdGEpCi17Ci0gICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IGRhdGE7Ci0gICAgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2Rl
bC5tYXRyaXgpOwotCi0gICAgaWYgKHR1YykgewotICAgICAgICBEQkcoImZsdXNoIHVudXNlZCB0
aWxlIGNhY2hlLiIpOwotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0
dWMpOwotICAgIH0gZWxzZQotICAgICAgICBFUlIoIm5vIGNhY2hlPyEiKTsKLQotICAgIHJldHVy
biAwOwotfQotCi1zdGF0aWMgRXdrX1RpbGUgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X25ldyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNv
bCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0g
ICAgRXZhcyAqZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYpOwotICAgIGlm
ICghZXZhcykgewotICAgICAgICBDUklUSUNBTCgiZXZhc19vYmplY3RfZXZhc19nZXQgZmFpbGVk
ISIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICB0ID0gZXdrX3RpbGVfbWF0
cml4X3RpbGVfbmV3Ci0gICAgICAgIChwcml2LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93
LCB6b29tKTsKLQotICAgIGlmICghdCkgewotICAgICAgICBDUklUSUNBTCgiZXdrX3RpbGVfbWF0
cml4X3RpbGVfbmV3IGZhaWxlZCEiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgeCwg
RXZhc19Db29yZCB5KQotewotICAgIGl0LT5nZW9tZXRyeS54ID0geDsKLSAgICBpdC0+Z2VvbWV0
cnkueSA9IHk7Ci0KLSAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUo
aXQtPnRpbGUtPmltYWdlLCB4LCB5KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fcmVzaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKLXsKLSAgICBpdC0+Z2VvbWV0cnkudyA9IHc7Ci0g
ICAgaXQtPmdlb21ldHJ5LmggPSBoOwotCi0gICAgaWYgKGl0LT50aWxlKSB7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShpdC0+dGlsZS0+aW1hZ2UsIHcsIGgpOwotICAgICAgICBldmFzX29i
amVjdF9pbWFnZV9maWxsX3NldChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIHcsIGgpOwotICAgIH0K
LX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRl
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlICp0LCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkKLXsKLSAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAg
IENSSVRJQ0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSBOVUxMISIsIGl0LT50aWxl
KTsKLSAgICBpdC0+dGlsZSA9IHQ7Ci0gICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1h
Z2UsIGl0LT5nZW9tZXRyeS54LCBpdC0+Z2VvbWV0cnkueSk7Ci0gICAgZXZhc19vYmplY3RfcmVz
aXplKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKLSAg
ICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldAotICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAw
LCAwLCBpdC0+Z2VvbWV0cnkudywgaXQtPmdlb21ldHJ5LmgpOwotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX3Ntb290aF9zY2FsZV9zZXQoaXQtPnRpbGUtPmltYWdlLCBpdC0+c21vb3RoX3NjYWxlKTsK
LQotICAgIGlmICghZXdrX3RpbGVfdmlzaWJsZV9nZXQodCkpCi0gICAgICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9hZGQodC0+aW1hZ2UsIHByaXYtPnNlbGYpOwotCi0gICAgZXdrX3RpbGVf
c2hvdyh0KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdCwgZG91YmxlIGxhc3RfdXNlZCkKLXsKLSAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YzsKLSAgICBld2tfdGlsZV9oaWRlKGl0LT50aWxlKTsKLSAgICBp
ZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KGl0LT50aWxlKSkKLSAgICAgICAgZXZhc19vYmplY3Rf
c21hcnRfbWVtYmVyX2RlbChpdC0+dGlsZS0+aW1hZ2UpOwotICAgIGV3a190aWxlX21hdHJpeF90
aWxlX3B1dChwcml2LT5tb2RlbC5tYXRyaXgsIGl0LT50aWxlLCBsYXN0X3VzZWQpOwotICAgIHR1
YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKLQotICAgIGl0LT50
aWxlID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsK
LSAgICBFaW5hX0lubGlzdCAqaXQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXRlbTsKLSAgICBpbnQgaTsKLSAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1l
X2dldCgpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnZpZXcucm93czsgaSsrKSB7Ci0g
ICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9S
RUFDSChpdCwgaXRlbSkKLSAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKQotICAgICAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwg
bGFzdF91c2VkKTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywg
ZmxvYXQgem9vbSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBw
cmlvcml0eSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnI7Ci0KLSAgICBNQUxMT0NfT1JfT09NX1JFVChyLCBzaXplb2YoKnIpLCBFSU5BX0ZBTFNF
KTsKLQotICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0gpCi0gICAg
ICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3RfcHJlcGVu
ZAotICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lO
TElTVF9HRVQocikpOwotICAgIGVsc2UKLSAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJf
cmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBlbmQKLSAgICAgICAgICAgIChwcml2LT5yZW5kZXIu
cHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKLQotICAgIHItPmNvbCA9
IGNvbDsKLSAgICByLT5yb3cgPSByb3c7Ci0gICAgci0+em9vbSA9IHpvb207Ci0KLSAgICByZXR1
cm4gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyKQot
ewotICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3RfcmVt
b3ZlCi0gICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJ
U1RfR0VUKHIpKTsKLSAgICBmcmVlKHIpOwotfQotCi1zdGF0aWMgaW5saW5lIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2KQotewotICAgIHJldHVybiBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKAotICAg
ICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywKLSAgICAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2KQotewotICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJp
di0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7Ci0gICAgd2hpbGUgKCpwbCkgewotICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7Ci0gICAgICAg
IHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHBy
aXYpOwotICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCAqcGwpOwotICAgICAg
ICBmcmVlKHIpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KQotewotICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5k
ZXJfcmVxdWVzdHM7Ci0gICAgRWluYV9Jbmxpc3QgKml0ZXIgPSAqcGwsICp0bXA7Ci0gICAgd2hp
bGUgKGl0ZXIpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0ICpyID0KLSAgICAgICAgICAgIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCi0gICAg
ICAgICAgICAgICAgaXRlciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1
ZXN0KTsKLSAgICAgICAgdG1wID0gaXRlci0+bmV4dDsKLSAgICAgICAgKnBsID0gZWluYV9pbmxp
c3RfcmVtb3ZlKCpwbCwgaXRlcik7Ci0gICAgICAgIGl0ZXIgPSB0bXA7Ci0gICAgICAgIGZyZWUo
cik7Ci0gICAgfQotfQotCi0vKiBhc3N1bWVzIHByaXYtPnByb2Nlc3MucHJlX2NiIHdhcyBjYWxs
ZWQgaWYgcmVxdWlyZWQhICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYpCi17Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0ICpyZXE7Ci0gICAgRWluYV9SZWN0YW5nbGUgYXJlYTsKLSAgICBFd2tfVGlsZV9NYXRy
aXggKnRtID0gcHJpdi0+bW9kZWwubWF0cml4OwotICAgIEV3a19UaWxlICp0OwotICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjOwotICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Ci0gICAg
ZmxvYXQgem9vbTsKLSAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgp
OwotCi0gICAgcmVxID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9maXJzdChwcml2KTsKLSAgICBpZiAoIXJlcSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29s
ID0gcmVxLT5jb2w7Ci0gICAgcm93ID0gcmVxLT5yb3c7Ci0gICAgem9vbSA9IHJlcS0+em9vbTsK
LQotICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHModG0sIGNvbCwgcm93
LCB6b29tKSkgewotICAgICAgICBEQkcoIm5vIHByZS1yZW5kZXIgcmVxdWlyZWQgZm9yIHRpbGUg
JWx1LCVsdSBAICVmLiIsIGNvbCwgcm93LCB6b29tKTsKLSAgICAgICAgZ290byBlbmQ7Ci0gICAg
fQotCi0gICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2ws
IHJvdywgem9vbSk7Ci0gICAgaWYgKCF0KQotICAgICAgICBnb3RvIGVuZDsKLQotICAgIGFyZWEu
eCA9IDA7Ci0gICAgYXJlYS55ID0gMDsKLSAgICBhcmVhLncgPSBwcml2LT52aWV3LnRpbGUudzsK
LSAgICBhcmVhLmggPSBwcml2LT52aWV3LnRpbGUuaDsKLQotICAgIHByaXYtPnJlbmRlci5jYihw
cml2LT5yZW5kZXIuZGF0YSwgdCwgJmFyZWEpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFf
dXBkYXRlX2FkZCgKLSAgICAgICAgdC0+aW1hZ2UsCi0gICAgICAgIGFyZWEueCwgYXJlYS55LCBh
cmVhLncsIGFyZWEuaCk7Ci0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0
bSwgdCk7Ci0KLSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQodG0sIHQsIGxhc3RfdXNlZCk7
Ci0KLWVuZDoKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X2RlbChwcml2LCByZXEpOwotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVf
Z2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9f
Zmx1c2godHVjKTsKLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiKHZvaWQgKmRhdGEpCi17Ci0gICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IGRhdGE7Ci0KLSAgICBpZiAocHJpdi0+cHJvY2Vzcy5w
cmVfY2IpCi0gICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZV9jYihwcml2LT5wcm9jZXNz
LnByZV9kYXRhLCBwcml2LT5zZWxmKTsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUocHJpdik7Ci0KLSAgICBpZiAocHJpdi0+
cHJvY2Vzcy5wb3N0X2NiKQotICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IocHJpdi0+cHJv
Y2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOwotCi0gICAgaWYgKCFwcml2LT5yZW5k
ZXIucHJlX3JlbmRlcl9yZXF1ZXN0cykgewotICAgICAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSBO
VUxMOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICByZXR1cm4gRUlO
QV9UUlVFOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCi17Ci0gICAgaWYgKCFwcml2LT5yZW5kZXIuaWRsZXIpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGVjb3JlX2lkbGVyX2RlbChwcml2LT5yZW5kZXIuaWRsZXIpOwotICAgIHByaXYtPnJlbmRl
ci5pZGxlciA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYpCi17Ci0gICAgaWYgKHByaXYtPnJlbmRlci5pZGxlcikKLSAgICAgICAgcmV0
dXJuOwotICAgIHByaXYtPnJlbmRlci5pZGxlciA9IGVjb3JlX2lkbGVyX2FkZCgKLSAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYiwgcHJpdik7Ci19
Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVu
ZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgaWYgKHByaXYt
PnJlbmRlci5zdXNwZW5kKQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotCi0gICAgcHJpdi0+
cmVuZGVyLnN1c3BlbmQgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKHByaXYpOwotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19
Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5k
ZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAoIXByaXYt
PnJlbmRlci5zdXNwZW5kKQotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotCi0gICAgcHJpdi0+
cmVuZGVyLnN1c3BlbmQgPSBFSU5BX0ZBTFNFOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwot
fQotCi1zdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cp
Ci17Ci0gICAgdW5zaWduZWQgbG9uZyBtX2NvbCA9IHByaXYtPm1vZGVsLmJhc2UuY29sICsgY29s
OwotICAgIHVuc2lnbmVkIGxvbmcgbV9yb3cgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHJvdzsK
LSAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwotCi0gICAgaWYg
KG1fY29sID49IHByaXYtPm1vZGVsLmN1ci5jb2xzIHx8IG1fcm93ID49IHByaXYtPm1vZGVsLmN1
ci5yb3dzKSB7Ci0gICAgICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNlZCk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgRXdrX1RpbGUgKnQ7Ci0gICAgICAgIGNvbnN0IGZsb2F0IHpvb20g
PSBwcml2LT52aWV3LnRpbGUuem9vbTsKLQotICAgICAgICBpZiAoaXQtPnRpbGUpIHsKLSAgICAg
ICAgICAgIEV3a19UaWxlICpvbGQgPSBpdC0+dGlsZTsKLSAgICAgICAgICAgIGlmIChvbGQtPnJv
dyAhPSBtX3JvdyB8fCBvbGQtPmNvbCAhPSBtX2NvbCB8fCBvbGQtPnpvb20gIT0gem9vbSkKLSAg
ICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHBy
aXYsIGl0LCBsYXN0X3VzZWQpOwotICAgICAgICAgICAgZWxzZSBpZiAob2xkLT5yb3cgPT0gbV9y
b3cgJiYgb2xkLT5jb2wgPT0gbV9jb2wgJiYgb2xkLT56b29tID09IHpvb20pCi0gICAgICAgICAg
ICAgICAgZ290byBlbmQ7Ci0gICAgICAgIH0KLQotICAgICAgICB0ID0gZXdrX3RpbGVfbWF0cml4
X3RpbGVfZXhhY3RfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCwgbV9jb2wsIG1fcm93LCB6b29tKTsK
LQotICAgICAgICBpZiAoIXQpIHsKLSAgICAgICAgICAgIC8qIE5PVEU6IGl0IG5ldmVyIHJldHVy
bnMgTlVMTCBpZiBpdC0+dGlsZSB3YXMgc2V0ISAqLwotICAgICAgICAgICAgaWYgKGl0LT50aWxl
KSB7Ci0gICAgICAgICAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxk
IGJlIE5VTEwhIiwgaXQtPnRpbGUpOwotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3VzZWQpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAvKiBEbyBub3QgYWRkIG5ldyByZXF1ZXN0cyB0byB0aGUgcmVu
ZGVyIHF1ZXVlICovCi0gICAgICAgICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKSB7Ci0g
ICAgICAgICAgICAgICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2
LCBtX2NvbCwgbV9yb3csIHpvb20pOwotICAgICAgICAgICAgICAgIGlmICghdCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHQsIGl0KTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIGlmICh0ICE9IGl0LT50aWxlKSB7Ci0gICAgICAgICAgICBpZiAo
aXQtPnRpbGUpCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGl0LCBsYXN0X3VzZWQpOwotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHQsIGl0KTsKLSAgICAgICAg
fQotCi0gICAgICBlbmQ6Ci0KLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykK
LXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAgICBFdmFzX0Nvb3Jk
IHgsIHksIHR3LCB0aDsKLQotICAgIERCRygibz0lcCIsIHByaXYtPnNlbGYpOwotCi0gICAgTUFM
TE9DX09SX09PTV9SRVQoaXQsIHNpemVvZigqaXQpLCBOVUxMKTsKLQotICAgIHR3ID0gcHJpdi0+
dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICB4ID0gcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54ICsgcHJpdi0+dmlldy54ICsgdHcgICpjb2w7Ci0gICAgeSA9IHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueSArIHRoICAqcm93OwotCi0gICAg
aXQtPnRpbGUgPSBOVUxMOwotCi0gICAgaXQtPnNtb290aF9zY2FsZSA9IHByaXYtPnZpZXcudGls
ZS56b29tX3dlYWtfc21vb3RoX3NjYWxlOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXQsIHgsIHkpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jl
c2l6ZShpdCwgdHcsIHRoKTsKLSAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X2ZpbGwocHJpdiwgaXQsIGNvbCwgcm93KSkgewotICAgICAgICBmcmVlKGl0KTsKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGl0OwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCi17Ci0gICAgaWYg
KGl0LT50aWxlKSB7Ci0gICAgICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVf
Z2V0KCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUo
cHJpdiwgaXQsIGxhc3RfdXNlZCk7Ci0gICAgfQotCi0gICAgZnJlZShpdCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCi17
Ci0gICAgaWYgKGl0LT5zbW9vdGhfc2NhbGUgPT0gc21vb3RoX3NjYWxlKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290
aF9zY2FsZV9zZXQoaXQtPnRpbGUtPmltYWdlLCBzbW9vdGhfc2NhbGUpOwotfQotCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBpZiAocHJpdi0+Y2hhbmdlZC5hbnkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBldmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHByaXYtPnNlbGYp
OwotICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlOQV9UUlVFOwotfQotCi1zdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGNv
dW50KQotewotICAgIEVpbmFfSW5saXN0ICpuOwotICAgIHVuc2lnbmVkIGludCBpOwotCi0gICAg
aWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbiA9ICgqcF9yb3cpLT5sYXN0Owot
Ci0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVS
X0dFVChuLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAgbiA9IG4tPnBy
ZXY7Ci0gICAgICAgICpwX3JvdyA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcF9yb3csIEVJTkFfSU5M
SVNUX0dFVChpdCkpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwo
cHJpdiwgaXQpOwotICAgIH0KLX0KLQotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdiwgRWluYV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGJhc2VfY29sLCB1bnNpZ25l
ZCBpbnQgY291bnQpCi17Ci0gICAgdW5zaWduZWQgaW50IGksIHIgPSBwX3JvdyAtIHByaXYtPnZp
ZXcuaXRlbXM7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYmFzZV9jb2wrKykg
ewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLQotICAgICAgICBp
dCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2NvbCwgcik7
Ci0gICAgICAgIGlmICghaXQpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRk
IGNvbHVtbiAldSBvZiAldSBpbiByb3cgJXUuIiwgaSwgY291bnQsIHIpOwotICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHBfcm93LCBp
KTsKLSAgICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgICAgICB9Ci0KLSAgICAgICAg
KnBfcm93ID0gZWluYV9pbmxpc3RfYXBwZW5kKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7
Ci0gICAgfQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd19kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdiwgRWluYV9Jbmxpc3QgKnJvdykKLXsKLSAgICB3aGlsZSAocm93KSB7Ci0gICAgICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBpdCA9IEVJTkFfSU5M
SVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAg
ICAgICAgcm93ID0gcm93LT5uZXh0OwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9kZWwocHJpdiwgaXQpOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRWluYV9Jbmxpc3QgKipzdGFydCwgRWluYV9Jbmxpc3QgKiplbmQpCi17Ci0g
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3Jvd19kZWwocHJpdiwgKnN0YXJ0KTsKLSAgICAgICAgKnN0YXJ0ID0g
TlVMTDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3Jvd3NfYWxsX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQotewot
ICAgIEVpbmFfSW5saXN0ICoqc3RhcnQ7Ci0gICAgRWluYV9Jbmxpc3QgKiplbmQ7Ci0KLSAgICBz
dGFydCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHBy
aXYtPnZpZXcucm93czsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3Jh
bmdlX2RlbChwcml2LCBzdGFydCwgZW5kKTsKLQotICAgIGZyZWUocHJpdi0+dmlldy5pdGVtcyk7
Ci0gICAgcHJpdi0+dmlldy5pdGVtcyA9IE5VTEw7Ci0gICAgcHJpdi0+dmlldy5jb2xzID0gMDsK
LSAgICBwcml2LT52aWV3LnJvd3MgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcmVuZGVyKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSAqYXJlYSkKLXsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
ID0gZGF0YTsKLQotICAgIElORigiVE9ETyAlcCAodmlzaWJsZT8gJWQpIFslbHUsJWx1XSAlZCwl
ZCArICVkeCVkIiwKLSAgICAgICAgdCwgdC0+dmlzaWJsZSwgdC0+Y29sLCB0LT5yb3csIGFyZWEt
PngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwotCi0gICAgaWYgKCF0LT52aXNpYmxlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJpdi0+dmlldy50aWxlLncgIT0gdC0+dyB8fCBw
cml2LT52aWV3LnRpbGUuaCAhPSB0LT5oKQotICAgICAgICByZXR1cm47IC8vIHRvZG86IHJlbW92
ZSBtZSBsYXRlciwgZG9uJ3QgZXZlbiBmbGFnIGFzIGRpcnR5IQotCi0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4ocHJpdi0+cmVuZGVyLmNiKTsKLSAgICBpZiAoIXByaXYtPnJlbmRlci5j
Yihwcml2LT5yZW5kZXIuZGF0YSwgdCwgYXJlYSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCh0LT5pbWFnZSwgYXJlYS0+eCwgYXJlYS0+
eSwgYXJlYS0+dywgYXJlYS0+aCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2LCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBpZiAocHJp
di0+bW9kZWwubWF0cml4KSB7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3Jvd3NfYWxsX2RlbChwcml2KTsKLQotICAgICAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IEVJ
TkFfRkFMU0U7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLQotICAg
ICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIH0KLQot
ICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxlX21hdHJpeF9uZXcodHVjLCBwcml2LT5t
b2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsIHByaXYtPmNzcGFjZSwgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwgcHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsKEV2YXNfT2JqZWN0ICpvLCBFdmFz
X09iamVjdCAqbWVtYmVyKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYp
OwotICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKLSAgICAgICAgcmV0dXJuOwotICAg
IGV2YXNfb2JqZWN0X2NsaXBfdW5zZXQobWVtYmVyKTsKLSAgICBpZiAoIWV2YXNfb2JqZWN0X2Ns
aXBlZXNfZ2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpKQotICAgICAgICBldmFzX29iamVjdF9o
aWRlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2FkZChFdmFzX09iamVjdCAqbywgRXZhc19PYmpl
Y3QgKm1lbWJlcikKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAg
ICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBldmFz
X29iamVjdF9jbGlwX3NldChtZW1iZXIsIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAgIGlm
IChldmFzX29iamVjdF92aXNpYmxlX2dldChvKSkKLSAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhw
cml2LT5jb250ZW50c19jbGlwcGVyKTsKLX0KLQotI2lmZGVmIERFQlVHX01FTV9MRUFLUwotc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdikKLXsKLSAgICBzdGF0aWMgaW50IHJ1biA9IDA7Ci0KLSAgICBy
dW4rKzsKLQotICAgIHByaW50ZigiXG4tLS0gQkVHSU4gREVCVUcgVElMRUQgQkFDS0lORyBTVE9S
RSBNRU1PUlkgWyVkXSAtLVxuIgotICAgICAgICAgICAidD0lMC4yZiwgb2JqPSVwLCBwcml2PSVw
LCB2aWV3Lml0ZW1zPSVwLCBtYXRyaXg9JXBcbiIsCi0gICAgICAgICAgIHJ1biwgZWNvcmVfbG9v
cF90aW1lX2dldCgpLAotICAgICAgICAgICBwcml2LT5zZWxmLCBwcml2LCBwcml2LT52aWV3Lml0
ZW1zLCBwcml2LT5tb2RlbC5tYXRyaXgpOwotCi0gICAgZXdrX3RpbGVfbWF0cml4X2RiZyhwcml2
LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX2FjY291bnRpbmdfZGJnKCk7Ci0KLSAgICBw
cmludGYoIi0tLSBFTkQgREVCVUcgVElMRUQgQkFDS0lORyBTVE9SRSBNRU1PUlkgWyVkXSAtLVxu
XG4iLCBydW4pOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zaWdfdXNyKHZvaWQgKmRhdGEsIGludCB0eXBlLCB2b2lkICpldmVudCkKLXsKLSAgICBFY29y
ZV9FdmVudF9TaWduYWxfVXNlciAqc2lnID0gKEVjb3JlX0V2ZW50X1NpZ25hbF9Vc2VyKilldmVu
dDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2ID0gKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqKWRhdGE7Ci0KLSAgICBpZiAoc2lnLT5udW1iZXIgPT0gMikgewot
ICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKLSAgICAgICAgdHVjID0gZXdrX3Rp
bGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICAgICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKLSAgICB9Ci0KLSAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcocHJpdik7Ci0gICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX21lbV9kYmcocHJpdik7Ci0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLSNlbmRp
ZgotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNf
T2JqZWN0ICpvKQotewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXY7Ci0K
LSAgICBEQkcoIm89JXAiLCBvKTsKLQotICAgIENBTExPQ19PUl9PT01fUkVUKHByaXYsIHNpemVv
ZigqcHJpdikpOwotCi0gICAgcHJpdi0+c2VsZiA9IG87Ci0gICAgcHJpdi0+dmlldy50aWxlLnpv
b20gPSAxLjA7Ci0gICAgcHJpdi0+dmlldy50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAgICBw
cml2LT52aWV3LnRpbGUuaCA9IERFRkFVTFRfVElMRV9IOwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7Ci0gICAgcHJpdi0+
dmlldy5vZmZzZXQub2xkLnggPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gMDsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSA9IDA7Ci0KLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IDA7Ci0gICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3cgPSAwOwotICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKLSAgICBw
cml2LT5tb2RlbC5jdXIucm93cyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOwot
ICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gMDsKLSAgICBwcml2LT5tb2RlbC53aWR0aCA9IDA7
Ci0gICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gMDsKLSAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9
IEVJTkFfRkFMU0U7Ci0gICAgcHJpdi0+Y3NwYWNlID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4
OyAvLyBUT0RPOiBkZXRlY3QgaXQuCi0KLSAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChv
LCBwcml2KTsKLSAgICBfcGFyZW50X3NjLmFkZChvKTsKLQotICAgIHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKAotICAgICAgICBldmFzX29iamVjdF9l
dmFzX2dldChvKSk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVy
LCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwK
LSAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhl
aWdodCk7Ci0gICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIs
IDI1NSwgMjU1LCAyNTUsIDI1NSk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50
c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsIG8pOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21h
dHJpeF9jcmVhdGUocHJpdiwgTlVMTCk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNl
LmNsaXBwZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBw
ZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIsIHByaXYtPmJhc2UuY2xpcHBlcik7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBw
cml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQKLSAgICAgICAgKEVDT1JFX0VW
RU5UX1NJR05BTF9VU0VSLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2lnX3VzciwgcHJpdik7
Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2RlbChFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBw
cml2KTsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YzsKLQotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1v
ZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7
Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2gocHJpdik7Ci0KLSAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOwotICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChwcml2KTsK
LSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7Ci0K
LSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVt
X2RiZyhwcml2KTsKLSAgICBpZiAocHJpdi0+c2lnX3VzcikKLSAgICAgICAgcHJpdi0+c2lnX3Vz
ciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfZGVsKHByaXYtPnNpZ191c3IpOwotI2VuZGlmCi0KLSAg
ICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgZXZhc19v
YmplY3RfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotCi0gICAgX3BhcmVudF9zYy5kZWwo
byk7Ci0KLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBwcmludGYoIlxuSU1QT1JUQU5UOiBU
SUxFRCBCQUNLSU5HIFNUT1JFIERFTEVURUQgKG1heSBiZSByZWFsIGxlYWtzKVxuIik7Ci0gICAg
ZXdrX3RpbGVfYWNjb3VudGluZ19kYmcoKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHkpCi17Ci0gICAgREJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIG8s
IHgsIHkpOwotCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0KLSAgICBp
ZiAocHJpdi0+Y2hhbmdlZC5wb3MpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcml2LT52
aWV3LnggPT0geCAmJiBwcml2LT52aWV3LnkgPT0geSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2NoYW5nZWQocHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29y
ZCBoKQotewotICAgIERCRygibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgbywgdywgaCk7Ci0KLSAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQotICAgIGlmIChwcml2LT5jaGFu
Z2VkLnNpemUpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcml2LT52aWV3LncgPT0gdyAm
JiBwcml2LT52aWV3LmggPT0gaCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHJpdi0+Y2hhbmdl
ZC5zaXplID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2Vk
KHByaXYpOwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxj
X3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3Jk
IHcsIEV2YXNfQ29vcmQgaCwgRXZhc19Db29yZCB0dywgRXZhc19Db29yZCB0aCkKLXsKLSAgICBs
b25nIGNvbHMsIHJvd3MsIG9sZF9yb3dzLCBvbGRfY29sczsKLSAgICBJTkYoIm89JXAsIG5ldyBz
aXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHcsIGgpOwotCi0gICAgY29scyA9IDEgKyAoaW50KWNl
aWwoKGZsb2F0KXcgLyAoZmxvYXQpdHcpOwotICAgIHJvd3MgPSAxICsgKGludCljZWlsKChmbG9h
dCloIC8gKGZsb2F0KXRoKTsKLQotICAgIElORigibz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVs
ZCwgcm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAotICAgICAgICBwcml2LT5zZWxmLCBjb2xzLCBy
b3dzLCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cyk7Ci0KLSAgICBpZiAocHJpdi0+
dmlldy5jb2xzID09IGNvbHMgJiYgcHJpdi0+dmlldy5yb3dzID09IHJvd3MpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG9sZF9jb2xzID0gcHJpdi0+dmlldy5jb2xzOwotICAgIG9sZF9yb3dzID0g
cHJpdi0+dmlldy5yb3dzOwotCi0gICAgaWYgKHJvd3MgPCBvbGRfcm93cykgewotICAgICAgICBF
aW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0
ZW1zICsgcm93czsKLSAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwot
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2
LCBzdGFydCwgZW5kKTsKLSAgICB9Ci0gICAgUkVBTExPQ19PUl9PT01fUkVUKHByaXYtPnZpZXcu
aXRlbXMsIHNpemVvZihFaW5hX0lubGlzdCopICogKGludClyb3dzKTsKLSAgICBwcml2LT52aWV3
LnJvd3MgPSByb3dzOwotICAgIHByaXYtPnZpZXcuY29scyA9IGNvbHM7Ci0gICAgaWYgKHJvd3Mg
PiBvbGRfcm93cykgewotICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICAg
ICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7Ci0gICAgICAgIGVuZCA9IHBy
aXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0
KyspIHsKLSAgICAgICAgICAgIEVpbmFfQm9vbCByOwotICAgICAgICAgICAgKnN0YXJ0ID0gTlVM
TDsKLSAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2Vu
ZF9hZGQKLSAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOwotICAgICAgICAg
ICAgaWYgKCFyKSB7Ci0gICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0
ZSAlbGQgY29sdW1ucyIsIGNvbHMpOwotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsCi0gICAgICAgICAgICAgICAgICAgIChwcml2LCBw
cml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0YXJ0KTsKLSAgICAgICAgICAgICAgICBwcml2
LT52aWV3LnJvd3MgPSBvbGRfcm93czsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoY29scyAhPSBvbGRfY29scykgewot
ICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAgICAgICAgaW50IHRvZG8gPSBj
b2xzIC0gb2xkX2NvbHM7Ci0gICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICAg
ICAgZW5kID0gc3RhcnQgKyBNSU4ob2xkX3Jvd3MsIHJvd3MpOwotICAgICAgICBpZiAodG9kbyA+
IDApIHsKLSAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAg
ICAgICAgICAgIEVpbmFfQm9vbCByOwotICAgICAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQKLSAgICAgICAgICAgICAgICAgICAgKHByaXYs
IHN0YXJ0LCBvbGRfY29scywgdG9kbyk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgY29sdW1ucyEi
LCB0b2RvKTsKLQotICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YXJ0LS07IHN0YXJ0ID49IHBy
aXYtPnZpZXcuaXRlbXM7IHN0YXJ0LS0pCi0gICAgICAgICAgICAgICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgc3RhcnQsIHRvZG8pOwot
ICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93czsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2Rl
bChwcml2LCBzdGFydCwgdG9kbyk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfSBlbHNlIGlmICh0b2RvIDwgMCkgewotICAgICAgICAgICAgdG9kbyA9IC10b2RvOwotICAg
ICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQotICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9k
byk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmls
bF9yZW5kZXJlcnMocHJpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKLXsKLSAgICBldmFzX29iamVjdF9yZXNp
emUocHJpdi0+YmFzZS5jbGlwcGVyLCB3LCBoKTsKLQotICAgIHByaXYtPnZpZXcudyA9IHc7Ci0g
ICAgcHJpdi0+dmlldy5oID0gaDsKLQotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNh
bGNfcmVuZGVyZXJzKAotICAgICAgICBwcml2LCB3LCBoLCBwcml2LT52aWV3LnRpbGUudywgcHJp
di0+dmlldy50aWxlLmgpOwotfQotCi0vLyBUT0RPOiByZW1vdmUgbWUgbGF0ZXIuCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxpc3QgKipzdGFy
dCwgKiplbmQ7Ci0gICAgcHJpbnRmKCJ0aWxlcz0lMmxkLCUybGQgIG1vZGVsPSUybGQsJTJsZCBb
JWR4JWRdIGJhc2U9JSszbGQsJSs0bGQgb2Zmc2V0PSUrNGQsJSs0ZCBvbGQ9JSs0ZCwlKzRkIGJh
c2U9JSszZCwlKzNkXG4iLAotICAgICAgICAgICBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcu
cm93cywKLSAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1ci5y
b3dzLAotICAgICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0LAot
ICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCwgcHJpdi0+bW9kZWwuYmFzZS5yb3csCi0g
ICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eSwKLSAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLngsIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC55LAotICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSk7Ci0KLSAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgZW5k
ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKLSAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAgICAgY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqaXQ7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqc3RhcnQsIGl0KSB7Ci0g
ICAgICAgICAgICBwcmludGYoIiAlKzRkLCUrNGQgIiwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9t
ZXRyeS55KTsKLQotICAgICAgICAgICAgaWYgKCFpdC0+dGlsZSkKLSAgICAgICAgICAgICAgICBw
cmludGYoIiAgICAgICAgICAgIDsiKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBwcmludGYoIiU4cCAlbHUsJWx1OyIsIGl0LT50aWxlLCBpdC0+dGlsZS0+Y29sLCBpdC0+dGls
ZS0+cm93KTsKLSAgICAgICAgfQotICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgfQotICAgIHBy
aW50ZigiLS0tXG4iKTsKLX0KLQotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIE1vdmUgdG9wIHJvdyBk
b3duIGFzIGxhc3QuCi0gKgotICogVGhlIGZpbmFsIHJlc3VsdCBpcyB2aXN1YWxseSB0aGUgc2Ft
ZSwgYnV0IGxvZ2ljYWxseSB0aGUgdG9wIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBu
b3cgYXQgYm90dG9tIGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMuCi0gKgotICogVGhp
cyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFuIEBjCi0gKiBwcml2
LT52aWV3LnJvd3MsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4
IHNvIGl0Ci0gKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4KLSAqCi0gKiBAcGFy
YW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCi0gKi8K
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHks
IHVuc2lnbmVkIGludCBjb3VudCkKLXsKLSAgICB1bnNpZ25lZCBpbnQgbGFzdF9yb3cgPSBwcml2
LT52aWV3LnJvd3MgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsK
LSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0gICAgRXZhc19Db29yZCBv
ZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIGNvdW50ICogdGg7Ci0gICAgRXZhc19D
b29yZCBveSA9IHkgKyAobGFzdF9yb3cgLSBjb3VudCArIDEpICogdGggKyBvZmZfeTsKLSAgICBF
aW5hX0lubGlzdCAqKml0cl9zdGFydCwgKippdHJfZW5kOwotCi0gICAgaXRyX3N0YXJ0ID0gcHJp
di0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyX3N0YXJ0ICsgbGFzdF9yb3c7Ci0KLSAg
ICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqaXRy
OwotICAgICAgICBFaW5hX0lubGlzdCAqdG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgICAgICBpbnQgYyA9IDA7Ci0KLSAgICAgICAg
Zm9yIChpdHIgPSBpdHJfc3RhcnQ7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKQotICAgICAgICAgICAg
Kml0ciA9ICooaXRyICsgMSk7Ci0gICAgICAgICppdHIgPSB0bXA7Ci0KLSAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3crKzsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0bXAsIGl0KSB7
Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwg
b3kpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCBsYXN0X3Jvdyk7Ci0gICAgICAgICAgICBj
Kys7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7Ci0gICAgfQotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSA9IG9mZl95OwotfQotCi0vKioKLSAqIEBpbnRlcm5hbAotICogTW92ZSBi
b3R0b20gcm93IHVwIGFzIGZpcnN0LgotICoKLSAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFs
bHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGJvdHRvbSB0aGF0Ci0gKiB3ZW50IG91dCBv
ZiBzY3JlZW4gaXMgbm93IGF0IHRvcCBhbmQgZmlsbGVkIHdpdGggbmV3IG1vZGVsIGl0ZW1zLgot
ICoKLSAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBA
YwotICogcHJpdi0+dmlldy5yb3dzLCBhZnRlciB0aGF0IG9uZSBpcyByZWZpbGxpbmcgdGhlIHdo
b2xlIG1hdHJpeCBzbyBpdAotICogaXMgYmV0dGVyIHRvIHRyaWdnZXIgZnVsbCByZWZpbGwuCi0g
KgotICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9j
ZXNzLgotICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKLXsKLSAgICBFdmFzX0Nvb3JkIHR3ID0g
cHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OwotICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgLSBjb3Vu
dCAqIHRoOwotICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgb2ZmX3kgKyAoY291bnQgLSAxKSAqIHRo
OwotICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7Ci0KLSAgICBpdHJfc3Rh
cnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzIC0gMTsKLSAgICBpdHJfZW5k
ID0gcHJpdi0+dmlldy5pdGVtczsKLQotICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsK
LSAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAq
aXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAg
ICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAg
ICAgIGludCBjID0gMDsKLQotICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyID4gaXRy
X2VuZDsgaXRyLS0pCi0gICAgICAgICAgICAqaXRyID0gKihpdHIgLSAxKTsKLSAgICAgICAgKml0
ciA9IHRtcDsKLQotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdy0tOwotICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBveCArPSB0dzsKLSAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMs
IDApOwotICAgICAgICAgICAgYysrOwotICAgICAgICB9Ci0gICAgICAgIG95IC09IHRoOwotICAg
IH0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZfeTsKLX0KLQotLyoqCi0gKiBA
aW50ZXJuYWwKLSAqIE1vdmUgbGVmdC1tb3N0IChmaXJzdCkgY29sdW1uIHJpZ2h0IGFzIGxhc3Qg
KHJpZ2h0LW1vc3QpLgotICoKLSAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNh
bWUsIGJ1dCBsb2dpY2FsbHkgdGhlIGZpcnN0IGNvbCB0aGF0Ci0gKiB3ZW50IG91dCBvZiBzY3Jl
ZW4gaXMgbm93IGF0IGxhc3QgYW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0g
KiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAq
IHByaXYtPnZpZXcuY29scywgYWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBt
YXRyaXggc28gaXQKLSAqIGlzIGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAq
IEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4K
LSAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0gICAgdW5zaWduZWQgaW50IHIsIGxhc3Rf
Y29sID0gcHJpdi0+dmlldy5jb2xzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmll
dy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotICAgIEV2
YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBjb3VudCAqIHR3Owot
ICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVp
bmFfSW5saXN0ICoqaXRyOwotICAgIEVpbmFfSW5saXN0ICoqaXRyX2VuZDsKLQotICAgIGl0ciA9
IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsK
LSAgICByID0gMDsKLQotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sICs9IGNvdW50OwotCi0gICAg
Zm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBv
eCA9IHggKyAobGFzdF9jb2wgLSBjb3VudCArIDEpICogdHcgKyBvZmZfeDsKLSAgICAgICAgdW5z
aWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAtIGNvdW50ICsgMTsKLQotICAgICAgICBmb3IgKGkg
PSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBveCArPSB0dykgewotICAgICAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNU
X0NPTlRBSU5FUl9HRVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAg
ICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIsICppdHIpOwotCi0gICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7Ci0gICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7Ci0gICAgfQotCi0gICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7Ci19Ci0KLS8qKgotICogQGludGVybmFsCi0gKiBNb3Zl
IHJpZ2h0LW1vc3QgKGxhc3QpIGNvbHVtbiBsZWZ0IGFzIGZpcnN0IChsZWZ0LW1vc3QpLgotICoK
LSAqIFRoZSBmaW5hbCByZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkg
dGhlIGxhc3QgY29sIHRoYXQKLSAqIHdlbnQgb3V0IG9mIHNjcmVlbiBpcyBub3cgYXQgZmlyc3Qg
YW5kIGZpbGxlZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KLSAqCi0gKiBUaGlzIGlzIHdvcnRoIGp1
c3Qgd2hlbiBAYSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKLSAqIHByaXYtPnZpZXcuY29scywg
YWZ0ZXIgdGhhdCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKLSAqIGlz
IGJldHRlciB0byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgotICoKLSAqIEBwYXJhbSBjb3VudCB0aGUg
bnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KLSAqLwotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQg
aW50IGNvdW50KQotewotICAgIHVuc2lnbmVkIGludCByOwotICAgIEV2YXNfQ29vcmQgdHcgPSBw
cml2LT52aWV3LnRpbGUudzsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7
Ci0gICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50
ICogdHc7Ci0gICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7
Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLQotICAgIGl0ciA9IHByaXYtPnZp
ZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICByID0g
MDsKLQotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sIC09IGNvdW50OwotCi0gICAgZm9yICg7IGl0
ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyAo
Y291bnQgLSAxKSAqIHR3ICsgb2ZmX3g7Ci0gICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gY291
bnQgLSAxOwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjLS0sIG94IC09
IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLSAg
ICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgoKml0ciktPmxhc3QsIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICAgICAgKml0ciA9IGVpbmFfaW5s
aXN0X3Byb21vdGUoKml0ciwgKCppdHIpLT5sYXN0KTsKLQotICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIHIpOwotICAgICAgICB9
Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLQotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCA9IG9mZl94OwotfQotCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwX3gsIGludCBzdGVwX3kpCi17Ci0gICAgRWluYV9Jbmxp
c3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7
Ci0gICAgdW5zaWduZWQgaW50IHI7Ci0KLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2Uu
Y2xpcHBlciwgeCwgeSk7Ci0KLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0g
cHJpdi0+dmlldy50aWxlLmg7Ci0KLSAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0KLSAgICBp
dHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJv
d3M7Ci0gICAgciA9IDA7Ci0KLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCAtPSBzdGVwX3g7Ci0g
ICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgLT0gc3RlcF95OwotCi0gICAgZm9yICg7IGl0ciA8IGl0
cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSAqaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICB1bnNpZ25l
ZCBpbnQgYyA9IDA7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpIHsKLSAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMs
IHIpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIG95KTsKLSAgICAgICAgICAgIGMrKzsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAg
ICB9Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQotewotICAgIEVpbmFfSW5saXN0
ICoqaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXZhc19Db29yZCBiYXNlX294LCBveSwgdHcsIHRoOwot
Ci0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIHgsIHkpOwotCi0gICAg
dHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotCi0g
ICAgYmFzZV9veCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgb3kgPSB5ICsg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsK
LSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIGZvciAoOyBpdHIgPCBp
dHJfZW5kOyBpdHIrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpp
dDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVJTkFfSU5MSVNU
X0ZPUkVBQ0goKml0ciwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBveCArPSB0dzsKLSAgICAgICAg
fQotICAgICAgICBveSArPSB0aDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19Db29yZCBk
eSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7Ci0g
ICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OwotCi0gICAgSU5G
KCJvPSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+
c2VsZiwgZHgsIGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkpOwotCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZp
ZXcudGlsZS5oOwotCi0gICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54
IC8gdHc7Ci0gICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOwotICAg
IGxvbmcgbmV3X3JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRoOwotICAgIHN0ZXBf
eSA9IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3X3JvdzsKLQotICAgIHByaXYtPnZpZXcub2Zm
c2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7Ci0gICAgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKLSAgICBldmFzX29iamVjdF9tb3Zl
KAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgKyBwcml2LT52aWV3LnkpOwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4
IC0gc3RlcF94ICogdHc7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0gc3Rl
cF95ICogdGg7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKLSAg
ICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxh
dGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5KQotewotICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwotICAgIEV2YXNfQ29vcmQgZHkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwotICAgIEV2
YXNfQ29vcmQgdHcsIHRoOwotICAgIGludCBzdGVwX3ksIHN0ZXBfeDsKLQotICAgIElORigibz0l
cCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCi0gICAgICAgIHByaXYtPnNlbGYs
IGR4LCBkeSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
KTsKLQotICAgIGlmICghZHggJiYgIWR5KQotICAgICAgICByZXR1cm47Ci0KLSAgICB0dyA9IHBy
aXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAgICBsb25n
IG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBzdGVwX3ggPSBw
cml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93ID0gLXByaXYt
PnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9kZWwuYmFzZS5y
b3cgLSBuZXdfcm93OwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55OwotICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmll
dy54LAotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7Ci0K
LSAgICBpZiAoKHN0ZXBfeCA8IDAgJiYgc3RlcF94IDw9IC1wcml2LT52aWV3LmNvbHMpCi0gICAg
ICAgIHx8IChzdGVwX3ggPiAwICYmIHN0ZXBfeCA+PSBwcml2LT52aWV3LmNvbHMpCi0gICAgICAg
IHx8IChzdGVwX3kgPCAwICYmIHN0ZXBfeSA8PSAtcHJpdi0+dmlldy5yb3dzKQotICAgICAgICB8
fCAoc3RlcF95ID4gMCAmJiBzdGVwX3kgPj0gcHJpdi0+dmlldy5yb3dzKSkgewotCi0gICAgICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBkeCAtIHN0ZXBfeCAqIHR3OwotICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKLQotICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKLSAgICAgICAgICAgIChwcml2LCBw
cml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4OwotICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeTsKLQotICAgIGlmIChzdGVwX3kgPCAwKQotICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3VwKHByaXYsIHgsIHksIC1z
dGVwX3kpOwotICAgIGVsc2UgaWYgKHN0ZXBfeSA+IDApCi0gICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihwcml2LCB4LCB5LCBzdGVwX3kpOwotCi0gICAgaWYg
KHN0ZXBfeCA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBf
bGVmdChwcml2LCB4LCB5LCAtc3RlcF94KTsKLSAgICBlbHNlIGlmIChzdGVwX3ggPiAwKQotICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KHByaXYsIHgsIHks
IHN0ZXBfeCk7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHko
cHJpdiwgeCwgeSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQotewotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKLSAgICBwcml2LT52aWV3LnggPSB4OwotICAg
IHByaXYtPnZpZXcueSA9IHk7Ci0gICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+
Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2
LT52aWV3LngsCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55
KTsKLX0KLQotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVy
ZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCi17Ci0gICAgRWluYV9Jbmxp
c3QgKml0OwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0ZW07Ci0gICAgaW50
IGksIGo7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKLSAg
ICAgICAgaXQgPSBwcml2LT52aWV3Lml0ZW1zW2ldOwotICAgICAgICBqID0gMDsKLSAgICAgICAg
RUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgaisrLCBpKTsKLSAgICB9Ci19Ci0KLXN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19P
YmplY3QgKm8pCi17Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwotCi0gICAgZXZhc19vYmpl
Y3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwgJncsICZoKTsKLSAgICBEQkcoIm89JXAgYXQgJWQs
JWQgKyAlZHglZCIsIG8sIHgsIHksIHcsIGgpOwotCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0KLSAgICBwcml2LT5jaGFuZ2VkLmFueSA9IEVJTkFfRkFMU0U7Ci0KLSAg
ICBld2tfdGlsZV9tYXRyaXhfZnJlZXplKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0KLSAgICBpZiAo
IXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNoYW5nZWQubW9kZWwpIHsKLSAgICAgICAg
dW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOwotCi0gICAgICAgIGNvbHMgPSBwcml2LT5tb2RlbC53
aWR0aCAvIHByaXYtPnZpZXcudGlsZS53ICsgMTsKLSAgICAgICAgcm93cyA9IHByaXYtPm1vZGVs
LmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oICsgMTsKLQotICAgICAgICBwcml2LT5tb2RlbC5v
bGQuY29scyA9IHByaXYtPm1vZGVsLmN1ci5jb2xzOwotICAgICAgICBwcml2LT5tb2RlbC5vbGQu
cm93cyA9IHByaXYtPm1vZGVsLmN1ci5yb3dzOwotICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29s
cyA9IGNvbHM7Ci0gICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gcm93czsKLSAgICAgICAg
aWYgKHByaXYtPm1vZGVsLm9sZC5jb2xzID4gY29scykKLSAgICAgICAgICAgIGNvbHMgPSBwcml2
LT5tb2RlbC5vbGQuY29sczsKLSAgICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5yb3dzID4gcm93
cykKLSAgICAgICAgICAgIHJvd3MgPSBwcml2LT5tb2RlbC5vbGQucm93czsKLSAgICAgICAgZXdr
X3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsIGNvbHMsIHJvd3MpOwotICAg
IH0KLQotICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcyAmJiAocHJpdi0+dmlldy54ICE9IHggfHwg
cHJpdi0+dmlldy55ICE9IHkpKSB7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfcG9zKHByaXYsIHgsIHkpOwotICAgICAgICBwcml2LT5jaGFuZ2VkLnBv
cyA9IEVJTkFfRkFMU0U7Ci0gICAgfQotICAgIGlmIChwcml2LT5jaGFuZ2VkLm9mZnNldCkgewot
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChw
cml2LCB4LCB5KTsKLSAgICAgICAgcHJpdi0+Y2hhbmdlZC5vZmZzZXQgPSBFSU5BX0ZBTFNFOwot
ICAgIH0KLQotICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUpIHsKLSAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKHByaXYsIHcsIGgpOwotICAgICAg
ICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIGlmICghcHJp
di0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewotICAgICAgICBFaW5h
X1JlY3RhbmdsZSByZWN0OwotICAgICAgICByZWN0LnggPSAwOwotICAgICAgICByZWN0LnkgPSAw
OwotICAgICAgICByZWN0LncgPSBwcml2LT5tb2RlbC53aWR0aDsKLSAgICAgICAgcmVjdC5oID0g
cHJpdi0+bW9kZWwuaGVpZ2h0OwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmls
bF9yZW5kZXJlcnMocHJpdik7Ci0gICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNpemUocHJpdi0+
bW9kZWwubWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3Vy
LmNvbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyk7
Ci0gICAgICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX0ZBTFNFOwotICAgICAgICBldmFz
X29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+bW9kZWwud2lkdGgs
IHByaXYtPm1vZGVsLmhlaWdodCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKHByaXYpOwotCi0gICAgICAgIC8qIE1ha2Ugc3Vy
ZSB3ZSBkbyBub3QgbWlzcyBhbnkgaW1wb3J0YW50IHJlcGFpbnQgYnkKLSAgICAgICAgICogcmVw
YWludGluZyB0aGUgd2hvbGUgdmlld3BvcnQgKi8KLSAgICAgICAgY29uc3QgRWluYV9SZWN0YW5n
bGUgciA9Ci0gICAgICAgICAgICB7IDAsIDAsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2Rl
bC5oZWlnaHQgfTsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2LT5tb2RlbC5t
YXRyaXgsICZyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnZpZXcudGls
ZS56b29tKTsKLSAgICB9Ci0KLSAgICBld2tfdGlsZV9tYXRyaXhfdGhhdyhwcml2LT5tb2RlbC5t
YXRyaXgpOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhw
cml2KTsKLQotICAgIGlmIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPiAwCi0gICAgICAgIHx8
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA8PSAtIHByaXYtPnZpZXcudGlsZS53Ci0gICAgICAg
IHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55IDw9IC0gcHJpdi0+dmlldy50aWxlLmgpCi0gICAgICAgIEVSUigiaW5jb3Jy
ZWN0IGJhc2Ugb2Zmc2V0ICUrNGQsJSs0ZCwgdGlsZT0lZHglZCwgY3VyPSUrNGQsJSs0ZFxuIiwK
LSAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55LAotICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLncsIHByaXYtPnZpZXcudGlsZS5o
LAotICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55KTsKLQotfQotCi1FdmFzX09iamVjdCAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRk
KEV2YXMgKmUpCi17Ci0gICAgc3RhdGljIEV2YXNfU21hcnQgKnNtYXJ0ID0gTlVMTDsKLQotICAg
IGlmIChfZXdrX3RpbGVkX2xvZ19kb20gPCAwKQotICAgICAgICBfZXdrX3RpbGVkX2xvZ19kb20g
PSBlaW5hX2xvZ19kb21haW5fcmVnaXN0ZXIoIkV3a19UaWxlZF9CYWNraW5nX1N0b3JlIiwgTlVM
TCk7Ci0KLSAgICBpZiAoIXNtYXJ0KSB7Ci0gICAgICAgIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNz
IHNjID0KLSAgICAgICAgICAgIEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oIkV3
a19UaWxlZF9CYWNraW5nX1N0b3JlIik7Ci0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xp
cHBlZF9zbWFydF9zZXQoJnNjKTsKLSAgICAgICAgX3BhcmVudF9zYyA9IHNjOwotCi0gICAgICAg
IHNjLmFkZCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQ7Ci0gICAgICAgIHNj
LmRlbCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWw7Ci0gICAgICAgIHNjLnJl
c2l6ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemU7Ci0gICAgICAgIHNj
Lm1vdmUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZTsKLSAgICAgICAgc2Mu
Y2FsY3VsYXRlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZTsKLSAg
ICAgICAgc2MubWVtYmVyX2FkZCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1i
ZXJfYWRkOwotICAgICAgICBzYy5tZW1iZXJfZGVsID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X21lbWJlcl9kZWw7Ci0KLSAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25l
dygmc2MpOwotICAgIH0KLQotICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgc21h
cnQpOwotfQotCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZh
c19PYmplY3QgKm8sIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29u
c3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpLCBjb25zdCB2b2lkICpkYXRhKQotewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGNiKTsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKLSAgICBwcml2LT5yZW5kZXIuY2IgPSBjYjsKLSAgICBwcml2LT5yZW5kZXIuZGF0
YSA9ICh2b2lkKilkYXRhOwotfQotCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCAqbykK
LXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBOVUxMKTsKLSAgICByZXR1
cm4gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsK
LX0KLQotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQo
RXZhc19PYmplY3QgKm8sIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQotewotICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAgaWYgKGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCkgPT0gdHVjKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShw
cml2LCB0dWMpOwotfQotCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQotewotICAgIC8qIFRPRE86
IGNoZWNrIG9mZnNldCBnbyBvdXQgb2YgYm91bmRzLCBjbGFtcCAqLwotICAgIGlmIChwcml2LT5y
ZW5kZXIuZGlzYWJsZWQpCi0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnggPSB4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0geTsK
LQotICAgIHByaXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0K
LQotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9z
ZXQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQotewotICAgIERC
Rygibz0lcCwgeD0lZCwgeT0lZCIsIG8sIHgsIHkpOwotCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHggPT0gcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnggJiYgeSA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSkKLSAgICAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKLQotICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xs
X2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChwcml2LCB4LCB5KTsKLX0KLQotRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3Qg
Km8sIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHkpCi17Ci0gICAgREJHKCJvPSVwLCBkeD0l
ZCwgZHk9JWQiLCBvLCBkeCwgZHkpOwotCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywg
cHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKCFkeCAmJiAhZHkpCi0gICAgICAgIHJldHVybiBF
SU5BX1RSVUU7Ci0KLSAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9m
dWxsX29mZnNldF9zZXRfaW50ZXJuYWwKLSAgICAgICAgKHByaXYsIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54ICsgZHgsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgZHkpOwotfQotCi1zdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBmbG9hdCAqem9vbSwgRXZhc19Db29yZCBj
eCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCAqb2ZmeCwgRXZhc19Db29yZCAqb2ZmeSkKLXsK
LSAgICAqb2ZmeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OwotICAgICpvZmZ5ID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnk7Ci0KLSAgICBpZiAoZmFic2YocHJpdi0+dmlldy50aWxlLnpvb20g
LSAqem9vbSkgPCBaT09NX1NURVBfTUlOKSB7Ci0gICAgICAgIERCRygiaWdub3JlZCBhcyB6b29t
IGRpZmZlcmVuY2UgaXMgPCAlZjogJWYiLAotICAgICAgICAgICAgKGRvdWJsZSlaT09NX1NURVBf
TUlOLCBmYWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6b29tKSk7Ci0gICAgICAgIHJldHVy
biBFSU5BX1RSVUU7Ci0gICAgfQotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLQotICAg
ICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53LCAqem9vbSk7Ci0KLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0KLSAg
ICBmbG9hdCBzY2FsZSA9ICp6b29tIC8gcHJpdi0+dmlldy50aWxlLnpvb207Ci0KLSAgICBwcml2
LT52aWV3LnRpbGUuem9vbSA9ICp6b29tOwotICAgIC8vIHRvZG86IGNoZWNrIGN4IFswLCB3XS4u
LgotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnggPSBjeDsKLSAgICBwcml2LT52
aWV3Lm9mZnNldC56b29tX2NlbnRlci55ID0gY3k7Ci0KLQotICAgIGlmICghcHJpdi0+dmlldy53
IHx8ICFwcml2LT52aWV3LmgpIHsKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0g
MDsKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKLSAgICAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKLSAgICB9Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKLQotICAgIEV2YXNfQ29vcmQgbmV3
X3ggPSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN4KSAqIHNjYWxlOwotICAgIEV2
YXNfQ29vcmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN5KSAqIHNj
YWxlOwotCi0gICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICog
c2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5tb2RlbC5oZWlnaHQg
KiBzY2FsZTsKLQotICAgIGlmIChtb2RlbF93aWR0aCA8IHByaXYtPnZpZXcudyB8fCBuZXdfeCA+
PSAwKQotICAgICAgICBuZXdfeCA9IDA7Ci0gICAgZWxzZSBpZiAoLW5ld194ICsgcHJpdi0+dmll
dy53ID49IG1vZGVsX3dpZHRoKQotICAgICAgICBuZXdfeCA9IC1tb2RlbF93aWR0aCArIHByaXYt
PnZpZXcudzsKLQotICAgIGlmIChtb2RlbF9oZWlnaHQgPCBwcml2LT52aWV3LmggfHwgbmV3X3kg
Pj0gMCkKLSAgICAgICAgbmV3X3kgPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeSArIHByaXYtPnZp
ZXcuaCA+PSBtb2RlbF9oZWlnaHQpCi0gICAgICAgIG5ld195ID0gLW1vZGVsX2hlaWdodCArIHBy
aXYtPnZpZXcuaDsKLQotICAgIEV2YXNfQ29vcmQgYnggPSBuZXdfeCAlIHR3OwotICAgIEV2YXNf
Q29vcmQgYnkgPSBuZXdfeSAlIHRoOwotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194
IC8gdHc7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKLQotICAgIHBy
aXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLSAgICBwcml2LT5jaGFuZ2VkLm1vZGVsID0g
RUlOQV9UUlVFOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOwot
Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdfeDsKLSAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJ4Owot
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5OwotCi0gICAgcHJpdi0+dmlldy5vZmZz
ZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICBwcml2LT52aWV3Lm9mZnNl
dC5vbGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwotICAgICpvZmZ4ID0gcHJpdi0+dmll
dy5vZmZzZXQuY3VyLng7Ci0gICAgKm9mZnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKLQot
ICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0g
ICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAgICAgICBuZXdfeSArIHByaXYtPnZpZXcu
eSk7Ci0KLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7
Ci0KLSAgICBFdmFzX0Nvb3JkIG95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+
dmlldy55OwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueDsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRy
X2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLQotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5k
OyBpdHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRWlu
YV9Jbmxpc3QgKmxzdCA9ICppdHI7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3Qs
IGl0KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0
LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVz
aXplKGl0LCB0dywgdGgpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgIH0KLSAgICAg
ICAgb3kgKz0gdGg7Ci0gICAgfQotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQotRWluYV9C
b29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9h
dCAqem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCAqb2ZmeCwg
RXZhc19Db29yZCAqb2ZmeSkKLXsKLSAgICBEQkcoIm89JXAsIHpvb209JWYiLCBvLCAoZG91Ymxl
KSp6b29tKTsKLQotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFM
U0UpOwotCi0gICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRl
cm5hbChwcml2LCB6b29tLCBjeCwgY3ksIG9mZngsIG9mZnkpOwotfQotCi1FaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQg
em9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKLXsKLSAgICBEQkcoIm89JXAsIHpv
b209JWYiLCBvLCAoZG91YmxlKXpvb20pOwotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmICghcHJpdi0+dmlldy53IHx8ICFwcml2LT52aWV3
LmgpCi0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAq
Kml0cl9lbmQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgRXZh
c19Db29yZCB0dywgdGg7Ci0gICAgRWluYV9Cb29sIHJlY2FsYyA9IEVJTkFfRkFMU0U7Ci0KLSAg
ICBmbG9hdCBzY2FsZSA9IHpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKLQotICAgIHR3ID0g
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHNjYWxlKTsKLSAgICBzY2FsZSA9
IFRJTEVfWk9PTV9BVF9TSVpFKHR3LCBwcml2LT52aWV3LnRpbGUudyk7Ci0gICAgdGggPSBUSUxF
X1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaCwgc2NhbGUpOwotICAgIHpvb20gPSBzY2Fs
ZSAqIHByaXYtPnZpZXcudGlsZS56b29tOwotCi0gICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9
IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQg
PSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsKLQotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShw
cml2LT5jb250ZW50c19jbGlwcGVyLCBtb2RlbF93aWR0aCwgbW9kZWxfaGVpZ2h0KTsKLQotICAg
IGludCB2cm93cyA9IGNlaWwoKGZsb2F0KXByaXYtPnZpZXcuaCAvIChmbG9hdCl0aCkgKyAxOwot
ICAgIGludCB2Y29scyA9IGNlaWwoKGZsb2F0KXByaXYtPnZpZXcudyAvIChmbG9hdCl0dykgKyAx
OwotICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAt
IGN4KSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSAtIGN5KSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgYnggPSBuZXdfeCAlIHR3
OwotICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwotICAgIHVuc2lnbmVkIGxvbmcgYmFz
ZV9yb3cgPSAtbmV3X3kgLyB0aDsKLSAgICB1bnNpZ25lZCBsb25nIGJhc2VfY29sID0gLW5ld194
IC8gdHc7Ci0KLSAgICBpZiAoYmFzZV9yb3cgIT0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgfHwgYmFz
ZV9jb2wgIT0gcHJpdi0+bW9kZWwuYmFzZS5jb2wpIHsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5yb3cgPSBiYXNlX3JvdzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSBiYXNlX2Nv
bDsKLSAgICAgICAgcmVjYWxjID0gRUlOQV9UUlVFOwotICAgIH0KLQotICAgIGlmICh2cm93cyA+
IHByaXYtPnZpZXcucm93cyB8fCB2Y29scyA+IHByaXYtPnZpZXcuY29scykKLSAgICAgICAgcmVj
YWxjID0gRUlOQV9UUlVFOwotCi0gICAgaWYgKHJlY2FsYykgewotICAgICAgICBFdmFzX0Nvb3Jk
IHcsIGg7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCBOVUxMLCBOVUxMLCAm
dywgJmgpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVy
cyhwcml2LCB3LCBoLCB0dywgdGgpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
ZmlsbF9yZW5kZXJlcnMocHJpdik7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91
cGRhdGVzX3Byb2Nlc3MocHJpdik7Ci0gICAgfQotCi0gICAgRXZhc19Db29yZCBiYXNlX294ID0g
YnggKyBwcml2LT52aWV3Lng7Ci0gICAgRXZhc19Db29yZCBveSA9IGJ5ICsgcHJpdi0+dmlldy55
OwotCi0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAg
ICAgICAgICAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCi0gICAgICAgICAgICAgICAgICAg
ICBuZXdfeSArIHByaXYtPnZpZXcueSk7Ci0KLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwot
ICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0KLSAgICBmb3IgKDsgaXRyIDwg
aXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAg
ICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwotCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVB
Q0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
bW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICB9
Ci0gICAgICAgIG95ICs9IHRoOwotICAgIH0KLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0K
LXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QgKm8s
IEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYpOwotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Ci0gICAgRXZhc19Db29yZCBuZXdfeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54OwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueTsKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54OwotICAgIEV2YXNfQ29vcmQgYnkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAg
RXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQgdGggPSBw
cml2LT52aWV3LnRpbGUuaDsKLQotICAgIGlmICgtbmV3X3ggPiB3KSB7Ci0gICAgICAgIG5ld194
ID0gLXc7Ci0gICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5jb2wgPSAtbmV3X3ggLyB0dzsKLSAgICB9Ci0KLSAgICBpZiAoLW5ld195ID4gaCkgewotICAg
ICAgICBuZXdfeSA9IC1oOwotICAgICAgICBieSA9IG5ld195ICUgdGg7Ci0gICAgICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7Ci0gICAgfQotCi0gICAgaWYgKGJ4ID49IDAg
fHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUudykgewotICAgICAgICBieCA9IG5ld194ICUg
dHc7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHc7Ci0gICAgfQot
Ci0gICAgaWYgKGJ5ID49IDAgfHwgYnkgPD0gLTIgKiBwcml2LT52aWV3LnRpbGUuaCkgewotICAg
ICAgICBieSA9IG5ld195ICUgdGg7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5l
d195IC8gdGg7Ci0gICAgfQotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdfeDsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zm
c2V0Lm9sZC54ID0gbmV3X3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBuZXdfeTsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBieDsKLSAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnkgPSBieTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAg
ICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKLQotICAgIEV2YXNfQ29vcmQgb3kg
PSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAgRXZhc19Db29y
ZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotCi0g
ICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmll
dy5yb3dzOwotCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAgICAgIEV2
YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsK
LQotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAg
ICAgICAgICBveCArPSB0dzsKLSAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKLSAgICB9Ci19
Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9z
ZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCi17Ci0gICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRy
X2VuZDsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciAr
IHByaXYtPnZpZXcucm93czsKLSAgICBwcml2LT52aWV3LnRpbGUuem9vbV93ZWFrX3Ntb290aF9z
Y2FsZSA9IHNtb290aF9zY2FsZTsKLQotICAgIGZvciAoOyBpdHI8IGl0cl9lbmQ7IGl0cisrKSB7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OwotICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KQotICAgICAgICAgICAgaWYgKGl0LT50aWxlKQotICAg
ICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9z
ZXQKLSAgICAgICAgICAgICAgICAgICAgKGl0LCBzbW9vdGhfc2NhbGUpOwotICAgIH0KLX0KLQot
RWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShFdmFzX09iamVjdCAqbywg
Y29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLQotICAgIGlmIChwcml2LT5yZW5kZXIuZGlzYWJs
ZWQpCi0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotCi0gICAgcmV0dXJuIGV3a190aWxlX21h
dHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCB1cGRhdGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwotfQotCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0ICpv
LCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRh
dGEpCi17Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgcHJpdi0+
cHJvY2Vzcy5wcmVfY2IgPSBjYjsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9kYXRhID0gKHZvaWQq
KWRhdGE7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNz
X3Bvc3Rfc2V0KEV2YXNfT2JqZWN0ICpvLCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCB2b2lkICpw
cmVfZGF0YSwgRXZhc19PYmplY3QgKm8pLCBjb25zdCB2b2lkICpkYXRhKQotewotICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYiA9
IGNiOwotICAgIHByaXYtPnByb2Nlc3MucG9zdF9kYXRhID0gKHZvaWQqKWRhdGE7Ci19Ci0KLXZv
aWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV2YXNfT2JqZWN0ICpv
KQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7Ci19Ci0KLXZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19jbGVhcihFdmFzX09iamVjdCAqbykKLXsKLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLQotICAgIGV3a190aWxlX21hdHJpeF91
cGRhdGVzX2NsZWFyKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHdp
ZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKLXsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKLQotICAgIGlmICh3aWR0aCA9PSBwcml2LT5tb2RlbC53aWR0aCAmJiBoZWlnaHQg
PT0gcHJpdi0+bW9kZWwuaGVpZ2h0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBwcml2LT5tb2Rl
bC53aWR0aCA9IHdpZHRoOwotICAgIHByaXYtPm1vZGVsLmhlaWdodCA9IGhlaWdodDsKLSAgICBw
cml2LT5jaGFuZ2VkLm1vZGVsID0gRUlOQV9UUlVFOwotCi0gICAgREJHKCJ3aWR0aCxoZWlnaHQ9
JWQsICVkIiwgd2lkdGgsIGhlaWdodCk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2No
YW5nZWQocHJpdik7Ci19Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRf
dXBkYXRlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29sIHZhbHVlKQotewotICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotCi0gICAgaWYgKHZhbHVlICE9IHByaXYtPnJl
bmRlci5kaXNhYmxlZCkKLSAgICAgICAgcHJpdi0+cmVuZGVyLmRpc2FibGVkID0gdmFsdWU7Ci19
Ci0KLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QgKm8pCi17
Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlICp0dWMgPSBOVUxMOwotCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAw
OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKLSAgICBwcml2LT52aWV3Lm9mZnNl
dC5vbGQueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSAwOwotICAgIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0g
MDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IDA7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5y
b3cgPSAwOwotICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKLSAgICBwcml2LT5tb2RlbC5j
dXIucm93cyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOwotICAgIHByaXYtPm1v
ZGVsLm9sZC5yb3dzID0gMDsKLSAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7Ci0K
LSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBwcmludGYoIlxuRkxVU0hFRCBCQUNLSU5HIFNU
T1JFLCBTVEFUVVMgQkVGT1JFIERFTEVUSU5HIFRJTEUgTUFUUklYOlxuIik7Ci0gICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcocHJpdik7Ci0jZW5kaWYKLQotICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7Ci0gICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwocHJpdik7Ci0gICAgdHVj
ID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsK
LSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIodHVjKTsKLQotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUsIFNUQVRVUyBBRlRF
UiBSRUNSRUFUSU5HIFRJTEUgTUFUUklYOlxuIik7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX21lbV9kYmcocHJpdik7Ci0jZW5kaWYKLX0KLQotRWluYV9Cb29sIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCi17
Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAg
RWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsKLSAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9J
bmZvICppbmZvOwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjOwotCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYt
PnZpZXcudGlsZS5oOwotICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncs
IHpvb20pOwotCi0gICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNlciwg
eCwgeSwgdywgaCwgdHcsIHRoKSkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBzZXR1cCBncmlk
IHNsaWNlciBmb3IgJWQsJWQrJWR4JWQgdGlsZT0lZHglZCIsCi0gICAgICAgICAgICB4LCB5LCB3
LCBoLCB0dywgdGgpOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICB3
aGlsZSAoZWluYV90aWxlX2dyaWRfc2xpY2VyX25leHQoJnNsaWNlciwgJmluZm8pKSB7Ci0gICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgYyA9IGluZm8tPmNvbDsKLSAgICAgICAgY29uc3QgdW5z
aWduZWQgbG9uZyByID0gaW5mby0+cm93OwotICAgICAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKHByaXYsIGMsIHIsIHpvb20sIFBSRV9SRU5E
RVJfUFJJT1JJVFlfTE9XKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7Ci0KLSAg
ICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVjLCB4LCB5LCB3LCBo
LCB6b29tKTsKLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QgKm8s
IHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQotewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcm93LCBl
bmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wsIGksIGosIHcsIGg7Ci0gICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlICp0dWM7Ci0KLSAgICBJTkYoInByaXYtPm1vZGVsLmJhc2Uucm93ID0lbGQsIG49
JXUgcHJpdi0+dmlldy5yb3dzPSVsdSIsCi0gICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dywgbiwgcHJpdi0+dmlldy5yb3dzKTsKLSAgICBzdGFydF9yb3cgPSAobG9uZylwcml2LT5tb2Rl
bC5iYXNlLnJvdyAtIG47Ci0gICAgc3RhcnRfY29sID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5j
b2wgLSBuOwotICAgIGVuZF9yb3cgPSBNSU4ocHJpdi0+bW9kZWwuY3VyLnJvd3MgLSAxLAotICAg
ICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyBwcml2LT52aWV3LnJvd3MgKyBu
IC0gMSk7Ci0gICAgZW5kX2NvbCA9IE1JTihwcml2LT5tb2RlbC5jdXIuY29scyAtIDEsCi0gICAg
ICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYtPnZpZXcuY29scyArIG4g
LSAxKTsKLQotICAgIElORigic3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0X2NvbD0l
bHUsIGVuZF9jb2w9JWx1IiwKLSAgICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29s
LCBlbmRfY29sKTsKLQotICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncs
IHpvb20pOwotCi0gICAgZm9yIChpID0gc3RhcnRfcm93OyBpIDw9IGVuZF9yb3c7IGkrKykKLSAg
ICAgICAgZm9yIChqID0gc3RhcnRfY29sOyBqIDw9IGVuZF9jb2w7IGorKykKLSAgICAgICAgICAg
IGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJp
diwgaiwgaSwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cpKQotICAgICAgICAgICAgICAg
IGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKLQotc3RhcnRfcHJvY2Vzc2luZzoKLSAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwotCi0gICAg
dHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4
KTsKLSAgICBoID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09N
KHByaXYtPnZpZXcudGlsZS5oLCB6b29tKTsKLSAgICB3ID0gKGVuZF9jb2wgLSBzdGFydF9jb2wg
KyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsKLSAgICBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywKLSAgICAgICAgICAgIHN0YXJ0X2Nv
bCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKSwKLSAgICAgICAg
ICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCB6b29t
KSwgdywgaCwgem9vbSk7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpvKQotewot
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjOwotCi0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVxdWVzdF9jbGVhcihwcml2KTsKLQotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRf
Y2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3VubG9ja19hcmVhKHR1Yyk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHByaXYpOwotfQotCi1FaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKLXsKLSAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKLSAgICByZXR1cm4gX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIocHJpdik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNzEyZjdhYTMz
ZDU5YjE5ZDkzNDAyMmQxODM2MDc5YzM2MGIxNTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApAQCAtMCwwICsxLDE5
MjAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1z
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0
b3JlLmgiCisKKyNpbmNsdWRlICJld2tfdGlsZWRfbWF0cml4LmgiCisjaW5jbHVkZSAiZXdrX3Rp
bGVkX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgorI2luY2x1ZGUgPHN0
ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIElEWChjb2wsIHJvdywgcm93
c3BhbikgKGNvbCArIChyb3cgKiByb3dzcGFuKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YTsKK3R5cGVk
ZWYgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW07Cit0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVz
dDsKKworZW51bSBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSB7
CisgICAgUFJFX1JFTkRFUl9QUklPUklUWV9MT1cgPSAwLCAvKio8IEFwcGVuZCB0aGUgcmVxdWVz
dCB0byB0aGUgbGlzdCAqLworICAgIFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCAgICAgLyoqPCBQ
cmVwZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBsaXN0ICovCit9OwordHlwZWRlZiBlbnVtIF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHk7CisKK3N0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSB7CisgICAgRUlOQV9JTkxJU1Q7CisgICAgRXdrX1RpbGUgKnRpbGU7CisgICAg
c3RydWN0IHsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgIH0gZ2VvbWV0cnk7
CisgICAgRWluYV9Cb29sIHNtb290aF9zY2FsZTsKK307CisKK3N0cnVjdCBfRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0IHsKKyAgICBFSU5BX0lOTElTVDsKKyAgICB1
bnNpZ25lZCBsb25nIGNvbCwgcm93OworICAgIGZsb2F0IHpvb207Cit9OworCitzdHJ1Y3QgX0V3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgeworICAgIEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBw
ZWRfRGF0YSBiYXNlOworICAgIEV2YXNfT2JqZWN0ICpzZWxmOworICAgIEV2YXNfT2JqZWN0ICpj
b250ZW50c19jbGlwcGVyOworICAgIHN0cnVjdCB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqaXRl
bXM7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgbG9uZyBjb2xzLCBy
b3dzOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgRXZhc19Db29yZCB3LCBoOworICAg
ICAgICAgICAgZmxvYXQgem9vbTsKKyAgICAgICAgICAgIEVpbmFfQm9vbCB6b29tX3dlYWtfc21v
b3RoX3NjYWxlOjE7CisgICAgICAgIH0gdGlsZTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAg
ICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgRXZhc19Db29yZCB4LCB5OworICAgICAgICAg
ICAgfSBjdXIsIG9sZCwgYmFzZSwgem9vbV9jZW50ZXI7CisgICAgICAgIH0gb2Zmc2V0OworICAg
IH0gdmlldzsKKyAgICBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOworICAgIHN0cnVjdCB7CisgICAg
ICAgIEV3a19UaWxlX01hdHJpeCAqbWF0cml4OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg
ICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICAgICAgfSBiYXNlOworICAgICAgICBzdHJ1
Y3QgeworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOworICAgICAgICB9IGN1
ciwgb2xkOworICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CisgICAgfSBtb2RlbDsK
KyAgICBzdHJ1Y3QgeworICAgICAgICBFaW5hX0Jvb2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1Rp
bGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKTsKKyAgICAgICAgdm9pZCAqZGF0YTsK
KyAgICAgICAgRWluYV9Jbmxpc3QgKnByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgICAgIEVjb3Jl
X0lkbGVyICppZGxlcjsKKyAgICAgICAgRWluYV9Cb29sIGRpc2FibGVkOworICAgICAgICBFaW5h
X0Jvb2wgc3VzcGVuZDoxOworICAgIH0gcmVuZGVyOworICAgIHN0cnVjdCB7CisgICAgICAgIHZv
aWQgKigqcHJlX2NiKSh2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbyk7CisgICAgICAgIHZvaWQg
KnByZV9kYXRhOworICAgICAgICB2b2lkICooKnBvc3RfY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnBy
ZV9kYXRhLCBFdmFzX09iamVjdCAqbyk7CisgICAgICAgIHZvaWQgKnBvc3RfZGF0YTsKKyAgICB9
IHByb2Nlc3M7CisgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9Cb29sIGFueToxOworICAgICAg
ICBFaW5hX0Jvb2wgcG9zOjE7CisgICAgICAgIEVpbmFfQm9vbCBzaXplOjE7CisgICAgICAgIEVp
bmFfQm9vbCBtb2RlbDoxOworICAgICAgICBFaW5hX0Jvb2wgb2Zmc2V0OjE7CisgICAgfSBjaGFu
Z2VkOworI2lmZGVmIERFQlVHX01FTV9MRUFLUworICAgIEVjb3JlX0V2ZW50X0hhbmRsZXIgKnNp
Z191c3I7CisjZW5kaWYKK307CisKK3N0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2Mg
PSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKK2ludCBfZXdrX3RpbGVkX2xvZ19kb20gPSAt
MTsKKworI2RlZmluZSBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvYmosIHB0ciwgLi4uKSAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHB0
ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihldmFzX29iamVj
dF9zbWFydF9kYXRhX2dldChvYmopKTsgXAorICAgIGlmICghcHRyKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDUklUSUNB
TCgibm8gcHJpdmF0ZSBkYXRhIGluIG9iaj0lcCIsIG9iaik7ICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIH0KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpOwor
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25z
dCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2KTsKKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikK
K3sKKyAgICB2b2lkICpkYXRhID0gMDsKKworICAgIC8qIERvIG5vdCBwcm9jZXNzIHVwZGF0ZXMu
IE5vdGUgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGdldCB1cGRhdGVzIHJlcXVlc3RzCisgICAgICog
aW4gdGhlIHF1ZXVlIGluIG9yZGVyIHRvIG5vdCBtaXNzIGFueSB1cGRhdGVzIGFmdGVyIHRoZSBy
ZW5kZXIgaXMKKyAgICAgKiByZXN1bWVkLgorICAgICAqLworICAgIGlmIChwcml2LT5yZW5kZXIu
c3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9nZXQocHJpdi0+c2VsZikpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKKyAgICAgICAgZGF0YSA9
IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEsIHByaXYtPnNlbGYp
OworCisgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2Vzcyhwcml2LT5tb2RlbC5tYXRy
aXgpOworCisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKKyAgICAgICAgcHJpdi0+cHJv
Y2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsK
K30KKworc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2godm9pZCAqZGF0
YSkKK3sKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOworICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+
bW9kZWwubWF0cml4KTsKKworICAgIGlmICh0dWMpIHsKKyAgICAgICAgREJHKCJmbHVzaCB1bnVz
ZWQgdGlsZSBjYWNoZS4iKTsKKyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2godHVjKTsKKyAgICB9IGVsc2UKKyAgICAgICAgRVJSKCJubyBjYWNoZT8hIik7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworc3RhdGljIEV3a19UaWxlICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9uZXcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgdW5zaWduZWQgbG9u
ZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQoreworICAgIEV3a19UaWxlICp0
OworICAgIEV2YXMgKmV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChwcml2LT5zZWxmKTsKKyAg
ICBpZiAoIWV2YXMpIHsKKyAgICAgICAgQ1JJVElDQUwoImV2YXNfb2JqZWN0X2V2YXNfZ2V0IGZh
aWxlZCEiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgdCA9IGV3a190aWxlX21h
dHJpeF90aWxlX25ldworICAgICAgICAocHJpdi0+bW9kZWwubWF0cml4LCBldmFzLCBjb2wsIHJv
dywgem9vbSk7CisKKyAgICBpZiAoIXQpIHsKKyAgICAgICAgQ1JJVElDQUwoImV3a190aWxlX21h
dHJpeF90aWxlX25ldyBmYWlsZWQhIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IHJldHVybiB0OworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9tb3ZlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSkKK3sKKyAgICBpdC0+Z2VvbWV0cnkueCA9IHg7CisgICAgaXQtPmdlb21ldHJ5
LnkgPSB5OworCisgICAgaWYgKGl0LT50aWxlKQorICAgICAgICBldmFzX29iamVjdF9tb3ZlKGl0
LT50aWxlLT5pbWFnZSwgeCwgeSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX3Jlc2l6ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZh
c19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit7CisgICAgaXQtPmdlb21ldHJ5LncgPSB3OworICAg
IGl0LT5nZW9tZXRyeS5oID0gaDsKKworICAgIGlmIChpdC0+dGlsZSkgeworICAgICAgICBldmFz
X29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCB3LCBoKTsKKyAgICAgICAgZXZhc19vYmpl
Y3RfaW1hZ2VfZmlsbF9zZXQoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCB3LCBoKTsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZSAqdCwgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCit7CisgICAgaWYgKGl0LT50aWxlKQorICAgICAgICBD
UklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgMCEiLCBpdC0+dGlsZSk7Cisg
ICAgaXQtPnRpbGUgPSB0OworICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCBp
dC0+Z2VvbWV0cnkueCwgaXQtPmdlb21ldHJ5LnkpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShp
dC0+dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS53LCBpdC0+Z2VvbWV0cnkuaCk7CisgICAgZXZh
c19vYmplY3RfaW1hZ2VfZmlsbF9zZXQKKyAgICAgICAgKGl0LT50aWxlLT5pbWFnZSwgMCwgMCwg
aXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9z
bW9vdGhfc2NhbGVfc2V0KGl0LT50aWxlLT5pbWFnZSwgaXQtPnNtb290aF9zY2FsZSk7CisKKyAg
ICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KHQpKQorICAgICAgICBldmFzX29iamVjdF9zbWFy
dF9tZW1iZXJfYWRkKHQtPmltYWdlLCBwcml2LT5zZWxmKTsKKworICAgIGV3a190aWxlX3Nob3co
dCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3Nv
Y2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQsIGRvdWJsZSBsYXN0X3VzZWQpCit7CisgICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlICp0dWM7CisgICAgZXdrX3RpbGVfaGlkZShpdC0+dGlsZSk7CisgICAgaWYgKCFl
d2tfdGlsZV92aXNpYmxlX2dldChpdC0+dGlsZSkpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X21lbWJlcl9kZWwoaXQtPnRpbGUtPmltYWdlKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9w
dXQocHJpdi0+bW9kZWwubWF0cml4LCBpdC0+dGlsZSwgbGFzdF91c2VkKTsKKyAgICB0dWMgPSBl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisKKyAgICBpdC0+dGlsZSA9
IDA7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3Nv
Y2lhdGVfYWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRWlu
YV9Jbmxpc3QgKml0OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0ZW07Cisg
ICAgaW50IGk7CisgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsK
KworICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgeworICAgICAgICBp
dCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goaXQs
IGl0ZW0pCisgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkKKyAgICAgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sIGxhc3RfdXNl
ZCk7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpv
b20sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgcHJpb3JpdHkp
Cit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyOwor
CisgICAgciA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UmVxdWVzdCo+KG1hbGxvYyhzaXplb2YoKnIpKSk7CisgICAgaWYgKCFyKQorICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKKworICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BSSU9SSVRZ
X0hJR0gpCisgICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9p
bmxpc3RfcHJlcGVuZAorICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworICAgIGVsc2UKKyAgICAgICAgcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBlbmQKKyAgICAgICAgICAgIChw
cml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKwor
ICAgIHItPmNvbCA9IGNvbDsKKyAgICByLT5yb3cgPSByb3c7CisgICAgci0+em9vbSA9IHpvb207
CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0ICpyKQoreworICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWlu
YV9pbmxpc3RfcmVtb3ZlCisgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0
cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAgICBmcmVlKHIpOworfQorCitzdGF0aWMgaW5saW5l
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChjb25zdCBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIHJldHVybiBFSU5BX0lOTElTVF9DT05UQUlO
RVJfR0VUKAorICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywKKyAgICAg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKK30KKworc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVz
aChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0
ICoqcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgd2hpbGUgKCpw
bCkgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qg
KnI7CisgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2ZpcnN0KHByaXYpOworICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCAq
cGwpOworICAgICAgICBmcmVlKHIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJpdi0+cmVu
ZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgRWluYV9Jbmxpc3QgKml0ZXIgPSAqcGwsICp0
bXA7CisgICAgd2hpbGUgKGl0ZXIpIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
UHJlX1JlbmRlcl9SZXF1ZXN0ICpyID0KKyAgICAgICAgICAgIEVJTkFfSU5MSVNUX0NPTlRBSU5F
Ul9HRVQoCisgICAgICAgICAgICAgICAgaXRlciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0KTsKKyAgICAgICAgdG1wID0gaXRlci0+bmV4dDsKKyAgICAgICAgKnBs
ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwbCwgaXRlcik7CisgICAgICAgIGl0ZXIgPSB0bXA7Cisg
ICAgICAgIGZyZWUocik7CisgICAgfQorfQorCisvKiBhc3N1bWVzIHByaXYtPnByb2Nlc3MucHJl
X2NiIHdhcyBjYWxsZWQgaWYgcmVxdWlyZWQhICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCit7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
UHJlX1JlbmRlcl9SZXF1ZXN0ICpyZXE7CisgICAgRWluYV9SZWN0YW5nbGUgYXJlYTsKKyAgICBF
d2tfVGlsZV9NYXRyaXggKnRtID0gcHJpdi0+bW9kZWwubWF0cml4OworICAgIEV3a19UaWxlICp0
OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIHVuc2lnbmVkIGxvbmcgY29s
LCByb3c7CisgICAgZmxvYXQgem9vbTsKKyAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9v
cF90aW1lX2dldCgpOworCisgICAgcmVxID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKKyAgICBpZiAoIXJlcSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29sID0gcmVxLT5jb2w7CisgICAgcm93ID0gcmVxLT5yb3c7CisgICAgem9vbSA9
IHJlcS0+em9vbTsKKworICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMo
dG0sIGNvbCwgcm93LCB6b29tKSkgeworICAgICAgICBEQkcoIm5vIHByZS1yZW5kZXIgcmVxdWly
ZWQgZm9yIHRpbGUgJWx1LCVsdSBAICVmLiIsIGNvbCwgcm93LCB6b29tKTsKKyAgICAgICAgZ290
byBlbmQ7CisgICAgfQorCisgICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25l
dyhwcml2LCBjb2wsIHJvdywgem9vbSk7CisgICAgaWYgKCF0KQorICAgICAgICBnb3RvIGVuZDsK
KworICAgIGFyZWEueCA9IDA7CisgICAgYXJlYS55ID0gMDsKKyAgICBhcmVhLncgPSBwcml2LT52
aWV3LnRpbGUudzsKKyAgICBhcmVhLmggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIHByaXYt
PnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0YSwgdCwgJmFyZWEpOworICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCgKKyAgICAgICAgdC0+aW1hZ2UsCisgICAgICAgIGFyZWEu
eCwgYXJlYS55LCBhcmVhLncsIGFyZWEuaCk7CisgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBk
YXRlc19jbGVhcih0bSwgdCk7CisKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQodG0sIHQs
IGxhc3RfdXNlZCk7CisKK2VuZDoKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZXF1ZXN0X2RlbChwcml2LCByZXEpOworICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godHVjKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiKHZvaWQgKmRhdGEpCit7CisgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqPihkYXRhKTsKKworICAgIGlmIChwcml2LT5wcm9jZXNzLnBy
ZV9jYikKKyAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3Mu
cHJlX2RhdGEsIHByaXYtPnNlbGYpOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShwcml2KTsKKworICAgIGlmIChwcml2LT5w
cm9jZXNzLnBvc3RfY2IpCisgICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9j
ZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CisKKyAgICBpZiAoIXByaXYtPnJlbmRl
ci5wcmVfcmVuZGVyX3JlcXVlc3RzKSB7CisgICAgICAgIHByaXYtPnJlbmRlci5pZGxlciA9IDA7
CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIHJldHVybiBFSU5BX1RS
VUU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9wcm9jZXNzX2lkbGVyX3N0b3AoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikK
K3sKKyAgICBpZiAoIXByaXYtPnJlbmRlci5pZGxlcikKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZWNvcmVfaWRsZXJfZGVsKHByaXYtPnJlbmRlci5pZGxlcik7CisgICAgcHJpdi0+cmVuZGVyLmlk
bGVyID0gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdikKK3sKKyAgICBpZiAocHJpdi0+cmVuZGVyLmlkbGVyKQorICAgICAgICByZXR1cm47Cisg
ICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gZWNvcmVfaWRsZXJfYWRkKAorICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiLCBwcml2KTsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3sKKyAgICBpZiAocHJpdi0+cmVuZGVy
LnN1c3BlbmQpCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBwcml2LT5yZW5kZXIu
c3VzcGVuZCA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9w
cm9jZXNzX2lkbGVyX3N0b3AocHJpdik7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIGlmICghcHJpdi0+cmVuZGVy
LnN1c3BlbmQpCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBwcml2LT5yZW5kZXIu
c3VzcGVuZCA9IEVJTkFfRkFMU0U7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmls
bF9yZW5kZXJlcnMocHJpdik7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJv
Y2Vzc19pZGxlcl9zdGFydChwcml2KTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3N0
YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqaXQsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKK3sKKyAg
ICB1bnNpZ25lZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBjb2w7CisgICAg
dW5zaWduZWQgbG9uZyBtX3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OworICAgIGRv
dWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisKKyAgICBpZiAobV9jb2wg
Pj0gcHJpdi0+bW9kZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJpdi0+bW9kZWwuY3VyLnJvd3Mp
IHsKKyAgICAgICAgaWYgKGl0LT50aWxlKQorICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBFd2tfVGlsZSAqdDsKKyAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYt
PnZpZXcudGlsZS56b29tOworCisgICAgICAgIGlmIChpdC0+dGlsZSkgeworICAgICAgICAgICAg
RXdrX1RpbGUgKm9sZCA9IGl0LT50aWxlOworICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1f
cm93IHx8IG9sZC0+Y29sICE9IG1fY29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQorICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQs
IGxhc3RfdXNlZCk7CisgICAgICAgICAgICBlbHNlIGlmIChvbGQtPnJvdyA9PSBtX3JvdyAmJiBv
bGQtPmNvbCA9PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0gem9vbSkKKyAgICAgICAgICAgICAgICBn
b3RvIGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOworCisgICAg
ICAgIGlmICghdCkgeworICAgICAgICAgICAgLyogTk9URTogaXQgbmV2ZXIgcmV0dXJucyAwIGlm
IGl0LT50aWxlIHdhcyBzZXQhICovCisgICAgICAgICAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICAg
ICAgICAgICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgMCEiLCBp
dC0+dGlsZSk7CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShwcml2LCBpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8K
KyAgICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKKyAgICAgICAgICAgICAg
ICB0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jv
dywgem9vbSk7CisgICAgICAgICAgICAgICAgaWYgKCF0KQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKHQgIT0gaXQtPnRpbGUpIHsKKyAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKKyAg
ICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHBy
aXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXQsIGxhc3RfdXNlZCk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOworICAgICAgICB9CisKKyAgICAgIGVu
ZDoKKworICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIHJldHVybiBFSU5B
X1RSVUU7Cit9CisKK3N0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdiwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQoreworICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRo
OworCisgICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7CisKKyAgICBpdCA9IHN0YXRpY19jYXN0
PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qPihtYWxsb2Moc2l6ZW9mKCppdCkpKTsKKyAg
ICBpZiAoIWl0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxl
Lnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICB4ID0gcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ICsgcHJpdi0+dmlldy54ICsgdHcgICpjb2w7CisgICAgeSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueSArIHRoICAqcm93OworCisgICAgaXQtPnRpbGUg
PSAwOworCisgICAgaXQtPnNtb290aF9zY2FsZSA9IHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtf
c21vb3RoX3NjYWxlOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IHgsIHkpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcs
IHRoKTsKKyAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwg
aXQsIGNvbCwgcm93KSkgeworICAgICAgICBmcmVlKGl0KTsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQorCisgICAgcmV0dXJuIGl0OworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCit7CisgICAgaWYgKGl0LT50aWxlKSB7Cisg
ICAgICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CisgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3Rf
dXNlZCk7CisgICAgfQorCisgICAgZnJlZShpdCk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSAqaXQsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit7CisgICAgaWYgKGl0LT5z
bW9vdGhfc2NhbGUgPT0gc21vb3RoX3NjYWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
aXQtPnRpbGUpCisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXQt
PnRpbGUtPmltYWdlLCBzbW9vdGhfc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3sKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5hbnkpCisgICAgICAgIHJldHVybjsK
KyAgICBldmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHByaXYtPnNlbGYpOworICAgIHByaXYtPmNo
YW5nZWQuYW55ID0gRUlOQV9UUlVFOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdiwgRWluYV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGNvdW50KQoreworICAgIEVp
bmFfSW5saXN0ICpuOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgaWYgKCFjb3VudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbiA9ICgqcF9yb3cpLT5sYXN0OworCisgICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSAqaXQ7CisgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChuLCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgbiA9IG4tPnByZXY7CisgICAgICAgICpw
X3JvdyA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcF9yb3csIEVJTkFfSU5MSVNUX0dFVChpdCkpOwor
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAg
IH0KK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19j
b2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxp
c3QgKipwX3JvdywgdW5zaWduZWQgaW50IGJhc2VfY29sLCB1bnNpZ25lZCBpbnQgY291bnQpCit7
CisgICAgdW5zaWduZWQgaW50IGksIHIgPSBwX3JvdyAtIHByaXYtPnZpZXcuaXRlbXM7CisKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYmFzZV9jb2wrKykgeworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKworICAgICAgICBpdCA9IF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2NvbCwgcik7CisgICAgICAgIGlmICgh
aXQpIHsKKyAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRkIGNvbHVtbiAldSBvZiAl
dSBpbiByb3cgJXUuIiwgaSwgY291bnQsIHIpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHBfcm93LCBpKTsKKyAgICAgICAgICAg
IHJldHVybiBFSU5BX0ZBTFNFOworICAgICAgICB9CisKKyAgICAgICAgKnBfcm93ID0gZWluYV9p
bmxpc3RfYXBwZW5kKCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CisgICAgfQorICAgIHJl
dHVybiBFSU5BX1RSVUU7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3Jvd19kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9J
bmxpc3QgKnJvdykKK3sKKyAgICB3aGlsZSAocm93KSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9H
RVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgcm93ID0gcm93
LT5uZXh0OworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwg
aXQpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWlu
YV9Jbmxpc3QgKipzdGFydCwgRWluYV9Jbmxpc3QgKiplbmQpCit7CisgICAgZm9yICg7IHN0YXJ0
IDwgZW5kOyBzdGFydCsrKSB7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3Jvd19kZWwocHJpdiwgKnN0YXJ0KTsKKyAgICAgICAgKnN0YXJ0ID0gMDsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICoq
c3RhcnQ7CisgICAgRWluYV9Jbmxpc3QgKiplbmQ7CisKKyAgICBzdGFydCA9IHByaXYtPnZpZXcu
aXRlbXM7CisgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKKyAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFy
dCwgZW5kKTsKKworICAgIGZyZWUocHJpdi0+dmlldy5pdGVtcyk7CisgICAgcHJpdi0+dmlldy5p
dGVtcyA9IDA7CisgICAgcHJpdi0+dmlldy5jb2xzID0gMDsKKyAgICBwcml2LT52aWV3LnJvd3Mg
PSAwOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyKHZv
aWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSkKK3sKKyAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOworCisgICAgSU5GKCJUT0RPICVwICh2aXNp
YmxlPyAlZCkgWyVsdSwlbHVdICVkLCVkICsgJWR4JWQiLAorICAgICAgICB0LCB0LT52aXNpYmxl
LCB0LT5jb2wsIHQtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CisK
KyAgICBpZiAoIXQtPnZpc2libGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT52
aWV3LnRpbGUudyAhPSB0LT53IHx8IHByaXYtPnZpZXcudGlsZS5oICE9IHQtPmgpCisgICAgICAg
IHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24ndCBldmVuIGZsYWcgYXMgZGly
dHkhCisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5yZW5kZXIuY2IpOwor
ICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0LCBhcmVhKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHQt
PmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKK30KKworc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRl
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqdHVjKQoreworICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgpIHsKKyAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHByaXYpOworCisgICAgICAgIHBy
aXYtPmNoYW5nZWQub2Zmc2V0ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5z
aXplID0gRUlOQV9UUlVFOworCisgICAgICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1v
ZGVsLm1hdHJpeCk7CisgICAgfQorCisgICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVf
bWF0cml4X25ldyh0dWMsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93
cywgcHJpdi0+Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyLCBwcml2KTsK
K30KKworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9k
ZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICptZW1iZXIpCit7CisgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVy
KQorICAgICAgICByZXR1cm47CisgICAgZXZhc19vYmplY3RfY2xpcF91bnNldChtZW1iZXIpOwor
ICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+Y29udGVudHNfY2xpcHBlcikp
CisgICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkKEV2
YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQoreworICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKG8sIHByaXYpOworICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29u
dGVudHNfY2xpcHBlcik7CisgICAgaWYgKGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KG8pKQorICAg
ICAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworfQorCisjaWZk
ZWYgREVCVUdfTUVNX0xFQUtTCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
bWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIHN0YXRp
YyBpbnQgcnVuID0gMDsKKworICAgIHJ1bisrOworCisgICAgcHJpbnRmKCJcbi0tLSBCRUdJTiBE
RUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0tXG4iCisgICAgICAgICAgICJ0
PSUwLjJmLCBvYmo9JXAsIHByaXY9JXAsIHZpZXcuaXRlbXM9JXAsIG1hdHJpeD0lcFxuIiwKKyAg
ICAgICAgICAgcnVuLCBlY29yZV9sb29wX3RpbWVfZ2V0KCksCisgICAgICAgICAgIHByaXYtPnNl
bGYsIHByaXYsIHByaXYtPnZpZXcuaXRlbXMsIHByaXYtPm1vZGVsLm1hdHJpeCk7CisKKyAgICBl
d2tfdGlsZV9tYXRyaXhfZGJnKHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfYWNj
b3VudGluZ19kYmcoKTsKKworICAgIHByaW50ZigiLS0tIEVORCBERUJVRyBUSUxFRCBCQUNLSU5H
IFNUT1JFIE1FTU9SWSBbJWRdIC0tXG5cbiIsIHJ1bik7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCAqZGF0YSwgaW50IHR5cGUsIHZv
aWQgKmV2ZW50KQoreworICAgIEVjb3JlX0V2ZW50X1NpZ25hbF9Vc2VyICpzaWcgPSAoRWNvcmVf
RXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSopZGF0YTsKKworICAgIGlm
IChzaWctPm51bWJlciA9PSAyKSB7CisgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
OworICAgICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5t
b2RlbC5tYXRyaXgpOworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0
dWMpOworICAgIH0KKworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhwcml2
KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2KTsKKyAgICByZXR1
cm4gRUlOQV9UUlVFOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCit7CisgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdjsKKworICAgIERCRygibz0lcCIsIG8pOworCisgICAgcHJpdiA9
IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihjYWxsb2MoMSwgc2l6
ZW9mKCpwcml2KSkpOworICAgIGlmICghcHJpdikKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJp
di0+c2VsZiA9IG87CisgICAgcHJpdi0+dmlldy50aWxlLnpvb20gPSAxLjA7CisgICAgcHJpdi0+
dmlldy50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKKyAgICBwcml2LT52aWV3LnRpbGUuaCA9IERF
RkFVTFRfVElMRV9IOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gMDsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSAw
OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7CisKKyAgICBw
cml2LT5tb2RlbC5iYXNlLmNvbCA9IDA7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAwOwor
ICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKKyAgICBwcml2LT5tb2RlbC5jdXIucm93cyA9
IDE7CisgICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOworICAgIHByaXYtPm1vZGVsLm9sZC5y
b3dzID0gMDsKKyAgICBwcml2LT5tb2RlbC53aWR0aCA9IDA7CisgICAgcHJpdi0+bW9kZWwuaGVp
Z2h0ID0gMDsKKyAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9IEVJTkFfRkFMU0U7CisgICAgcHJp
di0+Y3NwYWNlID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4OyAvLyBUT0RPOiBkZXRlY3QgaXQu
CisKKyAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChvLCBwcml2KTsKKyAgICBfcGFyZW50
X3NjLmFkZChvKTsKKworICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIgPSBldmFzX29iamVjdF9y
ZWN0YW5nbGVfYWRkKAorICAgICAgICBldmFzX29iamVjdF9ldmFzX2dldChvKSk7CisgICAgZXZh
c19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCAwLCAwKTsKKyAgICBldmFzX29i
amVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7CisgICAgZXZhc19vYmpl
Y3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7
CisgICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIG8pOworCisg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUocHJpdiwgMCk7
CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAsIDApOworICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2Jq
ZWN0X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIHByaXYtPmJhc2UuY2xpcHBlcik7
CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZl
bnRfaGFuZGxlcl9hZGQKKyAgICAgICAgKEVDT1JFX0VWRU5UX1NJR05BTF9VU0VSLCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc2lnX3VzciwgcHJpdik7CisjZW5kaWYKK30KKworc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbChFdmFzX09iamVjdCAqbykKK3sK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBEQkcoIm89JXAiLCBv
KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKworICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmx1c2gocHJpdik7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChwcml2KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MK
KyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhwcml2KTsKKyAgICBpZiAocHJp
di0+c2lnX3VzcikKKyAgICAgICAgcHJpdi0+c2lnX3VzciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJf
ZGVsKHByaXYtPnNpZ191c3IpOworI2VuZGlmCisKKyAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShw
cml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJp
di0+Y29udGVudHNfY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfZGVsKHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIpOworCisgICAgX3BhcmVudF9zYy5kZWwobyk7CisKKyNpZmRlZiBERUJVR19NRU1f
TEVBS1MKKyAgICBwcmludGYoIlxuSU1QT1JUQU5UOiBUSUxFRCBCQUNLSU5HIFNUT1JFIERFTEVU
RUQgKG1heSBiZSByZWFsIGxlYWtzKVxuIik7CisgICAgZXdrX3RpbGVfYWNjb3VudGluZ19kYmco
KTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21h
cnRfbW92ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCit7Cisg
ICAgREJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIG8sIHgsIHkpOworCisgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3MpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT52aWV3LnggPT0geCAmJiBwcml2LT52aWV3
LnkgPT0geSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5B
X1RSVUU7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7Cit9CisK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemUoRXZhc19P
YmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQoreworICAgIERCRygibz0lcCwg
bmV3IHNpemU6ICVkeCVkIiwgbywgdywgaCk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2KTsKKworICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChwcml2LT52aWV3LncgPT0gdyAmJiBwcml2LT52aWV3LmggPT0gaCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOworfQorCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgRXZhc19D
b29yZCB0dywgRXZhc19Db29yZCB0aCkKK3sKKyAgICBsb25nIGNvbHMsIHJvd3MsIG9sZF9yb3dz
LCBvbGRfY29sczsKKyAgICBJTkYoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYs
IHcsIGgpOworCisgICAgY29scyA9IDEgKyAoaW50KWNlaWwoKGZsb2F0KXcgLyAoZmxvYXQpdHcp
OworICAgIHJvd3MgPSAxICsgKGludCljZWlsKChmbG9hdCloIC8gKGZsb2F0KXRoKTsKKworICAg
IElORigibz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVsZCwgcm93czogJWxkLCB3YXMgJWxkLCAl
bGQiLAorICAgICAgICBwcml2LT5zZWxmLCBjb2xzLCByb3dzLCBwcml2LT52aWV3LmNvbHMsIHBy
aXYtPnZpZXcucm93cyk7CisKKyAgICBpZiAocHJpdi0+dmlldy5jb2xzID09IGNvbHMgJiYgcHJp
di0+dmlldy5yb3dzID09IHJvd3MpCisgICAgICAgIHJldHVybjsKKworICAgIG9sZF9jb2xzID0g
cHJpdi0+dmlldy5jb2xzOworICAgIG9sZF9yb3dzID0gcHJpdi0+dmlldy5yb3dzOworCisgICAg
aWYgKHJvd3MgPCBvbGRfcm93cykgeworICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVu
ZDsKKyAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKKyAgICAgICAgZW5k
ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFydCwgZW5kKTsKKyAgICB9CisK
KyAgICB2b2lkKiBuZXdJdGVtcyA9IHJlYWxsb2MocHJpdi0+dmlldy5pdGVtcywgc2l6ZW9mKEVp
bmFfSW5saXN0KikgKiByb3dzKTsKKyAgICBpZiAoIW5ld0l0ZW1zKQorICAgICAgICByZXR1cm47
CisKKyAgICBwcml2LT52aWV3Lml0ZW1zID0gc3RhdGljX2Nhc3Q8RWluYV9Jbmxpc3QqKj4obmV3
SXRlbXMpOworICAgIHByaXYtPnZpZXcucm93cyA9IHJvd3M7CisgICAgcHJpdi0+dmlldy5jb2xz
ID0gY29sczsKKyAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7CisgICAgICAgIEVpbmFfSW5saXN0
ICoqc3RhcnQsICoqZW5kOworICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRf
cm93czsKKyAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7CisgICAgICAgIGZv
ciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgeworICAgICAgICAgICAgRWluYV9Cb29sIHI7Cisg
ICAgICAgICAgICAqc3RhcnQgPSAwOworICAgICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAorICAgICAgICAgICAgICAgIChwcml2LCBzdGFydCwg
MCwgY29scyk7CisgICAgICAgICAgICBpZiAoIXIpIHsKKyAgICAgICAgICAgICAgICBDUklUSUNB
TCgiZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwgY29scyk7CisgICAgICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwKKyAgICAgICAg
ICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93cywgc3RhcnQpOwor
ICAgICAgICAgICAgICAgIHByaXYtPnZpZXcucm93cyA9IG9sZF9yb3dzOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChj
b2xzICE9IG9sZF9jb2xzKSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOwor
ICAgICAgICBpbnQgdG9kbyA9IGNvbHMgLSBvbGRfY29sczsKKyAgICAgICAgc3RhcnQgPSBwcml2
LT52aWV3Lml0ZW1zOworICAgICAgICBlbmQgPSBzdGFydCArIHN0ZDo6bWluKG9sZF9yb3dzLCBy
b3dzKTsKKyAgICAgICAgaWYgKHRvZG8gPiAwKSB7CisgICAgICAgICAgICBmb3IgKDsgc3RhcnQg
PCBlbmQ7IHN0YXJ0KyspIHsKKyAgICAgICAgICAgICAgICBFaW5hX0Jvb2wgcjsKKyAgICAgICAg
ICAgICAgICByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkCisg
ICAgICAgICAgICAgICAgICAgIChwcml2LCBzdGFydCwgb2xkX2NvbHMsIHRvZG8pOworICAgICAg
ICAgICAgICAgIGlmICghcikgeworICAgICAgICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVk
IHRvIGFsbG9jYXRlICVkIGNvbHVtbnMhIiwgdG9kbyk7CisKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChzdGFydC0tOyBzdGFydCA+PSBwcml2LT52aWV3Lml0ZW1zOyBzdGFydC0tKQorICAgICAg
ICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRf
ZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiBv
bGRfcm93cykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0
ZW1zICsgb2xkX3Jvd3M7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBwcml2LT52aWV3
Lml0ZW1zICsgcm93czsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVu
ZDsgc3RhcnQrKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgc3RhcnQsIHRvZG8pOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodG9kbyA8IDApIHsKKyAgICAg
ICAgICAgIHRvZG8gPSAtdG9kbzsKKyAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3Rh
cnQrKykKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xz
X2VuZF9kZWwocHJpdiwgc3RhcnQsIHRvZG8pOworICAgICAgICB9CisgICAgfQorCisgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOworfQorCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgp
Cit7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgdywgaCk7CisK
KyAgICBwcml2LT52aWV3LncgPSB3OworICAgIHByaXYtPnZpZXcuaCA9IGg7CisKKyAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycygKKyAgICAgICAgcHJpdiwgdywg
aCwgcHJpdi0+dmlldy50aWxlLncsIHByaXYtPnZpZXcudGlsZS5oKTsKK30KKworLy8gVE9ETzog
cmVtb3ZlIG1lIGxhdGVyLgorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQor
eworICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgIHByaW50ZigidGlsZXM9JTJs
ZCwlMmxkICBtb2RlbD0lMmxkLCUybGQgWyVkeCVkXSBiYXNlPSUrM2xkLCUrNGxkIG9mZnNldD0l
KzRkLCUrNGQgb2xkPSUrNGQsJSs0ZCBiYXNlPSUrM2QsJSszZFxuIiwKKyAgICAgICAgICAgcHJp
di0+dmlldy5jb2xzLCBwcml2LT52aWV3LnJvd3MsCisgICAgICAgICAgIHByaXYtPm1vZGVsLmN1
ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93cywKKyAgICAgICAgICAgcHJpdi0+bW9kZWwud2lk
dGgsIHByaXYtPm1vZGVsLmhlaWdodCwKKyAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2ws
IHByaXYtPm1vZGVsLmJhc2Uucm93LAorICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnksCisgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC54LCBwcml2LT52aWV3Lm9mZnNldC5vbGQueSwKKyAgICAgICAgICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS54LCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkpOworCisgICAgc3RhcnQgPSBw
cml2LT52aWV3Lml0ZW1zOworICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3
LnJvd3M7CisgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7CisgICAgICAgIGNvbnN0
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworCisgICAgICAgIEVJTkFfSU5MSVNU
X0ZPUkVBQ0goKnN0YXJ0LCBpdCkgeworICAgICAgICAgICAgcHJpbnRmKCIgJSs0ZCwlKzRkICIs
IGl0LT5nZW9tZXRyeS54LCBpdC0+Z2VvbWV0cnkueSk7CisKKyAgICAgICAgICAgIGlmICghaXQt
PnRpbGUpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICA7Iik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlOHAgJWx1LCVsdTsiLCBpdC0+dGls
ZSwgaXQtPnRpbGUtPmNvbCwgaXQtPnRpbGUtPnJvdyk7CisgICAgICAgIH0KKyAgICAgICAgcHJp
bnRmKCJcbiIpOworICAgIH0KKyAgICBwcmludGYoIi0tLVxuIik7Cit9CisKKy8qKgorICogQGlu
dGVybmFsCisgKiBNb3ZlIHRvcCByb3cgZG93biBhcyBsYXN0LgorICoKKyAqIFRoZSBmaW5hbCBy
ZXN1bHQgaXMgdmlzdWFsbHkgdGhlIHNhbWUsIGJ1dCBsb2dpY2FsbHkgdGhlIHRvcCB0aGF0Cisg
KiB3ZW50IG91dCBvZiBzY3JlZW4gaXMgbm93IGF0IGJvdHRvbSBhbmQgZmlsbGVkIHdpdGggbmV3
IG1vZGVsIGl0ZW1zLgorICoKKyAqIFRoaXMgaXMgd29ydGgganVzdCB3aGVuIEBhIGNvdW50IGlz
IHNtYWxsZXIgdGhhbiBAYworICogcHJpdi0+dmlldy5yb3dzLCBhZnRlciB0aGF0IG9uZSBpcyBy
ZWZpbGxpbmcgdGhlIHdob2xlIG1hdHJpeCBzbyBpdAorICogaXMgYmV0dGVyIHRvIHRyaWdnZXIg
ZnVsbCByZWZpbGwuCisgKgorICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8g
cmVwZWF0IHRoZSBwcm9jZXNzLgorICovCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld193cmFwX3VwKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCit7CisgICAgdW5z
aWduZWQgaW50IGxhc3Rfcm93ID0gcHJpdi0+dmlldy5yb3dzIC0gMTsKKyAgICBFdmFzX0Nvb3Jk
IHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcu
dGlsZS5oOworICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkg
KyBjb3VudCAqIHRoOworICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgKGxhc3Rfcm93IC0gY291bnQg
KyAxKSAqIHRoICsgb2ZmX3k7CisgICAgRWluYV9Jbmxpc3QgKippdHJfc3RhcnQsICoqaXRyX2Vu
ZDsKKworICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0
cl9zdGFydCArIGxhc3Rfcm93OworCisgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewor
ICAgICAgICBFaW5hX0lubGlzdCAqKml0cjsKKyAgICAgICAgRWluYV9Jbmxpc3QgKnRtcCA9ICpp
dHJfc3RhcnQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAg
ICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICAg
ICAgaW50IGMgPSAwOworCisgICAgICAgIGZvciAoaXRyID0gaXRyX3N0YXJ0OyBpdHIgPCBpdHJf
ZW5kOyBpdHIrKykKKyAgICAgICAgICAgICppdHIgPSAqKGl0ciArIDEpOworICAgICAgICAqaXRy
ID0gdG1wOworCisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93Kys7CisgICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0godG1wLCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIG94ICs9IHR3OworICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
bGFzdF9yb3cpOworICAgICAgICAgICAgYysrOworICAgICAgICB9CisgICAgICAgIG95ICs9IHRo
OworICAgIH0KKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZfeTsKK30KKworLyoq
CisgKiBAaW50ZXJuYWwKKyAqIE1vdmUgYm90dG9tIHJvdyB1cCBhcyBmaXJzdC4KKyAqCisgKiBU
aGUgZmluYWwgcmVzdWx0IGlzIHZpc3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSBi
b3R0b20gdGhhdAorICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCB0b3AgYW5kIGZpbGxl
ZCB3aXRoIG5ldyBtb2RlbCBpdGVtcy4KKyAqCisgKiBUaGlzIGlzIHdvcnRoIGp1c3Qgd2hlbiBA
YSBjb3VudCBpcyBzbWFsbGVyIHRoYW4gQGMKKyAqIHByaXYtPnZpZXcucm93cywgYWZ0ZXIgdGhh
dCBvbmUgaXMgcmVmaWxsaW5nIHRoZSB3aG9sZSBtYXRyaXggc28gaXQKKyAqIGlzIGJldHRlciB0
byB0cmlnZ2VyIGZ1bGwgcmVmaWxsLgorICoKKyAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9m
IHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KKyAqLworc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQp
Cit7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2YXNfQ29v
cmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS55IC0gY291bnQgKiB0aDsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSAr
IG9mZl95ICsgKGNvdW50IC0gMSkgKiB0aDsKKyAgICBFaW5hX0lubGlzdCAqKml0cl9zdGFydCwg
KippdHJfZW5kOworCisgICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZp
ZXcucm93cyAtIDE7CisgICAgaXRyX2VuZCA9IHByaXYtPnZpZXcuaXRlbXM7CisKKyAgICBmb3Ig
KDsgY291bnQgPiAwOyBjb3VudC0tKSB7CisgICAgICAgIEVpbmFfSW5saXN0ICoqaXRyOworICAg
ICAgICBFaW5hX0lubGlzdCAqdG1wID0gKml0cl9zdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54OworICAgICAgICBpbnQgYyA9IDA7CisKKyAgICAgICAgZm9yIChp
dHIgPSBpdHJfc3RhcnQ7IGl0ciA+IGl0cl9lbmQ7IGl0ci0tKQorICAgICAgICAgICAgKml0ciA9
ICooaXRyIC0gMSk7CisgICAgICAgICppdHIgPSB0bXA7CisKKyAgICAgICAgcHJpdi0+bW9kZWwu
YmFzZS5yb3ctLTsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0bXAsIGl0KSB7CisgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwor
ICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCAwKTsKKyAgICAgICAgICAgIGMrKzsKKyAgICAgICAg
fQorICAgICAgICBveSAtPSB0aDsKKyAgICB9CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55
ID0gb2ZmX3k7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBNb3ZlIGxlZnQtbW9zdCAoZmly
c3QpIGNvbHVtbiByaWdodCBhcyBsYXN0IChyaWdodC1tb3N0KS4KKyAqCisgKiBUaGUgZmluYWwg
cmVzdWx0IGlzIHZpc3VhbGx5IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSBmaXJzdCBjb2wg
dGhhdAorICogd2VudCBvdXQgb2Ygc2NyZWVuIGlzIG5vdyBhdCBsYXN0IGFuZCBmaWxsZWQgd2l0
aCBuZXcgbW9kZWwgaXRlbXMuCisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291
bnQgaXMgc21hbGxlciB0aGFuIEBjCisgKiBwcml2LT52aWV3LmNvbHMsIGFmdGVyIHRoYXQgb25l
IGlzIHJlZmlsbGluZyB0aGUgd2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJp
Z2dlciBmdWxsIHJlZmlsbC4KKyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1l
cyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQorewor
ICAgIHVuc2lnbmVkIGludCByLCBsYXN0X2NvbCA9IHByaXYtPnZpZXcuY29scyAtIDE7CisgICAg
RXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OworICAgIEV2YXNfQ29vcmQgdGggPSBw
cml2LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ICsgY291bnQgKiB0dzsKKyAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueTsKKyAgICBFaW5hX0lubGlzdCAqKml0cjsKKyAgICBFaW5hX0lubGlz
dCAqKml0cl9lbmQ7CisKKyAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQg
PSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgciA9IDA7CisKKyAgICBwcml2LT5tb2RlbC5i
YXNlLmNvbCArPSBjb3VudDsKKworICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisr
KSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGxhc3RfY29sIC0gY291bnQgKyAxKSAq
IHR3ICsgb2ZmX3g7CisgICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gbGFzdF9jb2wgLSBjb3Vu
dCArIDE7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMrKywgb3ggKz0g
dHcpIHsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAg
ICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCppdHIsIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICAgICAgKml0ciA9IGVpbmFfaW5saXN0X2RlbW90
ZSgqaXRyLCAqaXRyKTsKKworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIHIpOworICAgICAgICB9CisgICAgICAgIG95ICs9IHRo
OworICAgIH0KKworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IG9mZl94OworfQorCisv
KioKKyAqIEBpbnRlcm5hbAorICogTW92ZSByaWdodC1tb3N0IChsYXN0KSBjb2x1bW4gbGVmdCBh
cyBmaXJzdCAobGVmdC1tb3N0KS4KKyAqCisgKiBUaGUgZmluYWwgcmVzdWx0IGlzIHZpc3VhbGx5
IHRoZSBzYW1lLCBidXQgbG9naWNhbGx5IHRoZSBsYXN0IGNvbCB0aGF0CisgKiB3ZW50IG91dCBv
ZiBzY3JlZW4gaXMgbm93IGF0IGZpcnN0IGFuZCBmaWxsZWQgd2l0aCBuZXcgbW9kZWwgaXRlbXMu
CisgKgorICogVGhpcyBpcyB3b3J0aCBqdXN0IHdoZW4gQGEgY291bnQgaXMgc21hbGxlciB0aGFu
IEBjCisgKiBwcml2LT52aWV3LmNvbHMsIGFmdGVyIHRoYXQgb25lIGlzIHJlZmlsbGluZyB0aGUg
d2hvbGUgbWF0cml4IHNvIGl0CisgKiBpcyBiZXR0ZXIgdG8gdHJpZ2dlciBmdWxsIHJlZmlsbC4K
KyAqCisgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHBy
b2Nlc3MuCisgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dy
YXBfcmlnaHQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKyAgICB1bnNpZ25lZCBpbnQg
cjsKKyAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgRXZhc19Db29y
ZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIEV2YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnggLSBjb3VudCAqIHR3OworICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OworICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9l
bmQ7CisKKyAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBw
cml2LT52aWV3LnJvd3M7CisgICAgciA9IDA7CisKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCAt
PSBjb3VudDsKKworICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisrKSB7CisgICAg
ICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGNvdW50IC0gMSkgKiB0dyArIG9mZl94OworICAgICAg
ICB1bnNpZ25lZCBpbnQgaSwgYyA9IGNvdW50IC0gMTsKKworICAgICAgICBmb3IgKGkgPSAwOyBp
IDwgY291bnQ7IGkrKywgYy0tLCBveCAtPSB0dykgeworICAgICAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRB
SU5FUl9HRVQoKCppdHIpLT5sYXN0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAg
ICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9wcm9tb3RlKCppdHIsICgqaXRyKS0+bGFzdCk7
CisKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94
LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHBy
aXYsIGl0LCBjLCByKTsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKK30KKworc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBpbnQgc3RlcF94LCBpbnQg
c3RlcF95KQoreworICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRXZhc19D
b29yZCBiYXNlX294LCBveSwgdHcsIHRoOworICAgIHVuc2lnbmVkIGludCByOworCisgICAgZXZh
c19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIHgsIHkpOworCisgICAgdHcgPSBwcml2
LT52aWV3LnRpbGUudzsKKyAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworCisgICAgYmFzZV9v
eCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgb3kgPSB5ICsgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55OworCisgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdHJf
ZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworICAgIHIgPSAwOworCisgICAgcHJpdi0+bW9k
ZWwuYmFzZS5jb2wgLT0gc3RlcF94OworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93IC09IHN0ZXBf
eTsKKworICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisrKSB7CisgICAgICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0g
YmFzZV9veDsKKyAgICAgICAgdW5zaWduZWQgaW50IGMgPSAwOworICAgICAgICBFSU5BX0lOTElT
VF9GT1JFQUNIKCppdHIsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBjKys7CisgICAg
ICAgICAgICBveCArPSB0dzsKKyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSkKK3sKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV2YXNfQ29v
cmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKKworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFz
ZS5jbGlwcGVyLCB4LCB5KTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGgg
PSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54OworICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKworICAg
IGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcu
cm93czsKKyAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNl
X294OworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KSB7CisgICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOworICAgICAg
ICAgICAgb3ggKz0gdHc7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29m
ZnNldF9mb3JjZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQoreworICAgIEV2
YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC54OworICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55OworICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIGludCBz
dGVwX3ksIHN0ZXBfeDsKKworICAgIElORigibz0lcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRk
LCAlKzRkKSIsCisgICAgICAgIHByaXYtPnNlbGYsIGR4LCBkeSwgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKKworICAgIHR3ID0gcHJpdi0+dmlldy50
aWxlLnc7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKworICAgIGxvbmcgbmV3X2NvbCA9
IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OworICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVs
LmJhc2UuY29sIC0gbmV3X2NvbDsKKyAgICBsb25nIG5ld19yb3cgPSAtcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnkgLyB0aDsKKyAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19y
b3c7CisKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3Vy
Lnk7CisgICAgZXZhc19vYmplY3RfbW92ZSgKKyAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCisgICAg
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKKworICAgIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCArPSBkeCAtIHN0ZXBfeCAqIHR3OworICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRoOworCisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfcmVmaWxsCisgICAgICAgIChwcml2LCBwcml2LT52aWV3LngsIHByaXYt
PnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOworfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAgICBFdmFzX0Nv
b3JkIGR4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eDsKKyAgICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52
aWV3Lm9mZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBpbnQgc3RlcF95
LCBzdGVwX3g7CisKKyAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0
ZCkiLAorICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54
LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CisKKyAgICBpZiAoIWR4ICYmICFkeSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICB0aCA9IHByaXYt
PnZpZXcudGlsZS5oOworCisgICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC8gdHc7CisgICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOwor
ICAgIGxvbmcgbmV3X3JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRoOworICAgIHN0
ZXBfeSA9IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3X3JvdzsKKworICAgIHByaXYtPnZpZXcu
b2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgcHJpdi0+dmlldy5v
ZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICBldmFzX29iamVjdF9t
b3ZlKAorICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkgKyBwcml2LT52aWV3LnkpOworCisgICAgaWYgKChzdGVwX3ggPCAwICYmIHN0ZXBfeCA8
PSAtcHJpdi0+dmlldy5jb2xzKQorICAgICAgICB8fCAoc3RlcF94ID4gMCAmJiBzdGVwX3ggPj0g
cHJpdi0+dmlldy5jb2xzKQorICAgICAgICB8fCAoc3RlcF95IDwgMCAmJiBzdGVwX3kgPD0gLXBy
aXYtPnZpZXcucm93cykKKyAgICAgICAgfHwgKHN0ZXBfeSA+IDAgJiYgc3RlcF95ID49IHByaXYt
PnZpZXcucm93cykpIHsKKworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHgg
LSBzdGVwX3ggKiB0dzsKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0g
c3RlcF95ICogdGg7CisKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVm
aWxsCisgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBf
eCwgc3RlcF95KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueCArPSBkeDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHk7CisK
KyAgICBpZiAoc3RlcF95IDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfd3JhcF91cChwcml2LCB4LCB5LCAtc3RlcF95KTsKKyAgICBlbHNlIGlmIChzdGVwX3kgPiAw
KQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rvd24ocHJpdiwg
eCwgeSwgc3RlcF95KTsKKworICAgIGlmIChzdGVwX3ggPCAwKQorICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQocHJpdiwgeCwgeSwgLXN0ZXBfeCk7CisgICAg
ZWxzZSBpZiAoc3RlcF94ID4gMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfd3JhcF9yaWdodChwcml2LCB4LCB5LCBzdGVwX3gpOworCisgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOworfQorCitzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3sKKyAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7Cisg
ICAgcHJpdi0+dmlldy54ID0geDsKKyAgICBwcml2LT52aWV3LnkgPSB5OworICAgIGV2YXNfb2Jq
ZWN0X21vdmUoCisgICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAorICAgICAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7Cit9CisKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KQoreworICAgIEVpbmFfSW5saXN0ICppdDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdGVtOworICAgIGludCBpLCBqOworCisgICAgZm9yIChpID0gMDsgaSA8IHBy
aXYtPnZpZXcucm93czsgaSsrKSB7CisgICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsK
KyAgICAgICAgaiA9IDA7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goaXQsIGl0ZW0pCisg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0ZW0s
IGorKywgaSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQoreworICAgIEV2YXNfQ29vcmQgeCwg
eSwgdywgaDsKKworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAmeCwgJnksICZ3LCAm
aCk7CisgICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBvLCB4LCB5LCB3LCBoKTsKKwor
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworCisgICAgcHJpdi0+Y2hhbmdl
ZC5hbnkgPSBFSU5BX0ZBTFNFOworCisgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShwcml2LT5t
b2RlbC5tYXRyaXgpOworCisgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2LT5j
aGFuZ2VkLm1vZGVsKSB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgY29scywgcm93czsKKworICAg
ICAgICBjb2xzID0gcHJpdi0+bW9kZWwud2lkdGggLyBwcml2LT52aWV3LnRpbGUudyArIDE7Cisg
ICAgICAgIHJvd3MgPSBwcml2LT5tb2RlbC5oZWlnaHQgLyBwcml2LT52aWV3LnRpbGUuaCArIDE7
CisKKyAgICAgICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSBwcml2LT5tb2RlbC5jdXIuY29sczsK
KyAgICAgICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXIucm93czsKKyAg
ICAgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSBjb2xzOworICAgICAgICBwcml2LT5tb2RlbC5j
dXIucm93cyA9IHJvd3M7CisgICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQuY29scyA+IGNvbHMp
CisgICAgICAgICAgICBjb2xzID0gcHJpdi0+bW9kZWwub2xkLmNvbHM7CisgICAgICAgIGlmIChw
cml2LT5tb2RlbC5vbGQucm93cyA+IHJvd3MpCisgICAgICAgICAgICByb3dzID0gcHJpdi0+bW9k
ZWwub2xkLnJvd3M7CisgICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNpemUocHJpdi0+bW9kZWwu
bWF0cml4LCBjb2xzLCByb3dzKTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3Mg
JiYgKHByaXYtPnZpZXcueCAhPSB4IHx8IHByaXYtPnZpZXcueSAhPSB5KSkgeworICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3Bvcyhwcml2LCB4LCB5KTsK
KyAgICAgICAgcHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5BX0ZBTFNFOworICAgIH0KKyAgICBpZiAo
cHJpdi0+Y2hhbmdlZC5vZmZzZXQpIHsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQocHJpdiwgeCwgeSk7CisgICAgICAgIHByaXYtPmNoYW5n
ZWQub2Zmc2V0ID0gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5z
aXplKSB7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVf
c2l6ZShwcml2LCB3LCBoKTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxT
RTsKKyAgICB9CisKKyAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNoYW5n
ZWQubW9kZWwpIHsKKyAgICAgICAgRWluYV9SZWN0YW5nbGUgcmVjdDsKKyAgICAgICAgcmVjdC54
ID0gMDsKKyAgICAgICAgcmVjdC55ID0gMDsKKyAgICAgICAgcmVjdC53ID0gcHJpdi0+bW9kZWwu
d2lkdGg7CisgICAgICAgIHJlY3QuaCA9IHByaXYtPm1vZGVsLmhlaWdodDsKKyAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOworICAgICAgICBld2tf
dGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MpOworICAgICAgICBwcml2LT5jaGFuZ2VkLm1vZGVsID0g
RUlOQV9GQUxTRTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQpOworICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShwcml2
KTsKKworICAgICAgICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IG1pc3MgYW55IGltcG9ydGFudCBy
ZXBhaW50IGJ5CisgICAgICAgICAqIHJlcGFpbnRpbmcgdGhlIHdob2xlIHZpZXdwb3J0ICovCisg
ICAgICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlIHIgPQorICAgICAgICAgICAgeyAwLCAwLCBwcml2
LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0IH07CisgICAgICAgIGV3a190aWxlX21h
dHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCAmciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcml2LT52aWV3LnRpbGUuem9vbSk7CisgICAgfQorCisgICAgZXdrX3RpbGVf
bWF0cml4X3RoYXcocHJpdi0+bW9kZWwubWF0cml4KTsKKworICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CisKKyAgICBpZiAocHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ID4gMAorICAgICAgICB8fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPD0gLSBw
cml2LT52aWV3LnRpbGUudworICAgICAgICB8fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPiAw
CisgICAgICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA8PSAtIHByaXYtPnZpZXcudGls
ZS5oKQorICAgICAgICBFUlIoImluY29ycmVjdCBiYXNlIG9mZnNldCAlKzRkLCUrNGQsIHRpbGU9
JWR4JWQsIGN1cj0lKzRkLCUrNGRcbiIsCisgICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLngsIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSwKKyAgICAgICAgICAgIHByaXYtPnZpZXcu
dGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCwKKyAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CisKK30KKworRXZhc19PYmplY3QgKmV3
a190aWxlZF9iYWNraW5nX3N0b3JlX2FkZChFdmFzICplKQoreworICAgIHN0YXRpYyBFdmFzX1Nt
YXJ0ICpzbWFydCA9IDA7CisKKyAgICBpZiAoX2V3a190aWxlZF9sb2dfZG9tIDwgMCkKKyAgICAg
ICAgX2V3a190aWxlZF9sb2dfZG9tID0gZWluYV9sb2dfZG9tYWluX3JlZ2lzdGVyKCJFd2tfVGls
ZWRfQmFja2luZ19TdG9yZSIsIDApOworCisgICAgaWYgKCFzbWFydCkgeworICAgICAgICBzdGF0
aWMgRXZhc19TbWFydF9DbGFzcyBzYyA9CisgICAgICAgICAgICBFVkFTX1NNQVJUX0NMQVNTX0lO
SVRfTkFNRV9WRVJTSU9OKCJFd2tfVGlsZWRfQmFja2luZ19TdG9yZSIpOworCisgICAgICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZzYyk7CisgICAgICAgIF9wYXJlbnRf
c2MgPSBzYzsKKworICAgICAgICBzYy5hZGQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21h
cnRfYWRkOworICAgICAgICBzYy5kZWwgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
ZGVsOworICAgICAgICBzYy5yZXNpemUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
cmVzaXplOworICAgICAgICBzYy5tb3ZlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X21vdmU7CisgICAgICAgIHNjLmNhbGN1bGF0ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGU7CisgICAgICAgIHNjLm1lbWJlcl9hZGQgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfbWVtYmVyX2FkZDsKKyAgICAgICAgc2MubWVtYmVyX2RlbCA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsOworCisgICAgICAgIHNtYXJ0ID0g
ZXZhc19zbWFydF9jbGFzc19uZXcoJnNjKTsKKyAgICB9CisKKyAgICByZXR1cm4gZXZhc19vYmpl
Y3Rfc21hcnRfYWRkKGUsIHNtYXJ0KTsKK30KKwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9yZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgKCpjYikodm9pZCAqZGF0
YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKSwgY29uc3Qgdm9pZCAq
ZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjYik7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgcHJpdi0+cmVuZGVyLmNiID0gY2I7Cisg
ICAgcHJpdi0+cmVuZGVyLmRhdGEgPSAodm9pZCopZGF0YTsKK30KKworRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9nZXQoY29u
c3QgRXZhc19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
diwgMCk7CisgICAgcmV0dXJuIGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYt
Pm1vZGVsLm1hdHJpeCk7Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91
bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIGlmIChl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpID09IHR1
YykKKyAgICAgICAgcmV0dXJuOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVs
X21hdHJpeF9jcmVhdGUocHJpdiwgdHVjKTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkK
K3sKKyAgICAvKiBUT0RPOiBjaGVjayBvZmZzZXQgZ28gb3V0IG9mIGJvdW5kcywgY2xhbXAgKi8K
KyAgICBpZiAocHJpdi0+cmVuZGVyLmRpc2FibGVkKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKKworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0geDsKKyAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSA9IHk7CisKKyAgICBwcml2LT5jaGFuZ2VkLm9mZnNldCA9IEVJTkFfVFJVRTsK
KyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKKworICAgIHJldHVy
biBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3Jv
bGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSkKK3sKKyAgICBEQkcoIm89JXAsIHg9JWQsIHk9JWQiLCBvLCB4LCB5KTsKKworICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmICh4ID09
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICYmIHkgPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkp
CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICByZXR1cm4gX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwocHJpdiwgeCwgeSk7Cit9
CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRf
YWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5KQoreworICAg
IERCRygibz0lcCwgZHg9JWQsIGR5PSVkIiwgbywgZHgsIGR5KTsKKworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmICghZHggJiYgIWR5KQor
ICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworCisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsCisgICAgICAgIChwcml2LCBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCArIGR4LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIGR5
KTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9z
ZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgZmxvYXQgKnpv
b20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQgKm9mZngsIEV2YXNf
Q29vcmQgKm9mZnkpCit7CisgICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAg
ICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworCisgICAgaWYgKGZhYnNmKHByaXYt
PnZpZXcudGlsZS56b29tIC0gKnpvb20pIDwgWk9PTV9TVEVQX01JTikgeworICAgICAgICBEQkco
Imlnbm9yZWQgYXMgem9vbSBkaWZmZXJlbmNlIGlzIDwgJWY6ICVmIiwKKyAgICAgICAgICAgIChk
b3VibGUpWk9PTV9TVEVQX01JTiwgZmFic2YocHJpdi0+dmlldy50aWxlLnpvb20gLSAqem9vbSkp
OworICAgICAgICByZXR1cm4gRUlOQV9UUlVFOworICAgIH0KKworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7CisgICAgRXZhc19Db29y
ZCB0dywgdGg7CisKKyAgICAqem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywg
Knpvb20pOworCisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICB0aCA9IHByaXYtPnZp
ZXcudGlsZS5oOworCisgICAgZmxvYXQgc2NhbGUgPSAqem9vbSAvIHByaXYtPnZpZXcudGlsZS56
b29tOworCisgICAgcHJpdi0+dmlldy50aWxlLnpvb20gPSAqem9vbTsKKyAgICAvLyB0b2RvOiBj
aGVjayBjeCBbMCwgd10uLi4KKyAgICBwcml2LT52aWV3Lm9mZnNldC56b29tX2NlbnRlci54ID0g
Y3g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueSA9IGN5OworCisKKyAgICBp
ZiAoIXByaXYtPnZpZXcudyB8fCAhcHJpdi0+dmlldy5oKSB7CisgICAgICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCA9IDA7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7
CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisgICAgfQorICAgIEVpbmFfSW5saXN0ICoqaXRy
LCAqKml0cl9lbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisKKyAg
ICBFdmFzX0Nvb3JkIG5ld194ID0gY3ggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjeCkg
KiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld195ID0gY3kgKyAocHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkgLSBjeSkgKiBzY2FsZTsKKworICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lkdGggPSBwcml2
LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVpZ2h0ID0gcHJp
di0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CisKKyAgICBpZiAobW9kZWxfd2lkdGggPCBwcml2LT52
aWV3LncgfHwgbmV3X3ggPj0gMCkKKyAgICAgICAgbmV3X3ggPSAwOworICAgIGVsc2UgaWYgKC1u
ZXdfeCArIHByaXYtPnZpZXcudyA+PSBtb2RlbF93aWR0aCkKKyAgICAgICAgbmV3X3ggPSAtbW9k
ZWxfd2lkdGggKyBwcml2LT52aWV3Lnc7CisKKyAgICBpZiAobW9kZWxfaGVpZ2h0IDwgcHJpdi0+
dmlldy5oIHx8IG5ld195ID49IDApCisgICAgICAgIG5ld195ID0gMDsKKyAgICBlbHNlIGlmICgt
bmV3X3kgKyBwcml2LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0KQorICAgICAgICBuZXdfeSA9IC1t
b2RlbF9oZWlnaHQgKyBwcml2LT52aWV3Lmg7CisKKyAgICBFdmFzX0Nvb3JkIGJ4ID0gbmV3X3gg
JSB0dzsKKyAgICBFdmFzX0Nvb3JkIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICBwcml2LT5tb2RlbC5i
YXNlLmNvbCA9IC1uZXdfeCAvIHR3OworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195
IC8gdGg7CisKKyAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgcHJpdi0+
Y2hhbmdlZC5tb2RlbCA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
Y2hhbmdlZChwcml2KTsKKworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3X3g7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdfeTsKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggPSBieDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBieTsKKworICAg
IHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAg
cHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICAq
b2ZmeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgICpvZmZ5ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnk7CisKKyAgICBldmFzX29iamVjdF9tb3ZlKAorICAgICAgICBwcml2LT5jb250
ZW50c19jbGlwcGVyLAorICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgbmV3
X3kgKyBwcml2LT52aWV3LnkpOworCisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxf
cmVuZGVyZXJzKHByaXYpOworCisgICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2LT52
aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisKKyAgICBpdHIgPSBwcml2LT52aWV3
Lml0ZW1zOworICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisKKyAgICBmb3Ig
KDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vf
b3g7CisgICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOworCisgICAgICAgIEVJTkFfSU5M
SVNUX0ZPUkVBQ0gobHN0LCBpdCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKKyAgICAgICAgICAgIG94ICs9IHR3Owor
ICAgICAgICB9CisgICAgICAgIG95ICs9IHRoOworICAgIH0KKworICAgIHJldHVybiBFSU5BX1RS
VUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChFdmFz
X09iamVjdCAqbywgZmxvYXQgKnpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2
YXNfQ29vcmQgKm9mZngsIEV2YXNfQ29vcmQgKm9mZnkpCit7CisgICAgREJHKCJvPSVwLCB6b29t
PSVmIiwgbywgKGRvdWJsZSkqem9vbSk7CisKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfem9vbV9zZXRfaW50ZXJuYWwocHJpdiwgem9vbSwgY3gsIGN5LCBvZmZ4LCBvZmZ5KTsKK30K
KworRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19P
YmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCit7Cisg
ICAgREJHKCJvPSVwLCB6b29tPSVmIiwgbywgKGRvdWJsZSl6b29tKTsKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoIXByaXYtPnZpZXcu
dyB8fCAhcHJpdi0+dmlldy5oKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICBFaW5h
X0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0gKml0OworICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIEVpbmFfQm9vbCByZWNhbGMgPSBF
SU5BX0ZBTFNFOworCisgICAgZmxvYXQgc2NhbGUgPSB6b29tIC8gcHJpdi0+dmlldy50aWxlLnpv
b207CisKKyAgICB0dyA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCBzY2Fs
ZSk7CisgICAgc2NhbGUgPSBUSUxFX1pPT01fQVRfU0laRSh0dywgcHJpdi0+dmlldy50aWxlLncp
OworICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHNjYWxlKTsK
KyAgICB6b29tID0gc2NhbGUgKiBwcml2LT52aWV3LnRpbGUuem9vbTsKKworICAgIEV2YXNfQ29v
cmQgbW9kZWxfd2lkdGggPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29v
cmQgbW9kZWxfaGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CisKKyAgICBldmFz
X29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbW9kZWxfd2lkdGgsIG1vZGVs
X2hlaWdodCk7CisKKyAgICBpbnQgdnJvd3MgPSBjZWlsKChmbG9hdClwcml2LT52aWV3LmggLyAo
ZmxvYXQpdGgpICsgMTsKKyAgICBpbnQgdmNvbHMgPSBjZWlsKChmbG9hdClwcml2LT52aWV3Lncg
LyAoZmxvYXQpdHcpICsgMTsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3ggKyAocHJpdi0+dmll
dy5vZmZzZXQuY3VyLnggLSBjeCkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld195ID0gY3kg
KyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjeSkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3Jk
IGJ4ID0gbmV3X3ggJSB0dzsKKyAgICBFdmFzX0Nvb3JkIGJ5ID0gbmV3X3kgJSB0aDsKKyAgICB1
bnNpZ25lZCBsb25nIGJhc2Vfcm93ID0gLW5ld195IC8gdGg7CisgICAgdW5zaWduZWQgbG9uZyBi
YXNlX2NvbCA9IC1uZXdfeCAvIHR3OworCisgICAgaWYgKGJhc2Vfcm93ICE9IHByaXYtPm1vZGVs
LmJhc2Uucm93IHx8IGJhc2VfY29sICE9IHByaXYtPm1vZGVsLmJhc2UuY29sKSB7CisgICAgICAg
IHByaXYtPm1vZGVsLmJhc2Uucm93ID0gYmFzZV9yb3c7CisgICAgICAgIHByaXYtPm1vZGVsLmJh
c2UuY29sID0gYmFzZV9jb2w7CisgICAgICAgIHJlY2FsYyA9IEVJTkFfVFJVRTsKKyAgICB9CisK
KyAgICBpZiAodnJvd3MgPiBwcml2LT52aWV3LnJvd3MgfHwgdmNvbHMgPiBwcml2LT52aWV3LmNv
bHMpCisgICAgICAgIHJlY2FsYyA9IEVJTkFfVFJVRTsKKworICAgIGlmIChyZWNhbGMpIHsKKyAg
ICAgICAgRXZhc19Db29yZCB3LCBoOworICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
bywgMCwgMCwgJncsICZoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2Fs
Y19yZW5kZXJlcnMocHJpdiwgdywgaCwgdHcsIHRoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOworICAgIH0KKworICAgIEV2YXNfQ29vcmQg
YmFzZV9veCA9IGJ4ICsgcHJpdi0+dmlldy54OworICAgIEV2YXNfQ29vcmQgb3kgPSBieSArIHBy
aXYtPnZpZXcueTsKKworICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgICAgICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAorICAgICAgICAg
ICAgICAgICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOworCisgICAgaXRyID0gcHJpdi0+dmll
dy5pdGVtczsKKyAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9y
ICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNl
X294OworICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKworICAgICAgICBFSU5BX0lO
TElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7CisgICAgICAgICAgICBveCArPSB0dzsK
KyAgICAgICAgfQorICAgICAgICBveSArPSB0aDsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9U
UlVFOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNf
T2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3sKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5k
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEV2YXNfQ29vcmQg
bmV3X3ggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICBFdmFzX0Nvb3JkIG5ld195ID0g
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgRXZhc19Db29yZCBieCA9IHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueDsKKyAgICBFdmFzX0Nvb3JkIGJ5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55OworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKKyAgICBFdmFzX0Nv
b3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisKKyAgICBpZiAoLW5ld194ID4gdykgeworICAg
ICAgICBuZXdfeCA9IC13OworICAgICAgICBieCA9IG5ld194ICUgdHc7CisgICAgICAgIHByaXYt
Pm1vZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHc7CisgICAgfQorCisgICAgaWYgKC1uZXdfeSA+
IGgpIHsKKyAgICAgICAgbmV3X3kgPSAtaDsKKyAgICAgICAgYnkgPSBuZXdfeSAlIHRoOworICAg
ICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdfeSAvIHRoOworICAgIH0KKworICAgIGlm
IChieCA+PSAwIHx8IGJ4IDw9IC0yICogcHJpdi0+dmlldy50aWxlLncpIHsKKyAgICAgICAgYngg
PSBuZXdfeCAlIHR3OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3
OworICAgIH0KKworICAgIGlmIChieSA+PSAwIHx8IGJ5IDw9IC0yICogcHJpdi0+dmlldy50aWxl
LmgpIHsKKyAgICAgICAgYnkgPSBuZXdfeSAlIHRoOworICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LnJvdyA9IC1uZXdfeSAvIHRoOworICAgIH0KKworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54
ID0gbmV3X3g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdfeTsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5vbGQueCA9IG5ld194OworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55
ID0gbmV3X3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gYng7CisgICAgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250
ZW50c19jbGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3Lngs
CisgICAgICAgICAgICAgICAgICAgICBuZXdfeSArIHByaXYtPnZpZXcueSk7CisKKyAgICBFdmFz
X0Nvb3JkIG95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55OworICAg
IEV2YXNfQ29vcmQgYmFzZV9veCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueDsKKworICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRyX2VuZCA9IGl0ciAr
IHByaXYtPnZpZXcucm93czsKKworICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgewor
ICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKKyAgICAgICAgRWluYV9Jbmxpc3QgKmxz
dCA9ICppdHI7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7CisgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwor
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywg
dGgpOworICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIH0KKyAgICAgICAgb3kgKz0gdGg7
CisgICAgfQorfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zbW9v
dGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQorewor
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIEVpbmFfSW5saXN0ICoq
aXRyLCAqKml0cl9lbmQ7CisKKyAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0cl9l
bmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcHJpdi0+dmlldy50aWxlLnpvb21fd2Vh
a19zbW9vdGhfc2NhbGUgPSBzbW9vdGhfc2NhbGU7CisKKyAgICBmb3IgKDsgaXRyPCBpdHJfZW5k
OyBpdHIrKykgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAg
ICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkKKyAgICAgICAgICAgIGlmIChpdC0+
dGlsZSkKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9zbW9v
dGhfc2NhbGVfc2V0CisgICAgICAgICAgICAgICAgICAgIChpdCwgc21vb3RoX3NjYWxlKTsKKyAg
ICB9Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUoRXZhc19P
YmplY3QgKm8sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpCit7CisgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisKKyAgICBpZiAocHJpdi0+cmVu
ZGVyLmRpc2FibGVkKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKworICAgIHJldHVybiBl
d2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgdXBkYXRlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS56b29tKTsKK30KKwor
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcHJlX3NldChFdmFz
X09iamVjdCAqbywgdm9pZCAqKCpjYikodm9pZCAqZGF0YSwgRXZhc19PYmplY3QgKm8pLCBjb25z
dCB2b2lkICpkYXRhKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwor
ICAgIHByaXYtPnByb2Nlc3MucHJlX2NiID0gY2I7CisgICAgcHJpdi0+cHJvY2Vzcy5wcmVfZGF0
YSA9ICh2b2lkKilkYXRhOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0
ZXNfcHJvY2Vzc19wb3N0X3NldChFdmFzX09iamVjdCAqbywgdm9pZCAqKCpjYikodm9pZCAqZGF0
YSwgdm9pZCAqcHJlX2RhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBwcml2LT5wcm9jZXNz
LnBvc3RfY2IgPSBjYjsKKyAgICBwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSA9ICh2b2lkKilkYXRh
OworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFdmFz
X09iamVjdCAqbykKK3sKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOworfQorCit2
b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfY2xlYXIoRXZhc19PYmplY3QgKm8p
Cit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisKKyAgICBld2tfdGls
ZV9tYXRyaXhfdXBkYXRlc19jbGVhcihwcml2LT5tb2RlbC5tYXRyaXgpOworfQorCit2b2lkIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRzX3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZh
c19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCit7CisgICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4obywgcHJpdik7CisKKyAgICBpZiAod2lkdGggPT0gcHJpdi0+bW9kZWwud2lkdGgg
JiYgaGVpZ2h0ID09IHByaXYtPm1vZGVsLmhlaWdodCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cHJpdi0+bW9kZWwud2lkdGggPSB3aWR0aDsKKyAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSBoZWln
aHQ7CisgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJTkFfVFJVRTsKKworICAgIERCRygid2lk
dGgsaGVpZ2h0PSVkLCAlZCIsIHdpZHRoLCBoZWlnaHQpOworICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9jaGFuZ2VkKHByaXYpOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2Rpc2FibGVkX3VwZGF0ZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCB2YWx1ZSkKK3sK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKworICAgIGlmICh2YWx1ZSAh
PSBwcml2LT5yZW5kZXIuZGlzYWJsZWQpCisgICAgICAgIHByaXYtPnJlbmRlci5kaXNhYmxlZCA9
IHZhbHVlOworfQorCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2Jq
ZWN0ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjID0gMDsKKworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54ID0gMDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQub2xkLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gMDsKKyAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSA9IDA7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAwOworICAgIHByaXYtPm1vZGVs
LmJhc2Uucm93ID0gMDsKKyAgICBwcml2LT5tb2RlbC5jdXIuY29scyA9IDE7CisgICAgcHJpdi0+
bW9kZWwuY3VyLnJvd3MgPSAxOworICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gMDsKKyAgICBw
cml2LT5tb2RlbC5vbGQucm93cyA9IDA7CisgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9U
UlVFOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgcHJpbnRmKCJcbkZMVVNIRUQgQkFD
S0lORyBTVE9SRSwgU1RBVFVTIEJFRk9SRSBERUxFVElORyBUSUxFIE1BVFJJWDpcbiIpOworICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworI2VuZGlmCisKKyAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOwor
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKHByaXYpOwor
ICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1h
dHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKHR1Yyk7CisKKyNpZmRlZiBE
RUJVR19NRU1fTEVBS1MKKyAgICBwcmludGYoIlxuRkxVU0hFRCBCQUNLSU5HIFNUT1JFLCBTVEFU
VVMgQUZURVIgUkVDUkVBVElORyBUSUxFIE1BVFJJWDpcbiIpOworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9tZW1fZGJnKHByaXYpOworI2VuZGlmCit9CisKK0VpbmFfQm9vbCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCAqbywgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6
b29tKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7CisgICAgY29uc3QgRWluYV9UaWxl
X0dyaWRfSW5mbyAqaW5mbzsKKyAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YzsKKworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7CisgICAgdGgg
PSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICB6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcu
dGlsZS53LCB6b29tKTsKKworICAgIGlmICghZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKCZz
bGljZXIsIHgsIHksIHcsIGgsIHR3LCB0aCkpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0
dXAgZ3JpZCBzbGljZXIgZm9yICVkLCVkKyVkeCVkIHRpbGU9JWR4JWQiLAorICAgICAgICAgICAg
eCwgeSwgdywgaCwgdHcsIHRoKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQor
CisgICAgd2hpbGUgKGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9uZXh0KCZzbGljZXIsICZpbmZvKSkg
eworICAgICAgICBjb25zdCB1bnNpZ25lZCBsb25nIGMgPSBpbmZvLT5jb2w7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGxvbmcgciA9IGluZm8tPnJvdzsKKyAgICAgICAgaWYgKCFfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChwcml2LCBjLCByLCB6b29tLCBQ
UkVfUkVOREVSX1BSSU9SSVRZX0xPVykpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYp
OworCisgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9k
ZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywgeCwg
eSwgdywgaCwgem9vbSk7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNfT2Jq
ZWN0ICpvLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9vbSkKK3sKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0
X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBlbmRfY29sLCBpLCBqLCB3LCBoOworICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjOworCisgICAgSU5GKCJwcml2LT5tb2RlbC5iYXNlLnJvdyA9
JWxkLCBuPSV1IHByaXYtPnZpZXcucm93cz0lbHUiLAorICAgICAgICAgICAgcHJpdi0+bW9kZWwu
YmFzZS5yb3csIG4sIHByaXYtPnZpZXcucm93cyk7CisgICAgc3RhcnRfcm93ID0gKGxvbmcpcHJp
di0+bW9kZWwuYmFzZS5yb3cgLSBuOworICAgIHN0YXJ0X2NvbCA9IChsb25nKXByaXYtPm1vZGVs
LmJhc2UuY29sIC0gbjsKKyAgICBlbmRfcm93ID0gc3RkOjptaW4ocHJpdi0+bW9kZWwuY3VyLnJv
d3MgLSAxLAorICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyBwcml2LT52
aWV3LnJvd3MgKyBuIC0gMSk7CisgICAgZW5kX2NvbCA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1
ci5jb2xzIC0gMSwKKyAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sICsgcHJp
di0+dmlldy5jb2xzICsgbiAtIDEpOworCisgICAgSU5GKCJzdGFydF9yb3c9JWx1LCBlbmRfcm93
PSVsdSwgc3RhcnRfY29sPSVsdSwgZW5kX2NvbD0lbHUiLAorICAgICAgICAgc3RhcnRfcm93LCBl
bmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOworCisgICAgem9vbSA9IFJPVU5ERURfWk9PTShw
cml2LT52aWV3LnRpbGUudywgem9vbSk7CisKKyAgICBmb3IgKGkgPSBzdGFydF9yb3c7IGkgPD0g
ZW5kX3JvdzsgaSsrKQorICAgICAgICBmb3IgKGogPSBzdGFydF9jb2w7IGogPD0gZW5kX2NvbDsg
aisrKQorICAgICAgICAgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2FkZChwcml2LCBqLCBpLCB6b29tLCBQUkVfUkVOREVSX1BSSU9SSVRZX0xPVykp
CisgICAgICAgICAgICAgICAgZ290byBzdGFydF9wcm9jZXNzaW5nOworCitzdGFydF9wcm9jZXNz
aW5nOgorICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rh
cnQocHJpdik7CisKKyAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChw
cml2LT5tb2RlbC5tYXRyaXgpOworICAgIGggPSAoZW5kX3JvdyAtIHN0YXJ0X3JvdyArIDEpICog
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHpvb20pOworICAgIHcgPSAoZW5k
X2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxl
LncsIHpvb20pOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVjLAorICAg
ICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLncs
IHpvb20pLAorICAgICAgICAgICAgc3RhcnRfcm93ICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+
dmlldy50aWxlLmgsIHpvb20pLCB3LCBoLCB6b29tKTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7
Cit9CisKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZh
c19PYmplY3QgKm8pCit7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Cisg
ICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKHByaXYpOworCisgICAgdHVjID0gZXdrX3Rp
bGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKK30KKworRWluYV9Cb29sIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKQoreworICAg
IFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIocHJpdik7Cit9CisKK0Vp
bmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV2YXNfT2JqZWN0
ICpvKQoreworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOworICAgIHJldHVy
biBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihwcml2KTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmgKaW5kZXggNDZh
YWE4MzkxMjJlZTUzYmExN2Q1MDBmMmU4MDlmMDliMzgxOGJmMi4uMzAxMDNlZDFkMzBkNjlkMWJm
NTUyMGQ0MmVmNDlmNzM1OGM2NGMzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9iYWNraW5nX3N0b3JlLmgKQEAgLTQyLDEwICs0Miw2IEBACiAjZGVmaW5lIFRJTEVf
Wk9PTV9BVF9TSVpFKFNJWkUsIE9SSUdfVElMRSkgKChmbG9hdCkoU0laRSkgLyAoZmxvYXQpKE9S
SUdfVElMRSkpCiAjZGVmaW5lIFJPVU5ERURfWk9PTShTSVpFLCBaT09NKSAoKGZsb2F0KShTSVpF
KSAvIChmbG9hdCkoKChpbnQpcm91bmRmKChTSVpFKSAvIChaT09NKSkpKSkKIAotI2lmZGVmIF9f
Y3BsdXNwbHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgotCiAjaW5jbHVkZSA8RXZhcy5oPgogI2lu
Y2x1ZGUgPGNhaXJvLmg+CiAKQEAgLTEyMyw3ICsxMTksNCBAQCB2b2lkIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBvKTsKIAogRWluYV9Cb29s
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV2YXNfT2JqZWN0KiBvKTsK
IEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV2YXNfT2Jq
ZWN0KiBvKTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCiAjZW5kaWYgLy8gZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tYXRyaXguYyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4
LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZjljODQ0MzA1ODI3NjkyOWQ5ODAy
MmVjMWNkZTY3NWMxNDVlNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguYworKysgL2Rl
di9udWxsCkBAIC0xLDY0OCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEw
IFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJ
T04gZW1iZWRkZWQgc3lzdGVtcwotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJl
d2tfdGlsZWRfbWF0cml4LmgiCi0KLSNkZWZpbmUgX0dOVV9TT1VSQ0UKLSNpbmNsdWRlICJld2tf
dGlsZWRfYmFja2luZ19zdG9yZS5oIgotI2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRlLmgiCi0j
aW5jbHVkZSA8RWluYS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8aW50dHlwZXMu
aD4KLSNpbmNsdWRlIDxtYXRoLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIHJlbW92ZSBt
ZSBsYXRlcgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1zdHJ1
Y3QgX0V3a19UaWxlX01hdHJpeCB7Ci0gICAgRWluYV9NYXRyaXhzcGFyc2UgKm1hdHJpeDsKLSAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKLSAgICBFdmFzX0NvbG9yc3BhY2UgY3NwYWNl
OwotICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUg
KnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpOwotICAgICAgICB2b2lkICpkYXRhOwot
ICAgIH0gcmVuZGVyOwotICAgIHVuc2lnbmVkIGludCBmcm96ZW47Ci0gICAgRWluYV9MaXN0ICp1
cGRhdGVzOwotICAgIHN0cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQgdywgaDsKLSAgICB9IHRp
bGU7Ci0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgc3RydWN0IHsKLSAgICAgICAgc3RydWN0
IHsKLSAgICAgICAgICAgIHVpbnQ2NF90IGFsbG9jYXRlZCwgZnJlZWQ7Ci0gICAgICAgIH0gdGls
ZXMsIGJ5dGVzOwotICAgIH0gc3RhdHM7Ci0jZW5kaWYKLX07Ci0KLSNpZmRlZiBERUJVR19NRU1f
TEVBS1MKLXN0YXRpYyB1aW50NjRfdCB0aWxlc19sZWFrZWQgPSAwOwotc3RhdGljIHVpbnQ2NF90
IGJ5dGVzX2xlYWtlZCA9IDA7Ci0jZW5kaWYKLQotLyogY2FsbGVkIHdoZW4gbWF0cml4c3BhcnNl
IGlzIHJlc2l6ZWQgb3IgZnJlZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfY2Vs
bF9mcmVlKHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqY2VsbF9kYXRhKQotewotICAgIEV3a19UaWxl
X01hdHJpeCAqdG0gPSB1c2VyX2RhdGE7Ci0gICAgRXdrX1RpbGUgKnQgPSBjZWxsX2RhdGE7Ci0K
LSAgICBpZiAoIXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGV3a190aWxlX3VudXNlZF9jYWNo
ZV9mcmVlemUodG0tPnR1Yyk7Ci0KLSAgICBpZiAodC0+dXBkYXRlcyB8fCB0LT5zdGF0cy5mdWxs
X3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRh
dGVzLCB0KTsKLQotICAgIGlmICh0LT52aXNpYmxlKQotICAgICAgICBFUlIoImZyZWVpbmcgY2Vs
bCB0aGF0IGlzIHZpc2libGUsIGxlYWtpbmcgdGlsZSAlcCIsIHQpOwotICAgIGVsc2UgewotICAg
ICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0KSkKLSAg
ICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBsZWFraW5nLi4uIiwg
dCwgdG0tPnR1Yyk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgREJHKCJ0aWxlIGNlbGwg
ZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJlZSBpdCAlcCIsIHQpOwotI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwot
ICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVkKys7Ci0jZW5kaWYKLSAgICAgICAgICAg
IGV3a190aWxlX2ZyZWUodCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKLX0KLQotLyogY2FsbGVkIHdoZW4gY2FjaGUgb2YgdW51
c2VkIHRpbGUgaXMgZmx1c2hlZCAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxl
X2ZyZWUodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpCi17Ci0gICAgRXdrX1RpbGVfTWF0cml4ICp0
bSA9IGRhdGE7Ci0gICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKLSAKLSAgICBpZiAo
IWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0bS0+bWF0cml4LCB0LT5yb3csIHQtPmNv
bCwgJmNlbGwpKSB7Ci0gICAgICAgIEVSUigicmVtb3ZpbmcgdGlsZSAlcCB0aGF0IHdhcyBub3Qg
aW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKCFjZWxsKSB7Ci0gICAgICAgIEVSUigicmVtb3ZpbmcgdGlsZSAlcCB0aGF0IHdh
cyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHQpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAg
ICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7Ci0KLSAg
ICAvKiBzZXQgdG8gbnVsbCB0byBhdm9pZCBkb3VibGUgZnJlZSAqLwotICAgIGVpbmFfbWF0cml4
c3BhcnNlX2NlbGxfZGF0YV9yZXBsYWNlKGNlbGwsIE5VTEwsIE5VTEwpOwotICAgIGVpbmFfbWF0
cml4c3BhcnNlX2NlbGxfY2xlYXIoY2VsbCk7Ci0KLSAgICBpZiAoRUlOQV9VTkxJS0VMWSghIXQt
PnZpc2libGUpKSB7Ci0gICAgICAgIEVSUigiY2FjaGUgb2YgdW51c2VkIHRpbGVzIHJlcXVlc3Rp
bmcgZGVsZXRpb24gb2YgdXNlZCB0aWxlICVwPyAiCi0gICAgICAgICAgICAiTGVha2luZy4uLiIs
IHQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0g
ICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOwotICAgIHRtLT5zdGF0cy50aWxl
cy5mcmVlZCsrOwotI2VuZGlmCi0KLSAgICBld2tfdGlsZV9mcmVlKHQpOwotfQotCi0vKioKLSAq
IENyZWF0ZXMgYSBuZXcgbWF0cml4IG9mIHRpbGVzLgotICoKLSAqIFRoZSB0aWxlIG1hdHJpeCBp
cyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyB0aWxlcyBhcm91bmQgYW5kCi0gKiBwcm92aWRpbmcg
ZmFzdCBhY2Nlc3MgdG8gdGhlbS4gT25lIGNhbiB1c2UgaXQgdG8gcmV0cmlldmUgbmV3IG9yCi0g
KiBleGlzdGluZyB0aWxlcyBhbmQgZ2l2ZSB0aGVtIGJhY2ssIGFsbG93aW5nIHRoZW0gdG8gYmUK
LSAqIGZyZWVkL3JlcGxhY2VkIGJ5IHRoZSBjYWNoZS4KLSAqCi0gKiBAcGFyYW0gdHVjIGNhY2hl
IG9mIHVudXNlZCB0aWxlcyBvciBAYyBOVUxMIHRvIGNyZWF0ZSBvbmUKLSAqICAgICAgICBhdXRv
bWF0aWNhbGx5LgotICogQHBhcmFtIGNvbHMgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIG1hdHJp
eC4KLSAqIEBwYXJhbSByb3dzIG51bWJlciBvZiByb3dzIGluIHRoZSBtYXRyaXguCi0gKiBAcGFy
YW0gY3NwYWNlIHRoZSBjb2xvciBzcGFjZSB1c2VkIHRvIGNyZWF0ZSB0aWxlcyBpbiB0aGlzIG1h
dHJpeC4KLSAqIEBwYXJhbSByZW5kZXJfY2IgZnVuY3Rpb24gdXNlZCB0byByZW5kZXIgZ2l2ZW4g
dGlsZSB1cGRhdGUuCi0gKiBAcGFyYW0gcmVuZGVyX2RhdGEgY29udGV4dCB0byBnaXZlIGJhY2sg
dG8gQGEgcmVuZGVyX2NiLgotICoKLSAqIEByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGluc3RhbmNl
IG9uIHN1Y2Nlc3MsIEBjIE5VTEwgb24gZmFpbHVyZS4KLSAqLwotRXdrX1RpbGVfTWF0cml4ICpl
d2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCB1bnNpZ25lZCBs
b25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNzcGFjZSwgdm9p
ZCAoKnJlbmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpyZW5kZXJfZGF0YSkKLXsKLSAgICBFd2tfVGlsZV9N
YXRyaXggKnRtOwotCi0gICAgQ0FMTE9DX09SX09PTV9SRVQodG0sIHNpemVvZihFd2tfVGlsZV9N
YXRyaXgpLCBOVUxMKTsKLQotICAgIHRtLT5tYXRyaXggPSBlaW5hX21hdHJpeHNwYXJzZV9uZXco
cm93cywgY29scywgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUsIHRtKTsKLSAgICBpZiAoIXRt
LT5tYXRyaXgpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHNwYXJzZSBtYXRyaXgu
Iik7Ci0gICAgICAgIGZyZWUodG0pOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAg
ICBpZiAodHVjKQotICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZih0
dWMpOwotICAgIGVsc2UgewotICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2NhY2hl
X25ldyg0MDk2MDAwMCk7Ci0gICAgICAgIGlmICghdG0tPnR1YykgewotICAgICAgICAgICAgRVJS
KCJubyBjYWNoZSBvZiB1bnVzZWQgdGlsZSEiKTsKLSAgICAgICAgICAgIGVpbmFfbWF0cml4c3Bh
cnNlX2ZyZWUodG0tPm1hdHJpeCk7Ci0gICAgICAgICAgICBmcmVlKHRtKTsKLSAgICAgICAgICAg
IHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdG0tPmNzcGFjZSA9IGNzcGFj
ZTsKLSAgICB0bS0+cmVuZGVyLmNiID0gcmVuZGVyX2NiOwotICAgIHRtLT5yZW5kZXIuZGF0YSA9
ICh2b2lkICopcmVuZGVyX2RhdGE7Ci0gICAgdG0tPnRpbGUudyA9IERFRkFVTFRfVElMRV9XOwot
ICAgIHRtLT50aWxlLmggPSBERUZBVUxUX1RJTEVfSDsKLQotICAgIHJldHVybiB0bTsKLX0KLQot
LyoqCi0gKiBEZXN0cm95cyB0aWxlcyBtYXRyaXgsIHJlbGVhc2luZyBpdHMgcmVzb3VyY2VzLgot
ICoKLSAqIFRoZSBjYWNoZSBpbnN0YW5jZSBpcyB1bnJlZmVyZW5jZWQsIHBvc3NpYmx5IGZyZWVp
bmcgaXQuCi0gKi8KLXZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4ICp0
bSkKLXsKLSNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICB1aW50NjRfdCB0aWxlcywgYnl0ZXM7
Ci0jZW5kaWYKLQotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwotCi0gICAgZWluYV9tYXRyaXhzcGFy
c2VfZnJlZSh0bS0+bWF0cml4KTsKLQotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRt
LT50dWMpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZih0bS0+dHVjKTsKLQotI2lm
ZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRpbGVzID0gdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRl
ZCAtIHRtLT5zdGF0cy50aWxlcy5mcmVlZDsKLSAgICBieXRlcyA9IHRtLT5zdGF0cy5ieXRlcy5h
bGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQ7Ci0KLSAgICB0aWxlc19sZWFrZWQgKz0g
dGlsZXM7Ci0gICAgYnl0ZXNfbGVha2VkICs9IGJ5dGVzOwotCi0gICAgaWYgKHRpbGVzIHx8IGJ5
dGVzKQotICAgICAgICBFUlIoInRpbGVkIG1hdHJpeCBsZWFrZWQ6IHRpbGVzWyslIlBSSXU2NCIs
LSUiUFJJdTY0IjolIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUi
UFJJdTY0IjolIlBSSXU2NCJdIiwKLSAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0
ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwgdGlsZXMsCi0gICAgICAgICAgICB0bS0+c3RhdHMu
Ynl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsIGJ5dGVzKTsKLSAgICBlbHNl
IGlmICh0aWxlc19sZWFrZWQgfHwgYnl0ZXNfbGVha2VkKQotICAgICAgICBXUk4oInRpbGVkIG1h
dHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0gIgotICAgICAg
ICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSwgYnV0IHNvbWUgb3RoZXIgbGVha2Vk
ICIKLSAgICAgICAgICAgICIlIlBSSXU2NCIgdGlsZXMgKCUiUFJJdTY0IiBieXRlcykiLAotICAg
ICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVk
LAotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVz
LmZyZWVkLAotICAgICAgICAgICAgdGlsZXNfbGVha2VkLCBieXRlc19sZWFrZWQpOwotICAgIGVs
c2UKLSAgICAgICAgSU5GKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSJQUkl1
NjQiLC0lIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0
Il0iLAotICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRp
bGVzLmZyZWVkLAotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0
YXRzLmJ5dGVzLmZyZWVkKTsKLSNlbmRpZgotCi0gICAgZnJlZSh0bSk7Ci19Ci0KLS8qKgotICog
UmVzaXplIG1hdHJpeCB0byBnaXZlbiBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucy4KLSAqLwot
dm9pZCBld2tfdGlsZV9tYXRyaXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVk
IGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzKQotewotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHRtKTsKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX3NldCh0bS0+bWF0cml4
LCByb3dzLCBjb2xzKTsKLX0KLQotLyoqCi0gKiBHZXQgdGhlIGNhY2hlIG9mIHVudXNlZCB0aWxl
cyBpbiB1c2UgYnkgZ2l2ZW4gbWF0cml4LgotICoKLSAqIE5vIHJlZmVyZW5jZSBpcyB0YWtlbiB0
byB0aGUgY2FjaGUuCi0gKi8KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfbWF0cml4
X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIE5VTEwpOwotICAgIHJldHVybiB0bS0+dHVj
OwotfQotCi0vKioKLSAqIEdldCB0aGUgZXhhY3QgdGlsZSBmb3IgdGhlIGdpdmVuIHBvc2l0aW9u
IGFuZCB6b29tLgotICoKLSAqIElmIHRoZSB0aWxlIHdhcyB1bnVzZWQgdGhlbiBpdCdzIHJlbW92
ZWQgZnJvbSB0aGUgY2FjaGUuCi0gKgotICogQWZ0ZXIgdXNhZ2UsIHBsZWFzZSBnaXZlIGl0IGJh
Y2sgdXNpbmcKLSAqIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCgpLiBJZiB5b3UganVzdCB3YW50
IHRvIGNoZWNrIGlmIGl0IGV4aXN0cywKLSAqIHRoZW4gdXNlIGV3a190aWxlX21hdHJpeF90aWxl
X2V4YWN0X2V4aXN0cygpLgotICoKLSAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gZ2V0
IHRpbGUgZnJvbS4KLSAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCi0gKiBAcGFyYW0g
cm93IHRoZSByb3cgbnVtYmVyLgotICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20gdG8gdXNl
LgotICoKLSAqIEByZXR1cm4gVGhlIHRpbGUgaW5zdGFuY2Ugb3IgQGMgTlVMTCBpZiBub25lIGlz
IGZvdW5kLiBJZiB0aGUgdGlsZQotICogICAgICAgICB3YXMgaW4gdGhlIHVudXNlZCBjYWNoZSBp
dCB3aWxsIGJlIEBiIHJlbW92ZWQgKHRodXMKLSAqICAgICAgICAgY29uc2lkZXJlZCB1c2VkKSBh
bmQgb25lIHNob3VsZCBnaXZlIGl0IGJhY2sgd2l0aAotICogICAgICAgICBld2tfdGlsZV9tYXRy
aXhfdGlsZV9wdXQoKSBhZnRlcndhcmRzLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3Rp
bGVfZXhhY3RfZ2V0KCkKLSAqLwotRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0
X2dldChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9u
ZyByb3csIGZsb2F0IHpvb20pCi17Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgdCA9IGVpbmFfbWF0
cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCk7Ci0gICAgaWYgKCF0
KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICh0LT56b29tID09IHpvb20pCi0gICAg
ICAgIGdvdG8gZW5kOwotCi0gIGVuZDoKLSAgICBpZiAoIXQtPnZpc2libGUpIHsKLSAgICAgICAg
aWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCi0gICAgICAg
ICAgICBXUk4oIkV3a19UaWxlIHdhcyB1bnVzZWQgYnV0IG5vdCBpbiBjYWNoZT8gYnVnISIpOwot
ICAgIH0KLQotICAgIHJldHVybiB0OwotfQotCi0vKioKLSAqIENoZWNrcyBpZiB0aWxlIG9mIGdp
dmVuIHpvb20gZXhpc3RzIGluIG1hdHJpeC4KLSAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0
cml4IHRvIGNoZWNrIHRpbGUgZXhpc3RlbmNlLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51
bWJlci4KLSAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCi0gKiBAcGFyYW0gem9vbSB0aGUg
ZXhhY3Qgem9vbSB0byBxdWVyeS4KLSAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBmb3Vu
ZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCi0gKgotICogQHNlZSBld2tfdGlsZV9tYXRyaXhf
dGlsZV9leGFjdF9nZXQoKQotICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhh
Y3RfZXhpc3RzKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25l
ZCBsb25nIHJvdywgZmxvYXQgem9vbSkKLXsKLSAgICBFd2tfVGlsZSAqdDsKLQotICAgIHQgPSBl
aW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpOwotICAg
IGlmICghdCkKLSAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0KLSAgICByZXR1cm4gRUlOQV9U
UlVFOwotfQotCi0vKioKLSAqIENyZWF0ZSBhIG5ldyB0aWxlIGF0IGdpdmVuIHBvc2l0aW9uIGFu
ZCB6b29tIGxldmVsIGluIHRoZSBtYXRyaXguCi0gKgotICogVGhlIG5ld2x5IGNyZWF0ZWQgdGls
ZSBpcyBjb25zaWRlcmVkIGluIHVzZSBhbmQgbm90IHB1dCBpbnRvIGNhY2hlCi0gKiBvZiB1bnVz
ZWQgdGlsZXMuIEFmdGVyIGl0IGlzIHVzZWQgb25lIHNob3VsZCBjYWxsCi0gKiBld2tfdGlsZV9t
YXRyaXhfdGlsZV9wdXQoKSB0byBnaXZlIGl0IGJhY2sgdG8gbWF0cml4LgotICoKLSAqIEBwYXJh
bSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gY3JlYXRlIHRpbGUgb24uCi0gKiBAcGFyYW0gY29sIHRo
ZSBjb2x1bW4gbnVtYmVyLgotICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KLSAqIEBwYXJh
bSB6b29tIHRoZSBsZXZlbCB0byBjcmVhdGUgdGlsZSwgdXNlZCB0byBkZXRlcm1pbmUgdGlsZSBz
aXplLgotICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3KEV3a19UaWxlX01h
dHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJv
dywgZmxvYXQgem9vbSkKLXsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFd2tfVGlsZSAq
dDsKLQotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgTlVMTCk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTCh6b29tID4gMC4wLCBOVUxMKTsKLQotICAg
IHR3ID0gdG0tPnRpbGUudzsKLSAgICB0aCA9IHRtLT50aWxlLmg7Ci0KLSAgICB0ID0gZXdrX3Rp
bGVfbmV3KGV2YXMsIHR3LCB0aCwgem9vbSwgdG0tPmNzcGFjZSk7Ci0gICAgaWYgKCF0KSB7Ci0g
ICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBjc3BhY2U9JWQi
LCB0dywgdGgsIChkb3VibGUpem9vbSwgdG0tPmNzcGFjZSk7Ci0gICAgICAgIHJldHVybiBOVUxM
OwotICAgIH0KLQotICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfc2V0KHRtLT5t
YXRyaXgsIHJvdywgY29sLCB0KSkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBzZXQgbWF0cml4
IGNlbGwsIHJvdy9jb2wgb3V0c2lkZSBtYXRyaXggZGltZW5zaW9ucyEiKTsKLSAgICAgICAgZXdr
X3RpbGVfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdC0+Y29s
ID0gY29sOwotICAgIHQtPnJvdyA9IHJvdzsKLSAgICB0LT54ID0gY29sICogdHc7Ci0gICAgdC0+
eSA9IHJvdyAqIHRoOwotCi0gICAgY2Fpcm9fdHJhbnNsYXRlKHQtPmNhaXJvLCAtdC0+eCwgLXQt
PnkpOwotCi0gICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgdG0tPnVw
ZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKLQotI2lmZGVmIERFQlVH
X01FTV9MRUFLUwotICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7Ci0g
ICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCsrOwotI2VuZGlmCi0KLSAgICByZXR1cm4gdDsK
LX0KLQotLyoqCi0gKiBHaXZlcyBiYWNrIHRoZSB0aWxlIHRvIHRoZSB0aWxlIG1hdHJpeC4KLSAq
Ci0gKiBUaGlzIHdpbGwgcmVwb3J0IHRoZSB0aWxlIGlzIG5vIGxvbmdlciBpbiB1c2UgYnkgdGhl
IG9uZSB0aGF0IGdvdAotICogaXQgd2l0aCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQo
KS4KLSAqCi0gKiBBbnkgcHJldmlvdXMgcmVmZXJlbmNlIHRvIHRpbGUgc2hvdWxkIGJlIHJlbGVh
c2VkCi0gKiAoZXdrX3RpbGVfaGlkZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBz
byBpdCB3aWxsCi0gKiBiZSBrbm93biBpZiBpdCBpcyBub3QgdmlzaWJpbGUgYW55bW9yZSBhbmQg
dGh1cyBjYW4gYmUgcHV0IGludG8gdGhlCi0gKiB1bnVzZWQgY2FjaGUuCi0gKgotICogQHBhcmFt
IHRtIHRoZSB0aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KLSAqIEBwYXJhbSB0IHRoZSB0
aWxlIGluc3RhbmNlIHRvIHJldHVybiwgbXVzdCBAYiBub3QgYmUgQGMgTlVMTC4KLSAqIEBwYXJh
bSBsYXN0X3VzZWQgdGltZSBpbiB3aGljaCB0aWxlIHdhcyBsYXN0IHVzZWQuCi0gKgotICogQHJl
dHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3Mgb3IgI0VJTkFfRkFMU0Ugb24gZmFpbHVyZS4KLSAq
LwotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRyaXggKnRt
LCBFd2tfVGlsZSAqdCwgZG91YmxlIGxhc3RfdXNlZCkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh0LCBFSU5BX0ZBTFNFKTsKLQotICAgIGlmICh0LT52aXNpYmxlKQotICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOwotCi0gICAgdC0+c3RhdHMubGFzdF91c2VkID0gbGFzdF91c2Vk
OwotICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0tPnR1YywgdCwg
X2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRtKTsKLX0KLQotRWluYV9Cb29sIGV3a190aWxl
X21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNv
bCwgdW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpCi17Ci0g
ICAgRXdrX1RpbGUgKnQ7Ci0gICAgRWluYV9SZWN0YW5nbGUgbmV3X3VwZGF0ZTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOwotCi0gICAgbWVtY3B5
KCZuZXdfdXBkYXRlLCB1cGRhdGUsIHNpemVvZihuZXdfdXBkYXRlKSk7Ci0gICAgLy8gY2hlY2sg
dXBkYXRlIGlzIHZhbGlkLCBvdGhlcndpc2UgcmV0dXJuIEVJTkFfRkFMU0UKLSAgICBpZiAodXBk
YXRlLT54IDwgMCB8fCB1cGRhdGUtPnkgPCAwIHx8IHVwZGF0ZS0+dyA8PSAwIHx8IHVwZGF0ZS0+
aCA8PSAwKSB7Ci0gICAgICAgIEVSUigiaW52YWxpZCB1cGRhdGUgcmVnaW9uLiIpOwotICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRl
LT53IC0gMSA+PSB0bS0+dGlsZS53KQotICAgICAgICBuZXdfdXBkYXRlLncgPSB0bS0+dGlsZS53
IC0gdXBkYXRlLT54OwotICAgIGlmICh1cGRhdGUtPnkgKyB1cGRhdGUtPmggLSAxID49IHRtLT50
aWxlLmgpCi0gICAgICAgIG5ld191cGRhdGUuaCA9IHRtLT50aWxlLmggLSB1cGRhdGUtPnk7Ci0K
LSAgICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywg
Y29sKTsKLQotICAgIGlmICghdCkKLSAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKLQotICAgIGlm
ICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRh
dGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7Ci0gICAgZXdrX3RpbGVfdXBk
YXRlX2FyZWEodCwgJm5ld191cGRhdGUpOwotCi0gICAgcmV0dXJuIEVJTkFfVFJVRTsKLX0KLQot
RWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlX01hdHJp
eCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKLXsKLSAgICBFd2tf
VGlsZSAqdDsKLSAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpjZWxsOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7Ci0KLSAgICBpZiAoIWVpbmFf
bWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCwgJmNlbGwpKQot
ICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLQotICAgIGlmICghY2VsbCkKLSAgICAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKLQotICAgIHQgPSBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0
KGNlbGwpOwotICAgIGlmICghdCkgewotICAgICAgICBDUklUSUNBTCgibWF0cml4IGNlbGwgd2l0
aCBubyB0aWxlISIpOwotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAgIH0KLQotICAgIGlm
ICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRh
dGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7Ci0gICAgZXdrX3RpbGVfdXBk
YXRlX2Z1bGwodCk7Ci0KLSAgICByZXR1cm4gRUlOQV9UUlVFOwotfQotCi12b2lkIGV3a190aWxl
X21hdHJpeF90aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUg
KnQpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotICAgIGlmICghdC0+
dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHJldHVybjsKLSAgICBl
d2tfdGlsZV91cGRhdGVzX2NsZWFyKHQpOwotICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3Jl
bW92ZSh0bS0+dXBkYXRlcywgdCk7Ci19Ci0KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21h
dHJpeF9zbGljZXJfc2V0dXAoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5n
bGUgKmFyZWEsIGZsb2F0IHpvb20sIEVpbmFfVGlsZV9HcmlkX1NsaWNlciAqc2xpY2VyKQotewot
ICAgIHVuc2lnbmVkIGxvbmcgcm93cywgY29sczsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgs
IHR3LCB0aDsKLQotICAgIGlmIChhcmVhLT53IDw9IDAgfHwgYXJlYS0+aCA8PSAwKSB7Ci0gICAg
ICAgIFdSTigiaW52YWxpZCBhcmVhIHJlZ2lvbjogJWQsJWQrJWR4JWQuIiwKLSAgICAgICAgICAg
IGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwotICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKLSAgICB9Ci0KLSAgICB4ID0gYXJlYS0+eDsKLSAgICB5ID0gYXJlYS0+eTsKLSAg
ICB3ID0gYXJlYS0+dzsKLSAgICBoID0gYXJlYS0+aDsKLQotICAgIHR3ID0gdG0tPnRpbGUudzsK
LSAgICB0aCA9IHRtLT50aWxlLmg7Ci0KLSAgICAvLyBjcm9wcGluZyBhcmVhIHJlZ2lvbiB0byBm
aXQgbWF0cml4Ci0gICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9nZXQodG0tPm1hdHJpeCwgJnJv
d3MsICZjb2xzKTsKLSAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgdyArPSB4OwotICAgICAgICB4
ID0gMDsKLSAgICB9Ci0gICAgaWYgKHkgPCAwKSB7Ci0gICAgICAgIGggKz0geTsKLSAgICAgICAg
eSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKHkgKyBoIC0gMSA+IChsb25nKShyb3dzICogdGgpKQot
ICAgICAgICBoID0gcm93cyAqIHRoIC0geTsKLSAgICBpZiAoeCArIHcgLSAxID4gKGxvbmcpKGNv
bHMgKiB0dykpCi0gICAgICAgIHcgPSBjb2xzICogdHcgLSB4OwotCi0gICAgcmV0dXJuIGVpbmFf
dGlsZV9ncmlkX3NsaWNlcl9zZXR1cChzbGljZXIsIHgsIHksIHcsIGgsIHR3LCB0aCk7Ci19Ci0K
LQotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwg
Y29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSwgZmxvYXQgem9vbSkKLXsKLSAgICBjb25zdCBF
aW5hX1RpbGVfR3JpZF9JbmZvICppbmZvOwotICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGlj
ZXI7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsK
LQotICAgIGlmICh1cGRhdGUtPncgPCAxIHx8IHVwZGF0ZS0+aCA8IDEpIHsKLSAgICAgICAgREJH
KCJXaHkgd2UgZ2V0IHVwZGF0ZXMgd2l0aCBlbXB0eSBhcmVhcz8gJWQsJWQrJWR4JWQgYXQgem9v
bSAlZiIsCi0gICAgICAgICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRh
dGUtPmgsIHpvb20pOwotICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwotICAgIH0KLQotICAgIGlm
ICghX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAodG0sIHVwZGF0ZSwgem9vbSwgJnNsaWNl
cikpIHsKLSAgICAgICAgRVJSKCJDb3VsZCBub3Qgc2V0dXAgc2xpY2VyIGZvciB1cGRhdGUgJWQs
JWQrJWR4JWQgYXQgem9vbSAlZiIsCi0gICAgICAgICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwg
dXBkYXRlLT53LCB1cGRhdGUtPmgsIHpvb20pOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsK
LSAgICB9Ci0KLSAgICB3aGlsZSAoZWluYV90aWxlX2dyaWRfc2xpY2VyX25leHQoJnNsaWNlciwg
JmluZm8pKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Ci0gICAgICAgIEV3a19U
aWxlICp0OwotICAgICAgICBjb2wgPSBpbmZvLT5jb2w7Ci0gICAgICAgIHJvdyA9IGluZm8tPnJv
dzsKLQotICAgICAgICB0ID0gZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRy
aXgsIHJvdywgY29sKTsKLSAgICAgICAgaWYgKCF0KQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAg
ICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7Ci0g
ICAgICAgIGlmIChpbmZvLT5mdWxsKQotICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwo
dCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZp
bmZvLT5yZWN0KTsKLSAgICB9Ci0KLQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLXZvaWQg
ZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXggKnRtKQotewot
ICAgIEVpbmFfTGlzdCAqbCwgKmxfbmV4dDsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0KLSAgICAvLyBwcm9jZXNzIHVwZGF0ZXMsIHVuZmxh
ZyB0aWxlcwotICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodG0tPnVwZGF0ZXMsIGwsIGxfbmV4
dCwgdCkgewotICAgICAgICBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3ModCwgdG0tPnJlbmRlci5j
YiwgdG0tPnJlbmRlci5kYXRhKTsKLSAgICAgICAgaWYgKHQtPnZpc2libGUpIHsKLSAgICAgICAg
ICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIodCk7Ci0gICAgICAgICAgICB0bS0+dXBkYXRlcyA9
IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0bS0+dXBkYXRlcywgbCk7Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLXZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0cml4
ICp0bSkKLXsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tih0bSk7Ci0KLSAgICBFSU5BX0xJU1RfRlJFRSh0bS0+dXBkYXRlcywgdCkKLSAgICAgICAgZXdr
X3RpbGVfdXBkYXRlc19jbGVhcih0KTsKLSAgICB0bS0+dXBkYXRlcyA9IE5VTEw7Ci19Ci0KLS8v
IHJlbW92ZSBtZSBsYXRlciEKLXZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGls
ZV9NYXRyaXggKnRtKQotewotICAgIEVpbmFfSXRlcmF0b3IgKml0ID0gZWluYV9tYXRyaXhzcGFy
c2VfaXRlcmF0b3JfY29tcGxldGVfbmV3KHRtLT5tYXRyaXgpOwotICAgIEVpbmFfTWF0cml4c3Bh
cnNlX0NlbGwgKmNlbGw7Ci0gICAgRWluYV9Cb29sIGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOwot
Ci0jaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgcHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6IHRp
bGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVz
WyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdXG4iLAotICAgICAgICAgICB0bS0+c3Rh
dHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCi0gICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCi0gICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKLSAg
ICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVl
ZCk7Ci0jZWxzZQotICAgIHByaW50ZigiRXdrX1RpbGUgTWF0cml4OlxuIik7Ci0jZW5kaWYKLQot
ICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwgY2VsbCkgewotICAgICAgICB1bnNpZ25lZCBs
b25nIHJvdywgY29sOwotICAgICAgICBFd2tfVGlsZSAqdDsKLSAgICAgICAgZWluYV9tYXRyaXhz
cGFyc2VfY2VsbF9wb3NpdGlvbl9nZXQoY2VsbCwgJnJvdywgJmNvbCk7Ci0gICAgICAgIHQgPSBl
aW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwpOwotCi0gICAgICAgIGlmICghdCkg
ewotICAgICAgICAgICAgaWYgKCFsYXN0X2VtcHR5KSB7Ci0gICAgICAgICAgICAgICAgbGFzdF9l
bXB0eSA9IEVJTkFfVFJVRTsKLSAgICAgICAgICAgICAgICBwcmludGYoIkVtcHR5OiIpOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29sLCByb3cpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGxhc3RfZW1wdHkpIHsKLSAgICAgICAg
ICAgICAgICBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKLSAgICAgICAgICAgICAgICBwcmludGYo
IlxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIiUzbHUsJTNsdSAlMTBw
OiIsIGNvbCwgcm93LCB0KTsKLSAgICAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHgl
ZCBAICUwLjNmXSVjIiwgdC0+Y29sLCB0LT5yb3csIHQtPncsIHQtPmgsIHQtPnpvb20sIHQtPnZp
c2libGUgPyAnKic6ICcgJyk7Ci0gICAgICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgICAgIH0K
LSAgICB9Ci0gICAgaWYgKGxhc3RfZW1wdHkpCi0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICBl
aW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOwotCi0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0
bS0+dHVjKTsKLX0KLQotLyoqCi0gKiBGcmVlemUgbWF0cml4IHRvIG5vdCBkbyBtYWludGVuYW5j
ZSB0YXNrcy4KLSAqCi0gKiBNYWludGVuYW5jZSB0YXNrcyBvcHRpbWl6ZSB1c2FnZSwgYnV0IG1h
eWJlIHdlIGtub3cgd2Ugc2hvdWxkIGhvbGQKLSAqIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxh
c3Qgb3BlcmF0aW9uLCBpbiB0aGlzIGNhc2Ugd2UgZnJlZXplCi0gKiB3aGlsZSBvcGVyYXRpbmcg
YW5kIHRoZW4gdGhhdyB3aGVuIHdlJ3JlIGRvbmUuCi0gKgotICogQHNlZSBld2tfdGlsZV9tYXRy
aXhfdGhhdygpCi0gKi8KLXZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRy
aXggKnRtKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAo
IXRtLT5mcm96ZW4pCi0gICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1
Yyk7Ci0gICAgdG0tPmZyb3plbisrOwotfQotCi0vKioKLSAqIFVuZnJlZXplcyBtYWludGVuYW5j
ZSB0YXNrcy4KLSAqCi0gKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6
ZSwgdGhlbiBtYWludGVuYW5jZSB0YXNrcwotICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCi0gKi8K
LXZvaWQgZXdrX3RpbGVfbWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4ICp0bSkKLXsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgaWYgKCF0bS0+ZnJvemVuKSB7Ci0g
ICAgICAgIEVSUigidGhhd2luZyBtb3JlIHRoYW4gZnJlZXppbmchIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICB0bS0+ZnJvemVuLS07Ci0gICAgaWYgKCF0bS0+ZnJvemVuKQotICAg
ICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZjRjNDFjNzE5MTM0
N2YwMWE2MTliM2QxY2JlZTliY2I1NGE2MmNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCkBAIC0wLDAgKzEsNjM5IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfdGlsZWRfbWF0cml4LmgiCisKKyNpbmNsdWRl
ICJld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIgorI2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRl
LmgiCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8aW50
dHlwZXMuaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIHJl
bW92ZSBtZSBsYXRlcgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgor
CitzdHJ1Y3QgX0V3a19UaWxlX01hdHJpeCB7CisgICAgRWluYV9NYXRyaXhzcGFyc2UgKm1hdHJp
eDsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBFdmFzX0NvbG9yc3BhY2Ug
Y3NwYWNlOworICAgIHN0cnVjdCB7CisgICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdr
X1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpOworICAgICAgICB2b2lkICpk
YXRhOworICAgIH0gcmVuZGVyOworICAgIHVuc2lnbmVkIGludCBmcm96ZW47CisgICAgRWluYV9M
aXN0ICp1cGRhdGVzOworICAgIHN0cnVjdCB7CisgICAgICAgIEV2YXNfQ29vcmQgdywgaDsKKyAg
ICB9IHRpbGU7CisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgc3RydWN0IHsKKyAgICAgICAg
c3RydWN0IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGFsbG9jYXRlZCwgZnJlZWQ7CisgICAgICAg
IH0gdGlsZXMsIGJ5dGVzOworICAgIH0gc3RhdHM7CisjZW5kaWYKK307CisKKyNpZmRlZiBERUJV
R19NRU1fTEVBS1MKK3N0YXRpYyB1aW50NjRfdCB0aWxlc19sZWFrZWQgPSAwOworc3RhdGljIHVp
bnQ2NF90IGJ5dGVzX2xlYWtlZCA9IDA7CisjZW5kaWYKKworLyogY2FsbGVkIHdoZW4gbWF0cml4
c3BhcnNlIGlzIHJlc2l6ZWQgb3IgZnJlZWQgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRy
aXhfY2VsbF9mcmVlKHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqY2VsbF9kYXRhKQoreworICAgIEV3
a19UaWxlX01hdHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPih1c2VyX2Rh
dGEpOworICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihjZWxsX2RhdGEp
OworCisgICAgaWYgKCF0KQorICAgICAgICByZXR1cm47CisKKyAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfZnJlZXplKHRtLT50dWMpOworCisgICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+c3RhdHMu
ZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+
dXBkYXRlcywgdCk7CisKKyAgICBpZiAodC0+dmlzaWJsZSkKKyAgICAgICAgRVJSKCJmcmVlaW5n
IGNlbGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0KTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkp
CisgICAgICAgICAgICBFUlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4u
LiIsIHQsIHRtLT50dWMpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIERCRygidGlsZSBj
ZWxsIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0KTsKKyNpZmRlZiBERUJV
R19NRU1fTEVBS1MKKyAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRl
czsKKyAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOworI2VuZGlmCisgICAgICAg
ICAgICBld2tfdGlsZV9mcmVlKHQpOworICAgICAgICB9CisgICAgfQorCisgICAgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7Cit9CisKKy8qIGNhbGxlZCB3aGVuIGNhY2hlIG9m
IHVudXNlZCB0aWxlIGlzIGZsdXNoZWQgKi8KK3N0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhf
dGlsZV9mcmVlKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KQoreworICAgIEV3a19UaWxlX01hdHJp
eCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPihkYXRhKTsKKyAgICBFaW5hX01h
dHJpeHNwYXJzZV9DZWxsICpjZWxsOworIAorICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2Vs
bF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHQtPnJvdywgdC0+Y29sLCAmY2VsbCkpIHsKKyAgICAgICAg
RVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0aGUgbWF0cml4PyBMZWFraW5n
Li4uIiwgdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWNlbGwpIHsKKyAg
ICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0aGUgbWF0cml4PyBM
ZWFraW5nLi4uIiwgdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodC0+dXBk
YXRlcyB8fCB0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5h
X2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0KTsKKworICAgIC8qIHNldCB0byBudWxsIHRvIGF2
b2lkIGRvdWJsZSBmcmVlICovCisgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxh
Y2UoY2VsbCwgMCwgMCk7CisgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9jbGVhcihjZWxsKTsK
KworICAgIGlmIChFSU5BX1VOTElLRUxZKCEhdC0+dmlzaWJsZSkpIHsKKyAgICAgICAgRVJSKCJj
YWNoZSBvZiB1bnVzZWQgdGlsZXMgcmVxdWVzdGluZyBkZWxldGlvbiBvZiB1c2VkIHRpbGUgJXA/
ICIKKyAgICAgICAgICAgICJMZWFraW5nLi4uIiwgdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0g
dC0+Ynl0ZXM7CisgICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVkKys7CisjZW5kaWYKKworICAgIGV3
a190aWxlX2ZyZWUodCk7Cit9CisKKy8qKgorICogQ3JlYXRlcyBhIG5ldyBtYXRyaXggb2YgdGls
ZXMuCisgKgorICogVGhlIHRpbGUgbWF0cml4IGlzIHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIHRp
bGVzIGFyb3VuZCBhbmQKKyAqIHByb3ZpZGluZyBmYXN0IGFjY2VzcyB0byB0aGVtLiBPbmUgY2Fu
IHVzZSBpdCB0byByZXRyaWV2ZSBuZXcgb3IKKyAqIGV4aXN0aW5nIHRpbGVzIGFuZCBnaXZlIHRo
ZW0gYmFjaywgYWxsb3dpbmcgdGhlbSB0byBiZQorICogZnJlZWQvcmVwbGFjZWQgYnkgdGhlIGNh
Y2hlLgorICoKKyAqIEBwYXJhbSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzIG9yIEBjIDAgdG8g
Y3JlYXRlIG9uZQorICogICAgICAgIGF1dG9tYXRpY2FsbHkuCisgKiBAcGFyYW0gY29scyBudW1i
ZXIgb2YgY29sdW1ucyBpbiB0aGUgbWF0cml4LgorICogQHBhcmFtIHJvd3MgbnVtYmVyIG9mIHJv
d3MgaW4gdGhlIG1hdHJpeC4KKyAqIEBwYXJhbSBjc3BhY2UgdGhlIGNvbG9yIHNwYWNlIHVzZWQg
dG8gY3JlYXRlIHRpbGVzIGluIHRoaXMgbWF0cml4LgorICogQHBhcmFtIHJlbmRlcl9jYiBmdW5j
dGlvbiB1c2VkIHRvIHJlbmRlciBnaXZlbiB0aWxlIHVwZGF0ZS4KKyAqIEBwYXJhbSByZW5kZXJf
ZGF0YSBjb250ZXh0IHRvIGdpdmUgYmFjayB0byBAYSByZW5kZXJfY2IuCisgKgorICogQHJldHVy
biBuZXdseSBhbGxvY2F0ZWQgaW5zdGFuY2Ugb24gc3VjY2VzcywgQGMgMCBvbiBmYWlsdXJlLgor
ICovCitFd2tfVGlsZV9NYXRyaXggKmV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMsIHVuc2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzLCBFdmFz
X0NvbG9yc3BhY2UgY3NwYWNlLCB2b2lkICgqcmVuZGVyX2NiKSh2b2lkICpkYXRhLCBFd2tfVGls
ZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKnJlbmRlcl9k
YXRhKQoreworICAgIEV3a19UaWxlX01hdHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9N
YXRyaXgqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX01hdHJpeCkpKTsKKyAgICBpZiAoIXRt
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHRtLT5tYXRyaXggPSBlaW5hX21hdHJpeHNwYXJz
ZV9uZXcocm93cywgY29scywgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUsIHRtKTsKKyAgICBp
ZiAoIXRtLT5tYXRyaXgpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHNwYXJzZSBt
YXRyaXguIik7CisgICAgICAgIGZyZWUodG0pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICBpZiAodHVjKQorICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Jl
Zih0dWMpOworICAgIGVsc2UgeworICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX25ldyg0MDk2MDAwMCk7CisgICAgICAgIGlmICghdG0tPnR1YykgeworICAgICAgICAgICAg
RVJSKCJubyBjYWNoZSBvZiB1bnVzZWQgdGlsZSEiKTsKKyAgICAgICAgICAgIGVpbmFfbWF0cml4
c3BhcnNlX2ZyZWUodG0tPm1hdHJpeCk7CisgICAgICAgICAgICBmcmVlKHRtKTsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgdG0tPmNzcGFjZSA9IGNzcGFj
ZTsKKyAgICB0bS0+cmVuZGVyLmNiID0gcmVuZGVyX2NiOworICAgIHRtLT5yZW5kZXIuZGF0YSA9
ICh2b2lkICopcmVuZGVyX2RhdGE7CisgICAgdG0tPnRpbGUudyA9IERFRkFVTFRfVElMRV9XOwor
ICAgIHRtLT50aWxlLmggPSBERUZBVUxUX1RJTEVfSDsKKworICAgIHJldHVybiB0bTsKK30KKwor
LyoqCisgKiBEZXN0cm95cyB0aWxlcyBtYXRyaXgsIHJlbGVhc2luZyBpdHMgcmVzb3VyY2VzLgor
ICoKKyAqIFRoZSBjYWNoZSBpbnN0YW5jZSBpcyB1bnJlZmVyZW5jZWQsIHBvc3NpYmx5IGZyZWVp
bmcgaXQuCisgKi8KK3ZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4ICp0
bSkKK3sKKyNpZmRlZiBERUJVR19NRU1fTEVBS1MKKyAgICB1aW50NjRfdCB0aWxlcywgYnl0ZXM7
CisjZW5kaWYKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOworCisgICAgZWluYV9tYXRyaXhzcGFy
c2VfZnJlZSh0bS0+bWF0cml4KTsKKworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRt
LT50dWMpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZih0bS0+dHVjKTsKKworI2lm
ZGVmIERFQlVHX01FTV9MRUFLUworICAgIHRpbGVzID0gdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRl
ZCAtIHRtLT5zdGF0cy50aWxlcy5mcmVlZDsKKyAgICBieXRlcyA9IHRtLT5zdGF0cy5ieXRlcy5h
bGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQ7CisKKyAgICB0aWxlc19sZWFrZWQgKz0g
dGlsZXM7CisgICAgYnl0ZXNfbGVha2VkICs9IGJ5dGVzOworCisgICAgaWYgKHRpbGVzIHx8IGJ5
dGVzKQorICAgICAgICBFUlIoInRpbGVkIG1hdHJpeCBsZWFrZWQ6IHRpbGVzWyslIlBSSXU2NCIs
LSUiUFJJdTY0IjolIlBSSXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUi
UFJJdTY0IjolIlBSSXU2NCJdIiwKKyAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0
ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwgdGlsZXMsCisgICAgICAgICAgICB0bS0+c3RhdHMu
Ynl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsIGJ5dGVzKTsKKyAgICBlbHNl
IGlmICh0aWxlc19sZWFrZWQgfHwgYnl0ZXNfbGVha2VkKQorICAgICAgICBXUk4oInRpbGVkIG1h
dHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0gIgorICAgICAg
ICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSwgYnV0IHNvbWUgb3RoZXIgbGVha2Vk
ICIKKyAgICAgICAgICAgICIlIlBSSXU2NCIgdGlsZXMgKCUiUFJJdTY0IiBieXRlcykiLAorICAg
ICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVk
LAorICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVz
LmZyZWVkLAorICAgICAgICAgICAgdGlsZXNfbGVha2VkLCBieXRlc19sZWFrZWQpOworICAgIGVs
c2UKKyAgICAgICAgSU5GKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSJQUkl1
NjQiLC0lIlBSSXU2NCJdICIKKyAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0
Il0iLAorICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRp
bGVzLmZyZWVkLAorICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0
YXRzLmJ5dGVzLmZyZWVkKTsKKyNlbmRpZgorCisgICAgZnJlZSh0bSk7Cit9CisKKy8qKgorICog
UmVzaXplIG1hdHJpeCB0byBnaXZlbiBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucy4KKyAqLwor
dm9pZCBld2tfdGlsZV9tYXRyaXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVk
IGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzKQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHRtKTsKKyAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX3NldCh0bS0+bWF0cml4
LCByb3dzLCBjb2xzKTsKK30KKworLyoqCisgKiBHZXQgdGhlIGNhY2hlIG9mIHVudXNlZCB0aWxl
cyBpbiB1c2UgYnkgZ2l2ZW4gbWF0cml4LgorICoKKyAqIE5vIHJlZmVyZW5jZSBpcyB0YWtlbiB0
byB0aGUgY2FjaGUuCisgKi8KK0V3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfbWF0cml4
X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIDApOworICAgIHJldHVybiB0bS0+dHVjOwor
fQorCisvKioKKyAqIEdldCB0aGUgZXhhY3QgdGlsZSBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFu
ZCB6b29tLgorICoKKyAqIElmIHRoZSB0aWxlIHdhcyB1bnVzZWQgdGhlbiBpdCdzIHJlbW92ZWQg
ZnJvbSB0aGUgY2FjaGUuCisgKgorICogQWZ0ZXIgdXNhZ2UsIHBsZWFzZSBnaXZlIGl0IGJhY2sg
dXNpbmcKKyAqIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCgpLiBJZiB5b3UganVzdCB3YW50IHRv
IGNoZWNrIGlmIGl0IGV4aXN0cywKKyAqIHRoZW4gdXNlIGV3a190aWxlX21hdHJpeF90aWxlX2V4
YWN0X2V4aXN0cygpLgorICoKKyAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gZ2V0IHRp
bGUgZnJvbS4KKyAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0gcm93
IHRoZSByb3cgbnVtYmVyLgorICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20gdG8gdXNlLgor
ICoKKyAqIEByZXR1cm4gVGhlIHRpbGUgaW5zdGFuY2Ugb3IgQGMgMCBpZiBub25lIGlzIGZvdW5k
LiBJZiB0aGUgdGlsZQorICogICAgICAgICB3YXMgaW4gdGhlIHVudXNlZCBjYWNoZSBpdCB3aWxs
IGJlIEBiIHJlbW92ZWQgKHRodXMKKyAqICAgICAgICAgY29uc2lkZXJlZCB1c2VkKSBhbmQgb25l
IHNob3VsZCBnaXZlIGl0IGJhY2sgd2l0aAorICogICAgICAgICBld2tfdGlsZV9tYXRyaXhfdGls
ZV9wdXQoKSBhZnRlcndhcmRzLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhh
Y3RfZ2V0KCkKKyAqLworRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChF
d2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cs
IGZsb2F0IHpvb20pCit7CisgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+
KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCkpOwor
ICAgIGlmICghdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAodC0+em9vbSA9PSB6b29t
KQorICAgICAgICBnb3RvIGVuZDsKKworICBlbmQ6CisgICAgaWYgKCF0LT52aXNpYmxlKSB7Cisg
ICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQor
ICAgICAgICAgICAgV1JOKCJFd2tfVGlsZSB3YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1
ZyEiKTsKKyAgICB9CisKKyAgICByZXR1cm4gdDsKK30KKworLyoqCisgKiBDaGVja3MgaWYgdGls
ZSBvZiBnaXZlbiB6b29tIGV4aXN0cyBpbiBtYXRyaXguCisgKgorICogQHBhcmFtIHRtIHRoZSB0
aWxlIG1hdHJpeCB0byBjaGVjayB0aWxlIGV4aXN0ZW5jZS4KKyAqIEBwYXJhbSBjb2wgdGhlIGNv
bHVtbiBudW1iZXIuCisgKiBAcGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgorICogQHBhcmFtIHpv
b20gdGhlIGV4YWN0IHpvb20gdG8gcXVlcnkuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUg
aWYgZm91bmQsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdrX3RpbGVf
bWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkKKyAqLworRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90
aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwg
dW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCit7CisgICAgaWYgKCFlaW5hX21hdHJpeHNw
YXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpKQorICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKKy8qKgorICogQ3JlYXRl
IGEgbmV3IHRpbGUgYXQgZ2l2ZW4gcG9zaXRpb24gYW5kIHpvb20gbGV2ZWwgaW4gdGhlIG1hdHJp
eC4KKyAqCisgKiBUaGUgbmV3bHkgY3JlYXRlZCB0aWxlIGlzIGNvbnNpZGVyZWQgaW4gdXNlIGFu
ZCBub3QgcHV0IGludG8gY2FjaGUKKyAqIG9mIHVudXNlZCB0aWxlcy4gQWZ0ZXIgaXQgaXMgdXNl
ZCBvbmUgc2hvdWxkIGNhbGwKKyAqIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCgpIHRvIGdpdmUg
aXQgYmFjayB0byBtYXRyaXguCisgKgorICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBj
cmVhdGUgdGlsZSBvbi4KKyAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCisgKiBAcGFy
YW0gcm93IHRoZSByb3cgbnVtYmVyLgorICogQHBhcmFtIHpvb20gdGhlIGxldmVsIHRvIGNyZWF0
ZSB0aWxlLCB1c2VkIHRvIGRldGVybWluZSB0aWxlIHNpemUuCisgKi8KK0V3a19UaWxlICpld2tf
dGlsZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXZhcyAqZXZhcywgdW5z
aWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQoreworICAgIEV2
YXNfQ29vcmQgdHcsIHRoOworICAgIEV3a19UaWxlICp0OworCisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5f
VkFMKHpvb20gPiAwLjAsIDApOworCisgICAgdHcgPSB0bS0+dGlsZS53OworICAgIHRoID0gdG0t
PnRpbGUuaDsKKworICAgIHQgPSBld2tfdGlsZV9uZXcoZXZhcywgdHcsIHRoLCB6b29tLCB0bS0+
Y3NwYWNlKTsKKyAgICBpZiAoIXQpIHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHRp
bGUgJWR4JWQgYXQgJWYsIGNzcGFjZT0lZCIsIHR3LCB0aCwgKGRvdWJsZSl6b29tLCB0bS0+Y3Nw
YWNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYgKCFlaW5hX21hdHJpeHNw
YXJzZV9kYXRhX2lkeF9zZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsIHQpKSB7CisgICAgICAgIEVS
UigiY291bGQgbm90IHNldCBtYXRyaXggY2VsbCwgcm93L2NvbCBvdXRzaWRlIG1hdHJpeCBkaW1l
bnNpb25zISIpOworICAgICAgICBld2tfdGlsZV9mcmVlKHQpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICB0LT5jb2wgPSBjb2w7CisgICAgdC0+cm93ID0gcm93OworICAgIHQtPngg
PSBjb2wgKiB0dzsKKyAgICB0LT55ID0gcm93ICogdGg7CisKKyAgICBjYWlyb190cmFuc2xhdGUo
dC0+Y2Fpcm8sIC10LT54LCAtdC0+eSk7CisKKyAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJ
TkFfVFJVRTsKKyAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMs
IHQpOworCisjaWZkZWYgREVCVUdfTUVNX0xFQUtTCisgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCArPSB0LT5ieXRlczsKKyAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkKys7CisjZW5k
aWYKKworICAgIHJldHVybiB0OworfQorCisvKioKKyAqIEdpdmVzIGJhY2sgdGhlIHRpbGUgdG8g
dGhlIHRpbGUgbWF0cml4LgorICoKKyAqIFRoaXMgd2lsbCByZXBvcnQgdGhlIHRpbGUgaXMgbm8g
bG9uZ2VyIGluIHVzZSBieSB0aGUgb25lIHRoYXQgZ290CisgKiBpdCB3aXRoIGV3a190aWxlX21h
dHJpeF90aWxlX2V4YWN0X2dldCgpLgorICoKKyAqIEFueSBwcmV2aW91cyByZWZlcmVuY2UgdG8g
dGlsZSBzaG91bGQgYmUgcmVsZWFzZWQKKyAqIChld2tfdGlsZV9oaWRlKCkpIGJlZm9yZSBjYWxs
aW5nIHRoaXMgZnVuY3Rpb24sIHNvIGl0IHdpbGwKKyAqIGJlIGtub3duIGlmIGl0IGlzIG5vdCB2
aXNpYmlsZSBhbnltb3JlIGFuZCB0aHVzIGNhbiBiZSBwdXQgaW50byB0aGUKKyAqIHVudXNlZCBj
YWNoZS4KKyAqCisgKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIHJldHVybiB0aWxlIHRv
LgorICogQHBhcmFtIHQgdGhlIHRpbGUgaW5zdGFuY2UgdG8gcmV0dXJuLCBtdXN0IEBiIG5vdCBi
ZSBAYyAwLgorICogQHBhcmFtIGxhc3RfdXNlZCB0aW1lIGluIHdoaWNoIHRpbGUgd2FzIGxhc3Qg
dXNlZC4KKyAqCisgKiBAcmV0dXJuICNFSU5BX1RSVUUgb24gc3VjY2VzcyBvciAjRUlOQV9GQUxT
RSBvbiBmYWlsdXJlLgorICovCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3
a19UaWxlX01hdHJpeCAqdG0sIEV3a19UaWxlICp0LCBkb3VibGUgbGFzdF91c2VkKQoreworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHQsIEVJTkFfRkFMU0UpOworCisgICAgaWYgKHQt
PnZpc2libGUpCisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICB0LT5zdGF0cy5sYXN0
X3VzZWQgPSBsYXN0X3VzZWQ7CisgICAgcmV0dXJuIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxl
X3B1dCh0bS0+dHVjLCB0LCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSwgdG0pOworfQorCitF
aW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0s
IHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgY29uc3QgRWluYV9SZWN0YW5n
bGUgKnVwZGF0ZSkKK3sKKyAgICBFaW5hX1JlY3RhbmdsZSBuZXdfdXBkYXRlOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7CisKKyAgICBtZW1jcHko
Jm5ld191cGRhdGUsIHVwZGF0ZSwgc2l6ZW9mKG5ld191cGRhdGUpKTsKKyAgICAvLyBjaGVjayB1
cGRhdGUgaXMgdmFsaWQsIG90aGVyd2lzZSByZXR1cm4gRUlOQV9GQUxTRQorICAgIGlmICh1cGRh
dGUtPnggPCAwIHx8IHVwZGF0ZS0+eSA8IDAgfHwgdXBkYXRlLT53IDw9IDAgfHwgdXBkYXRlLT5o
IDw9IDApIHsKKyAgICAgICAgRVJSKCJpbnZhbGlkIHVwZGF0ZSByZWdpb24uIik7CisgICAgICAg
IHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKworICAgIGlmICh1cGRhdGUtPnggKyB1cGRhdGUt
PncgLSAxID49IHRtLT50aWxlLncpCisgICAgICAgIG5ld191cGRhdGUudyA9IHRtLT50aWxlLncg
LSB1cGRhdGUtPng7CisgICAgaWYgKHVwZGF0ZS0+eSArIHVwZGF0ZS0+aCAtIDEgPj0gdG0tPnRp
bGUuaCkKKyAgICAgICAgbmV3X3VwZGF0ZS5oID0gdG0tPnRpbGUuaCAtIHVwZGF0ZS0+eTsKKwor
ICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJz
ZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpKTsKKyAgICBpZiAoIXQpCisgICAg
ICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRz
LmZ1bGxfdXBkYXRlKQorICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0t
PnVwZGF0ZXMsIHQpOworICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZuZXdfdXBkYXRlKTsK
KworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhf
dGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwg
dW5zaWduZWQgbG9uZyByb3cpCit7CisgICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworCisg
ICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBj
b2wsICZjZWxsKSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisKKyAgICBpZiAoIWNlbGwp
CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisKKyAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19j
YXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7Cisg
ICAgaWYgKCF0KSB7CisgICAgICAgIENSSVRJQ0FMKCJtYXRyaXggY2VsbCB3aXRoIG5vIHRpbGUh
Iik7CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgaWYgKCF0LT51cGRh
dGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5h
X2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKyAgICBld2tfdGlsZV91cGRhdGVfZnVsbCh0
KTsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3Rp
bGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXggKnRtLCBFd2tfVGlsZSAqdCkKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgaWYgKCF0LT51cGRhdGVzICYm
ICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGV3a190aWxlX3Vw
ZGF0ZXNfY2xlYXIodCk7CisgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51
cGRhdGVzLCB0KTsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNl
cl9zZXR1cChFd2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSwg
ZmxvYXQgem9vbSwgRWluYV9UaWxlX0dyaWRfU2xpY2VyICpzbGljZXIpCit7CisgICAgdW5zaWdu
ZWQgbG9uZyByb3dzLCBjb2xzOworICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaCwgdHcsIHRoOwor
CisgICAgaWYgKGFyZWEtPncgPD0gMCB8fCBhcmVhLT5oIDw9IDApIHsKKyAgICAgICAgV1JOKCJp
bnZhbGlkIGFyZWEgcmVnaW9uOiAlZCwlZCslZHglZC4iLAorICAgICAgICAgICAgYXJlYS0+eCwg
YXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwor
ICAgIH0KKworICAgIHggPSBhcmVhLT54OworICAgIHkgPSBhcmVhLT55OworICAgIHcgPSBhcmVh
LT53OworICAgIGggPSBhcmVhLT5oOworCisgICAgdHcgPSB0bS0+dGlsZS53OworICAgIHRoID0g
dG0tPnRpbGUuaDsKKworICAgIC8vIGNyb3BwaW5nIGFyZWEgcmVnaW9uIHRvIGZpdCBtYXRyaXgK
KyAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX2dldCh0bS0+bWF0cml4LCAmcm93cywgJmNvbHMp
OworICAgIGlmICh4IDwgMCkgeworICAgICAgICB3ICs9IHg7CisgICAgICAgIHggPSAwOworICAg
IH0KKyAgICBpZiAoeSA8IDApIHsKKyAgICAgICAgaCArPSB5OworICAgICAgICB5ID0gMDsKKyAg
ICB9CisKKyAgICBpZiAoeSArIGggLSAxID4gKGxvbmcpKHJvd3MgKiB0aCkpCisgICAgICAgIGgg
PSByb3dzICogdGggLSB5OworICAgIGlmICh4ICsgdyAtIDEgPiAobG9uZykoY29scyAqIHR3KSkK
KyAgICAgICAgdyA9IGNvbHMgKiB0dyAtIHg7CisKKyAgICByZXR1cm4gZWluYV90aWxlX2dyaWRf
c2xpY2VyX3NldHVwKHNsaWNlciwgeCwgeSwgdywgaCwgdHcsIHRoKTsKK30KKworCitFaW5hX0Jv
b2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5h
X1JlY3RhbmdsZSAqdXBkYXRlLCBmbG9hdCB6b29tKQoreworICAgIGNvbnN0IEVpbmFfVGlsZV9H
cmlkX0luZm8gKmluZm87CisgICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOworCisgICAgaWYg
KHVwZGF0ZS0+dyA8IDEgfHwgdXBkYXRlLT5oIDwgMSkgeworICAgICAgICBEQkcoIldoeSB3ZSBn
ZXQgdXBkYXRlcyB3aXRoIGVtcHR5IGFyZWFzPyAlZCwlZCslZHglZCBhdCB6b29tICVmIiwKKyAg
ICAgICAgICAgIHVwZGF0ZS0+eCwgdXBkYXRlLT55LCB1cGRhdGUtPncsIHVwZGF0ZS0+aCwgem9v
bSk7CisgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CisgICAgfQorCisgICAgaWYgKCFfZXdrX3Rp
bGVfbWF0cml4X3NsaWNlcl9zZXR1cCh0bSwgdXBkYXRlLCB6b29tLCAmc2xpY2VyKSkgeworICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBzZXR1cCBzbGljZXIgZm9yIHVwZGF0ZSAlZCwlZCslZHglZCBh
dCB6b29tICVmIiwKKyAgICAgICAgICAgIHVwZGF0ZS0+eCwgdXBkYXRlLT55LCB1cGRhdGUtPncs
IHVwZGF0ZS0+aCwgem9vbSk7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0KKwor
ICAgIHdoaWxlIChlaW5hX3RpbGVfZ3JpZF9zbGljZXJfbmV4dCgmc2xpY2VyLCAmaW5mbykpIHsK
KyAgICAgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICAgICAgY29sID0gaW5mby0+Y29s
OworICAgICAgICByb3cgPSBpbmZvLT5yb3c7CisKKyAgICAgICAgRXdrX1RpbGUqIHQgPSBzdGF0
aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0
cml4LCByb3csIGNvbCkpOworICAgICAgICBpZiAoIXQpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAg
ICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsK
KyAgICAgICAgaWYgKGluZm8tPmZ1bGwpCisgICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfZnVs
bCh0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodCwg
JmluZm8tPnJlY3QpOworICAgIH0KKworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKwordm9p
ZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01hdHJpeCAqdG0pCit7
CisgICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0OworICAgIHZvaWQqIGl0ZW07CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOworCisgICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZs
YWcgdGlsZXMKKyAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRtLT51cGRhdGVzLCBsLCBsX25l
eHQsIGl0ZW0pIHsKKyAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGl0ZW0pOworICAgICAgICBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3ModGlsZSwgdG0tPnJl
bmRlci5jYiwgdG0tPnJlbmRlci5kYXRhKTsKKyAgICAgICAgaWYgKHRpbGUtPnZpc2libGUpIHsK
KyAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIodGlsZSk7CisgICAgICAgICAgICB0
bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0bS0+dXBkYXRlcywgbCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdr
X1RpbGVfTWF0cml4ICp0bSkKK3sKKyAgICB2b2lkKiBpdGVtOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHRtKTsKKworICAgIEVJTkFfTElTVF9GUkVFKHRtLT51cGRhdGVzLCBpdGVt
KQorICAgICAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHN0YXRpY19jYXN0PEV3a19UaWxlKj4o
aXRlbSkpOworICAgIHRtLT51cGRhdGVzID0gMDsKK30KKworLy8gcmVtb3ZlIG1lIGxhdGVyIQor
dm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCit7Cisg
ICAgRWluYV9JdGVyYXRvciAqaXQgPSBlaW5hX21hdHJpeHNwYXJzZV9pdGVyYXRvcl9jb21wbGV0
ZV9uZXcodG0tPm1hdHJpeCk7CisgICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKKyAg
ICBFaW5hX0Jvb2wgbGFzdF9lbXB0eSA9IEVJTkFfRkFMU0U7CisKKyNpZmRlZiBERUJVR19NRU1f
TEVBS1MKKyAgICBwcmludGYoIkV3a19UaWxlIE1hdHJpeDogdGlsZXNbKyUiUFJJdTY0IiwtJSJQ
Ukl1NjQiOiUiUFJJdTY0Il0gIgorICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiOiUiUFJJdTY0Il1cbiIsCisgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQs
IHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9j
YXRlZCAtIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVz
LmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLAorICAgICAgICAgICB0bS0+c3RhdHMu
Ynl0ZXMuYWxsb2NhdGVkIC0gdG0tPnN0YXRzLmJ5dGVzLmZyZWVkKTsKKyNlbHNlCisgICAgcHJp
bnRmKCJFd2tfVGlsZSBNYXRyaXg6XG4iKTsKKyNlbmRpZgorCisgICAgRUlOQV9JVEVSQVRPUl9G
T1JFQUNIKGl0LCBjZWxsKSB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgcm93LCBjb2w7CisgICAg
ICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfcG9zaXRpb25fZ2V0KGNlbGwsICZyb3csICZjb2wp
OworCisgICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwpKTsKKyAgICAgICAgaWYgKCF0KSB7CisgICAg
ICAgICAgICBpZiAoIWxhc3RfZW1wdHkpIHsKKyAgICAgICAgICAgICAgICBsYXN0X2VtcHR5ID0g
RUlOQV9UUlVFOworICAgICAgICAgICAgICAgIHByaW50ZigiRW1wdHk6Iik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBwcmludGYoIiBbJWx1LCVsdV0iLCBjb2wsIHJvdyk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAobGFzdF9lbXB0eSkgeworICAgICAgICAgICAgICAg
IGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOworICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByaW50ZigiJTNsdSwlM2x1ICUxMHA6IiwgY29s
LCByb3csIHQpOworICAgICAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAgJTAu
M2ZdJWMiLCB0LT5jb2wsIHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9vbSwgdC0+dmlzaWJsZSA/
ICcqJzogJyAnKTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAobGFzdF9lbXB0eSkKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAgIGVpbmFfaXRl
cmF0b3JfZnJlZShpdCk7CisKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKHRtLT50dWMp
OworfQorCisvKioKKyAqIEZyZWV6ZSBtYXRyaXggdG8gbm90IGRvIG1haW50ZW5hbmNlIHRhc2tz
LgorICoKKyAqIE1haW50ZW5hbmNlIHRhc2tzIG9wdGltaXplIHVzYWdlLCBidXQgbWF5YmUgd2Ug
a25vdyB3ZSBzaG91bGQgaG9sZAorICogb24gdGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFzdCBvcGVy
YXRpb24sIGluIHRoaXMgY2FzZSB3ZSBmcmVlemUKKyAqIHdoaWxlIG9wZXJhdGluZyBhbmQgdGhl
biB0aGF3IHdoZW4gd2UncmUgZG9uZS4KKyAqCisgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aGF3
KCkKKyAqLwordm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxlX01hdHJpeCAqdG0p
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOworICAgIGlmICghdG0tPmZy
b3plbikKKyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKyAg
ICB0bS0+ZnJvemVuKys7Cit9CisKKy8qKgorICogVW5mcmVlemVzIG1haW50ZW5hbmNlIHRhc2tz
LgorICoKKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXplLCB0aGVu
IG1haW50ZW5hbmNlIHRhc2tzCisgKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KKyAqLwordm9pZCBl
d2tfdGlsZV9tYXRyaXhfdGhhdyhFd2tfVGlsZV9NYXRyaXggKnRtKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBpZiAoIXRtLT5mcm96ZW4pIHsKKyAgICAgICAg
RVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBmcmVlemluZyEiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHRtLT5mcm96ZW4tLTsKKyAgICBpZiAoIXRtLT5mcm96ZW4pCisgICAgICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRtLT50dWMpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9tb2RlbC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmU5NDc5
M2I2ZGJjYjFkZWFjZjFiOGM1NDAxZGUyYjRhNTc3NmRiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
bW9kZWwuYworKysgL2Rldi9udWxsCkBAIC0xLDg0OCArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAgICBDb3B5cmlnaHQgKEMpIDIw
MDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwotCi0gICAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0g
ICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgot
Ci0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
LSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJld2tfdGlsZWRfbW9kZWwuaCIKLQotI2RlZmluZSBfR05VX1NPVVJDRQot
I2luY2x1ZGUgImV3a190aWxlZF9iYWNraW5nX3N0b3JlLmgiCi0jaW5jbHVkZSAiZXdrX3RpbGVk
X3ByaXZhdGUuaCIKLSNpbmNsdWRlIDxFY29yZV9FdmFzLmg+Ci0jaW5jbHVkZSA8RWluYS5oPgot
I2luY2x1ZGUgPGVpbmFfc2FmZXR5X2NoZWNrcy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5j
bHVkZSA8aW50dHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPiAvLyBYWFggUkVNT1ZFIE1FIExB
VEVSCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0KLSNpZmRlZiBU
SUxFX1NUQVRTX0FDQ09VTlRfUkVOREVSX1RJTUUKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2Vu
ZGlmCi0KLSNpZm5kZWYgQ0FJUk9fRk9STUFUX1JHQjE2XzU2NQotI2RlZmluZSBDQUlST19GT1JN
QVRfUkdCMTZfNTY1IDQKLSNlbmRpZgotCi0jZGVmaW5lIElEWChjb2wsIHJvdywgcm93c3Bhbikg
KGNvbCArIChyb3cgKiByb3dzcGFuKSkKLSNkZWZpbmUgTUlOKGEsIGIpICgoYSA8IGIpID8gYSA6
IGIpCi0jZGVmaW5lIE1BWChhLCBiKSAoKGEgPiBiKSA/IGEgOiBiKQotCi0jaWZkZWYgREVCVUdf
TUVNX0xFQUtTCi1zdGF0aWMgdWludDY0X3QgdGlsZXNfYWxsb2NhdGVkID0gMDsKLXN0YXRpYyB1
aW50NjRfdCB0aWxlc19mcmVlZCA9IDA7Ci1zdGF0aWMgdWludDY0X3QgYnl0ZXNfYWxsb2NhdGVk
ID0gMDsKLXN0YXRpYyB1aW50NjRfdCBieXRlc19mcmVlZCA9IDA7Ci0KLXN0cnVjdCB0aWxlX2Fj
Y291bnQgewotICAgIEV2YXNfQ29vcmQgc2l6ZTsKLSAgICBzdHJ1Y3QgewotICAgICAgICB1aW50
NjRfdCBhbGxvY2F0ZWQ7Ci0gICAgICAgIHVpbnQ2NF90IGZyZWVkOwotICAgIH0gdGlsZXMsIGJ5
dGVzOwotfTsKLQotc3RhdGljIHNpemVfdCBhY2NvdW50aW5nX2xlbiA9IDA7Ci1zdGF0aWMgc3Ry
dWN0IHRpbGVfYWNjb3VudCAqYWNjb3VudGluZyA9IE5VTEw7Ci0KLXN0YXRpYyBpbmxpbmUgc3Ry
dWN0IHRpbGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3a19UaWxlICp0
KQotewotICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYzsKLSAgICBzaXplX3QgaTsKLQotICAg
IGZvciAoaSA9IDA7IGkgPCBhY2NvdW50aW5nX2xlbjsgaSsrKSB7Ci0gICAgICAgIGlmIChhY2Nv
dW50aW5nW2ldLnNpemUgPT0gdC0+dykKLSAgICAgICAgICAgIHJldHVybiBhY2NvdW50aW5nICsg
aTsKLSAgICB9Ci0KLSAgICBpID0gKGFjY291bnRpbmdfbGVuICsgMSkgKiBzaXplb2Yoc3RydWN0
IHRpbGVfYWNjb3VudCk7Ci0gICAgUkVBTExPQ19PUl9PT01fUkVUKGFjY291bnRpbmcsIGksIE5V
TEwpOwotCi0gICAgYWNjID0gYWNjb3VudGluZyArIGFjY291bnRpbmdfbGVuOwotICAgIGFjYy0+
c2l6ZSA9IHQtPnc7Ci0gICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQgPSAwOwotICAgIGFjYy0+dGls
ZXMuZnJlZWQgPSAwOwotICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkID0gMDsKLSAgICBhY2MtPmJ5
dGVzLmZyZWVkID0gMDsKLQotICAgIGFjY291bnRpbmdfbGVuKys7Ci0KLSAgICByZXR1cm4gYWNj
OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKGNv
bnN0IEV3a19UaWxlICp0KQotewotICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9IF9ld2tf
dGlsZV9hY2NvdW50X2dldCh0KTsKLSAgICBpZiAoIWFjYykKLSAgICAgICAgcmV0dXJuOwotICAg
IGFjYy0+Ynl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOwotICAgIGFjYy0+dGlsZXMuYWxsb2Nh
dGVkKys7Ci0KLSAgICBieXRlc19hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7Ci0gICAgdGlsZXNfYWxs
b2NhdGVkKys7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVl
ZChjb25zdCBFd2tfVGlsZSAqdCkKLXsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2MgPSBf
ZXdrX3RpbGVfYWNjb3VudF9nZXQodCk7Ci0gICAgaWYgKCFhY2MpCi0gICAgICAgIHJldHVybjsK
LQotICAgIGFjYy0+Ynl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7Ci0gICAgYWNjLT50aWxlcy5mcmVl
ZCsrOwotCi0gICAgYnl0ZXNfZnJlZWQgKz0gdC0+Ynl0ZXM7Ci0gICAgdGlsZXNfZnJlZWQrKzsK
LX0KLQotdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQotewotICAgIHN0cnVjdCB0
aWxlX2FjY291bnQgKmFjYzsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NfZW5kOwotCi0g
ICAgcHJpbnRmKCJUSUxFIEJBTEFOQ0U6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBS
SXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2
NCJdXG4iLAotICAgICAgICAgICAgdGlsZXNfYWxsb2NhdGVkLCB0aWxlc19mcmVlZCwgdGlsZXNf
YWxsb2NhdGVkIC0gdGlsZXNfZnJlZWQsCi0gICAgICAgICAgICBieXRlc19hbGxvY2F0ZWQsIGJ5
dGVzX2ZyZWVkLCBieXRlc19hbGxvY2F0ZWQgLSBieXRlc19mcmVlZCk7Ci0KLSAgICBpZiAoIWFj
Y291bnRpbmdfbGVuKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhY2MgPSBhY2NvdW50aW5nOwot
ICAgIGFjY19lbmQgPSBhY2MgKyBhY2NvdW50aW5nX2xlbjsKLSAgICBwcmludGYoIkJFR0lOOiBU
SUxFIEJBTEFOQ0UgREVUQUlMUyAoVE8gVEhJUyBNT01FTlQhKTpcbiIpOwotICAgIGZvciAoOyBh
Y2MgPCBhY2NfZW5kOyBhY2MrKykgewotICAgICAgICB1aW50NjRfdCB0aWxlcywgYnl0ZXM7Ci0K
LSAgICAgICAgdGlsZXMgPSBhY2MtPnRpbGVzLmFsbG9jYXRlZCAtIGFjYy0+dGlsZXMuZnJlZWQ7
Ci0gICAgICAgIGJ5dGVzID0gYWNjLT5ieXRlcy5hbGxvY2F0ZWQgLSBhY2MtPmJ5dGVzLmZyZWVk
OwotCi0gICAgICAgIHByaW50ZigiICAgJTRkOiB0aWxlc1srJTQiUFJJdTY0IiwtJTQiUFJJdTY0
IjolNCJQUkl1NjQiXSAiCi0gICAgICAgICAgICAgICAiYnl0ZXNbKyU4IlBSSXU2NCIsLSU4IlBS
SXU2NCI6JTgiUFJJdTY0Il0lc1xuIiwKLSAgICAgICAgICAgICAgIGFjYy0+c2l6ZSwKLSAgICAg
ICAgICAgICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkLCBhY2MtPnRpbGVzLmZyZWVkLCB0aWxlcywK
LSAgICAgICAgICAgICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkLCBhY2MtPmJ5dGVzLmZyZWVkLCBi
eXRlcywKLSAgICAgICAgICAgICAgIChieXRlcyB8fCB0aWxlcykgPyAiIFBPU1NJQkxFIExFQUsi
IDogIiIpOwotICAgIH0KLSAgICBwcmludGYoIkVORDogVElMRSBCQUxBTkNFIERFVEFJTFMgKFRP
IFRISVMgTU9NRU5UISk6XG4iKTsKLX0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQotc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3a19UaWxlICp0KSB7IH0K
LQotdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQotewotICAgIHByaW50ZigiY29t
cGlsZSB3ZWJraXQgd2l0aCBERUJVR19NRU1fTEVBS1MgZGVmaW5lZCFcbiIpOwotfQotI2VuZGlm
Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KEV3a19UaWxlICp0
LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQotewotICAgIHVpbnQzMl90ICpkc3Qz
MiwgKmRzdDMyX2VuZCwgYzE7Ci0gICAgdWludDY0X3QgKmRzdDY0LCAqZHN0NjRfZW5kLCBjMjsK
LQotICAgIGMxID0gMHhmZjAwMDAwMCB8ICgodWludDMyX3QpciA8PCAxNikgfCAoKHVpbnQzMl90
KWcgPDwgOCkgfCBiOwotICAgIGMyID0gKCh1aW50NjRfdCljMSA8PCAzMikgfCBjMTsKLQotICAg
IGRzdDY0ID0gKHVpbnQ2NF90ICopdC0+cGl4ZWxzOwotICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsg
KCh0LT5ieXRlcyAvIDgpICYgfjcpOwotICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2VuZDsgZHN0
NjQgKz0gOCkgewotICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGluc3RydWN0
aW9ucyAqLwotICAgICAgICBkc3Q2NFswXSA9IGMyOwotICAgICAgICBkc3Q2NFsxXSA9IGMyOwot
ICAgICAgICBkc3Q2NFsyXSA9IGMyOwotICAgICAgICBkc3Q2NFszXSA9IGMyOwotICAgICAgICBk
c3Q2NFs0XSA9IGMyOwotICAgICAgICBkc3Q2NFs1XSA9IGMyOwotICAgICAgICBkc3Q2NFs2XSA9
IGMyOwotICAgICAgICBkc3Q2NFs3XSA9IGMyOwotICAgIH0KLQotICAgIGRzdDMyID0gKHVpbnQz
Ml90ICopZHN0NjRfZW5kOwotICAgIGRzdDMyX2VuZCA9ICh1aW50MzJfdCAqKSh0LT5waXhlbHMg
KyB0LT5ieXRlcyk7Ci0gICAgZm9yICg7IGRzdDMyIDwgZHN0MzJfZW5kOyBkc3QzMisrKQotICAg
ICAgICAqZHN0MzIgPSBjMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWlu
dF9yZ2I1NjUoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCi17
Ci0gICAgdWludDE2X3QgKmRzdDE2LCAqZHN0MTZfZW5kLCBjMTsKLSAgICB1aW50NjRfdCAqZHN0
NjQsICpkc3Q2NF9lbmQsIGMyOwotCi0gICAgYzEgPSAoKCgociA+PiAzKSAmIDB4MWYpIDw8IDEx
KSB8Ci0gICAgICAgICAgKCgoZyA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKLSAgICAgICAgICAoKGIg
Pj4gMykgJiAweDFmKSk7Ci0KLSAgICBjMiA9ICgoKHVpbnQ2NF90KWMxIDw8IDQ4KSB8ICgodWlu
dDY0X3QpYzEgPDwgMzIpIHwKLSAgICAgICAgICAoKHVpbnQ2NF90KWMxIDw8IDE2KSB8IGMxKTsK
LQotICAgIGRzdDY0ID0gKHVpbnQ2NF90ICopdC0+cGl4ZWxzOwotICAgIGRzdDY0X2VuZCA9IGRz
dDY0ICsgKCh0LT5ieXRlcyAvIDgpICYgfjcpOwotICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2Vu
ZDsgZHN0NjQgKz0gOCkgewotICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGlu
c3RydWN0aW9ucyAqLwotICAgICAgICBkc3Q2NFswXSA9IGMyOwotICAgICAgICBkc3Q2NFsxXSA9
IGMyOwotICAgICAgICBkc3Q2NFsyXSA9IGMyOwotICAgICAgICBkc3Q2NFszXSA9IGMyOwotICAg
ICAgICBkc3Q2NFs0XSA9IGMyOwotICAgICAgICBkc3Q2NFs1XSA9IGMyOwotICAgICAgICBkc3Q2
NFs2XSA9IGMyOwotICAgICAgICBkc3Q2NFs3XSA9IGMyOwotICAgIH0KLQotICAgIGRzdDE2ID0g
KHVpbnQxNl90ICopZHN0MTZfZW5kOwotICAgIGRzdDE2X2VuZCA9ICh1aW50MTZfdCAqKSh0LT5w
aXhlbHMgKyB0LT5ieXRlcyk7Ci0gICAgZm9yICg7IGRzdDE2IDwgZHN0MTZfZW5kOyBkc3QxNisr
KQotICAgICAgICAqZHN0MTYgPSBjMTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGls
ZV9wYWludChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKLXsK
LSAgICBpZiAodC0+Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkKLSAgICAgICAg
X2V3a190aWxlX3BhaW50X3JnYjg4OCh0LCByLCBnLCBiKTsKLSAgICBlbHNlIGlmICh0LT5jc3Bh
Y2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApCi0gICAgICAgIF9ld2tfdGlsZV9wYWlu
dF9yZ2I1NjUodCwgciwgZywgYik7Ci0gICAgZWxzZQotICAgICAgICBFUlIoInVua25vd24gY29s
b3Igc3BhY2U6ICVkIiwgdC0+Y3NwYWNlKTsKLX0KLQotLyoqCi0gKiBDcmVhdGUgYSBuZXcgdGls
ZSBvZiBnaXZlbiBzaXplLCB6b29tIGxldmVsIGFuZCBjb2xvcnNwYWNlLgotICoKLSAqIEFmdGVy
IGNyZWF0ZWQgdGhlc2UgcHJvcGVydGllcyBhcmUgaW1tdXRhYmxlIGFzIHRoZXkncmUgdGhlIGJh
c2ljCi0gKiBjaGFyYWN0ZXJpc3RpYyBvZiB0aGUgdGlsZSBhbmQgYW55IGNoYW5nZSB3aWxsIGxl
YWQgdG8gaW52YWxpZAotICogbWVtb3J5IGFjY2Vzcy4KLSAqCi0gKiBPdGhlciBtZW1iZXJzIGFy
ZSBvZiBmcmVlLWFjY2VzcyBhbmQgbm8gZ2V0dGVycy9zZXR0ZXJzIGFyZQotICogcHJvdmlkZWQg
aW4gb3JkZXJyIHRvIGF2b2lkIGV4cGVuc2l2ZSBvcGVyYXRpb25zIG9uIHRob3NlLCBob3dldmVy
Ci0gKiBzb21lIGFyZSBiZXR0ZXIgbWFuaXB1bGF0ZWQgd2l0aCBwcm92aWRlZCBmdW5jdGlvbnMs
IHN1Y2ggYXMKLSAqIGV3a190aWxlX3Nob3coKSBhbmQgZXdrX3RpbGVfaGlkZSgpIHRvIGNoYW5n
ZQotICogQGMgdmlzaWJsZSBvciBld2tfdGlsZV91cGRhdGVfZnVsbCgpLCBld2tfdGlsZV91cGRh
dGVfYXJlYSgpLAotICogZXdrX3RpbGVfdXBkYXRlc19jbGVhcigpIHRvIGNoYW5nZSBAYyBzdGF0
cy5taXNzZXMsCi0gKiBAYyBzdGF0cy5mdWxsX3VwZGF0ZSBhbmQgQGMgdXBkYXRlcy4KLSAqLwot
RXdrX1RpbGUgKmV3a190aWxlX25ldyhFdmFzICpldmFzLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29v
cmQgaCwgZmxvYXQgem9vbSwgRXZhc19Db2xvcnNwYWNlIGNzcGFjZSkKLXsKLSAgICBFdmFzX0Nv
b3JkICplYzsKLSAgICBFdmFzX0NvbG9yc3BhY2UgKmVjczsKLSAgICBmbG9hdCAqZjsKLSAgICBz
aXplX3QgKnM7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgdW5zaWduZWQgaW50IGFyZWE7Ci0gICAg
c2l6ZV90IGJ5dGVzOwotICAgIGNhaXJvX2Zvcm1hdF90IGZvcm1hdDsKLSAgICBjYWlyb19zdGF0
dXNfdCBzdGF0dXM7Ci0gICAgaW50IHN0cmlkZTsKLSAgICBFY29yZV9FdmFzICplZTsKLSAgICBj
b25zdCBjaGFyICplbmdpbmU7Ci0KLSAgICBhcmVhID0gdyAqIGg7Ci0KLSAgICBpZiAoY3NwYWNl
ID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkgewotICAgICAgICBieXRlcyA9IGFyZWEgKiA0
OwotICAgICAgICBzdHJpZGUgPSB3ICogNDsKLSAgICAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFU
X0FSR0IzMjsKLSAgICB9IGVsc2UgaWYgKGNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1
X0E1UCkgewotICAgICAgICBieXRlcyA9IGFyZWEgKiAyOwotICAgICAgICBzdHJpZGUgPSB3ICog
MjsKLSAgICAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX1JHQjE2XzU2NTsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBFUlIoInVua25vd24gY29sb3Igc3BhY2U6ICVkIiwgY3NwYWNlKTsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgREJHKCJzaXplOiAlZHglZCAoJWQpLCB6b29t
OiAlZiwgY3NwYWNlPSVkIiwgdywgaCwgYXJlYSwgKGRvdWJsZSl6b29tLCBjc3BhY2UpOwotCi0g
ICAgTUFMTE9DX09SX09PTV9SRVQodCwgc2l6ZW9mKEV3a19UaWxlKSwgTlVMTCk7Ci0gICAgdC0+
aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7Ci0KLSAgICBlZSA9IGVjb3JlX2V2
YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7Ci0gICAgZW5naW5lID0gZWNvcmVfZXZhc19lbmdpbmVf
bmFtZV9nZXQoZWUpOwotICAgIGlmIChlbmdpbmUgJiYgIXN0cmNtcChlbmdpbmUsICJvcGVuZ2xf
eDExIikpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQodC0+aW1h
Z2UsIEVWQVNfSU1BR0VfQ09OVEVOVF9ISU5UX0RZTkFNSUMpOwotCi0gICAgdC0+dmlzaWJsZSA9
IDA7Ci0gICAgdC0+dXBkYXRlcyA9IE5VTEw7Ci0KLSAgICBtZW1zZXQoJnQtPnN0YXRzLCAwLCBz
aXplb2YoRXdrX1RpbGVfU3RhdHMpKTsKLSAgICB0LT5zdGF0cy5hcmVhID0gYXJlYTsKLQotICAg
IC8qIHVnbHksIGJ1dCBsZXQncyBhdm9pZCBhdCBhbGwgY29zdHMgaGF2aW5nIHVzZXJzIHRvIG1v
ZGlmeSB0aG9zZSAqLwotICAgIGVjID0gKEV2YXNfQ29vcmQgKikmdC0+dzsKLSAgICAqZWMgPSB3
OwotCi0gICAgZWMgPSAoRXZhc19Db29yZCAqKSZ0LT5oOwotICAgICplYyA9IGg7Ci0KLSAgICBl
Y3MgPSAoRXZhc19Db2xvcnNwYWNlICopJnQtPmNzcGFjZTsKLSAgICAqZWNzID0gY3NwYWNlOwot
Ci0gICAgZiA9IChmbG9hdCAqKSZ0LT56b29tOwotICAgICpmID0gem9vbTsKLQotICAgIHMgPSAo
c2l6ZV90ICopJnQtPmJ5dGVzOwotICAgICpzID0gYnl0ZXM7Ci0KLSAgICBldmFzX29iamVjdF9p
bWFnZV9zaXplX3NldCh0LT5pbWFnZSwgdC0+dywgdC0+aCk7Ci0gICAgZXZhc19vYmplY3RfaW1h
Z2VfY29sb3JzcGFjZV9zZXQodC0+aW1hZ2UsIHQtPmNzcGFjZSk7Ci0gICAgdC0+cGl4ZWxzID0g
ZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQodC0+aW1hZ2UsIEVJTkFfVFJVRSk7Ci0gICAgdC0+
c3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHQtPnBpeGVscywg
Zm9ybWF0LCB3LCBoLCBzdHJpZGUpOwotICAgIHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVz
KHQtPnN1cmZhY2UpOwotICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsK
LSAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwKLSAgICAg
ICAgICAgIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAgIGZyZWUodCk7
Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQtPmNhaXJvID0gY2Fpcm9fY3Jl
YXRlKHQtPnN1cmZhY2UpOwotICAgIHN0YXR1cyA9IGNhaXJvX3N0YXR1cyh0LT5jYWlybyk7Ci0g
ICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgewotICAgICAgICBFUlIoImZh
aWxlZCB0byBjcmVhdGUgY2Fpcm86ICVzIiwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMp
KTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHQtPnN1cmZhY2UpOwotICAgICAgICBl
dmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOwotICAgICAgICBmcmVlKHQpOwotICAgICAgICByZXR1
cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQodCk7Ci0K
LSAgICByZXR1cm4gdDsKLX0KLQotLyoqCi0gKiBGcmVlIHRpbGUgbWVtb3J5LgotICovCi12b2lk
IGV3a190aWxlX2ZyZWUoRXdrX1RpbGUgKnQpCi17Ci0gICAgX2V3a190aWxlX2FjY291bnRfZnJl
ZWQodCk7Ci0KLSAgICBpZiAodC0+dXBkYXRlcykKLSAgICAgICAgZWluYV90aWxlcl9mcmVlKHQt
PnVwZGF0ZXMpOwotCi0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHQtPnN1cmZhY2UpOwotICAg
IGNhaXJvX2Rlc3Ryb3kodC0+Y2Fpcm8pOwotICAgIGV2YXNfb2JqZWN0X2RlbCh0LT5pbWFnZSk7
Ci0gICAgZnJlZSh0KTsKLX0KLQotLyoqCi0gKiBNYWtlIHRoZSB0aWxlIHZpc2libGUsIGluY3Jl
bWVudGluZyBpdHMgY291bnRlci4KLSAqLwotdm9pZCBld2tfdGlsZV9zaG93KEV3a19UaWxlICp0
KQotewotICAgIHQtPnZpc2libGUrKzsKLSAgICBldmFzX29iamVjdF9zaG93KHQtPmltYWdlKTsK
LX0KLQotLyoqCi0gKiBEZWNyZW1lbnQgdGhlIHZpc2liaWxpdHkgY291bnRlciwgbWFraW5nIGl0
IGludmlzaWJsZSBpZiBuZWNlc3NhcnkuCi0gKi8KLXZvaWQgZXdrX3RpbGVfaGlkZShFd2tfVGls
ZSAqdCkKLXsKLSAgICB0LT52aXNpYmxlLS07Ci0gICAgaWYgKCF0LT52aXNpYmxlKQotICAgICAg
ICBldmFzX29iamVjdF9oaWRlKHQtPmltYWdlKTsKLX0KLQotLyoqCi0gKiBSZXR1cm5zIEVJTkFf
VFJVRSBpZiB0aGUgdGlsZSBpcyB2aXNpYmxlLCBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KLSAqLwot
RWluYV9Cb29sIGV3a190aWxlX3Zpc2libGVfZ2V0KEV3a19UaWxlICp0KQotewotICAgIHJldHVy
biAhIXQtPnZpc2libGU7Ci19Ci0KLS8qKgotICogTWFyayB3aG9sZSB0aWxlIGFzIGRpcnR5IGFu
ZCByZXF1aXJpbmcgdXBkYXRlLgotICovCi12b2lkIGV3a190aWxlX3VwZGF0ZV9mdWxsKEV3a19U
aWxlICp0KQotewotICAgIC8qIFRPRE86IGxpc3Qgb2YgdGlsZXMgcGVuZGluZyB1cGRhdGVzPyAq
LwotICAgIHQtPnN0YXRzLm1pc3NlcysrOwotCi0gICAgaWYgKCF0LT5zdGF0cy5mdWxsX3VwZGF0
ZSkgewotICAgICAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKLSAgICAgICAg
aWYgKHQtPnVwZGF0ZXMpIHsKLSAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVz
KTsKLSAgICAgICAgICAgIHQtPnVwZGF0ZXMgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci0vKioKLSAqIE1hcmsgdGhlIHNwZWNpZmljIHN1YmFyZWEgYXMgZGlydHkgYW5kIHJlcXVpcmlu
ZyB1cGRhdGUuCi0gKi8KLXZvaWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1RpbGUgKnQsIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlICpyKQotewotICAgIC8qIFRPRE86IGxpc3Qgb2YgdGlsZXMgcGVu
ZGluZyB1cGRhdGVzPyAqLwotICAgIHQtPnN0YXRzLm1pc3NlcysrOwotCi0gICAgaWYgKHQtPnN0
YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXItPnggJiYgIXIt
PnkgJiYgci0+dyA9PSB0LT53ICYmIHItPmggPT0gdC0+aCkgewotICAgICAgICB0LT5zdGF0cy5m
dWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKLSAgICAgICAgaWYgKHQtPnVwZGF0ZXMpIHsKLSAgICAg
ICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKLSAgICAgICAgICAgIHQtPnVwZGF0
ZXMgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
IXQtPnVwZGF0ZXMpIHsKLSAgICAgICAgdC0+dXBkYXRlcyA9IGVpbmFfdGlsZXJfbmV3KHQtPncs
IHQtPmgpOwotICAgICAgICBpZiAoIXQtPnVwZGF0ZXMpIHsKLSAgICAgICAgICAgIENSSVRJQ0FM
KCJjb3VsZCBub3QgY3JlYXRlIGVpbmFfdGlsZXIgJWR4JWQuIiwgdC0+dywgdC0+aCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBlaW5hX3RpbGVyX3JlY3Rf
YWRkKHQtPnVwZGF0ZXMsIHIpOwotfQotCi0vKioKLSAqIEZvciBlYWNoIHVwZGF0ZWQgcmVnaW9u
LCBjYWxsIHRoZSBnaXZlbiBmdW5jdGlvbi4KLSAqCi0gKiBUaGlzIHdpbGwgbm90IGNoYW5nZSB0
aGUgdGlsZSBzdGF0aXN0aWNzIG9yIGNsZWFyIHRoZSBwcm9jZXNzZWQKLSAqIHVwZGF0ZXMsIHVz
ZSBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkgZm9yIHRoYXQuCi0gKi8KLXZvaWQgZXdrX3RpbGVf
dXBkYXRlc19wcm9jZXNzKEV3a19UaWxlICp0LCB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19U
aWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKSwgY29uc3Qgdm9pZCAqZGF0YSkK
LXsKLSAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKLSAgICAgICAgRWluYV9SZWN0YW5n
bGUgcjsKLSAgICAgICAgci54ID0gMDsKLSAgICAgICAgci55ID0gMDsKLSAgICAgICAgci53ID0g
dC0+dzsKLSAgICAgICAgci5oID0gdC0+aDsKLSNpZmRlZiBUSUxFX1NUQVRTX0FDQ09VTlRfUkVO
REVSX1RJTUUKLSAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZXY7Ci0gICAgICAgIGRvdWJsZSBy
ZW5kZXJfc3RhcnQ7Ci0gICAgICAgIGdldHRpbWVvZmRheSgmdGltZXYsIE5VTEwpOwotICAgICAg
ICByZW5kZXJfc3RhcnQgPSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCi0gICAgICAgICAgICAoKChk
b3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKTsKLSNlbmRpZgotICAgICAgICBjYigodm9p
ZCAqKWRhdGEsIHQsICZyKTsKLSNpZmRlZiBUSUxFX1NUQVRTX0FDQ09VTlRfUkVOREVSX1RJTUUK
LSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0aW1ldiwgTlVMTCk7Ci0gICAgICAgIHQtPnN0YXRzLnJl
bmRlcl90aW1lID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwotICAgICAgICAgICAgKCgoZG91Ymxl
KXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCkgLSByZW5kZXJfc3RhcnQ7Ci0jZW5kaWYKLSAgICB9
IGVsc2UgaWYgKHQtPnVwZGF0ZXMpIHsKLSAgICAgICAgRWluYV9JdGVyYXRvciAqaXRyID0gZWlu
YV90aWxlcl9pdGVyYXRvcl9uZXcodC0+dXBkYXRlcyk7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xl
ICpyOwotICAgICAgICBpZiAoIWl0cikgewotICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5v
dCBjcmVhdGUgdGlsZXIgaXRlcmF0b3IhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ciwgcikKLSAgICAgICAgICAgIGNi
KCh2b2lkICopZGF0YSwgdCwgcik7Ci0gICAgICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdHIpOwot
ICAgIH0KLX0KLQotLyoqCi0gKiBDbGVhciBhbGwgdXBkYXRlcyBpbiByZWdpb24sIGlmIGFueS4K
LSAqCi0gKiBUaGlzIHdpbGwgY2hhbmdlIHRoZSB0aWxlIHN0YXRpc3RpY3MsIHNwZWNpYWxseSB6
ZXJvIHN0YXQubWlzc2VzCi0gKiBhbmQgdW5zZXQgc3RhdHMuZnVsbF91cGRhdGUuIElmIHQtPnVw
ZGF0ZXMgZXhpc3RlZCwgdGhlbiBpdCB3aWxsIGJlCi0gKiBkZXN0cm95ZWQuCi0gKgotICogVGhp
cyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBhZnRlciBld2tfdGlsZV91cGRhdGVzX3Byb2Nl
c3MoKSBpcwotICogY2FsbGVkLgotICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoRXdr
X1RpbGUgKnQpCi17Ci0gICAgLyogVE9ETzogcmVtb3ZlIGZyb20gbGlzdCBvZiBwZW5kaW5nIHVw
ZGF0ZXM/ICovCi0gICAgdC0+c3RhdHMubWlzc2VzID0gMDsKLQotICAgIGlmICh0LT5zdGF0cy5m
dWxsX3VwZGF0ZSkKLSAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSAwOwotICAgIGVsc2Ug
aWYgKHQtPnVwZGF0ZXMpIHsKLSAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOwot
ICAgICAgICB0LT51cGRhdGVzID0gTlVMTDsKLSAgICB9Ci19Ci0KLXR5cGVkZWYgc3RydWN0IF9F
d2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Owot
c3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgewotICAgIEV3a19UaWxlICp0aWxl
OwotICAgIGludCB3ZWlnaHQ7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAoKmNiKSh2b2lk
ICpkYXRhLCBFd2tfVGlsZSAqdCk7Ci0gICAgICAgIHZvaWQgKmRhdGE7Ci0gICAgfSB0aWxlX2Zy
ZWU7Ci19OwotCi1zdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZSB7Ci0gICAgc3RydWN0IHsK
LSAgICAgICAgRWluYV9MaXN0ICpsaXN0OwotICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAgICAg
IHNpemVfdCBhbGxvY2F0ZWQ7Ci0gICAgfSBlbnRyaWVzOwotICAgIHN0cnVjdCB7Ci0gICAgICAg
IHNpemVfdCBtYXg7ICAvKio8IHdhdGVybWFyayAoaW4gYnl0ZXMpIHRvIHN0YXJ0IGZyZWVpbmcg
dGlsZXMgKi8KLSAgICAgICAgc2l6ZV90IHVzZWQ7IC8qKjwgaW4gYnl0ZXMsIG1heWJlIG1vcmUg
dGhhbiBtYXguICovCi0gICAgfSBtZW1vcnk7Ci0gICAgc3RydWN0IHsKLSAgICAgICAgRXZhc19D
b29yZCB4LCB5LCB3LCBoOwotICAgICAgICBmbG9hdCB6b29tOwotICAgICAgICBFaW5hX0Jvb2wg
bG9ja2VkOwotICAgIH0gbG9ja2VkOwotICAgIGludCByZWZlcmVuY2VzOwotICAgIHVuc2lnbmVk
IGludCBmcm96ZW47Ci19OwotCi1zdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hF
X0FMTE9DQVRFX0lOSVRJQUwgPSAxMjg7Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VE
X0NBQ0hFX0FMTE9DQVRFX1NURVAgPSAxNjsKLXN0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVT
RURfQ0FDSEVfTUFYX0ZSRUUgPSAzMjsKLQotLyoqCi0gKiBDYWNoZSBvZiB1bnVzZWQgdGlsZXMg
KHRob3NlIHRoYXQgYXJlIG5vdCB2aXNpYmxlKS4KLSAqCi0gKiBUaGUgY2FjaGUgb2YgdW51c2Vk
IHRpbGVzLgotICoKLSAqIEBwYXJhbSBtYXggY2FjaGUgc2l6ZSBpbiBieXRlcy4KLSAqCi0gKiBA
cmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIHVzZQotICogICAg
ICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpIHRvIHJlbGVhc2UgcmVzb3VyY2VzLiBJ
ZiBub3QKLSAqICAgICAgICAgcG9zc2libGUgdG8gYWxsb2NhdGUgbWVtb3J5LCBAYyBOVUxMIGlz
IHJldHVybmVkLgotICovCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9j
YWNoZV9uZXcoc2l6ZV90IG1heCkKLXsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsK
LQotICAgIENBTExPQ19PUl9PT01fUkVUKHR1Yywgc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNo
ZSksIE5VTEwpOwotCi0gICAgREJHKCJ0dWM9JXAiLCB0dWMpOwotICAgIHR1Yy0+bWVtb3J5Lm1h
eCA9IG1heDsKLSAgICB0dWMtPnJlZmVyZW5jZXMgPSAxOwotICAgIHJldHVybiB0dWM7Ci19Ci0K
LXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1YywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19D
b29yZCBoLCBmbG9hdCB6b29tKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1
Yyk7Ci0KLSAgICB0dWMtPmxvY2tlZC5sb2NrZWQgPSBFSU5BX1RSVUU7Ci0gICAgdHVjLT5sb2Nr
ZWQueCA9IHg7Ci0gICAgdHVjLT5sb2NrZWQueSA9IHk7Ci0gICAgdHVjLT5sb2NrZWQudyA9IHc7
Ci0gICAgdHVjLT5sb2NrZWQuaCA9IGg7Ci0gICAgdHVjLT5sb2NrZWQuem9vbSA9IHpvb207Ci19
Ci0KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0K
LSAgICB0dWMtPmxvY2tlZC5sb2NrZWQgPSBFSU5BX0ZBTFNFOwotfQotCi0vKioKLSAqIEZyZWUg
Y2FjaGUgb2YgdW51c2VkIHRpbGVzLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIG9u
bHkgY2FsbGVkIGJ5IGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZgotICogZnVuY3Rpb24uIENh
bGxpbmcgdGhpcyBmdW5jdGlvbiB3aXRob3V0IGNvbnNpZGVyaW5nIHJlZmVyZW5jZSBjb3VudGlu
ZwotICogbWF5IGxlYWQgdG8gdW5rbm93biByZXN1bHRzLgotICoKLSAqIFRob3NlIHRpbGVzIHRo
YXQgYXJlIHN0aWxsIHZpc2libGUgd2lsbCByZW1haW4gbGl2ZS4gVGhlIHVudXNlZAotICogdGls
ZXMgd2lsbCBiZSBmcmVlZC4KLSAqCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJl
ZigpCi0gKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZShFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOwotCi0gICAgREJHKCJ0dWM9JXAsICIKLSAgICAgICAgImVudHJpZXM9KGNvdW50OiV6ZCwg
YWxsb2NhdGVkOiV6ZCksICIKLSAgICAgICAgIm1lbW9yeT0obWF4OiV6ZCwgdXNlZDolemQpIiwK
LSAgICAgICAgdHVjLCB0dWMtPmVudHJpZXMuY291bnQsIHR1Yy0+ZW50cmllcy5hbGxvY2F0ZWQs
Ci0gICAgICAgIHR1Yy0+bWVtb3J5Lm1heCwgdHVjLT5tZW1vcnkudXNlZCk7Ci0KLSAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfY2xlYXIodHVjKTsKLSAgICBmcmVlKHR1Yyk7Ci19Ci0KLS8qKgot
ICogQ2xlYXIgY2FjaGUgb2YgdW51c2VkIHRpbGVzLgotICoKLSAqIEFueSB0aWxlcyB0aGF0IGFy
ZSBpbiB0aGUgY2FjaGUgYXJlIGZyZWVkLiBUaGUgb25seSB0aWxlcyB0aGF0IGFyZQotICoga2Vw
dCBhcmUgdGhvc2UgdGhhdCBhcmVuJ3QgaW4gdGhlIGNhY2hlIChpLmUuIHRoYXQgYXJlIHZpc2li
bGUpLgotICovCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcihFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgKml0cjsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotCi0gICAgaWYgKCF0dWMtPmVu
dHJpZXMuY291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIEVJTkFfTElTVF9GUkVFKHR1Yy0+
ZW50cmllcy5saXN0LCBpdHIpIHsKLSAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxl
X2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKLSAgICAgICAgZnJlZShpdHIpOwotICAgIH0KLQotICAg
IHR1Yy0+bWVtb3J5LnVzZWQgPSAwOwotICAgIHR1Yy0+ZW50cmllcy5jb3VudCA9IDA7Ci19Ci0K
LS8qKgotICogSG9sZCByZWZlcmVuY2UgdG8gY2FjaGUuCi0gKgotICogQHJldHVybiBzYW1lIHBv
aW50ZXIgYXMgdGFrZW4uCi0gKgotICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYo
KQotICovCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYo
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHR1YywgTlVMTCk7Ci0gICAgdHVjLT5yZWZlcmVuY2VzKys7Ci0gICAgcmV0dXJu
IHR1YzsKLX0KLQotLyoqCi0gKiBSZWxlYXNlIGNhY2hlIHJlZmVyZW5jZSwgZnJlZWluZyBpdCBp
ZiBpdCBkcm9wcyB0byB6ZXJvLgotICoKLSAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Jl
ZigpCi0gKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKCkKLSAqLwotdm9pZCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLSAgICB0dWMtPnJlZmVyZW5jZXMt
LTsKLSAgICBpZiAoIXR1Yy0+cmVmZXJlbmNlcykKLSAgICAgICAgX2V3a190aWxlX3VudXNlZF9j
YWNoZV9mcmVlKHR1Yyk7Ci19Ci0KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9zZXQo
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBtYXgpCi17Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLSAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7Ci19Ci0K
LXNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVj
LCAwKTsKLSAgICByZXR1cm4gdHVjLT5tZW1vcnkubWF4OwotfQotCi1zaXplX3QgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQot
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOwotICAgIHJldHVy
biB0dWMtPm1lbW9yeS51c2VkOwotfQotCi1zaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Zs
dXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0ZXMpCi17Ci0gICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5ICppdHI7Ci0gICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOwotICAgIHNpemVf
dCBkb25lOwotICAgIHVuc2lnbmVkIGludCBjb3VudDsKLQotICAgIGlmICghdHVjLT5lbnRyaWVz
LmNvdW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoYnl0ZXMgPCAxKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIC8qCi0gICAgICogTk9URTogdGhlIGNhY2hlIGlzIGEgRklGTyBxdWV1
ZSBjdXJyZW50bHkuCi0gICAgICogRG9uJ3QgbmVlZCB0byBzb3J0IGFueSBtb3JlLgotICAgICAq
LwotCi0gICAgZG9uZSA9IDA7Ci0gICAgY291bnQgPSAwOwotICAgIEVJTkFfTElTVF9GT1JFQUNI
X1NBRkUodHVjLT5lbnRyaWVzLmxpc3QsIGwsIGxfbmV4dCwgaXRyKSB7Ci0gICAgICAgIEV3a19U
aWxlICp0ID0gaXRyLT50aWxlOwotICAgICAgICBpZiAoZG9uZSA+IGJ5dGVzKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGlmICh0dWMtPmxvY2tlZC5sb2NrZWQKLSAgICAgICAgICAgICYm
IHQtPnggKyB0LT53ID4gdHVjLT5sb2NrZWQueAotICAgICAgICAgICAgJiYgdC0+eSArIHQtPmgg
PiB0dWMtPmxvY2tlZC55Ci0gICAgICAgICAgICAmJiB0LT54IDwgdHVjLT5sb2NrZWQueCArIHR1
Yy0+bG9ja2VkLncKLSAgICAgICAgICAgICYmIHQtPnkgPCB0dWMtPmxvY2tlZC55ICsgdHVjLT5s
b2NrZWQuaAotICAgICAgICAgICAgJiYgdC0+em9vbSA9PSB0dWMtPmxvY2tlZC56b29tKSB7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBkb25lICs9IHNpemVvZihF
d2tfVGlsZSkgKyBpdHItPnRpbGUtPmJ5dGVzOwotICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihp
dHItPnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUpOwotICAgICAgICB0dWMtPmVudHJpZXMubGlz
dCA9IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0dWMtPmVudHJpZXMubGlzdCwgbCk7Ci0gICAgICAg
IGZyZWUoaXRyKTsKLSAgICAgICAgY291bnQrKzsKLSAgICB9Ci0KLSAgICB0dWMtPm1lbW9yeS51
c2VkIC09IGRvbmU7Ci0gICAgdHVjLT5lbnRyaWVzLmNvdW50IC09IGNvdW50OwotCi0gICAgcmV0
dXJuIGRvbmU7Ci19Ci0KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4odHVjKTsKLSAgICBpZiAodHVjLT5tZW1vcnkudXNlZCA8PSB0dWMtPm1lbW9yeS5tYXgpCi0g
ICAgICAgIHJldHVybjsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2godHVjLCB0dWMt
Pm1lbW9yeS51c2VkIC0gdHVjLT5tZW1vcnkubWF4KTsKLSAgICBpZiAodHVjLT5tZW1vcnkudXNl
ZCA+IHR1Yy0+bWVtb3J5Lm1heCkKLSAgICAgICAgQ1JJVElDQUwoIkNhY2hlIHN0aWxsIHVzaW5n
IHRvbyBtdWNoIG1lbW9yeTogJXpkIEtCOyBtYXg6ICV6ZCBLQiIsCi0gICAgICAgICAgICAgICAg
IHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+bWVtb3J5Lm1heCk7Ci19Ci0KLS8qKgotICogRnJlZXpl
IGNhY2hlIHRvIG5vdCBkbyBtYWludGVuYW5jZSB0YXNrcy4KLSAqCi0gKiBNYWludGVuYW5jZSB0
YXNrcyBvcHRpbWl6ZSBjYWNoZSB1c2FnZSwgYnV0IG1heWJlIHdlIGtub3cgd2Ugc2hvdWxkCi0g
KiBob2xkIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxhc3Qgb3BlcmF0aW9uLCBpbiB0aGlzIGNh
c2Ugd2UgZnJlZXplCi0gKiB3aGlsZSBvcGVyYXRpbmcgYW5kIHRoZW4gdGhhdyB3aGVuIHdlJ3Jl
IGRvbmUuCi0gKgotICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdygpCi0gKi8KLXZv
aWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKLXsKLSAgICB0dWMtPmZyb3plbisrOwotfQotCi0vKioKLSAqIFVuZnJlZXplcyBtYWludGVu
YW5jZSB0YXNrcy4KLSAqCi0gKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZy
ZWV6ZSwgdGhlbiBtYWludGVuYW5jZSB0YXNrcwotICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCi0g
Ki8KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMpCi17Ci0gICAgaWYgKCF0dWMtPmZyb3plbikgewotICAgICAgICBFUlIoInRoYXdpbmcg
bW9yZSB0aGFuIGZyZWV6aW5nISIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgdHVj
LT5mcm96ZW4tLTsKLX0KLQotLyoqCi0gKiBHZXQgdGlsZSBmcm9tIGNhY2hlIG9mIHVudXNlZCB0
aWxlcywgcmVtb3ZpbmcgaXQgZnJvbSB0aGUgY2FjaGUuCi0gKgotICogSWYgdGhlIHRpbGUgaXMg
dXNlZCwgdGhlbiBpdCdzIG5vdCBpbiBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIHNvIGl0Ci0gKiBp
cyByZW1vdmVkIGZyb20gdGhlIGNhY2hlIGFuZCBtYXkgYmUgZ2l2ZW4gYmFjayB3aXRoCi0gKiBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoKS4KLSAqCi0gKiBAcGFyYW0gdHVjIGNhY2hl
IG9mIHVudXNlZCB0aWxlcwotICogQHBhcmFtIHQgdGhlIHRpbGUgdG8gYmUgcmVtb3ZlZCBmcm9t
IEV3a19UaWxlX1VudXNlZF9DYWNoZS4KLSAqCi0gKiBAcmV0dXJuICNFSU5BX1RSVUUgb24gc3Vj
Y2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLgotICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tfVGlsZSAq
dCkKLXsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgKmVudHJ5OwotICAgIEVpbmFf
TGlzdCAqZSwgKmw7Ci0KLSAgICBlID0gTlVMTDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSCh0dWMt
PmVudHJpZXMubGlzdCwgbCwgZW50cnkpCi0gICAgewotICAgICAgICBpZiAoZW50cnktPnRpbGUg
PT0gdCkgewotICAgICAgICAgICAgZSA9IGw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgIH0KLSAgICBpZiAoIWUpIHsKLSAgICAgICAgRVJSKCJ0aWxlICVwIG5vdCBmb3VuZCBp
biBjYWNoZSAlcCIsIHQsIHR1Yyk7Ci0gICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIH0K
LQotICAgIHR1Yy0+ZW50cmllcy5jb3VudC0tOwotICAgIHR1Yy0+bWVtb3J5LnVzZWQgLT0gc2l6
ZW9mKEV3a19UaWxlKSArIHQtPmJ5dGVzOwotICAgIHR1Yy0+ZW50cmllcy5saXN0ID0gZWluYV9s
aXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKLSAgICBmcmVlKGVudHJ5KTsK
LQotICAgIHJldHVybiBFSU5BX1RSVUU7Ci19Ci0KLS8qKgotICogUHV0IHRpbGUgaW50byBjYWNo
ZSBvZiB1bnVzZWQgdGlsZXMsIGFkZGluZyBpdCB0byB0aGUgY2FjaGUuCi0gKgotICogVGhpcyBz
aG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdC0+dmlzaWJsZSBpcyBAYyAwIGFuZCBubyBvYmplY3Rz
IGFyZQotICogdXNpbmcgdGhlIHRpbGUgYW55bW9yZSwgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBi
ZSBleHBpcmVkIGFuZCBoYXZlCi0gKiBpdHMgbWVtb3J5IHJlcGxhY2VkLgotICoKLSAqIE5vdGUg
dGhhdCB0aWxlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgZGVsZXRlZCBpZiBjYWNoZSBpcyBmdWxs
LAotICogaW5zdGVhZCB0aGUgY2FjaGUgd2lsbCBoYXZlIG1vcmUgYnl0ZXMgdXNlZCB0aGFuIG1h
eGltdW0gYW5kIG9uZQotICogY2FuIGNhbGwgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2goKSB0byBmcmVlIHRoZW0uIFRoaXMgaXMgZG9uZQotICogYmVjYXVzZSB1c3VhbGx5IHdlIHdh
bnQgYSBsYXp5IG9wZXJhdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgotICoKLSAqIEBwYXJh
bSB0dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzCi0gKiBAcGFyYW0gdCB0aWxlIHRvIGJlIGFkZGVk
IHRvIGNhY2hlLgotICogQHBhcmFtIHRpbGVfZnJlZV9jYiBmdW5jdGlvbiB1c2VkIHRvIGZyZWUg
dGlsZXMuCi0gKiBAcGFyYW0gZGF0YSBjb250ZXh0IHRvIGdpdmUgYmFjayB0byBAYSB0aWxlX2Zy
ZWVfY2IgYXMgZmlyc3QgYXJndW1lbnQuCi0gKgotICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1
Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lzZS4gSWYgQGMgdC0+dmlzaWJsZQotICogICAgICAg
ICBpcyBub3QgI0VJTkFfRkFMU0UsIHRoZW4gaXQgd2lsbCByZXR1cm4gI0VJTkFfRkFMU0UuCi0g
KgotICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpCi0gKi8KLUVpbmFf
Qm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMsIEV3a19UaWxlICp0LCB2b2lkICgqdGlsZV9mcmVlX2NiKSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5ICplOwotCi0gICAgaWYgKHQtPnZpc2libGUpIHsKLSAgICAgICAgRVJSKCJ0aWxlPSVw
IGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwgdCwgdC0+dmlzaWJsZSk7Ci0gICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwotICAgIH0KLQotICAgIE1BTExPQ19PUl9PT01fUkVUKGUsIHNpemVv
ZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkpLCBFSU5BX0ZBTFNFKTsKLSAgICB0dWMtPmVu
dHJpZXMubGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQodHVjLT5lbnRyaWVzLmxpc3QsIGUpOwotICAg
IGlmIChlaW5hX2Vycm9yX2dldCgpKSB7Ci0gICAgICAgIEVSUigiTGlzdCBhbGxvY2F0aW9uIGZh
aWxlZCIpOwotICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICB9Ci0KLSAgICBlLT50aWxl
ID0gdDsKLSAgICBlLT53ZWlnaHQgPSAwOyAvKiBjYWxjdWxhdGVkIGp1c3QgYmVmb3JlIHNvcnQg
Ki8KLSAgICBlLT50aWxlX2ZyZWUuY2IgPSB0aWxlX2ZyZWVfY2I7Ci0gICAgZS0+dGlsZV9mcmVl
LmRhdGEgPSAodm9pZCAqKWRhdGE7Ci0KLSAgICB0dWMtPmVudHJpZXMuY291bnQrKzsKLSAgICB0
dWMtPm1lbW9yeS51c2VkICs9IHNpemVvZihFd2tfVGlsZSkgKyB0LT5ieXRlczsKLQotICAgIHJl
dHVybiBFSU5BX1RSVUU7Ci19Ci0KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyhjb25z
dCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKLXsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGVfRW50cnkgKml0cjsKLSAgICBFaW5hX0xpc3QgKmw7Ci0gICAgaW50IGNvdW50ID0gMDsKLSAg
ICBwcmludGYoIkNhY2hlIG9mIHVudXNlZCB0aWxlczogZW50cmllczogJXp1LyV6dSwgbWVtb3J5
OiAlenUvJXp1XG4iLAotICAgICAgICAgICB0dWMtPmVudHJpZXMuY291bnQsIHR1Yy0+ZW50cmll
cy5hbGxvY2F0ZWQsCi0gICAgICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+bWVtb3J5Lm1h
eCk7Ci0KLSAgICBFSU5BX0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgaXRyKSB7
Ci0gICAgICAgIGNvbnN0IEV3a19UaWxlICp0ID0gaXRyLT50aWxlOwotICAgICAgICBwcmludGYo
IiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsCi0gICAgICAgICAgICAgICB0LT5jb2ws
IHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9vbSwKLSAgICAgICAgICAgICAgIHQtPnZpc2libGUg
PyAnKic6ICcgJyk7Ci0KLSAgICAgICAgaWYgKCEoY291bnQgJSA0KSkKLSAgICAgICAgICAgIHBy
aW50ZigiXG4iKTsKLSAgICB9Ci0KLSAgICBwcmludGYoIlxuIik7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYxNjg1NzI5NDA4OTliZGJl
ODcxZDYzMDFmZmRjYjE0YWM0NTNiYmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcApAQCAtMCwwICsxLDg1MSBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCisgICAgQ29weXJpZ2h0
IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX3RpbGVkX21vZGVsLmgiCisKKyNpbmNsdWRlICJld2tf
dGlsZWRfYmFja2luZ19zdG9yZS5oIgorI2luY2x1ZGUgImV3a190aWxlZF9wcml2YXRlLmgiCisj
aW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorI2luY2x1ZGUgPEVpbmEuaD4KKyNpbmNsdWRlIDxlaW5h
X3NhZmV0eV9jaGVja3MuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVz
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgorI2luY2x1ZGUg
PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZkZWYgVElMRV9TVEFUU19BQ0NP
VU5UX1JFTkRFUl9USU1FCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorCisjZGVmaW5l
IElEWChjb2wsIHJvdywgcm93c3BhbikgKGNvbCArIChyb3cgKiByb3dzcGFuKSkKKworI2lmZGVm
IERFQlVHX01FTV9MRUFLUworc3RhdGljIHVpbnQ2NF90IHRpbGVzX2FsbG9jYXRlZCA9IDA7Citz
dGF0aWMgdWludDY0X3QgdGlsZXNfZnJlZWQgPSAwOworc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2Fs
bG9jYXRlZCA9IDA7CitzdGF0aWMgdWludDY0X3QgYnl0ZXNfZnJlZWQgPSAwOworCitzdHJ1Y3Qg
dGlsZV9hY2NvdW50IHsKKyAgICBFdmFzX0Nvb3JkIHNpemU7CisgICAgc3RydWN0IHsKKyAgICAg
ICAgdWludDY0X3QgYWxsb2NhdGVkOworICAgICAgICB1aW50NjRfdCBmcmVlZDsKKyAgICB9IHRp
bGVzLCBieXRlczsKK307CisKK3N0YXRpYyBzaXplX3QgYWNjb3VudGluZ19sZW4gPSAwOworc3Rh
dGljIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY291bnRpbmcgPSAwOworCitzdGF0aWMgaW5saW5l
IHN0cnVjdCB0aWxlX2FjY291bnQgKl9ld2tfdGlsZV9hY2NvdW50X2dldChjb25zdCBFd2tfVGls
ZSAqdCkKK3sKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7CisgICAgc2l6ZV90IGk7CisK
KyAgICBmb3IgKGkgPSAwOyBpIDwgYWNjb3VudGluZ19sZW47IGkrKykgeworICAgICAgICBpZiAo
YWNjb3VudGluZ1tpXS5zaXplID09IHQtPncpCisgICAgICAgICAgICByZXR1cm4gYWNjb3VudGlu
ZyArIGk7CisgICAgfQorCisgICAgaSA9IChhY2NvdW50aW5nX2xlbiArIDEpICogc2l6ZW9mKHN0
cnVjdCB0aWxlX2FjY291bnQpOworICAgIFJFQUxMT0NfT1JfT09NX1JFVChhY2NvdW50aW5nLCBp
LCAwKTsKKworICAgIGFjYyA9IGFjY291bnRpbmcgKyBhY2NvdW50aW5nX2xlbjsKKyAgICBhY2Mt
PnNpemUgPSB0LT53OworICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkID0gMDsKKyAgICBhY2MtPnRp
bGVzLmZyZWVkID0gMDsKKyAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCA9IDA7CisgICAgYWNjLT5i
eXRlcy5mcmVlZCA9IDA7CisKKyAgICBhY2NvdW50aW5nX2xlbisrOworCisgICAgcmV0dXJuIGFj
YzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChj
b25zdCBFd2tfVGlsZSAqdCkKK3sKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2MgPSBfZXdr
X3RpbGVfYWNjb3VudF9nZXQodCk7CisgICAgaWYgKCFhY2MpCisgICAgICAgIHJldHVybjsKKyAg
ICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPnRpbGVzLmFsbG9j
YXRlZCsrOworCisgICAgYnl0ZXNfYWxsb2NhdGVkICs9IHQtPmJ5dGVzOworICAgIHRpbGVzX2Fs
bG9jYXRlZCsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJl
ZWQoY29uc3QgRXdrX1RpbGUgKnQpCit7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0g
X2V3a190aWxlX2FjY291bnRfZ2V0KHQpOworICAgIGlmICghYWNjKQorICAgICAgICByZXR1cm47
CisKKyAgICBhY2MtPmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOworICAgIGFjYy0+dGlsZXMuZnJl
ZWQrKzsKKworICAgIGJ5dGVzX2ZyZWVkICs9IHQtPmJ5dGVzOworICAgIHRpbGVzX2ZyZWVkKys7
Cit9CisKK3ZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKK3sKKyAgICBzdHJ1Y3Qg
dGlsZV9hY2NvdW50ICphY2M7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjX2VuZDsKKwor
ICAgIHByaW50ZigiVElMRSBCQUxBTkNFOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSAiCisgICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1
NjQiXVxuIiwKKyAgICAgICAgICAgIHRpbGVzX2FsbG9jYXRlZCwgdGlsZXNfZnJlZWQsIHRpbGVz
X2FsbG9jYXRlZCAtIHRpbGVzX2ZyZWVkLAorICAgICAgICAgICAgYnl0ZXNfYWxsb2NhdGVkLCBi
eXRlc19mcmVlZCwgYnl0ZXNfYWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQpOworCisgICAgaWYgKCFh
Y2NvdW50aW5nX2xlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgYWNjID0gYWNjb3VudGluZzsK
KyAgICBhY2NfZW5kID0gYWNjICsgYWNjb3VudGluZ19sZW47CisgICAgcHJpbnRmKCJCRUdJTjog
VElMRSBCQUxBTkNFIERFVEFJTFMgKFRPIFRISVMgTU9NRU5UISk6XG4iKTsKKyAgICBmb3IgKDsg
YWNjIDwgYWNjX2VuZDsgYWNjKyspIHsKKyAgICAgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwor
CisgICAgICAgIHRpbGVzID0gYWNjLT50aWxlcy5hbGxvY2F0ZWQgLSBhY2MtPnRpbGVzLmZyZWVk
OworICAgICAgICBieXRlcyA9IGFjYy0+Ynl0ZXMuYWxsb2NhdGVkIC0gYWNjLT5ieXRlcy5mcmVl
ZDsKKworICAgICAgICBwcmludGYoIiAgICU0ZDogdGlsZXNbKyU0IlBSSXU2NCIsLSU0IlBSSXU2
NCI6JTQiUFJJdTY0Il0gIgorICAgICAgICAgICAgICAgImJ5dGVzWyslOCJQUkl1NjQiLC0lOCJQ
Ukl1NjQiOiU4IlBSSXU2NCJdJXNcbiIsCisgICAgICAgICAgICAgICBhY2MtPnNpemUsCisgICAg
ICAgICAgICAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCwgYWNjLT50aWxlcy5mcmVlZCwgdGlsZXMs
CisgICAgICAgICAgICAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCwgYWNjLT5ieXRlcy5mcmVlZCwg
Ynl0ZXMsCisgICAgICAgICAgICAgICAoYnl0ZXMgfHwgdGlsZXMpID8gIiBQT1NTSUJMRSBMRUFL
IiA6ICIiKTsKKyAgICB9CisgICAgcHJpbnRmKCJFTkQ6IFRJTEUgQkFMQU5DRSBERVRBSUxTIChU
TyBUSElTIE1PTUVOVCEpOlxuIik7Cit9CisjZWxzZQorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlX2FjY291bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxlICp0KSB7IH0KK3N0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9
CisKK3ZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKK3sKKyAgICBwcmludGYoImNv
bXBpbGUgd2Via2l0IHdpdGggREVCVUdfTUVNX0xFQUtTIGRlZmluZWQhXG4iKTsKK30KKyNlbmRp
ZgorCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAq
dCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKK3sKKyAgICB1aW50MzJfdCAqZHN0
MzIsICpkc3QzMl9lbmQsIGMxOworICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7
CisKKyAgICBjMSA9IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXIgPDwgMTYpIHwgKCh1aW50MzJf
dClnIDw8IDgpIHwgYjsKKyAgICBjMiA9ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7CisKKyAg
ICBkc3Q2NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKKyAgICBkc3Q2NF9lbmQgPSBkc3Q2NCAr
ICgodC0+Ynl0ZXMgLyA4KSAmIH43KTsKKyAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRz
dDY0ICs9IDgpIHsKKyAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVj
dGlvbnMgKi8KKyAgICAgICAgZHN0NjRbMF0gPSBjMjsKKyAgICAgICAgZHN0NjRbMV0gPSBjMjsK
KyAgICAgICAgZHN0NjRbMl0gPSBjMjsKKyAgICAgICAgZHN0NjRbM10gPSBjMjsKKyAgICAgICAg
ZHN0NjRbNF0gPSBjMjsKKyAgICAgICAgZHN0NjRbNV0gPSBjMjsKKyAgICAgICAgZHN0NjRbNl0g
PSBjMjsKKyAgICAgICAgZHN0NjRbN10gPSBjMjsKKyAgICB9CisKKyAgICBkc3QzMiA9ICh1aW50
MzJfdCAqKWRzdDY0X2VuZDsKKyAgICBkc3QzMl9lbmQgPSAodWludDMyX3QgKikodC0+cGl4ZWxz
ICsgdC0+Ynl0ZXMpOworICAgIGZvciAoOyBkc3QzMiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKKyAg
ICAgICAgKmRzdDMyID0gYzE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFp
bnRfcmdiNTY1KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQor
eworICAgIHVpbnQxNl90ICpkc3QxNiwgKmRzdDE2X2VuZCwgYzE7CisgICAgdWludDY0X3QgKmRz
dDY0LCAqZHN0NjRfZW5kLCBjMjsKKworICAgIGMxID0gKCgoKHIgPj4gMykgJiAweDFmKSA8PCAx
MSkgfAorICAgICAgICAgICgoKGcgPj4gMikgJiAweDNmKSA8PCA1KSB8CisgICAgICAgICAgKChi
ID4+IDMpICYgMHgxZikpOworCisgICAgYzIgPSAoKCh1aW50NjRfdCljMSA8PCA0OCkgfCAoKHVp
bnQ2NF90KWMxIDw8IDMyKSB8CisgICAgICAgICAgKCh1aW50NjRfdCljMSA8PCAxNikgfCBjMSk7
CisKKyAgICBkc3Q2NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKKyAgICBkc3Q2NF9lbmQgPSBk
c3Q2NCArICgodC0+Ynl0ZXMgLyA4KSAmIH43KTsKKyAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9l
bmQ7IGRzdDY0ICs9IDgpIHsKKyAgICAgICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBp
bnN0cnVjdGlvbnMgKi8KKyAgICAgICAgZHN0NjRbMF0gPSBjMjsKKyAgICAgICAgZHN0NjRbMV0g
PSBjMjsKKyAgICAgICAgZHN0NjRbMl0gPSBjMjsKKyAgICAgICAgZHN0NjRbM10gPSBjMjsKKyAg
ICAgICAgZHN0NjRbNF0gPSBjMjsKKyAgICAgICAgZHN0NjRbNV0gPSBjMjsKKyAgICAgICAgZHN0
NjRbNl0gPSBjMjsKKyAgICAgICAgZHN0NjRbN10gPSBjMjsKKyAgICB9CisKKyAgICBkc3QxNiA9
ICh1aW50MTZfdCAqKWRzdDE2X2VuZDsKKyAgICBkc3QxNl9lbmQgPSAodWludDE2X3QgKikodC0+
cGl4ZWxzICsgdC0+Ynl0ZXMpOworICAgIGZvciAoOyBkc3QxNiA8IGRzdDE2X2VuZDsgZHN0MTYr
KykKKyAgICAgICAgKmRzdDE2ID0gYzE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3Rp
bGVfcGFpbnQoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCit7
CisgICAgaWYgKHQtPmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpCisgICAgICAg
IF9ld2tfdGlsZV9wYWludF9yZ2I4ODgodCwgciwgZywgYik7CisgICAgZWxzZSBpZiAodC0+Y3Nw
YWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKQorICAgICAgICBfZXdrX3RpbGVfcGFp
bnRfcmdiNTY1KHQsIHIsIGcsIGIpOworICAgIGVsc2UKKyAgICAgICAgRVJSKCJ1bmtub3duIGNv
bG9yIHNwYWNlOiAlZCIsIHQtPmNzcGFjZSk7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgbmV3IHRp
bGUgb2YgZ2l2ZW4gc2l6ZSwgem9vbSBsZXZlbCBhbmQgY29sb3JzcGFjZS4KKyAqCisgKiBBZnRl
ciBjcmVhdGVkIHRoZXNlIHByb3BlcnRpZXMgYXJlIGltbXV0YWJsZSBhcyB0aGV5J3JlIHRoZSBi
YXNpYworICogY2hhcmFjdGVyaXN0aWMgb2YgdGhlIHRpbGUgYW5kIGFueSBjaGFuZ2Ugd2lsbCBs
ZWFkIHRvIGludmFsaWQKKyAqIG1lbW9yeSBhY2Nlc3MuCisgKgorICogT3RoZXIgbWVtYmVycyBh
cmUgb2YgZnJlZS1hY2Nlc3MgYW5kIG5vIGdldHRlcnMvc2V0dGVycyBhcmUKKyAqIHByb3ZpZGVk
IGluIG9yZGVyciB0byBhdm9pZCBleHBlbnNpdmUgb3BlcmF0aW9ucyBvbiB0aG9zZSwgaG93ZXZl
cgorICogc29tZSBhcmUgYmV0dGVyIG1hbmlwdWxhdGVkIHdpdGggcHJvdmlkZWQgZnVuY3Rpb25z
LCBzdWNoIGFzCisgKiBld2tfdGlsZV9zaG93KCkgYW5kIGV3a190aWxlX2hpZGUoKSB0byBjaGFu
Z2UKKyAqIEBjIHZpc2libGUgb3IgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoKSwgZXdrX3RpbGVfdXBk
YXRlX2FyZWEoKSwKKyAqIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSB0byBjaGFuZ2UgQGMgc3Rh
dHMubWlzc2VzLAorICogQGMgc3RhdHMuZnVsbF91cGRhdGUgYW5kIEBjIHVwZGF0ZXMuCisgKi8K
K0V3a19UaWxlICpld2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UpCit7CisgICAgRXZhc19D
b29yZCAqZWM7CisgICAgRXZhc19Db2xvcnNwYWNlICplY3M7CisgICAgZmxvYXQgKmY7CisgICAg
c2l6ZV90ICpzOworICAgIEV3a19UaWxlICp0OworICAgIHVuc2lnbmVkIGludCBhcmVhOworICAg
IHNpemVfdCBieXRlczsKKyAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7CisgICAgY2Fpcm9fc3Rh
dHVzX3Qgc3RhdHVzOworICAgIGludCBzdHJpZGU7CisgICAgRWNvcmVfRXZhcyAqZWU7CisgICAg
Y29uc3QgY2hhciAqZW5naW5lOworCisgICAgYXJlYSA9IHcgKiBoOworCisgICAgaWYgKGNzcGFj
ZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpIHsKKyAgICAgICAgYnl0ZXMgPSBhcmVhICog
NDsKKyAgICAgICAgc3RyaWRlID0gdyAqIDQ7CisgICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1B
VF9BUkdCMzI7CisgICAgfSBlbHNlIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2
NV9BNVApIHsKKyAgICAgICAgYnl0ZXMgPSBhcmVhICogMjsKKyAgICAgICAgc3RyaWRlID0gdyAq
IDI7CisgICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IxNl81NjU7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgRVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAlZCIsIGNzcGFjZSk7CisgICAg
ICAgIHJldHVybiAwOworICAgIH0KKworICAgIERCRygic2l6ZTogJWR4JWQgKCVkKSwgem9vbTog
JWYsIGNzcGFjZT0lZCIsIHcsIGgsIGFyZWEsIChkb3VibGUpem9vbSwgY3NwYWNlKTsKKworICAg
IHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KG1hbGxvYyhzaXplb2YoRXdrX1RpbGUpKSk7Cisg
ICAgaWYgKCF0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHQtPmltYWdlID0gZXZhc19vYmpl
Y3RfaW1hZ2VfYWRkKGV2YXMpOworCisgICAgZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0
KGV2YXMpOworICAgIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVlKTsKKyAg
ICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gxMSIpKQorICAgICAgICBl
dmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHQtPmltYWdlLCBFVkFTX0lNQUdFX0NP
TlRFTlRfSElOVF9EWU5BTUlDKTsKKworICAgIHQtPnZpc2libGUgPSAwOworICAgIHQtPnVwZGF0
ZXMgPSAwOworCisgICAgbWVtc2V0KCZ0LT5zdGF0cywgMCwgc2l6ZW9mKEV3a19UaWxlX1N0YXRz
KSk7CisgICAgdC0+c3RhdHMuYXJlYSA9IGFyZWE7CisKKyAgICAvKiB1Z2x5LCBidXQgbGV0J3Mg
YXZvaWQgYXQgYWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2UgKi8KKyAgICBl
YyA9IChFdmFzX0Nvb3JkICopJnQtPnc7CisgICAgKmVjID0gdzsKKworICAgIGVjID0gKEV2YXNf
Q29vcmQgKikmdC0+aDsKKyAgICAqZWMgPSBoOworCisgICAgZWNzID0gKEV2YXNfQ29sb3JzcGFj
ZSAqKSZ0LT5jc3BhY2U7CisgICAgKmVjcyA9IGNzcGFjZTsKKworICAgIGYgPSAoZmxvYXQgKikm
dC0+em9vbTsKKyAgICAqZiA9IHpvb207CisKKyAgICBzID0gKHNpemVfdCAqKSZ0LT5ieXRlczsK
KyAgICAqcyA9IGJ5dGVzOworCisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQodC0+aW1h
Z2UsIHQtPncsIHQtPmgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3BhY2Vfc2V0KHQt
PmltYWdlLCB0LT5jc3BhY2UpOworICAgIHQtPnBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3Qq
PihldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldCh0LT5pbWFnZSwgRUlOQV9UUlVFKSk7CisgICAg
dC0+c3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHQtPnBpeGVs
cywgZm9ybWF0LCB3LCBoLCBzdHJpZGUpOworICAgIHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3Rh
dHVzKHQtPnN1cmZhY2UpOworICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1Mp
IHsKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwKKyAg
ICAgICAgICAgIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CisgICAgICAgIGZyZWUo
dCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHQtPmNhaXJvID0gY2Fpcm9fY3Jl
YXRlKHQtPnN1cmZhY2UpOworICAgIHN0YXR1cyA9IGNhaXJvX3N0YXR1cyh0LT5jYWlybyk7Cisg
ICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgeworICAgICAgICBFUlIoImZh
aWxlZCB0byBjcmVhdGUgY2Fpcm86ICVzIiwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMp
KTsKKyAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHQtPnN1cmZhY2UpOworICAgICAgICBl
dmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOworICAgICAgICBmcmVlKHQpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisKKyAgICBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQodCk7CisKKyAg
ICByZXR1cm4gdDsKK30KKworLyoqCisgKiBGcmVlIHRpbGUgbWVtb3J5LgorICovCit2b2lkIGV3
a190aWxlX2ZyZWUoRXdrX1RpbGUgKnQpCit7CisgICAgX2V3a190aWxlX2FjY291bnRfZnJlZWQo
dCk7CisKKyAgICBpZiAodC0+dXBkYXRlcykKKyAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVw
ZGF0ZXMpOworCisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHQtPnN1cmZhY2UpOworICAgIGNh
aXJvX2Rlc3Ryb3kodC0+Y2Fpcm8pOworICAgIGV2YXNfb2JqZWN0X2RlbCh0LT5pbWFnZSk7Cisg
ICAgZnJlZSh0KTsKK30KKworLyoqCisgKiBNYWtlIHRoZSB0aWxlIHZpc2libGUsIGluY3JlbWVu
dGluZyBpdHMgY291bnRlci4KKyAqLwordm9pZCBld2tfdGlsZV9zaG93KEV3a19UaWxlICp0KQor
eworICAgIHQtPnZpc2libGUrKzsKKyAgICBldmFzX29iamVjdF9zaG93KHQtPmltYWdlKTsKK30K
KworLyoqCisgKiBEZWNyZW1lbnQgdGhlIHZpc2liaWxpdHkgY291bnRlciwgbWFraW5nIGl0IGlu
dmlzaWJsZSBpZiBuZWNlc3NhcnkuCisgKi8KK3ZvaWQgZXdrX3RpbGVfaGlkZShFd2tfVGlsZSAq
dCkKK3sKKyAgICB0LT52aXNpYmxlLS07CisgICAgaWYgKCF0LT52aXNpYmxlKQorICAgICAgICBl
dmFzX29iamVjdF9oaWRlKHQtPmltYWdlKTsKK30KKworLyoqCisgKiBSZXR1cm5zIEVJTkFfVFJV
RSBpZiB0aGUgdGlsZSBpcyB2aXNpYmxlLCBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRWlu
YV9Cb29sIGV3a190aWxlX3Zpc2libGVfZ2V0KEV3a19UaWxlICp0KQoreworICAgIHJldHVybiAh
IXQtPnZpc2libGU7Cit9CisKKy8qKgorICogTWFyayB3aG9sZSB0aWxlIGFzIGRpcnR5IGFuZCBy
ZXF1aXJpbmcgdXBkYXRlLgorICovCit2b2lkIGV3a190aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxl
ICp0KQoreworICAgIC8qIFRPRE86IGxpc3Qgb2YgdGlsZXMgcGVuZGluZyB1cGRhdGVzPyAqLwor
ICAgIHQtPnN0YXRzLm1pc3NlcysrOworCisgICAgaWYgKCF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkg
eworICAgICAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKKyAgICAgICAgaWYg
KHQtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsK
KyAgICAgICAgICAgIHQtPnVwZGF0ZXMgPSAwOworICAgICAgICB9CisgICAgfQorfQorCisvKioK
KyAqIE1hcmsgdGhlIHNwZWNpZmljIHN1YmFyZWEgYXMgZGlydHkgYW5kIHJlcXVpcmluZyB1cGRh
dGUuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1RpbGUgKnQsIGNvbnN0IEVp
bmFfUmVjdGFuZ2xlICpyKQoreworICAgIC8qIFRPRE86IGxpc3Qgb2YgdGlsZXMgcGVuZGluZyB1
cGRhdGVzPyAqLworICAgIHQtPnN0YXRzLm1pc3NlcysrOworCisgICAgaWYgKHQtPnN0YXRzLmZ1
bGxfdXBkYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXItPnggJiYgIXItPnkgJiYg
ci0+dyA9PSB0LT53ICYmIHItPmggPT0gdC0+aCkgeworICAgICAgICB0LT5zdGF0cy5mdWxsX3Vw
ZGF0ZSA9IEVJTkFfVFJVRTsKKyAgICAgICAgaWYgKHQtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAg
IGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKKyAgICAgICAgICAgIHQtPnVwZGF0ZXMgPSAw
OworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXQtPnVwZGF0
ZXMpIHsKKyAgICAgICAgdC0+dXBkYXRlcyA9IGVpbmFfdGlsZXJfbmV3KHQtPncsIHQtPmgpOwor
ICAgICAgICBpZiAoIXQtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBu
b3QgY3JlYXRlIGVpbmFfdGlsZXIgJWR4JWQuIiwgdC0+dywgdC0+aCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBlaW5hX3RpbGVyX3JlY3RfYWRkKHQtPnVw
ZGF0ZXMsIHIpOworfQorCisvKioKKyAqIEZvciBlYWNoIHVwZGF0ZWQgcmVnaW9uLCBjYWxsIHRo
ZSBnaXZlbiBmdW5jdGlvbi4KKyAqCisgKiBUaGlzIHdpbGwgbm90IGNoYW5nZSB0aGUgdGlsZSBz
dGF0aXN0aWNzIG9yIGNsZWFyIHRoZSBwcm9jZXNzZWQKKyAqIHVwZGF0ZXMsIHVzZSBld2tfdGls
ZV91cGRhdGVzX2NsZWFyKCkgZm9yIHRoYXQuCisgKi8KK3ZvaWQgZXdrX3RpbGVfdXBkYXRlc19w
cm9jZXNzKEV3a19UaWxlICp0LCB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBp
ZiAodC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKKyAgICAgICAgRWluYV9SZWN0YW5nbGUgcjsKKyAg
ICAgICAgci54ID0gMDsKKyAgICAgICAgci55ID0gMDsKKyAgICAgICAgci53ID0gdC0+dzsKKyAg
ICAgICAgci5oID0gdC0+aDsKKyNpZmRlZiBUSUxFX1NUQVRTX0FDQ09VTlRfUkVOREVSX1RJTUUK
KyAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZXY7CisgICAgICAgIGRvdWJsZSByZW5kZXJfc3Rh
cnQ7CisgICAgICAgIGdldHRpbWVvZmRheSgmdGltZXYsIDApOworICAgICAgICByZW5kZXJfc3Rh
cnQgPSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCisgICAgICAgICAgICAoKChkb3VibGUpdGltZXYu
dHZfdXNlYykgLyAxMDAwMDAwKTsKKyNlbmRpZgorICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQs
ICZyKTsKKyNpZmRlZiBUSUxFX1NUQVRTX0FDQ09VTlRfUkVOREVSX1RJTUUKKyAgICAgICAgZ2V0
dGltZW9mZGF5KCZ0aW1ldiwgMCk7CisgICAgICAgIHQtPnN0YXRzLnJlbmRlcl90aW1lID0gKGRv
dWJsZSl0aW1ldi50dl9zZWMgKworICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMp
IC8gMTAwMDAwMCkgLSByZW5kZXJfc3RhcnQ7CisjZW5kaWYKKyAgICB9IGVsc2UgaWYgKHQtPnVw
ZGF0ZXMpIHsKKyAgICAgICAgRWluYV9JdGVyYXRvciAqaXRyID0gZWluYV90aWxlcl9pdGVyYXRv
cl9uZXcodC0+dXBkYXRlcyk7CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlICpyOworICAgICAgICBp
ZiAoIWl0cikgeworICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBjcmVhdGUgdGlsZXIg
aXRlcmF0b3IhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgRUlO
QV9JVEVSQVRPUl9GT1JFQUNIKGl0ciwgcikKKyAgICAgICAgICAgIGNiKCh2b2lkICopZGF0YSwg
dCwgcik7CisgICAgICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdHIpOworICAgIH0KK30KKworLyoq
CisgKiBDbGVhciBhbGwgdXBkYXRlcyBpbiByZWdpb24sIGlmIGFueS4KKyAqCisgKiBUaGlzIHdp
bGwgY2hhbmdlIHRoZSB0aWxlIHN0YXRpc3RpY3MsIHNwZWNpYWxseSB6ZXJvIHN0YXQubWlzc2Vz
CisgKiBhbmQgdW5zZXQgc3RhdHMuZnVsbF91cGRhdGUuIElmIHQtPnVwZGF0ZXMgZXhpc3RlZCwg
dGhlbiBpdCB3aWxsIGJlCisgKiBkZXN0cm95ZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1
c3VhbGx5IGNhbGxlZCBhZnRlciBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3MoKSBpcworICogY2Fs
bGVkLgorICovCit2b2lkIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGUgKnQpCit7Cisg
ICAgLyogVE9ETzogcmVtb3ZlIGZyb20gbGlzdCBvZiBwZW5kaW5nIHVwZGF0ZXM/ICovCisgICAg
dC0+c3RhdHMubWlzc2VzID0gMDsKKworICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAg
ICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSAwOworICAgIGVsc2UgaWYgKHQtPnVwZGF0ZXMp
IHsKKyAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOworICAgICAgICB0LT51cGRh
dGVzID0gMDsKKyAgICB9Cit9CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2Fj
aGVfRW50cnkgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Oworc3RydWN0IF9Fd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkgeworICAgIEV3a19UaWxlICp0aWxlOworICAgIGludCB3ZWlnaHQ7
CisgICAgc3RydWN0IHsKKyAgICAgICAgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAq
dCk7CisgICAgICAgIHZvaWQgKmRhdGE7CisgICAgfSB0aWxlX2ZyZWU7Cit9OworCitzdHJ1Y3Qg
X0V3a19UaWxlX1VudXNlZF9DYWNoZSB7CisgICAgc3RydWN0IHsKKyAgICAgICAgRWluYV9MaXN0
ICpsaXN0OworICAgICAgICBzaXplX3QgY291bnQ7CisgICAgICAgIHNpemVfdCBhbGxvY2F0ZWQ7
CisgICAgfSBlbnRyaWVzOworICAgIHN0cnVjdCB7CisgICAgICAgIHNpemVfdCBtYXg7ICAvKio8
IHdhdGVybWFyayAoaW4gYnl0ZXMpIHRvIHN0YXJ0IGZyZWVpbmcgdGlsZXMgKi8KKyAgICAgICAg
c2l6ZV90IHVzZWQ7IC8qKjwgaW4gYnl0ZXMsIG1heWJlIG1vcmUgdGhhbiBtYXguICovCisgICAg
fSBtZW1vcnk7CisgICAgc3RydWN0IHsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwor
ICAgICAgICBmbG9hdCB6b29tOworICAgICAgICBFaW5hX0Jvb2wgbG9ja2VkOworICAgIH0gbG9j
a2VkOworICAgIGludCByZWZlcmVuY2VzOworICAgIHVuc2lnbmVkIGludCBmcm96ZW47Cit9Owor
CitzdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX0FMTE9DQVRFX0lOSVRJQUwg
PSAxMjg7CitzdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX0FMTE9DQVRFX1NU
RVAgPSAxNjsKK3N0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURfQ0FDSEVfTUFYX0ZSRUUg
PSAzMjsKKworLyoqCisgKiBDYWNoZSBvZiB1bnVzZWQgdGlsZXMgKHRob3NlIHRoYXQgYXJlIG5v
dCB2aXNpYmxlKS4KKyAqCisgKiBUaGUgY2FjaGUgb2YgdW51c2VkIHRpbGVzLgorICoKKyAqIEBw
YXJhbSBtYXggY2FjaGUgc2l6ZSBpbiBieXRlcy4KKyAqCisgKiBAcmV0dXJuIG5ld2x5IGFsbG9j
YXRlZCBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIHVzZQorICogICAgICAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfZnJlZSgpIHRvIHJlbGVhc2UgcmVzb3VyY2VzLiBJZiBub3QKKyAqICAgICAgICAg
cG9zc2libGUgdG8gYWxsb2NhdGUgbWVtb3J5LCBAYyAwIGlzIHJldHVybmVkLgorICovCitFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoc2l6ZV90IG1heCkK
K3sKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKworICAgIHR1YyA9IHN0YXRpY19j
YXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1RpbGVfVW51
c2VkX0NhY2hlKSkpOworICAgIGlmICghdHVjKQorICAgICAgICByZXR1cm4gMDsKKworICAgIERC
RygidHVjPSVwIiwgdHVjKTsKKyAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7CisgICAgdHVjLT5y
ZWZlcmVuY2VzID0gMTsKKyAgICByZXR1cm4gdHVjOworfQorCit2b2lkIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkK
K3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOworCisgICAgdHVjLT5sb2Nr
ZWQubG9ja2VkID0gRUlOQV9UUlVFOworICAgIHR1Yy0+bG9ja2VkLnggPSB4OworICAgIHR1Yy0+
bG9ja2VkLnkgPSB5OworICAgIHR1Yy0+bG9ja2VkLncgPSB3OworICAgIHR1Yy0+bG9ja2VkLmgg
PSBoOworICAgIHR1Yy0+bG9ja2VkLnpvb20gPSB6b29tOworfQorCit2b2lkIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOworCisgICAgdHVjLT5sb2NrZWQubG9j
a2VkID0gRUlOQV9GQUxTRTsKK30KKworLyoqCisgKiBGcmVlIGNhY2hlIG9mIHVudXNlZCB0aWxl
cy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBvbmx5IGNhbGxlZCBieSBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5yZWYKKyAqIGZ1bmN0aW9uLiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24g
d2l0aG91dCBjb25zaWRlcmluZyByZWZlcmVuY2UgY291bnRpbmcKKyAqIG1heSBsZWFkIHRvIHVu
a25vd24gcmVzdWx0cy4KKyAqCisgKiBUaG9zZSB0aWxlcyB0aGF0IGFyZSBzdGlsbCB2aXNpYmxl
IHdpbGwgcmVtYWluIGxpdmUuIFRoZSB1bnVzZWQKKyAqIHRpbGVzIHdpbGwgYmUgZnJlZWQuCisg
KgorICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQorICovCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMp
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIERCRygidHVj
PSVwLCAiCisgICAgICAgICJlbnRyaWVzPShjb3VudDolemQsIGFsbG9jYXRlZDolemQpLCAiCisg
ICAgICAgICJtZW1vcnk9KG1heDolemQsIHVzZWQ6JXpkKSIsCisgICAgICAgIHR1YywgdHVjLT5l
bnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAorICAgICAgICB0dWMtPm1lbW9y
eS5tYXgsIHR1Yy0+bWVtb3J5LnVzZWQpOworCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Ns
ZWFyKHR1Yyk7CisgICAgZnJlZSh0dWMpOworfQorCisvKioKKyAqIENsZWFyIGNhY2hlIG9mIHVu
dXNlZCB0aWxlcy4KKyAqCisgKiBBbnkgdGlsZXMgdGhhdCBhcmUgaW4gdGhlIGNhY2hlIGFyZSBm
cmVlZC4gVGhlIG9ubHkgdGlsZXMgdGhhdCBhcmUKKyAqIGtlcHQgYXJlIHRob3NlIHRoYXQgYXJl
bid0IGluIHRoZSBjYWNoZSAoaS5lLiB0aGF0IGFyZSB2aXNpYmxlKS4KKyAqLwordm9pZCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKworICAgIGlmICghdHVjLT5lbnRy
aWVzLmNvdW50KQorICAgICAgICByZXR1cm47CisKKyAgICB2b2lkKiBpdGVtOworICAgIEVJTkFf
TElTVF9GUkVFKHR1Yy0+ZW50cmllcy5saXN0LCBpdGVtKSB7CisgICAgICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZV9FbnRyeSogaXRyID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5Kj4oaXRlbSk7CisgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVl
LmRhdGEsIGl0ci0+dGlsZSk7CisgICAgICAgIGZyZWUoaXRyKTsKKyAgICB9CisKKyAgICB0dWMt
Pm1lbW9yeS51c2VkID0gMDsKKyAgICB0dWMtPmVudHJpZXMuY291bnQgPSAwOworfQorCisvKioK
KyAqIEhvbGQgcmVmZXJlbmNlIHRvIGNhY2hlLgorICoKKyAqIEByZXR1cm4gc2FtZSBwb2ludGVy
IGFzIHRha2VuLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKKyAq
LworRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTCh0dWMsIDApOworICAgIHR1Yy0+cmVmZXJlbmNlcysrOworICAgIHJldHVybiB0dWM7Cit9
CisKKy8qKgorICogUmVsZWFzZSBjYWNoZSByZWZlcmVuY2UsIGZyZWVpbmcgaXQgaWYgaXQgZHJv
cHMgdG8gemVyby4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoKQorICog
QHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpCisgKi8KK3ZvaWQgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisgICAgdHVjLT5yZWZlcmVuY2VzLS07CisgICAg
aWYgKCF0dWMtPnJlZmVyZW5jZXMpCisgICAgICAgIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJl
ZSh0dWMpOworfQorCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgbWF4KQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHR1Yyk7CisgICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4OworfQorCitzaXplX3Qg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Cisg
ICAgcmV0dXJuIHR1Yy0+bWVtb3J5Lm1heDsKK30KKworc2l6ZV90IGV3a190aWxlX3VudXNlZF9j
YWNoZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKKyAgICByZXR1cm4gdHVjLT5t
ZW1vcnkudXNlZDsKK30KKworc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQoreworICAgIEVpbmFfTGlzdCAq
bCwgKmxfbmV4dDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsK
KyAgICBzaXplX3QgZG9uZTsKKyAgICB1bnNpZ25lZCBpbnQgY291bnQ7CisKKyAgICBpZiAoIXR1
Yy0+ZW50cmllcy5jb3VudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGJ5dGVzIDwgMSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKgorICAgICAqIE5PVEU6IHRoZSBjYWNoZSBpcyBh
IEZJRk8gcXVldWUgY3VycmVudGx5LgorICAgICAqIERvbid0IG5lZWQgdG8gc29ydCBhbnkgbW9y
ZS4KKyAgICAgKi8KKworICAgIHZvaWQqIGl0ZW07CisgICAgZG9uZSA9IDA7CisgICAgY291bnQg
PSAwOworICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodHVjLT5lbnRyaWVzLmxpc3QsIGwsIGxf
bmV4dCwgaXRlbSkgeworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGl0ciA9
IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOworICAgICAg
ICBFd2tfVGlsZSAqdCA9IGl0ci0+dGlsZTsKKyAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHVjLT5sb2NrZWQubG9ja2VkCisgICAgICAg
ICAgICAmJiB0LT54ICsgdC0+dyA+IHR1Yy0+bG9ja2VkLngKKyAgICAgICAgICAgICYmIHQtPnkg
KyB0LT5oID4gdHVjLT5sb2NrZWQueQorICAgICAgICAgICAgJiYgdC0+eCA8IHR1Yy0+bG9ja2Vk
LnggKyB0dWMtPmxvY2tlZC53CisgICAgICAgICAgICAmJiB0LT55IDwgdHVjLT5sb2NrZWQueSAr
IHR1Yy0+bG9ja2VkLmgKKyAgICAgICAgICAgICYmIHQtPnpvb20gPT0gdHVjLT5sb2NrZWQuem9v
bSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZG9uZSArPSBz
aXplb2YoRXdrX1RpbGUpICsgaXRyLT50aWxlLT5ieXRlczsKKyAgICAgICAgaXRyLT50aWxlX2Zy
ZWUuY2IoaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKKyAgICAgICAgdHVjLT5lbnRy
aWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGwpOwor
ICAgICAgICBmcmVlKGl0cik7CisgICAgICAgIGNvdW50Kys7CisgICAgfQorCisgICAgdHVjLT5t
ZW1vcnkudXNlZCAtPSBkb25lOworICAgIHR1Yy0+ZW50cmllcy5jb3VudCAtPSBjb3VudDsKKwor
ICAgIHJldHVybiBkb25lOworfQorCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2Zs
dXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHR1Yyk7CisgICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPD0gdHVjLT5tZW1vcnku
bWF4KQorICAgICAgICByZXR1cm47CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKHR1
YywgdHVjLT5tZW1vcnkudXNlZCAtIHR1Yy0+bWVtb3J5Lm1heCk7CisgICAgaWYgKHR1Yy0+bWVt
b3J5LnVzZWQgPiB0dWMtPm1lbW9yeS5tYXgpCisgICAgICAgIENSSVRJQ0FMKCJDYWNoZSBzdGls
bCB1c2luZyB0b28gbXVjaCBtZW1vcnk6ICV6ZCBLQjsgbWF4OiAlemQgS0IiLAorICAgICAgICAg
ICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOworfQorCisvKioKKyAq
IEZyZWV6ZSBjYWNoZSB0byBub3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCisgKgorICogTWFpbnRl
bmFuY2UgdGFza3Mgb3B0aW1pemUgY2FjaGUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93IHdlIHNo
b3VsZAorICogaG9sZCBvbiB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4g
dGhpcyBjYXNlIHdlIGZyZWV6ZQorICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRoYXcgd2hl
biB3ZSdyZSBkb25lLgorICoKKyAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoKQor
ICovCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWMpCit7CisgICAgdHVjLT5mcm96ZW4rKzsKK30KKworLyoqCisgKiBVbmZyZWV6ZXMg
bWFpbnRlbmFuY2UgdGFza3MuCisgKgorICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFy
dCBvZiBmcmVlemUsIHRoZW4gbWFpbnRlbmFuY2UgdGFza3MKKyAqIHdpbGwgcnVuIGltbWVkaWF0
ZWx5LgorICovCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjKQoreworICAgIGlmICghdHVjLT5mcm96ZW4pIHsKKyAgICAgICAgRVJSKCJ0
aGF3aW5nIG1vcmUgdGhhbiBmcmVlemluZyEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHR1Yy0+ZnJvemVuLS07Cit9CisKKy8qKgorICogR2V0IHRpbGUgZnJvbSBjYWNoZSBvZiB1
bnVzZWQgdGlsZXMsIHJlbW92aW5nIGl0IGZyb20gdGhlIGNhY2hlLgorICoKKyAqIElmIHRoZSB0
aWxlIGlzIHVzZWQsIHRoZW4gaXQncyBub3QgaW4gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCBzbyBp
dAorICogaXMgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZSBhbmQgbWF5IGJlIGdpdmVuIGJhY2sgd2l0
aAorICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KCkuCisgKgorICogQHBhcmFtIHR1
YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMKKyAqIEBwYXJhbSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92
ZWQgZnJvbSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUuCisgKgorICogQHJldHVybiAjRUlOQV9UUlVF
IG9uIHN1Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRWluYV9Cb29sIGV3a190
aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdr
X1RpbGUgKnQpCit7CisgICAgRWluYV9MaXN0ICplLCAqbDsKKworICAgIHZvaWQqIGl0ZW07Cisg
ICAgZSA9IDA7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0
ZW0pIHsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBlbnRyeSA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOworICAgICAgICBpZiAo
ZW50cnktPnRpbGUgPT0gdCkgeworICAgICAgICAgICAgZSA9IGw7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWUpIHsKKyAgICAgICAgRVJSKCJ0aWxlICVw
IG5vdCBmb3VuZCBpbiBjYWNoZSAlcCIsIHQsIHR1Yyk7CisgICAgICAgIHJldHVybiBFSU5BX0ZB
TFNFOworICAgIH0KKworICAgIHR1Yy0+ZW50cmllcy5jb3VudC0tOworICAgIHR1Yy0+bWVtb3J5
LnVzZWQgLT0gc2l6ZW9mKEV3a19UaWxlKSArIHQtPmJ5dGVzOworICAgIHR1Yy0+ZW50cmllcy5s
aXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKKyAgICBm
cmVlKGl0ZW0pOworCisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30KKworLyoqCisgKiBQdXQgdGls
ZSBpbnRvIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgYWRkaW5nIGl0IHRvIHRoZSBjYWNoZS4KKyAq
CisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBAYyB0LT52aXNpYmxlIGlzIEBjIDAgYW5k
IG5vIG9iamVjdHMgYXJlCisgKiB1c2luZyB0aGUgdGlsZSBhbnltb3JlLCBtYWtpbmcgaXQgYXZh
aWxhYmxlIHRvIGJlIGV4cGlyZWQgYW5kIGhhdmUKKyAqIGl0cyBtZW1vcnkgcmVwbGFjZWQuCisg
KgorICogTm90ZSB0aGF0IHRpbGVzIGFyZSBub3QgYXV0b21hdGljYWxseSBkZWxldGVkIGlmIGNh
Y2hlIGlzIGZ1bGwsCisgKiBpbnN0ZWFkIHRoZSBjYWNoZSB3aWxsIGhhdmUgbW9yZSBieXRlcyB1
c2VkIHRoYW4gbWF4aW11bSBhbmQgb25lCisgKiBjYW4gY2FsbCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfYXV0b19mbHVzaCgpIHRvIGZyZWUgdGhlbS4gVGhpcyBpcyBkb25lCisgKiBiZWNhdXNlIHVz
dWFsbHkgd2Ugd2FudCBhIGxhenkgb3BlcmF0aW9uIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCisg
KgorICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQgdGlsZXMKKyAqIEBwYXJhbSB0IHRpbGUg
dG8gYmUgYWRkZWQgdG8gY2FjaGUuCisgKiBAcGFyYW0gdGlsZV9mcmVlX2NiIGZ1bmN0aW9uIHVz
ZWQgdG8gZnJlZSB0aWxlcy4KKyAqIEBwYXJhbSBkYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNrIHRv
IEBhIHRpbGVfZnJlZV9jYiBhcyBmaXJzdCBhcmd1bWVudC4KKyAqCisgKiBAcmV0dXJuICNFSU5B
X1RSVUUgb24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLiBJZiBAYyB0LT52aXNpYmxl
CisgKiAgICAgICAgIGlzIG5vdCAjRUlOQV9GQUxTRSwgdGhlbiBpdCB3aWxsIHJldHVybiAjRUlO
QV9GQUxTRS4KKyAqCisgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkK
KyAqLworRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQsIHZvaWQgKCp0aWxlX2ZyZWVfY2IpKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0KSwgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKyAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkgKmU7CisKKyAgICBpZiAodC0+dmlzaWJsZSkgeworICAgICAgICBF
UlIoInRpbGU9JXAgaXMgbm90IHVudXNlZCAodmlzaWJsZT0lZCkiLCB0LCB0LT52aXNpYmxlKTsK
KyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgZSA9IHN0YXRpY19jYXN0
PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KG1hbGxvYyhzaXplb2YoRXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5KSkpOworICAgIGlmICghZSkKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CisKKyAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQodHVjLT5lbnRy
aWVzLmxpc3QsIGUpOworICAgIGlmIChlaW5hX2Vycm9yX2dldCgpKSB7CisgICAgICAgIEVSUigi
TGlzdCBhbGxvY2F0aW9uIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAg
ICB9CisKKyAgICBlLT50aWxlID0gdDsKKyAgICBlLT53ZWlnaHQgPSAwOyAvKiBjYWxjdWxhdGVk
IGp1c3QgYmVmb3JlIHNvcnQgKi8KKyAgICBlLT50aWxlX2ZyZWUuY2IgPSB0aWxlX2ZyZWVfY2I7
CisgICAgZS0+dGlsZV9mcmVlLmRhdGEgPSAodm9pZCAqKWRhdGE7CisKKyAgICB0dWMtPmVudHJp
ZXMuY291bnQrKzsKKyAgICB0dWMtPm1lbW9yeS51c2VkICs9IHNpemVvZihFd2tfVGlsZSkgKyB0
LT5ieXRlczsKKworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKK3ZvaWQgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2RiZyhjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3sKKyAgICB2
b2lkKiBpdGVtOworICAgIEVpbmFfTGlzdCAqbDsKKyAgICBpbnQgY291bnQgPSAwOworICAgIHBy
aW50ZigiQ2FjaGUgb2YgdW51c2VkIHRpbGVzOiBlbnRyaWVzOiAlenUvJXp1LCBtZW1vcnk6ICV6
dS8lenVcbiIsCisgICAgICAgICAgIHR1Yy0+ZW50cmllcy5jb3VudCwgdHVjLT5lbnRyaWVzLmFs
bG9jYXRlZCwKKyAgICAgICAgICAgdHVjLT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4KTsK
KworICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7Cisg
ICAgICAgIGNvbnN0IEV3a19UaWxlICp0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0Nh
Y2hlX0VudHJ5Kj4oaXRlbSktPnRpbGU7CisgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAl
ZHglZCBAICUwLjNmXSVjIiwKKyAgICAgICAgICAgICAgIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0
LT5oLCB0LT56b29tLAorICAgICAgICAgICAgICAgdC0+dmlzaWJsZSA/ICcqJzogJyAnKTsKKwor
ICAgICAgICBpZiAoIShjb3VudCAlIDQpKQorICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAg
IH0KKworICAgIHByaW50ZigiXG4iKTsKK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>