<?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>65849</bug_id>
          
          <creation_ts>2011-08-08 04:25:46 -0700</creation_ts>
          <short_desc>[Meta] Spell-checking should share the unified text checker path.</short_desc>
          <delta_ts>2012-08-29 23:33:54 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></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>72929</dependson>
    
    <dependson>45438</dependson>
    
    <dependson>69128</dependson>
    
    <dependson>70299</dependson>
          <blocked>71991</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hajime Morrita">morrita</reporter>
          <assigned_to name="Shinya Kawanaka">shinyak</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>g.czajkowski</cc>
    
    <cc>gustavo</cc>
    
    <cc>jiapu.mail</cc>
    
    <cc>rniwa</cc>
    
    <cc>shinyak</cc>
    
    <cc>shinyak</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>447939</commentid>
    <comment_count>0</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-08-08 04:25:46 -0700</bug_when>
    <thetext>Editor class has two different code paths for spell-checking:
One is for (A) using checkSpellingOfString() and checkGrammarOfString(), 
another is for (B) using  checkTextOfParagraph(), the unified text checker available for Mac OS SL or later.
Having this completely different code paths makes it hard to modify spellchecking code.

We could eliminate &quot;A&quot; by providing checkTextOfParagraph() equivalent
which only uses checkSpellingOfString() and checkGrammarOfString().
This emulation doesn&apos;t need to be perfect because current &quot;A&quot; behavior 
is subset of &quot;B&quot; anyway.

Such change would hugely simplify spellchecking code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447940</commentid>
    <comment_count>1</comment_count>
      <attachid>103228</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-08-08 04:33:29 -0700</bug_when>
    <thetext>Created attachment 103228
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447942</commentid>
    <comment_count>2</comment_count>
      <attachid>103228</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-08 04:43:20 -0700</bug_when>
    <thetext>Comment on attachment 103228
WIP

Attachment 103228 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9329784</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447944</commentid>
    <comment_count>3</comment_count>
      <attachid>103228</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-08 04:44:54 -0700</bug_when>
    <thetext>Comment on attachment 103228
WIP

Attachment 103228 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9323976</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447948</commentid>
    <comment_count>4</comment_count>
      <attachid>103228</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-08-08 04:56:37 -0700</bug_when>
    <thetext>Comment on attachment 103228
WIP

Attachment 103228 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9325949</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447950</commentid>
    <comment_count>5</comment_count>
      <attachid>103228</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-08 05:03:45 -0700</bug_when>
    <thetext>Comment on attachment 103228
WIP

Attachment 103228 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9328806

New failing tests:
editing/pasteboard/merge-end-blockquote.html
editing/deleting/delete-block-contents-003.html
editing/pasteboard/merge-after-delete-2.html
editing/pasteboard/merge-after-delete.html
editing/pasteboard/merge-end-table.html
editing/spelling/spelling-backspace-between-lines.html
editing/selection/5234383-1.html
editing/deleting/delete-ws-fixup-002.html
editing/pasteboard/merge-end-list.html
editing/selection/5234383-2.html
editing/inserting/insert-div-016.html
editing/selection/move-backwords-by-word-001.html
editing/pasteboard/merge-after-delete-1.html
editing/spelling/spelling-attribute-change.html
editing/inserting/insert-div-018.html
editing/spelling/inline_spelling_markers.html
editing/selection/13804.html
editing/spelling/spelling-linebreak.html
editing/spelling/spelling.html
editing/deleting/delete-ws-fixup-001.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448001</commentid>
    <comment_count>6</comment_count>
      <attachid>103228</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-08 08:09:10 -0700</bug_when>
    <thetext>Comment on attachment 103228
WIP

Attachment 103228 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9331131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455185</commentid>
    <comment_count>7</comment_count>
      <attachid>104787</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-08-22 21:13:13 -0700</bug_when>
    <thetext>Created attachment 104787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455186</commentid>
    <comment_count>8</comment_count>
      <attachid>104787</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-22 21:22:53 -0700</bug_when>
    <thetext>Comment on attachment 104787
Patch

Attachment 104787 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9482033</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455187</commentid>
    <comment_count>9</comment_count>
      <attachid>104787</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-22 21:24:58 -0700</bug_when>
    <thetext>Comment on attachment 104787
Patch

Attachment 104787 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9481083</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455191</commentid>
    <comment_count>10</comment_count>
      <attachid>104787</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-22 21:51:38 -0700</bug_when>
    <thetext>Comment on attachment 104787
Patch

Attachment 104787 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9482036</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455195</commentid>
    <comment_count>11</comment_count>
      <attachid>104789</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-08-22 22:37:34 -0700</bug_when>
    <thetext>Created attachment 104789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455198</commentid>
    <comment_count>12</comment_count>
      <attachid>104789</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-22 22:47:42 -0700</bug_when>
    <thetext>Comment on attachment 104789
Patch

Attachment 104789 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9475235</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455199</commentid>
    <comment_count>13</comment_count>
      <attachid>104789</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-22 22:50:03 -0700</bug_when>
    <thetext>Comment on attachment 104789
Patch

Attachment 104789 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9477148</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455216</commentid>
    <comment_count>14</comment_count>
      <attachid>104793</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-08-22 23:50:14 -0700</bug_when>
    <thetext>Created attachment 104793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455270</commentid>
    <comment_count>15</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-08-23 02:24:48 -0700</bug_when>
    <thetext>It&apos;s almost green and ready to review!

This change looks large at a glance. But it&apos;s almost about removing the redundant code.
What essentially new is TextCheckingHelper::checkTextOfParagraph().</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103228</attachid>
            <date>2011-08-08 04:33:29 -0700</date>
            <delta_ts>2011-08-22 21:13:07 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-65849-20110808203328.patch</filename>
            <type>text/plain</type>
            <size>35220</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTI1ODIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlNTc2MWI1MDI3NGE1NmNj
ODQ4YjZiZTgwY2VmYWFkOGZiYmQ0NmJhLi5iYTY1Yjg0NDUzNjY5ZmE5NzQyYmJkYTc1MTVhN2Zm
OTcyNjk0MGZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDgtMDggIE1PUklU
QSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgU3BlbGwtY2hlY2tpbmcg
c2hvdWxkIHNoYXJlIHRoZSB1bmlmaWVkIHRleHQgY2hlY2tlciBwYXRoLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NDkKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXSVAuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5n
ZUJhY2tUb1JlcGxhY2VkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6Cisg
ICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVs
bGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEJhZEdyYW1t
YXJzKTogQWRkZWQKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRNaXNzcGVsbGluZ3MpOiBBZGRlZAor
ICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpjaGVja1RleHRPZlBhcmFncmFw
aCk6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaDoKKwogMjAxMS0wOC0w
NyAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBTb3J0IFdl
YkNvcmUueGNvZGVwcm9qCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggNGZkOTA1NzFi
ZGIxNTYzYmEwMzAxN2MxZmQyYmYxYWI4YjMxZDE4Ni4uMmVkOGU5ZjNjYmYzNmU3YzE2NGY4N2Q0
MWM1M2FkYTgyNTUyNjc3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTcyNCw3
ICsxNzI0LDYgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0
YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlOwogICAgIFN0
cmluZyBtaXNzcGVsbGVkV29yZDsKIAotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAg
ICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShl
Yyk7CiAgICAgYm9vbCBpc1NwZWxsaW5nID0gdHJ1ZTsKICAgICBpbnQgZm91bmRPZmZzZXQgPSAw
OwpAQCAtMTczNiwyNCArMTczNSw2IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3Bl
bGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgYmFkR3JhbW1hclBocmFz
ZSA9IGZvdW5kSXRlbTsKICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0
OwogICAgIH0KLSNlbHNlCi0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7
Ci0gICAgbWlzc3BlbGxlZFdvcmQgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHNwZWxs
aW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5nKG1pc3NwZWxsaW5nT2Zmc2V0LCBm
YWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKLQotI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5H
KQotICAgIC8vIFNlYXJjaCBmb3IgYmFkIGdyYW1tYXIgdGhhdCBvY2N1cnMgcHJpb3IgdG8gdGhl
IG5leHQgbWlzc3BlbGxlZCB3b3JkIChpZiBhbnkpCi0gICAgZ3JhbW1hclNlYXJjaFJhbmdlID0g
c3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgaWYgKCFtaXNzcGVsbGVk
V29yZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5l
eHQgbWlzc3BlbGxlZCB3b3JkCi0gICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNoYXJzKGdyYW1t
YXJTZWFyY2hSYW5nZS5nZXQoKSk7Ci0gICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdP
ZmZzZXQpOwotICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgp
LT5zdGFydENvbnRhaW5lcihlYyksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGVjKSwgZWMp
OwotICAgIH0KLSAgICAKLSAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAg
ICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIGdyYW1t
YXJTZWFyY2hSYW5nZSkuZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFy
UGhyYXNlT2Zmc2V0LCBmYWxzZSk7Ci0jZW5kaWYKLSNlbmRpZgogICAgIAogICAgIC8vIElmIHdl
IGZvdW5kIG5laXRoZXIgYmFkIGdyYW1tYXIgbm9yIGEgbWlzc3BlbGxlZCB3b3JkLCB3cmFwIGFu
ZCB0cnkgYWdhaW4gKGJ1dCBkb24ndCBib3RoZXIgaWYgd2Ugc3RhcnRlZCBhdCB0aGUgYmVnaW5u
aW5nIG9mIHRoZQogICAgIC8vIGJsb2NrIHJhdGhlciB0aGFuIGF0IGEgc2VsZWN0aW9uKS4KQEAg
LTE3NjIsNyArMTc0Myw2IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmco
Ym9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgLy8gZ29pbmcgdW50aWwgdGhlIGVu
ZCBvZiB0aGUgdmVyeSBmaXJzdCBjaHVuayB3ZSB0ZXN0ZWQgaXMgZmFyIGVub3VnaAogICAgICAg
ICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRFbmQoc2VhcmNoRW5kTm9kZUFmdGVyV3JhcCwgc2Vh
cmNoRW5kT2Zmc2V0QWZ0ZXJXcmFwLCBlYyk7CiAgICAgICAgIAotI2lmIFVTRShVTklGSUVEX1RF
WFRfQ0hFQ0tJTkcpCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNo
UmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwogICAgICAgICBmb3VuZEl0ZW0gPSBUZXh0Q2hlY2tpbmdI
ZWxwZXIoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxsaW5n
T3JCYWRHcmFtbWFyKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBpc1NwZWxsaW5nLCBmb3Vu
ZE9mZnNldCwgZ3JhbW1hckRldGFpbCk7CiAgICAgICAgIGlmIChpc1NwZWxsaW5nKSB7CkBAIC0x
NzcyLDIyICsxNzUyLDYgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhi
b29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9
IGZvdW5kSXRlbTsKICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNl
dDsKICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgbWlzc3BlbGxlZFdvcmQgPSBUZXh0Q2hlY2tp
bmdIZWxwZXIoY2xpZW50KCksIHNwZWxsaW5nU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdE1pc3NwZWxs
aW5nKG1pc3NwZWxsaW5nT2Zmc2V0LCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKLQot
I2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBz
cGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICAgICAgaWYgKCFtaXNzcGVs
bGVkV29yZC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBzdGFy
dCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAotICAgICAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3Ig
Y2hhcnMoZ3JhbW1hclNlYXJjaFJhbmdlLmdldCgpKTsKLSAgICAgICAgICAgIGNoYXJzLmFkdmFu
Y2UobWlzc3BlbGxpbmdPZmZzZXQpOwotICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5z
ZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMpLCBjaGFycy5yYW5nZSgpLT5z
dGFydE9mZnNldChlYyksIGVjKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hl
Y2tpbmdIZWxwZXIoY2xpZW50KCksIGdyYW1tYXJTZWFyY2hSYW5nZSkuZmluZEZpcnN0QmFkR3Jh
bW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7Ci0jZW5kaWYK
LSNlbmRpZgogICAgIH0KICAgICAKICAgICBpZiAoIWJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgp
KSB7CkBAIC0xODE5LDkyICsxNzgzLDEyIEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlz
c3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICB9CiB9CiAKLWJvb2wgRWRp
dG9yOjppc1NlbGVjdGlvbk1pc3NwZWxsZWQoKQotewotICAgIFN0cmluZyBzZWxlY3RlZFN0cmlu
ZyA9IHNlbGVjdGVkVGV4dCgpOwotICAgIGludCBsZW5ndGggPSBzZWxlY3RlZFN0cmluZy5sZW5n
dGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KCFjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGludCBtaXNzcGVs
bGluZ0xvY2F0aW9uID0gLTE7Ci0gICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICB0
ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoc2VsZWN0ZWRTdHJpbmcuY2hhcmFj
dGVycygpLCBsZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgp
OwotICAgIAotICAgIC8vIFRoZSBzZWxlY3Rpb24gb25seSBjb3VudHMgYXMgbWlzc3BlbGxlZCBp
ZiB0aGUgc2VsZWN0ZWQgdGV4dCBpcyBleGFjdGx5IG9uZSBtaXNzcGVsbGVkIHdvcmQKLSAgICBp
ZiAobWlzc3BlbGxpbmdMZW5ndGggIT0gbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgLy8gVXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRo
aXMgZXJyb3IgKHdoZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4p
LgotICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8g
W05TU3BlbGxDaGVja2VyIGlnbm9yZVdvcmQ6aW5TcGVsbERvY3VtZW50V2l0aFRhZzpdIHdvcmsK
LSAgICAvLyBjb3JyZWN0bHk7IHRoYXQgY2FsbCBiZWhhdmVzIGRpZmZlcmVudGx5IGJhc2VkIG9u
IHdoZXRoZXIgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIGRpc3BsYXlpbmcgYSBtaXNzcGVsbGluZwot
ICAgIC8vIG9yIGEgZ3JhbW1hciBlcnJvci4KLSAgICBjbGllbnQoKS0+dXBkYXRlU3BlbGxpbmdV
SVdpdGhNaXNzcGVsbGVkV29yZChzZWxlY3RlZFN0cmluZyk7Ci0gICAgCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgRWRpdG9yOjppc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKQotewotI2lm
IFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIFZlY3RvcjxTdHJpbmc+IGlnbm9yZWRHdWVzc2Vz
OwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3Jt
YWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmlzVW5ncmFtbWF0
aWNhbChpZ25vcmVkR3Vlc3Nlcyk7Ci0jZWxzZQotICAgIHJldHVybiBmYWxzZTsKLSNlbmRpZgot
fQotCi1WZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0
aW9uKCkKLXsKLSNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICBWZWN0b3I8U3RyaW5nPiBn
dWVzc2VzOwotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+
dG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZ3Vl
c3NlczsKLSAgICAvLyBJZ25vcmUgdGhlIHJlc3VsdCBvZiBpc1VuZ3JhbW1hdGljYWw7IHdlIGp1
c3Qgd2FudCB0aGUgZ3Vlc3Nlcywgd2hldGhlciBvciBub3QgdGhlcmUgYXJlIGFueQotICAgIFRl
eHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmlzVW5ncmFtbWF0aWNhbChndWVzc2Vz
KTsKLSAgICByZXR1cm4gZ3Vlc3NlczsKLSNlbHNlCi0gICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+
KCk7Ci0jZW5kaWYKLX0KLQotVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3Bl
bGxlZFNlbGVjdGlvbigpCi17Ci0gICAgU3RyaW5nIHNlbGVjdGVkU3RyaW5nID0gc2VsZWN0ZWRU
ZXh0KCk7Ci0gICAgQVNTRVJUKHNlbGVjdGVkU3RyaW5nLmxlbmd0aCgpKTsKLQotICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXM7Ci0gICAgaWYgKGNsaWVudCgpKQotICAgICAgICB0ZXh0Q2hlY2tl
cigpLT5nZXRHdWVzc2VzRm9yV29yZChzZWxlY3RlZFN0cmluZywgU3RyaW5nKCksIGd1ZXNzZXMp
OwotICAgIHJldHVybiBndWVzc2VzOwotfQotCiBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNz
ZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxsZWQs
IGJvb2wmIHVuZ3JhbW1hdGljYWwpCiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykK
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIFZlY3RvcjxTdHJp
bmc+KCk7CiAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1
ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1hdGljYWwpOwotI2Vsc2UKLSAgICBtaXNzcGVs
bGVkID0gaXNTZWxlY3Rpb25NaXNzcGVsbGVkKCk7Ci0gICAgaWYgKG1pc3NwZWxsZWQpIHsKLSAg
ICAgICAgdW5ncmFtbWF0aWNhbCA9IGZhbHNlOwotICAgICAgICByZXR1cm4gZ3Vlc3Nlc0Zvck1p
c3NwZWxsZWRTZWxlY3Rpb24oKTsKLSAgICB9Ci0gICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpICYmIGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpKSB7Ci0gICAgICAgIHVuZ3JhbW1h
dGljYWwgPSB0cnVlOwotICAgICAgICByZXR1cm4gZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxl
Y3Rpb24oKTsKLSAgICB9Ci0gICAgdW5ncmFtbWF0aWNhbCA9IGZhbHNlOwotICAgIHJldHVybiBW
ZWN0b3I8U3RyaW5nPigpOwotI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpzaG93U3BlbGxpbmdH
dWVzc1BhbmVsKCkKQEAgLTE5MzksMjMgKzE4MjMsOCBAQCB2b2lkIEVkaXRvcjo6Y2xlYXJNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVj
dAogICAgIH0KIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGlvbikKLXsKLSAgICBib29sIG1h
cmtTcGVsbGluZyA9IGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCk7Ci0gICAgYm9v
bCBtYXJrR3JhbW1hciA9IG1hcmtTcGVsbGluZyAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQo
KTsKLQotICAgIGlmIChtYXJrU3BlbGxpbmcpIHsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB1bnVz
ZWRGaXJzdE1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgICAgIG1hcmtNaXNzcGVsbGluZ3MobW92aW5n
U2VsZWN0aW9uLCB1bnVzZWRGaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIH0KLQotICAgIGlm
IChtYXJrR3JhbW1hcikKLSAgICAgICAgbWFya0JhZEdyYW1tYXIobW92aW5nU2VsZWN0aW9uKTsK
LX0KLQogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25z
dCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCkKIHsKLSNpZiBVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0Nv
cnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwogCiAgICAgVGV4dENoZWNraW5nVHlwZU1h
c2sgdGV4dENoZWNraW5nT3B0aW9ucyA9IDA7CkBAIC0xOTg1LDg2ICsxODU0LDYgQEAgdm9pZCBF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9z
aXRpb24gJndvcmRTdGFydCwKICAgICB9IGVsc2UgewogICAgICAgICBtYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29y
ZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKTsKICAgICB9Ci0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlv
bkFmdGVyVHlwaW5nKTsKLSAgICBVTlVTRURfUEFSQU0oZG9SZXBsYWNlbWVudCk7Ci0KLSAgICBp
ZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3b3JkCi0gICAgUmVmUHRyPFJhbmdlPiBt
aXNzcGVsbGluZ1JhbmdlOwotICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihz
dGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdv
cmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSksIG1pc3NwZWxsaW5nUmFuZ2UpOwotCi0g
ICAgLy8gQXV0b2NvcnJlY3QgdGhlIG1pc3NwZWxsZWQgd29yZC4KLSAgICBpZiAoIW1pc3NwZWxs
aW5nUmFuZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBHZXQgdGhlIG1pc3NwZWxs
ZWQgd29yZC4KLSAgICBjb25zdCBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwbGFpblRleHQobWlz
c3BlbGxpbmdSYW5nZS5nZXQoKSk7Ci0gICAgU3RyaW5nIGF1dG9jb3JyZWN0ZWRTdHJpbmcgPSB0
ZXh0Q2hlY2tlcigpLT5nZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZCht
aXNzcGVsbGVkV29yZCk7Ci0KLSAgICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVt
cHR5LCByZXBsYWNlIHRoZSBtaXNzcGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgotICAgIGlmICgh
YXV0b2NvcnJlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlv
biBuZXdTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSk7Ci0gICAg
ICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
KSB7Ci0gICAgICAgICAgICBpZiAoIWZyYW1lKCktPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VT
ZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5zaG91bGRJbnNlcnRU
ZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvblR5cGVkKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZnJhbWUoKS0+
ZWRpdG9yKCktPnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBm
YWxzZSwgZmFsc2UpOwotCi0gICAgICAgIC8vIFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3Rl
ciBmdXJ0aGVyLgotICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+bW92ZVRvKGZyYW1lKCkt
PnNlbGVjdGlvbigpLT5lbmQoKSk7Ci0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFy
YWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgfQotCi0gICAgaWYgKCFpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIENoZWNrIGdyYW1tYXIgb2Yg
ZW50aXJlIHNlbnRlbmNlCi0gICAgbWFya0JhZEdyYW1tYXIoVmlzaWJsZVNlbGVjdGlvbihzdGFy
dE9mU2VudGVuY2Uod29yZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQpKSk7Ci0jZW5k
aWYKLX0KLSAgICAKLXZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQ
dHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlv
biBpcyBjYWxsZWQgd2l0aCBhIHNlbGVjdGlvbiBhbHJlYWR5IGV4cGFuZGVkIHRvIHdvcmQgYm91
bmRhcmllcy4KLSAgICAvLyBNaWdodCBiZSBuaWNlIHRvIGFzc2VydCB0aGF0IGhlcmUuCi0gICAg
Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgZm9yIGFzLXlvdS10eXBlIGNoZWNr
aW5nLCBzbyBpZiB0aGF0J3Mgb2ZmIHdlIGRvIG5vdGhpbmcuIE5vdGUgdGhhdAotICAgIC8vIGdy
YW1tYXIgY2hlY2tpbmcgY2FuIG9ubHkgYmUgb24gaWYgc3BlbGwgY2hlY2tpbmcgaXMgYWxzbyBv
bi4KLSAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpKTsKLSAgICBpZiAoIXNlYXJjaFJhbmdlKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgLy8gSWYgd2UncmUgbm90IGluIGFuIGVkaXRhYmxlIG5vZGUsIGJhaWwu
Ci0gICAgTm9kZSogZWRpdGFibGVOb2RlID0gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7
Ci0gICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+cmVuZGVyZXJJc0VkaXRh
YmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghaXNTcGVsbENoZWNraW5nRW5hYmxl
ZEZvcihlZGl0YWJsZU5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIHNw
ZWxsIGNoZWNrZXIgaWYgaXQgaXMgYXZhaWxhYmxlCi0gICAgaWYgKCFjbGllbnQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIAotICAgIFRleHRDaGVja2luZ0hlbHBlciBjaGVja2VyKGNsaWVudCgp
LCBzZWFyY2hSYW5nZSk7Ci0gICAgaWYgKGNoZWNrU3BlbGxpbmcpCi0gICAgICAgIGNoZWNrZXIu
bWFya0FsbE1pc3NwZWxsaW5ncyhmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlQoV1RGX1VTRV9HUkFNTUFSX0NIRUNLSU5HKTsKLSAgICAgICAgaWYgKGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgY2hlY2tlci5tYXJrQWxsQmFk
R3JhbW1hcigpOwotICAgIH0gICAgCiB9CiAKIGJvb2wgRWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdF
bmFibGVkRm9yKE5vZGUqIG5vZGUpIGNvbnN0CkBAIC0yMDgyLDIxICsxODcxLDggQEAgYm9vbCBF
ZGl0b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3QKICAgICBy
ZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3Rh
cnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJz
dE1pc3NwZWxsaW5nUmFuZ2UpCi17Ci0gICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihz
ZWxlY3Rpb24sIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci19Ci0gICAgCi12b2lkIEVk
aXRvcjo6bWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQot
ewotICAgIEFTU0VSVChXVEZfVVNFX0dSQU1NQVJfQ0hFQ0tJTkcpOwotICAgIFJlZlB0cjxSYW5n
ZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1t
YXIoc2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKLX0KLQogdm9pZCBF
ZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNr
aW5nVHlwZU1hc2sgdGV4dENoZWNraW5nT3B0aW9ucywgUmFuZ2UqIHNwZWxsaW5nUmFuZ2UsIFJh
bmdlKiBncmFtbWFyUmFuZ2UpCiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAg
ICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBhdCB0aGlzIG1v
bWVudC4KICAgICBBU1NFUlQoIW1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhc1BlbmRpbmdDb3JyZWN0
aW9uKCkpOwogCkBAIC0yMTUwLDExICsxOTI2LDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRD
CiAKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIGlmIChzaG91
bGRNYXJrR3JhbW1hcikKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoZ3JhbW1hclBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBncmFtbWFyUGFyYWdyYXBoLnRl
eHRMZW5ndGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0
cyk7CisgICAgICAgIFRleHRDaGVja2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY2xp
ZW50KCksIGdyYW1tYXJQYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgZ3JhbW1hclBhcmFncmFw
aC50ZXh0TGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMp
LCByZXN1bHRzKTsKICAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9m
UGFyYWdyYXBoKHNwZWxsaW5nUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHNwZWxsaW5nUGFy
YWdyYXBoLnRleHRMZW5ndGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25z
KSwgcmVzdWx0cyk7CisgICAgICAgIFRleHRDaGVja2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY2xpZW50KCksIHNwZWxsaW5nUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHNwZWxs
aW5nUGFyYWdyYXBoLnRleHRMZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNr
aW5nT3B0aW9ucyksIHJlc3VsdHMpOwogICAgICAgICAKIAogICAgIC8vIElmIHRoaXMgY2hlY2tp
bmcgaXMgb25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBzaG91bGRuJ3QgYm90
aGVyIHRvIG1hcmsgbWlzc3BlbGxpbmdzLgpAQCAtMjI4NywxNyArMjA2MywxMCBAQCB2b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tp
bmdUeXBlTWFzayB0ZXh0QwogICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KLSNlbHNlCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRleHRDaGVja2luZ09wdGlvbnMpOwotICAg
IFVOVVNFRF9QQVJBTShzcGVsbGluZ1JhbmdlKTsKLSAgICBVTlVTRURfUEFSQU0oZ3JhbW1hclJh
bmdlKTsKLSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCiB2b2lkIEVk
aXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZykKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAgIGlmIChyZXBsYWNl
ZFN0cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjMxMSwyOCArMjA4MCwy
MiBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5n
JiByZXBsYWNlZFN0cmluZykKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBhcmFn
cmFwaC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5s
ZW5ndGgoKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2Vy
OjpSZXBsYWNlbWVudCwgU3RyaW5nKCkpOwogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPm1hcmtS
ZXZlcnNlZChjaGFuZ2VkUmFuZ2UuZ2V0KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOwotI2VuZGlmIC8vIFVTRShV
TklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKIAordm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKK3sKKyAg
ICBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihzZWxlY3Rpb24sIHRydWUsIHNlbGVjdGlv
bik7Cit9CisKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1hciwg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVjdGlvbikKIHsKLSNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQogICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRD
aGVja2luZ09wdGlvbnMgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdU
eXBlQ29ycmVjdGlvbjsKICAgICBpZiAobWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdF
bmFibGVkKCkpCiAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgfD0gVGV4dENoZWNraW5nVHlw
ZUdyYW1tYXI7CiAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0
ZXh0Q2hlY2tpbmdPcHRpb25zLCBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotI2Vs
c2UKLSAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKLSAgICBtYXJrTWlz
c3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAg
IGlmIChtYXJrR3JhbW1hcikKLSAgICAgICAgbWFya0JhZEdyYW1tYXIoZ3JhbW1hclNlbGVjdGlv
bik7Ci0jZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5n
JiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCmluZGV4IGM1YmM1Y2U3ZGY1OWQyODU0M2IxYWYxZGE0MDY0ZjUxNjlkNDM1ZGUuLjJkYTAx
NzhmMGIxNmY4ZWU2ZWY1ZGU1MTczYTU5MTI5NGRhOTFmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaApAQCAtMjEwLDE2ICsyMTAsMTAgQEAgcHVibGljOgogICAgIHZvaWQgaWdub3JlU3BlbGxp
bmcoKTsKICAgICB2b2lkIGxlYXJuU3BlbGxpbmcoKTsKICAgICBpbnQgc3BlbGxDaGVja2VyRG9j
dW1lbnRUYWcoKTsKLSAgICBib29sIGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpOwotICAgIGJv
b2wgaXNTZWxlY3Rpb25NaXNzcGVsbGVkKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zv
ck1pc3NwZWxsZWRTZWxlY3Rpb24oKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yVW5n
cmFtbWF0aWNhbFNlbGVjdGlvbigpOwogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNz
cGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVu
Z3JhbW1hdGljYWwpOwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5v
ZGUoKSBjb25zdDsKICAgICBib29sIGlzU3BlbGxDaGVja2luZ0VuYWJsZWRGb3IoTm9kZSopIGNv
bnN0OwogICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZp
c2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxhY2VtZW50KTsKLSAgICB2b2lkIG1hcmtNaXNzcGVs
bGluZ3MoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7Ci0gICAgdm9pZCBtYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJik7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVjdGlvbik7CiAKICNpZiBVU0UoQVVUT01BVElD
X1RFWFRfUkVQTEFDRU1FTlQpCkBAIC00MDMsNyArMzk3LDYgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChjb25zdCBTdHJpbmcmLCBib29sIHNlbGVjdFJlcGxh
Y2VtZW50LCBib29sIHNtYXJ0UmVwbGFjZSk7CiAgICAgdm9pZCB3cml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChQYXN0ZWJvYXJkKik7CiAgICAgdm9pZCByZXZlYWxTZWxlY3Rpb25BZnRlckVkaXRp
bmdPcGVyYXRpb24oKTsKLSAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYsIGJvb2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYg
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayByZXNvbHZl
VGV4dENoZWNraW5nVHlwZU1hc2soVGV4dENoZWNraW5nVHlwZU1hc2spOwogCiAgICAgdm9pZCBz
ZWxlY3RDb21wb3NpdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tp
bmdIZWxwZXIuY3BwCmluZGV4IDBiZGZiZDgyNjk3MTE2MGY3MjlmZjllYjhiYTM2MzE3NGE5OGQz
OGQuLmZmNmM5ODE1MmIyOTI3NDA5OWRjMzVmMTc5MDY5YTI5MmRkMWQ5ODIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTE2NCw2OCArMTY0
LDggQEAgVGV4dENoZWNraW5nSGVscGVyOjp+VGV4dENoZWNraW5nSGVscGVyKCkKIHsKIH0KIAot
U3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmcoaW50JiBmaXJz
dE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlz
c3BlbGxpbmdSYW5nZSkKLXsKLSAgICBXb3JkQXdhcmVJdGVyYXRvciBpdChtX3JhbmdlLmdldCgp
KTsKLSAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gMDsKLSAgICAKLSAgICBTdHJpbmcgZmly
c3RNaXNzcGVsbGluZzsKLSAgICBpbnQgY3VycmVudENodW5rT2Zmc2V0ID0gMDsKLQotICAgIHdo
aWxlICghaXQuYXRFbmQoKSkgewotICAgICAgICBjb25zdCBVQ2hhciogY2hhcnMgPSBpdC5jaGFy
YWN0ZXJzKCk7Ci0gICAgICAgIGludCBsZW4gPSBpdC5sZW5ndGgoKTsKLSAgICAgICAgCi0gICAg
ICAgIC8vIFNraXAgc29tZSB3b3JrIGZvciBvbmUtc3BhY2UtY2hhciBodW5rcwotICAgICAgICBp
ZiAoIShsZW4gPT0gMSAmJiBjaGFyc1swXSA9PSAnICcpKSB7Ci0gICAgICAgICAgICAKLSAgICAg
ICAgICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7Ci0gICAgICAgICAgICBpbnQgbWlz
c3BlbGxpbmdMZW5ndGggPSAwOwotICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCkt
PmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFycywgbGVuLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwg
Jm1pc3NwZWxsaW5nTGVuZ3RoKTsKLQotICAgICAgICAgICAgLy8gNTQ5MDYyNyBzaG93cyB0aGF0
IHRoZXJlIHdhcyBzb21lIGNvZGUgcGF0aCBoZXJlIHdoZXJlIHRoZSBTdHJpbmcgY29uc3RydWN0
b3IgYmVsb3cgY3Jhc2hlcy4KLSAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgZXhhY3RseSB3
aGF0IGNvbWJpbmF0aW9uIG9mIGJhZCBpbnB1dCBjYXVzZWQgdGhpcywgc28gd2UncmUgbWFraW5n
IHRoaXMgbXVjaAotICAgICAgICAgICAgLy8gbW9yZSByb2J1c3QgYWdhaW5zdCBiYWQgaW5wdXQg
b24gcmVsZWFzZSBidWlsZHMuCi0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGgg
Pj0gMCk7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA+PSAtMSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoIW1pc3NwZWxsaW5nTGVuZ3RoIHx8IG1pc3NwZWxsaW5nTG9jYXRp
b24gPj0gMCk7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbik7
Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuKTsKLSAgICAgICAg
ICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVu
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0g
MCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiA8IGxlbiAm
JiBtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4gJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3Nw
ZWxsaW5nTGVuZ3RoIDw9IGxlbikgewotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxlZCB3b3JkCi0gICAgICAgICAgICAgICAgUmVm
UHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpzdWJyYW5nZShtX3Jh
bmdlLmdldCgpLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNz
cGVsbGluZ0xlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW1lbWJlciBmaXJzdC1lbmNv
dW50ZXJlZCBtaXNzcGVsbGluZyBhbmQgaXRzIG9mZnNldC4KLSAgICAgICAgICAgICAgICBpZiAo
IWZpcnN0TWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RNaXNzcGVsbGlu
Z09mZnNldCA9IGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9jYXRpb247Ci0gICAg
ICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSBTdHJpbmcoY2hhcnMgKyBtaXNzcGVs
bGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSA9IG1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gU3RvcmUgbWFya2VyIGZvciBtaXNzcGVsbGVkIHdvcmQu
Ci0gICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgICAgICAgICAg
bWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVudCgpLT5tYXJrZXJz
KCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxpbmcpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZWMpOwotCi0gICAgICAgICAgICAgICAg
Ly8gQmFpbCBvdXQgaWYgd2UncmUgbWFya2luZyBvbmx5IHRoZSBmaXJzdCBtaXNzcGVsbGluZywg
YW5kIG5vdCBhbGwgaW5zdGFuY2VzLgotICAgICAgICAgICAgICAgIGlmICghbWFya0FsbCkKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGN1cnJlbnRDaHVua09mZnNldCArPSBsZW47Ci0gICAgICAgIGl0LmFkdmFu
Y2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpcnN0TWlzc3BlbGxpbmc7Ci19Ci0KIFN0
cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFy
KGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBvdXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0Rm91
bmRPZmZzZXQsIEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwpCiB7Ci0jaWYgVVNFKFVO
SUZJRURfVEVYVF9DSEVDS0lORykKICAgICBTdHJpbmcgZmlyc3RGb3VuZEl0ZW07CiAgICAgU3Ry
aW5nIG1pc3NwZWxsZWRXb3JkOwogICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlOwpAQCAtMjc2
LDcgKzIxNiw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxs
aW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICAg
ICAgICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFt
bWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFy
KSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+
dGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RyaW5nLmNoYXJh
Y3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRz
KTsKKyAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaChtX2NsaWVudCwgcGFyYWdy
YXBoU3RyaW5nLmNoYXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVja2lu
Z1R5cGVzLCByZXN1bHRzKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAg
ICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwpA
QCAtMzQ0LDE0ICsyODQsNiBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RN
aXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICB0b3Rh
bExlbmd0aFByb2Nlc3NlZCArPSBjdXJyZW50TGVuZ3RoOwogICAgIH0KICAgICByZXR1cm4gZmly
c3RGb3VuZEl0ZW07Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIFVOVVNF
RF9QQVJBTShjaGVja0dyYW1tYXIpOwotICAgIFVOVVNFRF9QQVJBTShvdXRJc1NwZWxsaW5nKTsK
LSAgICBVTlVTRURfUEFSQU0ob3V0Rmlyc3RGb3VuZE9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFN
KG91dEdyYW1tYXJEZXRhaWwpOwotICAgIHJldHVybiAiIjsKLSNlbmRpZiAvLyBVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQogfQogCiBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RH
cmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMs
IGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGludCAvKmJhZEdyYW1tYXJQaHJhc2VMZW5n
dGgqLywgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29sIG1hcmtBbGwpCkBAIC00
MDEsMTE2ICszMzMsOSBAQCBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RHcmFtbWFy
RGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbQogI2VuZGlmCiB9CiAKLVN0
cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIoR3JhbW1hckRldGFp
bCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0LCBib29sIG1h
cmtBbGwpCi17Ci0gICAgQVNTRVJUKFdURl9VU0VfR1JBTU1BUl9DSEVDS0lORyk7Ci0gICAgLy8g
SW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1cGRhdGVkIGlmIHdlIGZp
bmQgc29tZXRoaW5nIHRvIHJldHVybi4KLSAgICBvdXRHcmFtbWFyRGV0YWlsLmxvY2F0aW9uID0g
LTE7Ci0gICAgb3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOwotICAgIG91dEdyYW1tYXJEZXRh
aWwuZ3Vlc3Nlcy5jbGVhcigpOwotICAgIG91dEdyYW1tYXJEZXRhaWwudXNlckRlc2NyaXB0aW9u
ID0gIiI7Ci0gICAgb3V0R3JhbW1hclBocmFzZU9mZnNldCA9IDA7Ci0gICAgCi0gICAgU3RyaW5n
IGZpcnN0QmFkR3JhbW1hclBocmFzZTsKLQotICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdl
IHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1hciBjaGVja2luZyBu
ZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBv
ZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhl
IG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKLSAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdu
b3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJh
Z3JhcGgobV9yYW5nZSk7Ci0gICAgCi0gICAgLy8gU3RhcnQgY2hlY2tpbmcgZnJvbSBiZWdpbm5p
bmcgb2YgcGFyYWdyYXBoLCBidXQgc2tpcCBwYXN0IHJlc3VsdHMgdGhhdCBvY2N1ciBiZWZvcmUg
dGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UuCi0gICAgaW50IHN0YXJ0T2Zm
c2V0ID0gMDsKLSAgICB3aGlsZSAoc3RhcnRPZmZzZXQgPCBwYXJhZ3JhcGguY2hlY2tpbmdFbmQo
KSkgewotICAgICAgICBWZWN0b3I8R3JhbW1hckRldGFpbD4gZ3JhbW1hckRldGFpbHM7Ci0gICAg
ICAgIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPSAtMTsKLSAgICAgICAgaW50IGJhZEdy
YW1tYXJQaHJhc2VMZW5ndGggPSAwOwotICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+
Y2hlY2tHcmFtbWFyT2ZTdHJpbmcocGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCkgKyBzdGFydE9m
ZnNldCwgcGFyYWdyYXBoLnRleHRMZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0LCBncmFtbWFyRGV0YWls
cywgJmJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgJmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgpOwot
ICAgICAgICAKLSAgICAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID09IC0xKTsKLSAgICAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VSVChiYWRHcmFtbWFy
UGhyYXNlTG9jYXRpb24gPj0gMCk7Ci0gICAgICAgIGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiAr
PSBzdGFydE9mZnNldDsKLQotICAgICAgICAKLSAgICAgICAgLy8gRm91bmQgc29tZSBiYWQgZ3Jh
bW1hci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3RhcnRzIGluIG91ciBz
ZWFyY2ggcmFuZ2UgKGlmIGFueSkuCi0gICAgICAgIGludCBiYWRHcmFtbWFySW5kZXggPSBmaW5k
Rmlyc3RHcmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRp
b24sIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgsIHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHBh
cmFncmFwaC5jaGVja2luZ0VuZCgpLCBtYXJrQWxsKTsKLSAgICAgICAgaWYgKGJhZEdyYW1tYXJJ
bmRleCA+PSAwKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJh
ZEdyYW1tYXJJbmRleCkgPCBncmFtbWFyRGV0YWlscy5zaXplKCkpOwotICAgICAgICAgICAgb3V0
R3JhbW1hckRldGFpbCA9IGdyYW1tYXJEZXRhaWxzW2JhZEdyYW1tYXJJbmRleF07Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRldGFpbCBpbiByYW5nZSwgdGhlbiB3ZSBo
YXZlIGZvdW5kIHRoZSBmaXJzdCBiYWQgcGhyYXNlICh1bmxlc3Mgd2UgZm91bmQgb25lIGVhcmxp
ZXIgYnV0Ci0gICAgICAgIC8vIGtlcHQgZ29pbmcgc28gd2UgY291bGQgbWFyayBhbGwgaW5zdGFu
Y2VzKS4KLSAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwICYmIGZpcnN0QmFkR3JhbW1h
clBocmFzZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQg
PSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpOwot
ICAgICAgICAgICAgZmlyc3RCYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBoLnRleHRTdWJzdHJp
bmcoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm91bmQgb25lLiBXZSdyZSBkb25lIG5vdywgdW5s
ZXNzIHdlJ3JlIG1hcmtpbmcgZWFjaCBpbnN0YW5jZS4KLSAgICAgICAgICAgIGlmICghbWFya0Fs
bCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFRoZXNl
IHJlc3VsdHMgd2VyZSBhbGwgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCBhbmQg
dGhlIHN0YXJ0IG9mIHRoZSBzZWFyY2ggcmFuZ2U7IGxvb2sKLSAgICAgICAgLy8gYmV5b25kIHRo
aXMgcGhyYXNlLgotICAgICAgICBzdGFydE9mZnNldCA9IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlv
biArIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGg7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaXJz
dEJhZEdyYW1tYXJQaHJhc2U7Ci19Ci0KLQotYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5n
cmFtbWF0aWNhbChWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1ZlY3RvcikgY29uc3QKLXsKLSAgICBB
U1NFUlQoV1RGX1VTRV9HUkFNTUFSX0NIRUNLSU5HKTsKLSAgICBpZiAoIW1fY2xpZW50KQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGlmICghbV9y
YW5nZSB8fCBtX3JhbmdlLT5jb2xsYXBzZWQoZWMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgCi0gICAgLy8gUmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHBhc3NlZCByYW5nZSBleGFjdGx5
IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdyYW1tYXIgZGV0YWlsIHJhbmdlLiBUaGlzIGlzIGFuYWxv
Z291cwotICAgIC8vIHRvIGlzU2VsZWN0aW9uTWlzc3BlbGxlZC4gSXQncyBub3QgZ29vZCBlbm91
Z2ggZm9yIHRoZXJlIHRvIGJlIHNvbWUgYmFkIGdyYW1tYXIgc29tZXdoZXJlIGluIHRoZSByYW5n
ZSwKLSAgICAvLyBvciBvdmVybGFwcGluZyB0aGUgcmFuZ2U7IHRoZSByYW5nZXMgbXVzdCBleGFj
dGx5IG1hdGNoLgotICAgIGd1ZXNzZXNWZWN0b3IuY2xlYXIoKTsKLSAgICBpbnQgZ3JhbW1hclBo
cmFzZU9mZnNldDsKLSAgICAKLSAgICBHcmFtbWFyRGV0YWlsIGdyYW1tYXJEZXRhaWw7Ci0gICAg
U3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBjb25zdF9jYXN0PFRleHRDaGVja2luZ0hlbHBlcio+
KHRoaXMpLT5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VP
ZmZzZXQsIGZhbHNlKTsgICAgCi0gICAgCi0gICAgLy8gTm8gYmFkIGdyYW1tYXIgaW4gdGhlc2Ug
cGFydHMgYXQgYWxsLgotICAgIGlmIChiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEJhZCBncmFtbWFyLCBidXQgcGhyYXNlIChl
LmcuIHNlbnRlbmNlKSBzdGFydHMgYmV5b25kIHN0YXJ0IG9mIHJhbmdlLgotICAgIGlmIChncmFt
bWFyUGhyYXNlT2Zmc2V0ID4gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIEFT
U0VSVChncmFtbWFyRGV0YWlsLmxvY2F0aW9uID49IDAgJiYgZ3JhbW1hckRldGFpbC5sZW5ndGgg
PiAwKTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciwgYnV0IHN0YXJ0IG9mIGRldGFpbCAoZS5n
LiB1bmdyYW1tYXRpY2FsIHdvcmQpIGRvZXNuJ3QgbWF0Y2ggc3RhcnQgb2YgcmFuZ2UKLSAgICBp
ZiAoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiArIGdyYW1tYXJQaHJhc2VPZmZzZXQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciBhdCBzdGFydCBvZiByYW5n
ZSwgYnV0IGVuZCBvZiBiYWQgZ3JhbW1hciBpcyBiZWZvcmUgb3IgYWZ0ZXIgZW5kIG9mIHJhbmdl
Ci0gICAgaWYgKGdyYW1tYXJEZXRhaWwubGVuZ3RoICE9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5n
dGgobV9yYW5nZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBV
cGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJvciAod2hl
dGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbikuCi0gICAgLy8gVGhp
cyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVlbnQgY2FsbCB0byBbTlNTcGVsbENoZWNr
ZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRoVGFnOl0gd29yawotICAgIC8vIGNvcnJl
Y3RseTsgdGhhdCBjYWxsIGJlaGF2ZXMgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hldGhlciB0aGUg
c3BlbGxpbmcgcGFuZWwgaXMgZGlzcGxheWluZyBhIG1pc3NwZWxsaW5nCi0gICAgLy8gb3IgYSBn
cmFtbWFyIGVycm9yLgotICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJV2l0aEdyYW1tYXJT
dHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAgCi0gICAgcmV0dXJu
IHRydWU7Ci19CiAKIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zv
ck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sIGNoZWNrR3JhbW1hciwgYm9vbCYg
bWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkgY29uc3QKIHsKLSNpZiBVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYzsKICAgICBtaXNzcGVsbGVkID0gZmFsc2U7CkBAIC01MjYsNyArMzUxLDcgQEAg
VmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9y
VW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNr
R3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3Jh
bW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgbV9jbGllbnQtPnRleHRDaGVj
a2VyKCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBw
YXJhZ3JhcGgudGV4dExlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKyAgICBjaGVj
a1RleHRPZlBhcmFncmFwaChtX2NsaWVudCwgcGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHBh
cmFncmFwaC50ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwogICAgIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAg
IGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07CkBAIC01NjIs
MzIgKzM4Nyw5NiBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogICAgICAgICB9CiAgICAgfQog
ICAgIHJldHVybiBndWVzc2VzOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICBVTlVTRURfUEFSQU0oY2hlY2tHcmFtbWFyKTsKLSAgICBVTlVTRURfUEFSQU0obWlzc3BlbGxl
ZCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuZ3JhbW1hdGljYWwpOwotICAgIHJldHVybiBWZWN0b3I8
U3RyaW5nPigpOwotI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKKyNp
ZiAhVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKK3N0YXRpYyB2b2lkIGZpbmRCYWRHcmFtbWFy
cyhFZGl0b3JDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBzdGFydCwgaW50
IGxlbmd0aCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCit7CisgICAgQVNT
RVJUKFdURl9VU0VfR1JBTU1BUl9DSEVDS0lORyk7CisgICAgQVNTRVJUKGNsaWVudC0+aXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCkpOworCisgICAgaW50IGNoZWNrTG9jYXRpb24gPSBzdGFydDsK
KyAgICBpbnQgY2hlY2tMZW5ndGggPSBsZW5ndGg7CisgICAgCisgICAgd2hpbGUgKDAgPCBjaGVj
a0xlbmd0aCkgeworICAgICAgICBpbnQgYmFkR3JhbW1hckxvY2F0aW9uID0gLTE7CisgICAgICAg
IGludCBiYWRHcmFtbWFyTGVuZ3RoID0gMDsKKyAgICAgICAgVmVjdG9yPEdyYW1tYXJEZXRhaWw+
IGJhZEdyYW1tYXJEZXRhaWxzOworICAgICAgICBjbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNr
R3JhbW1hck9mU3RyaW5nKHRleHQgKyBjaGVja0xvY2F0aW9uLCBjaGVja0xlbmd0aCwgYmFkR3Jh
bW1hckRldGFpbHMsICZiYWRHcmFtbWFyTG9jYXRpb24sICZiYWRHcmFtbWFyTGVuZ3RoKTsKKyAg
ICAgICAgaWYgKCFiYWRHcmFtbWFyTGVuZ3RoKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IEFTU0VSVCgwIDw9IGJhZEdyYW1tYXJMb2NhdGlvbiAmJiBiYWRHcmFtbWFyTG9jYXRpb24gPD0g
Y2hlY2tMZW5ndGgpOworICAgICAgICBBU1NFUlQoMCA8IGJhZEdyYW1tYXJMZW5ndGggJiYgYmFk
R3JhbW1hckxvY2F0aW9uICsgYmFkR3JhbW1hckxlbmd0aCA8PSBjaGVja0xlbmd0aCk7CisgICAg
ICAgIFRleHRDaGVja2luZ1Jlc3VsdCBiYWRHcmFtbWFyOworICAgICAgICBiYWRHcmFtbWFyLnR5
cGUgPSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKKyAgICAgICAgYmFkR3JhbW1hci5sb2NhdGlv
biA9IGNoZWNrTG9jYXRpb24gKyBiYWRHcmFtbWFyTG9jYXRpb247CisgICAgICAgIGJhZEdyYW1t
YXIubGVuZ3RoID0gYmFkR3JhbW1hckxlbmd0aDsKKyAgICAgICAgYmFkR3JhbW1hci5kZXRhaWxz
LnN3YXAoYmFkR3JhbW1hckRldGFpbHMpOworICAgICAgICByZXN1bHRzLmFwcGVuZChiYWRHcmFt
bWFyKTsKKworICAgICAgICBjaGVja0xvY2F0aW9uICs9IChiYWRHcmFtbWFyTG9jYXRpb24gKyBi
YWRHcmFtbWFyTGVuZ3RoKTsKKyAgICAgICAgY2hlY2tMZW5ndGggLT0gKGJhZEdyYW1tYXJMb2Nh
dGlvbiArIGJhZEdyYW1tYXJMZW5ndGgpOworICAgIH0KK30KIAotdm9pZCBUZXh0Q2hlY2tpbmdI
ZWxwZXI6Om1hcmtBbGxNaXNzcGVsbGluZ3MoUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGlu
Z1JhbmdlKQorc3RhdGljIHZvaWQgZmluZE1pc3NwZWxsaW5ncyhFZGl0b3JDbGllbnQqIGNsaWVu
dCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBzdGFydCwgaW50IGxlbmd0aCwgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7Ci0gICAgLy8gVXNlIHRoZSAibWFya0FsbCIgZmVh
dHVyZSBvZiBmaW5kRmlyc3RNaXNzcGVsbGluZy4gSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgYW5k
IHRoZSAib3V0IHBhcmFtZXRlciI7Ci0gICAgLy8gYWxsIHdlIG5lZWQgdG8gZG8gaXMgbWFyayBl
dmVyeSBpbnN0YW5jZS4KLSAgICBpbnQgaWdub3JlZE9mZnNldDsKLSAgICBmaW5kRmlyc3RNaXNz
cGVsbGluZyhpZ25vcmVkT2Zmc2V0LCB0cnVlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAg
IGludCBjaGVja0xvY2F0aW9uID0gc3RhcnQ7CisgICAgaW50IGNoZWNrTGVuZ3RoID0gbGVuZ3Ro
OworCisgICAgd2hpbGUgKDAgPCBjaGVja0xlbmd0aCkgeworICAgICAgICBpbnQgbWlzc3BlbGxp
bmdMb2NhdGlvbiA9IC0xOworICAgICAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOworICAg
ICAgICBjbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrU3BlbGxpbmdPZlN0cmluZyh0ZXh0ICsg
Y2hlY2tMb2NhdGlvbiwgY2hlY2tMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3Bl
bGxpbmdMZW5ndGgpOworICAgICAgICBpZiAoIW1pc3NwZWxsaW5nTGVuZ3RoKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIEFTU0VSVCgwIDw9IG1pc3NwZWxsaW5nTG9jYXRpb24gJiYgbWlz
c3BlbGxpbmdMb2NhdGlvbiA8PSBjaGVja0xlbmd0aCk7CisgICAgICAgIEFTU0VSVCgwIDwgbWlz
c3BlbGxpbmdMZW5ndGggJiYgbWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3Ro
IDw9IGNoZWNrTGVuZ3RoKTsKKworICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgbWlzc3BlbGxp
bmc7CisgICAgICAgIG1pc3NwZWxsaW5nLnR5cGUgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7
CisgICAgICAgIG1pc3NwZWxsaW5nLmxvY2F0aW9uID0gY2hlY2tMb2NhdGlvbiArIG1pc3NwZWxs
aW5nTG9jYXRpb247CisgICAgICAgIG1pc3NwZWxsaW5nLmxlbmd0aCA9IG1pc3NwZWxsaW5nTGVu
Z3RoOworICAgICAgICBtaXNzcGVsbGluZy5yZXBsYWNlbWVudCA9IGNsaWVudC0+dGV4dENoZWNr
ZXIoKS0+Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQoU3RyaW5nKHRl
eHQgKyBtaXNzcGVsbGluZy5sb2NhdGlvbiwgbWlzc3BlbGxpbmcubGVuZ3RoKSk7CisgICAgICAg
IHJlc3VsdHMuYXBwZW5kKG1pc3NwZWxsaW5nKTsKKyAgICAgICAgCisgICAgICAgIGNoZWNrTG9j
YXRpb24gKz0gKG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAg
ICAgIGNoZWNrTGVuZ3RoIC09IChtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5n
dGgpOworICAgIH0KIH0KKyNlbmRpZgogCi12b2lkIFRleHRDaGVja2luZ0hlbHBlcjo6bWFya0Fs
bEJhZEdyYW1tYXIoKQordm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmNoZWNrVGV4dE9mUGFyYWdy
YXBoKEVkaXRvckNsaWVudCogY2xpZW50LCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwg
VGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRleHRDaGVja2luZ1Jl
c3VsdD4mIHJlc3VsdHMpCiB7Ci0gICAgQVNTRVJUKFdURl9VU0VfR1JBTU1BUl9DSEVDS0lORyk7
Ci0gICAgLy8gVXNlIHRoZSAibWFya0FsbCIgZmVhdHVyZSBvZiBvZmluZEZpcnN0QmFkR3JhbW1h
ci4gSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgYW5kICJvdXQgcGFyYW1ldGVycyI7IGFsbCB3ZSBu
ZWVkIHRvCi0gICAgLy8gZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KLSAgICBHcmFtbWFyRGV0
YWlsIGlnbm9yZWRHcmFtbWFyRGV0YWlsOwotICAgIGludCBpZ25vcmVkT2Zmc2V0OwotICAgIGZp
bmRGaXJzdEJhZEdyYW1tYXIoaWdub3JlZEdyYW1tYXJEZXRhaWwsIGlnbm9yZWRPZmZzZXQsIHRy
dWUpOworICAgIEFTU0VSVChyZXN1bHRzLmlzRW1wdHkoKSk7CisjaWYgVVNFKFVOSUZJRURfVEVY
VF9DSEVDS0lORykKKyAgICBjbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFyYWdy
YXBoKHRleHQsIGxlbmd0aCwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CisjZWxzZQorICAgIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHNwZWxsaW5nUmVzdWx0OworICAgIGlmIChjaGVja2lu
Z1R5cGVzICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKQorICAgICAgICBmaW5kTWlzc3BlbGxp
bmdzKGNsaWVudCwgdGV4dCwgMCwgbGVuZ3RoLCBzcGVsbGluZ1Jlc3VsdCk7CisKKyAgICBWZWN0
b3I8VGV4dENoZWNraW5nUmVzdWx0PiBncmFtbWFyUmVzdWx0OworICAgIGlmIChjaGVja2luZ1R5
cGVzICYgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIHsKKyAgICAgICAgLy8gT25seSBjaGVja3Mg
Z3JhbW1hcnRpY2FsIGVycm9yIGJlZm9yZSBtaXNzcGVsbGluZy4KKyAgICAgICAgaW50IGdyYW1t
YXJDaGVja0xlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
cGVsbGluZ1Jlc3VsdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHNwZWxsaW5nUmVz
dWx0W2ldLmxvY2F0aW9uIDwgZ3JhbW1hckNoZWNrTGVuZ3RoKQorICAgICAgICAgICAgICAgIGdy
YW1tYXJDaGVja0xlbmd0aCA9IHNwZWxsaW5nUmVzdWx0W2ldLmxvY2F0aW9uOworICAgICAgICB9
CisKKyAgICAgICAgZmluZEJhZEdyYW1tYXJzKGNsaWVudCwgdGV4dCwgMCwgZ3JhbW1hckNoZWNr
TGVuZ3RoLCBncmFtbWFyUmVzdWx0KTsKKyAgICB9CisKKyAgICBpZiAoZ3JhbW1hclJlc3VsdC5z
aXplKCkpCisgICAgICAgIHJlc3VsdHMuc3dhcChncmFtbWFyUmVzdWx0KTsKKyAgICBpZiAoc3Bl
bGxpbmdSZXN1bHQuc2l6ZSgpKSB7CisgICAgICAgIGlmIChyZXN1bHRzLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIHJlc3VsdHMuc3dhcChzcGVsbGluZ1Jlc3VsdCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHNwZWxsaW5nUmVzdWx0KTsKKyAgICB9CisjZW5kaWYK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKaW5k
ZXggOGI1YzY5MTA1MjhmNDA1MWEzYWQ4NTZjNmI2Y2FhMTk0Zjc5MmZlMi4uZWJmYjJmZmI2NTgz
OGU1YTk5YjViNjEwNjVkYTFmY2IwZmNhYWYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5oCkBAIC03OCwxNSArNzgsMTQgQEAgcHVibGljOgogICAgIFRl
eHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQqLCBQYXNzUmVmUHRyPFJhbmdlPik7CiAgICAg
flRleHRDaGVja2luZ0hlbHBlcigpOwogCi0gICAgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5n
KGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFuZ2U+
JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGlu
Z09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVsbGluZywgaW50
JiBvdXRGaXJzdEZvdW5kT2Zmc2V0LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsKTsK
LSAgICBTdHJpbmcgZmluZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFy
RGV0YWlsLCBpbnQmIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQsIGJvb2wgbWFya0FsbCk7CiAgICAg
aW50IGZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBn
cmFtbWFyRGV0YWlscywgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgaW50IGJhZEdyYW1t
YXJQaHJhc2VMZW5ndGgsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgYm9vbCBtYXJr
QWxsKTsKLSAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3MoUmVmUHRyPFJhbmdlPiYgZmlyc3RN
aXNzcGVsbGluZ1JhbmdlKTsKLSAgICB2b2lkIG1hcmtBbGxCYWRHcmFtbWFyKCk7CiAKICAgICBi
b29sIGlzVW5ncmFtbWF0aWNhbChWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1ZlY3RvcikgY29uc3Q7
CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxS
YW5nZShib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0
aWNhbCkgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChFZGl0
b3JDbGllbnQqLCBjb25zdCBVQ2hhciosIGludCwgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tp
bmdUeXBlcywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKTsKKwogcHJpdmF0ZToKICAgICBF
ZGl0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104787</attachid>
            <date>2011-08-22 21:13:13 -0700</date>
            <delta_ts>2011-08-22 22:37:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65849-20110823131311.patch</filename>
            <type>text/plain</type>
            <size>37961</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM0OTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwMjk3MjIxOTYyMWNjYWI4NTFlODU2
