<?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>87435</bug_id>
          
          <creation_ts>2012-05-24 15:33:03 -0700</creation_ts>
          <short_desc>Remove unused argument coders for animation</short_desc>
          <delta_ts>2012-05-28 10:48:25 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>gustavo</cc>
    
    <cc>philn</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>633299</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-24 15:33:03 -0700</bug_when>
    <thetext>Remove unused argument coders for animation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633874</commentid>
    <comment_count>1</comment_count>
      <attachid>144057</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-25 06:18:08 -0700</bug_when>
    <thetext>Created attachment 144057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633881</commentid>
    <comment_count>2</comment_count>
      <attachid>144057</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-25 06:33:17 -0700</bug_when>
    <thetext>Comment on attachment 144057
Patch

Attachment 144057 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/12833007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633883</commentid>
    <comment_count>3</comment_count>
      <attachid>144057</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-25 06:39:33 -0700</bug_when>
    <thetext>Comment on attachment 144057
Patch

Attachment 144057 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12833009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633911</commentid>
    <comment_count>4</comment_count>
      <attachid>144057</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-25 07:40:56 -0700</bug_when>
    <thetext>Comment on attachment 144057
Patch

Attachment 144057 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12808393</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>633989</commentid>
    <comment_count>5</comment_count>
      <attachid>144082</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-25 09:36:24 -0700</bug_when>
    <thetext>Created attachment 144082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634958</commentid>
    <comment_count>6</comment_count>
      <attachid>144291</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-05-28 00:34:06 -0700</bug_when>
    <thetext>Created attachment 144291
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635286</commentid>
    <comment_count>7</comment_count>
      <attachid>144291</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2012-05-28 09:24:11 -0700</bug_when>
    <thetext>Comment on attachment 144291
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635322</commentid>
    <comment_count>8</comment_count>
      <attachid>144291</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-28 10:48:20 -0700</bug_when>
    <thetext>Comment on attachment 144291
Patch

Clearing flags on attachment: 144291

Committed r118697: &lt;http://trac.webkit.org/changeset/118697&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>635323</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-28 10:48:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144057</attachid>
            <date>2012-05-25 06:18:08 -0700</date>
            <delta_ts>2012-05-25 09:36:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87435-20120525061807.patch</filename>
            <type>text/plain</type>
            <size>27512</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjAwMmE1ODM1ODc5Mzdk
