<?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>154510</bug_id>
          
          <creation_ts>2016-02-21 00:20:26 -0800</creation_ts>
          <short_desc>bmalloc: Don&apos;t use a whole page for metadata</short_desc>
          <delta_ts>2016-02-21 10:43:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit 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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>barraclough</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1166817</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-21 00:20:26 -0800</bug_when>
    <thetext>bmalloc: Don&apos;t use a whole page for metadata</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166819</commentid>
    <comment_count>1</comment_count>
      <attachid>271878</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-21 00:41:24 -0800</bug_when>
    <thetext>Created attachment 271878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166820</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-21 00:42:47 -0800</bug_when>
    <thetext>Perf numbers on Mac:

                                                      Baseline                          Patch                              Δ
Execution Time:
    churn                                                 80ms                           77ms                 ^ 1.04x faster
    list_allocate                                         77ms                           77ms                               
    tree_allocate                                         83ms                           83ms                               
    tree_churn                                            87ms                           86ms                 ^ 1.01x faster
    fragment                                              94ms                           96ms                 ! 1.02x slower
    fragment_iterate                                      65ms                           63ms                 ^ 1.03x faster
    medium                                               208ms                          206ms                 ^ 1.01x faster
    big                                                  157ms                          163ms                 ! 1.04x slower
    facebook                                             421ms                          419ms                  ^ 1.0x faster
    reddit                                                92ms                           91ms                 ^ 1.01x faster
    flickr                                                98ms                           98ms                               
    theverge                                             117ms                          116ms                 ^ 1.01x faster
    message_one                                          220ms                          219ms                  ^ 1.0x faster
    message_many                                         119ms                          119ms                               
    churn --parallel                                      39ms                           38ms                 ^ 1.03x faster
    list_allocate --parallel                              70ms                           76ms                 ! 1.09x slower
    tree_allocate --parallel                              84ms                           87ms                 ! 1.04x slower
    tree_churn --parallel                                 85ms                           85ms                               
    fragment --parallel                                   51ms                           53ms                 ! 1.04x slower
    fragment_iterate --parallel                           32ms                           32ms                               
    medium --parallel                                    197ms                          196ms                 ^ 1.01x faster
    big --parallel                                       135ms                          134ms                 ^ 1.01x faster

    &lt;geometric mean&gt;                                      99ms                          100ms                  ! 1.0x slower
    &lt;arithmetic mean&gt;                                    119ms                          119ms                  ! 1.0x slower
    &lt;harmonic mean&gt;                                       85ms                           85ms                  ! 1.0x slower

Peak Memory:
    churn                                                812kB                          800kB                ^ 1.01x smaller
    list_allocate                                      2,096kB                        2,096kB                               
    tree_allocate                                      5,504kB                        5,484kB                 ^ 1.0x smaller
    tree_churn                                         4,804kB                        4,792kB                 ^ 1.0x smaller
    fragment                                           7,020kB                        6,988kB                 ^ 1.0x smaller
    fragment_iterate                                  25,704kB                       25,580kB                 ^ 1.0x smaller
    medium                                         1,070,440kB                    1,068,404kB                 ^ 1.0x smaller
    big                                            1,062,472kB                    1,060,444kB                 ^ 1.0x smaller
    facebook                                          74,444kB                       73,896kB                ^ 1.01x smaller
    reddit                                            13,840kB                       13,844kB                  ! 1.0x bigger
    flickr                                            25,788kB                       25,788kB                               
    theverge                                          27,004kB                       26,928kB                 ^ 1.0x smaller
    message_one                                        4,524kB                        4,696kB                 ! 1.04x bigger
    message_many                                       4,928kB                        4,936kB                  ! 1.0x bigger
    churn --parallel                                     944kB                          944kB                               
    list_allocate --parallel                           2,224kB                        2,212kB                ^ 1.01x smaller
    tree_allocate --parallel                           3,328kB                        3,372kB                 ! 1.01x bigger
    tree_churn --parallel                              3,024kB                        3,012kB                 ^ 1.0x smaller
    fragment --parallel                                7,172kB                        7,140kB                 ^ 1.0x smaller
    fragment_iterate --parallel                       25,872kB                       25,688kB                ^ 1.01x smaller
    medium --parallel                              1,067,448kB                    1,066,516kB                 ^ 1.0x smaller
    big --parallel                                 1,058,608kB                    1,057,128kB                 ^ 1.0x smaller

    &lt;geometric mean&gt;                                  16,554kB                       16,542kB                 ^ 1.0x smaller
    &lt;arithmetic mean&gt;                                204,455kB                      204,122kB                 ^ 1.0x smaller
    &lt;harmonic mean&gt;                                    4,241kB                        4,231kB                 ^ 1.0x smaller

Memory at End:
    churn                                                412kB                          396kB                ^ 1.04x smaller
    list_allocate                                        412kB                          408kB                ^ 1.01x smaller
    tree_allocate                                        484kB                          468kB                ^ 1.03x smaller
    tree_churn                                           464kB                          452kB                ^ 1.03x smaller
    fragment                                             476kB                          456kB                ^ 1.04x smaller
    fragment_iterate                                     716kB                          660kB                ^ 1.08x smaller
    medium                                             6,652kB                        4,612kB                ^ 1.44x smaller
    big                                                6,628kB                        4,596kB                ^ 1.44x smaller
    facebook                                           3,520kB                        3,312kB                ^ 1.06x smaller
    reddit                                             2,200kB                        2,228kB                 ! 1.01x bigger
    flickr                                             3,204kB                        3,232kB                 ! 1.01x bigger
    theverge                                           3,264kB                        3,244kB                ^ 1.01x smaller
    message_one                                          692kB                          680kB                ^ 1.02x smaller
    message_many                                       1,080kB                        1,220kB                 ! 1.13x bigger
    churn --parallel                                     544kB                          540kB                ^ 1.01x smaller
    list_allocate --parallel                             592kB                          608kB                 ! 1.03x bigger
    tree_allocate --parallel                             716kB                          716kB                               
    tree_churn --parallel                              1,192kB                        1,144kB                ^ 1.04x smaller
    fragment --parallel                                1,316kB                        1,300kB                ^ 1.01x smaller
    fragment_iterate --parallel                          948kB                          828kB                ^ 1.14x smaller
    medium --parallel                                  6,776kB                        4,740kB                ^ 1.43x smaller
    big --parallel                                     6,744kB                        4,740kB                ^ 1.42x smaller

    &lt;geometric mean&gt;                                   1,331kB                        1,228kB                ^ 1.08x smaller
    &lt;arithmetic mean&gt;                                  2,229kB                        1,845kB                ^ 1.21x smaller
    &lt;harmonic mean&gt;                                      899kB                          870kB                ^ 1.03x smaller</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166824</commentid>
    <comment_count>3</comment_count>
      <attachid>271878</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-02-21 03:48:36 -0800</bug_when>
    <thetext>Comment on attachment 271878
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166844</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-02-21 10:43:17 -0800</bug_when>
    <thetext>Committed r196873: &lt;http://trac.webkit.org/changeset/196873&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271878</attachid>
            <date>2016-02-21 00:41:24 -0800</date>
            <delta_ts>2016-02-21 03:48:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-154510-20160221004105.patch</filename>
            <type>text/plain</type>
            <size>23068</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5Njg3MSkKKysrIFNvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc2IEBACisyMDE2LTAyLTIxICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgYm1hbGxvYzogRG9uJ3QgdXNl
