<?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>36430</bug_id>
          
          <creation_ts>2010-03-21 15:53:34 -0700</creation_ts>
          <short_desc>InsertListCommand needs cleanup</short_desc>
          <delta_ts>2010-06-30 04:49:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>35281</dependson>
    
    <dependson>19539</dependson>
          <blocked>32422</blocked>
    
    <blocked>41403</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>enrica</cc>
    
    <cc>eric</cc>
    
    <cc>justin.garcia</cc>
    
    <cc>ojan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>202356</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-03-21 15:53:34 -0700</bug_when>
    <thetext>Currently, InsertListCommand has three major problems:

1. If the selection contains more than one paragraphs, modifyRange() loops over each paragraph and calls doApply.  This is very misleading because doApply() and modifyRange() aren&apos;t really mutually recursive functions (doApply() calls modifyRange() at most once when doApply() is called for the first time).

2. doApply() has two parts; the first part removes the child node and the second part adds list. Although there are cases in which we remove a list element and add a different type of list element later, two parts are sufficiently isolated and they should be separate functions.

3. IndentOutdentCommand and InsertListCommand implements very similar features but do not share much code.  IndentOutdentCommand adds and removes list just like InsertListCommand, and the only difference is that InsertListCommand sometimes needs to wrap a paragraph with LI whereas IndentOutdentCommand wraps with a blockquote in such cases.  Two classes should share more code.

Proposal: we first divide doApply into two separate functions/methods.  We then move the code inside of modifyRange into doApply.  We can then combine code in IndentOutdentCommand and InsertListCommand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202890</commentid>
    <comment_count>1</comment_count>
      <attachid>51386</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-03-22 19:09:16 -0700</bug_when>
    <thetext>Created attachment 51386
first attempt to separate listifying/unlistifying code

This is my first attempt to separate two parts of doApply.  Maybe it makes sense to file another but just to land this patch first.  Svn diff is messy because it contains the changes to 19539 as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203949</commentid>
    <comment_count>2</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-03-25 02:20:23 -0700</bug_when>
    <thetext>Seems like a good refactoring to me.  The original method was long and the new function names help to clarify what the code is trying to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>234255</commentid>
    <comment_count>3</comment_count>
      <attachid>57889</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-06-04 09:49:43 -0700</bug_when>
    <thetext>Created attachment 57889
Isolates code for listifying/unlistifying paragraphs into seperate functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235322</commentid>
    <comment_count>4</comment_count>
      <attachid>57889</attachid>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2010-06-08 10:30:03 -0700</bug_when>
    <thetext>Comment on attachment 57889
Isolates code for listifying/unlistifying paragraphs into seperate functions.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235630</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-06-08 21:00:16 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/60877.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51386</attachid>
            <date>2010-03-22 19:09:16 -0700</date>
            <delta_ts>2010-06-04 09:49:43 -0700</delta_ts>
            <desc>first attempt to separate listifying/unlistifying code</desc>
            <filename>wd36430-sep</filename>
            <type>text/plain</type>
            <size>17153</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcAkocmV2aXNpb24gNTYzNjAp
CisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw3ICs4Myw4IEBACiAgICAgLy8gd2UgbW9kaWZpZWQgYWxsIHNlbGVjdGVkIHBhcmFn
cmFwaHMuCiAgICAgc3RhcnRPZlNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVT
dGFydCgpOwogICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IHN0
YXJ0T2ZOZXh0UGFyYWdyYXBoKHN0YXJ0T2ZTZWxlY3Rpb24pOwotICAgIHdoaWxlIChzdGFydE9m
Q3VycmVudFBhcmFncmFwaCAhPSBzdGFydE9mTGFzdFBhcmFncmFwaCkgeworICAgIHdoaWxlIChz
dGFydE9mQ3VycmVudFBhcmFncmFwaC5pc05vdE51bGwoKSAmJiBzdGFydE9mQ3VycmVudFBhcmFn
cmFwaC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKS0+aW5Eb2N1bWVudCgpCisgICAgICAgICAgICYm
IHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoICE9IHN0YXJ0T2ZMYXN0UGFyYWdyYXBoKSB7CiAgICAg
ICAgIC8vIGRvQXBwbHkoKSBtYXkgb3BlcmF0ZSBvbiBhbmQgcmVtb3ZlIHRoZSBsYXN0IHBhcmFn
cmFwaCBvZiB0aGUgc2VsZWN0aW9uIGZyb20gdGhlIGRvY3VtZW50IAogICAgICAgICAvLyBpZiBp
dCdzIGluIHRoZSBzYW1lIGxpc3QgaXRlbSBhcyBzdGFydE9mQ3VycmVudFBhcmFncmFwaC4gIFJl
dHVybiBlYXJseSB0byBhdm9pZCBhbiAKICAgICAgICAgLy8gaW5maW5pdGUgbG9vcCBhbmQgYmVj
YXVzZSB0aGVyZSBpcyBubyBtb3JlIHdvcmsgdG8gYmUgZG9uZS4KQEAgLTEwNCw2ICsxMDUsMTQy
IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBFbGVtZW50KiBsaXN0VG9BcHBlbmRO
b2RlKFBvc2l0aW9uIHBvc2l0aW9uLCBQb3NpdGlvbiBzdGFydCwgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbGlzdFRhZykKK3sKKyAgICBFbGVtZW50KiBsaXN0ID0gb3V0ZXJtb3N0RW5jbG9zaW5nTGlz
dChwb3NpdGlvbi5ub2RlKCkpOworICAgIHJldHVybiAobGlzdCAmJiAobGlzdC0+aGFzVGFnTmFt
ZShsaXN0VGFnKSAmJiAhbGlzdC0+Y29udGFpbnMoc3RhcnQubm9kZSgpKQorICAgICAgICAgICAg
ICAgICAgICAgJiYgZW5jbG9zaW5nVGFibGVDZWxsKHBvc2l0aW9uKSA9PSBlbmNsb3NpbmdUYWJs
ZUNlbGwoc3RhcnQpKSkgPyBsaXN0IDogMDsKK30KKworUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4g
SW5zZXJ0TGlzdENvbW1hbmQ6Omxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiBvcmlnaW5hbFN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsRW5kLCBjb25z
dCBRdWFsaWZpZWROYW1lJiBsaXN0VGFnKQoreworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9
IHN0YXJ0T2ZQYXJhZ3JhcGgob3JpZ2luYWxTdGFydCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVu
ZCA9IG9yaWdpbmFsRW5kOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdEVsZW1lbnQ7CisK
KyAgICAvLyBDaGVjayBmb3IgYWRqb2luaW5nIGxpc3RzLgorICAgIFZpc2libGVQb3NpdGlvbiBw
cmV2aW91c1Bvc2l0aW9uID0gc3RhcnQucHJldmlvdXModHJ1ZSk7CisgICAgVmlzaWJsZVBvc2l0
aW9uIG5leHRQb3NpdGlvbiA9IGVuZC5uZXh0KHRydWUpOworICAgIFJlZlB0cjxIVE1MRWxlbWVu
dD4gbGlzdEl0ZW1FbGVtZW50ID0gY3JlYXRlTGlzdEl0ZW1FbGVtZW50KGRvY3VtZW50KCkpOwor
ICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gcGxhY2Vob2xkZXIgPSBjcmVhdGVCcmVha0VsZW1lbnQo
ZG9jdW1lbnQoKSk7CisgICAgYXBwZW5kTm9kZShwbGFjZWhvbGRlciwgbGlzdEl0ZW1FbGVtZW50
KTsKKyAgICBFbGVtZW50KiBwcmV2aW91c0xpc3QgPSBsaXN0VG9BcHBlbmROb2RlKHN0YXJ0LnBy
ZXZpb3VzKHRydWUpLmRlZXBFcXVpdmFsZW50KCksIHN0YXJ0LmRlZXBFcXVpdmFsZW50KCksIGxp
c3RUYWcpOworICAgIEVsZW1lbnQqIG5leHRMaXN0ID0gbGlzdFRvQXBwZW5kTm9kZShlbmQubmV4
dCh0cnVlKS5kZWVwRXF1aXZhbGVudCgpLCBzdGFydC5kZWVwRXF1aXZhbGVudCgpLCBsaXN0VGFn
KTsKKworICAgIC8vIFBsYWNlIGxpc3QgaXRlbSBpbnRvIGFkam9pbmluZyBsaXN0cy4KKyAgICBp
ZiAocHJldmlvdXNMaXN0KQorICAgICAgICBhcHBlbmROb2RlKGxpc3RJdGVtRWxlbWVudCwgcHJl
dmlvdXNMaXN0KTsKKyAgICBlbHNlIGlmIChuZXh0TGlzdCkKKyAgICAgICAgaW5zZXJ0Tm9kZUF0
KGxpc3RJdGVtRWxlbWVudCwgUG9zaXRpb24obmV4dExpc3QsIDApKTsKKyAgICBlbHNlIHsKKyAg
ICAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0LgorICAgICAgICBsaXN0RWxlbWVudCA9IGNyZWF0ZUhU
TUxFbGVtZW50KGRvY3VtZW50KCksIGxpc3RUYWcpOworICAgICAgICBhcHBlbmROb2RlKGxpc3RJ
dGVtRWxlbWVudCwgbGlzdEVsZW1lbnQpOworCisgICAgICAgIGlmIChzdGFydCA9PSBlbmQgJiYg
aXNCbG9jayhzdGFydC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSkpIHsKKyAgICAgICAgICAgIC8v
IEluc2VydGluZyB0aGUgbGlzdCBpbnRvIGFuIGVtcHR5IHBhcmFncmFwaCB0aGF0IGlzbid0IGhl
bGQgb3BlbiAKKyAgICAgICAgICAgIC8vIGJ5IGEgYnIgb3IgYSAnXG4nLCB3aWxsIGludmFsaWRh
dGUgc3RhcnQgYW5kIGVuZC4gIEluc2VydCAKKyAgICAgICAgICAgIC8vIGEgcGxhY2Vob2xkZXIg
YW5kIHRoZW4gcmVjb21wdXRlIHN0YXJ0IGFuZCBlbmQuCisgICAgICAgICAgICBSZWZQdHI8Tm9k
ZT4gcGxhY2Vob2xkZXIgPSBpbnNlcnRCbG9ja1BsYWNlaG9sZGVyKHN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkpOworICAgICAgICAgICAgc3RhcnQgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ocGxh
Y2Vob2xkZXIuZ2V0KCksIDApKTsKKyAgICAgICAgICAgIGVuZCA9IHN0YXJ0OworICAgICAgICB9
CisKKyAgICAgICAgLy8gSW5zZXJ0IHRoZSBsaXN0IGF0IGEgcG9zaXRpb24gdmlzdWFsbHkgZXF1
aXZhbGVudCB0byBzdGFydCBvZiB0aGUKKyAgICAgICAgLy8gcGFyYWdyYXBoIHRoYXQgaXMgYmVp
bmcgbW92ZWQgaW50byB0aGUgbGlzdC4gCisgICAgICAgIC8vIFRyeSB0byBhdm9pZCBpbnNlcnRp
bmcgaXQgc29tZXdoZXJlIHdoZXJlIGl0IHdpbGwgYmUgc3Vycm91bmRlZCBieSAKKyAgICAgICAg
Ly8gaW5saW5lIGFuY2VzdG9ycyBvZiBzdGFydCwgc2luY2UgaXQgaXMgZWFzaWVyIGZvciBlZGl0
aW5nIHRvIHByb2R1Y2UgCisgICAgICAgIC8vIGNsZWFuIG1hcmt1cCB3aGVuIGlubGluZSBlbGVt
ZW50cyBhcmUgcHVzaGVkIGRvd24gYXMgZmFyIGFzIHBvc3NpYmxlLgorICAgICAgICBQb3NpdGlv
biBpbnNlcnRpb25Qb3Moc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpKTsKKyAgICAg
ICAgLy8gQWxzbyBhdm9pZCB0aGUgY29udGFpbmluZyBsaXN0IGl0ZW0uCisgICAgICAgIE5vZGUq
IGxpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChpbnNlcnRpb25Qb3Mubm9kZSgpKTsKKyAg
ICAgICAgaWYgKGxpc3RDaGlsZCAmJiBsaXN0Q2hpbGQtPmhhc1RhZ05hbWUobGlUYWcpKQorICAg
ICAgICAgICAgaW5zZXJ0aW9uUG9zID0gcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUobGlzdENo
aWxkKTsKKworICAgICAgICBpbnNlcnROb2RlQXQobGlzdEVsZW1lbnQsIGluc2VydGlvblBvcyk7
CisKKyAgICAgICAgLy8gV2UgaW5zZXJ0ZWQgdGhlIGxpc3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBj
b250ZW50IHdlJ3JlIGFib3V0IHRvIG1vdmUKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGFydCBv
ZiBjb250ZW50LCBzbyB3ZSBkb24ndCB0cnkgdG8gbW92ZSB0aGUgbGlzdCBpbnRvIGl0c2VsZi4g
IGJ1ZyAxOTA2NgorICAgICAgICBpZiAoaW5zZXJ0aW9uUG9zID09IHN0YXJ0LmRlZXBFcXVpdmFs
ZW50KCkpCisgICAgICAgICAgICBzdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgob3JpZ2luYWxTdGFy
dCk7CisgICAgICAgIHByZXZpb3VzTGlzdCA9IG91dGVybW9zdEVuY2xvc2luZ0xpc3QocHJldmlv
dXNQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSwgZW5jbG9zaW5nTGlzdChsaXN0RWxl
bWVudC5nZXQoKSkpOworICAgICAgICBuZXh0TGlzdCA9IG91dGVybW9zdEVuY2xvc2luZ0xpc3Qo
bmV4dFBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpLCBlbmNsb3NpbmdMaXN0KGxpc3RF
bGVtZW50LmdldCgpKSk7CisgICAgfQorICAgIG1vdmVQYXJhZ3JhcGgoc3RhcnQsIGVuZCwgVmlz
aWJsZVBvc2l0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSksIHRydWUpOworICAg
IGlmIChsaXN0RWxlbWVudCkgeworICAgICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhwcmV2aW91c0xp
c3QsIGxpc3RFbGVtZW50LmdldCgpKSkKKyAgICAgICAgICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVu
dHMocHJldmlvdXNMaXN0LCBsaXN0RWxlbWVudC5nZXQoKSk7CisgICAgICAgIGlmIChjYW5NZXJn
ZUxpc3RzKGxpc3RFbGVtZW50LmdldCgpLCBuZXh0TGlzdCkpCisgICAgICAgICAgICBtZXJnZUlk
ZW50aWNhbEVsZW1lbnRzKGxpc3RFbGVtZW50LmdldCgpLCBuZXh0TGlzdCk7CisgICAgfSBlbHNl
IGlmIChjYW5NZXJnZUxpc3RzKG5leHRMaXN0LCBwcmV2aW91c0xpc3QpKQorICAgICAgICBtZXJn
ZUlkZW50aWNhbEVsZW1lbnRzKHByZXZpb3VzTGlzdCwgbmV4dExpc3QpOworCisgICAgcmV0dXJu
IGxpc3RFbGVtZW50OworfQorCit2b2lkIEluc2VydExpc3RDb21tYW5kOjp1bmxpc3RpZnlQYXJh
Z3JhcGgoSFRNTEVsZW1lbnQqIGxpc3RDaGlsZE5vZGUsCisgICAgY29uc3QgVmlzaWJsZVBvc2l0
aW9uJiBvcmlnaW5hbFN0YXJ0LCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsRW5kKQor
eworICAgIEFTU0VSVChsaXN0Q2hpbGROb2RlKTsKKyAgICAvLyBSZW1vdmUgdGhlIGxpc3QgY2hs
aWxkLgorICAgIEhUTUxFbGVtZW50KiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3QobGlzdENoaWxk
Tm9kZSk7CisgICAgQVNTRVJUKGxpc3ROb2RlKTsKKyAgICBOb2RlKiBuZXh0TGlzdENoaWxkOwor
ICAgIE5vZGUqIHByZXZpb3VzTGlzdENoaWxkOworICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9
IG9yaWdpbmFsU3RhcnQ7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IG9yaWdpbmFsRW5kOwor
ICAgIGlmIChsaXN0Q2hpbGROb2RlLT5oYXNUYWdOYW1lKGxpVGFnKSkgeworICAgICAgICBzdGFy
dCA9IGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGlzdENoaWxkTm9kZSk7CisgICAg
ICAgIGVuZCA9IGxhc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShsaXN0Q2hpbGROb2RlKTsK
KyAgICAgICAgbmV4dExpc3RDaGlsZCA9IGxpc3RDaGlsZE5vZGUtPm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgIHByZXZpb3VzTGlzdENoaWxkID0gbGlzdENoaWxkTm9kZS0+cHJldmlvdXNTaWJsaW5n
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQSBwYXJhZ3JhcGggaXMgdmlzdWFsbHkgYSBs
aXN0IGl0ZW0gbWludXMgYSBsaXN0IG1hcmtlci4gIFRoZSBwYXJhZ3JhcGggd2lsbCBiZSBtb3Zl
ZC4KKyAgICAgICAgbmV4dExpc3RDaGlsZCA9IGVuY2xvc2luZ0xpc3RDaGlsZChlbmQubmV4dCgp
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKKyAgICAgICAgQVNTRVJUKG5leHRMaXN0Q2hpbGQg
IT0gbGlzdENoaWxkTm9kZSk7CisgICAgICAgIGlmIChlbmNsb3NpbmdMaXN0KG5leHRMaXN0Q2hp
bGQpICE9IGxpc3ROb2RlKQorICAgICAgICAgICAgbmV4dExpc3RDaGlsZCA9IDA7CisgICAgICAg
IHByZXZpb3VzTGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKHN0YXJ0LnByZXZpb3VzKCku
ZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAgICAgICBBU1NFUlQocHJldmlvdXNMaXN0Q2hp
bGQgIT0gbGlzdENoaWxkTm9kZSk7CisgICAgICAgIGlmIChlbmNsb3NpbmdMaXN0KHByZXZpb3Vz
TGlzdENoaWxkKSAhPSBsaXN0Tm9kZSkKKyAgICAgICAgICAgIHByZXZpb3VzTGlzdENoaWxkID0g
MDsKKyAgICB9CisgICAgLy8gV2hlbiByZW1vdmluZyBhIGxpc3QsIHdlIG11c3QgYWx3YXlzIGNy
ZWF0ZSBhIHBsYWNlaG9sZGVyIHRvIGFjdCBhcyBhIHBvaW50IG9mIGluc2VydGlvbgorICAgIC8v
IGZvciB0aGUgbGlzdCBjb250ZW50IGJlaW5nIHJlbW92ZWQuCisgICAgUmVmUHRyPEVsZW1lbnQ+
IHBsYWNlaG9sZGVyID0gY3JlYXRlQnJlYWtFbGVtZW50KGRvY3VtZW50KCkpOworICAgIFJlZlB0
cjxFbGVtZW50PiBub2RlVG9JbnNlcnQgPSBwbGFjZWhvbGRlcjsKKyAgICAvLyBJZiB0aGUgY29u
dGVudCBvZiB0aGUgbGlzdCBpdGVtIHdpbGwgYmUgbW92ZWQgaW50byBhbm90aGVyIGxpc3QsIHB1
dCBpdCBpbiBhIGxpc3QgaXRlbQorICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgY3JlYXRlIGFuIG9y
cGhhbmVkIGxpc3QgY2hpbGQuCisgICAgaWYgKGVuY2xvc2luZ0xpc3QobGlzdE5vZGUpKSB7Cisg
ICAgICAgIG5vZGVUb0luc2VydCA9IGNyZWF0ZUxpc3RJdGVtRWxlbWVudChkb2N1bWVudCgpKTsK
KyAgICAgICAgYXBwZW5kTm9kZShwbGFjZWhvbGRlciwgbm9kZVRvSW5zZXJ0KTsKKyAgICB9CisK
KyAgICBpZiAobmV4dExpc3RDaGlsZCAmJiBwcmV2aW91c0xpc3RDaGlsZCkgeworICAgICAgICAv
LyBXZSB3YW50IHRvIHB1bGwgbGlzdENoaWxkTm9kZSBvdXQgb2YgbGlzdE5vZGUsIGFuZCBwbGFj
ZSBpdCBiZWZvcmUgbmV4dExpc3RDaGlsZCAKKyAgICAgICAgLy8gYW5kIGFmdGVyIHByZXZpb3Vz
TGlzdENoaWxkLCBzbyB3ZSBzcGxpdCBsaXN0Tm9kZSBhbmQgaW5zZXJ0IGl0IGJldHdlZW4gdGhl
IHR3byBsaXN0cy4gIAorICAgICAgICAvLyBCdXQgdG8gc3BsaXQgbGlzdE5vZGUsIHdlIG11c3Qg
Zmlyc3Qgc3BsaXQgYW5jZXN0b3JzIG9mIGxpc3RDaGlsZE5vZGUgYmV0d2VlbiBpdCBhbmQgbGlz
dE5vZGUsCisgICAgICAgIC8vIGlmIGFueSBleGlzdC4KKyAgICAgICAgLy8gRklYTUU6IFdlIGFw
cGVhciB0byBzcGxpdCBhdCBuZXh0TGlzdENoaWxkIGFzIG9wcG9zZWQgdG8gbGlzdENoaWxkTm9k
ZSBzbyB0aGF0IHdoZW4gd2UgcmVtb3ZlCisgICAgICAgIC8vIGxpc3RDaGlsZE5vZGUgYmVsb3cg
aW4gbW92ZVBhcmFncmFwaHMsIHByZXZpb3VzTGlzdENoaWxkIHdpbGwgYmUgcmVtb3ZlZCBhbG9u
ZyB3aXRoIGl0IGlmIGl0IGlzIAorICAgICAgICAvLyB1bnJlbmRlcmVkLiBCdXQgd2Ugb3VnaHQg
dG8gcmVtb3ZlIG5leHRMaXN0Q2hpbGQgdG9vLCBpZiBpdCBpcyB1bnJlbmRlcmVkLgorICAgICAg
ICBzcGxpdEVsZW1lbnQobGlzdE5vZGUsIHNwbGl0VHJlZVRvTm9kZShuZXh0TGlzdENoaWxkLCBs
aXN0Tm9kZSkpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGVUb0luc2VydCwgbGlzdE5v
ZGUpOworICAgIH0gZWxzZSBpZiAobmV4dExpc3RDaGlsZCB8fCBsaXN0Q2hpbGROb2RlLT5wYXJl
bnROb2RlKCkgIT0gbGlzdE5vZGUpIHsKKyAgICAgICAgLy8gSnVzdCBiZWNhdXNlIGxpc3RDaGls
ZE5vZGUgaGFzIG5vIHByZXZpb3VzTGlzdENoaWxkIGRvZXNuJ3QgbWVhbiB0aGVyZSBpc24ndCBh
bnkgY29udGVudAorICAgICAgICAvLyBpbiBsaXN0Tm9kZSB0aGF0IGNvbWVzIGJlZm9yZSBsaXN0
Q2hpbGROb2RlLCBhcyBsaXN0Q2hpbGROb2RlIGNvdWxkIGhhdmUgYW5jZXN0b3JzCisgICAgICAg
IC8vIGJldHdlZW4gaXQgYW5kIGxpc3ROb2RlLiBTbywgd2Ugc3BsaXQgdXAgdG8gbGlzdE5vZGUg
YmVmb3JlIGluc2VydGluZyB0aGUgcGxhY2Vob2xkZXIKKyAgICAgICAgLy8gd2hlcmUgd2UncmUg
YWJvdXQgdG8gbW92ZSBsaXN0Q2hpbGROb2RlIHRvLgorICAgICAgICBpZiAobGlzdENoaWxkTm9k
ZS0+cGFyZW50Tm9kZSgpICE9IGxpc3ROb2RlKQorICAgICAgICAgICAgc3BsaXRFbGVtZW50KGxp
c3ROb2RlLCBzcGxpdFRyZWVUb05vZGUobGlzdENoaWxkTm9kZSwgbGlzdE5vZGUpLmdldCgpKTsK
KyAgICAgICAgaW5zZXJ0Tm9kZUJlZm9yZShub2RlVG9JbnNlcnQsIGxpc3ROb2RlKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGVUb0luc2VydCwgbGlzdE5vZGUpOwor
CisgICAgVmlzaWJsZVBvc2l0aW9uIGluc2VydGlvblBvaW50ID0gVmlzaWJsZVBvc2l0aW9uKFBv
c2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSk7CisgICAgbW92ZVBhcmFncmFwaHMoc3RhcnQs
IGVuZCwgaW5zZXJ0aW9uUG9pbnQsIHRydWUpOworfQorCiB2b2lkIEluc2VydExpc3RDb21tYW5k
Ojpkb0FwcGx5KCkKIHsKICAgICBpZiAoZW5kaW5nU2VsZWN0aW9uKCkuaXNOb25lKCkpCkBAIC0x
MzMsMTM2ICsyNzAsMjUgQEAKICAgICAvLyBiZSByZW5hbWVkIGFuZCBkZXBsb3llZCBpbnNpZGUg
c2V0RW5kaW5nU2VsZWN0aW9uKCkuCiAgICAgTm9kZSogc2VsZWN0aW9uTm9kZSA9IGVuZGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCkubm9kZSgpOwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUgbGlzdFRh
ZyA9IChtX3R5cGUgPT0gT3JkZXJlZExpc3QpID8gb2xUYWcgOiB1bFRhZzsKLSAgICBOb2RlKiBs
aXN0Q2hpbGROb2RlID0gZW5jbG9zaW5nTGlzdENoaWxkKHNlbGVjdGlvbk5vZGUpOworICAgIEhU
TUxFbGVtZW50KiBsaXN0Q2hpbGROb2RlID0gZW5jbG9zaW5nTGlzdENoaWxkKHNlbGVjdGlvbk5v
ZGUpOwogICAgIGJvb2wgc3dpdGNoTGlzdFR5cGUgPSBmYWxzZTsKICAgICBpZiAobGlzdENoaWxk
Tm9kZSkgewotICAgICAgICAvLyBSZW1vdmUgdGhlIGxpc3QgY2hsaWxkLgogICAgICAgICBIVE1M
RWxlbWVudCogbGlzdE5vZGUgPSBlbmNsb3NpbmdMaXN0KGxpc3RDaGlsZE5vZGUpOworICAgICAg
ICAvLyBGSVhNRTogSXQncyBub3QgZWZmaWNpZW50IHRvIGluc2VydCBhIGxpc3QgZWxlbWVudCBq
dXN0IHNvIHRoYXQgd2UgY2FuIHJlbW92ZSBsYXRlci4KKyAgICAgICAgLy8gSXQgYWxzbyBhbHdh
eXMgaW5zZXJ0IHVub3JkZXJlZCBsaXN0IHNvIHRoYXQgaXQgYmVoYXZlcyBkaWZmZXJlbnRseSBk
ZXBlbmRpbmcgb24gbV90eXBlLgogICAgICAgICBpZiAoIWxpc3ROb2RlKQogICAgICAgICAgICAg
bGlzdE5vZGUgPSBmaXhPcnBoYW5lZExpc3RDaGlsZChsaXN0Q2hpbGROb2RlKTsKICAgICAgICAg
aWYgKCFsaXN0Tm9kZS0+aGFzVGFnTmFtZShsaXN0VGFnKSkKICAgICAgICAgICAgIC8vIGxpc3RD
aGlsZE5vZGUgd2lsbCBiZSByZW1vdmVkIGZyb20gdGhlIGxpc3QgYW5kIGEgbGlzdCBvZiB0eXBl
IG1fdHlwZSB3aWxsIGJlIGNyZWF0ZWQuCiAgICAgICAgICAgICBzd2l0Y2hMaXN0VHlwZSA9IHRy
dWU7Ci0gICAgICAgIE5vZGUqIG5leHRMaXN0Q2hpbGQ7Ci0gICAgICAgIE5vZGUqIHByZXZpb3Vz
TGlzdENoaWxkOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQ7Ci0gICAgICAgIFZpc2li
bGVQb3NpdGlvbiBlbmQ7Ci0gICAgICAgIGlmIChsaXN0Q2hpbGROb2RlLT5oYXNUYWdOYW1lKGxp
VGFnKSkgewotICAgICAgICAgICAgc3RhcnQgPSBmaXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JO
b2RlKGxpc3RDaGlsZE5vZGUpOwotICAgICAgICAgICAgZW5kID0gbGFzdERlZXBFZGl0aW5nUG9z
aXRpb25Gb3JOb2RlKGxpc3RDaGlsZE5vZGUpOwotICAgICAgICAgICAgbmV4dExpc3RDaGlsZCA9
IGxpc3RDaGlsZE5vZGUtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICBwcmV2aW91c0xpc3RD
aGlsZCA9IGxpc3RDaGlsZE5vZGUtPnByZXZpb3VzU2libGluZygpOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gQSBwYXJhZ3JhcGggaXMgdmlzdWFsbHkgYSBsaXN0IGl0ZW0gbWlu
dXMgYSBsaXN0IG1hcmtlci4gIFRoZSBwYXJhZ3JhcGggd2lsbCBiZSBtb3ZlZC4KLSAgICAgICAg
ICAgIHN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKSk7Ci0gICAgICAgICAgICBlbmQgPSBlbmRPZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24o
KS52aXNpYmxlRW5kKCkpOwotICAgICAgICAgICAgbmV4dExpc3RDaGlsZCA9IGVuY2xvc2luZ0xp
c3RDaGlsZChlbmQubmV4dCgpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChuZXh0TGlzdENoaWxkICE9IGxpc3RDaGlsZE5vZGUpOwotICAgICAgICAgICAgaWYg
KGVuY2xvc2luZ0xpc3QobmV4dExpc3RDaGlsZCkgIT0gbGlzdE5vZGUpCi0gICAgICAgICAgICAg
ICAgbmV4dExpc3RDaGlsZCA9IDA7Ci0gICAgICAgICAgICBwcmV2aW91c0xpc3RDaGlsZCA9IGVu
Y2xvc2luZ0xpc3RDaGlsZChzdGFydC5wcmV2aW91cygpLmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChwcmV2aW91c0xpc3RDaGlsZCAhPSBsaXN0Q2hpbGROb2Rl
KTsKLSAgICAgICAgICAgIGlmIChlbmNsb3NpbmdMaXN0KHByZXZpb3VzTGlzdENoaWxkKSAhPSBs
aXN0Tm9kZSkKLSAgICAgICAgICAgICAgICBwcmV2aW91c0xpc3RDaGlsZCA9IDA7Ci0gICAgICAg
IH0KLSAgICAgICAgLy8gV2hlbiByZW1vdmluZyBhIGxpc3QsIHdlIG11c3QgYWx3YXlzIGNyZWF0
ZSBhIHBsYWNlaG9sZGVyIHRvIGFjdCBhcyBhIHBvaW50IG9mIGluc2VydGlvbgotICAgICAgICAv
LyBmb3IgdGhlIGxpc3QgY29udGVudCBiZWluZyByZW1vdmVkLgotICAgICAgICBSZWZQdHI8RWxl
bWVudD4gcGxhY2Vob2xkZXIgPSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAg
ICAgIFJlZlB0cjxFbGVtZW50PiBub2RlVG9JbnNlcnQgPSBwbGFjZWhvbGRlcjsKLSAgICAgICAg
Ly8gSWYgdGhlIGNvbnRlbnQgb2YgdGhlIGxpc3QgaXRlbSB3aWxsIGJlIG1vdmVkIGludG8gYW5v
dGhlciBsaXN0LCBwdXQgaXQgaW4gYSBsaXN0IGl0ZW0KLSAgICAgICAgLy8gc28gdGhhdCB3ZSBk
b24ndCBjcmVhdGUgYW4gb3JwaGFuZWQgbGlzdCBjaGlsZC4KLSAgICAgICAgaWYgKGVuY2xvc2lu
Z0xpc3QobGlzdE5vZGUpKSB7Ci0gICAgICAgICAgICBub2RlVG9JbnNlcnQgPSBjcmVhdGVMaXN0
SXRlbUVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgICAgICBhcHBlbmROb2RlKHBsYWNlaG9s
ZGVyLCBub2RlVG9JbnNlcnQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAobmV4
dExpc3RDaGlsZCAmJiBwcmV2aW91c0xpc3RDaGlsZCkgewotICAgICAgICAgICAgLy8gV2Ugd2Fu
dCB0byBwdWxsIGxpc3RDaGlsZE5vZGUgb3V0IG9mIGxpc3ROb2RlLCBhbmQgcGxhY2UgaXQgYmVm
b3JlIG5leHRMaXN0Q2hpbGQgCi0gICAgICAgICAgICAvLyBhbmQgYWZ0ZXIgcHJldmlvdXNMaXN0
Q2hpbGQsIHNvIHdlIHNwbGl0IGxpc3ROb2RlIGFuZCBpbnNlcnQgaXQgYmV0d2VlbiB0aGUgdHdv
IGxpc3RzLiAgCi0gICAgICAgICAgICAvLyBCdXQgdG8gc3BsaXQgbGlzdE5vZGUsIHdlIG11c3Qg
Zmlyc3Qgc3BsaXQgYW5jZXN0b3JzIG9mIGxpc3RDaGlsZE5vZGUgYmV0d2VlbiBpdCBhbmQgbGlz
dE5vZGUsCi0gICAgICAgICAgICAvLyBpZiBhbnkgZXhpc3QuCi0gICAgICAgICAgICAvLyBGSVhN
RTogV2UgYXBwZWFyIHRvIHNwbGl0IGF0IG5leHRMaXN0Q2hpbGQgYXMgb3Bwb3NlZCB0byBsaXN0
Q2hpbGROb2RlIHNvIHRoYXQgd2hlbiB3ZSByZW1vdmUKLSAgICAgICAgICAgIC8vIGxpc3RDaGls
ZE5vZGUgYmVsb3cgaW4gbW92ZVBhcmFncmFwaHMsIHByZXZpb3VzTGlzdENoaWxkIHdpbGwgYmUg
cmVtb3ZlZCBhbG9uZyB3aXRoIGl0IGlmIGl0IGlzIAotICAgICAgICAgICAgLy8gdW5yZW5kZXJl
ZC4gQnV0IHdlIG91Z2h0IHRvIHJlbW92ZSBuZXh0TGlzdENoaWxkIHRvbywgaWYgaXQgaXMgdW5y
ZW5kZXJlZC4KLSAgICAgICAgICAgIHNwbGl0RWxlbWVudChsaXN0Tm9kZSwgc3BsaXRUcmVlVG9O
b2RlKG5leHRMaXN0Q2hpbGQsIGxpc3ROb2RlKSk7Ci0gICAgICAgICAgICBpbnNlcnROb2RlQmVm
b3JlKG5vZGVUb0luc2VydCwgbGlzdE5vZGUpOwotICAgICAgICB9IGVsc2UgaWYgKG5leHRMaXN0
Q2hpbGQgfHwgbGlzdENoaWxkTm9kZS0+cGFyZW50Tm9kZSgpICE9IGxpc3ROb2RlKSB7Ci0gICAg
ICAgICAgICAvLyBKdXN0IGJlY2F1c2UgbGlzdENoaWxkTm9kZSBoYXMgbm8gcHJldmlvdXNMaXN0
Q2hpbGQgZG9lc24ndCBtZWFuIHRoZXJlIGlzbid0IGFueSBjb250ZW50Ci0gICAgICAgICAgICAv
LyBpbiBsaXN0Tm9kZSB0aGF0IGNvbWVzIGJlZm9yZSBsaXN0Q2hpbGROb2RlLCBhcyBsaXN0Q2hp
bGROb2RlIGNvdWxkIGhhdmUgYW5jZXN0b3JzCi0gICAgICAgICAgICAvLyBiZXR3ZWVuIGl0IGFu
ZCBsaXN0Tm9kZS4gU28sIHdlIHNwbGl0IHVwIHRvIGxpc3ROb2RlIGJlZm9yZSBpbnNlcnRpbmcg
dGhlIHBsYWNlaG9sZGVyCi0gICAgICAgICAgICAvLyB3aGVyZSB3ZSdyZSBhYm91dCB0byBtb3Zl
IGxpc3RDaGlsZE5vZGUgdG8uCi0gICAgICAgICAgICBpZiAobGlzdENoaWxkTm9kZS0+cGFyZW50
Tm9kZSgpICE9IGxpc3ROb2RlKQotICAgICAgICAgICAgICAgIHNwbGl0RWxlbWVudChsaXN0Tm9k
ZSwgc3BsaXRUcmVlVG9Ob2RlKGxpc3RDaGlsZE5vZGUsIGxpc3ROb2RlKS5nZXQoKSk7Ci0gICAg
ICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGVUb0luc2VydCwgbGlzdE5vZGUpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIGluc2VydE5vZGVBZnRlcihub2RlVG9JbnNlcnQsIGxpc3RO
b2RlKTsKLSAgICAgICAgCi0gICAgICAgIFZpc2libGVQb3NpdGlvbiBpbnNlcnRpb25Qb2ludCA9
IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihwbGFjZWhvbGRlci5nZXQoKSwgMCkpOwotICAgICAg
ICBtb3ZlUGFyYWdyYXBocyhzdGFydCwgZW5kLCBpbnNlcnRpb25Qb2ludCwgdHJ1ZSk7CisgICAg
ICAgIHVubGlzdGlmeVBhcmFncmFwaChsaXN0Q2hpbGROb2RlLCBzdGFydE9mUGFyYWdyYXBoKGVu
ZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSwKKyAgICAgICAgICAgICAgICAgICBlbmRP
ZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCkpKTsKICAgICB9CisKICAg
ICBpZiAoIWxpc3RDaGlsZE5vZGUgfHwgc3dpdGNoTGlzdFR5cGUgfHwgbV9mb3JjZUNyZWF0ZUxp
c3QpIHsKLSAgICAgICAgLy8gQ3JlYXRlIGxpc3QuCi0gICAgICAgIFZpc2libGVQb3NpdGlvbiBv
cmlnaW5hbFN0YXJ0ID0gZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCk7Ci0gICAgICAg
IFZpc2libGVQb3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgob3JpZ2luYWxTdGFydCk7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSBlbmRPZlBhcmFncmFwaChlbmRpbmdTZWxl
Y3Rpb24oKS52aXNpYmxlRW5kKCkpOwotICAgICAgICAKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGFk
am9pbmluZyBsaXN0cy4KLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzUG9zaXRpb24g
PSBzdGFydC5wcmV2aW91cyh0cnVlKTsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQb3Np
dGlvbiA9IGVuZC5uZXh0KHRydWUpOwotICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3RJ
dGVtRWxlbWVudCA9IGNyZWF0ZUxpc3RJdGVtRWxlbWVudChkb2N1bWVudCgpKTsKLSAgICAgICAg
UmVmUHRyPEhUTUxFbGVtZW50PiBwbGFjZWhvbGRlciA9IGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1
bWVudCgpKTsKLSAgICAgICAgYXBwZW5kTm9kZShwbGFjZWhvbGRlciwgbGlzdEl0ZW1FbGVtZW50
KTsKLSAgICAgICAgRWxlbWVudCogcHJldmlvdXNMaXN0ID0gb3V0ZXJtb3N0RW5jbG9zaW5nTGlz
dChwcmV2aW91c1Bvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKTsKLSAgICAgICAgRWxl
bWVudCogbmV4dExpc3QgPSBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KG5leHRQb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLm5vZGUoKSk7Ci0gICAgICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHN0YXJ0LmRl
ZXBFcXVpdmFsZW50KCkubm9kZSgpOwotICAgICAgICBOb2RlKiBwcmV2aW91c0NlbGwgPSBlbmNs
b3NpbmdUYWJsZUNlbGwocHJldmlvdXNQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAg
ICAgTm9kZSogbmV4dENlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwobmV4dFBvc2l0aW9uLmRlZXBF
cXVpdmFsZW50KCkpOwotICAgICAgICBOb2RlKiBjdXJyZW50Q2VsbCA9IGVuY2xvc2luZ1RhYmxl
Q2VsbChzdGFydC5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgaWYgKHByZXZpb3VzTGlzdCAm
JiAoIXByZXZpb3VzTGlzdC0+aGFzVGFnTmFtZShsaXN0VGFnKSB8fCBzdGFydE5vZGUtPmlzRGVz
Y2VuZGFudE9mKHByZXZpb3VzTGlzdCkgfHwgcHJldmlvdXNDZWxsICE9IGN1cnJlbnRDZWxsKSkK
LSAgICAgICAgICAgIHByZXZpb3VzTGlzdCA9IDA7Ci0gICAgICAgIGlmIChuZXh0TGlzdCAmJiAo
IW5leHRMaXN0LT5oYXNUYWdOYW1lKGxpc3RUYWcpIHx8IHN0YXJ0Tm9kZS0+aXNEZXNjZW5kYW50
T2YobmV4dExpc3QpIHx8IG5leHRDZWxsICE9IGN1cnJlbnRDZWxsKSkKLSAgICAgICAgICAgIG5l
eHRMaXN0ID0gMDsKLSAgICAgICAgLy8gUGxhY2UgbGlzdCBpdGVtIGludG8gYWRqb2luaW5nIGxp
c3RzLgotICAgICAgICBpZiAocHJldmlvdXNMaXN0KQotICAgICAgICAgICAgYXBwZW5kTm9kZShs
aXN0SXRlbUVsZW1lbnQsIHByZXZpb3VzTGlzdCk7Ci0gICAgICAgIGVsc2UgaWYgKG5leHRMaXN0
KQotICAgICAgICAgICAgaW5zZXJ0Tm9kZUF0KGxpc3RJdGVtRWxlbWVudCwgUG9zaXRpb24obmV4
dExpc3QsIDApKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGxp
c3QuCi0gICAgICAgICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3RFbGVtZW50ID0gbV90eXBl
ID09IE9yZGVyZWRMaXN0ID8gY3JlYXRlT3JkZXJlZExpc3RFbGVtZW50KGRvY3VtZW50KCkpIDog
Y3JlYXRlVW5vcmRlcmVkTGlzdEVsZW1lbnQoZG9jdW1lbnQoKSk7CisgICAgICAgIFJlZlB0cjxI
VE1MRWxlbWVudD4gbGlzdEVsZW1lbnQgPSBsaXN0aWZ5UGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlv
bigpLnZpc2libGVTdGFydCgpLCBlbmRPZlBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNp
YmxlRW5kKCkpLCBsaXN0VGFnKTsKKyAgICAgICAgaWYgKGxpc3RFbGVtZW50KQogICAgICAgICAg
ICAgbV9saXN0RWxlbWVudCA9IGxpc3RFbGVtZW50OwotICAgICAgICAgICAgYXBwZW5kTm9kZShs
aXN0SXRlbUVsZW1lbnQsIGxpc3RFbGVtZW50KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKHN0YXJ0ID09IGVuZCAmJiBpc0Jsb2NrKHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgp
KSkgewotICAgICAgICAgICAgICAgIC8vIEluc2VydGluZyB0aGUgbGlzdCBpbnRvIGFuIGVtcHR5
IHBhcmFncmFwaCB0aGF0IGlzbid0IGhlbGQgb3BlbiAKLSAgICAgICAgICAgICAgICAvLyBieSBh
IGJyIG9yIGEgJ1xuJywgd2lsbCBpbnZhbGlkYXRlIHN0YXJ0IGFuZCBlbmQuICBJbnNlcnQgCi0g
ICAgICAgICAgICAgICAgLy8gYSBwbGFjZWhvbGRlciBhbmQgdGhlbiByZWNvbXB1dGUgc3RhcnQg
YW5kIGVuZC4KLSAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gcGxhY2Vob2xkZXIgPSBpbnNl
cnRCbG9ja1BsYWNlaG9sZGVyKHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICAgICAg
ICAgIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAw
KSk7Ci0gICAgICAgICAgICAgICAgZW5kID0gc3RhcnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIEluc2VydCB0aGUgbGlzdCBhdCBhIHBvc2l0aW9uIHZpc3Vh
bGx5IGVxdWl2YWxlbnQgdG8gc3RhcnQgb2YgdGhlCi0gICAgICAgICAgICAvLyBwYXJhZ3JhcGgg
dGhhdCBpcyBiZWluZyBtb3ZlZCBpbnRvIHRoZSBsaXN0LiAKLSAgICAgICAgICAgIC8vIFRyeSB0
byBhdm9pZCBpbnNlcnRpbmcgaXQgc29tZXdoZXJlIHdoZXJlIGl0IHdpbGwgYmUgc3Vycm91bmRl
ZCBieSAKLSAgICAgICAgICAgIC8vIGlubGluZSBhbmNlc3RvcnMgb2Ygc3RhcnQsIHNpbmNlIGl0
IGlzIGVhc2llciBmb3IgZWRpdGluZyB0byBwcm9kdWNlIAotICAgICAgICAgICAgLy8gY2xlYW4g
bWFya3VwIHdoZW4gaW5saW5lIGVsZW1lbnRzIGFyZSBwdXNoZWQgZG93biBhcyBmYXIgYXMgcG9z
c2libGUuCi0gICAgICAgICAgICBQb3NpdGlvbiBpbnNlcnRpb25Qb3Moc3RhcnQuZGVlcEVxdWl2
YWxlbnQoKS51cHN0cmVhbSgpKTsKLSAgICAgICAgICAgIC8vIEFsc28gYXZvaWQgdGhlIGNvbnRh
aW5pbmcgbGlzdCBpdGVtLgotICAgICAgICAgICAgTm9kZSogbGlzdENoaWxkID0gZW5jbG9zaW5n
TGlzdENoaWxkKGluc2VydGlvblBvcy5ub2RlKCkpOwotICAgICAgICAgICAgaWYgKGxpc3RDaGls
ZCAmJiBsaXN0Q2hpbGQtPmhhc1RhZ05hbWUobGlUYWcpKQotICAgICAgICAgICAgICAgIGluc2Vy
dGlvblBvcyA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKGxpc3RDaGlsZCk7Ci0KLSAgICAg
ICAgICAgIGluc2VydE5vZGVBdChsaXN0RWxlbWVudCwgaW5zZXJ0aW9uUG9zKTsKLQotICAgICAg
ICAgICAgLy8gV2UgaW5zZXJ0ZWQgdGhlIGxpc3QgYXQgdGhlIHN0YXJ0IG9mIHRoZSBjb250ZW50
IHdlJ3JlIGFib3V0IHRvIG1vdmUKLSAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhcnQgb2Yg
Y29udGVudCwgc28gd2UgZG9uJ3QgdHJ5IHRvIG1vdmUgdGhlIGxpc3QgaW50byBpdHNlbGYuICBi
dWcgMTkwNjYKLSAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb3MgPT0gc3RhcnQuZGVlcEVxdWl2
YWxlbnQoKSkKLSAgICAgICAgICAgICAgICBzdGFydCA9IHN0YXJ0T2ZQYXJhZ3JhcGgob3JpZ2lu
YWxTdGFydCk7Ci0gICAgICAgIH0KLSAgICAgICAgbW92ZVBhcmFncmFwaChzdGFydCwgZW5kLCBW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24ocGxhY2Vob2xkZXIuZ2V0KCksIDApKSwgdHJ1ZSk7Ci0g
ICAgICAgIGlmIChuZXh0TGlzdCAmJiBwcmV2aW91c0xpc3QpCi0gICAgICAgICAgICBtZXJnZUlk
ZW50aWNhbEVsZW1lbnRzKHByZXZpb3VzTGlzdCwgbmV4dExpc3QpOwogICAgIH0KIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57889</attachid>
            <date>2010-06-04 09:49:43 -0700</date>
            <delta_ts>2010-06-08 10:30:03 -0700</delta_ts>
            <desc>Isolates code for listifying/unlistifying paragraphs into seperate functions.</desc>
            <filename>fix36430</filename>
            <type>text/plain</type>
            <size>18025</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MDY4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjEgQEAKKzIwMTAtMDYtMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5z