M2RjNDQ1ZjJlNTQ5MmQ2OGVmZTc4ZmI1MS4uZDAyYmYxMGMxNmEyZDdmZmM0ZDg3NzJhODZiMzIx
YjEwMjRiOWZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA1LTI0ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IHVudXNlZCBhcmd1bWVudCBjb2RlcnMgZm9yIGFuaW1hdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0MzUKKworICAgICAgICBUaG9zZSBhcmd1
bWVudCBjb2RlcnMgYXJlIG5vIGxvbmdlciBpbiB1c2UsIGFuZCBjYW4gYmUgc2FmZWx5IHB1cmdl
ZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQyk6CisgICAg
ICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAoV2ViQ29yZSk6
CisKIDIwMTItMDQtMjggIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KIAogICAgICAgICBbVGV4bWFwXSBFbmFibGUgY3NzIGZpbHRlcnMgaW4gVGV4dHVyZU1hcHBl
ckdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
CmluZGV4IDhiY2RiYmQ4YzdlYmQxZTdjYTcwNjNmZDg5ZmE1NDE0NGNkYTZmMTQuLjMyMWRiOTQ1
N2UxY2FhYmNkNDE5OGVmNDNiMGE0ODUyOWYyYTJhYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC00NywxOSArNDcsOCBAQAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1
ZGUgPFdlYkNvcmUvQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0Qu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QZXJz
cGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvVGltaW5nRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RyYW5z
Zm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtT3BlcmF0aW9ucy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9UcmFuc2Zvcm1hdGlvbk1hdHJpeC5oPgogI2VuZGlmCiAKICNpZiBVU0Uo
VUlfU0lERV9DT01QT1NJVElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQpAQCAtNjUwLDcgKzYz
OSw2IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxLVVJMPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rlciog
ZGVjb2RlciwgS1VSTCYgcmVzdWx0KQogfQogCiAjaWYgUExBVEZPUk0oUVQpCi0KIHZvaWQgQXJn
dW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
LCBjb25zdCBGbG9hdFBvaW50M0QmIGZsb2F0UG9pbnQzRCkKIHsKICAgICBTaW1wbGVBcmd1bWVu
dENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShlbmNvZGVyLCBmbG9hdFBvaW50M0QpOwpAQCAt
NjYxLDE3ICs2NDksNiBAQCBib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRmxvYXRQb2ludDNEJgogICAgIHJldHVybiBTaW1w
bGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmRlY29kZShkZWNvZGVyLCBmbG9hdFBvaW50
M0QpOwogfQogCi0KLXZvaWQgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoQXJndW1lbnRF
bmNvZGVyKiBlbmNvZGVyLCBjb25zdCBMZW5ndGgmIGxlbmd0aCkKLXsKLSAgICBTaW1wbGVBcmd1
bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBsZW5ndGgpOwotfQotCi1ib29sIEFy
Z3VtZW50Q29kZXI8TGVuZ3RoPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgTGVu
Z3RoJiBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6
ZGVjb2RlKGRlY29kZXIsIGxlbmd0aCk7Ci19Ci0KIHZvaWQgQXJndW1lbnRDb2RlcjxUcmFuc2Zv
cm1hdGlvbk1hdHJpeD46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1hdGlvbk1hdHJpeCkKIHsKICAgICBTaW1wbGVB
cmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5jb2RlKGVuY29kZXIsIHRyYW5z
Zm9ybWF0aW9uTWF0cml4KTsKQEAgLTY4Miw1NzQgKzY1OSw2IEBAIGJvb2wgQXJndW1lbnRDb2Rl
cjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIs
IFRyYW5zCiAgICAgcmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRy
aXg+OjpkZWNvZGUoZGVjb2RlciwgdHJhbnNmb3JtYXRpb25NYXRyaXgpOwogfQogCi0KLXZvaWQg
QXJndW1lbnRDb2RlcjxSZWZQdHI8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjplbmNvZGUo
QXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24q
IG9wZXJhdGlvbikKLXsKLSAgICBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4Pjo6ZW5jb2RlKGVuY29kZXIsIG9wZXJhdGlvbi0+bWF0cml4KCkpOwotfQotCi1ib29s
IEFyZ3VtZW50Q29kZXI8UmVmUHRyPE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlv
bj4mIG9wZXJhdGlvbikKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0gICAg
aWYgKCFBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVjb2Rl
KGRlY29kZXIsIG1hdHJpeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG9wZXJhdGlv
biA9IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCk7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8TWF0cml4M0RUcmFuc2Zvcm1P
cGVyYXRpb24+ID46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IE1hdHJp
eDNEVHJhbnNmb3JtT3BlcmF0aW9uKiBvcGVyYXRpb24pCi17Ci0gICAgQXJndW1lbnRDb2RlcjxU
cmFuc2Zvcm1hdGlvbk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBvcGVyYXRpb24tPm1hdHJpeCgp
KTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxNYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbj4gPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPE1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQotewotCi0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbWF0cml4OwotICAgIGlmICghQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeD46OmRlY29kZShkZWNvZGVyLCBtYXRyaXgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBvcGVyYXRpb24gPSBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KG1hdHJpeCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQ
dHI8UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+ID46OmVuY29kZShBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIsIGNvbnN0IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiBvcGVyYXRp
b24pCi17Ci0gICAgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwgb3BlcmF0
aW9uLT5wZXJzcGVjdGl2ZSgpKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxQZXJz
cGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVj
b2RlciwgUmVmUHRyPFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQot
ewotICAgIExlbmd0aCBwZXJzcGVjdGl2ZTsKLSAgICBpZiAoIUFyZ3VtZW50Q29kZXI8TGVuZ3Ro
Pjo6ZGVjb2RlKGRlY29kZXIsIHBlcnNwZWN0aXZlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgb3BlcmF0aW9uID0gUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShw
ZXJzcGVjdGl2ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxS
ZWZQdHI8Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVy
KiBlbmNvZGVyLCBjb25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbikKLXsK
LSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybU9wZXJhdGlvbiA9IG9wZXJh
dGlvbjsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHRyYW5zZm9ybU9wZXJhdGlvbi0+Z2V0T3Bl
cmF0aW9uVHlwZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT54KCkpOwotICAg
IGVuY29kZXItPmVuY29kZShvcGVyYXRpb24tPnkoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG9w
ZXJhdGlvbi0+eigpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT5hbmdsZSgpKTsK
LX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+
ID46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb24+JiBvcGVyYXRpb24pCi17Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVy
YXRpb25UeXBlIG9wZXJhdGlvblR5cGU7Ci0gICAgZG91YmxlIHg7Ci0gICAgZG91YmxlIHk7Ci0g
ICAgZG91YmxlIHo7Ci0gICAgZG91YmxlIGFuZ2xlOwotCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGVFbnVtKG9wZXJhdGlvblR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29k
ZXItPmRlY29kZSh5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKHopKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoYW5nbGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvcGVyYXRpb24gPSBSb3Rh
dGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgb3BlcmF0aW9uVHlw
ZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxT
Y2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbikKLXsKLSAgICBjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybU9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAg
ICBlbmNvZGVyLT5lbmNvZGVFbnVtKHRyYW5zZm9ybU9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlw
ZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT54KCkpOwotICAgIGVuY29kZXIt
PmVuY29kZShvcGVyYXRpb24tPnkoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG9wZXJhdGlvbi0+
eigpKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbj4gPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQotewotICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlOwotICAgIGRvdWJsZSB4OwotICAgIGRvdWJsZSB5
OwotICAgIGRvdWJsZSB6OwotCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKG9wZXJhdGlv
blR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
eCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZSh5KSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHopKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvcGVyYXRpb24gPSBTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKHgsIHksIHosIG9wZXJhdGlvblR5cGUpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+ID46
OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb24qIG9wZXJhdGlvbikKLXsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5z
Zm9ybU9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHRyYW5z
Zm9ybU9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUo
b3BlcmF0aW9uLT5hbmdsZVgoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG9wZXJhdGlvbi0+YW5n
bGVZKCkpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFNrZXdUcmFuc2Zvcm1PcGVy
YXRpb24+ID46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxTa2V3VHJh
bnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQotewotICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlOwotICAgIGRvdWJsZSBhbmdsZVg7Ci0gICAgZG91
YmxlIGFuZ2xlWTsKLQotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShvcGVyYXRpb25UeXBl
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGFuZ2xl
WCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShhbmds
ZVkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvcGVyYXRpb24gPSBTa2V3VHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUoYW5nbGVYLCBhbmdsZVksIG9wZXJhdGlvblR5cGUpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFRyYW5zbGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29u
c3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiBvcGVyYXRpb24pCi17Ci0gICAgY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2Zvcm1PcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlRW51bSh0cmFuc2Zvcm1PcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUo
KSk7Ci0gICAgQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwgb3BlcmF0aW9u
LT54KCkpOwotICAgIEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIG9wZXJh
dGlvbi0+eSgpKTsKLSAgICBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBv
cGVyYXRpb24tPnooKSk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxSZWZQdHI8VHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBS
ZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQotewotICAgIFRy
YW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlOwotICAgIExlbmd0
aCB4OwotICAgIExlbmd0aCB5OwotICAgIExlbmd0aCB6OwotCi0gICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGVFbnVtKG9wZXJhdGlvblR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KCFBcmd1bWVudENvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCB4KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2Rl
ciwgeSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIUFyZ3VtZW50Q29kZXI8TGVu
Z3RoPjo6ZGVjb2RlKGRlY29kZXIsIHopKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBv
cGVyYXRpb24gPSBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBv
cGVyYXRpb25UeXBlKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVy
PFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiYgZnVuY3Rpb24pCi17Ci0gICAgZW5jb2Rl
KGVuY29kZXIsIGZ1bmN0aW9uLmdldCgpKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0
cjxUaW1pbmdGdW5jdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29u
c3QgV2ViQ29yZTo6VGltaW5nRnVuY3Rpb24qIGZ1bmN0aW9uKQotewotICAgIGlmICghZnVuY3Rp
b24pIHsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRW51bShXZWJDb3JlOjpUaW1pbmdGdW5jdGlv
bjo6TGluZWFyRnVuY3Rpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZW5jb2Rl
ci0+ZW5jb2RlRW51bShmdW5jdGlvbi0+dHlwZSgpKTsKLSAgICBzd2l0Y2ggKGZ1bmN0aW9uLT50
eXBlKCkpIHsKLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjog
ewotICAgICAgICBjb25zdCBXZWJDb3JlOjpDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdWJp
Y0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbio+KGZ1bmN0aW9uKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKGN1Ymlj
RnVuY3Rpb24tPngxKCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoY3ViaWNGdW5j
dGlvbi0+eTEoKSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZURvdWJsZShjdWJpY0Z1bmN0aW9u
LT54MigpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKGN1YmljRnVuY3Rpb24tPnky
KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3Rl
cHNGdW5jdGlvbjogewotICAgICAgICBjb25zdCBXZWJDb3JlOjpTdGVwc1RpbWluZ0Z1bmN0aW9u
KiBzdGVwc0Z1bmN0aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6U3RlcHNUaW1pbmdG
dW5jdGlvbio+KGZ1bmN0aW9uKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlSW50MzIoc3RlcHNG
dW5jdGlvbi0+bnVtYmVyT2ZTdGVwcygpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlQm9vbChz
dGVwc0Z1bmN0aW9uLT5zdGVwQXRTdGFydCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IH0KLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gPjo6ZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiYgZnVu
Y3Rpb24pCi17Ci0gICAgVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBlOwot
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFy
RnVuY3Rpb246Ci0gICAgICAgIGZ1bmN0aW9uID0gTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0
ZSgpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1
YmljQmV6aWVyRnVuY3Rpb246IHsKLSAgICAgICAgZG91YmxlIHgxLCB5MSwgeDIsIHkyOwotICAg
ICAgICBpZiAoIWRlY29kZXItPmRlY29kZURvdWJsZSh4MSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRG91YmxlKHkxKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoeDIp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZURvdWJsZSh5MikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZ1bmN0aW9u
ID0gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3Rl
cHNGdW5jdGlvbjogewotICAgICAgICBpbnQgbnVtU3RlcHM7Ci0gICAgICAgIGJvb2wgc3RlcEF0
U3RhcnQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlSW50MzIobnVtU3RlcHMpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZUJvb2wo
c3RlcEF0U3RhcnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZ1bmN0
aW9uID0gU3RlcHNUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKG51bVN0ZXBzLCBzdGVwQXRTdGFydCk7
Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIH0KLQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgZW5jb2RlT3BlcmF0aW9uKEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4mIG9w
ZXJhdGlvbikKLXsKLSAgICBBcmd1bWVudENvZGVyPFJlZlB0cjxUPiA+OjplbmNvZGUoZW5jb2Rl
ciwgc3RhdGljX2Nhc3Q8Y29uc3QgVCo+KG9wZXJhdGlvbi5nZXQoKSkpOwotfQotCi12b2lkIEFy
Z3VtZW50Q29kZXI8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4mIG9wZXJh
dGlvbikKLXsKLSAgICAvLyBXZSBkb24ndCB3YW50IHRvIGVuY29kZSBudWxsLXJlZmVyZW5jZXMu
Ci0gICAgQVNTRVJUKG9wZXJhdGlvbik7Ci0KLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKG9wZXJh
dGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKLSAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+Z2V0T3Bl
cmF0aW9uVHlwZSgpKSB7Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOgotICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgotICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpTQ0FMRV9ZOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgot
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAgICAgICAgZW5jb2RlT3Bl
cmF0aW9uPFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPihlbmNvZGVyLCBvcGVyYXRpb24pOwotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOgot
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKLSAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1k6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9aOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q6
Ci0gICAgICAgIGVuY29kZU9wZXJhdGlvbjxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KGVu
Y29kZXIsIG9wZXJhdGlvbik7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEU6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9Y
OgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKLSAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNEOgotICAgICAgICBlbmNvZGVPcGVyYXRpb248Um90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uPihlbmNvZGVyLCBvcGVyYXRpb24pOwotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzoKLSAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6U0tFV19YOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6
Ci0gICAgICAgIGVuY29kZU9wZXJhdGlvbjxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uPihlbmNvZGVy
LCBvcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJh
dGlvbjo6TUFUUklYOgotICAgICAgICBlbmNvZGVPcGVyYXRpb248TWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uPihlbmNvZGVyLCBvcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOgotICAgICAgICBlbmNvZGVPcGVyYXRpb248
TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24+KGVuY29kZXIsIG9wZXJhdGlvbik7Ci0gICAgICAg
IHJldHVybjsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRToKLSAg
ICAgICAgZW5jb2RlT3BlcmF0aW9uPFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPihlbmNv
ZGVyLCBvcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6SURFTlRJVFk6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1ib29sIGRl
Y29kZU9wZXJhdGlvbihBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxUcmFuc2Zvcm1P
cGVyYXRpb24+JiBvcGVyYXRpb24pCi17Ci0gICAgUmVmUHRyPFQ+IG5ld09wZXJhdGlvbjsKLSAg
ICBpZiAoIWRlY29kZXItPmRlY29kZShuZXdPcGVyYXRpb24pKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBvcGVyYXRpb24gPSBuZXdPcGVyYXRpb247Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjpkZWNv
ZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiYg
b3BlcmF0aW9uKQotewotICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBl
OwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlNDQUxFOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgotICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9ZOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9u
OjpTQ0FMRV9aOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAgICAg
ICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4oZGVjb2Rl
ciwgb3BlcmF0aW9uKTsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6
Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgotICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1o6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8z
RDoKLSAgICAgICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVy
YXRpb24+KGRlY29kZXIsIG9wZXJhdGlvbik7Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6Uk9UQVRFOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKLSAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1k6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVy
YXRpb246OlJPVEFURV8zRDoKLSAgICAgICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24+KGRlY29kZXIsIG9wZXJhdGlvbik7Ci0KLSAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6U0tFVzoKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19Y
OgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgIHJldHVybiBk
ZWNvZGVPcGVyYXRpb248U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4oZGVjb2Rlciwgb3BlcmF0aW9u
KTsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6Ci0gICAgICAgIHJldHVy
biBkZWNvZGVPcGVyYXRpb248TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPihkZWNvZGVyLCBvcGVy
YXRpb24pOwotCi0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDoKLSAgICAg
ICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbj4oZGVj
b2Rlciwgb3BlcmF0aW9uKTsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVD
VElWRToKLSAgICAgICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxQZXJzcGVjdGl2ZVRyYW5zZm9y
bU9wZXJhdGlvbj4oZGVjb2Rlciwgb3BlcmF0aW9uKTsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpJREVOVElUWToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAg
ICAgICAgb3BlcmF0aW9uID0gSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpOwot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKLXsK
LSAgICBWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPiBvcGVyYXRpb25zVmVjdG9y
ID0gb3BlcmF0aW9ucy5vcGVyYXRpb25zKCk7Ci0gICAgaW50IHNpemUgPSBvcGVyYXRpb25zVmVj
dG9yLnNpemUoKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVJbnQzMihzaXplKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHNpemU7ICsraSkKLSAgICAgICAgQXJndW1lbnRDb2RlcjxSZWZQdHI8VHJh
bnNmb3JtT3BlcmF0aW9uPiA+OjplbmNvZGUoZW5jb2Rlciwgb3BlcmF0aW9uc1ZlY3RvcltpXSk7
Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykK
LXsKLSAgICBpbnQgc2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZUludDMyKHNpemUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJh
dGlvbj4gPiYgb3BlcmF0aW9uVmVjdG9yID0gb3BlcmF0aW9ucy5vcGVyYXRpb25zKCk7Ci0gICAg
b3BlcmF0aW9uVmVjdG9yLmNsZWFyKCk7Ci0gICAgb3BlcmF0aW9uVmVjdG9yLnJlc2l6ZShzaXpl
KTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBSZWZQdHI8
VHJhbnNmb3JtT3BlcmF0aW9uPiBvcGVyYXRpb247Ci0gICAgICAgIGlmICghQXJndW1lbnRDb2Rl
cjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjpkZWNvZGUoZGVjb2Rlciwgb3BlcmF0aW9u
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgb3BlcmF0aW9uVmVjdG9yW2ld
ID0gb3BlcmF0aW9uOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgZW5jb2RlQm9vbEFuZFZhbHVlKEFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlciwgYm9vbCBpc1NldCwgY29uc3QgVCYgdmFsdWUpCi17Ci0gICAgZW5jb2Rlci0+
ZW5jb2RlQm9vbChpc1NldCk7Ci0gICAgaWYgKGlzU2V0KQotICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUodmFsdWUpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgZW5jb2Rl
Qm9vbEFuZEVudW1WYWx1ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGJvb2wgaXNTZXQsIFQg
dmFsdWUpCi17Ci0gICAgZW5jb2Rlci0+ZW5jb2RlQm9vbChpc1NldCk7Ci0gICAgaWYgKGlzU2V0
KQotICAgICAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHZhbHVlKTsKLX0KLQotdm9pZCBBcmd1bWVu
dENvZGVyPFJlZlB0cjxBbmltYXRpb24+ID46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29k
ZXIsIGNvbnN0IFJlZlB0cjxBbmltYXRpb24+JiBhbmltYXRpb24pCi17Ci0gICAgZW5jb2RlQm9v
bEFuZFZhbHVlKGVuY29kZXIsIGFuaW1hdGlvbi0+aXNEZWxheVNldCgpLCBhbmltYXRpb24tPmRl
bGF5KCkpOwotICAgIGVuY29kZUJvb2xBbmRFbnVtVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLT5p
c0RpcmVjdGlvblNldCgpLCBhbmltYXRpb24tPmRpcmVjdGlvbigpKTsKLSAgICBlbmNvZGVCb29s
QW5kVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLT5pc0R1cmF0aW9uU2V0KCksIGFuaW1hdGlvbi0+
ZHVyYXRpb24oKSk7Ci0gICAgZW5jb2RlQm9vbEFuZFZhbHVlKGVuY29kZXIsIGFuaW1hdGlvbi0+
aXNGaWxsTW9kZVNldCgpLCBhbmltYXRpb24tPmZpbGxNb2RlKCkpOwotICAgIGVuY29kZUJvb2xB
bmRWYWx1ZShlbmNvZGVyLCBhbmltYXRpb24tPmlzSXRlcmF0aW9uQ291bnRTZXQoKSwgYW5pbWF0
aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKLSAgICBlbmNvZGVCb29sQW5kVmFsdWUoZW5jb2Rlciwg
YW5pbWF0aW9uLT5pc05hbWVTZXQoKSwgYW5pbWF0aW9uLT5uYW1lKCkpOwotICAgIGVuY29kZUJv
b2xBbmRFbnVtVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLT5pc1BsYXlTdGF0ZVNldCgpLCBhbmlt
YXRpb24tPnBsYXlTdGF0ZSgpKTsKLSAgICBlbmNvZGVCb29sQW5kVmFsdWUoZW5jb2RlciwgYW5p
bWF0aW9uLT5pc1Byb3BlcnR5U2V0KCksIHN0YXRpY19jYXN0PGludD4oYW5pbWF0aW9uLT5wcm9w
ZXJ0eSgpKSk7Ci0gICAgZW5jb2RlQm9vbEFuZFZhbHVlPFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4g
PihlbmNvZGVyLCBhbmltYXRpb24tPmlzVGltaW5nRnVuY3Rpb25TZXQoKSwgYW5pbWF0aW9uLT50
aW1pbmdGdW5jdGlvbigpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVCb29sKGFuaW1hdGlvbi0+aXNO
b25lQW5pbWF0aW9uKCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgYm9v
bCBkZWNvZGVCb29sQW5kVmFsdWUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBib29sJiBpc1Nl
dCwgVCYgdmFsdWUpCi17Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVCb29sKGlzU2V0KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghaXNTZXQpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgcmV0dXJuIGRlY29kZXItPmRlY29kZSh2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFQ+Ci1zdGF0aWMgYm9vbCBkZWNvZGVCb29sQW5kRW51bVZhbHVlKEFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgYm9vbCYgaXNTZXQsIFQmIHZhbHVlKQotewotICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlQm9vbChpc1NldCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlz
U2V0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGVF
bnVtKHZhbHVlKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxBbmltYXRpb24+ID46
OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxBbmltYXRpb24+JiBhbmlt
YXRpb24pCi17Ci0gICAgYm9vbCBpc0RlbGF5U2V0LCBpc0RpcmVjdGlvblNldCwgaXNEdXJhdGlv
blNldCwgaXNGaWxsTW9kZVNldCwgaXNJdGVyYXRpb25Db3VudFNldCwgaXNOYW1lU2V0LCBpc1Bs
YXlTdGF0ZVNldCwgaXNQcm9wZXJ0eVNldCwgaXNUaW1pbmdGdW5jdGlvblNldDsKLSAgICBpbnQg
cHJvcGVydHksIGl0ZXJhdGlvbkNvdW50LCBmaWxsTW9kZTsKLSAgICBkb3VibGUgZHVyYXRpb247
Ci0gICAgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKLSAgICBTdHJpbmcg
bmFtZTsKLQotICAgIGRvdWJsZSBkZWxheTsKLSAgICBpZiAoIWRlY29kZUJvb2xBbmRWYWx1ZShk
ZWNvZGVyLCBpc0RlbGF5U2V0LCBkZWxheSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEFuaW1hdGlvbjo6QW5p
bWF0aW9uRGlyZWN0aW9uTm9ybWFsOwotICAgIGlmICghZGVjb2RlQm9vbEFuZEVudW1WYWx1ZShk
ZWNvZGVyLCBpc0RpcmVjdGlvblNldCwgZGlyZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzRHVyYXRpb25TZXQsIGR1
cmF0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2RlQm9vbEFuZFZh
bHVlKGRlY29kZXIsIGlzRmlsbE1vZGVTZXQsIGZpbGxNb2RlKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzSXRlcmF0aW9uQ291
bnRTZXQsIGl0ZXJhdGlvbkNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzTmFtZVNldCwgbmFtZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIEVBbmltUGxheVN0YXRlIHBsYXlTdGF0ZSA9IEFuaW1QbGF5U3Rh
dGVQbGF5aW5nOwotICAgIGlmICghZGVjb2RlQm9vbEFuZEVudW1WYWx1ZShkZWNvZGVyLCBpc1Bs
YXlTdGF0ZVNldCwgcGxheVN0YXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzUHJvcGVydHlTZXQsIHByb3BlcnR5KSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVlPFJlZlB0cjxU
aW1pbmdGdW5jdGlvbj4gPihkZWNvZGVyLCBpc1RpbWluZ0Z1bmN0aW9uU2V0LCB0aW1pbmdGdW5j
dGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFuaW1hdGlvbiA9IEFuaW1hdGlv
bjo6Y3JlYXRlKCk7Ci0gICAgYW5pbWF0aW9uLT5jbGVhckFsbCgpOwotCi0gICAgaWYgKGlzRGVs
YXlTZXQpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkoZGVsYXkpOwotICAgIGlmIChpc0Rp
cmVjdGlvblNldCkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oZGlyZWN0aW9uKTsK
LSAgICBpZiAoaXNEdXJhdGlvblNldCkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihk
dXJhdGlvbik7Ci0gICAgaWYgKGlzRmlsbE1vZGVTZXQpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0
RmlsbE1vZGUoZmlsbE1vZGUpOwotICAgIGlmIChpc0l0ZXJhdGlvbkNvdW50U2V0KQotICAgICAg
ICBhbmltYXRpb24tPnNldEl0ZXJhdGlvbkNvdW50KGl0ZXJhdGlvbkNvdW50KTsKLSAgICBpZiAo
aXNOYW1lU2V0KQotICAgICAgICBhbmltYXRpb24tPnNldE5hbWUobmFtZSk7Ci0gICAgaWYgKGlz
UGxheVN0YXRlU2V0KQotICAgICAgICBhbmltYXRpb24tPnNldFBsYXlTdGF0ZShwbGF5U3RhdGUp
OwotICAgIGlmIChpc1Byb3BlcnR5U2V0KQotICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5
KHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BlcnR5KSk7Ci0gICAgaWYgKGlzVGltaW5n
RnVuY3Rpb25TZXQpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24odGltaW5n
RnVuY3Rpb24pOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCi0KLXZvaWQgQXJndW1lbnRDb2RlcjxLZXlmcmFtZVZhbHVlTGlzdD46OmVu
Y29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OktleWZyYW1lVmFs
dWVMaXN0JiBrZXlmcmFtZXMpCi17Ci0gICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKGtleWZyYW1l
cy5zaXplKCkpOwotICAgIGVuY29kZXItPmVuY29kZUludDMyKGtleWZyYW1lcy5wcm9wZXJ0eSgp
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewot
ICAgICAgICBjb25zdCBXZWJDb3JlOjpBbmltYXRpb25WYWx1ZSogdmFsdWUgPSBrZXlmcmFtZXMu
YXQoaSk7Ci0gICAgICAgIGVuY29kZXItPmVuY29kZUZsb2F0KHZhbHVlLT5rZXlUaW1lKCkpOwot
ICAgICAgICBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4gPjo6
ZW5jb2RlKGVuY29kZXIsIHZhbHVlLT50aW1pbmdGdW5jdGlvbigpKTsKLSAgICAgICAgc3dpdGNo
IChrZXlmcmFtZXMucHJvcGVydHkoKSkgewotICAgICAgICBjYXNlIFdlYkNvcmU6OkFuaW1hdGVk
UHJvcGVydHlPcGFjaXR5OiB7Ci0gICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdEFuaW1h
dGlvblZhbHVlKiBmbG9hdFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RmxvYXRB
bmltYXRpb25WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZUZsb2F0
KGZsb2F0VmFsdWUtPnZhbHVlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBXZWJDb3JlOjpBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7Ci0g
ICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogdHJhbnNm
b3JtVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1BbmltYXRpb25W
YWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VHJhbnNm
b3JtT3BlcmF0aW9ucz46OmVuY29kZShlbmNvZGVyLCAqdHJhbnNmb3JtVmFsdWUtPnZhbHVlKCkp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8
S2V5ZnJhbWVWYWx1ZUxpc3Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJD
b3JlOjpLZXlmcmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzKQotewotICAgIHVpbnQzMl90IHNpemU7
Ci0gICAgaW50MzJfdCBwcm9wZXJ0eTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQzMihz
aXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlSW50
MzIocHJvcGVydHkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBrZXlmcmFtZXMgPSBX
ZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdChXZWJDb3JlOjpBbmltYXRlZFByb3BlcnR5SUQocHJv
cGVydHkpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAg
ICAgIGZsb2F0IGtleVRpbWU7Ci0gICAKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1
bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKLSAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVGbG9h
dChrZXlUaW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFBcmd1
bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4gPjo6ZGVjb2RlKGRlY29k
ZXIsIHRpbWluZ0Z1bmN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBzd2l0Y2ggKHByb3BlcnR5KSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6QW5pbWF0ZWRQcm9w
ZXJ0eU9wYWNpdHk6IHsKLSAgICAgICAgICAgIGZsb2F0IHZhbHVlOwotICAgICAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGVGbG9hdCh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAga2V5ZnJhbWVzLmluc2VydChuZXcgV2ViQ29yZTo6RmxvYXRBbmlt
YXRpb25WYWx1ZShrZXlUaW1lLCB2YWx1ZSwgdGltaW5nRnVuY3Rpb24pKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0
eVdlYmtpdFRyYW5zZm9ybTogewotICAgICAgICAgICAgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0
aW9ucyB2YWx1ZTsKLSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFu
c2Zvcm1PcGVyYXRpb25zPjo6ZGVjb2RlKGRlY29kZXIsIHZhbHVlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBrZXlmcmFtZXMuaW5zZXJ0KG5ldyBXZWJDb3Jl
OjpUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZShrZXlUaW1lLCAmdmFsdWUsIHRpbWluZ0Z1bmN0aW9u
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQogI2VuZGlmCiAKICNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykgJiYgRU5BQkxFKENTU19G
SUxURVJTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVu
dENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5o
CmluZGV4IGQwMmY1ZmMxN2M4ZDRjNTU4YzIzMmU2ZjQ2NTBiMjc5YTJkZjRmZjguLjA3ZTFmOWY1
MDE3MTNiMmVjYTRiMjcyZGFiYTBiZDZiOTRjNmQ5NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTY4LDIwICs2OCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKFFUKQogbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IGNsYXNzIEFuaW1hdGlvbjsKICAgICBjbGFzcyBGbG9hdFBvaW50M0Q7Ci0gICAgY2xhc3MgTWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgY2xhc3MgTWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uOwotICAgIGNsYXNzIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgIGNsYXNz
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICBjbGFzcyBTY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbjsKLSAgICBjbGFzcyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOwotICAgIGNsYXNzIFRpbWlu
Z0Z1bmN0aW9uOwotICAgIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICBjbGFzcyBUcmFu
c2Zvcm1PcGVyYXRpb25zOwogICAgIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwotICAgIGNs
YXNzIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICBzdHJ1Y3QgTGVuZ3RoOwogfQog
I2VuZGlmCiAKQEAgLTI0MCw3MSArMjI4LDEwIEBAIHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50
Q29kZXI8V2ViQ29yZTo6RmxvYXRQb2ludDNEPiB7CiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciosIFdlYkNvcmU6OkZsb2F0UG9pbnQzRCYpOwogfTsKIAotdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpMZW5ndGg+IHsKLSAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6TGVuZ3RoJik7Ci0gICAg
c3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6Okxlbmd0aCYpOwot
fTsKLQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1h
dGlvbk1hdHJpeD4gewogICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwog
fTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6TWF0
cml4VHJhbnNmb3JtT3BlcmF0aW9uPiA+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1l
bnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKik7Ci0g
ICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFJlZlB0cjxXZWJDb3JlOjpN
YXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1
bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbj4gPiB7
Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6
Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFy
Z3VtZW50RGVjb2RlciosIFJlZlB0cjxXZWJDb3JlOjpNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlv
bj4mKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNv
cmU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPiA+IHsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6UGVyc3BlY3RpdmVUcmFuc2Zv
cm1PcGVyYXRpb24qKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
UmVmUHRyPFdlYkNvcmU6OlBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPiYpOwotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6Um90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uPiA+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiwgY29uc3QgV2ViQ29yZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKik7Ci0gICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFJlZlB0cjxXZWJDb3JlOjpSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24+Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFJlZlB0cjxXZWJDb3JlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4gPiB7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OlNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciosIFJlZlB0cjxXZWJDb3JlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4mKTsKLX07Ci0KLXRl
bXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OlNrZXdUcmFuc2Zv
cm1PcGVyYXRpb24+ID4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIq
LCBjb25zdCBXZWJDb3JlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKik7Ci0gICAgc3RhdGljIGJv
b2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFJlZlB0cjxXZWJDb3JlOjpTa2V3VHJhbnNmb3Jt
T3BlcmF0aW9uPiYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQ
dHI8V2ViQ29yZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPiA+IHsKLSAgICBzdGF0aWMg
dm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6VHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uKik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciosIFJlZlB0cjxXZWJDb3JlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+Jik7Ci19Owot
Ci10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdG
dW5jdGlvbj4gPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNv
bnN0IFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4mKTsKLSAgICBzdGF0aWMgdm9pZCBl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6VGltaW5nRnVuY3Rpb24qKTsK
LSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6
OlRpbWluZ0Z1bmN0aW9uPiYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2Rl
cjxSZWZQdHI8V2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uPiA+IHsKLSAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OlRyYW5zZm9y
bU9wZXJhdGlvbj4mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
UmVmUHRyPFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbj4mKTsKLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucz4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpUcmFu
c2Zvcm1PcGVyYXRpb25zJik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciosIFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnMmKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3Ry
dWN0IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OkFuaW1hdGlvbj4gPiB7Ci0gICAgc3Rh
dGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFJlZlB0cjxXZWJDb3JlOjpB
bmltYXRpb24+Jik7Ci0gICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFJl
ZlB0cjxXZWJDb3JlOjpBbmltYXRpb24+Jik7Ci19OwogI2VuZGlmCiAKICNpZiBVU0UoVUlfU0lE
RV9DT01QT1NJVElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144082</attachid>
            <date>2012-05-25 09:36:24 -0700</date>
            <delta_ts>2012-05-28 00:34:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87435-20120525093621.patch</filename>
            <type>text/plain</type>
            <size>28179</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1NjUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNjAwMmE1ODM1ODc5Mzdk
