<?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>23676</bug_id>
          
          <creation_ts>2009-02-01 18:11:45 -0800</creation_ts>
          <short_desc>Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity</short_desc>
          <delta_ts>2009-02-02 16:28:01 -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>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>oliver</cc>
    
    <cc>slewis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>107925</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 18:11:45 -0800</bug_when>
    <thetext>In the parser, memcpy showed up on a profile, copying zero bytes when setting the initial capacity on the vector of attributes. This made me realize we could and should special-case the initial capacity setting to do less work and be more inline.

Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107926</commentid>
    <comment_count>1</comment_count>
      <attachid>27239</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-01 18:27:16 -0800</bug_when>
    <thetext>Created attachment 27239
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107938</commentid>
    <comment_count>2</comment_count>
      <attachid>27239</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-02-01 20:17:39 -0800</bug_when>
    <thetext>Comment on attachment 27239
patch

I see a couple of cases where inline capacity could have just been used instead of wasting an extra call on reserveCapacity or reserveInitialCapacity.  For example:

textBuffer.reserveInitialCapacity(cMaxSegmentSize);

Could you go through these changes and look for any that just used a fixed size constant all the time and convert them to use inline capacity instead?  I think that would make those cases more readable and help make the intent of reserveInitialCapacity more clear.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>107974</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-02 08:55:31 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 27239 [review])
&gt; I see a couple of cases where inline capacity could have just been used instead
&gt; of wasting an extra call on reserveCapacity or reserveInitialCapacity.  For
&gt; example:
&gt; 
&gt; textBuffer.reserveInitialCapacity(cMaxSegmentSize);
&gt; 
&gt; Could you go through these changes and look for any that just used a fixed size
&gt; constant all the time and convert them to use inline capacity instead?  I think
&gt; that would make those cases more readable and help make the intent of
&gt; reserveInitialCapacity more clear.

I don&apos;t think inline capacity is always better; I&apos;ll look at the individual cases, but note that inline capacity means that the buffer can&apos;t be transferred to another object. For example, if you&apos;re planning to use String::adopt then inline capacity won&apos;t work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108057</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-02-02 16:28:01 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/40501</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27239</attachid>
            <date>2009-02-01 18:27:16 -0800</date>
            <delta_ts>2009-02-01 20:17:39 -0800</delta_ts>
            <desc>patch</desc>
            <filename>ReserveInitialPatch.txt</filename>
            <type>text/plain</type>
            <size>21213</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQwNDcyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMDktMDItMDEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEJ1ZyAyMzY3NjogU3BlZWQgdXAgdXNlcyBvZiByZXNlcnZlQ2FwYWNp