ZXJ0TGlzdENvbW1hbmQgbmVlZHMgY2xlYW51cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY0MzAKKworICAgICAgICBTZXBhcmF0ZWQgY29kZSBmb3Ig
bGlzdGlmeWluZyBhbmQgdW5saXN0aWZ5aW5nIHBhcmFncmFwaHMuCisgICAgICAgIEFsc28gaXNv
bGF0ZWQgdGhlIGRlcGVuZGVuY3kgb24gdGhlIHNlbGVjdGlvbiBpbiBkb0FwcGx5LgorCisgICAg
ICAgIE5vIHRlc3QgaXMgYWRkZWQgc2luY2UgdGhpcyBpcyBhIGNsZWFudXAuCisKKyAgICAgICAg
KiBlZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2Vy
dExpc3RDb21tYW5kOjpkb0FwcGx5KTogaXNvbGF0ZWQgY29kZSB0byBsaXN0aWZ5IC8gdW5saXN0
aWZ5IHBhcmFncmFwaHMKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydExpc3RDb21tYW5kOjp1bmxp
c3RpZnlQYXJhZ3JhcGgpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlzdENvbW1h
bmQ6Omxpc3RpZnlQYXJhZ3JhcGgpOiBkaXR0bworICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0TGlz
dENvbW1hbmQuaDoKKwogMjAxMC0wNi0wNCAgTmlraXRhIFZhc2lseWV2ICA8bWVAZWx2MXMucnU+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvZWRp
dGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L0luc2VydExpc3RDb21tYW5kLmNwcAkocmV2aXNpb24gNjA2ODIpCisrKyBXZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMsMTM0ICsxNDMs
MTUzIEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICBpZiAoIWxp
c3ROb2RlLT5oYXNUYWdOYW1lKGxpc3RUYWcpKQogICAgICAgICAgICAgLy8gbGlzdENoaWxkTm9k
ZSB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBhbmQgYSBsaXN0IG9mIHR5cGUgbV90eXBl
IHdpbGwgYmUgY3JlYXRlZC4KICAgICAgICAgICAgIHN3aXRjaExpc3RUeXBlID0gdHJ1ZTsKLSAg
ICAgICAgTm9kZSogbmV4dExpc3RDaGlsZDsKLSAgICAgICAgTm9kZSogcHJldmlvdXNMaXN0Q2hp
bGQ7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydDsKLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIGVuZDsKLSAgICAgICAgaWYgKGxpc3RDaGlsZE5vZGUtPmhhc1RhZ05hbWUobGlUYWcpKSB7
Ci0gICAgICAgICAgICBzdGFydCA9IGZpcnN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGlz
dENoaWxkTm9kZSk7Ci0gICAgICAgICAgICBlbmQgPSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZv
ck5vZGUobGlzdENoaWxkTm9kZSk7Ci0gICAgICAgICAgICBuZXh0TGlzdENoaWxkID0gbGlzdENo
aWxkTm9kZS0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHByZXZpb3VzTGlzdENoaWxkID0g
bGlzdENoaWxkTm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAvLyBBIHBhcmFncmFwaCBpcyB2aXN1YWxseSBhIGxpc3QgaXRlbSBtaW51cyBhIGxp
c3QgbWFya2VyLiAgVGhlIHBhcmFncmFwaCB3aWxsIGJlIG1vdmVkLgotICAgICAgICAgICAgc3Rh
cnQgPSBzdGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsK
LSAgICAgICAgICAgIGVuZCA9IGVuZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2li
bGVFbmQoKSk7Ci0gICAgICAgICAgICBuZXh0TGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxk
KGVuZC5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwotICAgICAgICAgICAgQVNTRVJU
KG5leHRMaXN0Q2hpbGQgIT0gbGlzdENoaWxkTm9kZSk7Ci0gICAgICAgICAgICBpZiAoZW5jbG9z
aW5nTGlzdChuZXh0TGlzdENoaWxkKSAhPSBsaXN0Tm9kZSkKLSAgICAgICAgICAgICAgICBuZXh0
TGlzdENoaWxkID0gMDsKLSAgICAgICAgICAgIHByZXZpb3VzTGlzdENoaWxkID0gZW5jbG9zaW5n
TGlzdENoaWxkKHN0YXJ0LnByZXZpb3VzKCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwotICAg
ICAgICAgICAgQVNTRVJUKHByZXZpb3VzTGlzdENoaWxkICE9IGxpc3RDaGlsZE5vZGUpOwotICAg
ICAgICAgICAgaWYgKGVuY2xvc2luZ0xpc3QocHJldmlvdXNMaXN0Q2hpbGQpICE9IGxpc3ROb2Rl
KQotICAgICAgICAgICAgICAgIHByZXZpb3VzTGlzdENoaWxkID0gMDsKLSAgICAgICAgfQotICAg
ICAgICAvLyBXaGVuIHJlbW92aW5nIGEgbGlzdCwgd2UgbXVzdCBhbHdheXMgY3JlYXRlIGEgcGxh
Y2Vob2xkZXIgdG8gYWN0IGFzIGEgcG9pbnQgb2YgaW5zZXJ0aW9uCi0gICAgICAgIC8vIGZvciB0
aGUgbGlzdCBjb250ZW50IGJlaW5nIHJlbW92ZWQuCi0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBw
bGFjZWhvbGRlciA9IGNyZWF0ZUJyZWFrRWxlbWVudChkb2N1bWVudCgpKTsKLSAgICAgICAgUmVm
UHRyPEVsZW1lbnQ+IG5vZGVUb0luc2VydCA9IHBsYWNlaG9sZGVyOwotICAgICAgICAvLyBJZiB0
aGUgY29udGVudCBvZiB0aGUgbGlzdCBpdGVtIHdpbGwgYmUgbW92ZWQgaW50byBhbm90aGVyIGxp
c3QsIHB1dCBpdCBpbiBhIGxpc3QgaXRlbQotICAgICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IGNy
ZWF0ZSBhbiBvcnBoYW5lZCBsaXN0IGNoaWxkLgotICAgICAgICBpZiAoZW5jbG9zaW5nTGlzdChs
aXN0Tm9kZSkpIHsKLSAgICAgICAgICAgIG5vZGVUb0luc2VydCA9IGNyZWF0ZUxpc3RJdGVtRWxl
bWVudChkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIGFwcGVuZE5vZGUocGxhY2Vob2xkZXIsIG5v
ZGVUb0luc2VydCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChuZXh0TGlzdENo
aWxkICYmIHByZXZpb3VzTGlzdENoaWxkKSB7Ci0gICAgICAgICAgICAvLyBXZSB3YW50IHRvIHB1
bGwgbGlzdENoaWxkTm9kZSBvdXQgb2YgbGlzdE5vZGUsIGFuZCBwbGFjZSBpdCBiZWZvcmUgbmV4
dExpc3RDaGlsZCAKLSAgICAgICAgICAgIC8vIGFuZCBhZnRlciBwcmV2aW91c0xpc3RDaGlsZCwg
c28gd2Ugc3BsaXQgbGlzdE5vZGUgYW5kIGluc2VydCBpdCBiZXR3ZWVuIHRoZSB0d28gbGlzdHMu
ICAKLSAgICAgICAgICAgIC8vIEJ1dCB0byBzcGxpdCBsaXN0Tm9kZSwgd2UgbXVzdCBmaXJzdCBz
cGxpdCBhbmNlc3RvcnMgb2YgbGlzdENoaWxkTm9kZSBiZXR3ZWVuIGl0IGFuZCBsaXN0Tm9kZSwK
LSAgICAgICAgICAgIC8vIGlmIGFueSBleGlzdC4KLSAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBh
cHBlYXIgdG8gc3BsaXQgYXQgbmV4dExpc3RDaGlsZCBhcyBvcHBvc2VkIHRvIGxpc3RDaGlsZE5v
ZGUgc28gdGhhdCB3aGVuIHdlIHJlbW92ZQotICAgICAgICAgICAgLy8gbGlzdENoaWxkTm9kZSBi
ZWxvdyBpbiBtb3ZlUGFyYWdyYXBocywgcHJldmlvdXNMaXN0Q2hpbGQgd2lsbCBiZSByZW1vdmVk
IGFsb25nIHdpdGggaXQgaWYgaXQgaXMgCi0gICAgICAgICAgICAvLyB1bnJlbmRlcmVkLiBCdXQg
d2Ugb3VnaHQgdG8gcmVtb3ZlIG5leHRMaXN0Q2hpbGQgdG9vLCBpZiBpdCBpcyB1bnJlbmRlcmVk
LgotICAgICAgICAgICAgc3BsaXRFbGVtZW50KGxpc3ROb2RlLCBzcGxpdFRyZWVUb05vZGUobmV4
dExpc3RDaGlsZCwgbGlzdE5vZGUpKTsKLSAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUobm9k
ZVRvSW5zZXJ0LCBsaXN0Tm9kZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAobmV4dExpc3RDaGlsZCB8
fCBsaXN0Q2hpbGROb2RlLT5wYXJlbnROb2RlKCkgIT0gbGlzdE5vZGUpIHsKLSAgICAgICAgICAg
IC8vIEp1c3QgYmVjYXVzZSBsaXN0Q2hpbGROb2RlIGhhcyBubyBwcmV2aW91c0xpc3RDaGlsZCBk
b2Vzbid0IG1lYW4gdGhlcmUgaXNuJ3QgYW55IGNvbnRlbnQKLSAgICAgICAgICAgIC8vIGluIGxp
c3ROb2RlIHRoYXQgY29tZXMgYmVmb3JlIGxpc3RDaGlsZE5vZGUsIGFzIGxpc3RDaGlsZE5vZGUg
Y291bGQgaGF2ZSBhbmNlc3RvcnMKLSAgICAgICAgICAgIC8vIGJldHdlZW4gaXQgYW5kIGxpc3RO
b2RlLiBTbywgd2Ugc3BsaXQgdXAgdG8gbGlzdE5vZGUgYmVmb3JlIGluc2VydGluZyB0aGUgcGxh
Y2Vob2xkZXIKLSAgICAgICAgICAgIC8vIHdoZXJlIHdlJ3JlIGFib3V0IHRvIG1vdmUgbGlzdENo
aWxkTm9kZSB0by4KLSAgICAgICAgICAgIGlmIChsaXN0Q2hpbGROb2RlLT5wYXJlbnROb2RlKCkg
IT0gbGlzdE5vZGUpCi0gICAgICAgICAgICAgICAgc3BsaXRFbGVtZW50KGxpc3ROb2RlLCBzcGxp
dFRyZWVUb05vZGUobGlzdENoaWxkTm9kZSwgbGlzdE5vZGUpLmdldCgpKTsKLSAgICAgICAgICAg
IGluc2VydE5vZGVCZWZvcmUobm9kZVRvSW5zZXJ0LCBsaXN0Tm9kZSk7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgaW5zZXJ0Tm9kZUFmdGVyKG5vZGVUb0luc2VydCwgbGlzdE5vZGUpOwot
ICAgICAgICAKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGluc2VydGlvblBvaW50ID0gVmlzaWJs
ZVBvc2l0aW9uKFBvc2l0aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSk7Ci0gICAgICAgIG1vdmVQ
YXJhZ3JhcGhzKHN0YXJ0LCBlbmQsIGluc2VydGlvblBvaW50LCB0cnVlKTsKKworICAgICAgICB1
bmxpc3RpZnlQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIGxpc3RO
b2RlLCBsaXN0Q2hpbGROb2RlKTsKICAgICB9Ci0gICAgaWYgKCFsaXN0Q2hpbGROb2RlIHx8IHN3
aXRjaExpc3RUeXBlIHx8IG1fZm9yY2VDcmVhdGVMaXN0KSB7Ci0gICAgICAgIC8vIENyZWF0ZSBs
aXN0LgotICAgICAgICBWaXNpYmxlUG9zaXRpb24gb3JpZ2luYWxTdGFydCA9IGVuZGluZ1NlbGVj
dGlvbigpLnZpc2libGVTdGFydCgpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBz
dGFydE9mUGFyYWdyYXBoKG9yaWdpbmFsU3RhcnQpOwotICAgICAgICBWaXNpYmxlUG9zaXRpb24g
ZW5kID0gZW5kT2ZQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZUVuZCgpKTsKLSAg
ICAgICAgCi0gICAgICAgIC8vIENoZWNrIGZvciBhZGpvaW5pbmcgbGlzdHMuCi0gICAgICAgIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91c1Bvc2l0aW9uID0gc3RhcnQucHJldmlvdXModHJ1ZSk7Ci0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UG9zaXRpb24gPSBlbmQubmV4dCh0cnVlKTsKLSAg
ICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsaXN0SXRlbUVsZW1lbnQgPSBjcmVhdGVMaXN0SXRl
bUVsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gcGxhY2Vo
b2xkZXIgPSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7Ci0gICAgICAgIGFwcGVuZE5v
ZGUocGxhY2Vob2xkZXIsIGxpc3RJdGVtRWxlbWVudCk7Ci0gICAgICAgIEVsZW1lbnQqIHByZXZp
b3VzTGlzdCA9IG91dGVybW9zdEVuY2xvc2luZ0xpc3QocHJldmlvdXNQb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLm5vZGUoKSk7Ci0gICAgICAgIEVsZW1lbnQqIG5leHRMaXN0ID0gb3V0ZXJtb3N0
RW5jbG9zaW5nTGlzdChuZXh0UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOwotICAg
ICAgICBOb2RlKiBzdGFydE5vZGUgPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKLSAg
ICAgICAgTm9kZSogcHJldmlvdXNDZWxsID0gZW5jbG9zaW5nVGFibGVDZWxsKHByZXZpb3VzUG9z
aXRpb24uZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIE5vZGUqIG5leHRDZWxsID0gZW5jbG9z
aW5nVGFibGVDZWxsKG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICAgICAgTm9k
ZSogY3VycmVudENlbGwgPSBlbmNsb3NpbmdUYWJsZUNlbGwoc3RhcnQuZGVlcEVxdWl2YWxlbnQo
KSk7Ci0gICAgICAgIGlmIChwcmV2aW91c0xpc3QgJiYgKCFwcmV2aW91c0xpc3QtPmhhc1RhZ05h
bWUobGlzdFRhZykgfHwgc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwcmV2aW91c0xpc3QpIHx8
IHByZXZpb3VzQ2VsbCAhPSBjdXJyZW50Q2VsbCkpCi0gICAgICAgICAgICBwcmV2aW91c0xpc3Qg
PSAwOwotICAgICAgICBpZiAobmV4dExpc3QgJiYgKCFuZXh0TGlzdC0+aGFzVGFnTmFtZShsaXN0
VGFnKSB8fCBzdGFydE5vZGUtPmlzRGVzY2VuZGFudE9mKG5leHRMaXN0KSB8fCBuZXh0Q2VsbCAh
PSBjdXJyZW50Q2VsbCkpCi0gICAgICAgICAgICBuZXh0TGlzdCA9IDA7Ci0gICAgICAgIC8vIFBs
YWNlIGxpc3QgaXRlbSBpbnRvIGFkam9pbmluZyBsaXN0cy4KLSAgICAgICAgaWYgKHByZXZpb3Vz
TGlzdCkKLSAgICAgICAgICAgIGFwcGVuZE5vZGUobGlzdEl0ZW1FbGVtZW50LCBwcmV2aW91c0xp
c3QpOwotICAgICAgICBlbHNlIGlmIChuZXh0TGlzdCkKLSAgICAgICAgICAgIGluc2VydE5vZGVB
dChsaXN0SXRlbUVsZW1lbnQsIFBvc2l0aW9uKG5leHRMaXN0LCAwKSk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBsaXN0LgotICAgICAgICAgICAgUmVmUHRyPEhU
TUxFbGVtZW50PiBsaXN0RWxlbWVudCA9IG1fdHlwZSA9PSBPcmRlcmVkTGlzdCA/IGNyZWF0ZU9y
ZGVyZWRMaXN0RWxlbWVudChkb2N1bWVudCgpKSA6IGNyZWF0ZVVub3JkZXJlZExpc3RFbGVtZW50
KGRvY3VtZW50KCkpOwotICAgICAgICAgICAgbV9saXN0RWxlbWVudCA9IGxpc3RFbGVtZW50Owot
ICAgICAgICAgICAgYXBwZW5kTm9kZShsaXN0SXRlbUVsZW1lbnQsIGxpc3RFbGVtZW50KTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKHN0YXJ0ID09IGVuZCAmJiBpc0Jsb2NrKHN0YXJ0
LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpKSkgewotICAgICAgICAgICAgICAgIC8vIEluc2VydGlu
ZyB0aGUgbGlzdCBpbnRvIGFuIGVtcHR5IHBhcmFncmFwaCB0aGF0IGlzbid0IGhlbGQgb3BlbiAK
LSAgICAgICAgICAgICAgICAvLyBieSBhIGJyIG9yIGEgJ1xuJywgd2lsbCBpbnZhbGlkYXRlIHN0
YXJ0IGFuZCBlbmQuICBJbnNlcnQgCi0gICAgICAgICAgICAgICAgLy8gYSBwbGFjZWhvbGRlciBh
bmQgdGhlbiByZWNvbXB1dGUgc3RhcnQgYW5kIGVuZC4KLSAgICAgICAgICAgICAgICBSZWZQdHI8
Tm9kZT4gcGxhY2Vob2xkZXIgPSBpbnNlcnRCbG9ja1BsYWNlaG9sZGVyKHN0YXJ0LmRlZXBFcXVp
dmFsZW50KCkpOwotICAgICAgICAgICAgICAgIHN0YXJ0ID0gVmlzaWJsZVBvc2l0aW9uKFBvc2l0
aW9uKHBsYWNlaG9sZGVyLmdldCgpLCAwKSk7Ci0gICAgICAgICAgICAgICAgZW5kID0gc3RhcnQ7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEluc2VydCB0aGUg
bGlzdCBhdCBhIHBvc2l0aW9uIHZpc3VhbGx5IGVxdWl2YWxlbnQgdG8gc3RhcnQgb2YgdGhlCi0g
ICAgICAgICAgICAvLyBwYXJhZ3JhcGggdGhhdCBpcyBiZWluZyBtb3ZlZCBpbnRvIHRoZSBsaXN0
LiAKLSAgICAgICAgICAgIC8vIFRyeSB0byBhdm9pZCBpbnNlcnRpbmcgaXQgc29tZXdoZXJlIHdo
ZXJlIGl0IHdpbGwgYmUgc3Vycm91bmRlZCBieSAKLSAgICAgICAgICAgIC8vIGlubGluZSBhbmNl
c3RvcnMgb2Ygc3RhcnQsIHNpbmNlIGl0IGlzIGVhc2llciBmb3IgZWRpdGluZyB0byBwcm9kdWNl
IAotICAgICAgICAgICAgLy8gY2xlYW4gbWFya3VwIHdoZW4gaW5saW5lIGVsZW1lbnRzIGFyZSBw
dXNoZWQgZG93biBhcyBmYXIgYXMgcG9zc2libGUuCi0gICAgICAgICAgICBQb3NpdGlvbiBpbnNl
cnRpb25Qb3Moc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS51cHN0cmVhbSgpKTsKLSAgICAgICAgICAg
IC8vIEFsc28gYXZvaWQgdGhlIGNvbnRhaW5pbmcgbGlzdCBpdGVtLgotICAgICAgICAgICAgTm9k
ZSogbGlzdENoaWxkID0gZW5jbG9zaW5nTGlzdENoaWxkKGluc2VydGlvblBvcy5ub2RlKCkpOwot
ICAgICAgICAgICAgaWYgKGxpc3RDaGlsZCAmJiBsaXN0Q2hpbGQtPmhhc1RhZ05hbWUobGlUYWcp
KQotICAgICAgICAgICAgICAgIGluc2VydGlvblBvcyA9IHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVO
b2RlKGxpc3RDaGlsZCk7Ci0KLSAgICAgICAgICAgIGluc2VydE5vZGVBdChsaXN0RWxlbWVudCwg
aW5zZXJ0aW9uUG9zKTsKLQotICAgICAgICAgICAgLy8gV2UgaW5zZXJ0ZWQgdGhlIGxpc3QgYXQg
dGhlIHN0YXJ0IG9mIHRoZSBjb250ZW50IHdlJ3JlIGFib3V0IHRvIG1vdmUKLSAgICAgICAgICAg
IC8vIFVwZGF0ZSB0aGUgc3RhcnQgb2YgY29udGVudCwgc28gd2UgZG9uJ3QgdHJ5IHRvIG1vdmUg
dGhlIGxpc3QgaW50byBpdHNlbGYuICBidWcgMTkwNjYKLSAgICAgICAgICAgIGlmIChpbnNlcnRp
b25Qb3MgPT0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkKLSAgICAgICAgICAgICAgICBzdGFydCA9
IHN0YXJ0T2ZQYXJhZ3JhcGgob3JpZ2luYWxTdGFydCk7Ci0gICAgICAgICAgICBwcmV2aW91c0xp
c3QgPSBvdXRlcm1vc3RFbmNsb3NpbmdMaXN0KHByZXZpb3VzUG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCksIGVuY2xvc2luZ0xpc3QobGlzdEVsZW1lbnQuZ2V0KCkpKTsKLSAgICAgICAg
ICAgIG5leHRMaXN0ID0gb3V0ZXJtb3N0RW5jbG9zaW5nTGlzdChuZXh0UG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5ub2RlKCksIGVuY2xvc2luZ0xpc3QobGlzdEVsZW1lbnQuZ2V0KCkpKTsKKwor
ICAgIGlmICghbGlzdENoaWxkTm9kZSB8fCBzd2l0Y2hMaXN0VHlwZSB8fCBtX2ZvcmNlQ3JlYXRl
TGlzdCkKKyAgICAgICAgbV9saXN0RWxlbWVudCA9IGxpc3RpZnlQYXJhZ3JhcGgoZW5kaW5nU2Vs
ZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCksIGxpc3RUYWcpOworfQorCit2b2lkIEluc2VydExpc3RD
b21tYW5kOjp1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5h
bFN0YXJ0LCBIVE1MRWxlbWVudCogbGlzdE5vZGUsIE5vZGUqIGxpc3RDaGlsZE5vZGUpCit7Cisg
ICAgTm9kZSogbmV4dExpc3RDaGlsZDsKKyAgICBOb2RlKiBwcmV2aW91c0xpc3RDaGlsZDsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gc3RhcnQ7CisgICAgVmlzaWJsZVBvc2l0aW9uIGVuZDsKKyAgICBp
ZiAobGlzdENoaWxkTm9kZS0+aGFzVGFnTmFtZShsaVRhZykpIHsKKyAgICAgICAgc3RhcnQgPSBm
aXJzdERlZXBFZGl0aW5nUG9zaXRpb25Gb3JOb2RlKGxpc3RDaGlsZE5vZGUpOworICAgICAgICBl
bmQgPSBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobGlzdENoaWxkTm9kZSk7CisgICAg
ICAgIG5leHRMaXN0Q2hpbGQgPSBsaXN0Q2hpbGROb2RlLT5uZXh0U2libGluZygpOworICAgICAg
ICBwcmV2aW91c0xpc3RDaGlsZCA9IGxpc3RDaGlsZE5vZGUtPnByZXZpb3VzU2libGluZygpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEEgcGFyYWdyYXBoIGlzIHZpc3VhbGx5IGEgbGlzdCBp
dGVtIG1pbnVzIGEgbGlzdCBtYXJrZXIuICBUaGUgcGFyYWdyYXBoIHdpbGwgYmUgbW92ZWQuCisg
ICAgICAgIHN0YXJ0ID0gc3RhcnRPZlBhcmFncmFwaChvcmlnaW5hbFN0YXJ0KTsKKyAgICAgICAg
ZW5kID0gZW5kT2ZQYXJhZ3JhcGgoc3RhcnQpOworICAgICAgICBuZXh0TGlzdENoaWxkID0gZW5j
bG9zaW5nTGlzdENoaWxkKGVuZC5uZXh0KCkuZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAg
ICAgICBBU1NFUlQobmV4dExpc3RDaGlsZCAhPSBsaXN0Q2hpbGROb2RlKTsKKyAgICAgICAgaWYg
KGVuY2xvc2luZ0xpc3QobmV4dExpc3RDaGlsZCkgIT0gbGlzdE5vZGUpCisgICAgICAgICAgICBu
ZXh0TGlzdENoaWxkID0gMDsKKyAgICAgICAgcHJldmlvdXNMaXN0Q2hpbGQgPSBlbmNsb3NpbmdM
aXN0Q2hpbGQoc3RhcnQucHJldmlvdXMoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKSk7CisgICAg
ICAgIEFTU0VSVChwcmV2aW91c0xpc3RDaGlsZCAhPSBsaXN0Q2hpbGROb2RlKTsKKyAgICAgICAg
aWYgKGVuY2xvc2luZ0xpc3QocHJldmlvdXNMaXN0Q2hpbGQpICE9IGxpc3ROb2RlKQorICAgICAg
ICAgICAgcHJldmlvdXNMaXN0Q2hpbGQgPSAwOworICAgIH0KKyAgICAvLyBXaGVuIHJlbW92aW5n
IGEgbGlzdCwgd2UgbXVzdCBhbHdheXMgY3JlYXRlIGEgcGxhY2Vob2xkZXIgdG8gYWN0IGFzIGEg
cG9pbnQgb2YgaW5zZXJ0aW9uCisgICAgLy8gZm9yIHRoZSBsaXN0IGNvbnRlbnQgYmVpbmcgcmVt
b3ZlZC4KKyAgICBSZWZQdHI8RWxlbWVudD4gcGxhY2Vob2xkZXIgPSBjcmVhdGVCcmVha0VsZW1l
bnQoZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5vZGVUb0luc2VydCA9IHBsYWNl
aG9sZGVyOworICAgIC8vIElmIHRoZSBjb250ZW50IG9mIHRoZSBsaXN0IGl0ZW0gd2lsbCBiZSBt
b3ZlZCBpbnRvIGFub3RoZXIgbGlzdCwgcHV0IGl0IGluIGEgbGlzdCBpdGVtCisgICAgLy8gc28g
dGhhdCB3ZSBkb24ndCBjcmVhdGUgYW4gb3JwaGFuZWQgbGlzdCBjaGlsZC4KKyAgICBpZiAoZW5j
bG9zaW5nTGlzdChsaXN0Tm9kZSkpIHsKKyAgICAgICAgbm9kZVRvSW5zZXJ0ID0gY3JlYXRlTGlz
dEl0ZW1FbGVtZW50KGRvY3VtZW50KCkpOworICAgICAgICBhcHBlbmROb2RlKHBsYWNlaG9sZGVy
LCBub2RlVG9JbnNlcnQpOworICAgIH0KKworICAgIGlmIChuZXh0TGlzdENoaWxkICYmIHByZXZp
b3VzTGlzdENoaWxkKSB7CisgICAgICAgIC8vIFdlIHdhbnQgdG8gcHVsbCBsaXN0Q2hpbGROb2Rl
IG91dCBvZiBsaXN0Tm9kZSwgYW5kIHBsYWNlIGl0IGJlZm9yZSBuZXh0TGlzdENoaWxkIAorICAg
ICAgICAvLyBhbmQgYWZ0ZXIgcHJldmlvdXNMaXN0Q2hpbGQsIHNvIHdlIHNwbGl0IGxpc3ROb2Rl
IGFuZCBpbnNlcnQgaXQgYmV0d2VlbiB0aGUgdHdvIGxpc3RzLiAgCisgICAgICAgIC8vIEJ1dCB0
byBzcGxpdCBsaXN0Tm9kZSwgd2UgbXVzdCBmaXJzdCBzcGxpdCBhbmNlc3RvcnMgb2YgbGlzdENo
aWxkTm9kZSBiZXR3ZWVuIGl0IGFuZCBsaXN0Tm9kZSwKKyAgICAgICAgLy8gaWYgYW55IGV4aXN0
LgorICAgICAgICAvLyBGSVhNRTogV2UgYXBwZWFyIHRvIHNwbGl0IGF0IG5leHRMaXN0Q2hpbGQg
YXMgb3Bwb3NlZCB0byBsaXN0Q2hpbGROb2RlIHNvIHRoYXQgd2hlbiB3ZSByZW1vdmUKKyAgICAg
ICAgLy8gbGlzdENoaWxkTm9kZSBiZWxvdyBpbiBtb3ZlUGFyYWdyYXBocywgcHJldmlvdXNMaXN0
Q2hpbGQgd2lsbCBiZSByZW1vdmVkIGFsb25nIHdpdGggaXQgaWYgaXQgaXMgCisgICAgICAgIC8v
IHVucmVuZGVyZWQuIEJ1dCB3ZSBvdWdodCB0byByZW1vdmUgbmV4dExpc3RDaGlsZCB0b28sIGlm
IGl0IGlzIHVucmVuZGVyZWQuCisgICAgICAgIHNwbGl0RWxlbWVudChsaXN0Tm9kZSwgc3BsaXRU
cmVlVG9Ob2RlKG5leHRMaXN0Q2hpbGQsIGxpc3ROb2RlKSk7CisgICAgICAgIGluc2VydE5vZGVC
ZWZvcmUobm9kZVRvSW5zZXJ0LCBsaXN0Tm9kZSk7CisgICAgfSBlbHNlIGlmIChuZXh0TGlzdENo
aWxkIHx8IGxpc3RDaGlsZE5vZGUtPnBhcmVudE5vZGUoKSAhPSBsaXN0Tm9kZSkgeworICAgICAg
ICAvLyBKdXN0IGJlY2F1c2UgbGlzdENoaWxkTm9kZSBoYXMgbm8gcHJldmlvdXNMaXN0Q2hpbGQg
ZG9lc24ndCBtZWFuIHRoZXJlIGlzbid0IGFueSBjb250ZW50CisgICAgICAgIC8vIGluIGxpc3RO
b2RlIHRoYXQgY29tZXMgYmVmb3JlIGxpc3RDaGlsZE5vZGUsIGFzIGxpc3RDaGlsZE5vZGUgY291
bGQgaGF2ZSBhbmNlc3RvcnMKKyAgICAgICAgLy8gYmV0d2VlbiBpdCBhbmQgbGlzdE5vZGUuIFNv
LCB3ZSBzcGxpdCB1cCB0byBsaXN0Tm9kZSBiZWZvcmUgaW5zZXJ0aW5nIHRoZSBwbGFjZWhvbGRl
cgorICAgICAgICAvLyB3aGVyZSB3ZSdyZSBhYm91dCB0byBtb3ZlIGxpc3RDaGlsZE5vZGUgdG8u
CisgICAgICAgIGlmIChsaXN0Q2hpbGROb2RlLT5wYXJlbnROb2RlKCkgIT0gbGlzdE5vZGUpCisg
ICAgICAgICAgICBzcGxpdEVsZW1lbnQobGlzdE5vZGUsIHNwbGl0VHJlZVRvTm9kZShsaXN0Q2hp
bGROb2RlLCBsaXN0Tm9kZSkuZ2V0KCkpOworICAgICAgICBpbnNlcnROb2RlQmVmb3JlKG5vZGVU
b0luc2VydCwgbGlzdE5vZGUpOworICAgIH0gZWxzZQorICAgICAgICBpbnNlcnROb2RlQWZ0ZXIo
bm9kZVRvSW5zZXJ0LCBsaXN0Tm9kZSk7CisKKyAgICBWaXNpYmxlUG9zaXRpb24gaW5zZXJ0aW9u
UG9pbnQgPSBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ocGxhY2Vob2xkZXIuZ2V0KCksIDApKTsK
KyAgICBtb3ZlUGFyYWdyYXBocyhzdGFydCwgZW5kLCBpbnNlcnRpb25Qb2ludCwgdHJ1ZSk7Cit9
CisKK1Bhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IEluc2VydExpc3RDb21tYW5kOjpsaXN0aWZ5UGFy
YWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3JpZ2luYWxTdGFydCwgY29uc3QgUXVhbGlm
aWVkTmFtZSYgbGlzdFRhZykKK3sKKyAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBzdGFydE9m
UGFyYWdyYXBoKG9yaWdpbmFsU3RhcnQpOworICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSBlbmRP
ZlBhcmFncmFwaChzdGFydCk7CisKKyAgICAvLyBDaGVjayBmb3IgYWRqb2luaW5nIGxpc3RzLgor
ICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Bvc2l0aW9uID0gc3RhcnQucHJldmlvdXModHJ1
ZSk7CisgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRQb3NpdGlvbiA9IGVuZC5uZXh0KHRydWUpOwor
ICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdEl0ZW1FbGVtZW50ID0gY3JlYXRlTGlzdEl0ZW1F
bGVtZW50KGRvY3VtZW50KCkpOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gcGxhY2Vob2xkZXIg
PSBjcmVhdGVCcmVha0VsZW1lbnQoZG9jdW1lbnQoKSk7CisgICAgYXBwZW5kTm9kZShwbGFjZWhv
bGRlciwgbGlzdEl0ZW1FbGVtZW50KTsKKyAgICBFbGVtZW50KiBwcmV2aW91c0xpc3QgPSBvdXRl
cm1vc3RFbmNsb3NpbmdMaXN0KHByZXZpb3VzUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2Rl
KCkpOworICAgIEVsZW1lbnQqIG5leHRMaXN0ID0gb3V0ZXJtb3N0RW5jbG9zaW5nTGlzdChuZXh0
UG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5ub2RlKCkpOworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9
IHN0YXJ0LmRlZXBFcXVpdmFsZW50KCkubm9kZSgpOworICAgIE5vZGUqIHByZXZpb3VzQ2VsbCA9
IGVuY2xvc2luZ1RhYmxlQ2VsbChwcmV2aW91c1Bvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkpOwor
ICAgIE5vZGUqIG5leHRDZWxsID0gZW5jbG9zaW5nVGFibGVDZWxsKG5leHRQb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpKTsKKyAgICBOb2RlKiBjdXJyZW50Q2VsbCA9IGVuY2xvc2luZ1RhYmxlQ2Vs
bChzdGFydC5kZWVwRXF1aXZhbGVudCgpKTsKKyAgICBpZiAocHJldmlvdXNMaXN0ICYmICghcHJl
dmlvdXNMaXN0LT5oYXNUYWdOYW1lKGxpc3RUYWcpIHx8IHN0YXJ0Tm9kZS0+aXNEZXNjZW5kYW50
T2YocHJldmlvdXNMaXN0KSB8fCBwcmV2aW91c0NlbGwgIT0gY3VycmVudENlbGwpKQorICAgICAg
ICBwcmV2aW91c0xpc3QgPSAwOworICAgIGlmIChuZXh0TGlzdCAmJiAoIW5leHRMaXN0LT5oYXNU
YWdOYW1lKGxpc3RUYWcpIHx8IHN0YXJ0Tm9kZS0+aXNEZXNjZW5kYW50T2YobmV4dExpc3QpIHx8
IG5leHRDZWxsICE9IGN1cnJlbnRDZWxsKSkKKyAgICAgICAgbmV4dExpc3QgPSAwOworICAgIC8v
IFBsYWNlIGxpc3QgaXRlbSBpbnRvIGFkam9pbmluZyBsaXN0cy4KKyAgICBSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGxpc3RFbGVtZW50OworICAgIGlmIChwcmV2aW91c0xpc3QpCisgICAgICAgIGFwcGVu
ZE5vZGUobGlzdEl0ZW1FbGVtZW50LCBwcmV2aW91c0xpc3QpOworICAgIGVsc2UgaWYgKG5leHRM
aXN0KQorICAgICAgICBpbnNlcnROb2RlQXQobGlzdEl0ZW1FbGVtZW50LCBQb3NpdGlvbihuZXh0
TGlzdCwgMCkpOworICAgIGVsc2UgeworICAgICAgICAvLyBDcmVhdGUgdGhlIGxpc3QuCisgICAg
ICAgIGxpc3RFbGVtZW50ID0gY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgbGlzdFRhZyk7
CisgICAgICAgIGFwcGVuZE5vZGUobGlzdEl0ZW1FbGVtZW50LCBsaXN0RWxlbWVudCk7CisKKyAg
ICAgICAgaWYgKHN0YXJ0ID09IGVuZCAmJiBpc0Jsb2NrKHN0YXJ0LmRlZXBFcXVpdmFsZW50KCku
bm9kZSgpKSkgeworICAgICAgICAgICAgLy8gSW5zZXJ0aW5nIHRoZSBsaXN0IGludG8gYW4gZW1w
dHkgcGFyYWdyYXBoIHRoYXQgaXNuJ3QgaGVsZCBvcGVuIAorICAgICAgICAgICAgLy8gYnkgYSBi
ciBvciBhICdcbicsIHdpbGwgaW52YWxpZGF0ZSBzdGFydCBhbmQgZW5kLiAgSW5zZXJ0IAorICAg
ICAgICAgICAgLy8gYSBwbGFjZWhvbGRlciBhbmQgdGhlbiByZWNvbXB1dGUgc3RhcnQgYW5kIGVu
ZC4KKyAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBwbGFjZWhvbGRlciA9IGluc2VydEJsb2NrUGxh
Y2Vob2xkZXIoc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSk7CisgICAgICAgICAgICBzdGFydCA9IFZp
c2libGVQb3NpdGlvbihQb3NpdGlvbihwbGFjZWhvbGRlci5nZXQoKSwgMCkpOworICAgICAgICAg
ICAgZW5kID0gc3RhcnQ7CiAgICAgICAgIH0KLSAgICAgICAgbW92ZVBhcmFncmFwaChzdGFydCwg
ZW5kLCBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24ocGxhY2Vob2xkZXIuZ2V0KCksIDApKSwgdHJ1
ZSk7Ci0gICAgICAgIGlmIChtX2xpc3RFbGVtZW50KSB7Ci0gICAgICAgICAgICBpZiAoY2FuTWVy
Z2VMaXN0cyhwcmV2aW91c0xpc3QsIG1fbGlzdEVsZW1lbnQuZ2V0KCkpKQotICAgICAgICAgICAg
ICAgIG1lcmdlSWRlbnRpY2FsRWxlbWVudHMocHJldmlvdXNMaXN0LCBtX2xpc3RFbGVtZW50Lmdl
dCgpKTsKLSAgICAgICAgICAgIGlmIChjYW5NZXJnZUxpc3RzKG1fbGlzdEVsZW1lbnQuZ2V0KCks
IG5leHRMaXN0KSkKLSAgICAgICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKG1fbGlz
dEVsZW1lbnQuZ2V0KCksIG5leHRMaXN0KTsKLSAgICAgICAgfSBlbHNlIGlmIChjYW5NZXJnZUxp
c3RzKG5leHRMaXN0LCBwcmV2aW91c0xpc3QpKQotICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxF
bGVtZW50cyhwcmV2aW91c0xpc3QsIG5leHRMaXN0KTsKKworICAgICAgICAvLyBJbnNlcnQgdGhl
IGxpc3QgYXQgYSBwb3NpdGlvbiB2aXN1YWxseSBlcXVpdmFsZW50IHRvIHN0YXJ0IG9mIHRoZQor
ICAgICAgICAvLyBwYXJhZ3JhcGggdGhhdCBpcyBiZWluZyBtb3ZlZCBpbnRvIHRoZSBsaXN0LiAK
KyAgICAgICAgLy8gVHJ5IHRvIGF2b2lkIGluc2VydGluZyBpdCBzb21ld2hlcmUgd2hlcmUgaXQg
d2lsbCBiZSBzdXJyb3VuZGVkIGJ5IAorICAgICAgICAvLyBpbmxpbmUgYW5jZXN0b3JzIG9mIHN0
YXJ0LCBzaW5jZSBpdCBpcyBlYXNpZXIgZm9yIGVkaXRpbmcgdG8gcHJvZHVjZSAKKyAgICAgICAg
Ly8gY2xlYW4gbWFya3VwIHdoZW4gaW5saW5lIGVsZW1lbnRzIGFyZSBwdXNoZWQgZG93biBhcyBm
YXIgYXMgcG9zc2libGUuCisgICAgICAgIFBvc2l0aW9uIGluc2VydGlvblBvcyhzdGFydC5kZWVw
RXF1aXZhbGVudCgpLnVwc3RyZWFtKCkpOworICAgICAgICAvLyBBbHNvIGF2b2lkIHRoZSBjb250
YWluaW5nIGxpc3QgaXRlbS4KKyAgICAgICAgTm9kZSogbGlzdENoaWxkID0gZW5jbG9zaW5nTGlz
dENoaWxkKGluc2VydGlvblBvcy5ub2RlKCkpOworICAgICAgICBpZiAobGlzdENoaWxkICYmIGxp
c3RDaGlsZC0+aGFzVGFnTmFtZShsaVRhZykpCisgICAgICAgICAgICBpbnNlcnRpb25Qb3MgPSBw
b3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShsaXN0Q2hpbGQpOworCisgICAgICAgIGluc2VydE5v
ZGVBdChsaXN0RWxlbWVudCwgaW5zZXJ0aW9uUG9zKTsKKworICAgICAgICAvLyBXZSBpbnNlcnRl
ZCB0aGUgbGlzdCBhdCB0aGUgc3RhcnQgb2YgdGhlIGNvbnRlbnQgd2UncmUgYWJvdXQgdG8gbW92
ZQorICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXJ0IG9mIGNvbnRlbnQsIHNvIHdlIGRvbid0IHRy
eSB0byBtb3ZlIHRoZSBsaXN0IGludG8gaXRzZWxmLiAgYnVnIDE5MDY2CisgICAgICAgIGlmIChp
bnNlcnRpb25Qb3MgPT0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKSkKKyAgICAgICAgICAgIHN0YXJ0
ID0gc3RhcnRPZlBhcmFncmFwaChvcmlnaW5hbFN0YXJ0KTsKKyAgICAgICAgcHJldmlvdXNMaXN0
ID0gb3V0ZXJtb3N0RW5jbG9zaW5nTGlzdChwcmV2aW91c1Bvc2l0aW9uLmRlZXBFcXVpdmFsZW50
KCkubm9kZSgpLCBlbmNsb3NpbmdMaXN0KGxpc3RFbGVtZW50LmdldCgpKSk7CisgICAgICAgIG5l
eHRMaXN0ID0gb3V0ZXJtb3N0RW5jbG9zaW5nTGlzdChuZXh0UG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5ub2RlKCksIGVuY2xvc2luZ0xpc3QobGlzdEVsZW1lbnQuZ2V0KCkpKTsKICAgICB9CisK
KyAgICBtb3ZlUGFyYWdyYXBoKHN0YXJ0LCBlbmQsIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihw
bGFjZWhvbGRlci5nZXQoKSwgMCkpLCB0cnVlKTsKKworICAgIC8vIEZJWE1FOiBsaXN0aWZ5UGFy
YWdyYXBoIHNob3VsZCBub3QgZGVwZW5kIG9uIGEgbWVtYmVyIHZhcmlhYmxlLgorICAgIC8vIFNp
bmNlIGZpeE9ycGhhbmVkTGlzdENoaWxkIGlzIHRoZSBvbmx5IG90aGVyIG1ldGhvZCB0aGF0IHVw
ZGF0ZXMgbV9saXN0RWxlbWVudCwKKyAgICAvLyB3ZSBzaG91bGQgZml4IHVubGlzdGlmeVBhcmFn
cmFwaCB0byBzdXBwb3J0IG9ycGhhbmVkIGxpc3QgY2hpbGQgdG8gZ2V0IHJpZCBvZiB0aGlzIGFz
c2lnbm1lbnQuCisgICAgaWYgKCFsaXN0RWxlbWVudCAmJiBtX2xpc3RFbGVtZW50KQorICAgICAg
ICBsaXN0RWxlbWVudCA9IG1fbGlzdEVsZW1lbnQ7CisKKyAgICBpZiAobGlzdEVsZW1lbnQpIHsK
KyAgICAgICAgaWYgKGNhbk1lcmdlTGlzdHMocHJldmlvdXNMaXN0LCBsaXN0RWxlbWVudC5nZXQo
KSkpCisgICAgICAgICAgICBtZXJnZUlkZW50aWNhbEVsZW1lbnRzKHByZXZpb3VzTGlzdCwgbGlz
dEVsZW1lbnQuZ2V0KCkpOworICAgICAgICBpZiAoY2FuTWVyZ2VMaXN0cyhsaXN0RWxlbWVudC5n
ZXQoKSwgbmV4dExpc3QpKQorICAgICAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhsaXN0
RWxlbWVudC5nZXQoKSwgbmV4dExpc3QpOworICAgIH0gZWxzZSBpZiAoY2FuTWVyZ2VMaXN0cyhu
ZXh0TGlzdCwgcHJldmlvdXNMaXN0KSkKKyAgICAgICAgbWVyZ2VJZGVudGljYWxFbGVtZW50cyhw
cmV2aW91c0xpc3QsIG5leHRMaXN0KTsKKworICAgIHJldHVybiBsaXN0RWxlbWVudDsKIH0KIAog
fQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmgJKHJldmlzaW9uIDYwNjgyKQor
KysgV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUzLDYgKzUzLDggQEAgcHJpdmF0ZToKIAogICAgIEhUTUxFbGVtZW50KiBmaXhPcnBoYW5lZExp
c3RDaGlsZChOb2RlKik7CiAgICAgYm9vbCBtb2RpZnlSYW5nZSgpOworICAgIHZvaWQgdW5saXN0
aWZ5UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3JpZ2luYWxTdGFydCwgSFRNTEVs
ZW1lbnQqIGxpc3ROb2RlLCBOb2RlKiBsaXN0Q2hpbGROb2RlKTsKKyAgICBQYXNzUmVmUHRyPEhU
TUxFbGVtZW50PiBsaXN0aWZ5UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3JpZ2lu
YWxTdGFydCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGlzdFRhZyk7CiAgICAgUmVmUHRyPEhUTUxF
bGVtZW50PiBtX2xpc3RFbGVtZW50OwogICAgIFR5cGUgbV90eXBlOwogICAgIGJvb2wgbV9mb3Jj
ZUNyZWF0ZUxpc3Q7Cg==
</data>
<flag name="review"
          id="42587"
          type_id="1"
          status="+"
          setter="justin.garcia"
    />
          </attachment>
      

    </bug>

</bugzilla>