M2RjNDQ1ZjJlNTQ5MmQ2OGVmZTc4ZmI1MS4uZDAyYmYxMGMxNmEyZDdmZmM0ZDg3NzJhODZiMzIx
YjEwMjRiOWZhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA1LTI0ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IHVudXNlZCBhcmd1bWVudCBjb2RlcnMgZm9yIGFuaW1hdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0MzUKKworICAgICAgICBUaG9zZSBhcmd1
bWVudCBjb2RlcnMgYXJlIG5vIGxvbmdlciBpbiB1c2UsIGFuZCBjYW4gYmUgc2FmZWx5IHB1cmdl
ZC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwOgorICAgICAgICAoQ29yZUlQQyk6CisgICAg
ICAgICogU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oOgorICAgICAgICAoV2ViQ29yZSk6
CisKIDIwMTItMDQtMjggIE5vJ2FtIFJvc2VudGhhbCAgPG5vYW0ucm9zZW50aGFsQG5va2lhLmNv
bT4KIAogICAgICAgICBbVGV4bWFwXSBFbmFibGUgY3NzIGZpbHRlcnMgaW4gVGV4dHVyZU1hcHBl
ckdMCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29k
ZXJzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3Bw
CmluZGV4IDhiY2RiYmQ4YzdlYmQxZTdjYTcwNjNmZDg5ZmE1NDE0NGNkYTZmMTQuLjZkZDJhNDVk
MjVlY2M1NjcyNWZiZGFjYTQ0ZDVmMzNjZWY4MDZlYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuY3BwCkBAIC00NywxOSArNDcsOSBAQAogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1
ZGUgPFdlYkNvcmUvQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50M0Qu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdl
YkNvcmUvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9QZXJz
cGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY2FsZVRyYW5zZm9ybU9wZXJh
dGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvVGltaW5nRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1RyYW5z
Zm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtT3BlcmF0aW9ucy5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9MZW5ndGguaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9u
TWF0cml4Lmg+CiAjZW5kaWYKIAogI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKSAmJiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCkBAIC02NDksOCArNjM5LDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPEtV
Ukw+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBLVVJMJiByZXN1bHQpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLSNpZiBQTEFURk9STShRVCkKLQorI2lmIFVTRShVSV9TSURFX0NP
TVBPU0lUSU5HKQogdm9pZCBBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmVuY29kZShBcmd1
bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEZsb2F0UG9pbnQzRCYgZmxvYXRQb2ludDNEKQog
ewogICAgIFNpbXBsZUFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZW5jb2RlKGVuY29kZXIs
IGZsb2F0UG9pbnQzRCk7CkBAIC02NjEsNyArNjUwLDYgQEAgYm9vbCBBcmd1bWVudENvZGVyPEZs
b2F0UG9pbnQzRD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEZsb2F0UG9pbnQz
RCYKICAgICByZXR1cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjpkZWNvZGUo
ZGVjb2RlciwgZmxvYXRQb2ludDNEKTsKIH0KIAotCiB2b2lkIEFyZ3VtZW50Q29kZXI8TGVuZ3Ro
Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgTGVuZ3RoJiBsZW5ndGgp
CiB7CiAgICAgU2ltcGxlQXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2RlciwgbGVu
Z3RoKTsKQEAgLTY4Miw1NzcgKzY3MCw3IEBAIGJvb2wgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1h
dGlvbk1hdHJpeD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFRyYW5zCiAgICAg
cmV0dXJuIFNpbXBsZUFyZ3VtZW50Q29kZXI8VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpkZWNvZGUo
ZGVjb2RlciwgdHJhbnNmb3JtYXRpb25NYXRyaXgpOwogfQogCi0KLXZvaWQgQXJndW1lbnRDb2Rl
cjxSZWZQdHI8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjplbmNvZGUoQXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyLCBjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbikK
LXsKLSAgICBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZW5j
b2RlKGVuY29kZXIsIG9wZXJhdGlvbi0+bWF0cml4KCkpOwotfQotCi1ib29sIEFyZ3VtZW50Q29k
ZXI8UmVmUHRyPE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZGVjb2RlKEFyZ3VtZW50RGVj
b2RlciogZGVjb2RlciwgUmVmUHRyPE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbj4mIG9wZXJhdGlv
bikKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0gICAgaWYgKCFBcmd1bWVu
dENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVjb2RlKGRlY29kZXIsIG1h
dHJpeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG9wZXJhdGlvbiA9IE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24+ID46
OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uKiBvcGVyYXRpb24pCi17Ci0gICAgQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlv
bk1hdHJpeD46OmVuY29kZShlbmNvZGVyLCBvcGVyYXRpb24tPm1hdHJpeCgpKTsKLX0KLQotYm9v
bCBBcmd1bWVudENvZGVyPFJlZlB0cjxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPE1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uPiYgb3BlcmF0aW9uKQotewotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4
OwotICAgIGlmICghQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeD46
OmRlY29kZShkZWNvZGVyLCBtYXRyaXgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBv
cGVyYXRpb24gPSBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG1hdHJpeCk7Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8UGVyc3BlY3Rp
dmVUcmFuc2Zvcm1PcGVyYXRpb24+ID46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIs
IGNvbnN0IFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uKiBvcGVyYXRpb24pCi17Ci0gICAg
QXJndW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwgb3BlcmF0aW9uLT5wZXJzcGVj
dGl2ZSgpKTsKLX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxQZXJzcGVjdGl2ZVRyYW5z
Zm9ybU9wZXJhdGlvbj4gPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRy
PFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQotewotICAgIExlbmd0
aCBwZXJzcGVjdGl2ZTsKLSAgICBpZiAoIUFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZGVjb2RlKGRl
Y29kZXIsIHBlcnNwZWN0aXZlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3BlcmF0
aW9uID0gUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZShwZXJzcGVjdGl2ZSk7
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8Um90YXRl
VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBj
b25zdCBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbikKLXsKLSAgICBjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybU9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBl
bmNvZGVyLT5lbmNvZGVFbnVtKHRyYW5zZm9ybU9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgp
KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT54KCkpOwotICAgIGVuY29kZXItPmVu
Y29kZShvcGVyYXRpb24tPnkoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG9wZXJhdGlvbi0+eigp
KTsKLSAgICBlbmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT5hbmdsZSgpKTsKLX0KLQotYm9vbCBB
cmd1bWVudENvZGVyPFJlZlB0cjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+ID46OmRlY29kZShB
cmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+
JiBvcGVyYXRpb24pCi17Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvblR5cGU7Ci0gICAgZG91YmxlIHg7Ci0gICAgZG91YmxlIHk7Ci0gICAgZG91YmxlIHo7
Ci0gICAgZG91YmxlIGFuZ2xlOwotCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKG9wZXJh
dGlvblR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZSh5
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHopKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYW5nbGUpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvcGVyYXRpb24gPSBSb3RhdGVUcmFuc2Zvcm1P
cGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBhbmdsZSwgb3BlcmF0aW9uVHlwZSk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxTY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgU2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbikKLXsKLSAgICBjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb24qIHRyYW5zZm9ybU9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbmNvZGVyLT5l
bmNvZGVFbnVtKHRyYW5zZm9ybU9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKLSAgICBl
bmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT54KCkpOwotICAgIGVuY29kZXItPmVuY29kZShvcGVy
YXRpb24tPnkoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG9wZXJhdGlvbi0+eigpKTsKLX0KLQot
Ym9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uPiYgb3BlcmF0aW9uKQotewotICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb25UeXBlOwotICAgIGRvdWJsZSB4OwotICAgIGRvdWJsZSB5OwotICAgIGRvdWJs
ZSB6OwotCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKG9wZXJhdGlvblR5cGUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoeCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZSh5KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHopKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBvcGVyYXRpb24gPSBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRl
KHgsIHksIHosIG9wZXJhdGlvblR5cGUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFy
Z3VtZW50Q29kZXI8UmVmUHRyPFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+ID46OmVuY29kZShBcmd1
bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJh
dGlvbikKLXsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zZm9ybU9wZXJhdGlv
biA9IG9wZXJhdGlvbjsKLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKHRyYW5zZm9ybU9wZXJhdGlv
bi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT5h
bmdsZVgoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG9wZXJhdGlvbi0+YW5nbGVZKCkpOwotfQot
Ci1ib29sIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+ID46OmRl
Y29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uPiYgb3BlcmF0aW9uKQotewotICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlw
ZSBvcGVyYXRpb25UeXBlOwotICAgIGRvdWJsZSBhbmdsZVg7Ci0gICAgZG91YmxlIGFuZ2xlWTsK
LQotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRW51bShvcGVyYXRpb25UeXBlKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGFuZ2xlWCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShhbmdsZVkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvcGVyYXRpb24gPSBTa2V3VHJhbnNmb3JtT3BlcmF0aW9u
OjpjcmVhdGUoYW5nbGVYLCBhbmdsZVksIG9wZXJhdGlvblR5cGUpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgVHJhbnNsYXRl
VHJhbnNmb3JtT3BlcmF0aW9uKiBvcGVyYXRpb24pCi17Ci0gICAgY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uKiB0cmFuc2Zvcm1PcGVyYXRpb24gPSBvcGVyYXRpb247Ci0gICAgZW5jb2Rlci0+ZW5j
b2RlRW51bSh0cmFuc2Zvcm1PcGVyYXRpb24tPmdldE9wZXJhdGlvblR5cGUoKSk7Ci0gICAgQXJn
dW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwgb3BlcmF0aW9uLT54KCkpOwotICAg
IEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIG9wZXJhdGlvbi0+eSgpKTsK
LSAgICBBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBvcGVyYXRpb24tPnoo
KSk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxSZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3Bl
cmF0aW9uPiA+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZWZQdHI8VHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQotewotICAgIFRyYW5zZm9ybU9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBlOwotICAgIExlbmd0aCB4OwotICAgIExl
bmd0aCB5OwotICAgIExlbmd0aCB6OwotCi0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKG9w
ZXJhdGlvblR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFBcmd1bWVudENv
ZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCB4KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmICghQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2RlciwgeSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIUFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZGVjb2Rl
KGRlY29kZXIsIHopKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvcGVyYXRpb24gPSBU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSh4LCB5LCB6LCBvcGVyYXRpb25UeXBl
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxUaW1p
bmdGdW5jdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVm
UHRyPFRpbWluZ0Z1bmN0aW9uPiYgZnVuY3Rpb24pCi17Ci0gICAgZW5jb2RlKGVuY29kZXIsIGZ1
bmN0aW9uLmdldCgpKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxUaW1pbmdGdW5j
dGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6
VGltaW5nRnVuY3Rpb24qIGZ1bmN0aW9uKQotewotICAgIGlmICghZnVuY3Rpb24pIHsKLSAgICAg
ICAgZW5jb2Rlci0+ZW5jb2RlRW51bShXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVu
Y3Rpb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZW5jb2Rlci0+ZW5jb2RlRW51
bShmdW5jdGlvbi0+dHlwZSgpKTsKLSAgICBzd2l0Y2ggKGZ1bmN0aW9uLT50eXBlKCkpIHsKLSAg
ICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlvbjogewotICAgICAgICBj
b25zdCBXZWJDb3JlOjpDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKiBjdWJpY0Z1bmN0aW9uID0g
c3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6Q3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbio+KGZ1
bmN0aW9uKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKGN1YmljRnVuY3Rpb24tPngx
KCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoY3ViaWNGdW5jdGlvbi0+eTEoKSk7
Ci0gICAgICAgIGVuY29kZXItPmVuY29kZURvdWJsZShjdWJpY0Z1bmN0aW9uLT54MigpKTsKLSAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKGN1YmljRnVuY3Rpb24tPnkyKCkpOwotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlvbjog
ewotICAgICAgICBjb25zdCBXZWJDb3JlOjpTdGVwc1RpbWluZ0Z1bmN0aW9uKiBzdGVwc0Z1bmN0
aW9uID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6U3RlcHNUaW1pbmdGdW5jdGlvbio+KGZ1
bmN0aW9uKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlSW50MzIoc3RlcHNGdW5jdGlvbi0+bnVt
YmVyT2ZTdGVwcygpKTsKLSAgICAgICAgZW5jb2Rlci0+ZW5jb2RlQm9vbChzdGVwc0Z1bmN0aW9u
LT5zdGVwQXRTdGFydCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLX0KLQotYm9v
bCBBcmd1bWVudENvZGVyPFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gPjo6ZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiYgZnVuY3Rpb24pCi17Ci0g
ICAgVGltaW5nRnVuY3Rpb246OlRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBlOwotICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlRW51bSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6TGluZWFyRnVuY3Rpb246Ci0g
ICAgICAgIGZ1bmN0aW9uID0gTGluZWFyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIGNhc2UgVGltaW5nRnVuY3Rpb246OkN1YmljQmV6aWVyRnVu
Y3Rpb246IHsKLSAgICAgICAgZG91YmxlIHgxLCB5MSwgeDIsIHkyOwotICAgICAgICBpZiAoIWRl
Y29kZXItPmRlY29kZURvdWJsZSh4MSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRG91YmxlKHkxKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoeDIpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZURvdWJsZSh5Mikp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZ1bmN0aW9uID0gQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6U3RlcHNGdW5jdGlvbjog
ewotICAgICAgICBpbnQgbnVtU3RlcHM7Ci0gICAgICAgIGJvb2wgc3RlcEF0U3RhcnQ7Ci0gICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlSW50MzIobnVtU3RlcHMpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZUJvb2woc3RlcEF0U3RhcnQp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZ1bmN0aW9uID0gU3RlcHNU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKG51bVN0ZXBzLCBzdGVwQXRTdGFydCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLXZvaWQgZW5jb2RlT3BlcmF0aW9uKEFyZ3VtZW50RW5jb2Rlciog
ZW5jb2RlciwgY29uc3QgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4mIG9wZXJhdGlvbikKLXsK
LSAgICBBcmd1bWVudENvZGVyPFJlZlB0cjxUPiA+OjplbmNvZGUoZW5jb2Rlciwgc3RhdGljX2Nh
c3Q8Y29uc3QgVCo+KG9wZXJhdGlvbi5nZXQoKSkpOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8
UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5j
b2RlciwgY29uc3QgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4mIG9wZXJhdGlvbikKLXsKLSAg
ICAvLyBXZSBkb24ndCB3YW50IHRvIGVuY29kZSBudWxsLXJlZmVyZW5jZXMuCi0gICAgQVNTRVJU
KG9wZXJhdGlvbik7Ci0KLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKG9wZXJhdGlvbi0+Z2V0T3Bl
cmF0aW9uVHlwZSgpKTsKLSAgICBzd2l0Y2ggKG9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgp
KSB7Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOgotICAgIGNhc2UgVHJhbnNm
b3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FM
RV9ZOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgotICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAgICAgICAgZW5jb2RlT3BlcmF0aW9uPFNjYWxl
VHJhbnNmb3JtT3BlcmF0aW9uPihlbmNvZGVyLCBvcGVyYXRpb24pOwotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFOgotICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWDoKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6VFJBTlNMQVRFX1k6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9a
OgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfM0Q6Ci0gICAgICAgIGVu
Y29kZU9wZXJhdGlvbjxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KGVuY29kZXIsIG9wZXJh
dGlvbik7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpS
T1RBVEU6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgotICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6Uk9UQVRFXzNEOgotICAgICAgICBlbmNvZGVPcGVyYXRpb248Um90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uPihlbmNvZGVyLCBvcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNl
IFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFVzoKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6
U0tFV19YOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgIGVu
Y29kZU9wZXJhdGlvbjxTa2V3VHJhbnNmb3JtT3BlcmF0aW9uPihlbmNvZGVyLCBvcGVyYXRpb24p
OwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
OgotICAgICAgICBlbmNvZGVPcGVyYXRpb248TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPihlbmNv
ZGVyLCBvcGVyYXRpb24pOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9w
ZXJhdGlvbjo6TUFUUklYXzNEOgotICAgICAgICBlbmNvZGVPcGVyYXRpb248TWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb24+KGVuY29kZXIsIG9wZXJhdGlvbik7Ci0gICAgICAgIHJldHVybjsKLQot
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRToKLSAgICAgICAgZW5jb2Rl
T3BlcmF0aW9uPFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPihlbmNvZGVyLCBvcGVyYXRp
b24pOwotICAgICAgICByZXR1cm47Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6SURF
TlRJVFk6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok5PTkU6Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1ib29sIGRlY29kZU9wZXJhdGlv
bihBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+JiBv
cGVyYXRpb24pCi17Ci0gICAgUmVmUHRyPFQ+IG5ld09wZXJhdGlvbjsKLSAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShuZXdPcGVyYXRpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBv
cGVyYXRpb24gPSBuZXdPcGVyYXRpb247Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQXJn
dW1lbnRDb2RlcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjpkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQot
ewotICAgIFRyYW5zZm9ybU9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlOwotICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlRW51bSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFOgotICAg
IGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9YOgotICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpTQ0FMRV9ZOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV9aOgot
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTQ0FMRV8zRDoKLSAgICAgICAgcmV0dXJuIGRl
Y29kZU9wZXJhdGlvbjxTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbj4oZGVjb2Rlciwgb3BlcmF0aW9u
KTsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6Ci0gICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpUUkFOU0xBVEVfWToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRF
X1o6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKLSAgICAgICAg
cmV0dXJuIGRlY29kZU9wZXJhdGlvbjxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KGRlY29k
ZXIsIG9wZXJhdGlvbik7Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFOgot
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEVfWDoKLSAgICBjYXNlIFRyYW5zZm9y
bU9wZXJhdGlvbjo6Uk9UQVRFX1k6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFU
RV8zRDoKLSAgICAgICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxSb3RhdGVUcmFuc2Zvcm1PcGVy
YXRpb24+KGRlY29kZXIsIG9wZXJhdGlvbik7Ci0KLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlv
bjo6U0tFVzoKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0tFV19YOgotICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1k6Ci0gICAgICAgIHJldHVybiBkZWNvZGVPcGVyYXRp
b248U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4oZGVjb2Rlciwgb3BlcmF0aW9uKTsKLQotICAgIGNh
c2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6Ci0gICAgICAgIHJldHVybiBkZWNvZGVPcGVy
YXRpb248TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPihkZWNvZGVyLCBvcGVyYXRpb24pOwotCi0g
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8zRDoKLSAgICAgICAgcmV0dXJuIGRl
Y29kZU9wZXJhdGlvbjxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbj4oZGVjb2Rlciwgb3BlcmF0
aW9uKTsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpQRVJTUEVDVElWRToKLSAgICAg
ICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbj4o
ZGVjb2Rlciwgb3BlcmF0aW9uKTsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVO
VElUWToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgb3BlcmF0
aW9uID0gSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQXJndW1lbnRD
b2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rl
ciwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKLXsKLSAgICBWZWN0b3I8
UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPiBvcGVyYXRpb25zVmVjdG9yID0gb3BlcmF0aW9u
cy5vcGVyYXRpb25zKCk7Ci0gICAgaW50IHNpemUgPSBvcGVyYXRpb25zVmVjdG9yLnNpemUoKTsK
LSAgICBlbmNvZGVyLT5lbmNvZGVJbnQzMihzaXplKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHNpemU7ICsraSkKLSAgICAgICAgQXJndW1lbnRDb2RlcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0
aW9uPiA+OjplbmNvZGUoZW5jb2Rlciwgb3BlcmF0aW9uc1ZlY3RvcltpXSk7Ci19Ci0KLWJvb2wg
QXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1PcGVyYXRpb25zPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rl
ciogZGVjb2RlciwgVHJhbnNmb3JtT3BlcmF0aW9ucyYgb3BlcmF0aW9ucykKLXsKLSAgICBpbnQg
c2l6ZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZUludDMyKHNpemUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4gPiYgb3Bl
cmF0aW9uVmVjdG9yID0gb3BlcmF0aW9ucy5vcGVyYXRpb25zKCk7Ci0gICAgb3BlcmF0aW9uVmVj
dG9yLmNsZWFyKCk7Ci0gICAgb3BlcmF0aW9uVmVjdG9yLnJlc2l6ZShzaXplKTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBSZWZQdHI8VHJhbnNmb3JtT3Bl
cmF0aW9uPiBvcGVyYXRpb247Ci0gICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxSZWZQdHI8VHJh
bnNmb3JtT3BlcmF0aW9uPiA+OjpkZWNvZGUoZGVjb2Rlciwgb3BlcmF0aW9uKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgb3BlcmF0aW9uVmVjdG9yW2ldID0gb3BlcmF0aW9u
OwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
c3RhdGljIHZvaWQgZW5jb2RlQm9vbEFuZFZhbHVlKEFyZ3VtZW50RW5jb2RlciogZW5jb2Rlciwg
Ym9vbCBpc1NldCwgY29uc3QgVCYgdmFsdWUpCi17Ci0gICAgZW5jb2Rlci0+ZW5jb2RlQm9vbChp
c1NldCk7Ci0gICAgaWYgKGlzU2V0KQotICAgICAgICBlbmNvZGVyLT5lbmNvZGUodmFsdWUpOwot
fQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIHZvaWQgZW5jb2RlQm9vbEFuZEVudW1W
YWx1ZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGJvb2wgaXNTZXQsIFQgdmFsdWUpCi17Ci0g
ICAgZW5jb2Rlci0+ZW5jb2RlQm9vbChpc1NldCk7Ci0gICAgaWYgKGlzU2V0KQotICAgICAgICBl
bmNvZGVyLT5lbmNvZGVFbnVtKHZhbHVlKTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0
cjxBbmltYXRpb24+ID46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFJl
ZlB0cjxBbmltYXRpb24+JiBhbmltYXRpb24pCi17Ci0gICAgZW5jb2RlQm9vbEFuZFZhbHVlKGVu
Y29kZXIsIGFuaW1hdGlvbi0+aXNEZWxheVNldCgpLCBhbmltYXRpb24tPmRlbGF5KCkpOwotICAg
IGVuY29kZUJvb2xBbmRFbnVtVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLT5pc0RpcmVjdGlvblNl
dCgpLCBhbmltYXRpb24tPmRpcmVjdGlvbigpKTsKLSAgICBlbmNvZGVCb29sQW5kVmFsdWUoZW5j
b2RlciwgYW5pbWF0aW9uLT5pc0R1cmF0aW9uU2V0KCksIGFuaW1hdGlvbi0+ZHVyYXRpb24oKSk7
Ci0gICAgZW5jb2RlQm9vbEFuZFZhbHVlKGVuY29kZXIsIGFuaW1hdGlvbi0+aXNGaWxsTW9kZVNl
dCgpLCBhbmltYXRpb24tPmZpbGxNb2RlKCkpOwotICAgIGVuY29kZUJvb2xBbmRWYWx1ZShlbmNv
ZGVyLCBhbmltYXRpb24tPmlzSXRlcmF0aW9uQ291bnRTZXQoKSwgYW5pbWF0aW9uLT5pdGVyYXRp
b25Db3VudCgpKTsKLSAgICBlbmNvZGVCb29sQW5kVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLT5p
c05hbWVTZXQoKSwgYW5pbWF0aW9uLT5uYW1lKCkpOwotICAgIGVuY29kZUJvb2xBbmRFbnVtVmFs
dWUoZW5jb2RlciwgYW5pbWF0aW9uLT5pc1BsYXlTdGF0ZVNldCgpLCBhbmltYXRpb24tPnBsYXlT
dGF0ZSgpKTsKLSAgICBlbmNvZGVCb29sQW5kVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLT5pc1By
b3BlcnR5U2V0KCksIHN0YXRpY19jYXN0PGludD4oYW5pbWF0aW9uLT5wcm9wZXJ0eSgpKSk7Ci0g
ICAgZW5jb2RlQm9vbEFuZFZhbHVlPFJlZlB0cjxUaW1pbmdGdW5jdGlvbj4gPihlbmNvZGVyLCBh
bmltYXRpb24tPmlzVGltaW5nRnVuY3Rpb25TZXQoKSwgYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlv
bigpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGVCb29sKGFuaW1hdGlvbi0+aXNOb25lQW5pbWF0aW9u
KCkpOwotfQotCi0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgYm9vbCBkZWNvZGVCb29s
QW5kVmFsdWUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBib29sJiBpc1NldCwgVCYgdmFsdWUp
Ci17Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVCb29sKGlzU2V0KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghaXNTZXQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0
dXJuIGRlY29kZXItPmRlY29kZSh2YWx1ZSk7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1z
dGF0aWMgYm9vbCBkZWNvZGVCb29sQW5kRW51bVZhbHVlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rl
ciwgYm9vbCYgaXNTZXQsIFQmIHZhbHVlKQotewotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlQm9v
bChpc1NldCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWlzU2V0KQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBkZWNvZGVyLT5kZWNvZGVFbnVtKHZhbHVlKTsK
LX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxBbmltYXRpb24+ID46OmRlY29kZShBcmd1
bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxBbmltYXRpb24+JiBhbmltYXRpb24pCi17Ci0g
ICAgYm9vbCBpc0RlbGF5U2V0LCBpc0RpcmVjdGlvblNldCwgaXNEdXJhdGlvblNldCwgaXNGaWxs
TW9kZVNldCwgaXNJdGVyYXRpb25Db3VudFNldCwgaXNOYW1lU2V0LCBpc1BsYXlTdGF0ZVNldCwg
aXNQcm9wZXJ0eVNldCwgaXNUaW1pbmdGdW5jdGlvblNldDsKLSAgICBpbnQgcHJvcGVydHksIGl0
ZXJhdGlvbkNvdW50LCBmaWxsTW9kZTsKLSAgICBkb3VibGUgZHVyYXRpb247Ci0gICAgUmVmUHRy
PFRpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbjsKLSAgICBTdHJpbmcgbmFtZTsKLQotICAg
IGRvdWJsZSBkZWxheTsKLSAgICBpZiAoIWRlY29kZUJvb2xBbmRWYWx1ZShkZWNvZGVyLCBpc0Rl
bGF5U2V0LCBkZWxheSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEFuaW1hdGlvbjo6
QW5pbWF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0
aW9uTm9ybWFsOwotICAgIGlmICghZGVjb2RlQm9vbEFuZEVudW1WYWx1ZShkZWNvZGVyLCBpc0Rp
cmVjdGlvblNldCwgZGlyZWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgh
ZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzRHVyYXRpb25TZXQsIGR1cmF0aW9uKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIs
IGlzRmlsbE1vZGVTZXQsIGZpbGxNb2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlm
ICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzSXRlcmF0aW9uQ291bnRTZXQsIGl0ZXJh
dGlvbkNvdW50KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2RlQm9vbEFu
ZFZhbHVlKGRlY29kZXIsIGlzTmFtZVNldCwgbmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIEVBbmltUGxheVN0YXRlIHBsYXlTdGF0ZSA9IEFuaW1QbGF5U3RhdGVQbGF5aW5nOwot
ICAgIGlmICghZGVjb2RlQm9vbEFuZEVudW1WYWx1ZShkZWNvZGVyLCBpc1BsYXlTdGF0ZVNldCwg
cGxheVN0YXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2RlQm9vbEFu
ZFZhbHVlKGRlY29kZXIsIGlzUHJvcGVydHlTZXQsIHByb3BlcnR5KSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVlPFJlZlB0cjxUaW1pbmdGdW5jdGlv
bj4gPihkZWNvZGVyLCBpc1RpbWluZ0Z1bmN0aW9uU2V0LCB0aW1pbmdGdW5jdGlvbikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGFuaW1hdGlvbiA9IEFuaW1hdGlvbjo6Y3JlYXRlKCk7
Ci0gICAgYW5pbWF0aW9uLT5jbGVhckFsbCgpOwotCi0gICAgaWYgKGlzRGVsYXlTZXQpCi0gICAg
ICAgIGFuaW1hdGlvbi0+c2V0RGVsYXkoZGVsYXkpOwotICAgIGlmIChpc0RpcmVjdGlvblNldCkK
LSAgICAgICAgYW5pbWF0aW9uLT5zZXREaXJlY3Rpb24oZGlyZWN0aW9uKTsKLSAgICBpZiAoaXNE
dXJhdGlvblNldCkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXREdXJhdGlvbihkdXJhdGlvbik7Ci0g
ICAgaWYgKGlzRmlsbE1vZGVTZXQpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0RmlsbE1vZGUoZmls
bE1vZGUpOwotICAgIGlmIChpc0l0ZXJhdGlvbkNvdW50U2V0KQotICAgICAgICBhbmltYXRpb24t
PnNldEl0ZXJhdGlvbkNvdW50KGl0ZXJhdGlvbkNvdW50KTsKLSAgICBpZiAoaXNOYW1lU2V0KQot
ICAgICAgICBhbmltYXRpb24tPnNldE5hbWUobmFtZSk7Ci0gICAgaWYgKGlzUGxheVN0YXRlU2V0
KQotICAgICAgICBhbmltYXRpb24tPnNldFBsYXlTdGF0ZShwbGF5U3RhdGUpOwotICAgIGlmIChp
c1Byb3BlcnR5U2V0KQotICAgICAgICBhbmltYXRpb24tPnNldFByb3BlcnR5KHN0YXRpY19jYXN0
PENTU1Byb3BlcnR5SUQ+KHByb3BlcnR5KSk7Ci0gICAgaWYgKGlzVGltaW5nRnVuY3Rpb25TZXQp
Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24odGltaW5nRnVuY3Rpb24pOwot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxLZXlmcmFtZVZhbHVlTGlzdD46OmVuY29kZShBcmd1bWVu
dEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OktleWZyYW1lVmFsdWVMaXN0JiBrZXlm
cmFtZXMpCi17Ci0gICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKGtleWZyYW1lcy5zaXplKCkpOwot
ICAgIGVuY29kZXItPmVuY29kZUludDMyKGtleWZyYW1lcy5wcm9wZXJ0eSgpKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGtleWZyYW1lcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25z
dCBXZWJDb3JlOjpBbmltYXRpb25WYWx1ZSogdmFsdWUgPSBrZXlmcmFtZXMuYXQoaSk7Ci0gICAg
ICAgIGVuY29kZXItPmVuY29kZUZsb2F0KHZhbHVlLT5rZXlUaW1lKCkpOwotICAgICAgICBBcmd1
bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4gPjo6ZW5jb2RlKGVuY29k
ZXIsIHZhbHVlLT50aW1pbmdGdW5jdGlvbigpKTsKLSAgICAgICAgc3dpdGNoIChrZXlmcmFtZXMu
cHJvcGVydHkoKSkgewotICAgICAgICBjYXNlIFdlYkNvcmU6OkFuaW1hdGVkUHJvcGVydHlPcGFj
aXR5OiB7Ci0gICAgICAgICAgICBjb25zdCBXZWJDb3JlOjpGbG9hdEFuaW1hdGlvblZhbHVlKiBm
bG9hdFZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViQ29yZTo6RmxvYXRBbmltYXRpb25WYWx1
ZSo+KHZhbHVlKTsKLSAgICAgICAgICAgIGVuY29kZXItPmVuY29kZUZsb2F0KGZsb2F0VmFsdWUt
PnZhbHVlKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBX
ZWJDb3JlOjpBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3JtOiB7Ci0gICAgICAgICAgICBj
b25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSogdHJhbnNmb3JtVmFsdWUgPSBz
dGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZSo+KHZhbHVl
KTsKLSAgICAgICAgICAgIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9u
cz46OmVuY29kZShlbmNvZGVyLCAqdHJhbnNmb3JtVmFsdWUtPnZhbHVlKCkpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8S2V5ZnJhbWVWYWx1
ZUxpc3Q+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBXZWJDb3JlOjpLZXlmcmFt
ZVZhbHVlTGlzdCYga2V5ZnJhbWVzKQotewotICAgIHVpbnQzMl90IHNpemU7Ci0gICAgaW50MzJf
dCBwcm9wZXJ0eTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQzMihzaXplKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlSW50MzIocHJvcGVydHkp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBrZXlmcmFtZXMgPSBXZWJDb3JlOjpLZXlm
cmFtZVZhbHVlTGlzdChXZWJDb3JlOjpBbmltYXRlZFByb3BlcnR5SUQocHJvcGVydHkpKTsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGZsb2F0IGtl
eVRpbWU7Ci0gICAKLSAgICAgICAgUmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uPiB0aW1p
bmdGdW5jdGlvbjsKLSAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVGbG9hdChrZXlUaW1lKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFBcmd1bWVudENvZGVyPFJl
ZlB0cjxXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbj4gPjo6ZGVjb2RlKGRlY29kZXIsIHRpbWluZ0Z1
bmN0aW9uKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKHBy
b3BlcnR5KSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6
IHsKLSAgICAgICAgICAgIGZsb2F0IHZhbHVlOwotICAgICAgICAgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGVGbG9hdCh2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAga2V5ZnJhbWVzLmluc2VydChuZXcgV2ViQ29yZTo6RmxvYXRBbmltYXRpb25WYWx1ZShr
ZXlUaW1lLCB2YWx1ZSwgdGltaW5nRnVuY3Rpb24pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdFRyYW5z
Zm9ybTogewotICAgICAgICAgICAgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucyB2YWx1ZTsK
LSAgICAgICAgICAgIGlmICghQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRp
b25zPjo6ZGVjb2RlKGRlY29kZXIsIHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgICAgICBrZXlmcmFtZXMuaW5zZXJ0KG5ldyBXZWJDb3JlOjpUcmFuc2Zvcm1B
bmltYXRpb25WYWx1ZShrZXlUaW1lLCAmdmFsdWUsIHRpbWluZ0Z1bmN0aW9uKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotI2VuZGlmCi0K
LSNpZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQorI2lm
IEVOQUJMRShDU1NfRklMVEVSUykKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKIHRlbXBsYXRl
PD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpN
ZXNoQm94VHlwZT4gewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVB
cmd1bWVudENvZGVycy5oIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENv
ZGVycy5oCmluZGV4IGQwMmY1ZmMxN2M4ZDRjNTU4YzIzMmU2ZjQ2NTBiMjc5YTJkZjRmZjguLjRm
YTAzZGMxYzNmZGZiMTU3OTkxNjM0NWJlZGQ3NjYzZTZiN2IzZTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgKQEAgLTY2LDMxICs2NiwxOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFVT
RShVSV9TSURFX0NPTVBPU0lUSU5HKQogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIEFu
aW1hdGlvbjsKICAgICBjbGFzcyBGbG9hdFBvaW50M0Q7Ci0gICAgY2xhc3MgTWF0cml4M0RUcmFu
c2Zvcm1PcGVyYXRpb247Ci0gICAgY2xhc3MgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOwotICAg
IGNsYXNzIFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgIGNsYXNzIFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbjsKLSAgICBjbGFzcyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAg
ICBjbGFzcyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOwotICAgIGNsYXNzIFRpbWluZ0Z1bmN0aW9u
OwotICAgIGNsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICBjbGFzcyBUcmFuc2Zvcm1PcGVy
YXRpb25zOworICAgIGNsYXNzIExlbmd0aDsKICAgICBjbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJp
eDsKLSAgICBjbGFzcyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb247Ci0gICAgc3RydWN0IExl
bmd0aDsKLX0KLSNlbmRpZgotCi0jaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpICYmIEVOQUJM
RShDU1NfRklMVEVSUykKLW5hbWVzcGFjZSBXZWJDb3JlIHsKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRF
UlMpCiAgICAgY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKKyNlbmRpZgogfQogI2VuZGlmCiAKKwog
bmFtZXNwYWNlIENvcmVJUEMgewogCiB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdl
YkNvcmU6OkFmZmluZVRyYW5zZm9ybT4gewpAQCAtMjM0LDcgKzIyMSw3IEBAIHRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6S1VSTD4gewogICAgIHN0YXRpYyBib29sIGRl
Y29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpLVVJMJik7CiB9OwogCi0jaWYgUExBVEZP
Uk0oUVQpCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiB0ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQzRD4gewogICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50M0QmKTsKICAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmxvYXRQb2lu
dDNEJik7CkBAIC0yNTAsNzUgKzIzNywxMiBAQCB0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENv
ZGVyPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4PiB7CiAgICAgc3RhdGljIGJvb2wgZGVj
b2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiB9
OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVu
dEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qKTsKLSAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6Ok1h
dHJpeFRyYW5zZm9ybU9wZXJhdGlvbj4mKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3Vt
ZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uPiA+IHsK
LSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6
TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9u
PiYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29y
ZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewotICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpQZXJzcGVjdGl2ZVRyYW5zZm9y
bU9wZXJhdGlvbiopOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBS
ZWZQdHI8V2ViQ29yZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+Jik7Ci19OwotCi10
ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24+ID4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29k
ZXIqLCBjb25zdCBXZWJDb3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24qKTsKLSAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6OlJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbj4mKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29k
ZXI8UmVmUHRyPFdlYkNvcmU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPiA+IHsKLSAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6U2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb24qKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiwgUmVmUHRyPFdlYkNvcmU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPiYpOwotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6U2tld1RyYW5zZm9y
bU9wZXJhdGlvbj4gPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2Rlcios
IGNvbnN0IFdlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qKTsKLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6OlNrZXdUcmFuc2Zvcm1P
cGVyYXRpb24+Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJlZlB0
cjxXZWJDb3JlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewotICAgIHN0YXRpYyB2
b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24qKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiwgUmVmUHRyPFdlYkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4mKTsKLX07Ci0K
LXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1
bmN0aW9uPiA+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29u
c3QgUmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uPiYpOwotICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbiopOwot
ICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBSZWZQdHI8V2ViQ29yZTo6
VGltaW5nRnVuY3Rpb24+Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVy
PFJlZlB0cjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBSZWZQdHI8V2ViQ29yZTo6VHJhbnNmb3Jt
T3BlcmF0aW9uPiYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBS
ZWZQdHI8V2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uPiYpOwotfTsKLQotdGVtcGxhdGU8PiBz
dHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zPiB7Ci0gICAg
c3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OlRyYW5z
Zm9ybU9wZXJhdGlvbnMmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiwgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucyYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1
Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6QW5pbWF0aW9uPiA+IHsKLSAgICBzdGF0
aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OkFu
aW1hdGlvbj4mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmVm
UHRyPFdlYkNvcmU6OkFuaW1hdGlvbj4mKTsKLX07Ci0jZW5kaWYKLQotI2lmIFVTRShVSV9TSURF
X0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjaWYgRU5BQkxFKENTU19GSUxU
RVJTKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpGaWx0ZXJPcGVy
YXRpb25zPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0
IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwogfTsKICNlbmRpZgot
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJn
dW1lbnRDb2RlcjxXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdD4gewotICAgIHN0YXRpYyB2b2lk
IGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlz
dCYga2V5ZnJhbWVzKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwg
V2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyk7Ci19OwogI2VuZGlmCiAKIH0g
Ly8gbmFtZXNwYWNlIENvcmVJUEMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144291</attachid>
            <date>2012-05-28 00:34:06 -0700</date>
            <delta_ts>2012-05-28 10:48:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87435-20120528003403.patch</filename>
            <type>text/plain</type>
            <size>27603</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4NjQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOWM4ZWZhODllYmI5YWE5