OTk0NDVjNWVjMTMzMGY2NWZhLi5lYzg2ODI0ODZlNjE2M2E2OTljNGE1YjBmN2IyZGEwZTUwOWYx
YmViIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMjIgIE1PUklUQSBIYWppbWUgIDxt
b3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgU3BlbGwtY2hlY2tpbmcgc2hvdWxkIHNoYXJl
IHRoZSB1bmlmaWVkIHRleHQgY2hlY2tlciBwYXRoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTa2lwcGVkIHRlc3RzIHdoaWNoIG5lZWQgcmViYXNlbGlu
aW5nIChFYWNoIG9mIHRoZW0gY29udGFpbnMgYQorICAgICAgICB3cm9uZyBtYXJrZXIsIHdoaWNo
IG5vIGxvbmdlciBhcHBlYXJzIHdpdGggdGhpcyBmaXguKQorICAgICAgICAKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTEtMDgtMjEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSByZXN1bHRzIGZv
ciBtb3JlIHRlc3RzIGFmZmVjdGVkIGJ5IHRoZSBhZGRpdGlvbiBvZiB0aGUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCAx
ZGRjN2I2YjVkNTM0MzNjN2RkNzFhYTQ1MzgxNDc4NjI2MDgxYzM5Li5jZTllMDVhMDQ0NzUwZDQ4
NmUwNTgyMTVhZWMxMzYwZTI0ODhmOTdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0zNjg2LDYgKzM2ODYsMTQgQEAg
QlVHV0s2NjUxMCBMSU5VWCBERUJVRyA6IGVkaXRpbmcvc2VsZWN0aW9uL3JlZ2lvbmFsLWluZGlj
YXRvcnMuaHRtbCA9IFRJTUVPVVQKIAogQlVHV0s2NjU2OSBXSU4gTElOVVggOiBodHRwL3Rlc3Rz
L2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstaWZyYW1lLWxvYWQtYW5kLWRlbGV0ZS5odG1sID0g
VEVYVCBUSU1FT1VUCiAKKy8vIE5lZWRzIHJlYmFzZWxpbmUKK0JVR1dLNjU4NDkgOiBlZGl0aW5n
L3Bhc3RlYm9hcmQvbWVyZ2UtYWZ0ZXItZGVsZXRlLTEuaHRtbCA9IElNQUdFCitCVUdXSzY1ODQ5
IDogZWRpdGluZy9wYXN0ZWJvYXJkL21lcmdlLWFmdGVyLWRlbGV0ZS0yLmh0bWwgPSBJTUFHRQor
QlVHV0s2NTg0OSA6IGVkaXRpbmcvcGFzdGVib2FyZC9tZXJnZS1hZnRlci1kZWxldGUuaHRtbCA9
IElNQUdFCitCVUdXSzY1ODQ5IDogZWRpdGluZy9wYXN0ZWJvYXJkL21lcmdlLWVuZC1ibG9ja3F1
b3RlLmh0bWwgPSBJTUFHRQorQlVHV0s2NTg0OSA6IGVkaXRpbmcvcGFzdGVib2FyZC9tZXJnZS1l
bmQtbGlzdC5odG1sID0gSU1BR0UKK0JVR1dLNjU4NDkgOiBlZGl0aW5nL3Bhc3RlYm9hcmQvbWVy
Z2UtZW5kLXRhYmxlLmh0bWwgPSBJTUFHRQorCiBCVUdXSzY2NTc3IExFT1BBUkQgOiBmYXN0L2V2
ZW50cy90b3VjaC9iYXNpYy1zaW5nbGUtdG91Y2gtZXZlbnRzLmh0bWwgPSBUSU1FT1VUCiBCVUdX
SzY2NTc3IExFT1BBUkQgOiBmYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRh
cmdldHMuaHRtbCA9IFRJTUVPVVQKIEJVR1dLNjY1NzcgTEVPUEFSRCA6IGZhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwgPSBUSU1FT1VUCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA1
MjQ0NzRlOGQyM2IxYTAyZjljNzExMzE3Y2NiMzNhN2JiMjYyYy4uZjU5M2I3OWFjNTBiOTJkZGIy
NTNhZjM0YmU4NDNhNzI2MmM5Nzg1ZiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEx
LTA4LTIyICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFNw
ZWxsLWNoZWNraW5nIHNob3VsZCBzaGFyZSB0aGUgdW5pZmllZCB0ZXh0IGNoZWNrZXIgcGF0aC4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1ODQ5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0IGhh
ZCBoYXZlIHR3byBpbmRlcGVuZGVudCBjb2RlIHBhdGhzIGZvciB0ZXh0IG1hcmtpbmcsIG9uZQor
ICAgICAgICBmb3IgVU5JRklFRF9URVhUX0NIRUNLSU5HIHBsYXRmb3JtcyAod2hpY2ggaXMgYXZh
aWxhYmxlIGZvciBNYWMgT1MKKyAgICAgICAgMTAuNiBvciBsYXRlcikgYW5kIGFub3RoZXIgZm9y
IG5vbi1VTklGSUVEX1RFWFRfQ0hFQ0tJTkcgcGxhdGZvcm1zLgorICAgICAgICBUaGlzIGR1cGxp
Y2F0aW9uIG1hZGUgaXQgaGFyZCB0byBjaGFuZ2UgZWRpdGluZyByZWxhdGVkIGNvZGUuCisKKyAg
ICAgICAgVGhpcyBjaGFuZ2UgZWxpbWluYXRlZCBtb3N0IG9mIG5vbi1VTklGSUVEX1RFWFRfQ0hF
Q0tJTkcgcGF0aCBhbmQKKyAgICAgICAgYWRvcHRlZCBvcmlnaW5hbGx5IG9ubHktZm9yLVVOSUZJ
RURfVEVYVF9DSEVDS0lORyBjb2RlIHBhdGggb24KKyAgICAgICAgZXZlcnkgcGxhdGZvcm0sIGlt
cGxlbWVudGluZyBhbiB1bmlmaWVkIHRleHQgY2hlY2tlciBlcXVpdmFsZW50CisgICAgICAgIGlu
c2lkZSBXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXIgZm9yIHBsYXRmb3JtcyB3aGljaCBkb24n
dCBoYXZlCisgICAgICAgIGl0cyBvd24gdW5pZmllZCB0ZXh0IGNoZWNrZXIuCisKKyAgICAgICAg
LSBXcmFwcGVkIFRleHRDaGVja2VyQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCgpIHdpdGgK
KyAgICAgICAgICBUZXh0Q2hlY2tpbmdIZWxwZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKCkKKyAg
ICAgICAgLSBJbXBsZW1lbnRlZCBUZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoKSBlcXVpdmFsZW50CisgICAgICAgICAgaW4gVGV4dENoZWNraW5nSGVscGVyOjpjaGVja1Rl
eHRPZlBhcmFncmFwaCgpIGZvcgorICAgICAgICAgIG5vbi1VU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKSBwbGF0Zm9ybXMKKyAgICAgICAgLSBFbGltaW5hdGVkIGFsbCBub24tVVNFKFVOSUZJRURf
VEVYVF9DSEVDS0lORykgY29kZSBwYXRocworICAgICAgICAgIGZyb20gRWRpdG9yIGFuZCBUZXh0
Q2hlY2tpbmdIZWxwZXIuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6CisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNoYW5n
ZUJhY2tUb1JlcGxhY2VkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6Cisg
ICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcik6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVs
bGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEJhZEdyYW1t
YXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRNaXNzcGVsbGluZ3MpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpjaGVja1RleHRPZlBhcmFncmFwaCk6CisgICAgICAg
ICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaDoKKwogMjAxMS0wOC0yMSAgTWFydGluIFJv
Ymluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4ICdtYWtlIGRpc3Qn
IGZvciBXZWJLaXRHVEsrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDM0YTE4MjMy
NmM1YzllMWQ1ZWVkNjY4N2EzZWNiZWI1Yzg3Y2ZhMTEuLmYzNWY2NWMyNzkyMjhiZDM0YmE4MmUz
MmEwZGRjZWExZGMzYzM1ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTE3MjQs
NyArMTcyNCw2IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBz
dGFydEJlZm9yZVNlbGVjdGlvbikKICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKICAgICBT
dHJpbmcgbWlzc3BlbGxlZFdvcmQ7CiAKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQog
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2Uo
ZWMpOwogICAgIGJvb2wgaXNTcGVsbGluZyA9IHRydWU7CiAgICAgaW50IGZvdW5kT2Zmc2V0ID0g
MDsKQEAgLTE3MzYsMjQgKzE3MzUsNiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3Nw
ZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIGJhZEdyYW1tYXJQaHJh
c2UgPSBmb3VuZEl0ZW07CiAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNl
dDsKICAgICB9Ci0jZWxzZQotICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1Jhbmdl
OwotICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVs
bGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwg
ZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0KLSNpZiBVU0UoR1JBTU1BUl9DSEVDS0lO
RykKLSAgICAvLyBTZWFyY2ggZm9yIGJhZCBncmFtbWFyIHRoYXQgb2NjdXJzIHByaW9yIHRvIHRo
ZSBuZXh0IG1pc3NwZWxsZWQgd29yZCAoaWYgYW55KQotICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9
IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwotICAgIGlmICghbWlzc3BlbGxl
ZFdvcmQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBzdGFydCBvZiBu
ZXh0IG1pc3NwZWxsZWQgd29yZAotICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhncmFt
bWFyU2VhcmNoUmFuZ2UuZ2V0KCkpOwotICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5n
T2Zmc2V0KTsKLSAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2Uo
KS0+c3RhcnRDb250YWluZXIoZWMpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChlYyksIGVj
KTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAg
ICAgICBiYWRHcmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFt
bWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1h
clBocmFzZU9mZnNldCwgZmFsc2UpOwotI2VuZGlmCi0jZW5kaWYKICAgICAKICAgICAvLyBJZiB3
ZSBmb3VuZCBuZWl0aGVyIGJhZCBncmFtbWFyIG5vciBhIG1pc3NwZWxsZWQgd29yZCwgd3JhcCBh
bmQgdHJ5IGFnYWluIChidXQgZG9uJ3QgYm90aGVyIGlmIHdlIHN0YXJ0ZWQgYXQgdGhlIGJlZ2lu
bmluZyBvZiB0aGUKICAgICAvLyBibG9jayByYXRoZXIgdGhhbiBhdCBhIHNlbGVjdGlvbikuCkBA
IC0xNzYyLDcgKzE3NDMsNiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5n
KGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgIC8vIGdvaW5nIHVudGlsIHRoZSBl
bmQgb2YgdGhlIHZlcnkgZmlyc3QgY2h1bmsgd2UgdGVzdGVkIGlzIGZhciBlbm91Z2gKICAgICAg
ICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJjaEVuZE5vZGVBZnRlcldyYXAsIHNl
YXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgZWMpOwogICAgICAgICAKLSNpZiBVU0UoVU5JRklFRF9U
RVhUX0NIRUNLSU5HKQogICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKICAgICAgICAgZm91bmRJdGVtID0gVGV4dENoZWNraW5n
SGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGlu
Z09yQmFkR3JhbW1hcihpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91
bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOwogICAgICAgICBpZiAoaXNTcGVsbGluZykgewpAQCAt
MTc3MiwyMiArMTc1Miw2IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmco
Ym9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2Ug
PSBmb3VuZEl0ZW07CiAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZz
ZXQ7CiAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENoZWNr
aW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVs
bGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0K
LSNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0g
c3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShlYyk7Ci0gICAgICAgIGlmICghbWlzc3Bl
bGxlZFdvcmQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyBTdG9wIGxvb2tpbmcgYXQgc3Rh
cnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQKLSAgICAgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9y
IGNoYXJzKGdyYW1tYXJTZWFyY2hSYW5nZS5nZXQoKSk7Ci0gICAgICAgICAgICBjaGFycy5hZHZh
bmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+
c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+
c3RhcnRPZmZzZXQoZWMpLCBlYyk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gVGV4dENo
ZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdy
YW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOwotI2VuZGlm
Ci0jZW5kaWYKICAgICB9CiAgICAgCiAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHko
KSkgewpAQCAtMTgxOSw5MiArMTc4MywxMiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1p
c3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgfQogfQogCi1ib29sIEVk
aXRvcjo6aXNTZWxlY3Rpb25NaXNzcGVsbGVkKCkKLXsKLSAgICBTdHJpbmcgc2VsZWN0ZWRTdHJp
bmcgPSBzZWxlY3RlZFRleHQoKTsKLSAgICBpbnQgbGVuZ3RoID0gc2VsZWN0ZWRTdHJpbmcubGVu
Z3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlm
ICghY2xpZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBpbnQgbWlzc3Bl
bGxpbmdMb2NhdGlvbiA9IC0xOwotICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAg
dGV4dENoZWNrZXIoKS0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKHNlbGVjdGVkU3RyaW5nLmNoYXJh
Y3RlcnMoKSwgbGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3Ro
KTsKLSAgICAKLSAgICAvLyBUaGUgc2VsZWN0aW9uIG9ubHkgY291bnRzIGFzIG1pc3NwZWxsZWQg
aWYgdGhlIHNlbGVjdGVkIHRleHQgaXMgZXhhY3RseSBvbmUgbWlzc3BlbGxlZCB3b3JkCi0gICAg
aWYgKG1pc3NwZWxsaW5nTGVuZ3RoICE9IGxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIC8vIFVwZGF0ZSB0aGUgc3BlbGxpbmcgcGFuZWwgdG8gYmUgZGlzcGxheWluZyB0
aGlzIGVycm9yICh3aGV0aGVyIG9yIG5vdCB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgb24gc2NyZWVu
KS4KLSAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSB0byBtYWtlIGEgc3Vic2VxdWVudCBjYWxsIHRv
IFtOU1NwZWxsQ2hlY2tlciBpZ25vcmVXb3JkOmluU3BlbGxEb2N1bWVudFdpdGhUYWc6XSB3b3Jr
Ci0gICAgLy8gY29ycmVjdGx5OyB0aGF0IGNhbGwgYmVoYXZlcyBkaWZmZXJlbnRseSBiYXNlZCBv
biB3aGV0aGVyIHRoZSBzcGVsbGluZyBwYW5lbCBpcyBkaXNwbGF5aW5nIGEgbWlzc3BlbGxpbmcK
LSAgICAvLyBvciBhIGdyYW1tYXIgZXJyb3IuCi0gICAgY2xpZW50KCktPnVwZGF0ZVNwZWxsaW5n
VUlXaXRoTWlzc3BlbGxlZFdvcmQoc2VsZWN0ZWRTdHJpbmcpOwotICAgIAotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEVkaXRvcjo6aXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkKLXsKLSNp
ZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICBWZWN0b3I8U3RyaW5nPiBpZ25vcmVkR3Vlc3Nl
czsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9y
bWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHJhbmdlKS5pc1VuZ3JhbW1h
dGljYWwoaWdub3JlZEd1ZXNzZXMpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYK
LX0KLQotVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVj
dGlvbigpCi17Ci0jaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFN0cmluZz4g
Z3Vlc3NlczsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9uKCkt
PnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGd1
ZXNzZXM7Ci0gICAgLy8gSWdub3JlIHRoZSByZXN1bHQgb2YgaXNVbmdyYW1tYXRpY2FsOyB3ZSBq
dXN0IHdhbnQgdGhlIGd1ZXNzZXMsIHdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkKLSAgICBU
ZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHJhbmdlKS5pc1VuZ3JhbW1hdGljYWwoZ3Vlc3Nl
cyk7Ci0gICAgcmV0dXJuIGd1ZXNzZXM7Ci0jZWxzZQotICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOwotI2VuZGlmCi19Ci0KLVZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRTZWxlY3Rpb24oKQotewotICAgIFN0cmluZyBzZWxlY3RlZFN0cmluZyA9IHNlbGVjdGVk
VGV4dCgpOwotICAgIEFTU0VSVChzZWxlY3RlZFN0cmluZy5sZW5ndGgoKSk7Ci0KLSAgICBWZWN0
b3I8U3RyaW5nPiBndWVzc2VzOwotICAgIGlmIChjbGllbnQoKSkKLSAgICAgICAgdGV4dENoZWNr
ZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQoc2VsZWN0ZWRTdHJpbmcsIFN0cmluZygpLCBndWVzc2Vz
KTsKLSAgICByZXR1cm4gZ3Vlc3NlczsKLX0KLQogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBtaXNzcGVsbGVk
LCBib29sJiB1bmdyYW1tYXRpY2FsKQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcp
CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1h
bGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBWZWN0b3I8U3Ry
aW5nPigpOwogICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHJhbmdlKS5n
dWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGlzR3JhbW1hckNoZWNraW5n
RW5hYmxlZCgpLCBtaXNzcGVsbGVkLCB1bmdyYW1tYXRpY2FsKTsKLSNlbHNlCi0gICAgbWlzc3Bl
bGxlZCA9IGlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpOwotICAgIGlmIChtaXNzcGVsbGVkKSB7Ci0g
ICAgICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGd1ZXNzZXNGb3JN
aXNzcGVsbGVkU2VsZWN0aW9uKCk7Ci0gICAgfQotICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSAmJiBpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKSkgewotICAgICAgICB1bmdyYW1t
YXRpY2FsID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2Vs
ZWN0aW9uKCk7Ci0gICAgfQotICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKLSAgICByZXR1cm4g
VmVjdG9yPFN0cmluZz4oKTsKLSNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6c2hvd1NwZWxsaW5n
R3Vlc3NQYW5lbCgpCkBAIC0xOTQ2LDcgKzE4MzAsNiBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0
aQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0
IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxhY2VtZW50KQogewotI2lmIFVTRShVTklGSUVE
X1RFWFRfQ0hFQ0tJTkcpCiAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlQZW5kaW5nQ29y
cmVjdGlvbihzZWxlY3Rpb25BZnRlclR5cGluZyk7CiAKICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFz
ayB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKQEAgLTE5NzYsODYgKzE4NTksNiBAQCB2b2lkIEVk
aXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3Np
dGlvbiAmd29yZFN0YXJ0LAogICAgIH0gZWxzZSB7CiAgICAgICAgIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCkpOwogICAgIH0KLQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9u
QWZ0ZXJUeXBpbmcpOwotICAgIFVOVVNFRF9QQVJBTShkb1JlcGxhY2VtZW50KTsKLQotICAgIGlm
ICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gQ2hlY2sgc3BlbGxpbmcgb2Ygb25lIHdvcmQKLSAgICBSZWZQdHI8UmFuZ2U+IG1p
c3NwZWxsaW5nUmFuZ2U7Ci0gICAgbWFya01pc3NwZWxsaW5ncyhWaXNpYmxlU2VsZWN0aW9uKHN0
YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29y
ZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSwgbWlzc3BlbGxpbmdSYW5nZSk7Ci0KLSAg
ICAvLyBBdXRvY29ycmVjdCB0aGUgbWlzc3BlbGxlZCB3b3JkLgotICAgIGlmICghbWlzc3BlbGxp
bmdSYW5nZSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIEdldCB0aGUgbWlzc3BlbGxl
ZCB3b3JkLgotICAgIGNvbnN0IFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBsYWluVGV4dChtaXNz
cGVsbGluZ1JhbmdlLmdldCgpKTsKLSAgICBTdHJpbmcgYXV0b2NvcnJlY3RlZFN0cmluZyA9IHRl
eHRDaGVja2VyKCktPmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKG1p
c3NwZWxsZWRXb3JkKTsKLQotICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1w
dHksIHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCi0gICAgaWYgKCFh
dXRvY29ycmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IG5ld1NlbGVjdGlvbihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBET1dOU1RSRUFNKTsKLSAgICAg
ICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkp
IHsKLSAgICAgICAgICAgIGlmICghZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghZnJhbWUoKS0+ZWRpdG9yKCktPnNob3VsZEluc2VydFRl
eHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uVHlwZWQpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmcmFtZSgpLT5l
ZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIGZh
bHNlLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVy
IGZ1cnRoZXIuCi0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb3ZlVG8oZnJhbWUoKS0+
c2VsZWN0aW9uKCktPmVuZCgpKTsKLSAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gQ2hlY2sgZ3JhbW1hciBvZiBl
bnRpcmUgc2VudGVuY2UKLSAgICBtYXJrQmFkR3JhbW1hcihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0
T2ZTZW50ZW5jZSh3b3JkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKHdvcmRTdGFydCkpKTsKLSNlbmRp
ZgotfQotICAgIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0
cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKLXsKLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IGlzIGNhbGxlZCB3aXRoIGEgc2VsZWN0aW9uIGFscmVhZHkgZXhwYW5kZWQgdG8gd29yZCBib3Vu
ZGFyaWVzLgotICAgIC8vIE1pZ2h0IGJlIG5pY2UgdG8gYXNzZXJ0IHRoYXQgaGVyZS4KLSAgICAK
LSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgb25seSBmb3IgYXMteW91LXR5cGUgY2hlY2tp
bmcsIHNvIGlmIHRoYXQncyBvZmYgd2UgZG8gbm90aGluZy4gTm90ZSB0aGF0Ci0gICAgLy8gZ3Jh
bW1hciBjaGVja2luZyBjYW4gb25seSBiZSBvbiBpZiBzcGVsbCBjaGVja2luZyBpcyBhbHNvIG9u
LgotICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2Uoc2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkpOwotICAgIGlmICghc2VhcmNoUmFuZ2UpCi0gICAgICAgIHJldHVy
bjsKLSAgICAKLSAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW4gZWRpdGFibGUgbm9kZSwgYmFpbC4K
LSAgICBOb2RlKiBlZGl0YWJsZU5vZGUgPSBzZWFyY2hSYW5nZS0+c3RhcnRDb250YWluZXIoKTsK
LSAgICBpZiAoIWVkaXRhYmxlTm9kZSB8fCAhZWRpdGFibGVOb2RlLT5yZW5kZXJlcklzRWRpdGFi
bGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFpc1NwZWxsQ2hlY2tpbmdFbmFibGVk
Rm9yKGVkaXRhYmxlTm9kZSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdldCB0aGUgc3Bl
bGwgY2hlY2tlciBpZiBpdCBpcyBhdmFpbGFibGUKLSAgICBpZiAoIWNsaWVudCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgVGV4dENoZWNraW5nSGVscGVyIGNoZWNrZXIoY2xpZW50KCks
IHNlYXJjaFJhbmdlKTsKLSAgICBpZiAoY2hlY2tTcGVsbGluZykKLSAgICAgICAgY2hlY2tlci5t
YXJrQWxsTWlzc3BlbGxpbmdzKGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEFTU0VSVChXVEZfVVNFX0dSQU1NQVJfQ0hFQ0tJTkcpOwotICAgICAgICBpZiAoaXNH
cmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICBjaGVja2VyLm1hcmtBbGxCYWRH
cmFtbWFyKCk7Ci0gICAgfSAgICAKIH0KIAogYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2luZ0Vu
YWJsZWRGb3IoTm9kZSogbm9kZSkgY29uc3QKQEAgLTIwNzMsMjEgKzE4NzYsOCBAQCBib29sIEVk
aXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxlZEluRm9jdXNlZE5vZGUoKSBjb25zdAogICAgIHJl
dHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zdGFy
dCgpLmRlcHJlY2F0ZWROb2RlKCkpOwogfQogCi12b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5n
cyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFJlZlB0cjxSYW5nZT4mIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSkKLXsKLSAgICBtYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKHNl
bGVjdGlvbiwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKLX0KLSAgICAKLXZvaWQgRWRp
dG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCi17
Ci0gICAgQVNTRVJUKFdURl9VU0VfR1JBTU1BUl9DSEVDS0lORyk7Ci0gICAgUmVmUHRyPFJhbmdl
PiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1h
cihzZWxlY3Rpb24sIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotfQotCiB2b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tp
bmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgUmFu
Z2UqIGdyYW1tYXJSYW5nZSkKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAg
IC8vIFRoZXJlIHNob3VsZG4ndCBiZSBwZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGF0IHRoaXMgbW9t
ZW50LgogICAgIEFTU0VSVCghbV9zcGVsbGluZ0NvcnJlY3Rvci0+aGFzUGVuZGluZ0NvcnJlY3Rp
b24oKSk7CiAKQEAgLTIxNDEsMTEgKzE5MzEsMTEgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNz
cGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dEMK
IAogICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgaWYgKHNob3Vs
ZE1hcmtHcmFtbWFyKQotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1RleHRPZlBhcmFncmFw
aChncmFtbWFyUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIGdyYW1tYXJQYXJhZ3JhcGgudGV4
dExlbmd0aCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRz
KTsKKyAgICAgICAgVGV4dENoZWNraW5nSGVscGVyOjpjaGVja1RleHRPZlBhcmFncmFwaChjbGll
bnQoKSwgZ3JhbW1hclBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBncmFtbWFyUGFyYWdyYXBo
LnRleHRMZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyks
IHJlc3VsdHMpOwogICAgIGVsc2UKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoc3BlbGxpbmdQYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgc3BlbGxpbmdQYXJh
Z3JhcGgudGV4dExlbmd0aCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMp
LCByZXN1bHRzKTsKKyAgICAgICAgVGV4dENoZWNraW5nSGVscGVyOjpjaGVja1RleHRPZlBhcmFn
cmFwaChjbGllbnQoKSwgc3BlbGxpbmdQYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgc3BlbGxp
bmdQYXJhZ3JhcGgudGV4dExlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tp
bmdPcHRpb25zKSwgcmVzdWx0cyk7CiAgICAgICAgIAogCiAgICAgLy8gSWYgdGhpcyBjaGVja2lu
ZyBpcyBvbmx5IGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3Ro
ZXIgdG8gbWFyayBtaXNzcGVsbGluZ3MuCkBAIC0yMjc4LDE3ICsyMDY4LDEwIEBAIHZvaWQgRWRp
dG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2lu
Z1R5cGVNYXNrIHRleHRDCiAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5
KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9CiAgICAgfQotI2Vsc2UKLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICBVTlVTRURfUEFSQU0odGV4dENoZWNraW5nT3B0aW9ucyk7Ci0gICAg
VU5VU0VEX1BBUkFNKHNwZWxsaW5nUmFuZ2UpOwotICAgIFVOVVNFRF9QQVJBTShncmFtbWFyUmFu
Z2UpOwotI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKIHZvaWQgRWRp
dG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3Ry
aW5nKQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgaWYgKHJlcGxhY2Vk
U3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzAyLDI4ICsyMDg1LDE2
IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcm
IHJlcGxhY2VkU3RyaW5nKQogICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlID0gcGFyYWdy
YXBoLnN1YnJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxl
bmd0aCgpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6
OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CiAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+bWFya1Jl
dmVyc2VkKGNoYW5nZWRSYW5nZS5nZXQoKSk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7Ci0jZW5kaWYgLy8gVVNFKFVO
SUZJRURfVEVYVF9DSEVDS0lORykKIH0KIAotCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5n
c0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlY3Rpb24s
IGJvb2wgbWFya0dyYW1tYXIsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGdyYW1tYXJTZWxlY3Rp
b24pCiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICBpZiAoIWlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKICAgICBUZXh0Q2hl
Y2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nIHwgVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247CiAgICAgaWYgKG1hcmtHcmFtbWFyICYm
IGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25z
IHw9IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyOwogICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRC
YWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxpbmdTZWxlY3Rpb24u
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKTsKLSNlbHNlCi0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2U7Ci0gICAgbWFya01pc3NwZWxsaW5ncyhzcGVsbGluZ1NlbGVjdGlvbiwgZmlyc3RNaXNz
cGVsbGluZ1JhbmdlKTsKLSAgICBpZiAobWFya0dyYW1tYXIpCi0gICAgICAgIG1hcmtCYWRHcmFt
bWFyKGdyYW1tYXJTZWxlY3Rpb24pOwotI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjp1bmFwcGxp
ZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3Jy
ZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBhN2UxZjNiOTI5ZTgyNWJlZmU2YzY0ZTRlNDVk
MDdjMjFhM2ZhZDBhLi4zZGJkODM5MTRlNGQyZGMxMjllOWYwMWE4OTYzOTQ0ZGQ1NmViODYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTIxMCwxNiArMjEwLDEwIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGlnbm9yZVNwZWxsaW5nKCk7CiAgICAgdm9pZCBsZWFyblNwZWxsaW5nKCk7CiAgICAg
aW50IHNwZWxsQ2hlY2tlckRvY3VtZW50VGFnKCk7Ci0gICAgYm9vbCBpc1NlbGVjdGlvblVuZ3Jh
bW1hdGljYWwoKTsKLSAgICBib29sIGlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCk7Ci0gICAgVmVjdG9yPFN0
cmluZz4gZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKTsKICAgICBWZWN0b3I8U3Ry
aW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBt
aXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKTsKICAgICBib29sIGlzU3BlbGxDaGVja2lu
Z0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdF
bmFibGVkRm9yKE5vZGUqKSBjb25zdDsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5
cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCk7Ci0g
ICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBSZWZQdHI8
UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIHZvaWQgbWFya0JhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYpOwogICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc0FuZEJh
ZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlY3Rpb24sIGJvb2wg
bWFya0dyYW1tYXIsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGdyYW1tYXJTZWxlY3Rpb24pOwog
CiAjaWYgVVNFKEFVVE9NQVRJQ19URVhUX1JFUExBQ0VNRU5UKQpAQCAtNDAzLDcgKzM5Nyw2IEBA
IHByaXZhdGU6CiAgICAgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoY29uc3QgU3RyaW5n
JiwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UpOwogICAgIHZvaWQg
d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVib2FyZCopOwogICAgIHZvaWQgcmV2ZWFs
U2VsZWN0aW9uQWZ0ZXJFZGl0aW5nT3BlcmF0aW9uKCk7Ci0gICAgdm9pZCBtYXJrTWlzc3BlbGxp
bmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBib29sIGNoZWNrU3BlbGxp
bmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgVGV4dENoZWNr
aW5nVHlwZU1hc2sgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKFRleHRDaGVja2luZ1R5cGVN
YXNrKTsKIAogICAgIHZvaWQgc2VsZWN0Q29tcG9zaXRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCAwYmRmYmQ4MjY5NzExNjBmNzI5
ZmY5ZWI4YmEzNjMxNzRhOThkMzhkLi5lN2I0ZGZjYTUxOTE2ZTg5Mzc1ZTE0NGVlYmI0ZTA5MDdi
N2Q1ZDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hl
bHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
Y3BwCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUg
IlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNp
bmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAg
LTE2NCw2OCArMTY1LDggQEAgVGV4dENoZWNraW5nSGVscGVyOjp+VGV4dENoZWNraW5nSGVscGVy
KCkKIHsKIH0KIAotU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxp
bmcoaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxSYW5n
ZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKLXsKLSAgICBXb3JkQXdhcmVJdGVyYXRvciBpdCht
X3JhbmdlLmdldCgpKTsKLSAgICBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0ID0gMDsKLSAgICAKLSAg
ICBTdHJpbmcgZmlyc3RNaXNzcGVsbGluZzsKLSAgICBpbnQgY3VycmVudENodW5rT2Zmc2V0ID0g
MDsKLQotICAgIHdoaWxlICghaXQuYXRFbmQoKSkgewotICAgICAgICBjb25zdCBVQ2hhciogY2hh
cnMgPSBpdC5jaGFyYWN0ZXJzKCk7Ci0gICAgICAgIGludCBsZW4gPSBpdC5sZW5ndGgoKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFNraXAgc29tZSB3b3JrIGZvciBvbmUtc3BhY2UtY2hhciBodW5r
cwotICAgICAgICBpZiAoIShsZW4gPT0gMSAmJiBjaGFyc1swXSA9PSAnICcpKSB7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7Ci0gICAgICAg
ICAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwotICAgICAgICAgICAgbV9jbGllbnQtPnRl
eHRDaGVja2VyKCktPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFycywgbGVuLCAmbWlzc3BlbGxp
bmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKLQotICAgICAgICAgICAgLy8gNTQ5MDYy
NyBzaG93cyB0aGF0IHRoZXJlIHdhcyBzb21lIGNvZGUgcGF0aCBoZXJlIHdoZXJlIHRoZSBTdHJp
bmcgY29uc3RydWN0b3IgYmVsb3cgY3Jhc2hlcy4KLSAgICAgICAgICAgIC8vIFdlIGRvbid0IGtu
b3cgZXhhY3RseSB3aGF0IGNvbWJpbmF0aW9uIG9mIGJhZCBpbnB1dCBjYXVzZWQgdGhpcywgc28g
d2UncmUgbWFraW5nIHRoaXMgbXVjaAotICAgICAgICAgICAgLy8gbW9yZSByb2J1c3QgYWdhaW5z
dCBiYWQgaW5wdXQgb24gcmVsZWFzZSBidWlsZHMuCi0gICAgICAgICAgICBBU1NFUlQobWlzc3Bl
bGxpbmdMZW5ndGggPj0gMCk7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlv
biA+PSAtMSk7Ci0gICAgICAgICAgICBBU1NFUlQoIW1pc3NwZWxsaW5nTGVuZ3RoIHx8IG1pc3Nw
ZWxsaW5nTG9jYXRpb24gPj0gMCk7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2Nh
dGlvbiA8IGxlbik7Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMZW5ndGggPD0gbGVu
KTsKLSAgICAgICAgICAgIEFTU0VSVChtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdM
ZW5ndGggPD0gbGVuKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5n
TG9jYXRpb24gPj0gMCAmJiBtaXNzcGVsbGluZ0xlbmd0aCA+IDAgJiYgbWlzc3BlbGxpbmdMb2Nh
dGlvbiA8IGxlbiAmJiBtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4gJiYgbWlzc3BlbGxpbmdMb2Nh
dGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbikgewotICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIC8vIENvbXB1dGUgcmFuZ2Ugb2YgbWlzc3BlbGxlZCB3b3JkCi0gICAgICAg
ICAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlID0gVGV4dEl0ZXJhdG9yOjpz
dWJyYW5nZShtX3JhbmdlLmdldCgpLCBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBSZW1lbWJl
ciBmaXJzdC1lbmNvdW50ZXJlZCBtaXNzcGVsbGluZyBhbmQgaXRzIG9mZnNldC4KLSAgICAgICAg
ICAgICAgICBpZiAoIWZpcnN0TWlzc3BlbGxpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgZmly
c3RNaXNzcGVsbGluZ09mZnNldCA9IGN1cnJlbnRDaHVua09mZnNldCArIG1pc3NwZWxsaW5nTG9j
YXRpb247Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmcgPSBTdHJpbmcoY2hh
cnMgKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSA9IG1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gU3RvcmUgbWFya2VyIGZvciBtaXNz
cGVsbGVkIHdvcmQuCi0gICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAg
ICAgICAgICAgICAgbWlzc3BlbGxpbmdSYW5nZS0+c3RhcnRDb250YWluZXIoZWMpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCktPmFkZE1hcmtlcihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBEb2N1bWVu
dE1hcmtlcjo6U3BlbGxpbmcpOwotICAgICAgICAgICAgICAgIEFTU0VSVCghZWMpOwotCi0gICAg
ICAgICAgICAgICAgLy8gQmFpbCBvdXQgaWYgd2UncmUgbWFya2luZyBvbmx5IHRoZSBmaXJzdCBt
aXNzcGVsbGluZywgYW5kIG5vdCBhbGwgaW5zdGFuY2VzLgotICAgICAgICAgICAgICAgIGlmICgh
bWFya0FsbCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgCi0gICAgICAgIGN1cnJlbnRDaHVua09mZnNldCArPSBsZW47Ci0gICAg
ICAgIGl0LmFkdmFuY2UoKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGZpcnN0TWlzc3BlbGxp
bmc7Ci19Ci0KIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5n
T3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBvdXRJc1NwZWxsaW5nLCBpbnQm
IG91dEZpcnN0Rm91bmRPZmZzZXQsIEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwpCiB7
Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICBTdHJpbmcgZmlyc3RGb3VuZEl0
ZW07CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkOwogICAgIFN0cmluZyBiYWRHcmFtbWFyUGhy
YXNlOwpAQCAtMjc2LDcgKzIxNyw3IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRG
aXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVz
dWx0czsKICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVz
ID0gY2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2lu
Z1R5cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAg
ICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdyYXBo
U3RyaW5nLmNoYXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVja2luZ1R5
cGVzLCByZXN1bHRzKTsKKyAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaChtX2Ns
aWVudCwgcGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0
aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewog
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZy
ZXN1bHRzW2ldOwpAQCAtMzQ0LDE0ICsyODUsNiBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVy
OjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgog
ICAgICAgICB0b3RhbExlbmd0aFByb2Nlc3NlZCArPSBjdXJyZW50TGVuZ3RoOwogICAgIH0KICAg
ICByZXR1cm4gZmlyc3RGb3VuZEl0ZW07Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIFVOVVNFRF9QQVJBTShjaGVja0dyYW1tYXIpOwotICAgIFVOVVNFRF9QQVJBTShvdXRJ
c1NwZWxsaW5nKTsKLSAgICBVTlVTRURfUEFSQU0ob3V0Rmlyc3RGb3VuZE9mZnNldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKG91dEdyYW1tYXJEZXRhaWwpOwotICAgIHJldHVybiAiIjsKLSNlbmRpZiAv
LyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCiBpbnQgVGV4dENoZWNraW5nSGVscGVy
OjpmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3Jh
bW1hckRldGFpbHMsIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sIGludCAvKmJhZEdyYW1t
YXJQaHJhc2VMZW5ndGgqLywgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29sIG1h
cmtBbGwpCkBAIC00MDEsMTE2ICszMzQsOSBAQCBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5k
Rmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbQogI2Vu
ZGlmCiB9CiAKLVN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEJhZEdyYW1tYXIo
R3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCwgaW50JiBvdXRHcmFtbWFyUGhyYXNlT2Zm
c2V0LCBib29sIG1hcmtBbGwpCi17Ci0gICAgQVNTRVJUKFdURl9VU0VfR1JBTU1BUl9DSEVDS0lO
Ryk7Ci0gICAgLy8gSW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1cGRh
dGVkIGlmIHdlIGZpbmQgc29tZXRoaW5nIHRvIHJldHVybi4KLSAgICBvdXRHcmFtbWFyRGV0YWls
LmxvY2F0aW9uID0gLTE7Ci0gICAgb3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOwotICAgIG91
dEdyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5jbGVhcigpOwotICAgIG91dEdyYW1tYXJEZXRhaWwudXNl
ckRlc2NyaXB0aW9uID0gIiI7Ci0gICAgb3V0R3JhbW1hclBocmFzZU9mZnNldCA9IDA7Ci0gICAg
Ci0gICAgU3RyaW5nIGZpcnN0QmFkR3JhbW1hclBocmFzZTsKLQotICAgIC8vIEV4cGFuZCB0aGUg
c2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1h
ciBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KLSAgICAvLyBEZXRlcm1pbmUgdGhl
IGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUg
c3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKLSAgICAvLyBzaW5jZSB3ZSB3aWxs
IHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgIFRleHRDaGVja2luZ1Bh
cmFncmFwaCBwYXJhZ3JhcGgobV9yYW5nZSk7Ci0gICAgCi0gICAgLy8gU3RhcnQgY2hlY2tpbmcg
ZnJvbSBiZWdpbm5pbmcgb2YgcGFyYWdyYXBoLCBidXQgc2tpcCBwYXN0IHJlc3VsdHMgdGhhdCBv
Y2N1ciBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UuCi0gICAg
aW50IHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICB3aGlsZSAoc3RhcnRPZmZzZXQgPCBwYXJhZ3JhcGgu
Y2hlY2tpbmdFbmQoKSkgewotICAgICAgICBWZWN0b3I8R3JhbW1hckRldGFpbD4gZ3JhbW1hckRl
dGFpbHM7Ci0gICAgICAgIGludCBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPSAtMTsKLSAgICAg
ICAgaW50IGJhZEdyYW1tYXJQaHJhc2VMZW5ndGggPSAwOwotICAgICAgICBtX2NsaWVudC0+dGV4
dENoZWNrZXIoKS0+Y2hlY2tHcmFtbWFyT2ZTdHJpbmcocGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJz
KCkgKyBzdGFydE9mZnNldCwgcGFyYWdyYXBoLnRleHRMZW5ndGgoKSAtIHN0YXJ0T2Zmc2V0LCBn
cmFtbWFyRGV0YWlscywgJmJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgJmJhZEdyYW1tYXJQaHJh
c2VMZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlTGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID09IC0xKTsK
LSAgICAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIEFTU0VS
VChiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gPj0gMCk7Ci0gICAgICAgIGJhZEdyYW1tYXJQaHJh
c2VMb2NhdGlvbiArPSBzdGFydE9mZnNldDsKLQotICAgICAgICAKLSAgICAgICAgLy8gRm91bmQg
c29tZSBiYWQgZ3JhbW1hci4gRmluZCB0aGUgZWFybGllc3QgZGV0YWlsIHJhbmdlIHRoYXQgc3Rh
cnRzIGluIG91ciBzZWFyY2ggcmFuZ2UgKGlmIGFueSkuCi0gICAgICAgIGludCBiYWRHcmFtbWFy
SW5kZXggPSBmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGdyYW1tYXJEZXRhaWxzLCBiYWRHcmFtbWFy
UGhyYXNlTG9jYXRpb24sIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgsIHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCksIHBhcmFncmFwaC5jaGVja2luZ0VuZCgpLCBtYXJrQWxsKTsKLSAgICAgICAgaWYg
KGJhZEdyYW1tYXJJbmRleCA+PSAwKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGJhZEdyYW1tYXJJbmRleCkgPCBncmFtbWFyRGV0YWlscy5zaXplKCkpOwotICAg
ICAgICAgICAgb3V0R3JhbW1hckRldGFpbCA9IGdyYW1tYXJEZXRhaWxzW2JhZEdyYW1tYXJJbmRl
eF07Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiB3ZSBmb3VuZCBhIGRldGFpbCBpbiByYW5n
ZSwgdGhlbiB3ZSBoYXZlIGZvdW5kIHRoZSBmaXJzdCBiYWQgcGhyYXNlICh1bmxlc3Mgd2UgZm91
bmQgb25lIGVhcmxpZXIgYnV0Ci0gICAgICAgIC8vIGtlcHQgZ29pbmcgc28gd2UgY291bGQgbWFy
ayBhbGwgaW5zdGFuY2VzKS4KLSAgICAgICAgaWYgKGJhZEdyYW1tYXJJbmRleCA+PSAwICYmIGZp
cnN0QmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIG91dEdyYW1tYXJQ
aHJhc2VPZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gLSBwYXJhZ3JhcGguY2hlY2tp
bmdTdGFydCgpOwotICAgICAgICAgICAgZmlyc3RCYWRHcmFtbWFyUGhyYXNlID0gcGFyYWdyYXBo
LnRleHRTdWJzdHJpbmcoYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBiYWRHcmFtbWFyUGhyYXNl
TGVuZ3RoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm91bmQgb25lLiBXZSdyZSBk
b25lIG5vdywgdW5sZXNzIHdlJ3JlIG1hcmtpbmcgZWFjaCBpbnN0YW5jZS4KLSAgICAgICAgICAg
IGlmICghbWFya0FsbCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFRoZXNlIHJlc3VsdHMgd2VyZSBhbGwgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIHBh
cmFncmFwaCBhbmQgdGhlIHN0YXJ0IG9mIHRoZSBzZWFyY2ggcmFuZ2U7IGxvb2sKLSAgICAgICAg
Ly8gYmV5b25kIHRoaXMgcGhyYXNlLgotICAgICAgICBzdGFydE9mZnNldCA9IGJhZEdyYW1tYXJQ
aHJhc2VMb2NhdGlvbiArIGJhZEdyYW1tYXJQaHJhc2VMZW5ndGg7Ci0gICAgfQotICAgIAotICAg
IHJldHVybiBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7Ci19Ci0KLQotYm9vbCBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmlzVW5ncmFtbWF0aWNhbChWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1ZlY3RvcikgY29u
c3QKLXsKLSAgICBBU1NFUlQoV1RGX1VTRV9HUkFNTUFSX0NIRUNLSU5HKTsKLSAgICBpZiAoIW1f
Y2xpZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjOwot
ICAgIGlmICghbV9yYW5nZSB8fCBtX3JhbmdlLT5jb2xsYXBzZWQoZWMpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gUmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHBhc3NlZCBy
YW5nZSBleGFjdGx5IGNvcnJlc3BvbmRzIHRvIGEgYmFkIGdyYW1tYXIgZGV0YWlsIHJhbmdlLiBU
aGlzIGlzIGFuYWxvZ291cwotICAgIC8vIHRvIGlzU2VsZWN0aW9uTWlzc3BlbGxlZC4gSXQncyBu
b3QgZ29vZCBlbm91Z2ggZm9yIHRoZXJlIHRvIGJlIHNvbWUgYmFkIGdyYW1tYXIgc29tZXdoZXJl
IGluIHRoZSByYW5nZSwKLSAgICAvLyBvciBvdmVybGFwcGluZyB0aGUgcmFuZ2U7IHRoZSByYW5n
ZXMgbXVzdCBleGFjdGx5IG1hdGNoLgotICAgIGd1ZXNzZXNWZWN0b3IuY2xlYXIoKTsKLSAgICBp
bnQgZ3JhbW1hclBocmFzZU9mZnNldDsKLSAgICAKLSAgICBHcmFtbWFyRGV0YWlsIGdyYW1tYXJE
ZXRhaWw7Ci0gICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2UgPSBjb25zdF9jYXN0PFRleHRDaGVj
a2luZ0hlbHBlcio+KHRoaXMpLT5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdy
YW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsgICAgCi0gICAgCi0gICAgLy8gTm8gYmFkIGdyYW1t
YXIgaW4gdGhlc2UgcGFydHMgYXQgYWxsLgotICAgIGlmIChiYWRHcmFtbWFyUGhyYXNlLmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIC8vIEJhZCBncmFtbWFyLCBi
dXQgcGhyYXNlIChlLmcuIHNlbnRlbmNlKSBzdGFydHMgYmV5b25kIHN0YXJ0IG9mIHJhbmdlLgot
ICAgIGlmIChncmFtbWFyUGhyYXNlT2Zmc2V0ID4gMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIEFTU0VSVChncmFtbWFyRGV0YWlsLmxvY2F0aW9uID49IDAgJiYgZ3JhbW1hckRl
dGFpbC5sZW5ndGggPiAwKTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciwgYnV0IHN0YXJ0IG9m
IGRldGFpbCAoZS5nLiB1bmdyYW1tYXRpY2FsIHdvcmQpIGRvZXNuJ3QgbWF0Y2ggc3RhcnQgb2Yg
cmFuZ2UKLSAgICBpZiAoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiArIGdyYW1tYXJQaHJhc2VPZmZz
ZXQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciBhdCBz
dGFydCBvZiByYW5nZSwgYnV0IGVuZCBvZiBiYWQgZ3JhbW1hciBpcyBiZWZvcmUgb3IgYWZ0ZXIg
ZW5kIG9mIHJhbmdlCi0gICAgaWYgKGdyYW1tYXJEZXRhaWwubGVuZ3RoICE9IFRleHRJdGVyYXRv
cjo6cmFuZ2VMZW5ndGgobV9yYW5nZS5nZXQoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhp
cyBlcnJvciAod2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbiku
Ci0gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVlbnQgY2FsbCB0byBb
TlNTcGVsbENoZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRoVGFnOl0gd29yawot
ICAgIC8vIGNvcnJlY3RseTsgdGhhdCBjYWxsIGJlaGF2ZXMgZGlmZmVyZW50bHkgYmFzZWQgb24g
d2hldGhlciB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgZGlzcGxheWluZyBhIG1pc3NwZWxsaW5nCi0g
ICAgLy8gb3IgYSBncmFtbWFyIGVycm9yLgotICAgIG1fY2xpZW50LT51cGRhdGVTcGVsbGluZ1VJ
V2l0aEdyYW1tYXJTdHJpbmcoYmFkR3JhbW1hclBocmFzZSwgZ3JhbW1hckRldGFpbCk7Ci0gICAg
Ci0gICAgcmV0dXJuIHRydWU7Ci19CiAKIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBl
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sIGNoZWNrR3Jh
bW1hciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkgY29uc3QKIHsKLSNp
ZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7
CiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBtaXNzcGVsbGVkID0gZmFsc2U7CkBAIC01MjYs
NyArMzUyLDcgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKIAogICAgIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdU
eXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hl
Y2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgbV9jbGll
bnQtPnRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaC50ZXh0Q2hh
cmFjdGVycygpLCBwYXJhZ3JhcGgudGV4dExlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRz
KTsKKyAgICBjaGVja1RleHRPZlBhcmFncmFwaChtX2NsaWVudCwgcGFyYWdyYXBoLnRleHRDaGFy
YWN0ZXJzKCksIHBhcmFncmFwaC50ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMp
OwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsr
KSB7CiAgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNb
aV07CkBAIC01NjIsMzIgKzM4OCw5OSBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxw
ZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogICAgICAg
ICB9CiAgICAgfQogICAgIHJldHVybiBndWVzc2VzOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICBVTlVTRURfUEFSQU0oY2hlY2tHcmFtbWFyKTsKLSAgICBVTlVTRURfUEFS
QU0obWlzc3BlbGxlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuZ3JhbW1hdGljYWwpOwotICAgIHJl
dHVybiBWZWN0b3I8U3RyaW5nPigpOwotI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJ
TkcpCiB9CiAKKyNpZiAhVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKK3N0YXRpYyB2b2lkIGZp
bmRCYWRHcmFtbWFycyhFZGl0b3JDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGlu
dCBzdGFydCwgaW50IGxlbmd0aCwgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMp
Cit7CisgICAgQVNTRVJUKFdURl9VU0VfR1JBTU1BUl9DSEVDS0lORyk7CisgICAgQVNTRVJUKGNs
aWVudC0+aXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpOwogCi12b2lkIFRleHRDaGVja2luZ0hl
bHBlcjo6bWFya0FsbE1pc3NwZWxsaW5ncyhSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpCisgICAgaW50IGNoZWNrTG9jYXRpb24gPSBzdGFydDsKKyAgICBpbnQgY2hlY2tMZW5n
dGggPSBsZW5ndGg7CisgICAgCisgICAgd2hpbGUgKDAgPCBjaGVja0xlbmd0aCkgeworICAgICAg
ICBpbnQgYmFkR3JhbW1hckxvY2F0aW9uID0gLTE7CisgICAgICAgIGludCBiYWRHcmFtbWFyTGVu
Z3RoID0gMDsKKyAgICAgICAgVmVjdG9yPEdyYW1tYXJEZXRhaWw+IGJhZEdyYW1tYXJEZXRhaWxz
OworICAgICAgICBjbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrR3JhbW1hck9mU3RyaW5nKHRl
eHQgKyBjaGVja0xvY2F0aW9uLCBjaGVja0xlbmd0aCwgYmFkR3JhbW1hckRldGFpbHMsICZiYWRH
cmFtbWFyTG9jYXRpb24sICZiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICAgICAgaWYgKCFiYWRHcmFt
bWFyTGVuZ3RoKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIEFTU0VSVCgwIDw9IGJhZEdy
YW1tYXJMb2NhdGlvbiAmJiBiYWRHcmFtbWFyTG9jYXRpb24gPD0gY2hlY2tMZW5ndGgpOworICAg
ICAgICBBU1NFUlQoMCA8IGJhZEdyYW1tYXJMZW5ndGggJiYgYmFkR3JhbW1hckxvY2F0aW9uICsg
YmFkR3JhbW1hckxlbmd0aCA8PSBjaGVja0xlbmd0aCk7CisgICAgICAgIFRleHRDaGVja2luZ1Jl
c3VsdCBiYWRHcmFtbWFyOworICAgICAgICBiYWRHcmFtbWFyLnR5cGUgPSBUZXh0Q2hlY2tpbmdU
eXBlR3JhbW1hcjsKKyAgICAgICAgYmFkR3JhbW1hci5sb2NhdGlvbiA9IGNoZWNrTG9jYXRpb24g
KyBiYWRHcmFtbWFyTG9jYXRpb247CisgICAgICAgIGJhZEdyYW1tYXIubGVuZ3RoID0gYmFkR3Jh
bW1hckxlbmd0aDsKKyAgICAgICAgYmFkR3JhbW1hci5kZXRhaWxzLnN3YXAoYmFkR3JhbW1hckRl
dGFpbHMpOworICAgICAgICByZXN1bHRzLmFwcGVuZChiYWRHcmFtbWFyKTsKKworICAgICAgICBj
aGVja0xvY2F0aW9uICs9IChiYWRHcmFtbWFyTG9jYXRpb24gKyBiYWRHcmFtbWFyTGVuZ3RoKTsK
KyAgICAgICAgY2hlY2tMZW5ndGggLT0gKGJhZEdyYW1tYXJMb2NhdGlvbiArIGJhZEdyYW1tYXJM
ZW5ndGgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZmluZE1pc3NwZWxsaW5ncyhFZGl0b3JD
bGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBzdGFydCwgaW50IGxlbmd0aCwg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCiB7Ci0gICAgLy8gVXNlIHRoZSAi
bWFya0FsbCIgZmVhdHVyZSBvZiBmaW5kRmlyc3RNaXNzcGVsbGluZy4gSWdub3JlIHRoZSByZXR1
cm4gdmFsdWUgYW5kIHRoZSAib3V0IHBhcmFtZXRlciI7Ci0gICAgLy8gYWxsIHdlIG5lZWQgdG8g
ZG8gaXMgbWFyayBldmVyeSBpbnN0YW5jZS4KLSAgICBpbnQgaWdub3JlZE9mZnNldDsKLSAgICBm
aW5kRmlyc3RNaXNzcGVsbGluZyhpZ25vcmVkT2Zmc2V0LCB0cnVlLCBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpOworICAgIFRleHRCcmVha0l0ZXJhdG9yKiBpdGVyYXRvciA9IHdvcmRCcmVha0l0ZXJh
dG9yKHRleHQgKyBzdGFydCwgbGVuZ3RoKTsKKyAgICBpZiAoIWl0ZXJhdG9yKQorICAgICAgICBy
ZXR1cm47CisgICAgaW50IHdvcmRTdGFydCA9IHRleHRCcmVha0N1cnJlbnQoaXRlcmF0b3IpOwor
ICAgIHdoaWxlICgwIDw9IHdvcmRTdGFydCkgeworICAgICAgICBpbnQgd29yZEVuZCA9IHRleHRC
cmVha05leHQoaXRlcmF0b3IpOworICAgICAgICBpZiAod29yZEVuZCA8IDApCisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgaW50IHdvcmRMZW5ndGggPSB3b3JkRW5kIC0gd29yZFN0YXJ0Owor
ICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgICAgICBpbnQgbWlzc3Bl
bGxpbmdMZW5ndGggPSAwOworICAgICAgICBjbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrU3Bl
bGxpbmdPZlN0cmluZyh0ZXh0ICsgc3RhcnQgKyB3b3JkU3RhcnQsIHdvcmRMZW5ndGgsICZtaXNz
cGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICBpZiAoMCA8IG1p
c3NwZWxsaW5nTGVuZ3RoKSB7CisgICAgICAgICAgICBBU1NFUlQoMCA8PSBtaXNzcGVsbGluZ0xv
Y2F0aW9uICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gPD0gd29yZExlbmd0aCk7CisgICAgICAgICAg
ICBBU1NFUlQoMCA8IG1pc3NwZWxsaW5nTGVuZ3RoICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gKyBt
aXNzcGVsbGluZ0xlbmd0aCA8PSB3b3JkTGVuZ3RoKTsKKyAgICAgICAgICAgIFRleHRDaGVja2lu
Z1Jlc3VsdCBtaXNzcGVsbGluZzsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nLnR5cGUgPSBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CisgICAgICAgICAgICBtaXNzcGVsbGluZy5sb2NhdGlvbiA9
IHN0YXJ0ICsgd29yZFN0YXJ0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbjsKKyAgICAgICAgICAgIG1p
c3NwZWxsaW5nLmxlbmd0aCA9IG1pc3NwZWxsaW5nTGVuZ3RoOworICAgICAgICAgICAgbWlzc3Bl
bGxpbmcucmVwbGFjZW1lbnQgPSBjbGllbnQtPnRleHRDaGVja2VyKCktPmdldEF1dG9Db3JyZWN0
U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKFN0cmluZyh0ZXh0ICsgbWlzc3BlbGxpbmcubG9j
YXRpb24sIG1pc3NwZWxsaW5nLmxlbmd0aCkpOworICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQo
bWlzc3BlbGxpbmcpOworICAgICAgICB9CisKKyAgICAgICAgd29yZFN0YXJ0ID0gd29yZEVuZDsK
KyAgICB9CiB9CisjZW5kaWYKIAotdm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxCYWRH
cmFtbWFyKCkKK3ZvaWQgVGV4dENoZWNraW5nSGVscGVyOjpjaGVja1RleHRPZlBhcmFncmFwaChF
ZGl0b3JDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsIFRleHRD
aGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+
JiByZXN1bHRzKQogewotICAgIEFTU0VSVChXVEZfVVNFX0dSQU1NQVJfQ0hFQ0tJTkcpOwotICAg
IC8vIFVzZSB0aGUgIm1hcmtBbGwiIGZlYXR1cmUgb2Ygb2ZpbmRGaXJzdEJhZEdyYW1tYXIuIEln
bm9yZSB0aGUgcmV0dXJuIHZhbHVlIGFuZCAib3V0IHBhcmFtZXRlcnMiOyBhbGwgd2UgbmVlZCB0
bwotICAgIC8vIGRvIGlzIG1hcmsgZXZlcnkgaW5zdGFuY2UuCi0gICAgR3JhbW1hckRldGFpbCBp
Z25vcmVkR3JhbW1hckRldGFpbDsKLSAgICBpbnQgaWdub3JlZE9mZnNldDsKLSAgICBmaW5kRmly
c3RCYWRHcmFtbWFyKGlnbm9yZWRHcmFtbWFyRGV0YWlsLCBpZ25vcmVkT2Zmc2V0LCB0cnVlKTsK
KyAgICBBU1NFUlQocmVzdWx0cy5pc0VtcHR5KCkpOworI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hF
Q0tJTkcpCisgICAgY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5jaGVja1RleHRPZlBhcmFncmFwaCh0
ZXh0LCBsZW5ndGgsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworI2Vsc2UKKyAgICBWZWN0b3I8
VGV4dENoZWNraW5nUmVzdWx0PiBzcGVsbGluZ1Jlc3VsdDsKKyAgICBpZiAoY2hlY2tpbmdUeXBl
cyAmIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZykKKyAgICAgICAgZmluZE1pc3NwZWxsaW5ncyhj
bGllbnQsIHRleHQsIDAsIGxlbmd0aCwgc3BlbGxpbmdSZXN1bHQpOworCisgICAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gZ3JhbW1hclJlc3VsdDsKKyAgICBpZiAoY2hlY2tpbmdUeXBlcyAm
IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSB7CisgICAgICAgIC8vIE9ubHkgY2hlY2tzIGdyYW1t
YXJ0aWNhbCBlcnJvciBiZWZvcmUgdGhlIGZpcnN0IG1pc3NwZWxsaW5nLgorICAgICAgICBpbnQg
Z3JhbW1hckNoZWNrTGVuZ3RoID0gbGVuZ3RoOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHNwZWxsaW5nUmVzdWx0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoc3BlbGxp
bmdSZXN1bHRbaV0ubG9jYXRpb24gPCBncmFtbWFyQ2hlY2tMZW5ndGgpCisgICAgICAgICAgICAg
ICAgZ3JhbW1hckNoZWNrTGVuZ3RoID0gc3BlbGxpbmdSZXN1bHRbaV0ubG9jYXRpb247CisgICAg
ICAgIH0KKworICAgICAgICBmaW5kQmFkR3JhbW1hcnMoY2xpZW50LCB0ZXh0LCAwLCBncmFtbWFy
Q2hlY2tMZW5ndGgsIGdyYW1tYXJSZXN1bHQpOworICAgIH0KKworICAgIGlmIChncmFtbWFyUmVz
dWx0LnNpemUoKSkKKyAgICAgICAgcmVzdWx0cy5zd2FwKGdyYW1tYXJSZXN1bHQpOworICAgIGlm
IChzcGVsbGluZ1Jlc3VsdC5zaXplKCkpIHsKKyAgICAgICAgaWYgKHJlc3VsdHMuaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmVzdWx0cy5zd2FwKHNwZWxsaW5nUmVzdWx0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoc3BlbGxpbmdSZXN1bHQpOworICAgIH0KKyNl
bmRpZgogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
aAppbmRleCA4YjVjNjkxMDUyOGY0MDUxYTNhZDg1NmM2YjZjYWExOTRmNzkyZmUyLi5lYmZiMmZm
YjY1ODM4ZTVhOTliNWI2MTA2NWRhMWZjYjBmY2FhZjI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKQEAgLTc4LDE1ICs3OCwxNCBAQCBwdWJsaWM6CiAg
ICAgVGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVudCosIFBhc3NSZWZQdHI8UmFuZ2U+KTsK
ICAgICB+VGV4dENoZWNraW5nSGVscGVyKCk7CiAKLSAgICBTdHJpbmcgZmluZEZpcnN0TWlzc3Bl
bGxpbmcoaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib29sIG1hcmtBbGwsIFJlZlB0cjxS
YW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CiAgICAgU3RyaW5nIGZpbmRGaXJzdE1pc3Nw
ZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBvdXRJc1NwZWxsaW5n
LCBpbnQmIG91dEZpcnN0Rm91bmRPZmZzZXQsIEdyYW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRh
aWwpOwotICAgIFN0cmluZyBmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwmIG91dEdy
YW1tYXJEZXRhaWwsIGludCYgb3V0R3JhbW1hclBocmFzZU9mZnNldCwgYm9vbCBtYXJrQWxsKTsK
ICAgICBpbnQgZmluZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFp
bD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBpbnQgYmFk
R3JhbW1hclBocmFzZUxlbmd0aCwgaW50IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29s
IG1hcmtBbGwpOwotICAgIHZvaWQgbWFya0FsbE1pc3NwZWxsaW5ncyhSZWZQdHI8UmFuZ2U+JiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIHZvaWQgbWFya0FsbEJhZEdyYW1tYXIoKTsKIAog
ICAgIGJvb2wgaXNVbmdyYW1tYXRpY2FsKFZlY3RvcjxTdHJpbmc+JiBndWVzc2VzVmVjdG9yKSBj
b25zdDsKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0
aWNhbFJhbmdlKGJvb2wgY2hlY2tHcmFtbWFyLCBib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdy
YW1tYXRpY2FsKSBjb25zdDsKKworICAgIHN0YXRpYyB2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KEVkaXRvckNsaWVudCosIGNvbnN0IFVDaGFyKiwgaW50LCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBj
aGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYpOworCiBwcml2YXRlOgog
ICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7CiAgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104789</attachid>
            <date>2011-08-22 22:37:34 -0700</date>
            <delta_ts>2011-08-22 23:50:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65849-20110823143732.patch</filename>
            <type>text/plain</type>
            <size>44040</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM0OTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwMjk3MjIxOTYyMWNjYWI4NTFlODU2