dHkgb24gbmV3IHZlY3RvcnMgYnkgYWRkaW5nIGEgbmV3IHJlc2VydmVJbml0aWFsQ2FwYWNpdHkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjc2CisK
KyAgICAgICAgKiBBUEkvSlNPYmplY3RSZWYuY3BwOgorICAgICAgICAoSlNPYmplY3RDb3B5UHJv
cGVydHlOYW1lcyk6IFVzZSByZXNlcnZlSW5pdGlhbENhcGFjaXR5LgorICAgICAgICAqIHBhcnNl
ci9MZXhlci5jcHA6CisgICAgICAgIChKU0M6OkxleGVyOjpMZXhlcik6IERpdHRvLgorICAgICAg
ICAoSlNDOjpMZXhlcjo6Y2xlYXIpOiBEaXR0by4KKworICAgICAgICAqIHd0Zi9WZWN0b3IuaDog
QWRkZWQgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSwgYSBtb3JlIGVmZmljaWVudCB2ZXJzaW9uIG9m
CisgICAgICAgIHJlc2VydmVDYXBhY2l0eSBmb3IgdXNlIHdoZW4gdGhlIHZlY3RvciBpcyBicmFu
ZCBuZXcgKHN0aWxsIHNpemUgMCB3aXRoIG5vCisgICAgICAgIGNhcGFjaXR5IG90aGVyIHRoYW4g
dGhlIGlubGluZSBjYXBhY2l0eSkuCisKIDIwMDktMDEtMzAgIE1hcmsgUm93ZSAgPG1yb3dlQGFw
cGxlLmNvbT4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBPbGl2ZXIgSHVudC4KSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvQVBJL0pTT2JqZWN0UmVmLmNwcAkocmV2aXNpb24gNDA0NzIpCisrKyBKYXZhU2Ny
aXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjcsNyArNDY3
LDcgQEAgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09iamVjdENvcHlQcm9wZQogICAgIGpzT2Jq
ZWN0LT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIGFycmF5KTsKIAogICAgIHNpemVfdCBzaXplID0g
YXJyYXkuc2l6ZSgpOwotICAgIHByb3BlcnR5TmFtZXMtPmFycmF5LnJlc2VydmVDYXBhY2l0eShz
aXplKTsKKyAgICBwcm9wZXJ0eU5hbWVzLT5hcnJheS5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHNp
emUpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBwcm9w
ZXJ0eU5hbWVzLT5hcnJheS5hcHBlbmQoSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBP
cGFxdWVKU1N0cmluZzo6Y3JlYXRlKGFycmF5W2ldLnVzdHJpbmcoKSkucmVsZWFzZVJlZigpKSk7
CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAJKHJldmlzaW9uIDQwNDcyKQorKysg
SmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODAsOCAr
ODAsOCBAQCBMZXhlcjo6TGV4ZXIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICwgbV9n
bG9iYWxEYXRhKGdsb2JhbERhdGEpCiAgICAgLCBtX21haW5UYWJsZShKU0M6Om1haW5UYWJsZSkK
IHsKLSAgICBtX2J1ZmZlcjgucmVzZXJ2ZUNhcGFjaXR5KGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNp
dHkpOwotICAgIG1fYnVmZmVyMTYucmVzZXJ2ZUNhcGFjaXR5KGluaXRpYWxSZWFkQnVmZmVyQ2Fw
YWNpdHkpOworICAgIG1fYnVmZmVyOC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGluaXRpYWxSZWFk
QnVmZmVyQ2FwYWNpdHkpOworICAgIG1fYnVmZmVyMTYucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShp
bml0aWFsUmVhZEJ1ZmZlckNhcGFjaXR5KTsKIH0KIAogTGV4ZXI6On5MZXhlcigpCkBAIC04ODQs
MTEgKzg4NCwxMSBAQCB2b2lkIExleGVyOjpjbGVhcigpCiAgICAgbV9pZGVudGlmaWVycy5jbGVh
cigpOwogCiAgICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7Ci0gICAgbmV3QnVmZmVyOC5yZXNl
cnZlQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJDYXBhY2l0eSk7CisgICAgbmV3QnVmZmVyOC5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkpOwogICAgIG1f
YnVmZmVyOC5zd2FwKG5ld0J1ZmZlcjgpOwogCiAgICAgVmVjdG9yPFVDaGFyPiBuZXdCdWZmZXIx
NjsKLSAgICBuZXdCdWZmZXIxNi5yZXNlcnZlQ2FwYWNpdHkoaW5pdGlhbFJlYWRCdWZmZXJDYXBh
Y2l0eSk7CisgICAgbmV3QnVmZmVyMTYucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpbml0aWFsUmVh
ZEJ1ZmZlckNhcGFjaXR5KTsKICAgICBtX2J1ZmZlcjE2LnN3YXAobmV3QnVmZmVyMTYpOwogCiAg
ICAgbV9pc1JlcGFyc2luZyA9IGZhbHNlOwpJbmRleDogSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAkocmV2aXNpb24g
NDA0NzIpCisrKyBKYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUwMyw2ICs1MDMsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdm9pZCBncm93KHNpemVf
dCBzaXplKTsKICAgICAgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpOwogICAgICAgICB2b2lk
IHJlc2VydmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpOworICAgICAgICB2b2lkIHJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2l6ZV90IGluaXRpYWxDYXBhY2l0eSk7CiAgICAgICAgIHZvaWQg
c2hyaW5rQ2FwYWNpdHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKICAgICAgICAgdm9pZCBzaHJpbmtU
b0ZpdCgpIHsgc2hyaW5rQ2FwYWNpdHkoc2l6ZSgpKTsgfQogCkBAIC03MzMsNiArNzM0LDE1IEBA
IG5hbWVzcGFjZSBXVEYgewogICAgIH0KICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBz
aXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgaW5saW5lIHZvaWQgVmVjdG9yPFQsIGlubGluZUNh
cGFjaXR5Pjo6cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaXplX3QgaW5pdGlhbENhcGFjaXR5KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3NpemUpOworICAgICAgICBBU1NFUlQoY2FwYWNpdHko
KSA9PSBpbmxpbmVDYXBhY2l0eSk7CisgICAgICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPiBpbmxp
bmVDYXBhY2l0eSkKKyAgICAgICAgICAgIG1fYnVmZmVyLmFsbG9jYXRlQnVmZmVyKGluaXRpYWxD
YXBhY2l0eSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KICAgICB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OnNocmlu
a0NhcGFjaXR5KHNpemVfdCBuZXdDYXBhY2l0eSkKICAgICB7CiAgICAgICAgIGlmIChuZXdDYXBh
Y2l0eSA+PSBjYXBhY2l0eSgpKQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29yZS9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NyBAQAorMjAwOS0wMi0wMSAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQnVnIDIzNjc2OiBTcGVlZCB1cCB1c2VzIG9mIHJlc2VydmVDYXBhY2l0
eSBvbiBuZXcgdmVjdG9ycyBieSBhZGRpbmcgYSBuZXcgcmVzZXJ2ZUluaXRpYWxDYXBhY2l0eQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NzYKKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTQ1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjc3NQcm9wZXJ0eU5hbWUpOgorICAgICAgICAqIGNzcy9DU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbjo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OnJlbW92ZVByb3BlcnRpZXNJblNldCk6
CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVEZWNs
YXJhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZURlY2xhcmF0aW9uOjpjb3B5
UHJvcGVydGllc0luU2V0KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmZv
cm1FbGVtZW50c1N0YXRlKToKKyAgICAgICAgKiBkb20vTmFtZWRBdHRyTWFwLmg6CisgICAgICAg
IChXZWJDb3JlOjpOYW1lZEF0dHJNYXA6OnJlc2VydmVJbml0aWFsQ2FwYWNpdHkpOgorICAgICAg
ICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rl
ckl0ZXJhdG9yOjpzdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoQnVmZmVyOjpTZWFy
Y2hCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGxhaW5UZXh0VG9NYWxsb2NBbGxvY2F0ZWRC
dWZmZXIpOgorICAgICAgICAqIGVkaXRpbmcvbWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmpvaW5NYXJrdXBzKToKKyAgICAgICAgKiBoaXN0b3J5L0hpc3RvcnlJdGVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpIaXN0b3J5SXRlbSk6CisgICAgICAgICogaHRtbC9I
VE1MVG9rZW5pemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRva2VuOjphZGRBdHRyaWJ1dGUp
OgorICAgICAgICAqIGxvYWRlci9hcHBjYWNoZS9ET01BcHBsaWNhdGlvbkNhY2hlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTUFwcGxpY2F0aW9uQ2FjaGU6Oml0ZW1zKToKKyAgICAgICAgKiBw
YWdlL1NlY3VyaXR5T3JpZ2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
Ojp0b1N0cmluZyk6CisgICAgICAgICogcGFnZS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW06CisgICAgICAgIChjb252ZXJ0VG9WZWN0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnB1cmdl
SW5hY3RpdmVGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmludmFsaWRh
dGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybURhdGE6OmRlZXBDb3B5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBIZWFkZXJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRUUEhlYWRlck1hcDo6Y29w
eURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3RCYXNlOjpjb3B5RGF0YSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpmb3JtQ3JlYXRlKToKKyAgICAgICAgKiB4bWwvWFBhdGhOb2RlU2V0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhQYXRoOjpOb2RlU2V0Ojpzb3J0KToKKyAgICAgICAgVXNl
IHJlc2VydmVJbml0aWFsQ2FwYWNpdHkgaW5zdGVhZCBvZiBvZiByZXNlcnZlQ2FwYWNpdHkgaW4g
YWxsIHRoZXNlIGNhbGwgc2l0ZXMsCisgICAgICAgIHdoaWNoIGFyZSB3b3JraW5nIG9uIG5ldyB2
ZWN0b3JzIHRoYXQgYXJlIGd1YXJhbnRlZWQgbm90IHRvIGJlIGVtcHR5LgorCiAyMDA5LTAyLTAx
ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
Sm9obiBTdWxsaXZhbi4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNDU1NTdHlsZURlY2xh
cmF0aW9uQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ1NT
U3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0NTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03Nyw3ICs3Nyw3IEBAIHN0YXRpYyBTdHJpbmcgY3NzUHJvcGVydHlOYW1lKGNvbnN0IElk
ZW4KICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCiAgICAgVmVjdG9yPFVDaGFyPiBuYW1lOwot
ICAgIG5hbWUucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgbmFtZS5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KGxlbmd0aCk7CiAKICAgICB1bnNpZ25lZCBpID0gMDsKIApJbmRleDogV2ViQ29y
ZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gNDA0NzIpCisr
KyBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDcgKzgxLDcgQEAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OkNTU011dGFi
bGVTdAogICAgICwgbV9pdGVyYXRvckNvdW50KDApCiAjZW5kaWYKIHsKLSAgICBtX3Byb3BlcnRp
ZXMucmVzZXJ2ZUNhcGFjaXR5KG51bVByb3BlcnRpZXMpOworICAgIG1fcHJvcGVydGllcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG51bVByb3BlcnRpZXMpOwogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtUHJvcGVydGllczsgKytpKSB7CiAgICAgICAgIEFTU0VSVChwcm9wZXJ0aWVzW2ldKTsK
ICAgICAgICAgbV9wcm9wZXJ0aWVzLmFwcGVuZCgqcHJvcGVydGllc1tpXSk7CkBAIC03MDIsNyAr
NzAyLDcgQEAgdm9pZCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6cmVtb3ZlUAogICAgICAg
ICB0b1JlbW92ZS5hZGQoc2V0W2ldKTsKICAgICAKICAgICBWZWN0b3I8Q1NTUHJvcGVydHk+IG5l
d1Byb3BlcnRpZXM7Ci0gICAgbmV3UHJvcGVydGllcy5yZXNlcnZlQ2FwYWNpdHkobV9wcm9wZXJ0
aWVzLnNpemUoKSk7CisgICAgbmV3UHJvcGVydGllcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1f
cHJvcGVydGllcy5zaXplKCkpOwogICAgIAogICAgIHVuc2lnbmVkIHNpemUgPSBtX3Byb3BlcnRp
ZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24pIHsKSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29y
ZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjgsNyArNzY4
LDcgQEAgU3RyaW5nIENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogCiAgICAgICAg
ICAgICBSZWN0KiByZWN0VmFsID0gZ2V0UmVjdFZhbHVlKCk7CiAgICAgICAgICAgICBWZWN0b3I8
VUNoYXI+IHJlc3VsdDsKLSAgICAgICAgICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOwor
ICAgICAgICAgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOwogICAgICAgICAg
ICAgYXBwZW5kKHJlc3VsdCwgcmVjdFBhcmVuKTsKIAogICAgICAgICAgICAgYXBwZW5kKHJlc3Vs
dCwgcmVjdFZhbC0+dG9wKCktPmNzc1RleHQoKSk7CkBAIC03OTcsNyArNzk3LDcgQEAgU3RyaW5n
IENTU1ByaW1pdGl2ZVZhbHVlOjpjc3NUZXh0KCkgY29ucwogICAgICAgICAgICAgQ29sb3IgY29s
b3IocmdiQ29sb3IpOwogCiAgICAgICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICAg
ICAgICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkoMzIpOworICAgICAgICAgICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOwogICAgICAgICAgICAgaWYgKGNvbG9yLmhhc0FscGhh
KCkpCiAgICAgICAgICAgICAgICAgYXBwZW5kKHJlc3VsdCwgcmdiYVBhcmVuKTsKICAgICAgICAg
ICAgIGVsc2UKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA0
MDQ3MikKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlRGVjbGFyYXRpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDIsNyArMTQyLDcgQEAgdm9pZCBDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWZmKENT
U011dGFibAogUGFzc1JlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gQ1NTU3R5bGVE
ZWNsYXJhdGlvbjo6Y29weVByb3BlcnRpZXNJblNldChjb25zdCBpbnQqIHNldCwgdW5zaWduZWQg
bGVuZ3RoKSBjb25zdAogewogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eT4gbGlzdDsKLSAgICBsaXN0
LnJlc2VydmVDYXBhY2l0eShsZW5ndGgpOworICAgIGxpc3QucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsZW5ndGgpOwogICAgIHVuc2lnbmVkIHZhcmlhYmxlRGVwZW5kZW50VmFsdWVDb3VudCA9IDA7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBnZXRQcm9wZXJ0eUNTU1ZhbHVlKHNldFtpXSk7CkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL2Nz
cy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUzLDcgKzc1Myw3IEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcygKICAgICAvLyBXZSBoYXZl
IHRvIG1lcmdlIHNvcnQuICBFbnN1cmUgb3VyIG1lcmdlIGJ1ZmZlciBpcyBiaWcgZW5vdWdoIHRv
IGhvbGQKICAgICAvLyBhbGwgdGhlIGl0ZW1zLgogICAgIFZlY3RvcjxDU1NSdWxlRGF0YSo+IHJ1
bGVzTWVyZ2VCdWZmZXI7Ci0gICAgcnVsZXNNZXJnZUJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoZW5k
IC0gc3RhcnQpOyAKKyAgICBydWxlc01lcmdlQnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
ZW5kIC0gc3RhcnQpOyAKIAogICAgIHVuc2lnbmVkIGkxID0gc3RhcnQ7CiAgICAgdW5zaWduZWQg
aTIgPSBtaWQ7CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzkxMSw3ICszOTExLDcgQEAgdm9pZCBE
b2N1bWVudDo6ZmluaXNoZWRQYXJzaW5nKCkKIFZlY3RvcjxTdHJpbmc+IERvY3VtZW50Ojpmb3Jt
RWxlbWVudHNTdGF0ZSgpIGNvbnN0CiB7CiAgICAgVmVjdG9yPFN0cmluZz4gc3RhdGVWZWN0b3I7
Ci0gICAgc3RhdGVWZWN0b3IucmVzZXJ2ZUNhcGFjaXR5KG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRl
LnNpemUoKSAqIDMpOworICAgIHN0YXRlVmVjdG9yLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9m
b3JtRWxlbWVudHNXaXRoU3RhdGUuc2l6ZSgpICogMyk7CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUqPjo6Y29uc3RfaXRlcmF0b3IgSXRlcmF0b3I7
CiAgICAgSXRlcmF0b3IgZW5kID0gbV9mb3JtRWxlbWVudHNXaXRoU3RhdGUuZW5kKCk7CiAgICAg
Zm9yIChJdGVyYXRvciBpdCA9IG1fZm9ybUVsZW1lbnRzV2l0aFN0YXRlLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewpJbmRleDogV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmgJKHJldmlzaW9uIDQwNDcyKQorKysgV2Vi
Q29yZS9kb20vTmFtZWRBdHRyTWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAg
cHVibGljOgogICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBTdHJpbmcmIG5h
bWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7CiAgICAgCiAgICAgdm9p
ZCBzaHJpbmtUb0xlbmd0aCgpIHsgbV9hdHRyaWJ1dGVzLnNocmlua0NhcGFjaXR5KGxlbmd0aCgp
KTsgfQotICAgIHZvaWQgcmVzZXJ2ZUNhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KSB7IG1fYXR0
cmlidXRlcy5yZXNlcnZlQ2FwYWNpdHkoY2FwYWNpdHkpOyB9CisgICAgdm9pZCByZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KSB7IG1fYXR0cmlidXRlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KGNhcGFjaXR5KTsgfQogCiAgICAgLy8gdXNlZCBkdXJpbmcgcGFyc2luZzog
b25seSBpbnNlcnRzIGlmIG5vdCBhbHJlYWR5IHRoZXJlCiAgICAgLy8gbm8gZXJyb3IgY2hlY2tp
bmchCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gNDA0NzIpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1OSw3
ICsxMDU5LDcgQEAgdm9pZCBDaGFyYWN0ZXJJdGVyYXRvcjo6YWR2YW5jZShpbnQgY291bgogU3Ry
aW5nIENoYXJhY3Rlckl0ZXJhdG9yOjpzdHJpbmcoaW50IG51bUNoYXJzKQogewogICAgIFZlY3Rv
cjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobnVtQ2hhcnMpOwor
ICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG51bUNoYXJzKTsKICAgICB3aGlsZSAo
bnVtQ2hhcnMgPiAwICYmICFhdEVuZCgpKSB7CiAgICAgICAgIGludCBydW5TaXplID0gbWluKG51
bUNoYXJzLCBsZW5ndGgoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoY2hhcmFjdGVycygpLCBy
dW5TaXplKTsKQEAgLTEyMjcsNyArMTIyNyw3IEBAIGlubGluZSBTZWFyY2hCdWZmZXI6OlNlYXJj
aEJ1ZmZlcihjb25zdCAKICAgICBBU1NFUlQoIW1fdGFyZ2V0LmlzRW1wdHkoKSk7CiAKICAgICBz
aXplX3QgdGFyZ2V0TGVuZ3RoID0gdGFyZ2V0Lmxlbmd0aCgpOwotICAgIG1fYnVmZmVyLnJlc2Vy
dmVDYXBhY2l0eShtYXgodGFyZ2V0TGVuZ3RoICogOCwgbWluaW11bVNlYXJjaEJ1ZmZlclNpemUp
KTsKKyAgICBtX2J1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1heCh0YXJnZXRMZW5ndGgg
KiA4LCBtaW5pbXVtU2VhcmNoQnVmZmVyU2l6ZSkpOwogICAgIG1fb3ZlcmxhcCA9IG1fYnVmZmVy
LmNhcGFjaXR5KCkgLyA0OwogCiAgICAgLy8gR3JhYiB0aGUgc2luZ2xlIGdsb2JhbCBzZWFyY2hl
ci4KQEAgLTE1NDQsNyArMTU0NCw3IEBAIFVDaGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRl
ZEJ1ZmZlcigKICAgICB0eXBlZGVmIHBhaXI8VUNoYXIqLCB1bnNpZ25lZD4gVGV4dFNlZ21lbnQ7
CiAgICAgVmVjdG9yPFRleHRTZWdtZW50PiogdGV4dFNlZ21lbnRzID0gMDsKICAgICBWZWN0b3I8
VUNoYXI+IHRleHRCdWZmZXI7Ci0gICAgdGV4dEJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoY01heFNl
Z21lbnRTaXplKTsKKyAgICB0ZXh0QnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoY01heFNl
Z21lbnRTaXplKTsKICAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyKTsgIWl0LmF0RW5kKCk7IGl0
LmFkdmFuY2UoKSkgewogICAgICAgICBpZiAodGV4dEJ1ZmZlci5zaXplKCkgJiYgdGV4dEJ1ZmZl
ci5zaXplKCkgKyBpdC5sZW5ndGgoKSA+IGNNYXhTZWdtZW50U2l6ZSkgewogICAgICAgICAgICAg
VUNoYXIqIG5ld1NlZ21lbnRCdWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KG1hbGxvYyh0ZXh0
QnVmZmVyLnNpemUoKSAqIHNpemVvZihVQ2hhcikpKTsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9t
YXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCShyZXZp
c2lvbiA0MDQ3MikKKysrIFdlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTAsNyArNjkwLDcgQEAgc3RhdGljIFN0cmluZyBqb2luTWFya3Vwcyhjb25zdCBWZWN0
b3I8UwogICAgICAgICBsZW5ndGggKz0gcG9zdE1hcmt1cHNbaV0ubGVuZ3RoKCk7CiAKICAgICBW
ZWN0b3I8VUNoYXI+IHJlc3VsdDsKLSAgICByZXN1bHQucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7
CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGVuZ3RoKTsKIAogICAgIGZvciAo
c2l6ZV90IGkgPSBwcmVDb3VudDsgaSA+IDA7IC0taSkKICAgICAgICAgYXBwZW5kKHJlc3VsdCwg
cHJlTWFya3Vwc1tpIC0gMV0pOwpJbmRleDogV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uY3BwCShyZXZpc2lv
biA0MDQ3MikKKysrIFdlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBpbmxpbmUgSGlzdG9yeUl0ZW06Okhpc3RvcnlJdGVtKGNv
bnN0IEhpCiAgICAgICAgIG1fZm9ybURhdGEgPSBpdGVtLm1fZm9ybURhdGEtPmNvcHkoKTsKICAg
ICAgICAgCiAgICAgdW5zaWduZWQgc2l6ZSA9IGl0ZW0ubV9zdWJJdGVtcy5zaXplKCk7Ci0gICAg
bV9zdWJJdGVtcy5yZXNlcnZlQ2FwYWNpdHkoc2l6ZSk7CisgICAgbV9zdWJJdGVtcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KHNpemUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyArK2kpCiAgICAgICAgIG1fc3ViSXRlbXMuYXBwZW5kKGl0ZW0ubV9zdWJJdGVtc1tpXS0+Y29w
eSgpKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gNDA0NzIpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MCw3ICsx
NDAsNyBAQCBpbmxpbmUgdm9pZCBUb2tlbjo6YWRkQXR0cmlidXRlKEF0b21pY1N0CiAgICAgICAg
IFJlZlB0cjxNYXBwZWRBdHRyaWJ1dGU+IGEgPSBNYXBwZWRBdHRyaWJ1dGU6OmNyZWF0ZShhdHRy
TmFtZSwgYXR0cmlidXRlVmFsdWUpOwogICAgICAgICBpZiAoIWF0dHJzKSB7CiAgICAgICAgICAg
ICBhdHRycyA9IE5hbWVkTWFwcGVkQXR0ck1hcDo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBhdHRy
cy0+cmVzZXJ2ZUNhcGFjaXR5KDEwKTsKKyAgICAgICAgICAgIGF0dHJzLT5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KDEwKTsKICAgICAgICAgfQogICAgICAgICBhdHRycy0+aW5zZXJ0QXR0cmlidXRl
KGEucmVsZWFzZSgpLCB2aWV3U291cmNlTW9kZSk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9sb2Fk
ZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHJldmlzaW9uIDQwNDcy
KQorKysgV2ViQ29yZS9sb2FkZXIvYXBwY2FjaGUvRE9NQXBwbGljYXRpb25DYWNoZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IERPTUFwcGxpY2F0aW9uCiAgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwogICAgIGlmIChBcHBs
aWNhdGlvbkNhY2hlKiBjYWNoZSA9IGFzc29jaWF0ZWRDYWNoZSgpKSB7CiAgICAgICAgIHVuc2ln
bmVkIG51bUVudHJpZXMgPSBjYWNoZS0+bnVtRHluYW1pY0VudHJpZXMoKTsKLSAgICAgICAgcmVz
dWx0LnJlc2VydmVDYXBhY2l0eShudW1FbnRyaWVzKTsKKyAgICAgICAgcmVzdWx0LnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkobnVtRW50cmllcyk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1FbnRyaWVzOyArK2kpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNhY2hlLT5k
eW5hbWljRW50cnkoaSkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9TZWN1cml0eU9yaWdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL1NlY3VyaXR5T3JpZ2luLmNwcAkocmV2
aXNpb24gNDA0NzIpCisrKyBXZWJDb3JlL3BhZ2UvU2VjdXJpdHlPcmlnaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMjEsNyArMjIxLDcgQEAgU3RyaW5nIFNlY3VyaXR5T3JpZ2luOjp0b1N0cmlu
ZygpIGNvbnN0CiAgICAgICAgIHJldHVybiBTdHJpbmcoImZpbGU6Ly8iKTsKIAogICAgIFZlY3Rv
cjxVQ2hhcj4gcmVzdWx0OwotICAgIHJlc3VsdC5yZXNlcnZlQ2FwYWNpdHkobV9wcm90b2NvbC5s
ZW5ndGgoKSArIG1faG9zdC5sZW5ndGgoKSArIDEwKTsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3Byb3RvY29sLmxlbmd0aCgpICsgbV9ob3N0Lmxlbmd0aCgpICsgMTApOwog
ICAgIGFwcGVuZChyZXN1bHQsIG1fcHJvdG9jb2wpOwogICAgIGFwcGVuZChyZXN1bHQsICI6Ly8i
KTsKICAgICBhcHBlbmQocmVzdWx0LCBtX2hvc3QpOwpJbmRleDogV2ViQ29yZS9wYWdlL21hYy9B
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
bWFjL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tCShyZXZpc2lvbiA0MDQ3MikKKysrIFdl
YkNvcmUvcGFnZS9tYWMvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTg3Myw3ICs4NzMsNyBAQCBzdGF0aWMgV2ViQ29yZVRleHRNYXJrZXJSYW5nZSogdGV4
dE1hcmtlCiBzdGF0aWMgdm9pZCBjb252ZXJ0VG9WZWN0b3IoTlNBcnJheSogYXJyYXksIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgdmVjdG9yKQogewog
ICAgIHVuc2lnbmVkIGxlbmd0aCA9IFthcnJheSBjb3VudF07Ci0gICAgdmVjdG9yLnJlc2VydmVD
YXBhY2l0eShsZW5ndGgpOworICAgIHZlY3Rvci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGxlbmd0
aCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iaiA9IFtbYXJyYXkgb2JqZWN0QXRJbmRleDppXSBhY2Nl
c3NpYmlsaXR5T2JqZWN0XTsKICAgICAgICAgaWYgKG9iaikKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0
LDcgQEAgdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbgogICAgIH0KIAog
ICAgIFZlY3RvcjxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXk+IGtleXNUb1JlbW92ZTsKLSAgICBr
ZXlzVG9SZW1vdmUucmVzZXJ2ZUNhcGFjaXR5KGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPnNpemUo
KSk7CisgICAga2V5c1RvUmVtb3ZlLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoZ0ZvbnRQbGF0Zm9y
bURhdGFDYWNoZS0+c2l6ZSgpKTsKICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGU6Oml0ZXJhdG9y
IHBsYXRmb3JtRGF0YUVuZCA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmVuZCgpOwogICAgIGZv
ciAoRm9udFBsYXRmb3JtRGF0YUNhY2hlOjppdGVyYXRvciBwbGF0Zm9ybURhdGEgPSBnRm9udFBs
YXRmb3JtRGF0YUNhY2hlLT5iZWdpbigpOyBwbGF0Zm9ybURhdGEgIT0gcGxhdGZvcm1EYXRhRW5k
OyArK3BsYXRmb3JtRGF0YSkgewogICAgICAgICBpZiAocGxhdGZvcm1EYXRhLT5zZWNvbmQgJiYg
IWdGb250RGF0YUNhY2hlLT5jb250YWlucygqcGxhdGZvcm1EYXRhLT5zZWNvbmQpKQpAQCAtNDI0
LDcgKzQyNCw3IEBAIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKIAogICAgIFZlY3RvcjxS
ZWZQdHI8Rm9udFNlbGVjdG9yPiA+IGNsaWVudHM7CiAgICAgc2l6ZV90IG51bUNsaWVudHMgPSBn
Q2xpZW50cy0+c2l6ZSgpOwotICAgIGNsaWVudHMucmVzZXJ2ZUNhcGFjaXR5KG51bUNsaWVudHMp
OworICAgIGNsaWVudHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShudW1DbGllbnRzKTsKICAgICBI
YXNoU2V0PEZvbnRTZWxlY3Rvcio+OjppdGVyYXRvciBlbmQgPSBnQ2xpZW50cy0+ZW5kKCk7CiAg
ICAgZm9yIChIYXNoU2V0PEZvbnRTZWxlY3Rvcio+OjppdGVyYXRvciBpdCA9IGdDbGllbnRzLT5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGNsaWVudHMuYXBwZW5kKCppdCk7Cklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YS5jcHAJKHJldmlzaW9uIDQwNDcyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTgsNyArOTgsNyBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBGb3JtRGF0YTo6ZGVlcENvcHko
CiAgICAgZm9ybURhdGEtPm1fYWx3YXlzU3RyZWFtID0gbV9hbHdheXNTdHJlYW07CiAKICAgICBz
aXplX3QgbiA9IG1fZWxlbWVudHMuc2l6ZSgpOwotICAgIGZvcm1EYXRhLT5tX2VsZW1lbnRzLnJl
c2VydmVDYXBhY2l0eShuKTsKKyAgICBmb3JtRGF0YS0+bV9lbGVtZW50cy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG4pOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbjsgKytpKSB7CiAgICAg
ICAgIGNvbnN0IEZvcm1EYXRhRWxlbWVudCYgZSA9IG1fZWxlbWVudHNbaV07CiAgICAgICAgIHN3
aXRjaCAoZS5tX3R5cGUpIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9IVFRQSGVh
ZGVyTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUEhl
YWRlck1hcC5jcHAJKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0hUVFBIZWFkZXJNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGF1dG9fcHRyPENyb3NzVGhyZWFkSFRUUEhlYWRlck1hcERhdGE+IEhU
VFBIZWFkZXJNYXA6OmNvcHlEYXRhKCkgY29uc3QKIHsKICAgICBhdXRvX3B0cjxDcm9zc1RocmVh
ZEhUVFBIZWFkZXJNYXBEYXRhPiBkYXRhKG5ldyBDcm9zc1RocmVhZEhUVFBIZWFkZXJNYXBEYXRh
KCkpOwotICAgIGRhdGEtPnJlc2VydmVDYXBhY2l0eShzaXplKCkpOworICAgIGRhdGEtPnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2l6ZSgpKTsKIAogICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZF9pdCA9IGVuZCgpOwogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBiZWdpbigpOyBpdCAhPSBlbmRfaXQ7ICsraXQpIHsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZVJlcXVlc3RCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VSZXF1ZXN0QmFzZS5jcHAJKHJldmlzaW9u
IDQwNDcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlUmVxdWVzdEJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBAIGF1dG9fcHRyPENyb3NzVGhyZWFk
UmVzb3VyY2VSZXF1ZXN0RGF0YT4KICAgICBkYXRhLT5tX2h0dHBNZXRob2QgPSBodHRwTWV0aG9k
KCkuY29weSgpOwogICAgIGRhdGEtPm1faHR0cEhlYWRlcnMuYWRvcHQoaHR0cEhlYWRlckZpZWxk
cygpLmNvcHlEYXRhKCkpOwogCi0gICAgZGF0YS0+bV9yZXNwb25zZUNvbnRlbnREaXNwb3NpdGlv
bkVuY29kaW5nRmFsbGJhY2tBcnJheS5yZXNlcnZlQ2FwYWNpdHkobV9yZXNwb25zZUNvbnRlbnRE
aXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCkpOworICAgIGRhdGEtPm1fcmVz
cG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNrQXJyYXkucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX3Jlc3BvbnNlQ29udGVudERpc3Bvc2l0aW9uRW5jb2RpbmdGYWxsYmFja0Fy
cmF5LnNpemUoKSk7CiAgICAgc2l6ZV90IGVuY29kaW5nQXJyYXlTaXplID0gbV9yZXNwb25zZUNv
bnRlbnREaXNwb3NpdGlvbkVuY29kaW5nRmFsbGJhY2tBcnJheS5zaXplKCk7CiAgICAgZm9yIChz
aXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGVuY29kaW5nQXJyYXlTaXplOyArK2luZGV4KSB7CiAg
ICAgICAgIGRhdGEtPm1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXkuYXBwZW5kKG1fcmVzcG9uc2VDb250ZW50RGlzcG9zaXRpb25FbmNvZGluZ0ZhbGxiYWNr
QXJyYXlbaW5kZXhdLmNvcHkoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvbWFj
L0Zvcm1EYXRhU3RyZWFtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9tYWMvRm9ybURhdGFTdHJlYW1NYWMubW0JKHJldmlzaW9uIDQwNDcyKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9Gb3JtRGF0YVN0cmVhbU1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjA0LDcgKzIwNCw3IEBAIHN0YXRpYyB2b2lkKiBmb3JtQ3JlYXRlKENGUmVhZFN0cmVh
bVJlZiAKIAogICAgIC8vIEFwcGVuZCBpbiByZXZlcnNlIG9yZGVyIHNpbmNlIHdlIHJlbW92ZSBl
bGVtZW50cyBmcm9tIHRoZSBlbmQuCiAgICAgc2l6ZV90IHNpemUgPSBmb3JtRGF0YS0+ZWxlbWVu
dHMoKS5zaXplKCk7Ci0gICAgbmV3SW5mby0+cmVtYWluaW5nRWxlbWVudHMucmVzZXJ2ZUNhcGFj
aXR5KHNpemUpOworICAgIG5ld0luZm8tPnJlbWFpbmluZ0VsZW1lbnRzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoc2l6ZSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCiAg
ICAgICAgIG5ld0luZm8tPnJlbWFpbmluZ0VsZW1lbnRzLmFwcGVuZChmb3JtRGF0YS0+ZWxlbWVu
dHMoKVtzaXplIC0gaSAtIDFdKTsKIApJbmRleDogV2ViQ29yZS94bWwvWFBhdGhOb2RlU2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3htbC9YUGF0aE5vZGVTZXQuY3BwCShyZXZpc2lvbiA0
MDQ3MikKKysrIFdlYkNvcmUveG1sL1hQYXRoTm9kZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2Miw3ICsxNjIsNyBAQCB2b2lkIE5vZGVTZXQ6OnNvcnQoKSBjb25zdAogICAgIAogICAgIC8v
IEl0IGlzIG5vdCBwb3NzaWJsZSB0byBqdXN0IGFzc2lnbiB0aGUgcmVzdWx0IHRvIG1fbm9kZXMs
IGJlY2F1c2Ugc29tZSBub2RlcyBtYXkgZ2V0IGRlcmVmZXJlbmNlZCBhbmQgZGVzdHJveWVkLgog
ICAgIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBzb3J0ZWROb2RlczsKLSAgICBzb3J0ZWROb2Rlcy5y
ZXNlcnZlQ2FwYWNpdHkobm9kZUNvdW50KTsKKyAgICBzb3J0ZWROb2Rlcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG5vZGVDb3VudCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5vZGVD
b3VudDsgKytpKQogICAgICAgICBzb3J0ZWROb2Rlcy5hcHBlbmQocGFyZW50TWF0cml4W2ldWzBd
KTsKICAgICAK
</data>
<flag name="review"
          id="13118"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>