ZGFiNTI3NTU0NWYwY2RjZGExM2YyYThhOS4uNjAzMzBlZjQyNjJiNzVlNzYwNDQ0ZTdlNjBiN2Q0
NzJlY2M2NTA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA1LTI4ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtLnJvc2VudGhhbEBub2tpYS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IHVudXNlZCBhcmd1bWVudCBjb2RlcnMgZm9yIGFuaW1hdGlvbgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc0MzUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBMZWZ0IHRoZSB1c2VkIGFyZ3VtZW50IGNvZGVy
cyBvbmx5LCBiZWhpbmQgYSBwcm9wZXIgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpIGZsYWcuCisK
KyAgICAgICAgKiBTaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcDoKKyAgICAgICAgKENv
cmVJUEMpOgorICAgICAgICAqIFNoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaDoKKwogMjAx
Mi0wNS0yNiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdl
YktpdCBzaG91bGQgYmUgbGF6eS1maW5hbGl6YXRpb24tc2FmZSAoZXNwLiB0aGUgRE9NKSB2Mgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAppbmRl
eCA4MDQ1NjhjMmQ0MzliYTFlNGU5OWE5ZjZkZDRkZTNmNzk2MmNkMzA3Li4zY2I1N2IwMTMzMmRm
ZDlkMWNhMzQ0MWZkNmVkNTNiODgyZTZjNzVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmNwcApAQCAtNDUsMjUgKzQ1LDE1IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9XaW5kb3dGZWF0dXJlcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hh
c2guaD4KIAotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKQog
I2luY2x1ZGUgPFdlYkNvcmUvQW5pbWF0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBv
aW50M0QuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0lkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmg+
Ci0jaW5jbHVkZSA8V2ViQ29yZS9NYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1
ZGUgPFdlYkNvcmUvTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29y
ZS9QZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TY2FsZVRyYW5zZm9y
bU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU2tld1RyYW5zZm9ybU9wZXJhdGlvbi5o
PgotI2luY2x1ZGUgPFdlYkNvcmUvVGltaW5nRnVuY3Rpb24uaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L1RyYW5zZm9ybU9wZXJhdGlvbi5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNmb3JtT3BlcmF0
aW9ucy5oPgotI2luY2x1ZGUgPFdlYkNvcmUvVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmg+
Ci0jZW5kaWYKKyNpbmNsdWRlIDxXZWJDb3JlL1RyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CiAKLSNp
ZiBVU0UoVUlfU0lERV9DT01QT1NJVElORykgJiYgRU5BQkxFKENTU19GSUxURVJTKQorI2lmIEVO
QUJMRShDU1NfRklMVEVSUykKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbHRlck9wZXJhdGlvbnMuaD4K
ICNlbmRpZgorI2VuZGlmCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKQEAgLTY0Miw4ICs2MzIsNyBAQCBib29sIEFyZ3VtZW50Q29kZXI8S1VSTD46
OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIEtVUkwmIHJlc3VsdCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotI2lmIFBMQVRGT1JNKFFUKQotCisjaWYgVVNFKFVJX1NJREVfQ09NUE9T
SVRJTkcpCiB2b2lkIEFyZ3VtZW50Q29kZXI8RmxvYXRQb2ludDNEPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgRmxvYXRQb2ludDNEJiBmbG9hdFBvaW50M0QpCiB7CiAg
ICAgU2ltcGxlQXJndW1lbnRDb2RlcjxGbG9hdFBvaW50M0Q+OjplbmNvZGUoZW5jb2RlciwgZmxv
YXRQb2ludDNEKTsKQEAgLTY1NCw3ICs2NDMsNiBAQCBib29sIEFyZ3VtZW50Q29kZXI8RmxvYXRQ
b2ludDNEPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgRmxvYXRQb2ludDNEJgog
ICAgIHJldHVybiBTaW1wbGVBcmd1bWVudENvZGVyPEZsb2F0UG9pbnQzRD46OmRlY29kZShkZWNv
ZGVyLCBmbG9hdFBvaW50M0QpOwogfQogCi0KIHZvaWQgQXJndW1lbnRDb2RlcjxMZW5ndGg+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBMZW5ndGgmIGxlbmd0aCkKIHsK
ICAgICBTaW1wbGVBcmd1bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBsZW5ndGgp
OwpAQCAtNjc1LDU3NyArNjYzLDcgQEAgYm9vbCBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9u
TWF0cml4Pjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgVHJhbnMKICAgICByZXR1
cm4gU2ltcGxlQXJndW1lbnRDb2RlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD46OmRlY29kZShkZWNv
ZGVyLCB0cmFuc2Zvcm1hdGlvbk1hdHJpeCk7CiB9CiAKLQotdm9pZCBBcmd1bWVudENvZGVyPFJl
ZlB0cjxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+ID46OmVuY29kZShBcmd1bWVudEVuY29kZXIq
IGVuY29kZXIsIGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uKQotewot
ICAgIEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg+OjplbmNvZGUo
ZW5jb2Rlciwgb3BlcmF0aW9uLT5tYXRyaXgoKSk7Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxS
ZWZQdHI8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVy
KiBkZWNvZGVyLCBSZWZQdHI8TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQot
ewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICBpZiAoIUFyZ3VtZW50Q29k
ZXI8V2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXg+OjpkZWNvZGUoZGVjb2RlciwgbWF0cml4
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgb3BlcmF0aW9uID0gTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9p
ZCBBcmd1bWVudENvZGVyPFJlZlB0cjxNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZW5j
b2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgTWF0cml4M0RUcmFuc2Zvcm1PcGVy
YXRpb24qIG9wZXJhdGlvbikKLXsKLSAgICBBcmd1bWVudENvZGVyPFRyYW5zZm9ybWF0aW9uTWF0
cml4Pjo6ZW5jb2RlKGVuY29kZXIsIG9wZXJhdGlvbi0+bWF0cml4KCkpOwotfQotCi1ib29sIEFy
Z3VtZW50Q29kZXI8UmVmUHRyPE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uPiA+OjpkZWNvZGUo
QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZWZQdHI8TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRp
b24+JiBvcGVyYXRpb24pCi17Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0g
ICAgaWYgKCFBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Pjo6ZGVj
b2RlKGRlY29kZXIsIG1hdHJpeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG9wZXJh
dGlvbiA9IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUobWF0cml4KTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxQZXJzcGVjdGl2ZVRy
YW5zZm9ybU9wZXJhdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29u
c3QgUGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbikKLXsKLSAgICBBcmd1
bWVudENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBvcGVyYXRpb24tPnBlcnNwZWN0aXZl
KCkpOwotfQotCi1ib29sIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFBlcnNwZWN0aXZlVHJhbnNmb3Jt
T3BlcmF0aW9uPiA+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZWZQdHI8UGVy
c3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+JiBvcGVyYXRpb24pCi17Ci0gICAgTGVuZ3RoIHBl
cnNwZWN0aXZlOwotICAgIGlmICghQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVjb2Rl
ciwgcGVyc3BlY3RpdmUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBvcGVyYXRpb24g
PSBQZXJzcGVjdGl2ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHBlcnNwZWN0aXZlKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVyPFJlZlB0cjxSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24+ID46OmVuY29kZShBcmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0
IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uKQotewotICAgIGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtT3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVuY29k
ZXItPmVuY29kZUVudW0odHJhbnNmb3JtT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpOwot
ICAgIGVuY29kZXItPmVuY29kZShvcGVyYXRpb24tPngoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2Rl
KG9wZXJhdGlvbi0+eSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT56KCkpOwot
ICAgIGVuY29kZXItPmVuY29kZShvcGVyYXRpb24tPmFuZ2xlKCkpOwotfQotCi1ib29sIEFyZ3Vt
ZW50Q29kZXI8UmVmUHRyPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZGVjb2RlKEFyZ3Vt
ZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4mIG9w
ZXJhdGlvbikKLXsKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgb3BlcmF0
aW9uVHlwZTsKLSAgICBkb3VibGUgeDsKLSAgICBkb3VibGUgeTsKLSAgICBkb3VibGUgejsKLSAg
ICBkb3VibGUgYW5nbGU7Ci0KLSAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0ob3BlcmF0aW9u
VHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZSh4
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHkpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoeikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZShhbmdsZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIG9wZXJhdGlvbiA9IFJvdGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjo6Y3JlYXRlKHgsIHksIHosIGFuZ2xlLCBvcGVyYXRpb25UeXBlKTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFNjYWxlVHJhbnNmb3JtT3Bl
cmF0aW9uPiA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBTY2FsZVRy
YW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9uKQotewotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbiogdHJhbnNmb3JtT3BlcmF0aW9uID0gb3BlcmF0aW9uOwotICAgIGVuY29kZXItPmVuY29k
ZUVudW0odHJhbnNmb3JtT3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpOwotICAgIGVuY29k
ZXItPmVuY29kZShvcGVyYXRpb24tPngoKSk7Ci0gICAgZW5jb2Rlci0+ZW5jb2RlKG9wZXJhdGlv
bi0+eSgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT56KCkpOwotfQotCi1ib29s
IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPiA+OjpkZWNvZGUo
QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBSZWZQdHI8U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24+
JiBvcGVyYXRpb24pCi17Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvblR5cGU7Ci0gICAgZG91YmxlIHg7Ci0gICAgZG91YmxlIHk7Ci0gICAgZG91YmxlIHo7
Ci0KLSAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0ob3BlcmF0aW9uVHlwZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBpZiAoIWRlY29kZXItPmRlY29kZSh4KSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHkpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoeikpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIG9wZXJhdGlvbiA9IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOjpjcmVhdGUoeCwg
eSwgeiwgb3BlcmF0aW9uVHlwZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQXJndW1l
bnRDb2RlcjxSZWZQdHI8U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogb3BlcmF0aW9u
KQotewotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNmb3JtT3BlcmF0aW9uID0g
b3BlcmF0aW9uOwotICAgIGVuY29kZXItPmVuY29kZUVudW0odHJhbnNmb3JtT3BlcmF0aW9uLT5n
ZXRPcGVyYXRpb25UeXBlKCkpOwotICAgIGVuY29kZXItPmVuY29kZShvcGVyYXRpb24tPmFuZ2xl
WCgpKTsKLSAgICBlbmNvZGVyLT5lbmNvZGUob3BlcmF0aW9uLT5hbmdsZVkoKSk7Ci19Ci0KLWJv
b2wgQXJndW1lbnRDb2RlcjxSZWZQdHI8U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4gPjo6ZGVjb2Rl
KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+
JiBvcGVyYXRpb24pCi17Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIG9w
ZXJhdGlvblR5cGU7Ci0gICAgZG91YmxlIGFuZ2xlWDsKLSAgICBkb3VibGUgYW5nbGVZOwotCi0g
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVFbnVtKG9wZXJhdGlvblR5cGUpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoYW5nbGVYKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGFuZ2xlWSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG9wZXJhdGlvbiA9IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246OmNy
ZWF0ZShhbmdsZVgsIGFuZ2xlWSwgb3BlcmF0aW9uVHlwZSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQdHI8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
PiA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24qIG9wZXJhdGlvbikKLXsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b24qIHRyYW5zZm9ybU9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICBlbmNvZGVyLT5lbmNvZGVF
bnVtKHRyYW5zZm9ybU9wZXJhdGlvbi0+Z2V0T3BlcmF0aW9uVHlwZSgpKTsKLSAgICBBcmd1bWVu
dENvZGVyPExlbmd0aD46OmVuY29kZShlbmNvZGVyLCBvcGVyYXRpb24tPngoKSk7Ci0gICAgQXJn
dW1lbnRDb2RlcjxMZW5ndGg+OjplbmNvZGUoZW5jb2Rlciwgb3BlcmF0aW9uLT55KCkpOwotICAg
IEFyZ3VtZW50Q29kZXI8TGVuZ3RoPjo6ZW5jb2RlKGVuY29kZXIsIG9wZXJhdGlvbi0+eigpKTsK
LX0KLQotYm9vbCBBcmd1bWVudENvZGVyPFJlZlB0cjxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24+ID46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0cjxUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24+JiBvcGVyYXRpb24pCi17Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9u
OjpPcGVyYXRpb25UeXBlIG9wZXJhdGlvblR5cGU7Ci0gICAgTGVuZ3RoIHg7Ci0gICAgTGVuZ3Ro
IHk7Ci0gICAgTGVuZ3RoIHo7Ci0KLSAgICBpZiAoIWRlY29kZXItPmRlY29kZUVudW0ob3BlcmF0
aW9uVHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoIUFyZ3VtZW50Q29kZXI8
TGVuZ3RoPjo6ZGVjb2RlKGRlY29kZXIsIHgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKCFBcmd1bWVudENvZGVyPExlbmd0aD46OmRlY29kZShkZWNvZGVyLCB5KSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmICghQXJndW1lbnRDb2RlcjxMZW5ndGg+OjpkZWNvZGUoZGVj
b2RlciwgeikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG9wZXJhdGlvbiA9IFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKHgsIHksIHosIG9wZXJhdGlvblR5cGUpOwot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFRpbWluZ0Z1
bmN0aW9uPiA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBSZWZQdHI8
VGltaW5nRnVuY3Rpb24+JiBmdW5jdGlvbikKLXsKLSAgICBlbmNvZGUoZW5jb2RlciwgZnVuY3Rp
b24uZ2V0KCkpOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPFRpbWluZ0Z1bmN0aW9u
PiA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpUaW1p
bmdGdW5jdGlvbiogZnVuY3Rpb24pCi17Ci0gICAgaWYgKCFmdW5jdGlvbikgewotICAgICAgICBl
bmNvZGVyLT5lbmNvZGVFbnVtKFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlv
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyLT5lbmNvZGVFbnVtKGZ1
bmN0aW9uLT50eXBlKCkpOwotICAgIHN3aXRjaCAoZnVuY3Rpb24tPnR5cGUoKSkgewotICAgIGNh
c2UgVGltaW5nRnVuY3Rpb246OkxpbmVhckZ1bmN0aW9uOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFRpbWluZ0Z1bmN0aW9uOjpDdWJpY0JlemllckZ1bmN0aW9uOiB7Ci0gICAgICAgIGNvbnN0
IFdlYkNvcmU6OkN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24qIGN1YmljRnVuY3Rpb24gPSBzdGF0
aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uKj4oZnVuY3Rp
b24pOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoY3ViaWNGdW5jdGlvbi0+eDEoKSk7
Ci0gICAgICAgIGVuY29kZXItPmVuY29kZURvdWJsZShjdWJpY0Z1bmN0aW9uLT55MSgpKTsKLSAg
ICAgICAgZW5jb2Rlci0+ZW5jb2RlRG91YmxlKGN1YmljRnVuY3Rpb24tPngyKCkpOwotICAgICAg
ICBlbmNvZGVyLT5lbmNvZGVEb3VibGUoY3ViaWNGdW5jdGlvbi0+eTIoKSk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0aW9uOiB7Ci0g
ICAgICAgIGNvbnN0IFdlYkNvcmU6OlN0ZXBzVGltaW5nRnVuY3Rpb24qIHN0ZXBzRnVuY3Rpb24g
PSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpTdGVwc1RpbWluZ0Z1bmN0aW9uKj4oZnVuY3Rp
b24pOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGVJbnQzMihzdGVwc0Z1bmN0aW9uLT5udW1iZXJP
ZlN0ZXBzKCkpOwotICAgICAgICBlbmNvZGVyLT5lbmNvZGVCb29sKHN0ZXBzRnVuY3Rpb24tPnN0
ZXBBdFN0YXJ0KCkpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQotfQotCi1ib29sIEFy
Z3VtZW50Q29kZXI8UmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiA+OjpkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiBkZWNvZGVyLCBSZWZQdHI8VGltaW5nRnVuY3Rpb24+JiBmdW5jdGlvbikKLXsKLSAgICBU
aW1pbmdGdW5jdGlvbjo6VGltaW5nRnVuY3Rpb25UeXBlIHR5cGU7Ci0gICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGVFbnVtKHR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpMaW5lYXJGdW5jdGlvbjoKLSAgICAg
ICAgZnVuY3Rpb24gPSBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgY2FzZSBUaW1pbmdGdW5jdGlvbjo6Q3ViaWNCZXppZXJGdW5jdGlv
bjogewotICAgICAgICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7Ci0gICAgICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlRG91YmxlKHgxKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGVEb3VibGUoeTEpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZURvdWJsZSh4MikpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlRG91YmxlKHkyKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgZnVuY3Rpb24gPSBDdWJpY0JlemllclRp
bWluZ0Z1bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpOwotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBjYXNlIFRpbWluZ0Z1bmN0aW9uOjpTdGVwc0Z1bmN0aW9uOiB7Ci0g
ICAgICAgIGludCBudW1TdGVwczsKLSAgICAgICAgYm9vbCBzdGVwQXRTdGFydDsKLSAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGVJbnQzMihudW1TdGVwcykpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlQm9vbChzdGVwQXRTdGFydCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZnVuY3Rpb24gPSBTdGVwc1RpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUobnVtU3RlcHMsIHN0ZXBBdFN0YXJ0KTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotdm9pZCBlbmNvZGVPcGVyYXRpb24oQXJndW1lbnRFbmNvZGVyKiBlbmNv
ZGVyLCBjb25zdCBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQotewotICAg
IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFQ+ID46OmVuY29kZShlbmNvZGVyLCBzdGF0aWNfY2FzdDxj
b25zdCBUKj4ob3BlcmF0aW9uLmdldCgpKSk7Ci19Ci0KLXZvaWQgQXJndW1lbnRDb2RlcjxSZWZQ
dHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVy
LCBjb25zdCBSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiYgb3BlcmF0aW9uKQotewotICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gZW5jb2RlIG51bGwtcmVmZXJlbmNlcy4KLSAgICBBU1NFUlQob3Bl
cmF0aW9uKTsKLQotICAgIGVuY29kZXItPmVuY29kZUVudW0ob3BlcmF0aW9uLT5nZXRPcGVyYXRp
b25UeXBlKCkpOwotICAgIHN3aXRjaCAob3BlcmF0aW9uLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsK
LSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6Ci0gICAgY2FzZSBUcmFuc2Zvcm1P
cGVyYXRpb246OlNDQUxFX1g6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1k6
Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6Ci0gICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlNDQUxFXzNEOgotICAgICAgICBlbmNvZGVPcGVyYXRpb248U2NhbGVUcmFu
c2Zvcm1PcGVyYXRpb24+KGVuY29kZXIsIG9wZXJhdGlvbik7Ci0gICAgICAgIHJldHVybjsKLQot
ICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEU6Ci0gICAgY2FzZSBUcmFuc2Zv
cm1PcGVyYXRpb246OlRSQU5TTEFURV9YOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpU
UkFOU0xBVEVfWToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1o6Ci0g
ICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURV8zRDoKLSAgICAgICAgZW5jb2Rl
T3BlcmF0aW9uPFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4oZW5jb2Rlciwgb3BlcmF0aW9u
KTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFU
RToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFX1g6Ci0gICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlJPVEFURV9ZOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpS
T1RBVEVfM0Q6Ci0gICAgICAgIGVuY29kZU9wZXJhdGlvbjxSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b24+KGVuY29kZXIsIG9wZXJhdGlvbik7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgVHJh
bnNmb3JtT3BlcmF0aW9uOjpTS0VXOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VX
X1g6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNLRVdfWToKLSAgICAgICAgZW5jb2Rl
T3BlcmF0aW9uPFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24+KGVuY29kZXIsIG9wZXJhdGlvbik7Ci0g
ICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6Ci0g
ICAgICAgIGVuY29kZU9wZXJhdGlvbjxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+KGVuY29kZXIs
IG9wZXJhdGlvbik7Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0
aW9uOjpNQVRSSVhfM0Q6Ci0gICAgICAgIGVuY29kZU9wZXJhdGlvbjxNYXRyaXgzRFRyYW5zZm9y
bU9wZXJhdGlvbj4oZW5jb2Rlciwgb3BlcmF0aW9uKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOgotICAgICAgICBlbmNvZGVPcGVy
YXRpb248UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+KGVuY29kZXIsIG9wZXJhdGlvbik7
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpJREVOVElU
WToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Tk9ORToKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWJvb2wgZGVjb2RlT3BlcmF0aW9uKEFy
Z3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4mIG9wZXJh
dGlvbikKLXsKLSAgICBSZWZQdHI8VD4gbmV3T3BlcmF0aW9uOwotICAgIGlmICghZGVjb2Rlci0+
ZGVjb2RlKG5ld09wZXJhdGlvbikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIG9wZXJh
dGlvbiA9IG5ld09wZXJhdGlvbjsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBBcmd1bWVu
dENvZGVyPFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+ID46OmRlY29kZShBcmd1bWVudERlY29k
ZXIqIGRlY29kZXIsIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+JiBvcGVyYXRpb24pCi17Ci0g
ICAgVHJhbnNmb3JtT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGU7Ci0gICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGVFbnVtKHR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6U0NBTEU6Ci0gICAgY2Fz
ZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1g6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRp
b246OlNDQUxFX1k6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFX1o6Ci0gICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlNDQUxFXzNEOgotICAgICAgICByZXR1cm4gZGVjb2Rl
T3BlcmF0aW9uPFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPihkZWNvZGVyLCBvcGVyYXRpb24pOwot
Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlRSQU5TTEFURToKLSAgICBjYXNlIFRyYW5z
Zm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFX1g6Ci0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246
OlRSQU5TTEFURV9ZOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpUUkFOU0xBVEVfWjoK
LSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6VFJBTlNMQVRFXzNEOgotICAgICAgICByZXR1
cm4gZGVjb2RlT3BlcmF0aW9uPFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4oZGVjb2Rlciwg
b3BlcmF0aW9uKTsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEU6Ci0gICAg
Y2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURV9YOgotICAgIGNhc2UgVHJhbnNmb3JtT3Bl
cmF0aW9uOjpST1RBVEVfWToKLSAgICBjYXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFXzNE
OgotICAgICAgICByZXR1cm4gZGVjb2RlT3BlcmF0aW9uPFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bj4oZGVjb2Rlciwgb3BlcmF0aW9uKTsKLQotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpT
S0VXOgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpTS0VXX1g6Ci0gICAgY2FzZSBUcmFu
c2Zvcm1PcGVyYXRpb246OlNLRVdfWToKLSAgICAgICAgcmV0dXJuIGRlY29kZU9wZXJhdGlvbjxT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uPihkZWNvZGVyLCBvcGVyYXRpb24pOwotCi0gICAgY2FzZSBU
cmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWDoKLSAgICAgICAgcmV0dXJuIGRlY29kZU9wZXJhdGlv
bjxNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+KGRlY29kZXIsIG9wZXJhdGlvbik7Ci0KLSAgICBj
YXNlIFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklYXzNEOgotICAgICAgICByZXR1cm4gZGVjb2Rl
T3BlcmF0aW9uPE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uPihkZWNvZGVyLCBvcGVyYXRpb24p
OwotCi0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OlBFUlNQRUNUSVZFOgotICAgICAgICBy
ZXR1cm4gZGVjb2RlT3BlcmF0aW9uPFBlcnNwZWN0aXZlVHJhbnNmb3JtT3BlcmF0aW9uPihkZWNv
ZGVyLCBvcGVyYXRpb24pOwotCi0gICAgY2FzZSBUcmFuc2Zvcm1PcGVyYXRpb246OklERU5USVRZ
OgotICAgIGNhc2UgVHJhbnNmb3JtT3BlcmF0aW9uOjpOT05FOgotICAgICAgICBvcGVyYXRpb24g
PSBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBBcmd1bWVudENvZGVy
PFRyYW5zZm9ybU9wZXJhdGlvbnM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvcGVyYXRpb25zKQotewotICAgIFZlY3RvcjxSZWZQ
dHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+IG9wZXJhdGlvbnNWZWN0b3IgPSBvcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKTsKLSAgICBpbnQgc2l6ZSA9IG9wZXJhdGlvbnNWZWN0b3Iuc2l6ZSgpOwotICAg
IGVuY29kZXItPmVuY29kZUludDMyKHNpemUpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQotICAgICAgICBBcmd1bWVudENvZGVyPFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+
ID46OmVuY29kZShlbmNvZGVyLCBvcGVyYXRpb25zVmVjdG9yW2ldKTsKLX0KLQotYm9vbCBBcmd1
bWVudENvZGVyPFRyYW5zZm9ybU9wZXJhdGlvbnM+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBk
ZWNvZGVyLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvcGVyYXRpb25zKQotewotICAgIGludCBzaXpl
OwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlSW50MzIoc2l6ZSkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIFZlY3RvcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPiA+JiBvcGVyYXRp
b25WZWN0b3IgPSBvcGVyYXRpb25zLm9wZXJhdGlvbnMoKTsKLSAgICBvcGVyYXRpb25WZWN0b3Iu
Y2xlYXIoKTsKLSAgICBvcGVyYXRpb25WZWN0b3IucmVzaXplKHNpemUpOwotICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRp
b24+IG9wZXJhdGlvbjsKLSAgICAgICAgaWYgKCFBcmd1bWVudENvZGVyPFJlZlB0cjxUcmFuc2Zv
cm1PcGVyYXRpb24+ID46OmRlY29kZShkZWNvZGVyLCBvcGVyYXRpb24pKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBvcGVyYXRpb25WZWN0b3JbaV0gPSBvcGVyYXRpb247Ci0g
ICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0
aWMgdm9pZCBlbmNvZGVCb29sQW5kVmFsdWUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBib29s
IGlzU2V0LCBjb25zdCBUJiB2YWx1ZSkKLXsKLSAgICBlbmNvZGVyLT5lbmNvZGVCb29sKGlzU2V0
KTsKLSAgICBpZiAoaXNTZXQpCi0gICAgICAgIGVuY29kZXItPmVuY29kZSh2YWx1ZSk7Ci19Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0aWMgdm9pZCBlbmNvZGVCb29sQW5kRW51bVZhbHVl
KEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgYm9vbCBpc1NldCwgVCB2YWx1ZSkKLXsKLSAgICBl
bmNvZGVyLT5lbmNvZGVCb29sKGlzU2V0KTsKLSAgICBpZiAoaXNTZXQpCi0gICAgICAgIGVuY29k
ZXItPmVuY29kZUVudW0odmFsdWUpOwotfQotCi12b2lkIEFyZ3VtZW50Q29kZXI8UmVmUHRyPEFu
aW1hdGlvbj4gPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgUmVmUHRy
PEFuaW1hdGlvbj4mIGFuaW1hdGlvbikKLXsKLSAgICBlbmNvZGVCb29sQW5kVmFsdWUoZW5jb2Rl
ciwgYW5pbWF0aW9uLT5pc0RlbGF5U2V0KCksIGFuaW1hdGlvbi0+ZGVsYXkoKSk7Ci0gICAgZW5j
b2RlQm9vbEFuZEVudW1WYWx1ZShlbmNvZGVyLCBhbmltYXRpb24tPmlzRGlyZWN0aW9uU2V0KCks
IGFuaW1hdGlvbi0+ZGlyZWN0aW9uKCkpOwotICAgIGVuY29kZUJvb2xBbmRWYWx1ZShlbmNvZGVy
LCBhbmltYXRpb24tPmlzRHVyYXRpb25TZXQoKSwgYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAg
ICBlbmNvZGVCb29sQW5kVmFsdWUoZW5jb2RlciwgYW5pbWF0aW9uLT5pc0ZpbGxNb2RlU2V0KCks
IGFuaW1hdGlvbi0+ZmlsbE1vZGUoKSk7Ci0gICAgZW5jb2RlQm9vbEFuZFZhbHVlKGVuY29kZXIs
IGFuaW1hdGlvbi0+aXNJdGVyYXRpb25Db3VudFNldCgpLCBhbmltYXRpb24tPml0ZXJhdGlvbkNv
dW50KCkpOwotICAgIGVuY29kZUJvb2xBbmRWYWx1ZShlbmNvZGVyLCBhbmltYXRpb24tPmlzTmFt
ZVNldCgpLCBhbmltYXRpb24tPm5hbWUoKSk7Ci0gICAgZW5jb2RlQm9vbEFuZEVudW1WYWx1ZShl
bmNvZGVyLCBhbmltYXRpb24tPmlzUGxheVN0YXRlU2V0KCksIGFuaW1hdGlvbi0+cGxheVN0YXRl
KCkpOwotICAgIGVuY29kZUJvb2xBbmRWYWx1ZShlbmNvZGVyLCBhbmltYXRpb24tPmlzUHJvcGVy
dHlTZXQoKSwgc3RhdGljX2Nhc3Q8aW50PihhbmltYXRpb24tPnByb3BlcnR5KCkpKTsKLSAgICBl
bmNvZGVCb29sQW5kVmFsdWU8UmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiA+KGVuY29kZXIsIGFuaW1h
dGlvbi0+aXNUaW1pbmdGdW5jdGlvblNldCgpLCBhbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkp
OwotICAgIGVuY29kZXItPmVuY29kZUJvb2woYW5pbWF0aW9uLT5pc05vbmVBbmltYXRpb24oKSk7
Ci19Ci0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBib29sIGRlY29kZUJvb2xBbmRW
YWx1ZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIGJvb2wmIGlzU2V0LCBUJiB2YWx1ZSkKLXsK
LSAgICBpZiAoIWRlY29kZXItPmRlY29kZUJvb2woaXNTZXQpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFpc1NldCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4g
ZGVjb2Rlci0+ZGVjb2RlKHZhbHVlKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRp
YyBib29sIGRlY29kZUJvb2xBbmRFbnVtVmFsdWUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBi
b29sJiBpc1NldCwgVCYgdmFsdWUpCi17Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVCb29sKGlz
U2V0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghaXNTZXQpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGRlY29kZXItPmRlY29kZUVudW0odmFsdWUpOwotfQot
Ci1ib29sIEFyZ3VtZW50Q29kZXI8UmVmUHRyPEFuaW1hdGlvbj4gPjo6ZGVjb2RlKEFyZ3VtZW50
RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPEFuaW1hdGlvbj4mIGFuaW1hdGlvbikKLXsKLSAgICBi
b29sIGlzRGVsYXlTZXQsIGlzRGlyZWN0aW9uU2V0LCBpc0R1cmF0aW9uU2V0LCBpc0ZpbGxNb2Rl
U2V0LCBpc0l0ZXJhdGlvbkNvdW50U2V0LCBpc05hbWVTZXQsIGlzUGxheVN0YXRlU2V0LCBpc1By
b3BlcnR5U2V0LCBpc1RpbWluZ0Z1bmN0aW9uU2V0OwotICAgIGludCBwcm9wZXJ0eSwgaXRlcmF0
aW9uQ291bnQsIGZpbGxNb2RlOwotICAgIGRvdWJsZSBkdXJhdGlvbjsKLSAgICBSZWZQdHI8VGlt
aW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uOwotICAgIFN0cmluZyBuYW1lOwotCi0gICAgZG91
YmxlIGRlbGF5OwotICAgIGlmICghZGVjb2RlQm9vbEFuZFZhbHVlKGRlY29kZXIsIGlzRGVsYXlT
ZXQsIGRlbGF5KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgQW5pbWF0aW9uOjpBbmlt
YXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uID0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25O
b3JtYWw7Ci0gICAgaWYgKCFkZWNvZGVCb29sQW5kRW51bVZhbHVlKGRlY29kZXIsIGlzRGlyZWN0
aW9uU2V0LCBkaXJlY3Rpb24pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNv
ZGVCb29sQW5kVmFsdWUoZGVjb2RlciwgaXNEdXJhdGlvblNldCwgZHVyYXRpb24pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVCb29sQW5kVmFsdWUoZGVjb2RlciwgaXNG
aWxsTW9kZVNldCwgZmlsbE1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFk
ZWNvZGVCb29sQW5kVmFsdWUoZGVjb2RlciwgaXNJdGVyYXRpb25Db3VudFNldCwgaXRlcmF0aW9u
Q291bnQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVCb29sQW5kVmFs
dWUoZGVjb2RlciwgaXNOYW1lU2V0LCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgRUFuaW1QbGF5U3RhdGUgcGxheVN0YXRlID0gQW5pbVBsYXlTdGF0ZVBsYXlpbmc7Ci0gICAg
aWYgKCFkZWNvZGVCb29sQW5kRW51bVZhbHVlKGRlY29kZXIsIGlzUGxheVN0YXRlU2V0LCBwbGF5
U3RhdGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVCb29sQW5kVmFs
dWUoZGVjb2RlciwgaXNQcm9wZXJ0eVNldCwgcHJvcGVydHkpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCFkZWNvZGVCb29sQW5kVmFsdWU8UmVmUHRyPFRpbWluZ0Z1bmN0aW9uPiA+
KGRlY29kZXIsIGlzVGltaW5nRnVuY3Rpb25TZXQsIHRpbWluZ0Z1bmN0aW9uKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYW5pbWF0aW9uID0gQW5pbWF0aW9uOjpjcmVhdGUoKTsKLSAg
ICBhbmltYXRpb24tPmNsZWFyQWxsKCk7Ci0KLSAgICBpZiAoaXNEZWxheVNldCkKLSAgICAgICAg
YW5pbWF0aW9uLT5zZXREZWxheShkZWxheSk7Ci0gICAgaWYgKGlzRGlyZWN0aW9uU2V0KQotICAg
ICAgICBhbmltYXRpb24tPnNldERpcmVjdGlvbihkaXJlY3Rpb24pOwotICAgIGlmIChpc0R1cmF0
aW9uU2V0KQotICAgICAgICBhbmltYXRpb24tPnNldER1cmF0aW9uKGR1cmF0aW9uKTsKLSAgICBp
ZiAoaXNGaWxsTW9kZVNldCkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRGaWxsTW9kZShmaWxsTW9k
ZSk7Ci0gICAgaWYgKGlzSXRlcmF0aW9uQ291bnRTZXQpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0
SXRlcmF0aW9uQ291bnQoaXRlcmF0aW9uQ291bnQpOwotICAgIGlmIChpc05hbWVTZXQpCi0gICAg
ICAgIGFuaW1hdGlvbi0+c2V0TmFtZShuYW1lKTsKLSAgICBpZiAoaXNQbGF5U3RhdGVTZXQpCi0g
ICAgICAgIGFuaW1hdGlvbi0+c2V0UGxheVN0YXRlKHBsYXlTdGF0ZSk7Ci0gICAgaWYgKGlzUHJv
cGVydHlTZXQpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0UHJvcGVydHkoc3RhdGljX2Nhc3Q8Q1NT
UHJvcGVydHlJRD4ocHJvcGVydHkpKTsKLSAgICBpZiAoaXNUaW1pbmdGdW5jdGlvblNldCkKLSAg
ICAgICAgYW5pbWF0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbih0aW1pbmdGdW5jdGlvbik7Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLQot
dm9pZCBBcmd1bWVudENvZGVyPEtleWZyYW1lVmFsdWVMaXN0Pjo6ZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciogZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1l
cykKLXsKLSAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIoa2V5ZnJhbWVzLnNpemUoKSk7Ci0gICAg
ZW5jb2Rlci0+ZW5jb2RlSW50MzIoa2V5ZnJhbWVzLnByb3BlcnR5KCkpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwga2V5ZnJhbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdl
YkNvcmU6OkFuaW1hdGlvblZhbHVlKiB2YWx1ZSA9IGtleWZyYW1lcy5hdChpKTsKLSAgICAgICAg
ZW5jb2Rlci0+ZW5jb2RlRmxvYXQodmFsdWUtPmtleVRpbWUoKSk7Ci0gICAgICAgIEFyZ3VtZW50
Q29kZXI8UmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uPiA+OjplbmNvZGUoZW5jb2Rlciwg
dmFsdWUtPnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgICAgICBzd2l0Y2ggKGtleWZyYW1lcy5wcm9w
ZXJ0eSgpKSB7Ci0gICAgICAgIGNhc2UgV2ViQ29yZTo6QW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHk6
IHsKLSAgICAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkZsb2F0QW5pbWF0aW9uVmFsdWUqIGZsb2F0
VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBXZWJDb3JlOjpGbG9hdEFuaW1hdGlvblZhbHVlKj4o
dmFsdWUpOwotICAgICAgICAgICAgZW5jb2Rlci0+ZW5jb2RlRmxvYXQoZmxvYXRWYWx1ZS0+dmFs
dWUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFdlYkNv
cmU6OkFuaW1hdGVkUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKLSAgICAgICAgICAgIGNvbnN0
IFdlYkNvcmU6OlRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKiB0cmFuc2Zvcm1WYWx1ZSA9IHN0YXRp
Y19jYXN0PGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybUFuaW1hdGlvblZhbHVlKj4odmFsdWUpOwot
ICAgICAgICAgICAgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zPjo6
ZW5jb2RlKGVuY29kZXIsICp0cmFuc2Zvcm1WYWx1ZS0+dmFsdWUoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgQXJndW1lbnRDb2RlcjxLZXlmcmFtZVZhbHVlTGlz
dD46OmRlY29kZShBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFdlYkNvcmU6OktleWZyYW1lVmFs
dWVMaXN0JiBrZXlmcmFtZXMpCi17Ci0gICAgdWludDMyX3Qgc2l6ZTsKLSAgICBpbnQzMl90IHBy
b3BlcnR5OwotICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDMyKHNpemUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVJbnQzMihwcm9wZXJ0eSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGtleWZyYW1lcyA9IFdlYkNvcmU6OktleWZyYW1l
VmFsdWVMaXN0KFdlYkNvcmU6OkFuaW1hdGVkUHJvcGVydHlJRChwcm9wZXJ0eSkpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgZmxvYXQga2V5VGlt
ZTsKLSAgIAotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1
bmN0aW9uOwotICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZUZsb2F0KGtleVRpbWUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIUFyZ3VtZW50Q29kZXI8UmVmUHRy
PFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uPiA+OjpkZWNvZGUoZGVjb2RlciwgdGltaW5nRnVuY3Rp
b24pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHN3aXRjaCAocHJvcGVy
dHkpIHsKLSAgICAgICAgY2FzZSBXZWJDb3JlOjpBbmltYXRlZFByb3BlcnR5T3BhY2l0eTogewot
ICAgICAgICAgICAgZmxvYXQgdmFsdWU7Ci0gICAgICAgICAgICBpZiAoIWRlY29kZXItPmRlY29k
ZUZsb2F0KHZhbHVlKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBrZXlmcmFtZXMuaW5zZXJ0KG5ldyBXZWJDb3JlOjpGbG9hdEFuaW1hdGlvblZhbHVlKGtleVRp
bWUsIHZhbHVlLCB0aW1pbmdGdW5jdGlvbikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBXZWJDb3JlOjpBbmltYXRlZFByb3BlcnR5V2Via2l0VHJhbnNmb3Jt
OiB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb25zIHZhbHVlOwotICAg
ICAgICAgICAgaWYgKCFBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnM+
OjpkZWNvZGUoZGVjb2RlciwgdmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGtleWZyYW1lcy5pbnNlcnQobmV3IFdlYkNvcmU6OlRyYW5zZm9ybUFuaW1h
dGlvblZhbHVlKGtleVRpbWUsICZ2YWx1ZSwgdGltaW5nRnVuY3Rpb24pKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi0jZW5kaWYKLQotI2lm
IFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQogdm9pZCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZpbHRlck9wZXJh
dGlvbnM+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpG
aWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogewogICAgIGVuY29kZXItPmVuY29kZVVJbnQzMihm
aWx0ZXJzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvV2ViQ29yZUFyZ3VtZW50
Q29kZXJzLmgKaW5kZXggZDAyZjVmYzE3YzhkNGM1NThjMjMyZTZmNDY1MGIyNzlhMmRmNGZmOC4u
MjY5NzQwOGVkNTZlZDZkMTM2M2Y4NDNhNjIwNGZiOTc0MGM2OTI4NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL1dlYkNvcmVBcmd1bWVudENvZGVycy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9XZWJDb3JlQXJndW1lbnRDb2RlcnMuaApAQCAtMjM0LDcgKzIzNCw3IEBA
IHRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6S1VSTD4gewogICAgIHN0
YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3JlOjpLVVJMJik7CiB9Owog
Ci0jaWYgUExBVEZPUk0oUVQpCisjaWYgVVNFKFVJX1NJREVfQ09NUE9TSVRJTkcpCiB0ZW1wbGF0
ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkZsb2F0UG9pbnQzRD4gewogICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFBv
aW50M0QmKTsKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29y
ZTo6RmxvYXRQb2ludDNEJik7CkBAIC0yNTAsNzcgKzI1MCwxNSBAQCB0ZW1wbGF0ZTw+IHN0cnVj
dCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4PiB7CiAgICAgc3Rh
dGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2RlciosIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9u
TWF0cml4Jik7CiB9OwogCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJlZlB0cjxX
ZWJDb3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewotICAgIHN0YXRpYyB2b2lkIGVu
Y29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24qKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmVmUHRy
PFdlYkNvcmU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbj4mKTsKLX07Ci0KLXRlbXBsYXRlPD4g
c3RydWN0IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6Ok1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uPiA+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29u
c3QgV2ViQ29yZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24qKTsKLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6Ok1hdHJpeDNEVHJhbnNm
b3JtT3BlcmF0aW9uPiYpOwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxS
ZWZQdHI8V2ViQ29yZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpQZXJzcGVj
dGl2ZVRyYW5zZm9ybU9wZXJhdGlvbiopOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVu
dERlY29kZXIqLCBSZWZQdHI8V2ViQ29yZTo6UGVyc3BlY3RpdmVUcmFuc2Zvcm1PcGVyYXRpb24+
Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3Jl
OjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShB
cmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24q
KTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNv
cmU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4mKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0
IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNvcmU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPiA+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29y
ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uPiYp
OwotfTsKLQotdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6
U2tld1RyYW5zZm9ybU9wZXJhdGlvbj4gPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3Vt
ZW50RW5jb2RlciosIGNvbnN0IFdlYkNvcmU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qKTsKLSAg
ICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6OlNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24+Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVu
dENvZGVyPFJlZlB0cjxXZWJDb3JlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewot
ICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bj4mKTsKLX07Ci0KLXRlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8UmVmUHRyPFdlYkNv
cmU6OlRpbWluZ0Z1bmN0aW9uPiA+IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRF
bmNvZGVyKiwgY29uc3QgUmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uPiYpOwotICAgIHN0
YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpUaW1pbmdG
dW5jdGlvbiopOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBSZWZQ
dHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+Jik7Ci19OwotCi10ZW1wbGF0ZTw+IHN0cnVjdCBB
cmd1bWVudENvZGVyPFJlZlB0cjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRpb24+ID4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBSZWZQdHI8V2ViQ29y
ZTo6VHJhbnNmb3JtT3BlcmF0aW9uPiYpOwotICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVu
dERlY29kZXIqLCBSZWZQdHI8V2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9uPiYpOwotfTsKLQot
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpUcmFuc2Zvcm1PcGVyYXRp
b25zPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybU9wZXJhdGlvbnMmKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJn
dW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6VHJhbnNmb3JtT3BlcmF0aW9ucyYpOwotfTsKLQotdGVt
cGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxSZWZQdHI8V2ViQ29yZTo6QW5pbWF0aW9uPiA+
IHsKLSAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgUmVmUHRy
PFdlYkNvcmU6OkFuaW1hdGlvbj4mKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnRE
ZWNvZGVyKiwgUmVmUHRyPFdlYkNvcmU6OkFuaW1hdGlvbj4mKTsKLX07Ci0jZW5kaWYKLQotI2lm
IFVTRShVSV9TSURFX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisjaWYgRU5B
QkxFKENTU19GSUxURVJTKQogdGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3Jl
OjpGaWx0ZXJPcGVyYXRpb25zPiB7CiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5j
b2RlciosIGNvbnN0IFdlYkNvcmU6OkZpbHRlck9wZXJhdGlvbnMmKTsKICAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2ViQ29yZTo6RmlsdGVyT3BlcmF0aW9ucyYpOwog
fTsKICNlbmRpZgotCi0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQotdGVtcGxhdGU8
PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpLZXlmcmFtZVZhbHVlTGlzdD4gewotICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpLZXlm
cmFtZVZhbHVlTGlzdCYga2V5ZnJhbWVzKTsKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1l
bnREZWNvZGVyKiwgV2ViQ29yZTo6S2V5ZnJhbWVWYWx1ZUxpc3QmIGtleWZyYW1lcyk7Ci19Owog
I2VuZGlmCiAKKwogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQwogCiAjZW5kaWYgLy8gV2ViQ29yZUFy
Z3VtZW50Q29kZXJzX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>