OTk0NDVjNWVjMTMzMGY2NWZhLi5lYzg2ODI0ODZlNjE2M2E2OTljNGE1YjBmN2IyZGEwZTUwOWYx
YmViIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMjIgIE1PUklUQSBIYWppbWUgIDxt
b3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgU3BlbGwtY2hlY2tpbmcgc2hvdWxkIHNoYXJl
IHRoZSB1bmlmaWVkIHRleHQgY2hlY2tlciBwYXRoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTa2lwcGVkIHRlc3RzIHdoaWNoIG5lZWQgcmViYXNlbGlu
aW5nIChFYWNoIG9mIHRoZW0gY29udGFpbnMgYQorICAgICAgICB3cm9uZyBtYXJrZXIsIHdoaWNo
IG5vIGxvbmdlciBhcHBlYXJzIHdpdGggdGhpcyBmaXguKQorICAgICAgICAKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTEtMDgtMjEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSByZXN1bHRzIGZv
ciBtb3JlIHRlc3RzIGFmZmVjdGVkIGJ5IHRoZSBhZGRpdGlvbiBvZiB0aGUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCAx
ZGRjN2I2YjVkNTM0MzNjN2RkNzFhYTQ1MzgxNDc4NjI2MDgxYzM5Li5jZTllMDVhMDQ0NzUwZDQ4
NmUwNTgyMTVhZWMxMzYwZTI0ODhmOTdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0zNjg2LDYgKzM2ODYsMTQgQEAg
QlVHV0s2NjUxMCBMSU5VWCBERUJVRyA6IGVkaXRpbmcvc2VsZWN0aW9uL3JlZ2lvbmFsLWluZGlj
YXRvcnMuaHRtbCA9IFRJTUVPVVQKIAogQlVHV0s2NjU2OSBXSU4gTElOVVggOiBodHRwL3Rlc3Rz
L2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstaWZyYW1lLWxvYWQtYW5kLWRlbGV0ZS5odG1sID0g
VEVYVCBUSU1FT1VUCiAKKy8vIE5lZWRzIHJlYmFzZWxpbmUKK0JVR1dLNjU4NDkgOiBlZGl0aW5n
L3Bhc3RlYm9hcmQvbWVyZ2UtYWZ0ZXItZGVsZXRlLTEuaHRtbCA9IElNQUdFCitCVUdXSzY1ODQ5
IDogZWRpdGluZy9wYXN0ZWJvYXJkL21lcmdlLWFmdGVyLWRlbGV0ZS0yLmh0bWwgPSBJTUFHRQor
QlVHV0s2NTg0OSA6IGVkaXRpbmcvcGFzdGVib2FyZC9tZXJnZS1hZnRlci1kZWxldGUuaHRtbCA9
IElNQUdFCitCVUdXSzY1ODQ5IDogZWRpdGluZy9wYXN0ZWJvYXJkL21lcmdlLWVuZC1ibG9ja3F1
b3RlLmh0bWwgPSBJTUFHRQorQlVHV0s2NTg0OSA6IGVkaXRpbmcvcGFzdGVib2FyZC9tZXJnZS1l
bmQtbGlzdC5odG1sID0gSU1BR0UKK0JVR1dLNjU4NDkgOiBlZGl0aW5nL3Bhc3RlYm9hcmQvbWVy
Z2UtZW5kLXRhYmxlLmh0bWwgPSBJTUFHRQorCiBCVUdXSzY2NTc3IExFT1BBUkQgOiBmYXN0L2V2
ZW50cy90b3VjaC9iYXNpYy1zaW5nbGUtdG91Y2gtZXZlbnRzLmh0bWwgPSBUSU1FT1VUCiBCVUdX
SzY2NTc3IExFT1BBUkQgOiBmYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRh
cmdldHMuaHRtbCA9IFRJTUVPVVQKIEJVR1dLNjY1NzcgTEVPUEFSRCA6IGZhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwgPSBUSU1FT1VUCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDc5ZjU5YWNiYjEzMDU5MDYwZTBlYmM2MDdiODg1YzQ4MDRmNjgzZjEuLjA4OGFhZjM5
MTU5N2ExZmUzNzlmNTY5NzE4OTA5ZGUyYjQ3MzgwYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC02MzgsNiArNjM4LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRpbmcvU21hcnRS
ZXBsYWNlLmNwcAogICAgIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAogICAgIGVkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAogICAg
IGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TcGxpdFRleHRO
b2RlQ29udGFpbmluZ0VsZW1lbnRDb21tYW5kLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDgwNTI0NDc0ZThk
MjNiMWEwMmY5YzcxMTMxN2NjYjMzYTdiYjI2MmMuLjVhMDRkYWUwNzUyOTZiNDAwNjU1MWNjNzc3
NDAxOWY4MmRiZWM5MDcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxMS0wOC0yMiAg
TU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KKworICAgICAgICBTcGVsbC1jaGVj
a2luZyBzaG91bGQgc2hhcmUgdGhlIHVuaWZpZWQgdGV4dCBjaGVja2VyIHBhdGguCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NTg0OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdCBoYWQgaGF2ZSB0
d28gaW5kZXBlbmRlbnQgY29kZSBwYXRocyBmb3IgdGV4dCBtYXJraW5nLCBvbmUKKyAgICAgICAg
Zm9yIFVOSUZJRURfVEVYVF9DSEVDS0lORyBwbGF0Zm9ybXMgKHdoaWNoIGlzIGF2YWlsYWJsZSBm
b3IgTWFjIE9TCisgICAgICAgIDEwLjYgb3IgbGF0ZXIpIGFuZCBhbm90aGVyIGZvciBub24tVU5J
RklFRF9URVhUX0NIRUNLSU5HIHBsYXRmb3Jtcy4KKyAgICAgICAgVGhpcyBkdXBsaWNhdGlvbiBt
YWRlIGl0IGhhcmQgdG8gY2hhbmdlIGVkaXRpbmcgcmVsYXRlZCBjb2RlLgorCisgICAgICAgIFRo
aXMgY2hhbmdlIGVsaW1pbmF0ZWQgbW9zdCBvZiBub24tVU5JRklFRF9URVhUX0NIRUNLSU5HIHBh
dGggYW5kCisgICAgICAgIGFkb3B0ZWQgb3JpZ2luYWxseSBvbmx5LWZvci1VTklGSUVEX1RFWFRf
Q0hFQ0tJTkcgY29kZSBwYXRoIG9uCisgICAgICAgIGV2ZXJ5IHBsYXRmb3JtLCBpbXBsZW1lbnRp
bmcgYW4gdW5pZmllZCB0ZXh0IGNoZWNrZXIgZXF1aXZhbGVudAorICAgICAgICBpbnNpZGUgV2Vi
Q29yZTo6VGV4dENoZWNraW5nSGVscGVyIGZvciBwbGF0Zm9ybXMgd2hpY2ggZG9uJ3QgaGF2ZQor
ICAgICAgICBpdHMgb3duIHVuaWZpZWQgdGV4dCBjaGVja2VyLgorCisgICAgICAgIC0gV3JhcHBl
ZCBUZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKSB3aXRoCisgICAgICAg
ICAgVGV4dENoZWNraW5nSGVscGVyOjpjaGVja1RleHRPZlBhcmFncmFwaCgpCisgICAgICAgIC0g
SW1wbGVtZW50ZWQgVGV4dENoZWNrZXJDbGllbnQ6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKCkgZXF1
aXZhbGVudAorICAgICAgICAgIGluIFRleHRDaGVja2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoKSBmb3IKKyAgICAgICAgICBub24tVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykgcGxh
dGZvcm1zCisgICAgICAgIC0gRWxpbWluYXRlZCBhbGwgbm9uLVVTRShVTklGSUVEX1RFWFRfQ0hF
Q0tJTkcpIGNvZGUgcGF0aHMKKyAgICAgICAgICBmcm9tIEVkaXRvciBhbmQgVGV4dENoZWNraW5n
SGVscGVyLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZp
bGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiBXZWJDb3Jl
LnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHA6CisgICAgICAgICogZWRpdGluZy9FZGl0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFt
bWF0aWNhbFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtB
bGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMpOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdP
ckJhZEdyYW1tYXIpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6
OmZpbmRCYWRHcmFtbWFycyk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kTWlzc3BlbGxpbmdzKToK
KyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmg6CisKIDIwMTEtMDgt
MjEgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIEZp
eCAnbWFrZSBkaXN0JyBmb3IgV2ViS2l0R1RLKy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CmluZGV4IDNhYzI1MjU0YzM2NzlmNjFlN2EyMjk0YmEzNGNkNzlhNTNkNWFiZTcuLjk2N2NhYzk2
MjA4Mjk4NjRjYTYwNzZhNDBiMTdjMDkyYWM5ZjNjOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQpAQCAtMTQyNCw2ICsxNDI0LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCisJU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BsaXRFbGVtZW50Q29tbWFuZC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KaW5kZXggZWU3YWI4OGI2
ZDRhNTAyMjE5OTc1NmI3N2ZmMDZlYWZmMTg0YTFmNy4uZWViNmIyMjY2ZTk5MDk5YjRjZDVjYTFl
NWE0YWMzNTUxMmQyNjViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAu
aW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTc4MCwxMSArNzgwLDkg
QEAgX19aTjdXZWJDb3JlNkVkaXRvcjE5Y291bnRNYXRjaGVzRm9yVGV4dEVSS04zV1RGNlN0cmlu
Z0VQTlNfNVJhbmdlRWpqYgogX19aTjdXZWJDb3JlNkVkaXRvcjE5ZGVsZXRlV2l0aERpcmVjdGlv
bkVOU18xOFNlbGVjdGlvbkRpcmVjdGlvbkVOU18xNVRleHRHcmFudWxhcml0eUViYgogX19aTjdX
ZWJDb3JlNkVkaXRvcjE5aW5zZXJ0VW5vcmRlcmVkTGlzdEV2CiBfX1pON1dlYkNvcmU2RWRpdG9y
MjFhcHBseVN0eWxlVG9TZWxlY3Rpb25FUE5TXzE5Q1NTU3R5bGVEZWNsYXJhdGlvbkVOU18xMEVk
aXRBY3Rpb25FCi1fX1pON1dlYkNvcmU2RWRpdG9yMjFpc1NlbGVjdGlvbk1pc3NwZWxsZWRFdgog
X19aTjdXZWJDb3JlNkVkaXRvcjIzc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb25FMTZXcml0aW5nRGly
ZWN0aW9uCiBfX1pON1dlYkNvcmU2RWRpdG9yMjRhZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmdFYgog
X19aTjdXZWJDb3JlNkVkaXRvcjI0Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlRVBOU18xOUNTU1N0
eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQotX19aTjdXZWJDb3JlNkVkaXRvcjI0aXNT
ZWxlY3Rpb25VbmdyYW1tYXRpY2FsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNmRlY3JlYXNlU2Vs
ZWN0aW9uTGlzdExldmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNmluY3JlYXNlU2VsZWN0aW9u
TGlzdExldmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyNndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJv
YXJkRVJLTjNXVEY2U3RyaW5nRVJLTlMxXzZWZWN0b3JJUzJfTG0wRUVFCkBAIC03OTUsNyArNzkz
LDYgQEAgX19aTjdXZWJDb3JlNkVkaXRvcjI5Y2FuSW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2ZWxF
dgogX19aTjdXZWJDb3JlNkVkaXRvcjMwYXBwbHlQYXJhZ3JhcGhTdHlsZVRvU2VsZWN0aW9uRVBO
U18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQogX19aTjdXZWJDb3JlNkVk
aXRvcjMwZGVsZXRlU2VsZWN0aW9uV2l0aFNtYXJ0RGVsZXRlRWIKIF9fWk43V2ViQ29yZTZFZGl0
b3IzMHBhc3RlQXNQbGFpblRleHRCeXBhc3NpbmdESFRNTEV2Ci1fX1pON1dlYkNvcmU2RWRpdG9y
MzJndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbkV2CiBfX1pON1dlYkNvcmU2RWRpdG9y
MzNpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbE9yZGVyZWRFdgogX19aTjdXZWJDb3JlNkVkaXRv
cjM0c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZEViCiBfX1pON1dlYkNvcmU2RWRp
dG9yMzVpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbFVub3JkZXJlZEV2CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IGE5NGMyNTI0ZWI3OTcwMDRlZjY4MWMzYzI0Mzg0MGFlMDgzMDRjYTUuLmE3YTBiODBlNTE1
ZjNiYzI2NWRjMGIyNjIyNzRkOTNiNWM0ZTY4MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC02MDgsNiAr
NjA4LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFu
ZC5jcHAgXAogICAgIGVkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBcCiAgICAgZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwIFwKKyAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQu
Y3BwIFwKICAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwIFwKICAg
ICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NwbGl0VGV4
dE5vZGVDb21tYW5kLmNwcCBcCkBAIC0xNjAxLDYgKzE2MDIsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmggXAogICAgIGVkaXRpbmcvU2V0Tm9k
ZUF0dHJpYnV0ZUNvbW1hbmQuaCBcCiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2UuaCBcCisgICAg
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggXAogICAgIGVkaXRpbmcvU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIFwKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuaCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5oIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggZTgyYWZiYmU0N2IwOWNh
M2Q3OGRiMGRlNTU0ZWUwY2Y2MzYxZDg3MS4uM2U3YTk5MmQwNTdlYzZhZmI4MTdmNmRiY2JkNDhk
ODRhMjI3Y2U4NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKQEAgLTUyMjc0LDYgKzUyMjc0LDYyIEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZp
bGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJEZWJ1Z3xX
aW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wK
KwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmln
dXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZXxXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZM
aXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJPgorCQkJCQk8
VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1lPSJSZWxlYXNl
X0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFt
ZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJ
PgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4KKwkJ
CQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlOYW1l
PSJSZWxlYXNlX0xUQ0d8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJ
CQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgor
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmgiCisJCQkJPgor
CQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxp
bmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCmluZGV4IGQ4NjMw
OTc0MThkNDRmYjBjNTM2OTUzZDczZTJkMmY0ZTFmOGFkZmYuLjEzMTNhNzhjOWQ1OWY4ZDhlMDdm
ODIwZWQ1YjM4NmVlMmEwMGViZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdB
bGxJbk9uZS5jcHAKQEAgLTYzLDYgKzYzLDcgQEAKICNpbmNsdWRlIDxTZXROb2RlQXR0cmlidXRl
Q29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8U21hcnRSZXBsYWNlLmNwcD4KICNpbmNsdWRlIDxTbWFy
dFJlcGxhY2VDRi5jcHA+CisjaW5jbHVkZSA8U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHA+
CiAjaW5jbHVkZSA8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHA+CiAjaW5jbHVkZSA8
U3BlbGxDaGVja2VyLmNwcD4KICNpbmNsdWRlIDxTcGxpdEVsZW1lbnRDb21tYW5kLmNwcD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAzNGExODIzMjZjNWM5ZTFkNWVlZDY2ODdhM2Vj
YmViNWM4N2NmYTExLi5mMzVmNjVjMjc5MjI4YmQzNGJhODJlMzJhMGRkY2VhMWRjM2MzNWRkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xNzI0LDcgKzE3MjQsNiBAQCB2b2lkIEVk
aXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3Jk
OwogCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICBncmFtbWFyU2VhcmNoUmFu
Z2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKICAgICBib29sIGlzU3Bl
bGxpbmcgPSB0cnVlOwogICAgIGludCBmb3VuZE9mZnNldCA9IDA7CkBAIC0xNzM2LDI0ICsxNzM1
LDYgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVm
b3JlU2VsZWN0aW9uKQogICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZm91bmRJdGVtOwogICAg
ICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7CiAgICAgfQotI2Vsc2UKLSAg
ICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKLSAgICBtaXNzcGVsbGVkV29y
ZCA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmlu
ZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOwotCi0jaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgLy8gU2VhcmNoIGZv
ciBiYWQgZ3JhbW1hciB0aGF0IG9jY3VycyBwcmlvciB0byB0aGUgbmV4dCBtaXNzcGVsbGVkIHdv
cmQgKGlmIGFueSkKLSAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdl
LT5jbG9uZVJhbmdlKGVjKTsKLSAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkgewot
ICAgICAgICAvLyBTdG9wIGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQK
LSAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoZ3JhbW1hclNlYXJjaFJhbmdlLmdldCgp
KTsKLSAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZ09mZnNldCk7Ci0gICAgICAgIGdy
YW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGVj
KSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZWMpLCBlYyk7Ci0gICAgfQotICAgIAotICAg
IGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgYmFkR3JhbW1hclBocmFz
ZSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5k
Rmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNl
KTsKLSNlbmRpZgotI2VuZGlmCiAgICAgCiAgICAgLy8gSWYgd2UgZm91bmQgbmVpdGhlciBiYWQg
Z3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRyeSBhZ2FpbiAoYnV0IGRv
bid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCiAgICAgLy8g
YmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgpAQCAtMTc2Miw3ICsxNzQzLDYgQEAg
dm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2Vs
ZWN0aW9uKQogICAgICAgICAvLyBnb2luZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0
IGNodW5rIHdlIHRlc3RlZCBpcyBmYXIgZW5vdWdoCiAgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFu
Z2UtPnNldEVuZChzZWFyY2hFbmROb2RlQWZ0ZXJXcmFwLCBzZWFyY2hFbmRPZmZzZXRBZnRlcldy
YXAsIGVjKTsKICAgICAgICAgCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICAg
ICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShl
Yyk7CiAgICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3Bl
bGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0
YWlsKTsKICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsKQEAgLTE3NzIsMjIgKzE3NTIsNiBAQCB2
b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxl
Y3Rpb24pCiAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZm91bmRJdGVtOwogICAgICAg
ICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0OwogICAgICAgICB9Ci0jZWxz
ZQotICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwg
c3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZz
ZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotCi0jaWYgVVNFKEdSQU1NQVJfQ0hF
Q0tJTkcpCi0gICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2Ut
PmNsb25lUmFuZ2UoZWMpOwotICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxl
ZCB3b3JkCi0gICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhncmFtbWFyU2VhcmNo
UmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZ09mZnNl
dCk7Ci0gICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNldEVuZChjaGFycy5yYW5nZSgp
LT5zdGFydENvbnRhaW5lcihlYyksIGNoYXJzLnJhbmdlKCktPnN0YXJ0T2Zmc2V0KGVjKSwgZWMp
OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQot
ICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQo
KSwgZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWws
IGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsKLSNlbmRpZgotI2VuZGlmCiAgICAgfQogICAg
IAogICAgIGlmICghYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKQEAgLTE4MTksOTIgKzE3
ODMsMTIgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0
QmVmb3JlU2VsZWN0aW9uKQogICAgIH0KIH0KIAotYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uTWlz
c3BlbGxlZCgpCi17Ci0gICAgU3RyaW5nIHNlbGVjdGVkU3RyaW5nID0gc2VsZWN0ZWRUZXh0KCk7
Ci0gICAgaW50IGxlbmd0aCA9IHNlbGVjdGVkU3RyaW5nLmxlbmd0aCgpOwotICAgIGlmICghbGVu
Z3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNsaWVudCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsK
LSAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwotICAgIHRleHRDaGVja2VyKCktPmNoZWNr
U3BlbGxpbmdPZlN0cmluZyhzZWxlY3RlZFN0cmluZy5jaGFyYWN0ZXJzKCksIGxlbmd0aCwgJm1p
c3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgCi0gICAgLy8gVGhl
IHNlbGVjdGlvbiBvbmx5IGNvdW50cyBhcyBtaXNzcGVsbGVkIGlmIHRoZSBzZWxlY3RlZCB0ZXh0
IGlzIGV4YWN0bHkgb25lIG1pc3NwZWxsZWQgd29yZAotICAgIGlmIChtaXNzcGVsbGluZ0xlbmd0
aCAhPSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBVcGRhdGUg
dGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhpcyBlcnJvciAod2hldGhlciBv
ciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbikuCi0gICAgLy8gVGhpcyBpcyBu
ZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVlbnQgY2FsbCB0byBbTlNTcGVsbENoZWNrZXIgaWdu
b3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRoVGFnOl0gd29yawotICAgIC8vIGNvcnJlY3RseTsg
dGhhdCBjYWxsIGJlaGF2ZXMgZGlmZmVyZW50bHkgYmFzZWQgb24gd2hldGhlciB0aGUgc3BlbGxp
bmcgcGFuZWwgaXMgZGlzcGxheWluZyBhIG1pc3NwZWxsaW5nCi0gICAgLy8gb3IgYSBncmFtbWFy
IGVycm9yLgotICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJV2l0aE1pc3NwZWxsZWRXb3Jk
KHNlbGVjdGVkU3RyaW5nKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBFZGl0
b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCi17Ci0jaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJ
TkcpCi0gICAgVmVjdG9yPFN0cmluZz4gaWdub3JlZEd1ZXNzZXM7Ci0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAg
IGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gVGV4dENoZWNr
aW5nSGVscGVyKGNsaWVudCgpLCByYW5nZSkuaXNVbmdyYW1tYXRpY2FsKGlnbm9yZWRHdWVzc2Vz
KTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19Ci0KLVZlY3RvcjxTdHJpbmc+
IEVkaXRvcjo6Z3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKQotewotI2lmIFVTRShH
UkFNTUFSX0NIRUNLSU5HKQotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXM7Ci0gICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgp
OwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBndWVzc2VzOwotICAgIC8vIElnbm9y
ZSB0aGUgcmVzdWx0IG9mIGlzVW5ncmFtbWF0aWNhbDsgd2UganVzdCB3YW50IHRoZSBndWVzc2Vz
LCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55Ci0gICAgVGV4dENoZWNraW5nSGVscGVyKGNs
aWVudCgpLCByYW5nZSkuaXNVbmdyYW1tYXRpY2FsKGd1ZXNzZXMpOwotICAgIHJldHVybiBndWVz
c2VzOwotI2Vsc2UKLSAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKLSNlbmRpZgotfQotCi1W
ZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKLXsK
LSAgICBTdHJpbmcgc2VsZWN0ZWRTdHJpbmcgPSBzZWxlY3RlZFRleHQoKTsKLSAgICBBU1NFUlQo
c2VsZWN0ZWRTdHJpbmcubGVuZ3RoKCkpOwotCi0gICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsK
LSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmdldEd1ZXNzZXNGb3JX
b3JkKHNlbGVjdGVkU3RyaW5nLCBTdHJpbmcoKSwgZ3Vlc3Nlcyk7Ci0gICAgcmV0dXJuIGd1ZXNz
ZXM7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVu
Z3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNh
bCkKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2UgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICByZXR1cm4g
VGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCByYW5nZSkuZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRP
clVuZ3JhbW1hdGljYWxSYW5nZShpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgbWlzc3BlbGxl
ZCwgdW5ncmFtbWF0aWNhbCk7Ci0jZWxzZQotICAgIG1pc3NwZWxsZWQgPSBpc1NlbGVjdGlvbk1p
c3NwZWxsZWQoKTsKLSAgICBpZiAobWlzc3BlbGxlZCkgewotICAgICAgICB1bmdyYW1tYXRpY2Fs
ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigp
OwotICAgIH0KLSAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkgJiYgaXNTZWxlY3Rp
b25VbmdyYW1tYXRpY2FsKCkpIHsKLSAgICAgICAgdW5ncmFtbWF0aWNhbCA9IHRydWU7Ci0gICAg
ICAgIHJldHVybiBndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbigpOwotICAgIH0KLSAg
ICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Ci0j
ZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6OnNob3dTcGVsbGluZ0d1ZXNzUGFuZWwoKQpAQCAtMTk0
Niw3ICsxODMwLDYgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
KGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGkKIAogdm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndv
cmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcsIGJv
b2wgZG9SZXBsYWNlbWVudCkKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAg
IG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0
ZXJUeXBpbmcpOwogCiAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dENoZWNraW5nT3B0aW9u
cyA9IDA7CkBAIC0xOTc2LDg2ICsxODU5LDYgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwKICAg
ICB9IGVsc2UgewogICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKICAgICB9
Ci0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKLSAgICBV
TlVTRURfUEFSQU0oZG9SZXBsYWNlbWVudCk7Ci0KLSAgICBpZiAoIWlzQ29udGludW91c1NwZWxs
Q2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIENoZWNrIHNwZWxs
aW5nIG9mIG9uZSB3b3JkCi0gICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlOwotICAg
IG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQs
IExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZP
bkJvdW5kYXJ5KSksIG1pc3NwZWxsaW5nUmFuZ2UpOwotCi0gICAgLy8gQXV0b2NvcnJlY3QgdGhl
IG1pc3NwZWxsZWQgd29yZC4KLSAgICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICAvLyBHZXQgdGhlIG1pc3NwZWxsZWQgd29yZC4KLSAgICBjb25zdCBT
dHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwbGFpblRleHQobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSk7
Ci0gICAgU3RyaW5nIGF1dG9jb3JyZWN0ZWRTdHJpbmcgPSB0ZXh0Q2hlY2tlcigpLT5nZXRBdXRv
Q29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Ci0KLSAg
ICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5LCByZXBsYWNlIHRoZSBtaXNz
cGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgotICAgIGlmICghYXV0b2NvcnJlY3RlZFN0cmluZy5p
c0VtcHR5KCkpIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24obWlzc3Bl
bGxpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdTZWxlY3Rpb24g
IT0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICBpZiAo
IWZyYW1lKCktPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9u
KSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBmcmFtZSgpLT5zZWxlY3Rp
b24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWZyYW1lKCktPmVkaXRvcigpLT5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJp
bmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZnJhbWUoKS0+ZWRpdG9yKCktPnJlcGxhY2VTZWxl
Y3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwotCi0gICAg
ICAgIC8vIFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAgICAgICBm
cmFtZSgpLT5zZWxlY3Rpb24oKS0+bW92ZVRvKGZyYW1lKCktPnNlbGVjdGlvbigpLT5lbmQoKSk7
Ci0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7Ci0g
ICAgfQotCi0gICAgaWYgKCFpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIC8vIENoZWNrIGdyYW1tYXIgb2YgZW50aXJlIHNlbnRlbmNlCi0gICAg
bWFya0JhZEdyYW1tYXIoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uod29yZFN0YXJ0
KSwgZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQpKSk7Ci0jZW5kaWYKLX0KLSAgICAKLXZvaWQgRWRp
dG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIHNl
bGVjdGlvbiBhbHJlYWR5IGV4cGFuZGVkIHRvIHdvcmQgYm91bmRhcmllcy4KLSAgICAvLyBNaWdo
dCBiZSBuaWNlIHRvIGFzc2VydCB0aGF0IGhlcmUuCi0gICAgCi0gICAgLy8gVGhpcyBmdW5jdGlv
biBpcyB1c2VkIG9ubHkgZm9yIGFzLXlvdS10eXBlIGNoZWNraW5nLCBzbyBpZiB0aGF0J3Mgb2Zm
IHdlIGRvIG5vdGhpbmcuIE5vdGUgdGhhdAotICAgIC8vIGdyYW1tYXIgY2hlY2tpbmcgY2FuIG9u
bHkgYmUgb24gaWYgc3BlbGwgY2hlY2tpbmcgaXMgYWxzbyBvbi4KLSAgICBpZiAoIWlzQ29udGlu
dW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKTsK
LSAgICBpZiAoIXNlYXJjaFJhbmdlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gSWYg
d2UncmUgbm90IGluIGFuIGVkaXRhYmxlIG5vZGUsIGJhaWwuCi0gICAgTm9kZSogZWRpdGFibGVO
b2RlID0gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgaWYgKCFlZGl0YWJsZU5v
ZGUgfHwgIWVkaXRhYmxlTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxlKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmICghaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihlZGl0YWJsZU5vZGUpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIHNwZWxsIGNoZWNrZXIgaWYgaXQgaXMg
YXZhaWxhYmxlCi0gICAgaWYgKCFjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAg
IFRleHRDaGVja2luZ0hlbHBlciBjaGVja2VyKGNsaWVudCgpLCBzZWFyY2hSYW5nZSk7Ci0gICAg
aWYgKGNoZWNrU3BlbGxpbmcpCi0gICAgICAgIGNoZWNrZXIubWFya0FsbE1pc3NwZWxsaW5ncyhm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoV1RGX1VT
RV9HUkFNTUFSX0NIRUNLSU5HKTsKLSAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpKQotICAgICAgICAgICAgY2hlY2tlci5tYXJrQWxsQmFkR3JhbW1hcigpOwotICAgIH0gICAg
CiB9CiAKIGJvb2wgRWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKE5vZGUqIG5vZGUp
IGNvbnN0CkBAIC0yMDczLDIxICsxODc2LDggQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxDaGVja2lu
Z0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3QKICAgICByZXR1cm4gaXNTcGVsbENoZWNraW5n
RW5hYmxlZEZvcihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQoKS5kZXByZWNhdGVkTm9kZSgp
KTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3MoY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCi17
Ci0gICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxlY3Rpb24sIHRydWUsIGZpcnN0
TWlzc3BlbGxpbmdSYW5nZSk7Ci19Ci0gICAgCi12b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotewotICAgIEFTU0VSVChXVEZfVVNF
X0dSQU1NQVJfQ0hFQ0tJTkcpOwotICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1Jh
bmdlOwotICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoc2VsZWN0aW9uLCBmYWxzZSwg
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKLX0KLQogdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dENoZWNr
aW5nT3B0aW9ucywgUmFuZ2UqIHNwZWxsaW5nUmFuZ2UsIFJhbmdlKiBncmFtbWFyUmFuZ2UpCiB7
Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICAvLyBUaGVyZSBzaG91bGRuJ3Qg
YmUgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBhdCB0aGlzIG1vbWVudC4KICAgICBBU1NFUlQoIW1f
c3BlbGxpbmdDb3JyZWN0b3ItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCkBAIC0yMTQxLDEx
ICsxOTMxLDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDCiAKICAgICBWZWN0b3I8VGV4dENo
ZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikKLSAgICAg
ICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoZ3JhbW1hclBhcmFncmFwaC50
ZXh0Q2hhcmFjdGVycygpLCBncmFtbWFyUGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVUZXh0Q2hlY2tpbmdU
eXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CisgICAgICAgIFRleHRDaGVj
a2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY2xpZW50KCksIGdyYW1tYXJQYXJhZ3Jh
cGgudGV4dENoYXJhY3RlcnMoKSwgZ3JhbW1hclBhcmFncmFwaC50ZXh0TGVuZ3RoKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVRleHRD
aGVja2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzKTsKICAgICBlbHNl
Ci0gICAgICAgIHRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHNwZWxsaW5nUGFy
YWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHNwZWxsaW5nUGFyYWdyYXBoLnRleHRMZW5ndGgoKSwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVUZXh0
Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CisgICAgICAg
IFRleHRDaGVja2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY2xpZW50KCksIHNwZWxs
aW5nUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHNwZWxsaW5nUGFyYWdyYXBoLnRleHRMZW5n
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3VsdHMp
OwogICAgICAgICAKIAogICAgIC8vIElmIHRoaXMgY2hlY2tpbmcgaXMgb25seSBmb3Igc2hvd2lu
ZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBzaG91bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlzc3BlbGxp
bmdzLgpAQCAtMjI3OCwxNyArMjA2OCwxMCBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxs
aW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0QwogICAg
ICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAg
ICAgICAgfQogICAgIH0KLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHRleHRDaGVja2luZ09wdGlvbnMpOwotICAgIFVOVVNFRF9QQVJBTShzcGVsbGlu
Z1JhbmdlKTsKLSAgICBVTlVTRURfUEFSQU0oZ3JhbW1hclJhbmdlKTsKLSNlbmRpZiAvLyBVU0Uo
VU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVw
bGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKIHsKLSNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQogICAgIGlmIChyZXBsYWNlZFN0cmluZy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMjMwMiwyOCArMjA4NSwxNiBAQCB2b2lkIEVkaXRvcjo6Y2hh
bmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAg
ICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShwYXJhZ3Jh
cGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgoKSk7CiAgICAgY2hhbmdl
ZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1hcmtl
cihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3RyaW5n
KCkpOwogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFuZ2Uu
Z2V0KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBVTlVTRURfUEFS
QU0ocmVwbGFjZWRTdHJpbmcpOwotI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcp
CiB9CiAKLQogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFtbWFyLCBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9uKQogewotI2lmIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5h
YmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dENo
ZWNraW5nT3B0aW9ucyA9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5
cGVDb3JyZWN0aW9uOwogICAgIGlmIChtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSkKICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBl
R3JhbW1hcjsKICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRl
eHRDaGVja2luZ09wdGlvbnMsIHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Ci0jZWxz
ZQotICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1hcmtNaXNz
cGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0gICAg
aWYgKG1hcmtHcmFtbWFyKQotICAgICAgICBtYXJrQmFkR3JhbW1hcihncmFtbWFyU2VsZWN0aW9u
KTsKLSNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6dW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcm
IGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmgKaW5kZXggYTdlMWYzYjkyOWU4MjViZWZlNmM2NGU0ZTQ1ZDA3YzIxYTNmYWQwYS4uM2RiZDgz
OTE0ZTRkMmRjMTI5ZTlmMDFhODk2Mzk0NGRkNTZlYjg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCkBAIC0yMTAsMTYgKzIxMCwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpZ25vcmVTcGVsbGlu
ZygpOwogICAgIHZvaWQgbGVhcm5TcGVsbGluZygpOwogICAgIGludCBzcGVsbENoZWNrZXJEb2N1
bWVudFRhZygpOwotICAgIGJvb2wgaXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCk7Ci0gICAgYm9v
bCBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzRm9y
TWlzc3BlbGxlZFNlbGVjdGlvbigpOwotICAgIFZlY3RvcjxTdHJpbmc+IGd1ZXNzZXNGb3JVbmdy
YW1tYXRpY2FsU2VsZWN0aW9uKCk7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3Nw
ZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5n
cmFtbWF0aWNhbCk7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdFbmFibGVkSW5Gb2N1c2VkTm9k
ZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihOb2RlKikgY29u
c3Q7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmdUb1dvcmQoY29uc3QgVmlz
aWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwotICAgIHZvaWQgbWFya01pc3NwZWxs
aW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlKTsKLSAgICB2b2lkIG1hcmtCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFtbWFyLCBjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9uKTsKIAogI2lmIFVTRShBVVRPTUFUSUNf
VEVYVF9SRVBMQUNFTUVOVCkKQEAgLTQwMyw3ICszOTcsNiBAQCBwcml2YXRlOgogICAgIHZvaWQg
cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYsIGJvb2wgc2VsZWN0UmVwbGFj
ZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlKTsKICAgICB2b2lkIHdyaXRlU2VsZWN0aW9uVG9QYXN0
ZWJvYXJkKFBhc3RlYm9hcmQqKTsKICAgICB2b2lkIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGlu
Z09wZXJhdGlvbigpOwotICAgIHZvaWQgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIHJlc29sdmVU
ZXh0Q2hlY2tpbmdUeXBlTWFzayhUZXh0Q2hlY2tpbmdUeXBlTWFzayk7CiAKICAgICB2b2lkIHNl
bGVjdENvbXBvc2l0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5jcHAKaW5kZXggMGJkZmJkODI2OTcxMTYwZjcyOWZmOWViOGJhMzYzMTc0YTk4ZDM4
ZC4uZTdiNGRmY2E1MTkxNmU4OTM3NWUxNDRlZWJiNGUwOTA3YjdkNWQ5NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzAsNiArMzAsNyBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5o
IgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9y
LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCkBAIC0xNjQsNjggKzE2NSw4IEBAIFRl
eHRDaGVja2luZ0hlbHBlcjo6flRleHRDaGVja2luZ0hlbHBlcigpCiB7CiB9CiAKLVN0cmluZyBU
ZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKGludCYgZmlyc3RNaXNzcGVs
bGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5n
UmFuZ2UpCi17Ci0gICAgV29yZEF3YXJlSXRlcmF0b3IgaXQobV9yYW5nZS5nZXQoKSk7Ci0gICAg
Zmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IDA7Ci0gICAgCi0gICAgU3RyaW5nIGZpcnN0TWlzc3Bl
bGxpbmc7Ci0gICAgaW50IGN1cnJlbnRDaHVua09mZnNldCA9IDA7Ci0KLSAgICB3aGlsZSAoIWl0
LmF0RW5kKCkpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJzID0gaXQuY2hhcmFjdGVycygp
OwotICAgICAgICBpbnQgbGVuID0gaXQubGVuZ3RoKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBT
a2lwIHNvbWUgd29yayBmb3Igb25lLXNwYWNlLWNoYXIgaHVua3MKLSAgICAgICAgaWYgKCEobGVu
ID09IDEgJiYgY2hhcnNbMF0gPT0gJyAnKSkgewotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
bnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOwotICAgICAgICAgICAgaW50IG1pc3NwZWxsaW5n
TGVuZ3RoID0gMDsKLSAgICAgICAgICAgIG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5jaGVja1Nw
ZWxsaW5nT2ZTdHJpbmcoY2hhcnMsIGxlbiwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVs
bGluZ0xlbmd0aCk7Ci0KLSAgICAgICAgICAgIC8vIDU0OTA2Mjcgc2hvd3MgdGhhdCB0aGVyZSB3
YXMgc29tZSBjb2RlIHBhdGggaGVyZSB3aGVyZSB0aGUgU3RyaW5nIGNvbnN0cnVjdG9yIGJlbG93
IGNyYXNoZXMuCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IGV4YWN0bHkgd2hhdCBjb21i
aW5hdGlvbiBvZiBiYWQgaW5wdXQgY2F1c2VkIHRoaXMsIHNvIHdlJ3JlIG1ha2luZyB0aGlzIG11
Y2gKLSAgICAgICAgICAgIC8vIG1vcmUgcm9idXN0IGFnYWluc3QgYmFkIGlucHV0IG9uIHJlbGVh
c2UgYnVpbGRzLgotICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTGVuZ3RoID49IDApOwot
ICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gPj0gLTEpOwotICAgICAgICAg
ICAgQVNTRVJUKCFtaXNzcGVsbGluZ0xlbmd0aCB8fCBtaXNzcGVsbGluZ0xvY2F0aW9uID49IDAp
OwotICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24gPCBsZW4pOwotICAgICAg
ICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbik7Ci0gICAgICAgICAgICBBU1NF
UlQobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbik7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ0xvY2F0aW9uID49IDAgJiYgbWlz
c3BlbGxpbmdMZW5ndGggPiAwICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gPCBsZW4gJiYgbWlzc3Bl
bGxpbmdMZW5ndGggPD0gbGVuICYmIG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xl
bmd0aCA8PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBDb21w
dXRlIHJhbmdlIG9mIG1pc3NwZWxsZWQgd29yZAotICAgICAgICAgICAgICAgIFJlZlB0cjxSYW5n
ZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3VicmFuZ2UobV9yYW5nZS5nZXQo
KSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdM
ZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIgZmlyc3QtZW5jb3VudGVyZWQg
bWlzc3BlbGxpbmcgYW5kIGl0cyBvZmZzZXQuCi0gICAgICAgICAgICAgICAgaWYgKCFmaXJzdE1p
c3NwZWxsaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQg
PSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0aW9uOwotICAgICAgICAgICAg
ICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0gU3RyaW5nKGNoYXJzICsgbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1JhbmdlOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBmb3IgbWlzc3BlbGxlZCB3b3JkLgotICAgICAg
ICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAgICAgICAgICAgIG1pc3NwZWxs
aW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRN
YXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoIWVjKTsKLQotICAgICAgICAgICAgICAgIC8vIEJhaWwg
b3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmlyc3QgbWlzc3BlbGxpbmcsIGFuZCBub3Qg
YWxsIGluc3RhbmNlcy4KLSAgICAgICAgICAgICAgICBpZiAoIW1hcmtBbGwpCi0gICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBjdXJyZW50Q2h1bmtPZmZzZXQgKz0gbGVuOwotICAgICAgICBpdC5hZHZhbmNlKCk7Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBmaXJzdE1pc3NwZWxsaW5nOwotfQotCiBTdHJpbmcgVGV4
dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNo
ZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVsbGluZywgaW50JiBvdXRGaXJzdEZvdW5kT2Zmc2V0
LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsKQogewotI2lmIFVTRShVTklGSUVEX1RF
WFRfQ0hFQ0tJTkcpCiAgICAgU3RyaW5nIGZpcnN0Rm91bmRJdGVtOwogICAgIFN0cmluZyBtaXNz
cGVsbGVkV29yZDsKICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKQEAgLTI3Niw3ICsyMTcs
NyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFk
R3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgICAgICAgICAg
ICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChU
ZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVj
a2VyKCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCks
IHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CisgICAg
ICAgICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgobV9jbGllbnQsIHBhcmFncmFwaFN0cmlu
Zy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywg
cmVzdWx0cyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKQEAgLTM0NCwx
NCArMjg1LDYgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxp
bmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgdG90YWxMZW5ndGhQ
cm9jZXNzZWQgKz0gY3VycmVudExlbmd0aDsKICAgICB9CiAgICAgcmV0dXJuIGZpcnN0Rm91bmRJ
dGVtOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBVTlVTRURfUEFSQU0o
Y2hlY2tHcmFtbWFyKTsKLSAgICBVTlVTRURfUEFSQU0ob3V0SXNTcGVsbGluZyk7Ci0gICAgVU5V
U0VEX1BBUkFNKG91dEZpcnN0Rm91bmRPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShvdXRHcmFt
bWFyRGV0YWlsKTsKLSAgICByZXR1cm4gIiI7Ci0jZW5kaWYgLy8gVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKIH0KIAogaW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRl
dGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQgYmFk
R3JhbW1hclBocmFzZUxvY2F0aW9uLCBpbnQgLypiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKi8sIGlu
dCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgYm9vbCBtYXJrQWxsKQpAQCAtNDAxLDExNiAr
MzM0LDkgQEAgaW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFpbChj
b25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW0KICNlbmRpZgogfQogCi1TdHJpbmcgVGV4
dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdyYW1tYXJEZXRhaWwmIG91dEdy
YW1tYXJEZXRhaWwsIGludCYgb3V0R3JhbW1hclBocmFzZU9mZnNldCwgYm9vbCBtYXJrQWxsKQot
ewotICAgIEFTU0VSVChXVEZfVVNFX0dSQU1NQVJfQ0hFQ0tJTkcpOwotICAgIC8vIEluaXRpYWxp
emUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBpZiB3ZSBmaW5kIHNvbWV0
aGluZyB0byByZXR1cm4uCi0gICAgb3V0R3JhbW1hckRldGFpbC5sb2NhdGlvbiA9IC0xOwotICAg
IG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLmd1ZXNz
ZXMuY2xlYXIoKTsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLnVzZXJEZXNjcmlwdGlvbiA9ICIiOwot
ICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSAwOwotICAgIAotICAgIFN0cmluZyBmaXJzdEJh
ZEdyYW1tYXJQaHJhc2U7Ci0KLSAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBlbmNv
bXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIgY2hlY2tpbmcgbmVlZHMgdGhh
dCBtdWNoIGNvbnRleHQuCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZy
b20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5h
bCBzZWFyY2ggcmFuZ2UsCi0gICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1
bHRzIGluIHRoaXMgYXJlYS4KLSAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1f
cmFuZ2UpOwotICAgIAotICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZyb20gYmVnaW5uaW5nIG9mIHBh
cmFncmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZSBzdGFy
dCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLgotICAgIGludCBzdGFydE9mZnNldCA9IDA7
Ci0gICAgd2hpbGUgKHN0YXJ0T2Zmc2V0IDwgcGFyYWdyYXBoLmNoZWNraW5nRW5kKCkpIHsKLSAg
ICAgICAgVmVjdG9yPEdyYW1tYXJEZXRhaWw+IGdyYW1tYXJEZXRhaWxzOwotICAgICAgICBpbnQg
YmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID0gLTE7Ci0gICAgICAgIGludCBiYWRHcmFtbWFyUGhy
YXNlTGVuZ3RoID0gMDsKLSAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrR3Jh
bW1hck9mU3RyaW5nKHBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpICsgc3RhcnRPZmZzZXQsIHBh
cmFncmFwaC50ZXh0TGVuZ3RoKCkgLSBzdGFydE9mZnNldCwgZ3JhbW1hckRldGFpbHMsICZiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghYmFkR3JhbW1hclBocmFzZUxlbmd0aCkgewotICAgICAgICAgICAgQVNT
RVJUKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9PSAtMSk7Ci0gICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQoYmFkR3JhbW1hclBocmFzZUxv
Y2F0aW9uID49IDApOwotICAgICAgICBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKz0gc3RhcnRP
ZmZzZXQ7Ci0KLSAgICAgICAgCi0gICAgICAgIC8vIEZvdW5kIHNvbWUgYmFkIGdyYW1tYXIuIEZp
bmQgdGhlIGVhcmxpZXN0IGRldGFpbCByYW5nZSB0aGF0IHN0YXJ0cyBpbiBvdXIgc2VhcmNoIHJh
bmdlIChpZiBhbnkpLgotICAgICAgICBpbnQgYmFkR3JhbW1hckluZGV4ID0gZmluZEZpcnN0R3Jh
bW1hckRldGFpbChncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBiYWRH
cmFtbWFyUGhyYXNlTGVuZ3RoLCBwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCBwYXJhZ3JhcGgu
Y2hlY2tpbmdFbmQoKSwgbWFya0FsbCk7Ci0gICAgICAgIGlmIChiYWRHcmFtbWFySW5kZXggPj0g
MCkgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPihiYWRHcmFtbWFy
SW5kZXgpIDwgZ3JhbW1hckRldGFpbHMuc2l6ZSgpKTsKLSAgICAgICAgICAgIG91dEdyYW1tYXJE
ZXRhaWwgPSBncmFtbWFyRGV0YWlsc1tiYWRHcmFtbWFySW5kZXhdOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gSWYgd2UgZm91bmQgYSBkZXRhaWwgaW4gcmFuZ2UsIHRoZW4gd2UgaGF2ZSBmb3Vu
ZCB0aGUgZmlyc3QgYmFkIHBocmFzZSAodW5sZXNzIHdlIGZvdW5kIG9uZSBlYXJsaWVyIGJ1dAot
ICAgICAgICAvLyBrZXB0IGdvaW5nIHNvIHdlIGNvdWxkIG1hcmsgYWxsIGluc3RhbmNlcykuCi0g
ICAgICAgIGlmIChiYWRHcmFtbWFySW5kZXggPj0gMCAmJiBmaXJzdEJhZEdyYW1tYXJQaHJhc2Uu
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBvdXRHcmFtbWFyUGhyYXNlT2Zmc2V0ID0gYmFkR3Jh
bW1hclBocmFzZUxvY2F0aW9uIC0gcGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKTsKLSAgICAgICAg
ICAgIGZpcnN0QmFkR3JhbW1hclBocmFzZSA9IHBhcmFncmFwaC50ZXh0U3Vic3RyaW5nKGJhZEdy
YW1tYXJQaHJhc2VMb2NhdGlvbiwgYmFkR3JhbW1hclBocmFzZUxlbmd0aCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIC8vIEZvdW5kIG9uZS4gV2UncmUgZG9uZSBub3csIHVubGVzcyB3ZSdy
ZSBtYXJraW5nIGVhY2ggaW5zdGFuY2UuCi0gICAgICAgICAgICBpZiAoIW1hcmtBbGwpCi0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGVzZSByZXN1bHRz
IHdlcmUgYWxsIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggYW5kIHRoZSBzdGFy
dCBvZiB0aGUgc2VhcmNoIHJhbmdlOyBsb29rCi0gICAgICAgIC8vIGJleW9uZCB0aGlzIHBocmFz
ZS4KLSAgICAgICAgc3RhcnRPZmZzZXQgPSBiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24gKyBiYWRH
cmFtbWFyUGhyYXNlTGVuZ3RoOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gZmlyc3RCYWRHcmFt
bWFyUGhyYXNlOwotfQotCi0KLWJvb2wgVGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGlj
YWwoVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXNWZWN0b3IpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKFdU
Rl9VU0VfR1JBTU1BUl9DSEVDS0lORyk7Ci0gICAgaWYgKCFtX2NsaWVudCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBpZiAoIW1fcmFuZ2UgfHwg
bV9yYW5nZS0+Y29sbGFwc2VkKGVjKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IC8vIFJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBwYXNzZWQgcmFuZ2UgZXhhY3RseSBjb3JyZXNw
b25kcyB0byBhIGJhZCBncmFtbWFyIGRldGFpbCByYW5nZS4gVGhpcyBpcyBhbmFsb2dvdXMKLSAg
ICAvLyB0byBpc1NlbGVjdGlvbk1pc3NwZWxsZWQuIEl0J3Mgbm90IGdvb2QgZW5vdWdoIGZvciB0
aGVyZSB0byBiZSBzb21lIGJhZCBncmFtbWFyIHNvbWV3aGVyZSBpbiB0aGUgcmFuZ2UsCi0gICAg
Ly8gb3Igb3ZlcmxhcHBpbmcgdGhlIHJhbmdlOyB0aGUgcmFuZ2VzIG11c3QgZXhhY3RseSBtYXRj
aC4KLSAgICBndWVzc2VzVmVjdG9yLmNsZWFyKCk7Ci0gICAgaW50IGdyYW1tYXJQaHJhc2VPZmZz
ZXQ7Ci0gICAgCi0gICAgR3JhbW1hckRldGFpbCBncmFtbWFyRGV0YWlsOwotICAgIFN0cmluZyBi
YWRHcmFtbWFyUGhyYXNlID0gY29uc3RfY2FzdDxUZXh0Q2hlY2tpbmdIZWxwZXIqPih0aGlzKS0+
ZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBm
YWxzZSk7ICAgIAotICAgIAotICAgIC8vIE5vIGJhZCBncmFtbWFyIGluIHRoZXNlIHBhcnRzIGF0
IGFsbC4KLSAgICBpZiAoYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciwgYnV0IHBocmFzZSAoZS5nLiBzZW50
ZW5jZSkgc3RhcnRzIGJleW9uZCBzdGFydCBvZiByYW5nZS4KLSAgICBpZiAoZ3JhbW1hclBocmFz
ZU9mZnNldCA+IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBBU1NFUlQoZ3Jh
bW1hckRldGFpbC5sb2NhdGlvbiA+PSAwICYmIGdyYW1tYXJEZXRhaWwubGVuZ3RoID4gMCk7Ci0g
ICAgCi0gICAgLy8gQmFkIGdyYW1tYXIsIGJ1dCBzdGFydCBvZiBkZXRhaWwgKGUuZy4gdW5ncmFt
bWF0aWNhbCB3b3JkKSBkb2Vzbid0IG1hdGNoIHN0YXJ0IG9mIHJhbmdlCi0gICAgaWYgKGdyYW1t
YXJEZXRhaWwubG9jYXRpb24gKyBncmFtbWFyUGhyYXNlT2Zmc2V0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIgYXQgc3RhcnQgb2YgcmFuZ2UsIGJ1dCBl
bmQgb2YgYmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVuZCBvZiByYW5nZQotICAgIGlm
IChncmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKG1fcmFu
Z2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gVXBkYXRlIHRo
ZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRoaXMgZXJyb3IgKHdoZXRoZXIgb3Ig
bm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4pLgotICAgIC8vIFRoaXMgaXMgbmVj
ZXNzYXJ5IHRvIG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8gW05TU3BlbGxDaGVja2VyIGlnbm9y
ZVdvcmQ6aW5TcGVsbERvY3VtZW50V2l0aFRhZzpdIHdvcmsKLSAgICAvLyBjb3JyZWN0bHk7IHRo
YXQgY2FsbCBiZWhhdmVzIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdoZXRoZXIgdGhlIHNwZWxsaW5n
IHBhbmVsIGlzIGRpc3BsYXlpbmcgYSBtaXNzcGVsbGluZwotICAgIC8vIG9yIGEgZ3JhbW1hciBl
cnJvci4KLSAgICBtX2NsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdpdGhHcmFtbWFyU3RyaW5nKGJh
ZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwotICAgIAotICAgIHJldHVybiB0cnVlOwot
fQogCiBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVs
bGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG1pc3NwZWxs
ZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpIGNvbnN0CiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWM7CiAgICAgbWlzc3BlbGxlZCA9IGZhbHNlOwpAQCAtNTI2LDcgKzM1Miw3IEBAIFZlY3RvcjxT
dHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1h
dGljYWxSYW5nZShib29sCiAKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRz
OwogICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMgPSBjaGVja0dyYW1tYXIg
PyAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIDog
VGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgIG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5j
aGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgcGFyYWdyYXBo
LnRleHRMZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CisgICAgY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgobV9jbGllbnQsIHBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBwYXJhZ3JhcGgu
dGV4dExlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKICAgICAKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBU
ZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwpAQCAtNTYyLDMyICszODgs
OTkgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3Bl
bGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gZ3Vlc3NlczsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgVU5VU0VE
X1BBUkFNKGNoZWNrR3JhbW1hcik7Ci0gICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsZWQpOwotICAg
IFVOVVNFRF9QQVJBTSh1bmdyYW1tYXRpY2FsKTsKLSAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKLSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCisjaWYgIVVTRShV
TklGSUVEX1RFWFRfQ0hFQ0tJTkcpCitzdGF0aWMgdm9pZCBmaW5kQmFkR3JhbW1hcnMoRWRpdG9y
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgc3RhcnQsIGludCBsZW5ndGgs
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQoreworICAgIEFTU0VSVChXVEZf
VVNFX0dSQU1NQVJfQ0hFQ0tJTkcpOworICAgIEFTU0VSVChjbGllbnQtPmlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpKTsKIAotdm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxNaXNzcGVs
bGluZ3MoUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQorICAgIGludCBjaGVj
a0xvY2F0aW9uID0gc3RhcnQ7CisgICAgaW50IGNoZWNrTGVuZ3RoID0gbGVuZ3RoOworICAgIAor
ICAgIHdoaWxlICgwIDwgY2hlY2tMZW5ndGgpIHsKKyAgICAgICAgaW50IGJhZEdyYW1tYXJMb2Nh
dGlvbiA9IC0xOworICAgICAgICBpbnQgYmFkR3JhbW1hckxlbmd0aCA9IDA7CisgICAgICAgIFZl
Y3RvcjxHcmFtbWFyRGV0YWlsPiBiYWRHcmFtbWFyRGV0YWlsczsKKyAgICAgICAgY2xpZW50LT50
ZXh0Q2hlY2tlcigpLT5jaGVja0dyYW1tYXJPZlN0cmluZyh0ZXh0ICsgY2hlY2tMb2NhdGlvbiwg
Y2hlY2tMZW5ndGgsIGJhZEdyYW1tYXJEZXRhaWxzLCAmYmFkR3JhbW1hckxvY2F0aW9uLCAmYmFk
R3JhbW1hckxlbmd0aCk7CisgICAgICAgIGlmICghYmFkR3JhbW1hckxlbmd0aCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBBU1NFUlQoMCA8PSBiYWRHcmFtbWFyTG9jYXRpb24gJiYgYmFk
R3JhbW1hckxvY2F0aW9uIDw9IGNoZWNrTGVuZ3RoKTsKKyAgICAgICAgQVNTRVJUKDAgPCBiYWRH
cmFtbWFyTGVuZ3RoICYmIGJhZEdyYW1tYXJMb2NhdGlvbiArIGJhZEdyYW1tYXJMZW5ndGggPD0g
Y2hlY2tMZW5ndGgpOworICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgYmFkR3JhbW1hcjsKKyAg
ICAgICAgYmFkR3JhbW1hci50eXBlID0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXI7CisgICAgICAg
IGJhZEdyYW1tYXIubG9jYXRpb24gPSBjaGVja0xvY2F0aW9uICsgYmFkR3JhbW1hckxvY2F0aW9u
OworICAgICAgICBiYWRHcmFtbWFyLmxlbmd0aCA9IGJhZEdyYW1tYXJMZW5ndGg7CisgICAgICAg
IGJhZEdyYW1tYXIuZGV0YWlscy5zd2FwKGJhZEdyYW1tYXJEZXRhaWxzKTsKKyAgICAgICAgcmVz
dWx0cy5hcHBlbmQoYmFkR3JhbW1hcik7CisKKyAgICAgICAgY2hlY2tMb2NhdGlvbiArPSAoYmFk
R3JhbW1hckxvY2F0aW9uICsgYmFkR3JhbW1hckxlbmd0aCk7CisgICAgICAgIGNoZWNrTGVuZ3Ro
IC09IChiYWRHcmFtbWFyTG9jYXRpb24gKyBiYWRHcmFtbWFyTGVuZ3RoKTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGZpbmRNaXNzcGVsbGluZ3MoRWRpdG9yQ2xpZW50KiBjbGllbnQsIGNvbnN0
IFVDaGFyKiB0ZXh0LCBpbnQgc3RhcnQsIGludCBsZW5ndGgsIFZlY3RvcjxUZXh0Q2hlY2tpbmdS
ZXN1bHQ+JiByZXN1bHRzKQogewotICAgIC8vIFVzZSB0aGUgIm1hcmtBbGwiIGZlYXR1cmUgb2Yg
ZmluZEZpcnN0TWlzc3BlbGxpbmcuIElnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGFuZCB0aGUgIm91
dCBwYXJhbWV0ZXIiOwotICAgIC8vIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIG1hcmsgZXZlcnkgaW5z
dGFuY2UuCi0gICAgaW50IGlnbm9yZWRPZmZzZXQ7Ci0gICAgZmluZEZpcnN0TWlzc3BlbGxpbmco
aWdub3JlZE9mZnNldCwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKKyAgICBUZXh0QnJl
YWtJdGVyYXRvciogaXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRvcih0ZXh0ICsgc3RhcnQsIGxl
bmd0aCk7CisgICAgaWYgKCFpdGVyYXRvcikKKyAgICAgICAgcmV0dXJuOworICAgIGludCB3b3Jk
U3RhcnQgPSB0ZXh0QnJlYWtDdXJyZW50KGl0ZXJhdG9yKTsKKyAgICB3aGlsZSAoMCA8PSB3b3Jk
U3RhcnQpIHsKKyAgICAgICAgaW50IHdvcmRFbmQgPSB0ZXh0QnJlYWtOZXh0KGl0ZXJhdG9yKTsK
KyAgICAgICAgaWYgKHdvcmRFbmQgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlu
dCB3b3JkTGVuZ3RoID0gd29yZEVuZCAtIHdvcmRTdGFydDsKKyAgICAgICAgaW50IG1pc3NwZWxs
aW5nTG9jYXRpb24gPSAtMTsKKyAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKKyAg
ICAgICAgY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcodGV4dCAr
IHN0YXJ0ICsgd29yZFN0YXJ0LCB3b3JkTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1p
c3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgaWYgKDAgPCBtaXNzcGVsbGluZ0xlbmd0aCkgewor
ICAgICAgICAgICAgQVNTRVJUKDAgPD0gbWlzc3BlbGxpbmdMb2NhdGlvbiAmJiBtaXNzcGVsbGlu
Z0xvY2F0aW9uIDw9IHdvcmRMZW5ndGgpOworICAgICAgICAgICAgQVNTRVJUKDAgPCBtaXNzcGVs
bGluZ0xlbmd0aCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGggPD0g
d29yZExlbmd0aCk7CisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1bHQgbWlzc3BlbGxpbmc7
CisgICAgICAgICAgICBtaXNzcGVsbGluZy50eXBlID0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5n
OworICAgICAgICAgICAgbWlzc3BlbGxpbmcubG9jYXRpb24gPSBzdGFydCArIHdvcmRTdGFydCAr
IG1pc3NwZWxsaW5nTG9jYXRpb247CisgICAgICAgICAgICBtaXNzcGVsbGluZy5sZW5ndGggPSBt
aXNzcGVsbGluZ0xlbmd0aDsKKyAgICAgICAgICAgIG1pc3NwZWxsaW5nLnJlcGxhY2VtZW50ID0g
Y2xpZW50LT50ZXh0Q2hlY2tlcigpLT5nZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVs
bGVkV29yZChTdHJpbmcodGV4dCArIG1pc3NwZWxsaW5nLmxvY2F0aW9uLCBtaXNzcGVsbGluZy5s
ZW5ndGgpKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1pc3NwZWxsaW5nKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHdvcmRTdGFydCA9IHdvcmRFbmQ7CisgICAgfQogfQorI2VuZGlmCiAK
LXZvaWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsQmFkR3JhbW1hcigpCit2b2lkIFRleHRD
aGVja2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoRWRpdG9yQ2xpZW50KiBjbGllbnQs
IGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVj
a2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKIHsKLSAgICBB
U1NFUlQoV1RGX1VTRV9HUkFNTUFSX0NIRUNLSU5HKTsKLSAgICAvLyBVc2UgdGhlICJtYXJrQWxs
IiBmZWF0dXJlIG9mIG9maW5kRmlyc3RCYWRHcmFtbWFyLiBJZ25vcmUgdGhlIHJldHVybiB2YWx1
ZSBhbmQgIm91dCBwYXJhbWV0ZXJzIjsgYWxsIHdlIG5lZWQgdG8KLSAgICAvLyBkbyBpcyBtYXJr
IGV2ZXJ5IGluc3RhbmNlLgotICAgIEdyYW1tYXJEZXRhaWwgaWdub3JlZEdyYW1tYXJEZXRhaWw7
Ci0gICAgaW50IGlnbm9yZWRPZmZzZXQ7Ci0gICAgZmluZEZpcnN0QmFkR3JhbW1hcihpZ25vcmVk
R3JhbW1hckRldGFpbCwgaWdub3JlZE9mZnNldCwgdHJ1ZSk7CisgICAgQVNTRVJUKHJlc3VsdHMu
aXNFbXB0eSgpKTsKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIGNsaWVudC0+
dGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dCwgbGVuZ3RoLCBjaGVja2lu
Z1R5cGVzLCByZXN1bHRzKTsKKyNlbHNlCisgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4g
c3BlbGxpbmdSZXN1bHQ7CisgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmcpCisgICAgICAgIGZpbmRNaXNzcGVsbGluZ3MoY2xpZW50LCB0ZXh0LCAwLCBsZW5n
dGgsIHNwZWxsaW5nUmVzdWx0KTsKKworICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IGdy
YW1tYXJSZXN1bHQ7CisgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBUZXh0Q2hlY2tpbmdUeXBlR3Jh
bW1hcikgeworICAgICAgICAvLyBPbmx5IGNoZWNrcyBncmFtbWFydGljYWwgZXJyb3IgYmVmb3Jl
IHRoZSBmaXJzdCBtaXNzcGVsbGluZy4KKyAgICAgICAgaW50IGdyYW1tYXJDaGVja0xlbmd0aCA9
IGxlbmd0aDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzcGVsbGluZ1Jlc3VsdC5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHNwZWxsaW5nUmVzdWx0W2ldLmxvY2F0aW9u
IDwgZ3JhbW1hckNoZWNrTGVuZ3RoKQorICAgICAgICAgICAgICAgIGdyYW1tYXJDaGVja0xlbmd0
aCA9IHNwZWxsaW5nUmVzdWx0W2ldLmxvY2F0aW9uOworICAgICAgICB9CisKKyAgICAgICAgZmlu
ZEJhZEdyYW1tYXJzKGNsaWVudCwgdGV4dCwgMCwgZ3JhbW1hckNoZWNrTGVuZ3RoLCBncmFtbWFy
UmVzdWx0KTsKKyAgICB9CisKKyAgICBpZiAoZ3JhbW1hclJlc3VsdC5zaXplKCkpCisgICAgICAg
IHJlc3VsdHMuc3dhcChncmFtbWFyUmVzdWx0KTsKKyAgICBpZiAoc3BlbGxpbmdSZXN1bHQuc2l6
ZSgpKSB7CisgICAgICAgIGlmIChyZXN1bHRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJlc3Vs
dHMuc3dhcChzcGVsbGluZ1Jlc3VsdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKHNwZWxsaW5nUmVzdWx0KTsKKyAgICB9CisjZW5kaWYKIH0KIAogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKaW5kZXggOGI1YzY5MTA1Mjhm
NDA1MWEzYWQ4NTZjNmI2Y2FhMTk0Zjc5MmZlMi4uZWJmYjJmZmI2NTgzOGU1YTk5YjViNjEwNjVk
YTFmY2IwZmNhYWYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hl
Y2tpbmdIZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hl
bHBlci5oCkBAIC03OCwxNSArNzgsMTQgQEAgcHVibGljOgogICAgIFRleHRDaGVja2luZ0hlbHBl
cihFZGl0b3JDbGllbnQqLCBQYXNzUmVmUHRyPFJhbmdlPik7CiAgICAgflRleHRDaGVja2luZ0hl
bHBlcigpOwogCi0gICAgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxsaW5nKGludCYgZmlyc3RNaXNz
cGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpOwogICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihi
b29sIGNoZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVsbGluZywgaW50JiBvdXRGaXJzdEZvdW5k
T2Zmc2V0LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsKTsKLSAgICBTdHJpbmcgZmlu
ZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsLCBpbnQmIG91
dEdyYW1tYXJQaHJhc2VPZmZzZXQsIGJvb2wgbWFya0FsbCk7CiAgICAgaW50IGZpbmRGaXJzdEdy
YW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywg
aW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgaW50IGJhZEdyYW1tYXJQaHJhc2VMZW5ndGgs
IGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgYm9vbCBtYXJrQWxsKTsKLSAgICB2b2lk
IG1hcmtBbGxNaXNzcGVsbGluZ3MoUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1Jhbmdl
KTsKLSAgICB2b2lkIG1hcmtBbGxCYWRHcmFtbWFyKCk7CiAKICAgICBib29sIGlzVW5ncmFtbWF0
aWNhbChWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1ZlY3RvcikgY29uc3Q7CiAgICAgVmVjdG9yPFN0
cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sIGNoZWNr
R3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkgY29uc3Q7CisK
KyAgICBzdGF0aWMgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChFZGl0b3JDbGllbnQqLCBjb25z
dCBVQ2hhciosIGludCwgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4mKTsKKwogcHJpdmF0ZToKICAgICBFZGl0b3JDbGllbnQqIG1f
Y2xpZW50OwogICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104793</attachid>
            <date>2011-08-22 23:50:14 -0700</date>
            <delta_ts>2011-11-10 17:32:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65849-20110823155012.patch</filename>
            <type>text/plain</type>
            <size>46224</size>
            <attacher name="Hajime Morrita">morrita</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM0OTIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwMjk3MjIxOTYyMWNjYWI4NTFlODU2