IGEgd2hvbGUgcGFnZSBmb3IgbWV0YWRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1NDUxMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICgxKSBEb24ndCByb3VuZCB1cCBtZXRhZGF0YSB0byBhIHBhZ2Ug
Ym91bmRhcnkuIFRoaXMgc2F2ZXMgMS41JSBkaXJ0eQorICAgICAgICBtZW1vcnkgb24gaU9TIGFu
ZCAwLjIlIG9uIE1hYy4gSXQgYWxzbyBlbmFibGVzIGEgZnV0dXJlIHBhdGNoIHRvIGFsbG9jYXRl
CisgICAgICAgIHNtYWxsZXIgY2h1bmtzIHdpdGhvdXQgd2FzdGluZyBtZW1vcnkuCisKKyAgICAg
ICAgKDIpIEluaXRpYWxpemUgbWV0YWRhdGEgbGF6aWx5LiBUaGlzIHNhdmVzIGRpcnR5IG1lbW9y
eSB3aGVuIHRoZSBwcm9ncmFtCisgICAgICAgIGFsbG9jYXRlcyBwcmltYXJpbHkgc21hbGwgb3Ig
bGFyZ2Ugb2JqZWN0cyAoYnV0IG5vdCBib3RoKSwgbGVhdmluZyBzb21lCisgICAgICAgIG1ldGFk
YXRhIHVuaW5pdGlhbGl6ZWQuCisKKyAgICAgICAgKiBibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6IE1lZGl1bSBvYmplY3RzIGFyZSBnb25lIG5vdy4KKworICAgICAgICAqIGJtYWxs
b2MvQnVtcEFsbG9jYXRvci5oOgorICAgICAgICAoYm1hbGxvYzo6QnVtcEFsbG9jYXRvcjo6cmVm
aWxsKTogQWRkZWQgYW4gQVNTRVJUIHRvIGhlbHAgZGVidWcgYSBidWcKKyAgICAgICAgSSBjYXVz
ZSB3aGlsZSB3b3JraW5nIG9uIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBibWFsbG9jL0hlYXAu
Y3BwOgorICAgICAgICAoYm1hbGxvYzo6SGVhcDo6YWxsb2NhdGVTbWFsbEJ1bXBSYW5nZXMpOiBE
aXR0by4KKworICAgICAgICAoYm1hbGxvYzo6SGVhcDo6c3BsaXRBbmRBbGxvY2F0ZSk6CisgICAg
ICAgIChibWFsbG9jOjpIZWFwOjphbGxvY2F0ZUxhcmdlKTogVXBkYXRlZCBmb3IgaW50ZXJmYWNl
IGNoYW5nZS4KKworICAgICAgICAqIGJtYWxsb2MvTGFyZ2VDaHVuay5oOiBDaGFuZ2VkIHRoZSBi
b3VuZGFyeVRhZ0NvdW50IGNhbGN1bGF0aW9uIHRvCisgICAgICAgIGEgc3RhdGljX2Fzc2VydC4K
KworICAgICAgICBEb24ndCByb3VuZCB1cCB0byBwYWdlIGJvdW5kYXJ5LiAoU2VlIGFib3ZlLikK
KworICAgICAgICAoYm1hbGxvYzo6TGFyZ2VDaHVuazo6TGFyZ2VDaHVuayk6IE1vdmVkIGNvZGUg
aGVyZSBmcm9tIExhcmdlQ2h1bms6OmluaXQuCisgICAgICAgIEEgY29uc3RydWN0b3IgaXMgYSBt
b3JlIG5hdHVyYWwgLyBhdXRvbWF0aWMgd2F5IHRvIGRvIHRoaXMgaW5pdGlhbGl6YXRpb24uCisK
KyAgICAgICAgKiBibWFsbG9jL0xhcmdlT2JqZWN0Lmg6CisgICAgICAgIChibWFsbG9jOjpMYXJn
ZU9iamVjdDo6aW5pdCk6IERlbGV0ZWQuIE1vdmVkIHRvIExhcmdlQ2h1bmsuCisKKyAgICAgICAg
KiBibWFsbG9jL1NpemVzLmg6IENoYWduZWQgbGFyZ2VDaHVua01ldGFkYXRhU2l6ZSB0byBhIHNp
bXBsZXIgY29uc3RhbnQKKyAgICAgICAgYmVjYXVzZSBtZXRhZGF0YSBzaXplIG5vIGxvbmdlciB2
YXJpZXMgYnkgcGFnZSBzaXplLgorCisgICAgICAgICogYm1hbGxvYy9TbWFsbENodW5rLmg6Cisg
ICAgICAgIChibWFsbG9jOjpTbWFsbENodW5rOjpiZWdpbik6CisgICAgICAgIChibWFsbG9jOjpT
bWFsbENodW5rOjplbmQpOgorICAgICAgICAoYm1hbGxvYzo6U21hbGxDaHVuazo6bGluZXMpOgor
ICAgICAgICAoYm1hbGxvYzo6U21hbGxDaHVuazo6cGFnZXMpOiBVc2Ugc3RkOjphcnJheSB0byBt
YWtlIGJlZ2luL2VuZAorICAgICAgICBjYWxjdWxhdGlvbnMgZWFzaWVyLgorCisgICAgICAgIChi
bWFsbG9jOjpTbWFsbENodW5rOjpTbWFsbENodW5rKTogVHJlYXQgb3VyIG1ldGFkYXRhIGxpa2Ug
YSBzZXJpZXMKKyAgICAgICAgb2YgYWxsb2NhdGVkIG9iamVjdHMuIFdlIHVzZWQgdG8gYXZvaWQg
dHJhbXBsaW5nIG91ciBtZXRhZGF0YSBieQorICAgICAgICBzdGFydGluZyBvYmplY3QgbWVtb3J5
IGF0IHRoZSBuZXh0IHBhZ2UuIE5vdyB3ZSBzaGFyZSB0aGUgZmlyc3QgcGFnZQorICAgICAgICBi
ZXR3ZWVuIG1ldGFkYXRhIGFuZCBvYmplY3RzLCBhbmQgd2UgYWNjb3VudCBmb3IgbWV0YWRhdGEg
ZXhwbGljaXRseS4KKworICAgICAgICAqIGJtYWxsb2MvU3VwZXJDaHVuay5oOgorICAgICAgICAo
Ym1hbGxvYzo6U3VwZXJDaHVuazo6U3VwZXJDaHVuayk6CisgICAgICAgIChibWFsbG9jOjpTdXBl
ckNodW5rOjpzbWFsbENodW5rKToKKyAgICAgICAgKGJtYWxsb2M6OlN1cGVyQ2h1bms6Omxhcmdl
Q2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6U3VwZXJDaHVuazo6Y3JlYXRlKTogRGVsZXRlZC4g
RG9uJ3QgZWFnZXJseSBydW4gdGhlIFNtYWxsQ2h1bmsKKyAgICAgICAgYW5kIExhcmdlQ2h1bmsg
Y29uc3RydWN0b3JzLiBXZSdsbCBydW4gdGhlbSBsYXppbHkgYXMgbmVlZGVkLgorCisgICAgICAg
ICogYm1hbGxvYy9WTUhlYXAuY3BwOgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjpWTUhlYXAp
OgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmspOgorICAgICAg
ICAoYm1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0ZUxhcmdlQ2h1bmspOgorICAgICAgICAoYm1hbGxv
Yzo6Vk1IZWFwOjphbGxvY2F0ZVN1cGVyQ2h1bmspOgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFw
Ojpncm93KTogRGVsZXRlZC4gVHJhY2sgc21hbGwgYW5kIGxhcmdlIGNodW5rcyBleHBsaWNpdGx5
CisgICAgICAgIHNvIHdlIGNhbiBpbml0aWFsaXplIHRoZW0gbGF6aWx5LgorCisgICAgICAgICog
Ym1hbGxvYy9WTUhlYXAuaDoKKyAgICAgICAgKGJtYWxsb2M6OlZNSGVhcDo6YWxsb2NhdGVTbWFs
bFBhZ2UpOgorICAgICAgICAoYm1hbGxvYzo6Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KTog
U3BlY2lmeSB3aGV0aGVyIHdlJ3JlIGFsbG9jYXRpbmcKKyAgICAgICAgYSBzbWFsbCBvciBsYXJn
ZSBjaHVuayBzaW5jZSB3ZSBkb24ndCBhbGxvY2F0ZSBib3RoIGF0IG9uY2UgYW55bW9yZS4KKwog
MjAxNi0wMi0yMCAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVXNl
IG9mIGlubGluZWQgYXNtIHN0YXRlbWVudHMgY2F1c2VzIHByb2JsZW1zIGZvciAtc3RkPWM5OSBi
dWlsZHMuCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTY4NDcpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9j
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUs
NyBAQAogCQkJCTE0NDhDMkZEMThGMzc1MkIwMDUwMjgzOSAvKiBhcGkgKi8sCiAJCQkJMTREOURC
NEQxN0YyODY1QzAwRUFBQjc5IC8qIGNhY2hlICovLAogCQkJCTE0N0FBQTlDMThDRTYwMTAwMDIy
MDFFNCAvKiBoZWFwOiBsYXJnZSAqLywKLQkJCQkxNDdBQUE5QTE4Q0U1RkQzMDAyMjAxRTQgLyog
aGVhcDogc21hbGwgfCBtZWRpdW0gKi8sCisJCQkJMTQ3QUFBOUExOENFNUZEMzAwMjIwMUU0IC8q
IGhlYXA6IHNtYWxsICovLAogCQkJCTE0RDlEQjRFMTdGMjg2NkUwMEVBQUI3OSAvKiBoZWFwICov
LAogCQkJCTE0RDlEQjRGMTdGMjg2ODkwMEVBQUI3OSAvKiBzdGRsaWIgKi8sCiAJCQkJMTRCNjUw
QzQxOEYzOUY0ODAwNzUxOTY4IC8qIENvbmZpZ3VyYXRpb25zICovLApAQCAtMTgyLDE0ICsxODIs
MTQgQEAKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07Ci0JCTE0N0FBQTlBMThDRTVGRDMwMDIyMDFFNCAvKiBoZWFwOiBzbWFsbCB8IG1lZGl1bSAq
LyA9IHsKKwkJMTQ3QUFBOUExOENFNUZEMzAwMjIwMUU0IC8qIGhlYXA6IHNtYWxsICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkxNDdBQUE4QzE4Q0QzNkE3
MDAyMjAxRTQgLyogU21hbGxDaHVuay5oICovLAogCQkJCTE0NTI0Nzg2MThCQzc1N0MwMEY4MDA5
OCAvKiBTbWFsbExpbmUuaCAqLywKIAkJCQkxNDNFMjlFRDE4Q0FFOTA1MDBGRThBMEYgLyogU21h
bGxQYWdlLmggKi8sCiAJCQkpOwotCQkJbmFtZSA9ICJoZWFwOiBzbWFsbCB8IG1lZGl1bSI7CisJ
CQluYW1lID0gImhlYXA6IHNtYWxsIjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07
CiAJCTE0N0FBQTlDMThDRTYwMTAwMDIyMDFFNCAvKiBoZWFwOiBsYXJnZSAqLyA9IHsKSW5kZXg6
IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQnVtcEFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9ibWFsbG9jL2JtYWxsb2MvQnVtcEFsbG9jYXRvci5oCShyZXZpc2lvbiAxOTY4NDYpCisr
KyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0J1bXBBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtOTksNiArOTksNyBAQCBpbmxpbmUgdm9pZCBCdW1wQWxsb2NhdG9yOjpyZWZpbGwoY29uc3Qg
CiAgICAgQkFTU0VSVCghY2FuQWxsb2NhdGUoKSk7CiAgICAgbV9wdHIgPSBidW1wUmFuZ2UuYmVn
aW47CiAgICAgbV9yZW1haW5pbmcgPSBidW1wUmFuZ2Uub2JqZWN0Q291bnQ7CisgICAgQkFTU0VS
VChjYW5BbGxvY2F0ZSgpKTsKIH0KIAogaW5saW5lIHZvaWQgQnVtcEFsbG9jYXRvcjo6Y2xlYXIo
KQpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCShyZXZpc2lvbiAxOTY4NDcpCisrKyBTb3Vy
Y2UvYm1hbGxvYy9ibWFsbG9jL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1
LDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzdGQ6OgogICAgICAgICAv
LyBJbiBhIGZyYWdtZW50ZWQgcGFnZSwgc29tZSBmcmVlIHJhbmdlcyBtaWdodCBub3QgZml0IGlu
IHRoZSBjYWNoZS4KICAgICAgICAgaWYgKHJhbmdlQ2FjaGUuc2l6ZSgpID09IHJhbmdlQ2FjaGUu
Y2FwYWNpdHkoKSkgewogICAgICAgICAgICAgbV9zbWFsbFBhZ2VzV2l0aEZyZWVMaW5lc1tzaXpl
Q2xhc3NdLnB1c2gocGFnZSk7CisgICAgICAgICAgICBCQVNTRVJUKGFsbG9jYXRvci5jYW5BbGxv
Y2F0ZSgpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC0xNTMsNiArMTU0
LDcgQEAgdm9pZCBIZWFwOjphbGxvY2F0ZVNtYWxsQnVtcFJhbmdlcyhzdGQ6OgogICAgICAgICAg
ICAgcmFuZ2VDYWNoZS5wdXNoKHsgYmVnaW4sIG9iamVjdENvdW50IH0pOwogICAgIH0KIAorICAg
IEJBU1NFUlQoYWxsb2NhdG9yLmNhbkFsbG9jYXRlKCkpOwogICAgIHBhZ2UtPnNldEhhc0ZyZWVM
aW5lcyhsb2NrLCBmYWxzZSk7CiB9CiAKQEAgLTMwNCw3ICszMDYsNyBAQCBpbmxpbmUgTGFyZ2VP
YmplY3QmIEhlYXA6OnNwbGl0QW5kQWxsb2NhCiAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogfQog
Ci12b2lkKiBIZWFwOjphbGxvY2F0ZUxhcmdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
LCBzaXplX3Qgc2l6ZSkKK3ZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXJk
PFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90IHNpemUpCiB7CiAgICAgQkFTU0VSVChzaXplIDw9
IGxhcmdlTWF4KTsKICAgICBCQVNTRVJUKHNpemUgPj0gbGFyZ2VNaW4pOwpAQCAtMzEyLDcgKzMx
NCw3IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXIKIAogICAgIExh
cmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShzaXplKTsKICAgICBp
ZiAoIWxhcmdlT2JqZWN0KQotICAgICAgICBsYXJnZU9iamVjdCA9IG1fdm1IZWFwLmFsbG9jYXRl
TGFyZ2VPYmplY3Qoc2l6ZSk7CisgICAgICAgIGxhcmdlT2JqZWN0ID0gbV92bUhlYXAuYWxsb2Nh
dGVMYXJnZU9iamVjdChsb2NrLCBzaXplKTsKIAogICAgIGlmIChsYXJnZU9iamVjdC52bVN0YXRl
KCkuaGFzVmlydHVhbCgpKSB7CiAgICAgICAgIG1faXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOwpA
QCAtMzI2LDcgKzMyOCw3IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1
YXIKICAgICByZXR1cm4gbGFyZ2VPYmplY3QuYmVnaW4oKTsKIH0KIAotdm9pZCogSGVhcDo6YWxs
b2NhdGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90IGFsaWdubWVu
dCwgc2l6ZV90IHNpemUsIHNpemVfdCB1bmFsaWduZWRTaXplKQordm9pZCogSGVhcDo6YWxsb2Nh
dGVMYXJnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2NrLCBzaXplX3QgYWxpZ25t
ZW50LCBzaXplX3Qgc2l6ZSwgc2l6ZV90IHVuYWxpZ25lZFNpemUpCiB7CiAgICAgQkFTU0VSVChz
aXplIDw9IGxhcmdlTWF4KTsKICAgICBCQVNTRVJUKHNpemUgPj0gbGFyZ2VNaW4pOwpAQCAtMzQw
LDcgKzM0Miw3IEBAIHZvaWQqIEhlYXA6OmFsbG9jYXRlTGFyZ2Uoc3RkOjpsb2NrX2d1YXIKIAog
ICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1l
bnQsIHNpemUsIHVuYWxpZ25lZFNpemUpOwogICAgIGlmICghbGFyZ2VPYmplY3QpCi0gICAgICAg
IGxhcmdlT2JqZWN0ID0gbV92bUhlYXAuYWxsb2NhdGVMYXJnZU9iamVjdChhbGlnbm1lbnQsIHNp
emUsIHVuYWxpZ25lZFNpemUpOworICAgICAgICBsYXJnZU9iamVjdCA9IG1fdm1IZWFwLmFsbG9j
YXRlTGFyZ2VPYmplY3QobG9jaywgYWxpZ25tZW50LCBzaXplLCB1bmFsaWduZWRTaXplKTsKIAog
ICAgIGlmIChsYXJnZU9iamVjdC52bVN0YXRlKCkuaGFzVmlydHVhbCgpKSB7CiAgICAgICAgIG1f
aXNBbGxvY2F0aW5nUGFnZXMgPSB0cnVlOwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9M
YXJnZUNodW5rLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9MYXJnZUNo
dW5rLmgJKHJldmlzaW9uIDE5Njg0NikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VD
aHVuay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTMgQEAKICNpbmNsdWRlICJPYmpl
Y3RUeXBlLmgiCiAjaW5jbHVkZSAiU2l6ZXMuaCIKICNpbmNsdWRlICJWTUFsbG9jYXRlLmgiCisj
aW5jbHVkZSA8YXJyYXk+CiAKIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgTGFyZ2VDaHVu
ayB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIExhcmdlQ2h1bmsqIGNyZWF0ZSgpOworICAgIExhcmdl
Q2h1bmsoKTsKICAgICBzdGF0aWMgTGFyZ2VDaHVuayogZ2V0KHZvaWQqKTsKIAogICAgIHN0YXRp
YyBCZWdpblRhZyogYmVnaW5UYWcodm9pZCopOwpAQCAtNDYsOCArNDcsOCBAQCBwdWJsaWM6CiAg
ICAgY2hhciogZW5kKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBs
YXJnZUNodW5rU2l6ZTsgfQogCiBwcml2YXRlOgotICAgICAvLyBSb3VuZCB1cCB0byBlbnN1cmUg
MiBkdW1teSBib3VuZGFyeSB0YWdzIC0tIGZvciB0aGUgbGVmdCBhbmQgcmlnaHQgc2VudGluZWxz
LgotICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJvdW5kYXJ5VGFnQ291bnQgPSBtYXgoMiAqIGxh
cmdlTWluIC8gc2l6ZW9mKEJvdW5kYXJ5VGFnKSwgbGFyZ2VDaHVua1NpemUgLyBsYXJnZU1pbik7
IAorICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYm91bmRhcnlUYWdDb3VudCA9IGxhcmdlQ2h1bmtT
aXplIC8gbGFyZ2VNaW47CisgICAgc3RhdGljX2Fzc2VydChib3VuZGFyeVRhZ0NvdW50ID4gMiwg
IkxhcmdlQ2h1bmsgbXVzdCBoYXZlIHNwYWNlIGZvciB0d28gc2VudGluZWwgYm91bmRhcnkgdGFn
cyIpOwogCiAgICAgLy8gT3VyIG1ldGFkYXRhIGxheW91dCBpbmNsdWRlcyBhIGxlZnQgYW5kIHJp
Z2h0IGVkZ2Ugc2VudGluZWwuCiAgICAgLy8gTWV0YWRhdGEgdGFrZXMgdXAgZW5vdWdoIHNwYWNl
IHRvIGxlYXZlIGF0IGxlYXN0IHRoZSBmaXJzdCB0d28KQEAgLTYzLDIzICs2NCw0MCBAQCBwcml2
YXRlOgogICAgIC8vCiAgICAgLy8gV2UgdXNlIHRoZSBYJ3MgZm9yIGJvdW5kYXJ5IHRhZ3MgYW5k
IHRoZSBPJ3MgZm9yIGVkZ2Ugc2VudGluZWxzLgogCi0gICAgQm91bmRhcnlUYWcgbV9ib3VuZGFy
eVRhZ3NbYm91bmRhcnlUYWdDb3VudF07Ci0KLSAgICAvLyBBbGlnbiB0byB2bVBhZ2VTaXplIHRv
IGF2b2lkIHNoYXJpbmcgcGh5c2ljYWwgcGFnZXMgd2l0aCBtZXRhZGF0YS4KLSAgICAvLyBPdGhl
cndpc2UsIHdlJ2xsIGNvbmZ1c2UgdGhlIHNjYXZlbmdlciBpbnRvIHRyeWluZyB0byBzY2F2ZW5n
ZSBtZXRhZGF0YS4KLSAgICAvLyBGSVhNRTogQmVsb3cgI2lmZGVmIHdvcmthcm91bmQgZml4IHNo
b3VsZCBiZSByZW1vdmVkIGFmdGVyIGFsbCBsaW51eCBiYXNlZCBwb3J0cyBidW1wCi0gICAgLy8g
b3duIGdjYyB2ZXJzaW9uLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0MDE2MiNjODcKLSNpZiBCUExBVEZPUk0oSU9TKQotICAgIGNoYXIgbV9tZW1vcnlbXSBf
X2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2Mzg0KSkpOwotICAgIHN0YXRpY19hc3NlcnQodm1QYWdl
U2l6ZSA9PSAxNjM4NCwgInZtUGFnZVNpemUgYW5kIGFsaWdubWVudCBtdXN0IGJlIHNhbWUiKTsK
LSNlbHNlCi0gICAgY2hhciBtX21lbW9yeVtdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNDA5Nikp
KTsKLSAgICBzdGF0aWNfYXNzZXJ0KHZtUGFnZVNpemUgPT0gNDA5NiwgInZtUGFnZVNpemUgYW5k
IGFsaWdubWVudCBtdXN0IGJlIHNhbWUiKTsKLSNlbmRpZgorICAgIHN0ZDo6YXJyYXk8Qm91bmRh
cnlUYWcsIGJvdW5kYXJ5VGFnQ291bnQ+IG1fYm91bmRhcnlUYWdzOworICAgIGNoYXIgbV9tZW1v
cnlbXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKGxhcmdlQWxpZ25tZW50KSkpOwogfTsKIAotc3Rh
dGljX2Fzc2VydChsYXJnZUNodW5rTWV0YWRhdGFTaXplID09IHNpemVvZihMYXJnZUNodW5rKSwg
IidsYXJnZUNodW5rTWV0YWRhdGFTaXplJyBzaG91bGQgYmUgdGhlIHNhbWUgbnVtYmVyIGFzIHNp
emVvZihMYXJnZUNodW5rKSBvciBvdXIgY29tcHV0YXRpb24gaW4gU2l6ZXMuaCBmb3IgJ2xhcmdl
TWF4JyBpcyB3cm9uZyIpOwotc3RhdGljX2Fzc2VydChsYXJnZUNodW5rTWV0YWRhdGFTaXplICsg
bGFyZ2VNYXggPD0gbGFyZ2VDaHVua1NpemUsICJXZSB3aWxsIHRoaW5rIHdlIGNhbiBhY2NvbW1v
ZGF0ZSBsYXJnZXIgb2JqZWN0cyB0aGFuIHdlIGNhbiBpbiByZWFsaXR5Iik7CitzdGF0aWNfYXNz
ZXJ0KGxhcmdlQ2h1bmtNZXRhZGF0YVNpemUgPT0gc2l6ZW9mKExhcmdlQ2h1bmspLCAiT3VyIGxh
cmdlQ2h1bmtNZXRhZGF0YVNpemUgbWF0aCBpbiBTaXplcy5oIGlzIHdyb25nIik7CitzdGF0aWNf
YXNzZXJ0KGxhcmdlQ2h1bmtNZXRhZGF0YVNpemUgKyBsYXJnZU1heCA9PSBsYXJnZUNodW5rU2l6
ZSwgImxhcmdlTWF4IGlzIHRvbyBzbWFsbCBvciB0b28gYmlnIik7CisKK2lubGluZSBMYXJnZUNo
dW5rOjpMYXJnZUNodW5rKCkKK3sKKyAgICBSYW5nZSByYW5nZShiZWdpbigpLCBlbmQoKSAtIGJl
Z2luKCkpOworICAgIEJBU1NFUlQocmFuZ2Uuc2l6ZSgpID09IGxhcmdlTWF4KTsKKworICAgIEJl
Z2luVGFnKiBiZWdpblRhZyA9IExhcmdlQ2h1bms6OmJlZ2luVGFnKHJhbmdlLmJlZ2luKCkpOwor
ICAgIGJlZ2luVGFnLT5zZXRSYW5nZShyYW5nZSk7CisgICAgYmVnaW5UYWctPnNldEZyZWUodHJ1
ZSk7CisgICAgYmVnaW5UYWctPnNldFZNU3RhdGUoVk1TdGF0ZTo6VmlydHVhbCk7CisKKyAgICBF
bmRUYWcqIGVuZFRhZyA9IExhcmdlQ2h1bms6OmVuZFRhZyhyYW5nZS5iZWdpbigpLCByYW5nZS5z
aXplKCkpOworICAgIGVuZFRhZy0+aW5pdChiZWdpblRhZyk7CisKKyAgICAvLyBNYXJrIHRoZSBs
ZWZ0IGFuZCByaWdodCBlZGdlcyBvZiBvdXIgcmFuZ2UgYXMgYWxsb2NhdGVkLiBUaGlzIG5hdHVy
YWxseQorICAgIC8vIHByZXZlbnRzIG1lcmdpbmcgbG9naWMgZnJvbSBvdmVyZmxvd2luZyBsZWZ0
IChpbnRvIG1ldGFkYXRhKSBvciByaWdodAorICAgIC8vIChiZXlvbmQgb3VyIGNodW5rKSwgd2l0
aG91dCByZXF1aXJpbmcgc3BlY2lhbC1jYXNlIGNoZWNrcy4KKworICAgIEVuZFRhZyogbGVmdFNl
bnRpbmVsID0gYmVnaW5UYWctPnByZXYoKTsKKyAgICBCQVNTRVJUKGxlZnRTZW50aW5lbCA+PSBt
X2JvdW5kYXJ5VGFncy5iZWdpbigpKTsKKyAgICBCQVNTRVJUKGxlZnRTZW50aW5lbCA8IG1fYm91
bmRhcnlUYWdzLmVuZCgpKTsKKyAgICBsZWZ0U2VudGluZWwtPmluaXRTZW50aW5lbCgpOworCisg
ICAgQmVnaW5UYWcqIHJpZ2h0U2VudGluZWwgPSBlbmRUYWctPm5leHQoKTsKKyAgICBCQVNTRVJU
KHJpZ2h0U2VudGluZWwgPj0gbV9ib3VuZGFyeVRhZ3MuYmVnaW4oKSk7CisgICAgQkFTU0VSVChy
aWdodFNlbnRpbmVsIDwgbV9ib3VuZGFyeVRhZ3MuZW5kKCkpOworICAgIHJpZ2h0U2VudGluZWwt
PmluaXRTZW50aW5lbCgpOworfQogCiBpbmxpbmUgTGFyZ2VDaHVuayogTGFyZ2VDaHVuazo6Z2V0
KHZvaWQqIG9iamVjdCkKIHsKSW5kZXg6IFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmpl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0xhcmdlT2JqZWN0LmgJ
KHJldmlzaW9uIDE5Njg0NikKKysrIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvTGFyZ2VPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsNiBAQCBuYW1lc3BhY2UgYm1hbGxvYyB7CiAK
IGNsYXNzIExhcmdlT2JqZWN0IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmFuZ2UgaW5pdChMYXJn
ZUNodW5rKik7Ci0KICAgICBMYXJnZU9iamVjdCgpOwogICAgIExhcmdlT2JqZWN0KHZvaWQqKTsK
IApAQCAtMjcxLDMzICsyNjksNiBAQCBpbmxpbmUgdm9pZCBMYXJnZU9iamVjdDo6dmFsaWRhdGUo
KSBjb25zCiAgICAgfQogfQogCi1pbmxpbmUgUmFuZ2UgTGFyZ2VPYmplY3Q6OmluaXQoTGFyZ2VD
aHVuayogY2h1bmspCi17Ci0gICAgUmFuZ2UgcmFuZ2UoY2h1bmstPmJlZ2luKCksIGNodW5rLT5l
bmQoKSAtIGNodW5rLT5iZWdpbigpKTsKLQotICAgIEJlZ2luVGFnKiBiZWdpblRhZyA9IExhcmdl
Q2h1bms6OmJlZ2luVGFnKHJhbmdlLmJlZ2luKCkpOwotICAgIGJlZ2luVGFnLT5zZXRSYW5nZShy
YW5nZSk7Ci0gICAgYmVnaW5UYWctPnNldEZyZWUodHJ1ZSk7Ci0gICAgYmVnaW5UYWctPnNldFZN
U3RhdGUoVk1TdGF0ZTo6VmlydHVhbCk7Ci0KLSAgICBFbmRUYWcqIGVuZFRhZyA9IExhcmdlQ2h1
bms6OmVuZFRhZyhyYW5nZS5iZWdpbigpLCByYW5nZS5zaXplKCkpOwotICAgIGVuZFRhZy0+aW5p
dChiZWdpblRhZyk7Ci0KLSAgICAvLyBNYXJrIHRoZSBsZWZ0IGFuZCByaWdodCBlZGdlcyBvZiBv
dXIgY2h1bmsgYXMgYWxsb2NhdGVkLiBUaGlzIG5hdHVyYWxseQotICAgIC8vIHByZXZlbnRzIG1l
cmdpbmcgbG9naWMgZnJvbSBvdmVyZmxvd2luZyBiZXlvbmQgb3VyIGNodW5rLCB3aXRob3V0IHJl
cXVpcmluZwotICAgIC8vIHNwZWNpYWwtY2FzZSBjaGVja3MuCi0gICAgCi0gICAgRW5kVGFnKiBs
ZWZ0U2VudGluZWwgPSBiZWdpblRhZy0+cHJldigpOwotICAgIEJBU1NFUlQobGVmdFNlbnRpbmVs
ID49IHN0YXRpY19jYXN0PHZvaWQqPihjaHVuaykpOwotICAgIGxlZnRTZW50aW5lbC0+aW5pdFNl
bnRpbmVsKCk7Ci0KLSAgICBCZWdpblRhZyogcmlnaHRTZW50aW5lbCA9IGVuZFRhZy0+bmV4dCgp
OwotICAgIEJBU1NFUlQocmlnaHRTZW50aW5lbCA8IHN0YXRpY19jYXN0PHZvaWQqPihyYW5nZS5i
ZWdpbigpKSk7Ci0gICAgcmlnaHRTZW50aW5lbC0+aW5pdFNlbnRpbmVsKCk7Ci0gICAgCi0gICAg
cmV0dXJuIHJhbmdlOwotfQotCiB9IC8vIG5hbWVzcGFjZSBibWFsbG9jCiAKICNlbmRpZiAvLyBM
YXJnZU9iamVjdF9oCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TaXplcy5oCShyZXZpc2lvbiAxOTY4NDcp
CisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NpemVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDI4ICs1NiwyMyBAQCBuYW1lc3BhY2UgU2l6ZXMgewogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
c3VwZXJDaHVua1NpemUgPSAyICogTUI7CiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzdXBlckNo
dW5rTWFzayA9IH4oc3VwZXJDaHVua1NpemUgLSAxKTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qgc21hbGxNYXggPSAxMDI0OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxMaW5lU2l6
ZSA9IDI1NjsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNtYWxsTGluZUNvdW50ID0gdm1QYWdl
U2l6ZSAvIHNtYWxsTGluZVNpemU7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzbWFsbExpbmVN
YXNrID0gfihzbWFsbExpbmVTaXplIC0gMXVsKTsKLQogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
c21hbGxDaHVua1NpemUgPSBzdXBlckNodW5rU2l6ZSAvIDI7CiAgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBzbWFsbENodW5rT2Zmc2V0ID0gc3VwZXJDaHVua1NpemUgLyAyOwogICAgIHN0YXRpYyBj
b25zdCBzaXplX3Qgc21hbGxDaHVua01hc2sgPSB+KHNtYWxsQ2h1bmtTaXplIC0gMXVsKTsKIAor
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc21hbGxNYXggPSAxMDI0OworICAgIHN0YXRpYyBjb25z
dCBzaXplX3Qgc21hbGxMaW5lU2l6ZSA9IDI1NjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNt
YWxsTGluZUNvdW50ID0gdm1QYWdlU2l6ZSAvIHNtYWxsTGluZVNpemU7CisKICAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGxhcmdlQ2h1bmtTaXplID0gc3VwZXJDaHVua1NpemUgLyAyOwotI2lmIEJQ
TEFURk9STShJT1MpCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUNodW5rTWV0YWRhdGFT
aXplID0gMTYgKiBrQjsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUNodW5r
TWV0YWRhdGFTaXplID0gNCAqIGtCOwotI2VuZGlmCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBs
YXJnZUNodW5rT2Zmc2V0ID0gMDsKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQ2h1bmtN
YXNrID0gfihsYXJnZUNodW5rU2l6ZSAtIDF1bCk7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90
IGxhcmdlQWxpZ25tZW50ID0gNjQ7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZU1heCA9
IGxhcmdlQ2h1bmtTaXplIC0gbGFyZ2VDaHVua01ldGFkYXRhU2l6ZTsKICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGxhcmdlTWluID0gc21hbGxNYXg7Ci0gICAgCisgICAgc3RhdGljIGNvbnN0IHNp
emVfdCBsYXJnZUNodW5rTWV0YWRhdGFTaXplID0gNCAqIGtCOyAvLyBzaXplb2YoTGFyZ2VDaHVu
aykKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlTWF4ID0gbGFyZ2VDaHVua1NpemUgLSBs
YXJnZUNodW5rTWV0YWRhdGFTaXplOworCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCB4TGFyZ2VB
bGlnbm1lbnQgPSB2bVBhZ2VTaXplOwogICAgIHN0YXRpYyBjb25zdCBzaXplX3QgeExhcmdlTWF4
ID0gc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIHhMYXJnZUFsaWdubWVudDsg
Ly8gTWFrZSBzdXJlIHRoYXQgcm91bmRpbmcgdXAgdG8geExhcmdlQWxpZ25tZW50IGRvZXMgbm90
IG92ZXJmbG93LgogCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsQ2h1bmsuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1NtYWxsQ2h1bmsuaAkocmV2aXNp
b24gMTk2ODQ3KQorKysgU291cmNlL2JtYWxsb2MvYm1hbGxvYy9TbWFsbENodW5rLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDM2ICszNSw0MSBAQCBuYW1lc3BhY2UgYm1hbGxvYyB7CiAKIGNsYXNz
IFNtYWxsQ2h1bmsgewogcHVibGljOgorICAgIFNtYWxsQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0
YXRpY011dGV4PiYpOworCiAgICAgc3RhdGljIFNtYWxsQ2h1bmsqIGdldCh2b2lkKik7CiAKICAg
ICBTbWFsbFBhZ2UqIGJlZ2luKCkgeyByZXR1cm4gU21hbGxQYWdlOjpnZXQoU21hbGxMaW5lOjpn
ZXQobV9tZW1vcnkpKTsgfQotICAgIFNtYWxsUGFnZSogZW5kKCkgeyByZXR1cm4gJm1fcGFnZXNb
cGFnZUNvdW50XTsgfQorICAgIFNtYWxsUGFnZSogZW5kKCkgeyByZXR1cm4gbV9wYWdlcy5lbmQo
KTsgfQorICAgIAorICAgIFNtYWxsTGluZSogbGluZXMoKSB7IHJldHVybiBtX2xpbmVzLmJlZ2lu
KCk7IH0KKyAgICBTbWFsbFBhZ2UqIHBhZ2VzKCkgeyByZXR1cm4gbV9wYWdlcy5iZWdpbigpOyB9
CiAgICAgCi0gICAgU21hbGxMaW5lKiBsaW5lcygpIHsgcmV0dXJuIG1fbGluZXM7IH0KLSAgICBT
bWFsbFBhZ2UqIHBhZ2VzKCkgeyByZXR1cm4gbV9wYWdlczsgfQotCiBwcml2YXRlOgotICAgIHN0
YXRpY19hc3NlcnQoISh2bVBhZ2VTaXplICUgc21hbGxMaW5lU2l6ZSksICJ2bVBhZ2VTaXplIG11
c3QgYmUgYW4gZXZlbiBtdWx0aXBsZSBvZiBsaW5lIHNpemUiKTsKLSAgICBzdGF0aWNfYXNzZXJ0
KCEoc21hbGxDaHVua1NpemUgJSBzbWFsbExpbmVTaXplKSwgImNodW5rIHNpemUgbXVzdCBiZSBh
biBldmVuIG11bHRpcGxlIG9mIGxpbmUgc2l6ZSIpOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBsaW5lQ291bnQgPSBzbWFsbENodW5rU2l6ZSAvIHNtYWxsTGluZVNpemU7Ci0gICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBwYWdlQ291bnQgPSBzbWFsbENodW5rU2l6ZSAvIHZtUGFnZVNpemU7Cisg
ICAgc3RkOjphcnJheTxTbWFsbExpbmUsIHNtYWxsQ2h1bmtTaXplIC8gc21hbGxMaW5lU2l6ZT4g
bV9saW5lczsKKyAgICBzdGQ6OmFycmF5PFNtYWxsUGFnZSwgc21hbGxDaHVua1NpemUgLyB2bVBh
Z2VTaXplPiBtX3BhZ2VzOworICAgIGNoYXIgbV9tZW1vcnlbXSBfX2F0dHJpYnV0ZV9fKChhbGln
bmVkKHNtYWxsTGluZVNpemUpKSk7Cit9OwogCi0gICAgU21hbGxMaW5lIG1fbGluZXNbbGluZUNv
dW50XTsKLSAgICBTbWFsbFBhZ2UgbV9wYWdlc1twYWdlQ291bnRdOworc3RhdGljX2Fzc2VydCgh
KHZtUGFnZVNpemUgJSBzbWFsbExpbmVTaXplKSwgInZtUGFnZVNpemUgbXVzdCBiZSBhbiBldmVu
IG11bHRpcGxlIG9mIGxpbmUgc2l6ZSIpOworc3RhdGljX2Fzc2VydCghKHNtYWxsQ2h1bmtTaXpl
ICUgc21hbGxMaW5lU2l6ZSksICJjaHVuayBzaXplIG11c3QgYmUgYW4gZXZlbiBtdWx0aXBsZSBv
ZiBsaW5lIHNpemUiKTsKK3N0YXRpY19hc3NlcnQoCisgICAgc2l6ZW9mKFNtYWxsQ2h1bmspIC0g
dm1QYWdlU2l6ZSAlIHNpemVvZihTbWFsbENodW5rKSA8IHZtUGFnZVNpemUgLSAyICogc21hbGxN
YXgsCisgICAgICAgICJ0aGUgZmlyc3QgcGFnZSBvZiBvYmplY3QgbWVtb3J5IGluIGEgc21hbGwg
Y2h1bmsgY2FuJ3QgYWxsb2NhdGUgc21hbGxNYXgiKTsKKworaW5saW5lIFNtYWxsQ2h1bms6OlNt
YWxsQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKK3sKKyAgICAvLyBU
cmFjayB0aGUgbWVtb3J5IHVzZWQgZm9yIG1ldGFkYXRhIGJ5IGFsbG9jYXRpbmcgaW1hZ2luYXJ5
IG9iamVjdHMuCisgICAgZm9yIChTbWFsbExpbmUqIGxpbmUgPSBtX2xpbmVzLmJlZ2luKCk7IGxp
bmUgPCBTbWFsbExpbmU6OmdldChtX21lbW9yeSk7ICsrbGluZSkgeworICAgICAgICBsaW5lLT5y
ZWYobG9jaywgMSk7CisKKyAgICAgICAgU21hbGxQYWdlKiBwYWdlID0gU21hbGxQYWdlOjpnZXQo
bGluZSk7CisgICAgICAgIHBhZ2UtPnJlZihsb2NrKTsKKyAgICB9CiAKLSAgICAvLyBBbGlnbiB0
byB2bVBhZ2VTaXplIHRvIGF2b2lkIHNoYXJpbmcgcGh5c2ljYWwgcGFnZXMgd2l0aCBtZXRhZGF0
YS4KLSAgICAvLyBPdGhlcndpc2UsIHdlJ2xsIGNvbmZ1c2UgdGhlIHNjYXZlbmdlciBpbnRvIHRy
eWluZyB0byBzY2F2ZW5nZSBtZXRhZGF0YS4KLSAgICAvLyBGSVhNRTogQmVsb3cgI2lmZGVmIHdv
cmthcm91bmQgZml4IHNob3VsZCBiZSByZW1vdmVkIGFmdGVyIGFsbCBsaW51eCBiYXNlZCBwb3J0
cyBidW1wCi0gICAgLy8gb3duIGdjYyB2ZXJzaW9uLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MDE2MiNjODcKLSNpZiBCUExBVEZPUk0oSU9TKQotICAgIGNo
YXIgbV9tZW1vcnlbXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2Mzg0KSkpOwotICAgIHN0YXRp
Y19hc3NlcnQodm1QYWdlU2l6ZSA9PSAxNjM4NCwgInZtUGFnZVNpemUgYW5kIGFsaWdubWVudCBt
dXN0IGJlIHNhbWUiKTsKLSNlbHNlCi0gICAgY2hhciBtX21lbW9yeVtdIF9fYXR0cmlidXRlX18o
KGFsaWduZWQoNDA5NikpKTsKLSAgICBzdGF0aWNfYXNzZXJ0KHZtUGFnZVNpemUgPT0gNDA5Niwg
InZtUGFnZVNpemUgYW5kIGFsaWdubWVudCBtdXN0IGJlIHNhbWUiKTsKLSNlbmRpZgotfTsKKyAg
ICBmb3IgKFNtYWxsUGFnZSogcGFnZSA9IGJlZ2luKCk7IHBhZ2UgIT0gZW5kKCk7ICsrcGFnZSkK
KyAgICAgICAgcGFnZS0+c2V0SGFzRnJlZUxpbmVzKGxvY2ssIHRydWUpOworfQogCiBpbmxpbmUg
U21hbGxDaHVuayogU21hbGxDaHVuazo6Z2V0KHZvaWQqIG9iamVjdCkKIHsKSW5kZXg6IFNvdXJj
ZS9ibWFsbG9jL2JtYWxsb2MvU3VwZXJDaHVuay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvU3VwZXJDaHVuay5oCShyZXZpc2lvbiAxOTY4NDYpCisrKyBTb3VyY2UvYm1h
bGxvYy9ibWFsbG9jL1N1cGVyQ2h1bmsuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMzcgKzMzLDI3
IEBAIG5hbWVzcGFjZSBibWFsbG9jIHsKIAogY2xhc3MgU3VwZXJDaHVuayB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFN1cGVyQ2h1bmsqIGNyZWF0ZSgpOwotCi0gICAgU21hbGxDaHVuayogc21hbGxD
aHVuaygpOwotICAgIExhcmdlQ2h1bmsqIGxhcmdlQ2h1bmsoKTsKLQotcHJpdmF0ZToKICAgICBT
dXBlckNodW5rKCk7Ci19OwogCi1pbmxpbmUgU3VwZXJDaHVuayogU3VwZXJDaHVuazo6Y3JlYXRl
KCkKLXsKLSAgICB2b2lkKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxjaGFyKj4odm1BbGxvY2F0ZShz
dXBlckNodW5rU2l6ZSwgc3VwZXJDaHVua1NpemUpKTsKLSAgICByZXR1cm4gbmV3IChyZXN1bHQp
IFN1cGVyQ2h1bms7Ci19CisgICAgdm9pZCogc21hbGxDaHVuaygpOworICAgIHZvaWQqIGxhcmdl
Q2h1bmsoKTsKK307CiAKIGlubGluZSBTdXBlckNodW5rOjpTdXBlckNodW5rKCkKIHsKLSAgICBu
ZXcgKHNtYWxsQ2h1bmsoKSkgU21hbGxDaHVuazsKLSAgICBuZXcgKGxhcmdlQ2h1bmsoKSkgTGFy
Z2VDaHVuazsKKyAgICBCQVNTRVJUKCF0ZXN0KHRoaXMsIH5zdXBlckNodW5rTWFzaykpOworICAg
IEJBU1NFUlQoIXRlc3Qoc21hbGxDaHVuaygpLCB+c21hbGxDaHVua01hc2spKTsKKyAgICBCQVNT
RVJUKCF0ZXN0KGxhcmdlQ2h1bmsoKSwgfmxhcmdlQ2h1bmtNYXNrKSk7CiB9CiAKLWlubGluZSBT
bWFsbENodW5rKiBTdXBlckNodW5rOjpzbWFsbENodW5rKCkKK2lubGluZSB2b2lkKiBTdXBlckNo
dW5rOjpzbWFsbENodW5rKCkKIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTbWFsbENo
dW5rKj4oCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc21hbGxDaHVu
a09mZnNldCk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgc21h
bGxDaHVua09mZnNldDsKIH0KIAotaW5saW5lIExhcmdlQ2h1bmsqIFN1cGVyQ2h1bms6Omxhcmdl
Q2h1bmsoKQoraW5saW5lIHZvaWQqIFN1cGVyQ2h1bms6OmxhcmdlQ2h1bmsoKQogewotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PExhcmdlQ2h1bmsqPigKLSAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4odGhpcykgKyBsYXJnZUNodW5rT2Zmc2V0KTsKKyAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4odGhpcykgKyBsYXJnZUNodW5rT2Zmc2V0OwogfQogCiB9IC8vIG5h
bWVzcGFjZSBibWFsbG9jCkluZGV4OiBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuY3BwCShyZXZpc2lv
biAxOTY4NDYpCisrKyBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDIxICszNiwzNyBAQCBWTUhlYXA6OlZNSGVhcCgpCiB7CiB9CiAKLXZvaWQg
Vk1IZWFwOjpncm93KCkKK3ZvaWQgVk1IZWFwOjphbGxvY2F0ZVNtYWxsQ2h1bmsoc3RkOjpsb2Nr
X2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaykKIHsKLSAgICBTdXBlckNodW5rKiBzdXBlckNodW5r
ID0gU3VwZXJDaHVuazo6Y3JlYXRlKCk7Ci0jaWYgQk9TKERBUldJTikKLSAgICBtX3pvbmUuYWRk
U3VwZXJDaHVuayhzdXBlckNodW5rKTsKLSNlbmRpZgorICAgIGlmICghbV9zbWFsbENodW5rcy5z
aXplKCkpCisgICAgICAgIGFsbG9jYXRlU3VwZXJDaHVuayhsb2NrKTsKIAotICAgIFNtYWxsQ2h1
bmsqIHNtYWxsQ2h1bmsgPSBzdXBlckNodW5rLT5zbWFsbENodW5rKCk7Ci0gICAgZm9yIChhdXRv
KiBpdCA9IHNtYWxsQ2h1bmstPmJlZ2luKCk7IGl0ICE9IHNtYWxsQ2h1bmstPmVuZCgpOyArK2l0
KQorICAgIC8vIFdlIGluaXRpYWxpemUgY2h1bmtzIGxhemlseSB0byBhdm9pZCBkaXJ0eWluZyB0
aGVpciBtZXRhZGF0YSBwYWdlcy4KKyAgICBTbWFsbENodW5rKiBzbWFsbENodW5rID0gbmV3ICht
X3NtYWxsQ2h1bmtzLnBvcCgpLT5zbWFsbENodW5rKCkpIFNtYWxsQ2h1bmsobG9jayk7CisgICAg
Zm9yIChhdXRvKiBpdCA9IHNtYWxsQ2h1bmstPmJlZ2luKCk7IGl0IDwgc21hbGxDaHVuay0+ZW5k
KCk7ICsraXQpCiAgICAgICAgIG1fc21hbGxQYWdlcy5wdXNoKGl0KTsKK30KKwordm9pZCBWTUhl
YXA6OmFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+JiBsb2Nr
KQoreworICAgIGlmICghbV9sYXJnZUNodW5rcy5zaXplKCkpCisgICAgICAgIGFsbG9jYXRlU3Vw
ZXJDaHVuayhsb2NrKTsKIAotICAgIExhcmdlQ2h1bmsqIGxhcmdlQ2h1bmsgPSBzdXBlckNodW5r
LT5sYXJnZUNodW5rKCk7Ci0gICAgTGFyZ2VPYmplY3QgcmVzdWx0KExhcmdlT2JqZWN0Ojppbml0
KGxhcmdlQ2h1bmspLmJlZ2luKCkpOwotICAgIEJBU1NFUlQocmVzdWx0LnNpemUoKSA9PSBsYXJn
ZU1heCk7Ci0gICAgbV9sYXJnZU9iamVjdHMuaW5zZXJ0KHJlc3VsdCk7CisgICAgLy8gV2UgaW5p
dGlhbGl6ZSBjaHVua3MgbGF6aWx5IHRvIGF2b2lkIGRpcnR5aW5nIHRoZWlyIG1ldGFkYXRhIHBh
Z2VzLgorICAgIExhcmdlQ2h1bmsqIGxhcmdlQ2h1bmsgPSBuZXcgKG1fbGFyZ2VDaHVua3MucG9w
KCktPmxhcmdlQ2h1bmsoKSkgTGFyZ2VDaHVuazsKKyAgICBMYXJnZU9iamVjdCBsYXJnZU9iamVj
dChsYXJnZUNodW5rLT5iZWdpbigpKTsKKyAgICBtX2xhcmdlT2JqZWN0cy5pbnNlcnQobGFyZ2VP
YmplY3QpOworfQorCit2b2lkIFZNSGVhcDo6YWxsb2NhdGVTdXBlckNodW5rKHN0ZDo6bG9ja19n
dWFyZDxTdGF0aWNNdXRleD4mKQoreworICAgIFN1cGVyQ2h1bmsqIHN1cGVyQ2h1bmsgPQorICAg
ICAgICBuZXcgKHZtQWxsb2NhdGUoc3VwZXJDaHVua1NpemUsIHN1cGVyQ2h1bmtTaXplKSkgU3Vw
ZXJDaHVuazsKKyAgICBtX3NtYWxsQ2h1bmtzLnB1c2goc3VwZXJDaHVuayk7CisgICAgbV9sYXJn
ZUNodW5rcy5wdXNoKHN1cGVyQ2h1bmspOworI2lmIEJPUyhEQVJXSU4pCisgICAgbV96b25lLmFk
ZFN1cGVyQ2h1bmsoc3VwZXJDaHVuayk7CisjZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgYm1h
bGxvYwpJbmRleDogU291cmNlL2JtYWxsb2MvYm1hbGxvYy9WTUhlYXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCShyZXZpc2lvbiAxOTY4NDYpCisrKyBT
b3VyY2UvYm1hbGxvYy9ibWFsbG9jL1ZNSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxNyAr
NTEsMjMgQEAgcHVibGljOgogICAgIFZNSGVhcCgpOwogCiAgICAgU21hbGxQYWdlKiBhbGxvY2F0
ZVNtYWxsUGFnZShzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jik7Ci0gICAgTGFyZ2VPYmpl
Y3QgYWxsb2NhdGVMYXJnZU9iamVjdChzaXplX3QpOwotICAgIExhcmdlT2JqZWN0IGFsbG9jYXRl
TGFyZ2VPYmplY3Qoc2l6ZV90LCBzaXplX3QsIHNpemVfdCk7CisgICAgTGFyZ2VPYmplY3QgYWxs
b2NhdGVMYXJnZU9iamVjdChzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0ZXg+Jiwgc2l6ZV90KTsK
KyAgICBMYXJnZU9iamVjdCBhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19ndWFyZDxTdGF0
aWNNdXRleD4mLCBzaXplX3QsIHNpemVfdCwgc2l6ZV90KTsKIAogICAgIHZvaWQgZGVhbGxvY2F0
ZVNtYWxsUGFnZShzdGQ6OnVuaXF1ZV9sb2NrPFN0YXRpY011dGV4PiYsIFNtYWxsUGFnZSopOwog
ICAgIHZvaWQgZGVhbGxvY2F0ZUxhcmdlT2JqZWN0KHN0ZDo6dW5pcXVlX2xvY2s8U3RhdGljTXV0
ZXg+JiwgTGFyZ2VPYmplY3QpOwotCisgICAgCiBwcml2YXRlOgotICAgIHZvaWQgZ3JvdygpOwor
ICAgIHZvaWQgYWxsb2NhdGVTbWFsbENodW5rKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4m
KTsKKyAgICB2b2lkIGFsbG9jYXRlTGFyZ2VDaHVuayhzdGQ6OmxvY2tfZ3VhcmQ8U3RhdGljTXV0
ZXg+Jik7CisgICAgdm9pZCBhbGxvY2F0ZVN1cGVyQ2h1bmsoc3RkOjpsb2NrX2d1YXJkPFN0YXRp
Y011dGV4PiYpOwogCiAgICAgVmVjdG9yPFNtYWxsUGFnZSo+IG1fc21hbGxQYWdlczsKICAgICBT
ZWdyZWdhdGVkRnJlZUxpc3QgbV9sYXJnZU9iamVjdHM7CisKKyAgICBWZWN0b3I8U3VwZXJDaHVu
ayo+IG1fc21hbGxDaHVua3M7CisgICAgVmVjdG9yPFN1cGVyQ2h1bmsqPiBtX2xhcmdlQ2h1bmtz
OworCiAjaWYgQk9TKERBUldJTikKICAgICBab25lIG1fem9uZTsKICNlbmRpZgpAQCAtNzAsMTkg
Kzc2LDE4IEBAIHByaXZhdGU6CiBpbmxpbmUgU21hbGxQYWdlKiBWTUhlYXA6OmFsbG9jYXRlU21h
bGxQYWdlKHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2spCiB7CiAgICAgaWYgKCFt
X3NtYWxsUGFnZXMuc2l6ZSgpKQotICAgICAgICBncm93KCk7CisgICAgICAgIGFsbG9jYXRlU21h
bGxDaHVuayhsb2NrKTsKIAogICAgIFNtYWxsUGFnZSogcGFnZSA9IG1fc21hbGxQYWdlcy5wb3Ao
KTsKLSAgICBwYWdlLT5zZXRIYXNGcmVlTGluZXMobG9jaywgdHJ1ZSk7CiAgICAgdm1BbGxvY2F0
ZVBoeXNpY2FsUGFnZXMocGFnZS0+YmVnaW4oKS0+YmVnaW4oKSwgdm1QYWdlU2l6ZSk7CiAgICAg
cmV0dXJuIHBhZ2U7CiB9CiAKLWlubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9jYXRlTGFy
Z2VPYmplY3Qoc2l6ZV90IHNpemUpCitpbmxpbmUgTGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0
ZUxhcmdlT2JqZWN0KHN0ZDo6bG9ja19ndWFyZDxTdGF0aWNNdXRleD4mIGxvY2ssIHNpemVfdCBz
aXplKQogewogICAgIExhcmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFr
ZShzaXplKTsKICAgICBpZiAoIWxhcmdlT2JqZWN0KSB7Ci0gICAgICAgIGdyb3coKTsKKyAgICAg
ICAgYWxsb2NhdGVMYXJnZUNodW5rKGxvY2spOwogICAgICAgICBsYXJnZU9iamVjdCA9IG1fbGFy
Z2VPYmplY3RzLnRha2Uoc2l6ZSk7CiAgICAgICAgIEJBU1NFUlQobGFyZ2VPYmplY3QpOwogICAg
IH0KQEAgLTkwLDExICs5NSwxMSBAQCBpbmxpbmUgTGFyZ2VPYmplY3QgVk1IZWFwOjphbGxvY2F0
ZUxhcmdlCiAgICAgcmV0dXJuIGxhcmdlT2JqZWN0OwogfQogCi1pbmxpbmUgTGFyZ2VPYmplY3Qg
Vk1IZWFwOjphbGxvY2F0ZUxhcmdlT2JqZWN0KHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXpl
LCBzaXplX3QgdW5hbGlnbmVkU2l6ZSkKK2lubGluZSBMYXJnZU9iamVjdCBWTUhlYXA6OmFsbG9j
YXRlTGFyZ2VPYmplY3Qoc3RkOjpsb2NrX2d1YXJkPFN0YXRpY011dGV4PiYgbG9jaywgc2l6ZV90
IGFsaWdubWVudCwgc2l6ZV90IHNpemUsIHNpemVfdCB1bmFsaWduZWRTaXplKQogewogICAgIExh
cmdlT2JqZWN0IGxhcmdlT2JqZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1lbnQsIHNp
emUsIHVuYWxpZ25lZFNpemUpOwogICAgIGlmICghbGFyZ2VPYmplY3QpIHsKLSAgICAgICAgZ3Jv
dygpOworICAgICAgICBhbGxvY2F0ZUxhcmdlQ2h1bmsobG9jayk7CiAgICAgICAgIGxhcmdlT2Jq
ZWN0ID0gbV9sYXJnZU9iamVjdHMudGFrZShhbGlnbm1lbnQsIHNpemUsIHVuYWxpZ25lZFNpemUp
OwogICAgICAgICBCQVNTRVJUKGxhcmdlT2JqZWN0KTsKICAgICB9Cg==
</data>
<flag name="review"
          id="296703"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>