OTk0NDVjNWVjMTMzMGY2NWZhLi5lYzg2ODI0ODZlNjE2M2E2OTljNGE1YjBmN2IyZGEwZTUwOWYx
YmViIDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDgtMjIgIE1PUklUQSBIYWppbWUgIDxt
b3JyaXRhQGdvb2dsZS5jb20+CisKKyAgICAgICAgU3BlbGwtY2hlY2tpbmcgc2hvdWxkIHNoYXJl
IHRoZSB1bmlmaWVkIHRleHQgY2hlY2tlciBwYXRoLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjU4NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBTa2lwcGVkIHRlc3RzIHdoaWNoIG5lZWQgcmViYXNlbGlu
aW5nIChFYWNoIG9mIHRoZW0gY29udGFpbnMgYQorICAgICAgICB3cm9uZyBtYXJrZXIsIHdoaWNo
IG5vIGxvbmdlciBhcHBlYXJzIHdpdGggdGhpcyBmaXguKQorICAgICAgICAKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTEtMDgtMjEgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSByZXN1bHRzIGZv
ciBtb3JlIHRlc3RzIGFmZmVjdGVkIGJ5IHRoZSBhZGRpdGlvbiBvZiB0aGUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAppbmRleCAx
ZGRjN2I2YjVkNTM0MzNjN2RkNzFhYTQ1MzgxNDc4NjI2MDgxYzM5Li5jZTllMDVhMDQ0NzUwZDQ4
NmUwNTgyMTVhZWMxMzYwZTI0ODhmOTdlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vdGVzdF9leHBlY3RhdGlvbnMudHh0CkBAIC0zNjg2LDYgKzM2ODYsMTQgQEAg
QlVHV0s2NjUxMCBMSU5VWCBERUJVRyA6IGVkaXRpbmcvc2VsZWN0aW9uL3JlZ2lvbmFsLWluZGlj
YXRvcnMuaHRtbCA9IFRJTUVPVVQKIAogQlVHV0s2NjU2OSBXSU4gTElOVVggOiBodHRwL3Rlc3Rz
L2luc3BlY3Rvci9uZXR3b3JrL25ldHdvcmstaWZyYW1lLWxvYWQtYW5kLWRlbGV0ZS5odG1sID0g
VEVYVCBUSU1FT1VUCiAKKy8vIE5lZWRzIHJlYmFzZWxpbmUKK0JVR1dLNjU4NDkgOiBlZGl0aW5n
L3Bhc3RlYm9hcmQvbWVyZ2UtYWZ0ZXItZGVsZXRlLTEuaHRtbCA9IElNQUdFCitCVUdXSzY1ODQ5
IDogZWRpdGluZy9wYXN0ZWJvYXJkL21lcmdlLWFmdGVyLWRlbGV0ZS0yLmh0bWwgPSBJTUFHRQor
QlVHV0s2NTg0OSA6IGVkaXRpbmcvcGFzdGVib2FyZC9tZXJnZS1hZnRlci1kZWxldGUuaHRtbCA9
IElNQUdFCitCVUdXSzY1ODQ5IDogZWRpdGluZy9wYXN0ZWJvYXJkL21lcmdlLWVuZC1ibG9ja3F1
b3RlLmh0bWwgPSBJTUFHRQorQlVHV0s2NTg0OSA6IGVkaXRpbmcvcGFzdGVib2FyZC9tZXJnZS1l
bmQtbGlzdC5odG1sID0gSU1BR0UKK0JVR1dLNjU4NDkgOiBlZGl0aW5nL3Bhc3RlYm9hcmQvbWVy
Z2UtZW5kLXRhYmxlLmh0bWwgPSBJTUFHRQorCiBCVUdXSzY2NTc3IExFT1BBUkQgOiBmYXN0L2V2
ZW50cy90b3VjaC9iYXNpYy1zaW5nbGUtdG91Y2gtZXZlbnRzLmh0bWwgPSBUSU1FT1VUCiBCVUdX
SzY2NTc3IExFT1BBUkQgOiBmYXN0L2V2ZW50cy90b3VjaC9tdWx0aS10b3VjaC1ncm91cGVkLXRh
cmdldHMuaHRtbCA9IFRJTUVPVVQKIEJVR1dLNjY1NzcgTEVPUEFSRCA6IGZhc3QvZXZlbnRzL3Rv
dWNoL3RvdWNoLWdlc3R1cmUtc2Nyb2xsLmh0bWwgPSBUSU1FT1VUCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDc5ZjU5YWNiYjEzMDU5MDYwZTBlYmM2MDdiODg1YzQ4MDRmNjgzZjEuLmQ3NzE3MjFl
MTFhNzFiMjI1ODdlOTA3ZmFlZDViYjliNGY1MWQwMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC02MzUsOSArNjM1LDExIEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBlZGl0aW5nL1JlcGxh
Y2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcAogICAgIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCiAgICAgZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAKKyAgICBl
ZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9TbWFydFJlcGxhY2Uu
Y3BwCiAgICAgZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCiAgICAgZWRpdGluZy9TcGVsbGluZ0Nv
cnJlY3Rpb25Db250cm9sbGVyLmNwcAorICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5jcHAKICAgICBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCiAgICAgZWRpdGlu
Zy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb250
YWluaW5nRWxlbWVudENvbW1hbmQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODA1MjQ0NzRlOGQyM2IxYTAy
ZjljNzExMzE3Y2NiMzNhN2JiMjYyYy4uNWEwNGRhZTA3NTI5NmI0MDA2NTUxY2M3Nzc0MDE5Zjgy
ZGJlYzkwNyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDExLTA4LTIyICBNT1JJVEEg
SGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgorCisgICAgICAgIFNwZWxsLWNoZWNraW5nIHNo
b3VsZCBzaGFyZSB0aGUgdW5pZmllZCB0ZXh0IGNoZWNrZXIgcGF0aC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY1ODQ5CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0IGhhZCBoYXZlIHR3byBpbmRl
cGVuZGVudCBjb2RlIHBhdGhzIGZvciB0ZXh0IG1hcmtpbmcsIG9uZQorICAgICAgICBmb3IgVU5J
RklFRF9URVhUX0NIRUNLSU5HIHBsYXRmb3JtcyAod2hpY2ggaXMgYXZhaWxhYmxlIGZvciBNYWMg
T1MKKyAgICAgICAgMTAuNiBvciBsYXRlcikgYW5kIGFub3RoZXIgZm9yIG5vbi1VTklGSUVEX1RF
WFRfQ0hFQ0tJTkcgcGxhdGZvcm1zLgorICAgICAgICBUaGlzIGR1cGxpY2F0aW9uIG1hZGUgaXQg
aGFyZCB0byBjaGFuZ2UgZWRpdGluZyByZWxhdGVkIGNvZGUuCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgZWxpbWluYXRlZCBtb3N0IG9mIG5vbi1VTklGSUVEX1RFWFRfQ0hFQ0tJTkcgcGF0aCBhbmQK
KyAgICAgICAgYWRvcHRlZCBvcmlnaW5hbGx5IG9ubHktZm9yLVVOSUZJRURfVEVYVF9DSEVDS0lO
RyBjb2RlIHBhdGggb24KKyAgICAgICAgZXZlcnkgcGxhdGZvcm0sIGltcGxlbWVudGluZyBhbiB1
bmlmaWVkIHRleHQgY2hlY2tlciBlcXVpdmFsZW50CisgICAgICAgIGluc2lkZSBXZWJDb3JlOjpU
ZXh0Q2hlY2tpbmdIZWxwZXIgZm9yIHBsYXRmb3JtcyB3aGljaCBkb24ndCBoYXZlCisgICAgICAg
IGl0cyBvd24gdW5pZmllZCB0ZXh0IGNoZWNrZXIuCisKKyAgICAgICAgLSBXcmFwcGVkIFRleHRD
aGVja2VyQ2xpZW50OjpjaGVja1RleHRPZlBhcmFncmFwaCgpIHdpdGgKKyAgICAgICAgICBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKCkKKyAgICAgICAgLSBJbXBsZW1l
bnRlZCBUZXh0Q2hlY2tlckNsaWVudDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKSBlcXVpdmFsZW50
CisgICAgICAgICAgaW4gVGV4dENoZWNraW5nSGVscGVyOjpjaGVja1RleHRPZlBhcmFncmFwaCgp
IGZvcgorICAgICAgICAgIG5vbi1VU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKSBwbGF0Zm9ybXMK
KyAgICAgICAgLSBFbGltaW5hdGVkIGFsbCBub24tVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykg
Y29kZSBwYXRocworICAgICAgICAgIGZyb20gRWRpdG9yIGFuZCBUZXh0Q2hlY2tpbmdIZWxwZXIu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOgorICAgICAgICAqIFdlYkNvcmUuZXhwLmluOgorICAgICAgICAqIFdlYkNvcmUucHJvOgor
ICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGVkaXRp
bmcvRWRpdGluZ0FsbEluT25lLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2Fs
U2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0Fm
dGVyVHlwaW5nVG9Xb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FsbE1pc3Nw
ZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9y
Lmg6CisgICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3Jh
bW1hcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEJh
ZEdyYW1tYXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRNaXNzcGVsbGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6VGV4dENoZWNraW5nSGVscGVyOjpjaGVja1RleHRPZlBhcmFncmFwaCk6Cisg
ICAgICAgICogZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaDoKKwogMjAxMS0wOC0yMSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4ICdtYWtl
IGRpc3QnIGZvciBXZWJLaXRHVEsrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
M2FjMjUyNTRjMzY3OWY2MWU3YTIyOTRiYTM0Y2Q3OWE1M2Q1YWJlNy4uMzc2MGQ3N2Q0MmVmMWIz
OGI2NjMzNGI3ZjY0NTg0OTI0MWI2YWQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC0xNDE3LDYgKzE0MTcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuaCBcCisJU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TZXRTZWxlY3Rpb25Db21tYW5kLmNwcCBcCisJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TZXRT
ZWxlY3Rpb25Db21tYW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNl
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2UuaCBcCiAJU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwIFwKQEAgLTE0MjQsNiArMTQyNiw3
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENo
ZWNrZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250
cm9sbGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25D
b250cm9sbGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuaCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCmluZGV4IGVlN2FiODhiNmQ0YTUwMjIxOTk3NTZiNzdmZjA2ZWFmZjE4
NGExZjcuLmVlYjZiMjI2NmU5OTA5OWI0Y2Q1Y2ExZTVhNGFjMzU1MTJkMjY1YmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZXhwLmluCkBAIC03ODAsMTEgKzc4MCw5IEBAIF9fWk43V2ViQ29yZTZFZGl0b3IxOWNv
dW50TWF0Y2hlc0ZvclRleHRFUktOM1dURjZTdHJpbmdFUE5TXzVSYW5nZUVqamIKIF9fWk43V2Vi
Q29yZTZFZGl0b3IxOWRlbGV0ZVdpdGhEaXJlY3Rpb25FTlNfMThTZWxlY3Rpb25EaXJlY3Rpb25F
TlNfMTVUZXh0R3JhbnVsYXJpdHlFYmIKIF9fWk43V2ViQ29yZTZFZGl0b3IxOWluc2VydFVub3Jk
ZXJlZExpc3RFdgogX19aTjdXZWJDb3JlNkVkaXRvcjIxYXBwbHlTdHlsZVRvU2VsZWN0aW9uRVBO
U18xOUNTU1N0eWxlRGVjbGFyYXRpb25FTlNfMTBFZGl0QWN0aW9uRQotX19aTjdXZWJDb3JlNkVk
aXRvcjIxaXNTZWxlY3Rpb25NaXNzcGVsbGVkRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IyM3NldEJh
c2VXcml0aW5nRGlyZWN0aW9uRTE2V3JpdGluZ0RpcmVjdGlvbgogX19aTjdXZWJDb3JlNkVkaXRv
cjI0YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nRWIKIF9fWk43V2ViQ29yZTZFZGl0b3IyNGNvbXB1
dGVBbmRTZXRUeXBpbmdTdHlsZUVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRU5TXzEwRWRpdEFj
dGlvbkUKLV9fWk43V2ViQ29yZTZFZGl0b3IyNGlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbEV2CiBf
X1pON1dlYkNvcmU2RWRpdG9yMjZkZWNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dl
YkNvcmU2RWRpdG9yMjZpbmNyZWFzZVNlbGVjdGlvbkxpc3RMZXZlbEV2CiBfX1pON1dlYkNvcmU2
RWRpdG9yMjZ3cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZEVSS04zV1RGNlN0cmluZ0VSS05TMV82
VmVjdG9ySVMyX0xtMEVFRQpAQCAtNzk1LDcgKzc5Myw2IEBAIF9fWk43V2ViQ29yZTZFZGl0b3Iy
OWNhbkluY3JlYXNlU2VsZWN0aW9uTGlzdExldmVsRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzMGFw
cGx5UGFyYWdyYXBoU3R5bGVUb1NlbGVjdGlvbkVQTlNfMTlDU1NTdHlsZURlY2xhcmF0aW9uRU5T
XzEwRWRpdEFjdGlvbkUKIF9fWk43V2ViQ29yZTZFZGl0b3IzMGRlbGV0ZVNlbGVjdGlvbldpdGhT
bWFydERlbGV0ZUViCiBfX1pON1dlYkNvcmU2RWRpdG9yMzBwYXN0ZUFzUGxhaW5UZXh0QnlwYXNz
aW5nREhUTUxFdgotX19aTjdXZWJDb3JlNkVkaXRvcjMyZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxT
ZWxlY3Rpb25FdgogX19aTjdXZWJDb3JlNkVkaXRvcjMzaW5jcmVhc2VTZWxlY3Rpb25MaXN0TGV2
ZWxPcmRlcmVkRXYKIF9fWk43V2ViQ29yZTZFZGl0b3IzNHNldE1hcmtlZFRleHRNYXRjaGVzQXJl
SGlnaGxpZ2h0ZWRFYgogX19aTjdXZWJDb3JlNkVkaXRvcjM1aW5jcmVhc2VTZWxlY3Rpb25MaXN0
TGV2ZWxVbm9yZGVyZWRFdgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8g
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBhOTRjMjUyNGViNzk3MDA0ZWY2ODFj
M2MyNDM4NDBhZTA4MzA0Y2E1Li44ZjhkY2Y5MWMxNTE0ODMwNDE0ZTdhNzE2NmRiN2ZkMDliMTkx
NTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNjA2LDggKzYwNiwxMCBAQCBTT1VSQ0VTICs9IFwKICAg
ICBlZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0
ZUNvbW1hbmQuY3BwIFwKKyAgICBlZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKICAg
ICBlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxDaGVja2Vy
LmNwcCBcCisgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBcCiAgICAg
ZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGluZy9T
cGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFu
ZC5jcHAgXApAQCAtMTYwMSw2ICsxNjAzLDcgQEAgSEVBREVSUyArPSBcCiAgICAgZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVD
b21tYW5kLmggXAogICAgIGVkaXRpbmcvU21hcnRSZXBsYWNlLmggXAorICAgIGVkaXRpbmcvU3Bl
bGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuaCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmggXAogICAg
IGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGU4MmFmYmJlNDdiMDljYTNkNzhkYjBkZTU1
NGVlMGNmNjM2MWQ4NzEuLjg5YzlhN2E4YjgzZTIxMzY1ZjgyMGJiNmZkYWI4NGNlMGVjODRmZmUg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01
MjExMCw2ICs1MjExMCw2MiBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwIgorCQkJCT4KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZp
bGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJCUV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJ
RXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJ
CQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2lu
MzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJ
CQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3Vy
YXRpb24+CisJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iUHJvZHVjdGlvbnxXaW4z
MiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJ
CQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5n
XFNldFNlbGVjdGlvbkNvbW1hbmQuaCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTbWFydFJlcGxhY2UuY3BwIgogCQkJCT4KIAkJCQk8
RmlsZUNvbmZpZ3VyYXRpb24KQEAgLTUyMjc0LDYgKzUyMzMwLDYyIEBACiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHAiCisJCQkJPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlO
YW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4K
KwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0i
UmVsZWFzZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCT4KKwkJ
CQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCS8+CisJCQkJPC9G
aWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJTmFtZT0iRGVi
dWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJ
CQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJLz4K
KwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQlO
YW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCT4KKwkJCQkJPFRvb2wKKwkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCS8+CisJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8RmlsZUNvbmZpZ3VyYXRp
b24KKwkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKwkJCQkJPgorCQkJCQk8VG9vbAorCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJLz4KKwkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCTxGaWxlQ29uZmlndXJhdGlv
bgorCQkJCQlOYW1lPSJSZWxlYXNlX0xUQ0d8V2luMzIiCisJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxk
PSJ0cnVlIgorCQkJCQk+CisJCQkJCTxUb29sCisJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29s
IgorCQkJCQkvPgorCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8L0ZpbGU+CisJCQk8Rmls
ZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVk
aXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAiCiAJCQkJPgogCQkJCTxGaWxl
Q29uZmlndXJhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
QWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3Bw
CmluZGV4IGQ4NjMwOTc0MThkNDRmYjBjNTM2OTUzZDczZTJkMmY0ZTFmOGFkZmYuLmMwMjk5YjMy
MGE4Y2IwOTlhMDI3Y2VhZDZkOTFkNWZmNGEwMjllNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKQEAgLTYxLDggKzYxLDEwIEBACiAjaW5jbHVkZSA8UmVw
bGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcD4KICNpbmNsdWRlIDxTZXROb2RlQXR0cmlidXRlQ29tbWFuZC5jcHA+CisjaW5j
bHVkZSA8U2V0U2VsZWN0aW9uQ29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8U21hcnRSZXBsYWNlLmNw
cD4KICNpbmNsdWRlIDxTbWFydFJlcGxhY2VDRi5jcHA+CisjaW5jbHVkZSA8U3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8U3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxl
ci5jcHA+CiAjaW5jbHVkZSA8U3BlbGxDaGVja2VyLmNwcD4KICNpbmNsdWRlIDxTcGxpdEVsZW1l
bnRDb21tYW5kLmNwcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAzNGExODIzMjZj
NWM5ZTFkNWVlZDY2ODdhM2VjYmViNWM4N2NmYTExLi5mMzVmNjVjMjc5MjI4YmQzNGJhODJlMzJh
MGRkY2VhMWRjM2MzNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0xNzI0LDcg
KzE3MjQsNiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3Rh
cnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAgICAgU3Ry
aW5nIG1pc3NwZWxsZWRXb3JkOwogCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAg
ICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVj
KTsKICAgICBib29sIGlzU3BlbGxpbmcgPSB0cnVlOwogICAgIGludCBmb3VuZE9mZnNldCA9IDA7
CkBAIC0xNzM2LDI0ICsxNzM1LDYgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVs
bGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICBiYWRHcmFtbWFyUGhyYXNl
ID0gZm91bmRJdGVtOwogICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7
CiAgICAgfQotI2Vsc2UKLSAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsK
LSAgICBtaXNzcGVsbGVkV29yZCA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxp
bmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZh
bHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotCi0jaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcp
Ci0gICAgLy8gU2VhcmNoIGZvciBiYWQgZ3JhbW1hciB0aGF0IG9jY3VycyBwcmlvciB0byB0aGUg
bmV4dCBtaXNzcGVsbGVkIHdvcmQgKGlmIGFueSkKLSAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBz
cGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKLSAgICBpZiAoIW1pc3NwZWxsZWRX
b3JkLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBTdG9wIGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4
dCBtaXNzcGVsbGVkIHdvcmQKLSAgICAgICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhcnMoZ3JhbW1h
clNlYXJjaFJhbmdlLmdldCgpKTsKLSAgICAgICAgY2hhcnMuYWR2YW5jZShtaXNzcGVsbGluZ09m
ZnNldCk7Ci0gICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCkt
PnN0YXJ0Q29udGFpbmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZWMpLCBlYyk7
Ci0gICAgfQotICAgIAotICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAg
ICAgYmFkR3JhbW1hclBocmFzZSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgZ3JhbW1h
clNlYXJjaFJhbmdlKS5maW5kRmlyc3RCYWRHcmFtbWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQ
aHJhc2VPZmZzZXQsIGZhbHNlKTsKLSNlbmRpZgotI2VuZGlmCiAgICAgCiAgICAgLy8gSWYgd2Ug
Zm91bmQgbmVpdGhlciBiYWQgZ3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5k
IHRyeSBhZ2FpbiAoYnV0IGRvbid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5p
bmcgb2YgdGhlCiAgICAgLy8gYmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgpAQCAt
MTc2Miw3ICsxNzQzLDYgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhi
b29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAvLyBnb2luZyB1bnRpbCB0aGUgZW5k
IG9mIHRoZSB2ZXJ5IGZpcnN0IGNodW5rIHdlIHRlc3RlZCBpcyBmYXIgZW5vdWdoCiAgICAgICAg
IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZChzZWFyY2hFbmROb2RlQWZ0ZXJXcmFwLCBzZWFy
Y2hFbmRPZmZzZXRBZnRlcldyYXAsIGVjKTsKICAgICAgICAgCi0jaWYgVVNFKFVOSUZJRURfVEVY
VF9DSEVDS0lORykKICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hS
YW5nZS0+Y2xvbmVSYW5nZShlYyk7CiAgICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hl
bHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdP
ckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5k
T2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsKQEAgLTE3
NzIsMjIgKzE3NTIsNiBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJv
b2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0g
Zm91bmRJdGVtOwogICAgICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCA9IGZvdW5kT2Zmc2V0
OwogICAgICAgICB9Ci0jZWxzZQotICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFRleHRDaGVja2lu
Z0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxp
bmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotCi0j
aWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNw
ZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwotICAgICAgICBpZiAoIW1pc3NwZWxs
ZWRXb3JkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0
IG9mIG5leHQgbWlzc3BlbGxlZCB3b3JkCi0gICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBj
aGFycyhncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCkpOwotICAgICAgICAgICAgY2hhcnMuYWR2YW5j
ZShtaXNzcGVsbGluZ09mZnNldCk7Ci0gICAgICAgICAgICBncmFtbWFyU2VhcmNoUmFuZ2UtPnNl
dEVuZChjaGFycy5yYW5nZSgpLT5zdGFydENvbnRhaW5lcihlYyksIGNoYXJzLnJhbmdlKCktPnN0
YXJ0T2Zmc2V0KGVjKSwgZWMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IFRleHRDaGVj
a2luZ0hlbHBlcihjbGllbnQoKSwgZ3JhbW1hclNlYXJjaFJhbmdlKS5maW5kRmlyc3RCYWRHcmFt
bWFyKGdyYW1tYXJEZXRhaWwsIGdyYW1tYXJQaHJhc2VPZmZzZXQsIGZhbHNlKTsKLSNlbmRpZgot
I2VuZGlmCiAgICAgfQogICAgIAogICAgIGlmICghYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkp
IHsKQEAgLTE4MTksOTIgKzE3ODMsMTIgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNz
cGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgIH0KIH0KIAotYm9vbCBFZGl0
b3I6OmlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpCi17Ci0gICAgU3RyaW5nIHNlbGVjdGVkU3RyaW5n
ID0gc2VsZWN0ZWRUZXh0KCk7Ci0gICAgaW50IGxlbmd0aCA9IHNlbGVjdGVkU3RyaW5nLmxlbmd0
aCgpOwotICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAo
IWNsaWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgaW50IG1pc3NwZWxs
aW5nTG9jYXRpb24gPSAtMTsKLSAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOwotICAgIHRl
eHRDaGVja2VyKCktPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhzZWxlY3RlZFN0cmluZy5jaGFyYWN0
ZXJzKCksIGxlbmd0aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7
Ci0gICAgCi0gICAgLy8gVGhlIHNlbGVjdGlvbiBvbmx5IGNvdW50cyBhcyBtaXNzcGVsbGVkIGlm
IHRoZSBzZWxlY3RlZCB0ZXh0IGlzIGV4YWN0bHkgb25lIG1pc3NwZWxsZWQgd29yZAotICAgIGlm
IChtaXNzcGVsbGluZ0xlbmd0aCAhPSBsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICAvLyBVcGRhdGUgdGhlIHNwZWxsaW5nIHBhbmVsIHRvIGJlIGRpc3BsYXlpbmcgdGhp
cyBlcnJvciAod2hldGhlciBvciBub3QgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIG9uIHNjcmVlbiku
Ci0gICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gbWFrZSBhIHN1YnNlcXVlbnQgY2FsbCB0byBb
TlNTcGVsbENoZWNrZXIgaWdub3JlV29yZDppblNwZWxsRG9jdW1lbnRXaXRoVGFnOl0gd29yawot
ICAgIC8vIGNvcnJlY3RseTsgdGhhdCBjYWxsIGJlaGF2ZXMgZGlmZmVyZW50bHkgYmFzZWQgb24g
d2hldGhlciB0aGUgc3BlbGxpbmcgcGFuZWwgaXMgZGlzcGxheWluZyBhIG1pc3NwZWxsaW5nCi0g
ICAgLy8gb3IgYSBncmFtbWFyIGVycm9yLgotICAgIGNsaWVudCgpLT51cGRhdGVTcGVsbGluZ1VJ
V2l0aE1pc3NwZWxsZWRXb3JkKHNlbGVjdGVkU3RyaW5nKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotYm9vbCBFZGl0b3I6OmlzU2VsZWN0aW9uVW5ncmFtbWF0aWNhbCgpCi17Ci0jaWYg
VVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFN0cmluZz4gaWdub3JlZEd1ZXNzZXM7
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1h
bGl6ZWRSYW5nZSgpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCByYW5nZSkuaXNVbmdyYW1tYXRp
Y2FsKGlnbm9yZWRHdWVzc2VzKTsKLSNlbHNlCi0gICAgcmV0dXJuIGZhbHNlOwotI2VuZGlmCi19
Ci0KLVZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rp
b24oKQotewotI2lmIFVTRShHUkFNTUFSX0NIRUNLSU5HKQotICAgIFZlY3RvcjxTdHJpbmc+IGd1
ZXNzZXM7Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigpLT50
b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBndWVz
c2VzOwotICAgIC8vIElnbm9yZSB0aGUgcmVzdWx0IG9mIGlzVW5ncmFtbWF0aWNhbDsgd2UganVz
dCB3YW50IHRoZSBndWVzc2VzLCB3aGV0aGVyIG9yIG5vdCB0aGVyZSBhcmUgYW55Ci0gICAgVGV4
dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCByYW5nZSkuaXNVbmdyYW1tYXRpY2FsKGd1ZXNzZXMp
OwotICAgIHJldHVybiBndWVzc2VzOwotI2Vsc2UKLSAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4o
KTsKLSNlbmRpZgotfQotCi1WZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVs
bGVkU2VsZWN0aW9uKCkKLXsKLSAgICBTdHJpbmcgc2VsZWN0ZWRTdHJpbmcgPSBzZWxlY3RlZFRl
eHQoKTsKLSAgICBBU1NFUlQoc2VsZWN0ZWRTdHJpbmcubGVuZ3RoKCkpOwotCi0gICAgVmVjdG9y
PFN0cmluZz4gZ3Vlc3NlczsKLSAgICBpZiAoY2xpZW50KCkpCi0gICAgICAgIHRleHRDaGVja2Vy
KCktPmdldEd1ZXNzZXNGb3JXb3JkKHNlbGVjdGVkU3RyaW5nLCBTdHJpbmcoKSwgZ3Vlc3Nlcyk7
Ci0gICAgcmV0dXJuIGd1ZXNzZXM7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IEVkaXRvcjo6Z3Vlc3Nl
c0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlzc3BlbGxlZCwg
Ym9vbCYgdW5ncmFtbWF0aWNhbCkKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQog
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+dG9Ob3JtYWxp
emVkUmFuZ2UoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmlu
Zz4oKTsKICAgICByZXR1cm4gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCByYW5nZSkuZ3Vl
c3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSwgbWlzc3BlbGxlZCwgdW5ncmFtbWF0aWNhbCk7Ci0jZWxzZQotICAgIG1pc3NwZWxs
ZWQgPSBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKLSAgICBpZiAobWlzc3BlbGxlZCkgewotICAg
ICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBndWVzc2VzRm9yTWlz
c3BlbGxlZFNlbGVjdGlvbigpOwotICAgIH0KLSAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCkgJiYgaXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkpIHsKLSAgICAgICAgdW5ncmFtbWF0
aWNhbCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVj
dGlvbigpOwotICAgIH0KLSAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgcmV0dXJuIFZl
Y3RvcjxTdHJpbmc+KCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6OnNob3dTcGVsbGluZ0d1
ZXNzUGFuZWwoKQpAQCAtMTk0Niw3ICsxODMwLDYgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVs
bGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGkK
IAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBW
aXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0
aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCkKIHsKLSNpZiBVU0UoVU5JRklFRF9U
RVhUX0NIRUNLSU5HKQogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0NvcnJl
Y3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwogCiAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sg
dGV4dENoZWNraW5nT3B0aW9ucyA9IDA7CkBAIC0xOTc2LDg2ICsxODU5LDYgQEAgdm9pZCBFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRp
b24gJndvcmRTdGFydCwKICAgICB9IGVsc2UgewogICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpKTsKICAgICB9Ci0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFm
dGVyVHlwaW5nKTsKLSAgICBVTlVTRURfUEFSQU0oZG9SZXBsYWNlbWVudCk7Ci0KLSAgICBpZiAo
IWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3b3JkCi0gICAgUmVmUHRyPFJhbmdlPiBtaXNz
cGVsbGluZ1JhbmdlOwotICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFy
dE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRT
dGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSksIG1pc3NwZWxsaW5nUmFuZ2UpOwotCi0gICAg
Ly8gQXV0b2NvcnJlY3QgdGhlIG1pc3NwZWxsZWQgd29yZC4KLSAgICBpZiAoIW1pc3NwZWxsaW5n
UmFuZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICAvLyBHZXQgdGhlIG1pc3NwZWxsZWQg
d29yZC4KLSAgICBjb25zdCBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwbGFpblRleHQobWlzc3Bl
bGxpbmdSYW5nZS5nZXQoKSk7Ci0gICAgU3RyaW5nIGF1dG9jb3JyZWN0ZWRTdHJpbmcgPSB0ZXh0
Q2hlY2tlcigpLT5nZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChtaXNz
cGVsbGVkV29yZCk7Ci0KLSAgICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5
LCByZXBsYWNlIHRoZSBtaXNzcGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgotICAgIGlmICghYXV0
b2NvcnJlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBu
ZXdTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAg
IGlmIChuZXdTZWxlY3Rpb24gIT0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKSB7
Ci0gICAgICAgICAgICBpZiAoIWZyYW1lKCktPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxl
Y3Rpb24obmV3U2VsZWN0aW9uKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5zaG91bGRJbnNlcnRUZXh0
KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2Vy
dEFjdGlvblR5cGVkKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZnJhbWUoKS0+ZWRp
dG9yKCktPnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBmYWxz
ZSwgZmFsc2UpOwotCi0gICAgICAgIC8vIFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBm
dXJ0aGVyLgotICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+bW92ZVRvKGZyYW1lKCktPnNl
bGVjdGlvbigpLT5lbmQoKSk7Ci0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb2RpZnko
RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7Ci0gICAgfQotCi0gICAgaWYgKCFpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIC8vIENoZWNrIGdyYW1tYXIgb2YgZW50
aXJlIHNlbnRlbmNlCi0gICAgbWFya0JhZEdyYW1tYXIoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9m
U2VudGVuY2Uod29yZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQpKSk7Ci0jZW5kaWYK
LX0KLSAgICAKLXZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8
UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCi17Ci0gICAgLy8gVGhpcyBmdW5jdGlvbiBp
cyBjYWxsZWQgd2l0aCBhIHNlbGVjdGlvbiBhbHJlYWR5IGV4cGFuZGVkIHRvIHdvcmQgYm91bmRh
cmllcy4KLSAgICAvLyBNaWdodCBiZSBuaWNlIHRvIGFzc2VydCB0aGF0IGhlcmUuCi0gICAgCi0g
ICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgZm9yIGFzLXlvdS10eXBlIGNoZWNraW5n
LCBzbyBpZiB0aGF0J3Mgb2ZmIHdlIGRvIG5vdGhpbmcuIE5vdGUgdGhhdAotICAgIC8vIGdyYW1t
YXIgY2hlY2tpbmcgY2FuIG9ubHkgYmUgb24gaWYgc3BlbGwgY2hlY2tpbmcgaXMgYWxzbyBvbi4K
LSAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlKHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKLSAgICBpZiAoIXNlYXJjaFJhbmdlKQotICAgICAgICByZXR1cm47
Ci0gICAgCi0gICAgLy8gSWYgd2UncmUgbm90IGluIGFuIGVkaXRhYmxlIG5vZGUsIGJhaWwuCi0g
ICAgTm9kZSogZWRpdGFibGVOb2RlID0gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7Ci0g
ICAgaWYgKCFlZGl0YWJsZU5vZGUgfHwgIWVkaXRhYmxlTm9kZS0+cmVuZGVyZXJJc0VkaXRhYmxl
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghaXNTcGVsbENoZWNraW5nRW5hYmxlZEZv
cihlZGl0YWJsZU5vZGUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBHZXQgdGhlIHNwZWxs
IGNoZWNrZXIgaWYgaXQgaXMgYXZhaWxhYmxlCi0gICAgaWYgKCFjbGllbnQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIFRleHRDaGVja2luZ0hlbHBlciBjaGVja2VyKGNsaWVudCgpLCBz
ZWFyY2hSYW5nZSk7Ci0gICAgaWYgKGNoZWNrU3BlbGxpbmcpCi0gICAgICAgIGNoZWNrZXIubWFy
a0FsbE1pc3NwZWxsaW5ncyhmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIGVsc2UgewotICAg
ICAgICBBU1NFUlQoV1RGX1VTRV9HUkFNTUFSX0NIRUNLSU5HKTsKLSAgICAgICAgaWYgKGlzR3Jh
bW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgY2hlY2tlci5tYXJrQWxsQmFkR3Jh
bW1hcigpOwotICAgIH0gICAgCiB9CiAKIGJvb2wgRWRpdG9yOjppc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKE5vZGUqIG5vZGUpIGNvbnN0CkBAIC0yMDczLDIxICsxODc2LDggQEAgYm9vbCBFZGl0
b3I6OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKCkgY29uc3QKICAgICByZXR1
cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhcnQo
KS5kZXByZWNhdGVkTm9kZSgpKTsKIH0KIAotdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3Mo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpCi17Ci0gICAgbWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihzZWxl
Y3Rpb24sIHRydWUsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci19Ci0gICAgCi12b2lkIEVkaXRv
cjo6bWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQotewot
ICAgIEFTU0VSVChXVEZfVVNFX0dSQU1NQVJfQ0hFQ0tJTkcpOwotICAgIFJlZlB0cjxSYW5nZT4g
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIo
c2VsZWN0aW9uLCBmYWxzZSwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKLX0KLQogdm9pZCBFZGl0
b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5n
VHlwZU1hc2sgdGV4dENoZWNraW5nT3B0aW9ucywgUmFuZ2UqIHNwZWxsaW5nUmFuZ2UsIFJhbmdl
KiBncmFtbWFyUmFuZ2UpCiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICAv
LyBUaGVyZSBzaG91bGRuJ3QgYmUgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBhdCB0aGlzIG1vbWVu
dC4KICAgICBBU1NFUlQoIW1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhc1BlbmRpbmdDb3JyZWN0aW9u
KCkpOwogCkBAIC0yMTQxLDExICsxOTMxLDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3Bl
bGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDCiAK
ICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIGlmIChzaG91bGRN
YXJrR3JhbW1hcikKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
Z3JhbW1hclBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBncmFtbWFyUGFyYWdyYXBoLnRleHRM
ZW5ndGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7
CisgICAgICAgIFRleHRDaGVja2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY2xpZW50
KCksIGdyYW1tYXJQYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgZ3JhbW1hclBhcmFncmFwaC50
ZXh0TGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCBy
ZXN1bHRzKTsKICAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFy
YWdyYXBoKHNwZWxsaW5nUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHNwZWxsaW5nUGFyYWdy
YXBoLnRleHRMZW5ndGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwg
cmVzdWx0cyk7CisgICAgICAgIFRleHRDaGVja2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgoY2xpZW50KCksIHNwZWxsaW5nUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHNwZWxsaW5n
UGFyYWdyYXBoLnRleHRMZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5n
T3B0aW9ucyksIHJlc3VsdHMpOwogICAgICAgICAKIAogICAgIC8vIElmIHRoaXMgY2hlY2tpbmcg
aXMgb25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBzaG91bGRuJ3QgYm90aGVy
IHRvIG1hcmsgbWlzc3BlbGxpbmdzLgpAQCAtMjI3OCwxNyArMjA2OCwxMCBAQCB2b2lkIEVkaXRv
cjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdU
eXBlTWFzayB0ZXh0QwogICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShG
cmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3Rl
ckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KLSNlbHNlCi0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRleHRDaGVja2luZ09wdGlvbnMpOwotICAgIFVO
VVNFRF9QQVJBTShzcGVsbGluZ1JhbmdlKTsKLSAgICBVTlVTRURfUEFSQU0oZ3JhbW1hclJhbmdl
KTsKLSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCiB2b2lkIEVkaXRv
cjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmlu
ZykKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogICAgIGlmIChyZXBsYWNlZFN0
cmluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjMwMiwyOCArMjA4NSwxNiBA
QCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiBy
ZXBsYWNlZFN0cmluZykKICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBhcmFncmFw
aC5zdWJyYW5nZShwYXJhZ3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5n
dGgoKSk7CiAgICAgY2hhbmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5t
YXJrZXJzKCktPmFkZE1hcmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpS
ZXBsYWNlbWVudCwgU3RyaW5nKCkpOwogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPm1hcmtSZXZl
cnNlZChjaGFuZ2VkUmFuZ2UuZ2V0KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICBVTlVTRURfUEFSQU0ocmVwbGFjZWRTdHJpbmcpOwotI2VuZGlmIC8vIFVTRShVTklG
SUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKLQogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NB
bmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBi
b29sIG1hcmtHcmFtbWFyLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9u
KQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgaWYgKCFpc0NvbnRpbnVv
dXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgVGV4dENoZWNr
aW5nVHlwZU1hc2sgdGV4dENoZWNraW5nT3B0aW9ucyA9IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZyB8IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOwogICAgIGlmIChtYXJrR3JhbW1hciAmJiBp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8
PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFk
R3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsaW5nU2VsZWN0aW9uLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSk7Ci0jZWxzZQotICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1Jh
bmdlOwotICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7Ci0gICAgaWYgKG1hcmtHcmFtbWFyKQotICAgICAgICBtYXJrQmFkR3JhbW1h
cihncmFtbWFyU2VsZWN0aW9uKTsKLSNlbmRpZgogfQogCiB2b2lkIEVkaXRvcjo6dW5hcHBsaWVk
U3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9mQ29ycmVj
dGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggYTdlMWYzYjkyOWU4MjViZWZlNmM2NGU0ZTQ1ZDA3
YzIxYTNmYWQwYS4uM2RiZDgzOTE0ZTRkMmRjMTI5ZTlmMDFhODk2Mzk0NGRkNTZlYjg2MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0yMTAsMTYgKzIxMCwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpZ25vcmVTcGVsbGluZygpOwogICAgIHZvaWQgbGVhcm5TcGVsbGluZygpOwogICAgIGlu
dCBzcGVsbENoZWNrZXJEb2N1bWVudFRhZygpOwotICAgIGJvb2wgaXNTZWxlY3Rpb25VbmdyYW1t
YXRpY2FsKCk7Ci0gICAgYm9vbCBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKLSAgICBWZWN0b3I8
U3RyaW5nPiBndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOwotICAgIFZlY3RvcjxTdHJp
bmc+IGd1ZXNzZXNGb3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKCk7CiAgICAgVmVjdG9yPFN0cmlu
Zz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oYm9vbCYgbWlz
c3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCk7CiAgICAgYm9vbCBpc1NwZWxsQ2hlY2tpbmdF
bmFibGVkSW5Gb2N1c2VkTm9kZSgpIGNvbnN0OwogICAgIGJvb2wgaXNTcGVsbENoZWNraW5nRW5h
YmxlZEZvcihOb2RlKikgY29uc3Q7CiAgICAgdm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBp
bmdUb1dvcmQoY29uc3QgVmlzaWJsZVBvc2l0aW9uICZ3b3JkU3RhcnQsIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlbGVjdGlvbkFmdGVyVHlwaW5nLCBib29sIGRvUmVwbGFjZW1lbnQpOwotICAg
IHZvaWQgbWFya01pc3NwZWxsaW5ncyhjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgUmVmUHRyPFJh
bmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKLSAgICB2b2lkIG1hcmtCYWRHcmFtbWFyKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mKTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBbmRCYWRH
cmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1h
cmtHcmFtbWFyLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9uKTsKIAog
I2lmIFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKQEAgLTQwMyw3ICszOTcsNiBAQCBw
cml2YXRlOgogICAgIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGNvbnN0IFN0cmluZyYs
IGJvb2wgc2VsZWN0UmVwbGFjZW1lbnQsIGJvb2wgc21hcnRSZXBsYWNlKTsKICAgICB2b2lkIHdy
aXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQqKTsKICAgICB2b2lkIHJldmVhbFNl
bGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwotICAgIHZvaWQgbWFya01pc3NwZWxsaW5n
c09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgYm9vbCBjaGVja1NwZWxsaW5n
LCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIFRleHRDaGVja2lu
Z1R5cGVNYXNrIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayhUZXh0Q2hlY2tpbmdUeXBlTWFz
ayk7CiAKICAgICB2b2lkIHNlbGVjdENvbXBvc2l0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggMGJkZmJkODI2OTcxMTYwZjcyOWZm
OWViOGJhMzYzMTc0YTk4ZDM4ZC4uZTdiNGRmY2E1MTkxNmU4OTM3NWUxNDRlZWJiNGUwOTA3Yjdk
NWQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxw
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJU
ZXh0QnJlYWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCkBAIC0x
NjQsNjggKzE2NSw4IEBAIFRleHRDaGVja2luZ0hlbHBlcjo6flRleHRDaGVja2luZ0hlbHBlcigp
CiB7CiB9CiAKLVN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5n
KGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFuZ2U+
JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpCi17Ci0gICAgV29yZEF3YXJlSXRlcmF0b3IgaXQobV9y
YW5nZS5nZXQoKSk7Ci0gICAgZmlyc3RNaXNzcGVsbGluZ09mZnNldCA9IDA7Ci0gICAgCi0gICAg
U3RyaW5nIGZpcnN0TWlzc3BlbGxpbmc7Ci0gICAgaW50IGN1cnJlbnRDaHVua09mZnNldCA9IDA7
Ci0KLSAgICB3aGlsZSAoIWl0LmF0RW5kKCkpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJz
ID0gaXQuY2hhcmFjdGVycygpOwotICAgICAgICBpbnQgbGVuID0gaXQubGVuZ3RoKCk7Ci0gICAg
ICAgIAotICAgICAgICAvLyBTa2lwIHNvbWUgd29yayBmb3Igb25lLXNwYWNlLWNoYXIgaHVua3MK
LSAgICAgICAgaWYgKCEobGVuID09IDEgJiYgY2hhcnNbMF0gPT0gJyAnKSkgewotICAgICAgICAg
ICAgCi0gICAgICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOwotICAgICAgICAg
ICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICAgICAgICAgIG1fY2xpZW50LT50ZXh0
Q2hlY2tlcigpLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoY2hhcnMsIGxlbiwgJm1pc3NwZWxsaW5n
TG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7Ci0KLSAgICAgICAgICAgIC8vIDU0OTA2Mjcg
c2hvd3MgdGhhdCB0aGVyZSB3YXMgc29tZSBjb2RlIHBhdGggaGVyZSB3aGVyZSB0aGUgU3RyaW5n
IGNvbnN0cnVjdG9yIGJlbG93IGNyYXNoZXMuCi0gICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93
IGV4YWN0bHkgd2hhdCBjb21iaW5hdGlvbiBvZiBiYWQgaW5wdXQgY2F1c2VkIHRoaXMsIHNvIHdl
J3JlIG1ha2luZyB0aGlzIG11Y2gKLSAgICAgICAgICAgIC8vIG1vcmUgcm9idXN0IGFnYWluc3Qg
YmFkIGlucHV0IG9uIHJlbGVhc2UgYnVpbGRzLgotICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxs
aW5nTGVuZ3RoID49IDApOwotICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRpb24g
Pj0gLTEpOwotICAgICAgICAgICAgQVNTRVJUKCFtaXNzcGVsbGluZ0xlbmd0aCB8fCBtaXNzcGVs
bGluZ0xvY2F0aW9uID49IDApOwotICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTG9jYXRp
b24gPCBsZW4pOwotICAgICAgICAgICAgQVNTRVJUKG1pc3NwZWxsaW5nTGVuZ3RoIDw9IGxlbik7
Ci0gICAgICAgICAgICBBU1NFUlQobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVu
Z3RoIDw9IGxlbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ0xv
Y2F0aW9uID49IDAgJiYgbWlzc3BlbGxpbmdMZW5ndGggPiAwICYmIG1pc3NwZWxsaW5nTG9jYXRp
b24gPCBsZW4gJiYgbWlzc3BlbGxpbmdMZW5ndGggPD0gbGVuICYmIG1pc3NwZWxsaW5nTG9jYXRp
b24gKyBtaXNzcGVsbGluZ0xlbmd0aCA8PSBsZW4pIHsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICAvLyBDb21wdXRlIHJhbmdlIG9mIG1pc3NwZWxsZWQgd29yZAotICAgICAgICAg
ICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZSA9IFRleHRJdGVyYXRvcjo6c3Vi
cmFuZ2UobV9yYW5nZS5nZXQoKSwgY3VycmVudENodW5rT2Zmc2V0ICsgbWlzc3BlbGxpbmdMb2Nh
dGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotCi0gICAgICAgICAgICAgICAgLy8gUmVtZW1iZXIg
Zmlyc3QtZW5jb3VudGVyZWQgbWlzc3BlbGxpbmcgYW5kIGl0cyBvZmZzZXQuCi0gICAgICAgICAg
ICAgICAgaWYgKCFmaXJzdE1pc3NwZWxsaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0
TWlzc3BlbGxpbmdPZmZzZXQgPSBjdXJyZW50Q2h1bmtPZmZzZXQgKyBtaXNzcGVsbGluZ0xvY2F0
aW9uOwotICAgICAgICAgICAgICAgICAgICBmaXJzdE1pc3NwZWxsaW5nID0gU3RyaW5nKGNoYXJz
ICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOwotICAgICAgICAgICAg
ICAgICAgICBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UgPSBtaXNzcGVsbGluZ1JhbmdlOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFN0b3JlIG1hcmtlciBmb3IgbWlzc3Bl
bGxlZCB3b3JkLgotICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAg
ICAgICAgICAgIG1pc3NwZWxsaW5nUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKGVjKS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5hZGRNYXJrZXIobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsaW5nKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWVjKTsKLQotICAgICAg
ICAgICAgICAgIC8vIEJhaWwgb3V0IGlmIHdlJ3JlIG1hcmtpbmcgb25seSB0aGUgZmlyc3QgbWlz
c3BlbGxpbmcsIGFuZCBub3QgYWxsIGluc3RhbmNlcy4KLSAgICAgICAgICAgICAgICBpZiAoIW1h
cmtBbGwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBjdXJyZW50Q2h1bmtPZmZzZXQgKz0gbGVuOwotICAgICAg
ICBpdC5hZHZhbmNlKCk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBmaXJzdE1pc3NwZWxsaW5n
OwotfQotCiBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09y
QmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVsbGluZywgaW50JiBv
dXRGaXJzdEZvdW5kT2Zmc2V0LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsKQogewot
I2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiAgICAgU3RyaW5nIGZpcnN0Rm91bmRJdGVt
OwogICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZDsKICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFz
ZTsKQEAgLTI3Niw3ICsyMTcsNyBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmly
c3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3Vs
dHM7CiAgICAgICAgICAgICAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcyA9
IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdU
eXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAgICAgICAgICAgICAg
bV9jbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0
cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSwgY2hlY2tpbmdUeXBl
cywgcmVzdWx0cyk7CisgICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgobV9jbGll
bnQsIHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5ndGgo
KSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVz
dWx0c1tpXTsKQEAgLTM0NCwxNCArMjg1LDYgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAg
ICAgICAgdG90YWxMZW5ndGhQcm9jZXNzZWQgKz0gY3VycmVudExlbmd0aDsKICAgICB9CiAgICAg
cmV0dXJuIGZpcnN0Rm91bmRJdGVtOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICBVTlVTRURfUEFSQU0oY2hlY2tHcmFtbWFyKTsKLSAgICBVTlVTRURfUEFSQU0ob3V0SXNT
cGVsbGluZyk7Ci0gICAgVU5VU0VEX1BBUkFNKG91dEZpcnN0Rm91bmRPZmZzZXQpOwotICAgIFVO
VVNFRF9QQVJBTShvdXRHcmFtbWFyRGV0YWlsKTsKLSAgICByZXR1cm4gIiI7Ci0jZW5kaWYgLy8g
VVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIH0KIAogaW50IFRleHRDaGVja2luZ0hlbHBlcjo6
ZmluZEZpcnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW1t
YXJEZXRhaWxzLCBpbnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uLCBpbnQgLypiYWRHcmFtbWFy
UGhyYXNlTGVuZ3RoKi8sIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgYm9vbCBtYXJr
QWxsKQpAQCAtNDAxLDExNiArMzM0LDkgQEAgaW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZp
cnN0R3JhbW1hckRldGFpbChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW0KICNlbmRp
ZgogfQogCi1TdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RCYWRHcmFtbWFyKEdy
YW1tYXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwsIGludCYgb3V0R3JhbW1hclBocmFzZU9mZnNl
dCwgYm9vbCBtYXJrQWxsKQotewotICAgIEFTU0VSVChXVEZfVVNFX0dSQU1NQVJfQ0hFQ0tJTkcp
OwotICAgIC8vIEluaXRpYWxpemUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUgdXBkYXRl
ZCBpZiB3ZSBmaW5kIHNvbWV0aGluZyB0byByZXR1cm4uCi0gICAgb3V0R3JhbW1hckRldGFpbC5s
b2NhdGlvbiA9IC0xOwotICAgIG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKLSAgICBvdXRH
cmFtbWFyRGV0YWlsLmd1ZXNzZXMuY2xlYXIoKTsKLSAgICBvdXRHcmFtbWFyRGV0YWlsLnVzZXJE
ZXNjcmlwdGlvbiA9ICIiOwotICAgIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQgPSAwOwotICAgIAot
ICAgIFN0cmluZyBmaXJzdEJhZEdyYW1tYXJQaHJhc2U7Ci0KLSAgICAvLyBFeHBhbmQgdGhlIHNl
YXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIGdyYW1tYXIg
Y2hlY2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBj
aGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0
YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCi0gICAgLy8gc2luY2Ugd2Ugd2lsbCB3
YW50IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UpOwotICAgIAotICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZy
b20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2Nj
dXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLgotICAgIGlu
dCBzdGFydE9mZnNldCA9IDA7Ci0gICAgd2hpbGUgKHN0YXJ0T2Zmc2V0IDwgcGFyYWdyYXBoLmNo
ZWNraW5nRW5kKCkpIHsKLSAgICAgICAgVmVjdG9yPEdyYW1tYXJEZXRhaWw+IGdyYW1tYXJEZXRh
aWxzOwotICAgICAgICBpbnQgYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID0gLTE7Ci0gICAgICAg
IGludCBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoID0gMDsKLSAgICAgICAgbV9jbGllbnQtPnRleHRD
aGVja2VyKCktPmNoZWNrR3JhbW1hck9mU3RyaW5nKHBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygp
ICsgc3RhcnRPZmZzZXQsIHBhcmFncmFwaC50ZXh0TGVuZ3RoKCkgLSBzdGFydE9mZnNldCwgZ3Jh
bW1hckRldGFpbHMsICZiYWRHcmFtbWFyUGhyYXNlTG9jYXRpb24sICZiYWRHcmFtbWFyUGhyYXNl
TGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghYmFkR3JhbW1hclBocmFzZUxlbmd0aCkg
ewotICAgICAgICAgICAgQVNTRVJUKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiA9PSAtMSk7Ci0g
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBBU1NFUlQo
YmFkR3JhbW1hclBocmFzZUxvY2F0aW9uID49IDApOwotICAgICAgICBiYWRHcmFtbWFyUGhyYXNl
TG9jYXRpb24gKz0gc3RhcnRPZmZzZXQ7Ci0KLSAgICAgICAgCi0gICAgICAgIC8vIEZvdW5kIHNv
bWUgYmFkIGdyYW1tYXIuIEZpbmQgdGhlIGVhcmxpZXN0IGRldGFpbCByYW5nZSB0aGF0IHN0YXJ0
cyBpbiBvdXIgc2VhcmNoIHJhbmdlIChpZiBhbnkpLgotICAgICAgICBpbnQgYmFkR3JhbW1hcklu
ZGV4ID0gZmluZEZpcnN0R3JhbW1hckRldGFpbChncmFtbWFyRGV0YWlscywgYmFkR3JhbW1hclBo
cmFzZUxvY2F0aW9uLCBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoLCBwYXJhZ3JhcGguY2hlY2tpbmdT
dGFydCgpLCBwYXJhZ3JhcGguY2hlY2tpbmdFbmQoKSwgbWFya0FsbCk7Ci0gICAgICAgIGlmIChi
YWRHcmFtbWFySW5kZXggPj0gMCkgewotICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVu
c2lnbmVkPihiYWRHcmFtbWFySW5kZXgpIDwgZ3JhbW1hckRldGFpbHMuc2l6ZSgpKTsKLSAgICAg
ICAgICAgIG91dEdyYW1tYXJEZXRhaWwgPSBncmFtbWFyRGV0YWlsc1tiYWRHcmFtbWFySW5kZXhd
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgd2UgZm91bmQgYSBkZXRhaWwgaW4gcmFuZ2Us
IHRoZW4gd2UgaGF2ZSBmb3VuZCB0aGUgZmlyc3QgYmFkIHBocmFzZSAodW5sZXNzIHdlIGZvdW5k
IG9uZSBlYXJsaWVyIGJ1dAotICAgICAgICAvLyBrZXB0IGdvaW5nIHNvIHdlIGNvdWxkIG1hcmsg
YWxsIGluc3RhbmNlcykuCi0gICAgICAgIGlmIChiYWRHcmFtbWFySW5kZXggPj0gMCAmJiBmaXJz
dEJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBvdXRHcmFtbWFyUGhy
YXNlT2Zmc2V0ID0gYmFkR3JhbW1hclBocmFzZUxvY2F0aW9uIC0gcGFyYWdyYXBoLmNoZWNraW5n
U3RhcnQoKTsKLSAgICAgICAgICAgIGZpcnN0QmFkR3JhbW1hclBocmFzZSA9IHBhcmFncmFwaC50
ZXh0U3Vic3RyaW5nKGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgYmFkR3JhbW1hclBocmFzZUxl
bmd0aCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZvdW5kIG9uZS4gV2UncmUgZG9u
ZSBub3csIHVubGVzcyB3ZSdyZSBtYXJraW5nIGVhY2ggaW5zdGFuY2UuCi0gICAgICAgICAgICBp
ZiAoIW1hcmtBbGwpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBUaGVzZSByZXN1bHRzIHdlcmUgYWxsIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBwYXJh
Z3JhcGggYW5kIHRoZSBzdGFydCBvZiB0aGUgc2VhcmNoIHJhbmdlOyBsb29rCi0gICAgICAgIC8v
IGJleW9uZCB0aGlzIHBocmFzZS4KLSAgICAgICAgc3RhcnRPZmZzZXQgPSBiYWRHcmFtbWFyUGhy
YXNlTG9jYXRpb24gKyBiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoOwotICAgIH0KLSAgICAKLSAgICBy
ZXR1cm4gZmlyc3RCYWRHcmFtbWFyUGhyYXNlOwotfQotCi0KLWJvb2wgVGV4dENoZWNraW5nSGVs
cGVyOjppc1VuZ3JhbW1hdGljYWwoVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXNWZWN0b3IpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKFdURl9VU0VfR1JBTU1BUl9DSEVDS0lORyk7Ci0gICAgaWYgKCFtX2Ns
aWVudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAg
ICBpZiAoIW1fcmFuZ2UgfHwgbV9yYW5nZS0+Y29sbGFwc2VkKGVjKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIAotICAgIC8vIFJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBwYXNzZWQgcmFu
Z2UgZXhhY3RseSBjb3JyZXNwb25kcyB0byBhIGJhZCBncmFtbWFyIGRldGFpbCByYW5nZS4gVGhp
cyBpcyBhbmFsb2dvdXMKLSAgICAvLyB0byBpc1NlbGVjdGlvbk1pc3NwZWxsZWQuIEl0J3Mgbm90
IGdvb2QgZW5vdWdoIGZvciB0aGVyZSB0byBiZSBzb21lIGJhZCBncmFtbWFyIHNvbWV3aGVyZSBp
biB0aGUgcmFuZ2UsCi0gICAgLy8gb3Igb3ZlcmxhcHBpbmcgdGhlIHJhbmdlOyB0aGUgcmFuZ2Vz
IG11c3QgZXhhY3RseSBtYXRjaC4KLSAgICBndWVzc2VzVmVjdG9yLmNsZWFyKCk7Ci0gICAgaW50
IGdyYW1tYXJQaHJhc2VPZmZzZXQ7Ci0gICAgCi0gICAgR3JhbW1hckRldGFpbCBncmFtbWFyRGV0
YWlsOwotICAgIFN0cmluZyBiYWRHcmFtbWFyUGhyYXNlID0gY29uc3RfY2FzdDxUZXh0Q2hlY2tp
bmdIZWxwZXIqPih0aGlzKS0+ZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFt
bWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7ICAgIAotICAgIAotICAgIC8vIE5vIGJhZCBncmFtbWFy
IGluIHRoZXNlIHBhcnRzIGF0IGFsbC4KLSAgICBpZiAoYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICAvLyBCYWQgZ3JhbW1hciwgYnV0
IHBocmFzZSAoZS5nLiBzZW50ZW5jZSkgc3RhcnRzIGJleW9uZCBzdGFydCBvZiByYW5nZS4KLSAg
ICBpZiAoZ3JhbW1hclBocmFzZU9mZnNldCA+IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBBU1NFUlQoZ3JhbW1hckRldGFpbC5sb2NhdGlvbiA+PSAwICYmIGdyYW1tYXJEZXRh
aWwubGVuZ3RoID4gMCk7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIsIGJ1dCBzdGFydCBvZiBk
ZXRhaWwgKGUuZy4gdW5ncmFtbWF0aWNhbCB3b3JkKSBkb2Vzbid0IG1hdGNoIHN0YXJ0IG9mIHJh
bmdlCi0gICAgaWYgKGdyYW1tYXJEZXRhaWwubG9jYXRpb24gKyBncmFtbWFyUGhyYXNlT2Zmc2V0
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gQmFkIGdyYW1tYXIgYXQgc3Rh
cnQgb2YgcmFuZ2UsIGJ1dCBlbmQgb2YgYmFkIGdyYW1tYXIgaXMgYmVmb3JlIG9yIGFmdGVyIGVu
ZCBvZiByYW5nZQotICAgIGlmIChncmFtbWFyRGV0YWlsLmxlbmd0aCAhPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1fcmFuZ2UuZ2V0KCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Ci0gICAgLy8gVXBkYXRlIHRoZSBzcGVsbGluZyBwYW5lbCB0byBiZSBkaXNwbGF5aW5nIHRoaXMg
ZXJyb3IgKHdoZXRoZXIgb3Igbm90IHRoZSBzcGVsbGluZyBwYW5lbCBpcyBvbiBzY3JlZW4pLgot
ICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIG1ha2UgYSBzdWJzZXF1ZW50IGNhbGwgdG8gW05T
U3BlbGxDaGVja2VyIGlnbm9yZVdvcmQ6aW5TcGVsbERvY3VtZW50V2l0aFRhZzpdIHdvcmsKLSAg
ICAvLyBjb3JyZWN0bHk7IHRoYXQgY2FsbCBiZWhhdmVzIGRpZmZlcmVudGx5IGJhc2VkIG9uIHdo
ZXRoZXIgdGhlIHNwZWxsaW5nIHBhbmVsIGlzIGRpc3BsYXlpbmcgYSBtaXNzcGVsbGluZwotICAg
IC8vIG9yIGEgZ3JhbW1hciBlcnJvci4KLSAgICBtX2NsaWVudC0+dXBkYXRlU3BlbGxpbmdVSVdp
dGhHcmFtbWFyU3RyaW5nKGJhZEdyYW1tYXJQaHJhc2UsIGdyYW1tYXJEZXRhaWwpOwotICAgIAot
ICAgIHJldHVybiB0cnVlOwotfQogCiBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6
Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbCBjaGVja0dyYW1t
YXIsIGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpIGNvbnN0CiB7Ci0jaWYg
VVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwog
ICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgbWlzc3BlbGxlZCA9IGZhbHNlOwpAQCAtNTI2LDcg
KzM1Miw3IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1p
c3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAKICAgICBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiByZXN1bHRzOwogICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlw
ZXMgPSBjaGVja0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNr
aW5nVHlwZUdyYW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nOwotICAgIG1fY2xpZW50
LT50ZXh0Q2hlY2tlcigpLT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJhZ3JhcGgudGV4dENoYXJh
Y3RlcnMoKSwgcGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7
CisgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgobV9jbGllbnQsIHBhcmFncmFwaC50ZXh0Q2hhcmFj
dGVycygpLCBwYXJhZ3JhcGgudGV4dExlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsK
ICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykg
ewogICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ld
OwpAQCAtNTYyLDMyICszODgsOTkgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVy
OjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gZ3Vlc3NlczsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNoZWNrR3JhbW1hcik7Ci0gICAgVU5VU0VEX1BBUkFN
KG1pc3NwZWxsZWQpOwotICAgIFVOVVNFRF9QQVJBTSh1bmdyYW1tYXRpY2FsKTsKLSAgICByZXR1
cm4gVmVjdG9yPFN0cmluZz4oKTsKLSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5H
KQogfQogCisjaWYgIVVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCitzdGF0aWMgdm9pZCBmaW5k
QmFkR3JhbW1hcnMoRWRpdG9yQ2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQg
c3RhcnQsIGludCBsZW5ndGgsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQor
eworICAgIEFTU0VSVChXVEZfVVNFX0dSQU1NQVJfQ0hFQ0tJTkcpOworICAgIEFTU0VSVChjbGll
bnQtPmlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKTsKIAotdm9pZCBUZXh0Q2hlY2tpbmdIZWxw
ZXI6Om1hcmtBbGxNaXNzcGVsbGluZ3MoUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1Jh
bmdlKQorICAgIGludCBjaGVja0xvY2F0aW9uID0gc3RhcnQ7CisgICAgaW50IGNoZWNrTGVuZ3Ro
ID0gbGVuZ3RoOworICAgIAorICAgIHdoaWxlICgwIDwgY2hlY2tMZW5ndGgpIHsKKyAgICAgICAg
aW50IGJhZEdyYW1tYXJMb2NhdGlvbiA9IC0xOworICAgICAgICBpbnQgYmFkR3JhbW1hckxlbmd0
aCA9IDA7CisgICAgICAgIFZlY3RvcjxHcmFtbWFyRGV0YWlsPiBiYWRHcmFtbWFyRGV0YWlsczsK
KyAgICAgICAgY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5jaGVja0dyYW1tYXJPZlN0cmluZyh0ZXh0
ICsgY2hlY2tMb2NhdGlvbiwgY2hlY2tMZW5ndGgsIGJhZEdyYW1tYXJEZXRhaWxzLCAmYmFkR3Jh
bW1hckxvY2F0aW9uLCAmYmFkR3JhbW1hckxlbmd0aCk7CisgICAgICAgIGlmICghYmFkR3JhbW1h
ckxlbmd0aCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBBU1NFUlQoMCA8PSBiYWRHcmFt
bWFyTG9jYXRpb24gJiYgYmFkR3JhbW1hckxvY2F0aW9uIDw9IGNoZWNrTGVuZ3RoKTsKKyAgICAg
ICAgQVNTRVJUKDAgPCBiYWRHcmFtbWFyTGVuZ3RoICYmIGJhZEdyYW1tYXJMb2NhdGlvbiArIGJh
ZEdyYW1tYXJMZW5ndGggPD0gY2hlY2tMZW5ndGgpOworICAgICAgICBUZXh0Q2hlY2tpbmdSZXN1
bHQgYmFkR3JhbW1hcjsKKyAgICAgICAgYmFkR3JhbW1hci50eXBlID0gVGV4dENoZWNraW5nVHlw
ZUdyYW1tYXI7CisgICAgICAgIGJhZEdyYW1tYXIubG9jYXRpb24gPSBjaGVja0xvY2F0aW9uICsg
YmFkR3JhbW1hckxvY2F0aW9uOworICAgICAgICBiYWRHcmFtbWFyLmxlbmd0aCA9IGJhZEdyYW1t
YXJMZW5ndGg7CisgICAgICAgIGJhZEdyYW1tYXIuZGV0YWlscy5zd2FwKGJhZEdyYW1tYXJEZXRh
aWxzKTsKKyAgICAgICAgcmVzdWx0cy5hcHBlbmQoYmFkR3JhbW1hcik7CisKKyAgICAgICAgY2hl
Y2tMb2NhdGlvbiArPSAoYmFkR3JhbW1hckxvY2F0aW9uICsgYmFkR3JhbW1hckxlbmd0aCk7Cisg
ICAgICAgIGNoZWNrTGVuZ3RoIC09IChiYWRHcmFtbWFyTG9jYXRpb24gKyBiYWRHcmFtbWFyTGVu
Z3RoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZpbmRNaXNzcGVsbGluZ3MoRWRpdG9yQ2xp
ZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgc3RhcnQsIGludCBsZW5ndGgsIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQogewotICAgIC8vIFVzZSB0aGUgIm1h
cmtBbGwiIGZlYXR1cmUgb2YgZmluZEZpcnN0TWlzc3BlbGxpbmcuIElnbm9yZSB0aGUgcmV0dXJu
IHZhbHVlIGFuZCB0aGUgIm91dCBwYXJhbWV0ZXIiOwotICAgIC8vIGFsbCB3ZSBuZWVkIHRvIGRv
IGlzIG1hcmsgZXZlcnkgaW5zdGFuY2UuCi0gICAgaW50IGlnbm9yZWRPZmZzZXQ7Ci0gICAgZmlu
ZEZpcnN0TWlzc3BlbGxpbmcoaWdub3JlZE9mZnNldCwgdHJ1ZSwgZmlyc3RNaXNzcGVsbGluZ1Jh
bmdlKTsKKyAgICBUZXh0QnJlYWtJdGVyYXRvciogaXRlcmF0b3IgPSB3b3JkQnJlYWtJdGVyYXRv
cih0ZXh0ICsgc3RhcnQsIGxlbmd0aCk7CisgICAgaWYgKCFpdGVyYXRvcikKKyAgICAgICAgcmV0
dXJuOworICAgIGludCB3b3JkU3RhcnQgPSB0ZXh0QnJlYWtDdXJyZW50KGl0ZXJhdG9yKTsKKyAg
ICB3aGlsZSAoMCA8PSB3b3JkU3RhcnQpIHsKKyAgICAgICAgaW50IHdvcmRFbmQgPSB0ZXh0QnJl
YWtOZXh0KGl0ZXJhdG9yKTsKKyAgICAgICAgaWYgKHdvcmRFbmQgPCAwKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGludCB3b3JkTGVuZ3RoID0gd29yZEVuZCAtIHdvcmRTdGFydDsKKyAg
ICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKKyAgICAgICAgaW50IG1pc3NwZWxs
aW5nTGVuZ3RoID0gMDsKKyAgICAgICAgY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5jaGVja1NwZWxs
aW5nT2ZTdHJpbmcodGV4dCArIHN0YXJ0ICsgd29yZFN0YXJ0LCB3b3JkTGVuZ3RoLCAmbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgaWYgKDAgPCBtaXNz
cGVsbGluZ0xlbmd0aCkgeworICAgICAgICAgICAgQVNTRVJUKDAgPD0gbWlzc3BlbGxpbmdMb2Nh
dGlvbiAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uIDw9IHdvcmRMZW5ndGgpOworICAgICAgICAgICAg
QVNTRVJUKDAgPCBtaXNzcGVsbGluZ0xlbmd0aCAmJiBtaXNzcGVsbGluZ0xvY2F0aW9uICsgbWlz
c3BlbGxpbmdMZW5ndGggPD0gd29yZExlbmd0aCk7CisgICAgICAgICAgICBUZXh0Q2hlY2tpbmdS
ZXN1bHQgbWlzc3BlbGxpbmc7CisgICAgICAgICAgICBtaXNzcGVsbGluZy50eXBlID0gVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nOworICAgICAgICAgICAgbWlzc3BlbGxpbmcubG9jYXRpb24gPSBz
dGFydCArIHdvcmRTdGFydCArIG1pc3NwZWxsaW5nTG9jYXRpb247CisgICAgICAgICAgICBtaXNz
cGVsbGluZy5sZW5ndGggPSBtaXNzcGVsbGluZ0xlbmd0aDsKKyAgICAgICAgICAgIG1pc3NwZWxs
aW5nLnJlcGxhY2VtZW50ID0gY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5nZXRBdXRvQ29ycmVjdFN1
Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChTdHJpbmcodGV4dCArIG1pc3NwZWxsaW5nLmxvY2F0
aW9uLCBtaXNzcGVsbGluZy5sZW5ndGgpKTsKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKG1p
c3NwZWxsaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIHdvcmRTdGFydCA9IHdvcmRFbmQ7Cisg
ICAgfQogfQorI2VuZGlmCiAKLXZvaWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsQmFkR3Jh
bW1hcigpCit2b2lkIFRleHRDaGVja2luZ0hlbHBlcjo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoRWRp
dG9yQ2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLCBUZXh0Q2hl
Y2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYg
cmVzdWx0cykKIHsKLSAgICBBU1NFUlQoV1RGX1VTRV9HUkFNTUFSX0NIRUNLSU5HKTsKLSAgICAv
LyBVc2UgdGhlICJtYXJrQWxsIiBmZWF0dXJlIG9mIG9maW5kRmlyc3RCYWRHcmFtbWFyLiBJZ25v
cmUgdGhlIHJldHVybiB2YWx1ZSBhbmQgIm91dCBwYXJhbWV0ZXJzIjsgYWxsIHdlIG5lZWQgdG8K
LSAgICAvLyBkbyBpcyBtYXJrIGV2ZXJ5IGluc3RhbmNlLgotICAgIEdyYW1tYXJEZXRhaWwgaWdu
b3JlZEdyYW1tYXJEZXRhaWw7Ci0gICAgaW50IGlnbm9yZWRPZmZzZXQ7Ci0gICAgZmluZEZpcnN0
QmFkR3JhbW1hcihpZ25vcmVkR3JhbW1hckRldGFpbCwgaWdub3JlZE9mZnNldCwgdHJ1ZSk7Cisg
ICAgQVNTRVJUKHJlc3VsdHMuaXNFbXB0eSgpKTsKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQorICAgIGNsaWVudC0+dGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4
dCwgbGVuZ3RoLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKyNlbHNlCisgICAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gc3BlbGxpbmdSZXN1bHQ7CisgICAgaWYgKGNoZWNraW5nVHlwZXMg
JiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcpCisgICAgICAgIGZpbmRNaXNzcGVsbGluZ3MoY2xp
ZW50LCB0ZXh0LCAwLCBsZW5ndGgsIHNwZWxsaW5nUmVzdWx0KTsKKworICAgIFZlY3RvcjxUZXh0
Q2hlY2tpbmdSZXN1bHQ+IGdyYW1tYXJSZXN1bHQ7CisgICAgaWYgKGNoZWNraW5nVHlwZXMgJiBU
ZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgeworICAgICAgICAvLyBPbmx5IGNoZWNrcyBncmFtbWFy
dGljYWwgZXJyb3IgYmVmb3JlIHRoZSBmaXJzdCBtaXNzcGVsbGluZy4KKyAgICAgICAgaW50IGdy
YW1tYXJDaGVja0xlbmd0aCA9IGxlbmd0aDsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzcGVsbGluZ1Jlc3VsdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHNwZWxsaW5n
UmVzdWx0W2ldLmxvY2F0aW9uIDwgZ3JhbW1hckNoZWNrTGVuZ3RoKQorICAgICAgICAgICAgICAg
IGdyYW1tYXJDaGVja0xlbmd0aCA9IHNwZWxsaW5nUmVzdWx0W2ldLmxvY2F0aW9uOworICAgICAg
ICB9CisKKyAgICAgICAgZmluZEJhZEdyYW1tYXJzKGNsaWVudCwgdGV4dCwgMCwgZ3JhbW1hckNo
ZWNrTGVuZ3RoLCBncmFtbWFyUmVzdWx0KTsKKyAgICB9CisKKyAgICBpZiAoZ3JhbW1hclJlc3Vs
dC5zaXplKCkpCisgICAgICAgIHJlc3VsdHMuc3dhcChncmFtbWFyUmVzdWx0KTsKKyAgICBpZiAo
c3BlbGxpbmdSZXN1bHQuc2l6ZSgpKSB7CisgICAgICAgIGlmIChyZXN1bHRzLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJlc3VsdHMuc3dhcChzcGVsbGluZ1Jlc3VsdCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHNwZWxsaW5nUmVzdWx0KTsKKyAgICB9CisjZW5k
aWYKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tp
bmdIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgK
aW5kZXggOGI1YzY5MTA1MjhmNDA1MWEzYWQ4NTZjNmI2Y2FhMTk0Zjc5MmZlMi4uZWJmYjJmZmI2
NTgzOGU1YTk5YjViNjEwNjVkYTFmY2IwZmNhYWYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCkBAIC03OCwxNSArNzgsMTQgQEAgcHVibGljOgogICAg
IFRleHRDaGVja2luZ0hlbHBlcihFZGl0b3JDbGllbnQqLCBQYXNzUmVmUHRyPFJhbmdlPik7CiAg
ICAgflRleHRDaGVja2luZ0hlbHBlcigpOwogCi0gICAgU3RyaW5nIGZpbmRGaXJzdE1pc3NwZWxs
aW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vbCBtYXJrQWxsLCBSZWZQdHI8UmFu
Z2U+JiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogICAgIFN0cmluZyBmaW5kRmlyc3RNaXNzcGVs
bGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgb3V0SXNTcGVsbGluZywg
aW50JiBvdXRGaXJzdEZvdW5kT2Zmc2V0LCBHcmFtbWFyRGV0YWlsJiBvdXRHcmFtbWFyRGV0YWls
KTsKLSAgICBTdHJpbmcgZmluZEZpcnN0QmFkR3JhbW1hcihHcmFtbWFyRGV0YWlsJiBvdXRHcmFt
bWFyRGV0YWlsLCBpbnQmIG91dEdyYW1tYXJQaHJhc2VPZmZzZXQsIGJvb2wgbWFya0FsbCk7CiAg
ICAgaW50IGZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+
JiBncmFtbWFyRGV0YWlscywgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgaW50IGJhZEdy
YW1tYXJQaHJhc2VMZW5ndGgsIGludCBzdGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgYm9vbCBt
YXJrQWxsKTsKLSAgICB2b2lkIG1hcmtBbGxNaXNzcGVsbGluZ3MoUmVmUHRyPFJhbmdlPiYgZmly
c3RNaXNzcGVsbGluZ1JhbmdlKTsKLSAgICB2b2lkIG1hcmtBbGxCYWRHcmFtbWFyKCk7CiAKICAg
ICBib29sIGlzVW5ncmFtbWF0aWNhbChWZWN0b3I8U3RyaW5nPiYgZ3Vlc3Nlc1ZlY3RvcikgY29u
c3Q7CiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGlj
YWxSYW5nZShib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFt
bWF0aWNhbCkgY29uc3Q7CisKKyAgICBzdGF0aWMgdm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChF
ZGl0b3JDbGllbnQqLCBjb25zdCBVQ2hhciosIGludCwgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hl
Y2tpbmdUeXBlcywgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mKTsKKwogcHJpdmF0ZToKICAg
ICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>