<?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>32136</bug_id>
          
          <creation_ts>2009-12-03 15:54:39 -0800</creation_ts>
          <short_desc>Add a rope representation to JSString.</short_desc>
          <delta_ts>2009-12-03 18:15:45 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>168583</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-03 15:54:39 -0800</bug_when>
    <thetext>Add a rope representation to JSString.  Presently JSString always holds its data in UString form.  Instead, allow the result of a string concatenation to be represented in a tree form - with a variable sized, reference-counted rope node retaining a set of UString::Reps (or other rope nopes).

Strings must still currently be resolved down to a flat UString representation before being used, but by holding the string in a rope representation during construction we can avoid copying data until we know the final size of the string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168585</commentid>
    <comment_count>1</comment_count>
      <attachid>44274</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-03 16:02:12 -0800</bug_when>
    <thetext>Created attachment 44274
The Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168587</commentid>
    <comment_count>2</comment_count>
      <attachid>44275</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-03 16:04:40 -0800</bug_when>
    <thetext>Created attachment 44275
Add back an export accidentally deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168588</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-03 16:06:36 -0800</bug_when>
    <thetext>Attachment 44275 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/runtime/JSString.h:163:  More than one command on the same line  [whitespace/newline] [4]
JavaScriptCore/runtime/JSString.h:164:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168594</commentid>
    <comment_count>4</comment_count>
      <attachid>44275</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-03 16:52:38 -0800</bug_when>
    <thetext>Comment on attachment 44275
Add back an export accidentally deleted.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168615</commentid>
    <comment_count>5</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-03 18:15:45 -0800</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/JavaScriptCore.exp
Sending        JavaScriptCore/interpreter/Interpreter.cpp
Sending        JavaScriptCore/jit/JITOpcodes.cpp
Sending        JavaScriptCore/jit/JITStubs.cpp
Sending        JavaScriptCore/runtime/JSString.cpp
Sending        JavaScriptCore/runtime/JSString.h
Sending        JavaScriptCore/runtime/Operations.h
Sending        JavaScriptCore/runtime/StringObject.cpp
Transmitting file data .........
Committed revision 51671.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44274</attachid>
            <date>2009-12-03 16:02:12 -0800</date>
            <delta_ts>2009-12-03 16:04:40 -0800</delta_ts>
            <desc>The Patch</desc>
            <filename>patch.ROPE.2.txt</filename>
            <type>text/plain</type>
            <size>25623</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxNjY2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODcgQEAKKzIwMDktMTItMDMgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMjEzNgorICAgICAgICBBZGQgYSByb3BlIHJlcHJlc2VudGF0aW9uIHRvIEpT
U3RyaW5nLiAgUHJlc2VudGx5IEpTU3RyaW5nIGFsd2F5cyBob2xkcyBpdHMgZGF0YSBpbiBVU3Ry
aW5nIGZvcm0uCisgICAgICAgIEluc3RlYWQsIGFsbG93IHRoZSByZXN1bHQgb2YgYSBzdHJpbmcg
Y29uY2F0ZW5hdGlvbiB0byBiZSByZXByZXNlbnRlZCBpbiBhIHRyZWUgZm9ybSAtIHdpdGggYQor
ICAgICAgICB2YXJpYWJsZSBzaXplZCwgcmVmZXJlbmNlLWNvdW50ZWQgcm9wZSBub2RlIHJldGFp
bmluZyBhIHNldCBvZiBVU3RyaW5nOjpSZXBzIChvciBvdGhlciByb3BlIG5vcGVzKS4KKworICAg
ICAgICBTdHJpbmdzIG11c3Qgc3RpbGwgY3VycmVudGx5IGJlIHJlc29sdmVkIGRvd24gdG8gYSBm
bGF0IFVTdHJpbmcgcmVwcmVzZW50YXRpb24gYmVmb3JlIGJlaW5nIHVzZWQsCisgICAgICAgIGJ1
dCBieSBob2xkaW5nIHRoZSBzdHJpbmcgaW4gYSByb3BlIHJlcHJlc2VudGF0aW9uIGR1cmluZyBj
b25zdHJ1Y3Rpb24gd2UgY2FuIGF2b2lkIGNvcHlpbmcgZGF0YQorICAgICAgICB1bnRpbCB3ZSBr
bm93IHRoZSBmaW5hbCBzaXplIG9mIHRoZSBzdHJpbmcuCisKKyAgICAgICAgfjIlIHByb2dyZXNz
aW9uIG9uIFN1blNwaWRlciAofjI1JSBvbiBkYXRlLWZvcm1hdC14cGFyYiwgfjIwJSBvbiBzdHJp
bmctdmFsaWRhdGUtaW5wdXQpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorCisg
ICAgICAgICAgICAtIFVwZGF0ZSBleHBvcnRzLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUp
OgorCisgICAgICAgICAgICAtIE1ha2UgdXNlIG9mIG5ldyBKU1N0cmluZzo6bGVuZ3RoKCkgbWV0
aG9kIHRvIGF2b2lkIHByZW1hdHVyZWx5IHJlc29sdmluZyByb3Blcy4KKworICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyk6CisKKyAgICAgICAgICAgIC0gU3dpdGNoIHRoZSBzdHJpbmcgbGVu
Z3RoIHRyYW1wb2xpbmUgdG8gcmVhZCB0aGUgbGVuZ3RoIGRpcmVjdGx5IGZyb20gSlNTdHJpbmc6
Om1fbGVuZ3RoLAorICAgICAgICAgICAgICByYXRoZXIgdGhhbiBmcm9tIHRoZSBKU1N0cmluZydz
IFVTdHJpbmc6OlJlcCdzICdsZW4nIHByb3BlcnR5LgorCisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorCisgICAgICAgICAg
ICAtIE1vZGlmeSBvcF9hZGQgc3VjaCB0aGF0IGFkZGl0aW9uIG9mIHR3byBzdHJpbmdzLCB3aGVy
ZSBlaXRoZXIgb3IgYm90aCBzdHJpbmdzIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgIGluIHJv
cGUgcmVwcmVzZW50YXRpb24sIHByb2R1Y2VzIGEgcm9wZSBhcyBhIHJlc3VsdC4KKworICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6
flJvcGUpOgorICAgICAgICAoSlNDOjpjb3B5Q2hhcnMpOgorICAgICAgICAoSlNDOjpKU1N0cmlu
Zzo6cmVzb2x2ZVJvcGUpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0UHJpbWl0aXZlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvQm9vbGVhbik6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjp0b051bWJlcik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b1N0cmluZyk6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b1RoaXNTdHJpbmcpOgorICAgICAgICAoSlNDOjpK
U1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpSb3BlOjpGaWJlcjo6RmliZXIp
OgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6RmliZXI6OmRlc3Ryb3kpOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6RmliZXI6OmlzUm9wZSk6CisgICAgICAgIChKU0M6OkpT
U3RyaW5nOjpSb3BlOjpGaWJlcjo6cm9wZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpSb3Bl
OjpGaWJlcjo6c3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OlJvcGU6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpSb3BlOjppbml0aWFsaXplRmliZXIpOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6cm9wZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjpSb3BlOjpzdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6
ZmliZXJzKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OlJvcGU6OlJvcGUpOgorICAgICAgICAo
SlNDOjpKU1N0cmluZzo6Um9wZTo6b3BlcmF0b3IgbmV3KToKKyAgICAgICAgKEpTQzo6SlNTdHJp
bmc6OkpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnZhbHVlKToKKyAgICAgICAg
KEpTQzo6SlNTdHJpbmc6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjppc1JvcGUp
OgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6cm9wZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
OjpzdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Y2FuR2V0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OmpzU3Vic3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdCk6CisKKyAgICAgICAgICAgIC0gQWRk
IHJvcGUgZm9ybS4KKworICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAo
SlNDOjpqc0FkZCk6CisgICAgICAgIChKU0M6OmNvbmNhdGVuYXRlU3RyaW5ncyk6CisKKyAgICAg
ICAgICAgIC0gVXBkYXRlIHN0cmluZyBjb25jYXRlbmF0aW9uLCBhbmQgYWRkaXRpb24gb2Ygcm9w
ZXMsIHRvIHByb2R1Y2Ugcm9wZXMuCisKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisK
KyAgICAgICAgICAgIC0gTWFrZSB1c2Ugb2YgbmV3IEpTU3RyaW5nOjpsZW5ndGgoKSBtZXRob2Qg
dG8gYXZvaWQgcHJlbWF0dXJlbHkgcmVzb2x2aW5nIHJvcGVzLgorCiAyMDA5LTExLTIzICBKZXJl
bXkgTW9za292aWNoICA8amVyZW15QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9u
IDUxNjY2KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMzksNyArMjM5LDYgQEAgX19aTjNKU0M3VVN0cmluZzRmcm9tRWkKIF9fWk4zSlND
N1VTdHJpbmc0ZnJvbUVqCiBfX1pOM0pTQzdVU3RyaW5nNGZyb21FbAogX19aTjNKU0M3VVN0cmlu
ZzZhcHBlbmRFUEtjCi1fX1pOM0pTQzdVU3RyaW5nNmFwcGVuZEVSS1MwXwogX19aTjNKU0M3VVN0
cmluZ0MxRVBLYwogX19aTjNKU0M3VVN0cmluZ0MxRVBLdGkKIF9fWk4zSlNDN1VTdHJpbmdhU0VQ
S2MKQEAgLTQwMiw2ICs0MDEsNyBAQCBfX1pOSzNKU0M4SlNPYmplY3Q4dG9PYmplY3RFUE5TXzlF
eGVjU3RhCiBfX1pOSzNKU0M4SlNPYmplY3Q4dG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pO
SzNKU0M4SlNPYmplY3Q5Y2xhc3NOYW1lRXYKIF9fWk5LM0pTQzhKU09iamVjdDl0b0Jvb2xlYW5F
UE5TXzlFeGVjU3RhdGVFCitfX1pOSzNKU0M4SlNTdHJpbmcxMXJlc29sdmVSb3BlRXYKIF9fWk5L
M0pTQzlIYXNoVGFibGUxMWNyZWF0ZVRhYmxlRVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk5LM0pT
QzlIYXNoVGFibGUxMWRlbGV0ZVRhYmxlRXYKIF9fWk5LM1dURjhDb2xsYXRvcjdjb2xsYXRlRVBL
dG1TMl9tCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CShyZXZpc2lvbiA1MTY2NikKKysrIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI2NSw3ICsyMjY1LDcgQEAgSlNWYWx1ZSBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9
IGNhbGxGcmFtZS0+cihiYXNlKS5qc1ZhbHVlKCk7CiAgICAgICAgIGlmIChMSUtFTFkoaXNKU1N0
cmluZyhnbG9iYWxEYXRhLCBiYXNlVmFsdWUpKSkgewogICAgICAgICAgICAgaW50IGRzdCA9IHZQ
Q1sxXS51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9IGpzTnVtYmVy
KGNhbGxGcmFtZSwgYXNTdHJpbmcoYmFzZVZhbHVlKS0+dmFsdWUoKS5zaXplKCkpOworICAgICAg
ICAgICAgY2FsbEZyYW1lLT5yKGRzdCkgPSBqc051bWJlcihjYWxsRnJhbWUsIGFzU3RyaW5nKGJh
c2VWYWx1ZSktPmxlbmd0aCgpKTsKICAgICAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9w
X2dldF9zdHJpbmdfbGVuZ3RoKTsKICAgICAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAg
ICAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gNTE2NjYp
CisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUyLDggKzUyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwog
ICAgIEp1bXAgc3RyaW5nX2ZhaWx1cmVDYXNlczIgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJl
c3MocmVnVDApLCBJbW1QdHIobV9nbG9iYWxEYXRhLT5qc1N0cmluZ1ZQdHIpKTsKIAogICAgIC8v
IENoZWNrcyBvdXQgb2theSEgLSBnZXQgdGhlIGxlbmd0aCBmcm9tIHRoZSBVc3RyaW5nLgotICAg
IGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTU3RyaW5nLCBtX3ZhbHVl
KSArIE9CSkVDVF9PRkZTRVRPRihVU3RyaW5nLCBtX3JlcCkpLCByZWdUMik7Ci0gICAgbG9hZDMy
KEFkZHJlc3MocmVnVDIsIE9CSkVDVF9PRkZTRVRPRihVU3RyaW5nOjpSZXAsIGxlbikpLCByZWdU
Mik7CisgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU1N0cmluZywg
bV9sZW5ndGgpKSwgcmVnVDIpOwogCiAgICAgSnVtcCBzdHJpbmdfZmFpbHVyZUNhc2VzMyA9IGJy
YW5jaDMyKEFib3ZlLCByZWdUMiwgSW1tMzIoSU5UX01BWCkpOwogICAgIG1vdmUocmVnVDIsIHJl
Z1QwKTsKQEAgLTE1OTMsOCArMTU5Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG8KICAgICBKdW1wIHN0cmluZ19mYWlsdXJlQ2FzZXMyID0gYnJhbmNoUHRyKE5v
dEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJpbmdWUHRy
KSk7CiAKICAgICAvLyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUg
VXN0cmluZy4KLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU1N0
cmluZywgbV92YWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoVVN0cmluZywgbV9yZXApKSwgcmVnVDAp
OwotICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoVVN0cmluZzo6UmVw
LCBsZW4pKSwgcmVnVDApOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VU
T0YoSlNTdHJpbmcsIG1fbGVuZ3RoKSksIHJlZ1QwKTsKIAogICAgIEp1bXAgc3RyaW5nX2ZhaWx1
cmVDYXNlczMgPSBicmFuY2gzMihBYm92ZSwgcmVnVDAsIEltbTMyKEpTSW1tZWRpYXRlOjptYXhJ
bW1lZGlhdGVJbnQpKTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA1
MTY2NikKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNDMsNiArMTA0MywxNCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1
ZSwgb3BfCiAKICAgICBib29sIGxlZnRJc1N0cmluZyA9IHYxLmlzU3RyaW5nKCk7CiAgICAgaWYg
KGxlZnRJc1N0cmluZyAmJiB2Mi5pc1N0cmluZygpKSB7CisgICAgICAgIGlmIChhc1N0cmluZyh2
MSktPmlzUm9wZSgpIHx8IGFzU3RyaW5nKHYyKS0+aXNSb3BlKCkpIHsKKyAgICAgICAgICAgIFJl
ZlB0cjxKU1N0cmluZzo6Um9wZT4gcm9wZSA9IEpTU3RyaW5nOjpSb3BlOjpjcmVhdGUoMik7Cisg
ICAgICAgICAgICByb3BlLT5pbml0aWFsaXplRmliZXIoMCwgYXNTdHJpbmcodjEpKTsKKyAgICAg
ICAgICAgIHJvcGUtPmluaXRpYWxpemVGaWJlcigxLCBhc1N0cmluZyh2MikpOworICAgICAgICAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuZXcgKGdsb2JhbERhdGEpIEpTU3Ry
aW5nKGdsb2JhbERhdGEsIHJvcGUucmVsZWFzZSgpKSk7CisgICAgICAgIH0KKwogICAgICAgICBS
ZWZQdHI8VVN0cmluZzo6UmVwPiB2YWx1ZSA9IGNvbmNhdGVuYXRlKGFzU3RyaW5nKHYxKS0+dmFs
dWUoKS5yZXAoKSwgYXNTdHJpbmcodjIpLT52YWx1ZSgpLnJlcCgpKTsKICAgICAgICAgaWYgKFVO
TElLRUxZKCF2YWx1ZSkpIHsKICAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihjYWxs
RnJhbWUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDUx
NjY2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDM2ICszMCwxMjEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK0pTU3RyaW5nOjpS
b3BlOjp+Um9wZSgpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcm9wZUxlbmd0
aDsgKytpKSB7CisgICAgICAgIEZpYmVyJiBmaWJlciA9IG1fZmliZXJzW2ldOworICAgICAgICBp
ZiAoZmliZXIuaXNSb3BlKCkpCisgICAgICAgICAgICBmaWJlci5yb3BlKCktPmRlcmVmKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZpYmVyLnN0cmluZygpLT5kZXJlZigpOworICAgIH0K
K30KKworI2RlZmluZSBST1BFX0NPUFlfQ0hBUlNfSU5MSU5FX0NVVE9GRiAyMAorCitzdGF0aWMg
aW5saW5lIHZvaWQgY29weUNoYXJzKFVDaGFyKiBkZXN0aW5hdGlvbiwgY29uc3QgVUNoYXIqIHNv
dXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycykKK3sKKyNpZmRlZiBST1BFX0NPUFlfQ0hBUlNf
SU5MSU5FX0NVVE9GRgorICAgIGlmIChudW1DaGFyYWN0ZXJzIDw9IFJPUEVfQ09QWV9DSEFSU19J
TkxJTkVfQ1VUT0ZGKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1DaGFy
YWN0ZXJzOyArK2kpCisgICAgICAgICAgICBkZXN0aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyNlbmRpZgorICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291
cmNlLCBudW1DaGFyYWN0ZXJzICogc2l6ZW9mKFVDaGFyKSk7Cit9CisKKy8vIE92ZXJ2aWV3OiB0
aGlzIG1ldGhvZHMgY29udmVydHMgYSBKU1N0cmluZyBmcm9tIGhvbGRpbmcgYSBzdHJpbmcgaW4g
cm9wZSBmb3JtCisvLyBkb3duIHRvIGEgc2ltcGxlIFVTdHJpbmcgcmVwcmVzZW50YXRpb24uICBJ
dCBkb2VzIHNvIGJ5IGJ1aWxkaW5nIHVwIHRoZSBzdHJpbmcKKy8vIGJhY2t3YXJkcywgc2luY2Ug
d2Ugd2FudCB0byBhdm9pZCByZWN1cnNpb24sIHdlIGV4cGVjdCB0aGF0IHRoZSB0cmVlIHN0cnVj
dHVyZQorLy8gcmVwcmVzZW50aW5nIHRoZSByb3BlIGlzIGxpa2VseSBpbWJhbGFuY2VkIHdpdGgg
bW9yZSBub2RlcyBkb3duIHRoZSBsZWZ0IHNpZGUKKy8vIChzaW5jZSBhcHBlbmRpbmcgdG8gdGhl
IHN0cmluZyBpcyBsaWtlbHkgbW9yZSBjb21tb24pIC0gYW5kIGFzIHN1Y2ggcmVzb2x2aW5nCisv
LyBpbiB0aGlzIGZhc2hpb24gc2hvdWxkIG1pbmltaXplIHdvcmsgcXVldWUgc2l6ZS4gIChJZiB3
ZSBidWlsdCB0aGUgcXVldWUgZm9yd2FyZHMKKy8vIHdlIHdvdWxkIGxpa2VseSBoYXZlIHRvIHBs
YWNlIGFsbCBvZiB0aGUgY29uc3RpdHVlbnQgVVN0cmluZzo6UmVwcyBpbnRvIHRoZQorLy8gVmVj
dG9yIGJlZm9yZSBwZXJmb3JtaW5nIGFueSBjb25jYXRlbmF0aW9uLCBidXQgYnkgd29ya2luZyBi
YWNrd2FyZHMgd2UgbGlrZWx5CisvLyBvbmx5IGZpbGwgdGhlIHF1ZXVlIHdpdGggdGhlIG51bWJl
ciBvZiBzdWJzdHJpbmdzIGF0IGFueSBnaXZlbiBsZXZlbCBpbiBhCisvLyByb3BlLW9mLXJvcGVz
LikKK3ZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNS
b3BlKCkpOworCisgICAgLy8gQWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBob2xkIHRoZSBmaW5hbCBz
dHJpbmcsIHBvc2l0aW9uIGluaXRpYWxseSBwb2ludHMgdG8gdGhlIGVuZC4KKyAgICBVQ2hhciog
YnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihmYXN0TWFsbG9jKG1fbGVuZ3RoICogc2l6ZW9m
KFVDaGFyKSkpOworICAgIFVDaGFyKiBwb3NpdGlvbiA9IGJ1ZmZlciArIG1fbGVuZ3RoOworCisg
ICAgLy8gU3RhcnQgd2l0aCB0aGUgY3VycmVudCBSb3BlLgorICAgIFZlY3RvcjxSb3BlOjpGaWJl
ciwgMzI+IHdvcmtRdWV1ZTsKKyAgICBSb3BlKiByb3BlID0gbV9yb3BlLmdldCgpOworICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgIC8vIENvcHkgdGhlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50
IHJvcGUgaW50byB0aGUgd29ya1F1ZXVlLCB3aXRoIHRoZSBsYXN0IGl0ZW0gaW4gJ2N1cnJlbnRG
aWJlcicKKyAgICAgICAgLy8gKHdlIHdpbGwgYmUgd29ya2luZyBiYWNrd2FyZHMgb3ZlciB0aGUg
cm9wZSkuCisgICAgICAgIHVuc2lnbmVkIHJvcGVMZW5ndGhNaW51c09uZSA9IHJvcGUtPnJvcGVM
ZW5ndGgoKSAtIDE7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByb3BlTGVuZ3Ro
TWludXNPbmU7ICsraSkKKyAgICAgICAgICAgIHdvcmtRdWV1ZS5hcHBlbmQocm9wZS0+ZmliZXJz
KGkpKTsKKyAgICAgICAgUm9wZTo6RmliZXIgY3VycmVudEZpYmVyID0gcm9wZS0+ZmliZXJzKHJv
cGVMZW5ndGhNaW51c09uZSk7CisKKyAgICAgICAgLy8gU3BpbiBiYWNrd2FyZHMgb3ZlciB0aGUg
d29ya1F1ZXVlIChzdGFydGluZyB3aXRoIGN1cnJlbnRGaWJlciksCisgICAgICAgIC8vIHdyaXRp
bmcgdGhlIHN0cmluZ3MgaW50byB0aGUgYnVmZmVyLgorICAgICAgICB3aGlsZSAoY3VycmVudEZp
YmVyLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgIFVTdHJpbmc6OlJlcCogc3RyaW5nID0gY3Vy
cmVudEZpYmVyLnN0cmluZygpOworICAgICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5n
LT5sZW47CisgICAgICAgICAgICBwb3NpdGlvbiAtPSBsZW5ndGg7CisgICAgICAgICAgICBjb3B5
Q2hhcnMocG9zaXRpb24sIHN0cmluZy0+ZGF0YSgpLCBsZW5ndGgpOworCisgICAgICAgICAgICAv
LyBXYXMgdGhpcyB0aGUgbGFzdCBpdGVtIGluIHRoZSB3b3JrIHF1ZXVlPworICAgICAgICAgICAg
aWYgKHdvcmtRdWV1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZ290byBicmVha091dE9m
VHdvTG9vcHM7CisgICAgICAgICAgICAvLyBObyEgLSBzZXQgdGhlIG5leHQgaXRlbSB1cCB0byBw
cm9jZXNzLgorICAgICAgICAgICAgY3VycmVudEZpYmVyID0gd29ya1F1ZXVlLmxhc3QoKTsKKyAg
ICAgICAgICAgIHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CisgICAgICAgIH0KKworICAgICAgICAv
LyBJZiB3ZSBnZXQgaGVyZSB3ZSBmZWxsIG91dCBvZiB0aGUgbG9vcCBjb25jYXRlbmF0aW5nIHN0
cmluZ3MgLSBjdXJyZW50RmliZXIgaXMgYSByb3BlLgorICAgICAgICAvLyBzZXQgdGhlICdyb3Bl
JyB2YXJpYWJsZSwgYW5kIGNvbnRpbnVlIGFyb3VuZCB0aGUgbG9vcC4KKyAgICAgICAgQVNTRVJU
KGN1cnJlbnRGaWJlci5pc1JvcGUoKSk7CisgICAgICAgIHJvcGUgPSBjdXJyZW50RmliZXIucm9w
ZSgpOworICAgIH0KK2JyZWFrT3V0T2ZUd29Mb29wczoKKworICAgIC8vIENyZWF0ZSBhIHN0cmlu
ZyBmcm9tIHRoZSBVQ2hhciBidWZmZXIsIGNsZWFyIHRoZSByb3BlIFJlZlB0ci4KKyAgICBBU1NF
UlQoYnVmZmVyID09IHBvc2l0aW9uKTsKKyAgICBtX3ZhbHVlID0gVVN0cmluZzo6UmVwOjpjcmVh
dGUoYnVmZmVyLCBtX2xlbmd0aCwgZmFsc2UpOworICAgIG1fcm9wZS5jbGVhcigpOworCisgICAg
QVNTRVJUKCFpc1JvcGUoKSk7Cit9CisKIEpTVmFsdWUgSlNTdHJpbmc6OnRvUHJpbWl0aXZlKEV4
ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNv
bnN0X2Nhc3Q8SlNTdHJpbmcqPih0aGlzKTsKIH0KIAotYm9vbCBKU1N0cmluZzo6Z2V0UHJpbWl0
aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiB2YWx1ZSkKK2Jv
b2wgSlNTdHJpbmc6OmdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJl
ciwgSlNWYWx1ZSYgcmVzdWx0KQogewotICAgIHZhbHVlID0gdGhpczsKLSAgICBudW1iZXIgPSBt
X3ZhbHVlLnRvRG91YmxlKCk7CisgICAgcmVzdWx0ID0gdGhpczsKKyAgICBudW1iZXIgPSB2YWx1
ZSgpLnRvRG91YmxlKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEpTU3RyaW5nOjp0
b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fdmFsdWUuaXNFbXB0
eSgpOworICAgIHJldHVybiBtX2xlbmd0aDsKIH0KIAogZG91YmxlIEpTU3RyaW5nOjp0b051bWJl
cihFeGVjU3RhdGUqKSBjb25zdAogewotICAgIHJldHVybiBtX3ZhbHVlLnRvRG91YmxlKCk7Cisg
ICAgcmV0dXJuIHZhbHVlKCkudG9Eb3VibGUoKTsKIH0KIAogVVN0cmluZyBKU1N0cmluZzo6dG9T
dHJpbmcoRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgICByZXR1cm4gbV92YWx1ZTsKKyAgICByZXR1
cm4gdmFsdWUoKTsKIH0KIAogVVN0cmluZyBKU1N0cmluZzo6dG9UaGlzU3RyaW5nKEV4ZWNTdGF0
ZSopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdmFsdWU7CisgICAgcmV0dXJuIHZhbHVlKCk7CiB9
CiAKIEpTU3RyaW5nKiBKU1N0cmluZzo6dG9UaGlzSlNTdHJpbmcoRXhlY1N0YXRlKikKQEAgLTEw
NiwxNCArMTkxLDE0IEBAIGJvb2wgSlNTdHJpbmc6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3QK
IGJvb2wgSlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBk
ZXNjcmlwdG9yKQogewogICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1l
cygpLmxlbmd0aCkgewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIo
ZXhlYywgbV92YWx1ZS5zaXplKCkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7
CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc051bWJlcihleGVjLCBtX2xlbmd0
aCksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNTdHJpY3RVSW50MzI7CiAgICAgdW5zaWduZWQg
aSA9IHByb3BlcnR5TmFtZS50b1N0cmljdFVJbnQzMigmaXNTdHJpY3RVSW50MzIpOwotICAgIGlm
IChpc1N0cmljdFVJbnQzMiAmJiBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdmFsdWUuc2l6
ZSgpKSkgewotICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNTaW5nbGVDaGFyYWN0
ZXJTdWJzdHJpbmcoZXhlYywgbV92YWx1ZSwgaSksIERvbnREZWxldGUgfCBSZWFkT25seSk7Cisg
ICAgaWYgKGlzU3RyaWN0VUludDMyICYmIGkgPCBtX2xlbmd0aCkgeworICAgICAgICBkZXNjcmlw
dG9yLnNldERlc2NyaXB0b3IoanNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoZXhlYywgdmFsdWUo
KSwgaSksIERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDUxNjY2
KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC02MCwxMiArNjAsNzIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgSlNTdHJpbmcqIGpzT3duZWRT
dHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYpOyAKIAogICAgIGNsYXNzIEpTU3RyaW5n
IDogcHVibGljIEpTQ2VsbCB7CisgICAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgSklU
OwogICAgICAgICBmcmllbmQgc3RydWN0IFZQdHJTZXQ7CiAKLSAgICBwdWJsaWM6CisgICAgICAg
IC8vIEEgUm9wZSBpcyBhIHN0cmluZyBjb21wb3NlZCBvZiBhIHNldCBvZiBzdWJzdHJpbmdzLgor
ICAgICAgICBjbGFzcyBSb3BlIDogcHVibGljIFJlZkNvdW50ZWQ8Um9wZT4geworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICAvLyBBIFJvcGUgaXMgY29tcG9zZWQgZnJvbSBhIHNldCBvZiBz
bWFsbGVyIHN0cmluZ3MgY2FsbGVkIEZpYmVycy4KKyAgICAgICAgICAgIC8vIEVhY2ggRmliZXIg
aW4gYSByb3BlIGlzIGVpdGhlciBVU3RyaW5nOjpSZXAgb3IgYW5vdGhlciBSb3BlLgorICAgICAg
ICAgICAgY2xhc3MgRmliZXIgeworICAgICAgICAgICAgcHVibGljOgorICAgICAgICAgICAgICAg
IEZpYmVyKCkge30KKyAgICAgICAgICAgICAgICBGaWJlcihVU3RyaW5nOjpSZXAqIHN0cmluZykg
OiBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHN0cmluZykpIHt9CisgICAgICAg
ICAgICAgICAgRmliZXIoUm9wZSogcm9wZSkgOiBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHJvcGUpIHwgMSkge30KKworICAgICAgICAgICAgICAgIGJvb2wgaXNSb3BlKCkgeyBy
ZXR1cm4gbV92YWx1ZSAmIDE7IH0KKyAgICAgICAgICAgICAgICBSb3BlKiByb3BlKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxSb3BlKj4obV92YWx1ZSAmIH4xKTsgfQorICAgICAgICAgICAg
ICAgIGJvb2wgaXNTdHJpbmcoKSB7IHJldHVybiAhaXNSb3BlKCk7IH0KKyAgICAgICAgICAgICAg
ICBVU3RyaW5nOjpSZXAqIHN0cmluZygpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VVN0cmlu
Zzo6UmVwKj4obV92YWx1ZSk7IH0KKworICAgICAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
ICAgICBpbnRwdHJfdCBtX3ZhbHVlOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgLy8g
Q3JlYXRlcyBhIFJvcGUgY29tcHJpc2luZyBvZiAncm9wZUxlbmd0aCcgRmliZXJzLgorICAgICAg
ICAgICAgLy8gVGhlIFJvcGUgaXMgY29uc3RydWN0ZWQgaW4gYW4gdW5pbml0aWFsaXplZCBzdGF0
ZSAtIGluaXRpYWxpemUgbXVzdCBiZSBjYWxsZWQgZm9yIGVhY2ggRmliZXIgaW4gdGhlIFJvcGUu
CisgICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSb3BlPiBjcmVhdGUodW5zaWduZWQgcm9w
ZUxlbmd0aCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IChyb3BlTGVuZ3RoKSBSb3BlKHJvcGVMZW5n
dGgpKTsgfQorCisgICAgICAgICAgICB+Um9wZSgpOworCisgICAgICAgICAgICB2b2lkIGluaXRp
YWxpemVGaWJlcih1bnNpZ25lZCBpbmRleCwgVVN0cmluZzo6UmVwKiBzdHJpbmcpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgc3RyaW5nLT5yZWYoKTsKKyAgICAgICAgICAgICAgICBt
X2ZpYmVyc1tpbmRleF0gPSBGaWJlcihzdHJpbmcpOworICAgICAgICAgICAgICAgIG1fc3RyaW5n
TGVuZ3RoICs9IHN0cmluZy0+bGVuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBp
bml0aWFsaXplRmliZXIodW5zaWduZWQgaW5kZXgsIFJvcGUqIHJvcGUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcm9wZS0+cmVmKCk7CisgICAgICAgICAgICAgICAgbV9maWJlcnNb
aW5kZXhdID0gRmliZXIocm9wZSk7CisgICAgICAgICAgICAgICAgbV9zdHJpbmdMZW5ndGggKz0g
cm9wZS0+c3RyaW5nTGVuZ3RoKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2b2lkIGlu
aXRpYWxpemVGaWJlcih1bnNpZ25lZCBpbmRleCwgSlNTdHJpbmcqIGpzU3RyaW5nKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGlmIChqc1N0cmluZy0+aXNSb3BlKCkpCisgICAgICAg
ICAgICAgICAgICAgIGluaXRpYWxpemVGaWJlcihpbmRleCwganNTdHJpbmctPnJvcGUoKSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpbml0aWFsaXplRmliZXIo
aW5kZXgsIGpzU3RyaW5nLT5zdHJpbmcoKS5yZXAoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHJvcGVMZW5ndGgoKSB7IHJldHVybiBtX3JvcGVMZW5ndGg7IH0KKyAg
ICAgICAgICAgIHVuc2lnbmVkIHN0cmluZ0xlbmd0aCgpIHsgcmV0dXJuIG1fc3RyaW5nTGVuZ3Ro
OyB9CisgICAgICAgICAgICBGaWJlciYgZmliZXJzKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X2ZpYmVyc1tpbmRleF07IH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgUm9wZSh1
bnNpZ25lZCByb3BlTGVuZ3RoKSA6IG1fcm9wZUxlbmd0aChyb3BlTGVuZ3RoKSwgbV9zdHJpbmdM
ZW5ndGgoMCkge30KKyAgICAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHVuc2ln
bmVkIHJvcGVMZW5ndGgpIHsgcmV0dXJuIGZhc3RNYWxsb2Moc2l6ZW9mKFJvcGUpICsgKHJvcGVM
ZW5ndGggLSAxKSAqIHNpemVvZihVU3RyaW5nOjpSZXAqKSk7IH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgdW5zaWduZWQgbV9yb3BlTGVuZ3RoOworICAgICAgICAgICAgdW5zaWduZWQgbV9z
dHJpbmdMZW5ndGg7CisgICAgICAgICAgICBGaWJlciBtX2ZpYmVyc1sxXTsKKyAgICAgICAgfTsK
KwogICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IFVTdHJp
bmcmIHZhbHVlKQogICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0
dXJlLmdldCgpKQorICAgICAgICAgICAgLCBtX2xlbmd0aCh2YWx1ZS5zaXplKCkpCiAgICAgICAg
ICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgICAgIEhlYXA6OmhlYXAo
dGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdCh2YWx1ZS5jb3N0KCkpOwpAQCAtNzQsMjIgKzEz
NCw0MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZW51bSBIYXNPdGhlck93bmVyVHlwZSB7
IEhhc090aGVyT3duZXIgfTsKICAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBjb25zdCBVU3RyaW5nJiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5cGUpCiAgICAgICAgICAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAg
ICAsIG1fbGVuZ3RoKHZhbHVlLnNpemUoKSkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkK
ICAgICAgICAgewogICAgICAgICB9CiAgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgUGFzc1JlZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVlLCBIYXNPdGhlck93bmVyVHlw
ZSkKICAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkKKyAgICAgICAgICAgICwgbV9sZW5ndGgodmFsdWUtPnNpemUoKSkKICAgICAgICAgICAgICwg
bV92YWx1ZSh2YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIEpTU3RyaW5nKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxKU1N0cmluZzo6Um9wZT4gcm9wZSkK
KyAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEtPnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkK
KyAgICAgICAgICAgICwgbV9sZW5ndGgocm9wZS0+c3RyaW5nTGVuZ3RoKCkpCisgICAgICAgICAg
ICAsIG1fcm9wZShyb3BlKQorICAgICAgICB7CisgICAgICAgIH0KICAgICAgICAgCi0gICAgICAg
IGNvbnN0IFVTdHJpbmcmIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAg
ICBjb25zdCBVU3RyaW5nJiB2YWx1ZSgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChtX3JvcGUpCisgICAgICAgICAgICAgICAgcmVzb2x2ZVJvcGUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX3ZhbHVlOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIHsgcmV0
dXJuIG1fbGVuZ3RoOyB9CisKKyAgICAgICAgYm9vbCBpc1JvcGUoKSBjb25zdCB7IHJldHVybiBt
X3JvcGU7IH0KKyAgICAgICAgUm9wZSogcm9wZSgpIHsgQVNTRVJUKGlzUm9wZSgpKTsgcmV0dXJu
IG1fcm9wZS5nZXQoKTsgfQorICAgICAgICBVU3RyaW5nJiBzdHJpbmcoKSB7IEFTU0VSVCghaXNS
b3BlKCkpOyByZXR1cm4gbV92YWx1ZTsgfQogCiAgICAgICAgIGJvb2wgZ2V0U3RyaW5nUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90Jik7CiAgICAgICAgIGJvb2wgZ2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAgICAgICAgIGJvb2wgZ2V0
U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAKLSAgICAgICAgYm9vbCBjYW5HZXRJ
bmRleCh1bnNpZ25lZCBpKSB7IHJldHVybiBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdmFs
dWUuc2l6ZSgpKTsgfQorICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0
dXJuIGkgPCBtX2xlbmd0aDsgfQogICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoSlNHbG9iYWxE
YXRhKiwgdW5zaWduZWQpOwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4g
Y3JlYXRlU3RydWN0dXJlKEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRl
KHByb3RvLCBUeXBlSW5mbyhTdHJpbmdUeXBlLCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3Qg
fCBOZWVkc1RoaXNDb252ZXJzaW9uKSk7IH0KQEAgLTEwMSw2ICsxNzksOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCByZXNvbHZlUm9wZSgp
IGNvbnN0OworCiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3RhdGUq
LCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIGdl
dFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgdmFs
dWUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwpA
QCAtMTE3LDcgKzE5NywxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVydHlEZXNjcmlw
dG9yKEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eURlc2NyaXB0b3ImKTsK
IAotICAgICAgICBVU3RyaW5nIG1fdmFsdWU7CisgICAgICAgIC8vIEEgc3RyaW5nIGlzIHJlcHJl
c2VudGVkIGVpdGhlciBieSBhIFVTdHJpbmcgb3IgYSBSb3BlLgorICAgICAgICB1bnNpZ25lZCBt
X2xlbmd0aDsKKyAgICAgICAgbXV0YWJsZSBVU3RyaW5nIG1fdmFsdWU7CisgICAgICAgIG11dGFi
bGUgUmVmUHRyPFJvcGU+IG1fcm9wZTsKICAgICB9OwogCiAgICAgSlNTdHJpbmcqIGFzU3RyaW5n
KEpTVmFsdWUpOwpAQCAtMTQ2LDcgKzIyOSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBV
Q2hhciBjID0gcy5kYXRhKClbb2Zmc2V0XTsKICAgICAgICAgaWYgKGMgPD0gMHhGRikKICAgICAg
ICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKGdsb2JhbERhdGEsIGMpOwotICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCBVU3RyaW5nOjpSZXA6OmNyZWF0ZShzLnJlcCgpLCBvZmZzZXQsIDEp
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwg
VVN0cmluZyhVU3RyaW5nOjpSZXA6OmNyZWF0ZShzLnJlcCgpLCBvZmZzZXQsIDEpKSk7CiAgICAg
fQogCiAgICAgaW5saW5lIEpTU3RyaW5nKiBqc05vbnRyaXZpYWxTdHJpbmcoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBjb25zdCBjaGFyKiBzKQpAQCAtMTY2LDcgKzI0OSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjYW5H
ZXRJbmRleChpKSk7Ci0gICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhn
bG9iYWxEYXRhLCBtX3ZhbHVlLCBpKTsKKyAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVy
U3Vic3RyaW5nKGdsb2JhbERhdGEsIHZhbHVlKCksIGkpOwogICAgIH0KIAogICAgIGlubGluZSBK
U1N0cmluZyoganNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5n
JiBzKQpAQCAtMTk0LDcgKzI3Nyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaWYg
KGMgPD0gMHhGRikKICAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJp
bmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9iYWxEYXRhLCBjKTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBVU3RyaW5n
OjpSZXA6OmNyZWF0ZShzLnJlcCgpLCBvZmZzZXQsIGxlbmd0aCkpOworICAgICAgICByZXR1cm4g
bmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBVU3RyaW5nKFVTdHJpbmc6OlJl
cDo6Y3JlYXRlKHMucmVwKCksIG9mZnNldCwgbGVuZ3RoKSkpOwogICAgIH0KIAogICAgIGlubGlu
ZSBKU1N0cmluZyoganNPd25lZFN0cmluZyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0
IFVTdHJpbmcmIHMpCkBAIC0yMjIsMTQgKzMwNSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBz
bG90KQogICAgIHsKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkubGVuZ3RoKSB7Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKGV4ZWMs
IG1fdmFsdWUuc2l6ZSgpKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKGpzTnVtYmVyKGV4
ZWMsIG1fbGVuZ3RoKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCiAg
ICAgICAgIGJvb2wgaXNTdHJpY3RVSW50MzI7CiAgICAgICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0
eU5hbWUudG9TdHJpY3RVSW50MzIoJmlzU3RyaWN0VUludDMyKTsKLSAgICAgICAgaWYgKGlzU3Ry
aWN0VUludDMyICYmIGkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV92YWx1ZS5zaXplKCkpKSB7
Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlKGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKGV4
ZWMsIG1fdmFsdWUsIGkpKTsKKyAgICAgICAgaWYgKGlzU3RyaWN0VUludDMyICYmIGkgPCBtX2xl
bmd0aCkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShqc1NpbmdsZUNoYXJhY3RlclN1YnN0
cmluZyhleGVjLCB2YWx1ZSgpLCBpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogCkBAIC0yMzgsOCArMzIxLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNT
dGF0ZSogZXhlYywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAg
ICAgewotICAgICAgICBpZiAocHJvcGVydHlOYW1lIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
dmFsdWUuc2l6ZSgpKSkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShqc1NpbmdsZUNoYXJh
Y3RlclN1YnN0cmluZyhleGVjLCBtX3ZhbHVlLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAgICAgaWYg
KHByb3BlcnR5TmFtZSA8IG1fbGVuZ3RoKSB7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKGpz
U2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKGV4ZWMsIHZhbHVlKCksIHByb3BlcnR5TmFtZSkpOwog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApJbmRleDogSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcGVyYXRpb25zLmgJKHJldmlzaW9uIDUxNjY2KQorKysgSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw2ICsyMDQsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBib29sIGxlZnRJc1N0cmluZyA9IHYxLmlz
U3RyaW5nKCk7CiAgICAgICAgIGlmIChsZWZ0SXNTdHJpbmcgJiYgdjIuaXNTdHJpbmcoKSkgewor
ICAgICAgICAgICAgaWYgKGFzU3RyaW5nKHYxKS0+aXNSb3BlKCkgfHwgYXNTdHJpbmcodjIpLT5p
c1JvcGUoKSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxKU1N0cmluZzo6Um9wZT4gcm9wZSA9
IEpTU3RyaW5nOjpSb3BlOjpjcmVhdGUoMik7CisgICAgICAgICAgICAgICAgcm9wZS0+aW5pdGlh
bGl6ZUZpYmVyKDAsIGFzU3RyaW5nKHYxKSk7CisgICAgICAgICAgICAgICAgcm9wZS0+aW5pdGlh
bGl6ZUZpYmVyKDEsIGFzU3RyaW5nKHYyKSk7CisgICAgICAgICAgICAgICAgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOworICAgICAgICAgICAgICAg
IHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEsIHJvcGUucmVsZWFz
ZSgpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4g
dmFsdWUgPSBjb25jYXRlbmF0ZShhc1N0cmluZyh2MSktPnZhbHVlKCkucmVwKCksIGFzU3RyaW5n
KHYyKS0+dmFsdWUoKS5yZXAoKSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKQEAgLTI5OCw0
NyArMzA2LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAgICAgQVNTRVJUKGNvdW50
ID49IDMpOwogCi0gICAgICAgIC8vIEVzdGltYXRlIHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVxdWly
ZWQgdG8gaG9sZCB0aGUgZW50aXJlIHN0cmluZy4gIElmIGFsbAotICAgICAgICAvLyBhcmd1bWVu
dHMgYXJlIHN0cmluZ3MsIHdlIGNhbiBlYXNpbHkgY2FsY3VsYXRlIHRoZSBleGFjdCBhbW91bnQg
b2Ygc3BhY2UKLSAgICAgICAgLy8gcmVxdWlyZWQuICBGb3IgYW55IG90aGVyIGFyZ3VtZW50cywg
Zm9yIG5vdyBsZXQncyBhc3N1bWUgdGhleSBtYXkgcmVxdWlyZQotICAgICAgICAvLyAxMSBVQ2hh
cnMgb2Ygc3RvcmFnZS4gIFRoaXMgaXMgZW5vdWNoIHRvIGhvbGQgYW55IGludCwgYW5kIGxpa2Vs
eSBpcyBhbHNvCi0gICAgICAgIC8vIHJlYXNvbmFibGUgZm9yIHRoZSBvdGhlciBpbW1lZGlhdGVz
LiAgV2UgbWF5IHdhbnQgdG8gY29tZSBiYWNrIGFuZCB0dW5lCi0gICAgICAgIC8vIHRoaXMgdmFs
dWUgYXQgc29tZSBwb2ludC4KLSAgICAgICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IDA7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgICAgICBK
U1ZhbHVlIHYgPSBzdHJpbmdzW2ldLmpzVmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChMSUtFTFko
di5pc1N0cmluZygpKSkKLSAgICAgICAgICAgICAgICBidWZmZXJTaXplICs9IGFzU3RyaW5nKHYp
LT52YWx1ZSgpLnNpemUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBidWZm
ZXJTaXplICs9IDExOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQWxsb2NhdGUgYW4gb3V0cHV0
IHN0cmluZyB0byBzdG9yZSB0aGUgcmVzdWx0LgotICAgICAgICAvLyBJZiB0aGUgZmlyc3QgYXJn
dW1lbnQgaXMgYSBTdHJpbmcsIGFuZCBpZiBpdCBoYXMgdGhlIGNhcGFjaXR5IChvciBjYW4gZ3Jv
dwotICAgICAgICAvLyBpdHMgY2FwYWNpdHkpIHRvIGhvbGQgdGhlIGVudGlyZSByZXN1bHQgdGhl
biB1c2UgdGhpcyBhcyBhIGJhc2UgdG8gY29uY2F0ZW5hdGUKLSAgICAgICAgLy8gb250by4gIE90
aGVyd2lzZSwgYWxsb2NhdGUgYSBuZXcgZW1wdHkgb3V0cHV0IGJ1ZmZlci4KLSAgICAgICAgSlNW
YWx1ZSBmaXJzdFZhbHVlID0gc3RyaW5nc1swXS5qc1ZhbHVlKCk7Ci0gICAgICAgIFJlZlB0cjxV
U3RyaW5nOjpSZXA+IHJlc3VsdFJlcDsKLSAgICAgICAgaWYgKGZpcnN0VmFsdWUuaXNTdHJpbmco
KSAmJiAocmVzdWx0UmVwID0gYXNTdHJpbmcoZmlyc3RWYWx1ZSktPnZhbHVlKCkucmVwKCkpLT5y
ZXNlcnZlQ2FwYWNpdHkoYnVmZmVyU2l6ZSkpIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5n
IHRvIGNvbmNhdGVuYXRlIG9udG8gdGhlIGZpcnN0IHN0cmluZyAtIHJlbW92ZSBpdCBmcm9tIHRo
ZSBsaXN0IG9mIGl0ZW1zIHRvIGJlIGFwcGVuZGVkLgotICAgICAgICAgICAgKytzdHJpbmdzOwot
ICAgICAgICAgICAgLS1jb3VudDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHRS
ZXAgPSBVU3RyaW5nOjpSZXA6OmNyZWF0ZUVtcHR5QnVmZmVyKGJ1ZmZlclNpemUpOwotICAgICAg
ICBVU3RyaW5nIHJlc3VsdChyZXN1bHRSZXApOworICAgICAgICBSZWZQdHI8SlNTdHJpbmc6OlJv
cGU+IHJvcGUgPSBKU1N0cmluZzo6Um9wZTo6Y3JlYXRlKGNvdW50KTsKIAotICAgICAgICAvLyBM
b29wIG92ZXIgdGhlIG9wZXJhbmRzLCB3cml0aW5nIHRoZW0gaW50byB0aGUgb3V0cHV0IGJ1ZmZl
ci4KICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAg
ICAgICAgIEpTVmFsdWUgdiA9IHN0cmluZ3NbaV0uanNWYWx1ZSgpOwogICAgICAgICAgICAgaWYg
KExJS0VMWSh2LmlzU3RyaW5nKCkpKQotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXNT
dHJpbmcodiktPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIHJvcGUtPmluaXRpYWxpemVGaWJl
cihpLCBhc1N0cmluZyh2KSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCh2LnRvU3RyaW5nKGNhbGxGcmFtZSkpOworICAgICAgICAgICAgICAgIHJvcGUt
PmluaXRpYWxpemVGaWJlcihpLCB2LnRvU3RyaW5nKGNhbGxGcmFtZSkucmVwKCkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGNhbGxGcmFtZSwgcmVzdWx0KTsKKyAgICAg
ICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwor
ICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3Bl
LnJlbGVhc2UoKSk7CiAgICAgfQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE9w
ZXJhdGlvbnNfaApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNwcAko
cmV2aXNpb24gNTE2NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgYm9vbCBTdHJpbmdPYmplY3Q6OmRl
bGV0ZVByb3BlcnR5KEV4ZWNTdAogCiB2b2lkIFN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlO
YW1lcyhFeGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzKQog
ewotICAgIGludCBzaXplID0gaW50ZXJuYWxWYWx1ZSgpLT52YWx1ZSgpLnNpemUoKTsKKyAgICBp
bnQgc2l6ZSA9IGludGVybmFsVmFsdWUoKS0+bGVuZ3RoKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBzaXplOyArK2kpCiAgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhl
YywgVVN0cmluZzo6ZnJvbShpKSkpOwogICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVy
dHlOYW1lcyhleGVjLCBwcm9wZXJ0eU5hbWVzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44275</attachid>
            <date>2009-12-03 16:04:40 -0800</date>
            <delta_ts>2009-12-03 16:52:38 -0800</delta_ts>
            <desc>Add back an export accidentally deleted.</desc>
            <filename>patch.ROPE.3.txt</filename>
            <type>text/plain</type>
            <size>25396</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxNjY2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODcgQEAKKzIwMDktMTItMDMgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMjEzNgorICAgICAgICBBZGQgYSByb3BlIHJlcHJlc2VudGF0aW9uIHRvIEpT
U3RyaW5nLiAgUHJlc2VudGx5IEpTU3RyaW5nIGFsd2F5cyBob2xkcyBpdHMgZGF0YSBpbiBVU3Ry
aW5nIGZvcm0uCisgICAgICAgIEluc3RlYWQsIGFsbG93IHRoZSByZXN1bHQgb2YgYSBzdHJpbmcg
Y29uY2F0ZW5hdGlvbiB0byBiZSByZXByZXNlbnRlZCBpbiBhIHRyZWUgZm9ybSAtIHdpdGggYQor
ICAgICAgICB2YXJpYWJsZSBzaXplZCwgcmVmZXJlbmNlLWNvdW50ZWQgcm9wZSBub2RlIHJldGFp
bmluZyBhIHNldCBvZiBVU3RyaW5nOjpSZXBzIChvciBvdGhlciByb3BlIG5vcGVzKS4KKworICAg
ICAgICBTdHJpbmdzIG11c3Qgc3RpbGwgY3VycmVudGx5IGJlIHJlc29sdmVkIGRvd24gdG8gYSBm
bGF0IFVTdHJpbmcgcmVwcmVzZW50YXRpb24gYmVmb3JlIGJlaW5nIHVzZWQsCisgICAgICAgIGJ1
dCBieSBob2xkaW5nIHRoZSBzdHJpbmcgaW4gYSByb3BlIHJlcHJlc2VudGF0aW9uIGR1cmluZyBj
b25zdHJ1Y3Rpb24gd2UgY2FuIGF2b2lkIGNvcHlpbmcgZGF0YQorICAgICAgICB1bnRpbCB3ZSBr
bm93IHRoZSBmaW5hbCBzaXplIG9mIHRoZSBzdHJpbmcuCisKKyAgICAgICAgfjIlIHByb2dyZXNz
aW9uIG9uIFN1blNwaWRlciAofjI1JSBvbiBkYXRlLWZvcm1hdC14cGFyYiwgfjIwJSBvbiBzdHJp
bmctdmFsaWRhdGUtaW5wdXQpLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorCisg
ICAgICAgICAgICAtIFVwZGF0ZSBleHBvcnRzLgorCisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50
ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUp
OgorCisgICAgICAgICAgICAtIE1ha2UgdXNlIG9mIG5ldyBKU1N0cmluZzo6bGVuZ3RoKCkgbWV0
aG9kIHRvIGF2b2lkIHByZW1hdHVyZWx5IHJlc29sdmluZyByb3Blcy4KKworICAgICAgICAqIGpp
dC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyk6CisKKyAgICAgICAgICAgIC0gU3dpdGNoIHRoZSBzdHJpbmcgbGVu
Z3RoIHRyYW1wb2xpbmUgdG8gcmVhZCB0aGUgbGVuZ3RoIGRpcmVjdGx5IGZyb20gSlNTdHJpbmc6
Om1fbGVuZ3RoLAorICAgICAgICAgICAgICByYXRoZXIgdGhhbiBmcm9tIHRoZSBKU1N0cmluZydz
IFVTdHJpbmc6OlJlcCdzICdsZW4nIHByb3BlcnR5LgorCisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorCisgICAgICAgICAg
ICAtIE1vZGlmeSBvcF9hZGQgc3VjaCB0aGF0IGFkZGl0aW9uIG9mIHR3byBzdHJpbmdzLCB3aGVy
ZSBlaXRoZXIgb3IgYm90aCBzdHJpbmdzIGFyZSBhbHJlYWR5CisgICAgICAgICAgICAgIGluIHJv
cGUgcmVwcmVzZW50YXRpb24sIHByb2R1Y2VzIGEgcm9wZSBhcyBhIHJlc3VsdC4KKworICAgICAg
ICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6
flJvcGUpOgorICAgICAgICAoSlNDOjpjb3B5Q2hhcnMpOgorICAgICAgICAoSlNDOjpKU1N0cmlu
Zzo6cmVzb2x2ZVJvcGUpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0UHJpbWl0aXZlTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvQm9vbGVhbik6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjp0b051bWJlcik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b1N0cmluZyk6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b1RoaXNTdHJpbmcpOgorICAgICAgICAoSlNDOjpK
U1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKiBydW50aW1l
L0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpSb3BlOjpGaWJlcjo6RmliZXIp
OgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6RmliZXI6OmRlc3Ryb3kpOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6RmliZXI6OmlzUm9wZSk6CisgICAgICAgIChKU0M6OkpT
U3RyaW5nOjpSb3BlOjpGaWJlcjo6cm9wZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpSb3Bl
OjpGaWJlcjo6c3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OlJvcGU6OmNyZWF0ZSk6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpSb3BlOjppbml0aWFsaXplRmliZXIpOgorICAgICAg
ICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6cm9wZUxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjpSb3BlOjpzdHJpbmdMZW5ndGgpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6
ZmliZXJzKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OlJvcGU6OlJvcGUpOgorICAgICAgICAo
SlNDOjpKU1N0cmluZzo6Um9wZTo6b3BlcmF0b3IgbmV3KToKKyAgICAgICAgKEpTQzo6SlNTdHJp
bmc6OkpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnZhbHVlKToKKyAgICAgICAg
KEpTQzo6SlNTdHJpbmc6Omxlbmd0aCk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjppc1JvcGUp
OgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6cm9wZSk6CisgICAgICAgIChKU0M6OkpTU3RyaW5n
OjpzdHJpbmcpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Y2FuR2V0SW5kZXgpOgorICAgICAg
ICAoSlNDOjpqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyk6CisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjpnZXRJbmRleCk6CisgICAgICAgIChKU0M6OmpzU3Vic3RyaW5nKToKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdCk6CisKKyAgICAgICAgICAgIC0gQWRk
IHJvcGUgZm9ybS4KKworICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAo
SlNDOjpqc0FkZCk6CisgICAgICAgIChKU0M6OmNvbmNhdGVuYXRlU3RyaW5ncyk6CisKKyAgICAg
ICAgICAgIC0gVXBkYXRlIHN0cmluZyBjb25jYXRlbmF0aW9uLCBhbmQgYWRkaXRpb24gb2Ygcm9w
ZXMsIHRvIHByb2R1Y2Ugcm9wZXMuCisKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ09iamVjdC5j
cHA6CisgICAgICAgIChKU0M6OlN0cmluZ09iamVjdDo6Z2V0T3duUHJvcGVydHlOYW1lcyk6CisK
KyAgICAgICAgICAgIC0gTWFrZSB1c2Ugb2YgbmV3IEpTU3RyaW5nOjpsZW5ndGgoKSBtZXRob2Qg
dG8gYXZvaWQgcHJlbWF0dXJlbHkgcmVzb2x2aW5nIHJvcGVzLgorCiAyMDA5LTExLTIzICBKZXJl
bXkgTW9za292aWNoICA8amVyZW15QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBFcmljIFNlaWRlbC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9u
IDUxNjY2KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNv
cHkpCkBAIC00MDIsNiArNDAyLDcgQEAgX19aTkszSlNDOEpTT2JqZWN0OHRvT2JqZWN0RVBOU185
RXhlY1N0YQogX19aTkszSlNDOEpTT2JqZWN0OHRvU3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19a
TkszSlNDOEpTT2JqZWN0OWNsYXNzTmFtZUV2CiBfX1pOSzNKU0M4SlNPYmplY3Q5dG9Cb29sZWFu
RVBOU185RXhlY1N0YXRlRQorX19aTkszSlNDOEpTU3RyaW5nMTFyZXNvbHZlUm9wZUV2CiBfX1pO
SzNKU0M5SGFzaFRhYmxlMTFjcmVhdGVUYWJsZUVQTlNfMTJKU0dsb2JhbERhdGFFCiBfX1pOSzNK
U0M5SGFzaFRhYmxlMTFkZWxldGVUYWJsZUV2CiBfX1pOSzNXVEY4Q29sbGF0b3I3Y29sbGF0ZUVQ
S3RtUzJfbQpJbmRleDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gNTE2NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNjUsNyArMjI2NSw3IEBAIEpTVmFsdWUgSW50
ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgSlNWYWx1ZSBiYXNlVmFsdWUg
PSBjYWxsRnJhbWUtPnIoYmFzZSkuanNWYWx1ZSgpOwogICAgICAgICBpZiAoTElLRUxZKGlzSlNT
dHJpbmcoZ2xvYmFsRGF0YSwgYmFzZVZhbHVlKSkpIHsKICAgICAgICAgICAgIGludCBkc3QgPSB2
UENbMV0udS5vcGVyYW5kOwotICAgICAgICAgICAgY2FsbEZyYW1lLT5yKGRzdCkgPSBqc051bWJl
cihjYWxsRnJhbWUsIGFzU3RyaW5nKGJhc2VWYWx1ZSktPnZhbHVlKCkuc2l6ZSgpKTsKKyAgICAg
ICAgICAgIGNhbGxGcmFtZS0+cihkc3QpID0ganNOdW1iZXIoY2FsbEZyYW1lLCBhc1N0cmluZyhi
YXNlVmFsdWUpLT5sZW5ndGgoKSk7CiAgICAgICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChv
cF9nZXRfc3RyaW5nX2xlbmd0aCk7CiAgICAgICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAg
ICAgICAgIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDUxNjY2
KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw4ICs1Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8K
ICAgICBKdW1wIHN0cmluZ19mYWlsdXJlQ2FzZXMyID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwKSwgSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJpbmdWUHRyKSk7CiAKICAgICAv
LyBDaGVja3Mgb3V0IG9rYXkhIC0gZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgVXN0cmluZy4KLSAg
ICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIE9CSkVDVF9PRkZTRVRPRihKU1N0cmluZywgbV92YWx1
ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoVVN0cmluZywgbV9yZXApKSwgcmVnVDIpOwotICAgIGxvYWQz
MihBZGRyZXNzKHJlZ1QyLCBPQkpFQ1RfT0ZGU0VUT0YoVVN0cmluZzo6UmVwLCBsZW4pKSwgcmVn
VDIpOworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNTdHJpbmcs
IG1fbGVuZ3RoKSksIHJlZ1QyKTsKIAogICAgIEp1bXAgc3RyaW5nX2ZhaWx1cmVDYXNlczMgPSBi
cmFuY2gzMihBYm92ZSwgcmVnVDIsIEltbTMyKElOVF9NQVgpKTsKICAgICBtb3ZlKHJlZ1QyLCBy
ZWdUMCk7CkBAIC0xNTkzLDggKzE1OTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElN
YWNoaW5lVHJhbXBvCiAgICAgSnVtcCBzdHJpbmdfZmFpbHVyZUNhc2VzMiA9IGJyYW5jaFB0cihO
b3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0
cikpOwogCiAgICAgLy8gQ2hlY2tzIG91dCBva2F5ISAtIGdldCB0aGUgbGVuZ3RoIGZyb20gdGhl
IFVzdHJpbmcuCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNT
dHJpbmcsIG1fdmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKFVTdHJpbmcsIG1fcmVwKSksIHJlZ1Qw
KTsKLSAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKFVTdHJpbmc6OlJl
cCwgbGVuKSksIHJlZ1QwKTsKKyAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNF
VE9GKEpTU3RyaW5nLCBtX2xlbmd0aCkpLCByZWdUMCk7CiAKICAgICBKdW1wIHN0cmluZ19mYWls
dXJlQ2FzZXMzID0gYnJhbmNoMzIoQWJvdmUsIHJlZ1QwLCBJbW0zMihKU0ltbWVkaWF0ZTo6bWF4
SW1tZWRpYXRlSW50KSk7CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24g
NTE2NjYpCisrKyBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQzLDYgKzEwNDMsMTQgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFs
dWUsIG9wXwogCiAgICAgYm9vbCBsZWZ0SXNTdHJpbmcgPSB2MS5pc1N0cmluZygpOwogICAgIGlm
IChsZWZ0SXNTdHJpbmcgJiYgdjIuaXNTdHJpbmcoKSkgeworICAgICAgICBpZiAoYXNTdHJpbmco
djEpLT5pc1JvcGUoKSB8fCBhc1N0cmluZyh2MiktPmlzUm9wZSgpKSB7CisgICAgICAgICAgICBS
ZWZQdHI8SlNTdHJpbmc6OlJvcGU+IHJvcGUgPSBKU1N0cmluZzo6Um9wZTo6Y3JlYXRlKDIpOwor
ICAgICAgICAgICAgcm9wZS0+aW5pdGlhbGl6ZUZpYmVyKDAsIGFzU3RyaW5nKHYxKSk7CisgICAg
ICAgICAgICByb3BlLT5pbml0aWFsaXplRmliZXIoMSwgYXNTdHJpbmcodjIpKTsKKyAgICAgICAg
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobmV3IChnbG9iYWxEYXRhKSBKU1N0
cmluZyhnbG9iYWxEYXRhLCByb3BlLnJlbGVhc2UoKSkpOworICAgICAgICB9CisKICAgICAgICAg
UmVmUHRyPFVTdHJpbmc6OlJlcD4gdmFsdWUgPSBjb25jYXRlbmF0ZShhc1N0cmluZyh2MSktPnZh
bHVlKCkucmVwKCksIGFzU3RyaW5nKHYyKS0+dmFsdWUoKS5yZXAoKSk7CiAgICAgICAgIGlmIChV
TkxJS0VMWSghdmFsdWUpKSB7CiAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2Fs
bEZyYW1lKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiA1
MTY2NikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwzNiArMzAsMTIxIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitKU1N0cmluZzo6
Um9wZTo6flJvcGUoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3JvcGVMZW5n
dGg7ICsraSkgeworICAgICAgICBGaWJlciYgZmliZXIgPSBtX2ZpYmVyc1tpXTsKKyAgICAgICAg
aWYgKGZpYmVyLmlzUm9wZSgpKQorICAgICAgICAgICAgZmliZXIucm9wZSgpLT5kZXJlZigpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBmaWJlci5zdHJpbmcoKS0+ZGVyZWYoKTsKKyAgICB9
Cit9CisKKyNkZWZpbmUgUk9QRV9DT1BZX0NIQVJTX0lOTElORV9DVVRPRkYgMjAKKworc3RhdGlj
IGlubGluZSB2b2lkIGNvcHlDaGFycyhVQ2hhciogZGVzdGluYXRpb24sIGNvbnN0IFVDaGFyKiBz
b3VyY2UsIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMpCit7CisjaWZkZWYgUk9QRV9DT1BZX0NIQVJT
X0lOTElORV9DVVRPRkYKKyAgICBpZiAobnVtQ2hhcmFjdGVycyA8PSBST1BFX0NPUFlfQ0hBUlNf
SU5MSU5FX0NVVE9GRikgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hh
cmFjdGVyczsgKytpKQorICAgICAgICAgICAgZGVzdGluYXRpb25baV0gPSBzb3VyY2VbaV07Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKyAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNv
dXJjZSwgbnVtQ2hhcmFjdGVycyAqIHNpemVvZihVQ2hhcikpOworfQorCisvLyBPdmVydmlldzog
dGhpcyBtZXRob2RzIGNvbnZlcnRzIGEgSlNTdHJpbmcgZnJvbSBob2xkaW5nIGEgc3RyaW5nIGlu
IHJvcGUgZm9ybQorLy8gZG93biB0byBhIHNpbXBsZSBVU3RyaW5nIHJlcHJlc2VudGF0aW9uLiAg
SXQgZG9lcyBzbyBieSBidWlsZGluZyB1cCB0aGUgc3RyaW5nCisvLyBiYWNrd2FyZHMsIHNpbmNl
IHdlIHdhbnQgdG8gYXZvaWQgcmVjdXJzaW9uLCB3ZSBleHBlY3QgdGhhdCB0aGUgdHJlZSBzdHJ1
Y3R1cmUKKy8vIHJlcHJlc2VudGluZyB0aGUgcm9wZSBpcyBsaWtlbHkgaW1iYWxhbmNlZCB3aXRo
IG1vcmUgbm9kZXMgZG93biB0aGUgbGVmdCBzaWRlCisvLyAoc2luY2UgYXBwZW5kaW5nIHRvIHRo
ZSBzdHJpbmcgaXMgbGlrZWx5IG1vcmUgY29tbW9uKSAtIGFuZCBhcyBzdWNoIHJlc29sdmluZwor
Ly8gaW4gdGhpcyBmYXNoaW9uIHNob3VsZCBtaW5pbWl6ZSB3b3JrIHF1ZXVlIHNpemUuICAoSWYg
d2UgYnVpbHQgdGhlIHF1ZXVlIGZvcndhcmRzCisvLyB3ZSB3b3VsZCBsaWtlbHkgaGF2ZSB0byBw
bGFjZSBhbGwgb2YgdGhlIGNvbnN0aXR1ZW50IFVTdHJpbmc6OlJlcHMgaW50byB0aGUKKy8vIFZl
Y3RvciBiZWZvcmUgcGVyZm9ybWluZyBhbnkgY29uY2F0ZW5hdGlvbiwgYnV0IGJ5IHdvcmtpbmcg
YmFja3dhcmRzIHdlIGxpa2VseQorLy8gb25seSBmaWxsIHRoZSBxdWV1ZSB3aXRoIHRoZSBudW1i
ZXIgb2Ygc3Vic3RyaW5ncyBhdCBhbnkgZ2l2ZW4gbGV2ZWwgaW4gYQorLy8gcm9wZS1vZi1yb3Bl
cy4pCit2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlz
Um9wZSgpKTsKKworICAgIC8vIEFsbG9jYXRlIHRoZSBidWZmZXIgdG8gaG9sZCB0aGUgZmluYWwg
c3RyaW5nLCBwb3NpdGlvbiBpbml0aWFsbHkgcG9pbnRzIHRvIHRoZSBlbmQuCisgICAgVUNoYXIq
IGJ1ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFyKj4oZmFzdE1hbGxvYyhtX2xlbmd0aCAqIHNpemVv
ZihVQ2hhcikpKTsKKyAgICBVQ2hhciogcG9zaXRpb24gPSBidWZmZXIgKyBtX2xlbmd0aDsKKwor
ICAgIC8vIFN0YXJ0IHdpdGggdGhlIGN1cnJlbnQgUm9wZS4KKyAgICBWZWN0b3I8Um9wZTo6Rmli
ZXIsIDMyPiB3b3JrUXVldWU7CisgICAgUm9wZSogcm9wZSA9IG1fcm9wZS5nZXQoKTsKKyAgICB3
aGlsZSAodHJ1ZSkgeworICAgICAgICAvLyBDb3B5IHRoZSBjb250ZW50cyBvZiB0aGUgY3VycmVu
dCByb3BlIGludG8gdGhlIHdvcmtRdWV1ZSwgd2l0aCB0aGUgbGFzdCBpdGVtIGluICdjdXJyZW50
RmliZXInCisgICAgICAgIC8vICh3ZSB3aWxsIGJlIHdvcmtpbmcgYmFja3dhcmRzIG92ZXIgdGhl
IHJvcGUpLgorICAgICAgICB1bnNpZ25lZCByb3BlTGVuZ3RoTWludXNPbmUgPSByb3BlLT5yb3Bl
TGVuZ3RoKCkgLSAxOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcm9wZUxlbmd0
aE1pbnVzT25lOyArK2kpCisgICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKHJvcGUtPmZpYmVy
cyhpKSk7CisgICAgICAgIFJvcGU6OkZpYmVyIGN1cnJlbnRGaWJlciA9IHJvcGUtPmZpYmVycyhy
b3BlTGVuZ3RoTWludXNPbmUpOworCisgICAgICAgIC8vIFNwaW4gYmFja3dhcmRzIG92ZXIgdGhl
IHdvcmtRdWV1ZSAoc3RhcnRpbmcgd2l0aCBjdXJyZW50RmliZXIpLAorICAgICAgICAvLyB3cml0
aW5nIHRoZSBzdHJpbmdzIGludG8gdGhlIGJ1ZmZlci4KKyAgICAgICAgd2hpbGUgKGN1cnJlbnRG
aWJlci5pc1N0cmluZygpKSB7CisgICAgICAgICAgICBVU3RyaW5nOjpSZXAqIHN0cmluZyA9IGN1
cnJlbnRGaWJlci5zdHJpbmcoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy0+bGVuOworICAgICAgICAgICAgcG9zaXRpb24gLT0gbGVuZ3RoOworICAgICAgICAgICAgY29w
eUNoYXJzKHBvc2l0aW9uLCBzdHJpbmctPmRhdGEoKSwgbGVuZ3RoKTsKKworICAgICAgICAgICAg
Ly8gV2FzIHRoaXMgdGhlIGxhc3QgaXRlbSBpbiB0aGUgd29yayBxdWV1ZT8KKyAgICAgICAgICAg
IGlmICh3b3JrUXVldWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGdvdG8gYnJlYWtPdXRP
ZlR3b0xvb3BzOworICAgICAgICAgICAgLy8gTm8hIC0gc2V0IHRoZSBuZXh0IGl0ZW0gdXAgdG8g
cHJvY2Vzcy4KKyAgICAgICAgICAgIGN1cnJlbnRGaWJlciA9IHdvcmtRdWV1ZS5sYXN0KCk7Cisg
ICAgICAgICAgICB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gSWYgd2UgZ2V0IGhlcmUgd2UgZmVsbCBvdXQgb2YgdGhlIGxvb3AgY29uY2F0ZW5hdGluZyBz
dHJpbmdzIC0gY3VycmVudEZpYmVyIGlzIGEgcm9wZS4KKyAgICAgICAgLy8gc2V0IHRoZSAncm9w
ZScgdmFyaWFibGUsIGFuZCBjb250aW51ZSBhcm91bmQgdGhlIGxvb3AuCisgICAgICAgIEFTU0VS
VChjdXJyZW50RmliZXIuaXNSb3BlKCkpOworICAgICAgICByb3BlID0gY3VycmVudEZpYmVyLnJv
cGUoKTsKKyAgICB9CiticmVha091dE9mVHdvTG9vcHM6CisKKyAgICAvLyBDcmVhdGUgYSBzdHJp
bmcgZnJvbSB0aGUgVUNoYXIgYnVmZmVyLCBjbGVhciB0aGUgcm9wZSBSZWZQdHIuCisgICAgQVNT
RVJUKGJ1ZmZlciA9PSBwb3NpdGlvbik7CisgICAgbV92YWx1ZSA9IFVTdHJpbmc6OlJlcDo6Y3Jl
YXRlKGJ1ZmZlciwgbV9sZW5ndGgsIGZhbHNlKTsKKyAgICBtX3JvcGUuY2xlYXIoKTsKKworICAg
IEFTU0VSVCghaXNSb3BlKCkpOworfQorCiBKU1ZhbHVlIEpTU3RyaW5nOjp0b1ByaW1pdGl2ZShF
eGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdAogewogICAgIHJldHVybiBj
b25zdF9jYXN0PEpTU3RyaW5nKj4odGhpcyk7CiB9CiAKLWJvb2wgSlNTdHJpbmc6OmdldFByaW1p
dGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYgdmFsdWUpCiti
b29sIEpTU3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1i
ZXIsIEpTVmFsdWUmIHJlc3VsdCkKIHsKLSAgICB2YWx1ZSA9IHRoaXM7Ci0gICAgbnVtYmVyID0g
bV92YWx1ZS50b0RvdWJsZSgpOworICAgIHJlc3VsdCA9IHRoaXM7CisgICAgbnVtYmVyID0gdmFs
dWUoKS50b0RvdWJsZSgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBKU1N0cmluZzo6
dG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0CiB7Ci0gICAgcmV0dXJuICFtX3ZhbHVlLmlzRW1w
dHkoKTsKKyAgICByZXR1cm4gbV9sZW5ndGg7CiB9CiAKIGRvdWJsZSBKU1N0cmluZzo6dG9OdW1i
ZXIoRXhlY1N0YXRlKikgY29uc3QKIHsKLSAgICByZXR1cm4gbV92YWx1ZS50b0RvdWJsZSgpOwor
ICAgIHJldHVybiB2YWx1ZSgpLnRvRG91YmxlKCk7CiB9CiAKIFVTdHJpbmcgSlNTdHJpbmc6OnRv
U3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdmFsdWU7CisgICAgcmV0
dXJuIHZhbHVlKCk7CiB9CiAKIFVTdHJpbmcgSlNTdHJpbmc6OnRvVGhpc1N0cmluZyhFeGVjU3Rh
dGUqKSBjb25zdAogewotICAgIHJldHVybiBtX3ZhbHVlOworICAgIHJldHVybiB2YWx1ZSgpOwog
fQogCiBKU1N0cmluZyogSlNTdHJpbmc6OnRvVGhpc0pTU3RyaW5nKEV4ZWNTdGF0ZSopCkBAIC0x
MDYsMTQgKzE5MSwxNCBAQCBib29sIEpTU3RyaW5nOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0
CiBib29sIEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eURlc2NyaXB0b3IoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvcikKIHsKICAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5sZW5ndGgpIHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzTnVtYmVy
KGV4ZWMsIG1fdmFsdWUuc2l6ZSgpKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNOdW1iZXIoZXhlYywgbV9sZW5n
dGgpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICAKICAgICBib29sIGlzU3RyaWN0VUludDMyOwogICAgIHVuc2lnbmVk
IGkgPSBwcm9wZXJ0eU5hbWUudG9TdHJpY3RVSW50MzIoJmlzU3RyaWN0VUludDMyKTsKLSAgICBp
ZiAoaXNTdHJpY3RVSW50MzIgJiYgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3ZhbHVlLnNp
emUoKSkpIHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9yKGpzU2luZ2xlQ2hhcmFj
dGVyU3Vic3RyaW5nKGV4ZWMsIG1fdmFsdWUsIGkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIGlmIChpc1N0cmljdFVJbnQzMiAmJiBpIDwgbV9sZW5ndGgpIHsKKyAgICAgICAgZGVzY3Jp
cHRvci5zZXREZXNjcmlwdG9yKGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKGV4ZWMsIHZhbHVl
KCksIGkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiA1MTY2
NikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtNjAsMTIgKzYwLDcyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEpTU3RyaW5nKiBqc093bmVk
U3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmKTsgCiAKICAgICBjbGFzcyBKU1N0cmlu
ZyA6IHB1YmxpYyBKU0NlbGwgeworICAgIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGNsYXNzIEpJ
VDsKICAgICAgICAgZnJpZW5kIHN0cnVjdCBWUHRyU2V0OwogCi0gICAgcHVibGljOgorICAgICAg
ICAvLyBBIFJvcGUgaXMgYSBzdHJpbmcgY29tcG9zZWQgb2YgYSBzZXQgb2Ygc3Vic3RyaW5ncy4K
KyAgICAgICAgY2xhc3MgUm9wZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJvcGU+IHsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgLy8gQSBSb3BlIGlzIGNvbXBvc2VkIGZyb20gYSBzZXQgb2Yg
c21hbGxlciBzdHJpbmdzIGNhbGxlZCBGaWJlcnMuCisgICAgICAgICAgICAvLyBFYWNoIEZpYmVy
IGluIGEgcm9wZSBpcyBlaXRoZXIgVVN0cmluZzo6UmVwIG9yIGFub3RoZXIgUm9wZS4KKyAgICAg
ICAgICAgIGNsYXNzIEZpYmVyIHsKKyAgICAgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgICAg
ICBGaWJlcigpIHt9CisgICAgICAgICAgICAgICAgRmliZXIoVVN0cmluZzo6UmVwKiBzdHJpbmcp
IDogbV92YWx1ZShyZWludGVycHJldF9jYXN0PGludHB0cl90PihzdHJpbmcpKSB7fQorICAgICAg
ICAgICAgICAgIEZpYmVyKFJvcGUqIHJvcGUpIDogbV92YWx1ZShyZWludGVycHJldF9jYXN0PGlu
dHB0cl90Pihyb3BlKSB8IDEpIHt9CisKKyAgICAgICAgICAgICAgICBib29sIGlzUm9wZSgpIHsg
cmV0dXJuIG1fdmFsdWUgJiAxOyB9CisgICAgICAgICAgICAgICAgUm9wZSogcm9wZSgpIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Um9wZSo+KG1fdmFsdWUgJiB+MSk7IH0KKyAgICAgICAgICAg
ICAgICBib29sIGlzU3RyaW5nKCkgeyByZXR1cm4gIWlzUm9wZSgpOyB9CisgICAgICAgICAgICAg
ICAgVVN0cmluZzo6UmVwKiBzdHJpbmcoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFVTdHJp
bmc6OlJlcCo+KG1fdmFsdWUpOyB9CisKKyAgICAgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICAgICAgaW50cHRyX3QgbV92YWx1ZTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIC8v
IENyZWF0ZXMgYSBSb3BlIGNvbXByaXNpbmcgb2YgJ3JvcGVMZW5ndGgnIEZpYmVycy4KKyAgICAg
ICAgICAgIC8vIFRoZSBSb3BlIGlzIGNvbnN0cnVjdGVkIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3Rh
dGUgLSBpbml0aWFsaXplIG11c3QgYmUgY2FsbGVkIGZvciBlYWNoIEZpYmVyIGluIHRoZSBSb3Bl
LgorICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Um9wZT4gY3JlYXRlKHVuc2lnbmVkIHJv
cGVMZW5ndGgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyAocm9wZUxlbmd0aCkgUm9wZShyb3BlTGVu
Z3RoKSk7IH0KKworICAgICAgICAgICAgflJvcGUoKTsKKworICAgICAgICAgICAgdm9pZCBpbml0
aWFsaXplRmliZXIodW5zaWduZWQgaW5kZXgsIFVTdHJpbmc6OlJlcCogc3RyaW5nKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHN0cmluZy0+cmVmKCk7CisgICAgICAgICAgICAgICAg
bV9maWJlcnNbaW5kZXhdID0gRmliZXIoc3RyaW5nKTsKKyAgICAgICAgICAgICAgICBtX3N0cmlu
Z0xlbmd0aCArPSBzdHJpbmctPmxlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZvaWQg
aW5pdGlhbGl6ZUZpYmVyKHVuc2lnbmVkIGluZGV4LCBSb3BlKiByb3BlKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJvcGUtPnJlZigpOworICAgICAgICAgICAgICAgIG1fZmliZXJz
W2luZGV4XSA9IEZpYmVyKHJvcGUpOworICAgICAgICAgICAgICAgIG1fc3RyaW5nTGVuZ3RoICs9
IHJvcGUtPnN0cmluZ0xlbmd0aCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBp
bml0aWFsaXplRmliZXIodW5zaWduZWQgaW5kZXgsIEpTU3RyaW5nKiBqc1N0cmluZykKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoanNTdHJpbmctPmlzUm9wZSgpKQorICAgICAg
ICAgICAgICAgICAgICBpbml0aWFsaXplRmliZXIoaW5kZXgsIGpzU3RyaW5nLT5yb3BlKCkpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUZpYmVy
KGluZGV4LCBqc1N0cmluZy0+c3RyaW5nKCkucmVwKCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICB1bnNpZ25lZCByb3BlTGVuZ3RoKCkgeyByZXR1cm4gbV9yb3BlTGVuZ3RoOyB9Cisg
ICAgICAgICAgICB1bnNpZ25lZCBzdHJpbmdMZW5ndGgoKSB7IHJldHVybiBtX3N0cmluZ0xlbmd0
aDsgfQorICAgICAgICAgICAgRmliZXImIGZpYmVycyh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
bV9maWJlcnNbaW5kZXhdOyB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIFJvcGUo
dW5zaWduZWQgcm9wZUxlbmd0aCkgOiBtX3JvcGVMZW5ndGgocm9wZUxlbmd0aCksIG1fc3RyaW5n
TGVuZ3RoKDApIHt9CisgICAgICAgICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90LCB1bnNp
Z25lZCByb3BlTGVuZ3RoKSB7IHJldHVybiBmYXN0TWFsbG9jKHNpemVvZihSb3BlKSArIChyb3Bl
TGVuZ3RoIC0gMSkgKiBzaXplb2YoVVN0cmluZzo6UmVwKikpOyB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG1fcm9wZUxlbmd0aDsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1f
c3RyaW5nTGVuZ3RoOworICAgICAgICAgICAgRmliZXIgbV9maWJlcnNbMV07CisgICAgICAgIH07
CisKICAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3Ry
aW5nJiB2YWx1ZSkKICAgICAgICAgICAgIDogSlNDZWxsKGdsb2JhbERhdGEtPnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkKKyAgICAgICAgICAgICwgbV9sZW5ndGgodmFsdWUuc2l6ZSgpKQogICAgICAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICBIZWFwOjpoZWFw
KHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QodmFsdWUuY29zdCgpKTsKQEAgLTc0LDIyICsx
MzQsNDAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGVudW0gSGFzT3RoZXJPd25lclR5cGUg
eyBIYXNPdGhlck93bmVyIH07CiAgICAgICAgIEpTU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgY29uc3QgVVN0cmluZyYgdmFsdWUsIEhhc090aGVyT3duZXJUeXBlKQogICAgICAgICAg
ICAgOiBKU0NlbGwoZ2xvYmFsRGF0YS0+c3RyaW5nU3RydWN0dXJlLmdldCgpKQorICAgICAgICAg
ICAgLCBtX2xlbmd0aCh2YWx1ZS5zaXplKCkpCiAgICAgICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CiAgICAgICAgIHsKICAgICAgICAgfQogICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIFBhc3NSZWZQdHI8VVN0cmluZzo6UmVwPiB2YWx1ZSwgSGFzT3RoZXJPd25lclR5
cGUpCiAgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpCisgICAgICAgICAgICAsIG1fbGVuZ3RoKHZhbHVlLT5zaXplKCkpCiAgICAgICAgICAgICAs
IG1fdmFsdWUodmFsdWUpCiAgICAgICAgIHsKICAgICAgICAgfQorICAgICAgICBKU1N0cmluZyhK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8SlNTdHJpbmc6OlJvcGU+IHJvcGUp
CisgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkp
CisgICAgICAgICAgICAsIG1fbGVuZ3RoKHJvcGUtPnN0cmluZ0xlbmd0aCgpKQorICAgICAgICAg
ICAgLCBtX3JvcGUocm9wZSkKKyAgICAgICAgeworICAgICAgICB9CiAgICAgICAgIAotICAgICAg
ICBjb25zdCBVU3RyaW5nJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAg
ICAgY29uc3QgVVN0cmluZyYgdmFsdWUoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobV9yb3BlKQorICAgICAgICAgICAgICAgIHJlc29sdmVSb3BlKCk7CisgICAgICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJl
dHVybiBtX2xlbmd0aDsgfQorCisgICAgICAgIGJvb2wgaXNSb3BlKCkgY29uc3QgeyByZXR1cm4g
bV9yb3BlOyB9CisgICAgICAgIFJvcGUqIHJvcGUoKSB7IEFTU0VSVChpc1JvcGUoKSk7IHJldHVy
biBtX3JvcGUuZ2V0KCk7IH0KKyAgICAgICAgVVN0cmluZyYgc3RyaW5nKCkgeyBBU1NFUlQoIWlz
Um9wZSgpKTsgcmV0dXJuIG1fdmFsdWU7IH0KIAogICAgICAgICBib29sIGdldFN0cmluZ1Byb3Bl
cnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOwogICAgICAgICBib29sIGdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICBib29sIGdl
dFN0cmluZ1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCi0gICAgICAgIGJvb2wgY2FuR2V0
SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3Zh
bHVlLnNpemUoKSk7IH0KKyAgICAgICAgYm9vbCBjYW5HZXRJbmRleCh1bnNpZ25lZCBpKSB7IHJl
dHVybiBpIDwgbV9sZW5ndGg7IH0KICAgICAgICAgSlNTdHJpbmcqIGdldEluZGV4KEpTR2xvYmFs
RGF0YSosIHVuc2lnbmVkKTsKIAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+
IGNyZWF0ZVN0cnVjdHVyZShKU1ZhbHVlIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0
ZShwcm90bywgVHlwZUluZm8oU3RyaW5nVHlwZSwgT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90
IHwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9CkBAIC0xMDEsNiArMTc5LDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgcmVzb2x2ZVJvcGUo
KSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUgdG9QcmltaXRpdmUoRXhlY1N0YXRl
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBn
ZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmIHZh
bHVlKTsKICAgICAgICAgdmlydHVhbCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsK
QEAgLTExNyw3ICsxOTcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKICAgICAgICAgdmlydHVhbCBib29sIGdldE93blByb3BlcnR5RGVzY3Jp
cHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7
CiAKLSAgICAgICAgVVN0cmluZyBtX3ZhbHVlOworICAgICAgICAvLyBBIHN0cmluZyBpcyByZXBy
ZXNlbnRlZCBlaXRoZXIgYnkgYSBVU3RyaW5nIG9yIGEgUm9wZS4KKyAgICAgICAgdW5zaWduZWQg
bV9sZW5ndGg7CisgICAgICAgIG11dGFibGUgVVN0cmluZyBtX3ZhbHVlOworICAgICAgICBtdXRh
YmxlIFJlZlB0cjxSb3BlPiBtX3JvcGU7CiAgICAgfTsKIAogICAgIEpTU3RyaW5nKiBhc1N0cmlu
ZyhKU1ZhbHVlKTsKQEAgLTE0Niw3ICsyMjksNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
VUNoYXIgYyA9IHMuZGF0YSgpW29mZnNldF07CiAgICAgICAgIGlmIChjIDw9IDB4RkYpCiAgICAg
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0
cmluZyhnbG9iYWxEYXRhLCBjKTsKLSAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNT
dHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZzo6UmVwOjpjcmVhdGUocy5yZXAoKSwgb2Zmc2V0LCAx
KSk7CisgICAgICAgIHJldHVybiBuZXcgKGdsb2JhbERhdGEpIEpTU3RyaW5nKGdsb2JhbERhdGEs
IFVTdHJpbmcoVVN0cmluZzo6UmVwOjpjcmVhdGUocy5yZXAoKSwgb2Zmc2V0LCAxKSkpOwogICAg
IH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNOb250cml2aWFsU3RyaW5nKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgY29uc3QgY2hhciogcykKQEAgLTE2Niw3ICsyNDksNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICBpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJbmRleChKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGkpCiAgICAgewogICAgICAgICBBU1NFUlQoY2Fu
R2V0SW5kZXgoaSkpOwotICAgICAgICByZXR1cm4ganNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmco
Z2xvYmFsRGF0YSwgbV92YWx1ZSwgaSk7CisgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3Rl
clN1YnN0cmluZyhnbG9iYWxEYXRhLCB2YWx1ZSgpLCBpKTsKICAgICB9CiAKICAgICBpbmxpbmUg
SlNTdHJpbmcqIGpzU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmlu
ZyYgcykKQEAgLTE5NCw3ICsyNzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGlm
IChjIDw9IDB4RkYpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPnNtYWxsU3Ry
aW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgYyk7CiAgICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmlu
Zzo6UmVwOjpjcmVhdGUocy5yZXAoKSwgb2Zmc2V0LCBsZW5ndGgpKTsKKyAgICAgICAgcmV0dXJu
IG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgVVN0cmluZyhVU3RyaW5nOjpS
ZXA6OmNyZWF0ZShzLnJlcCgpLCBvZmZzZXQsIGxlbmd0aCkpKTsKICAgICB9CiAKICAgICBpbmxp
bmUgSlNTdHJpbmcqIGpzT3duZWRTdHJpbmcoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBjb25z
dCBVU3RyaW5nJiBzKQpAQCAtMjIyLDE0ICszMDUsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
QUxXQVlTX0lOTElORSBib29sIEpTU3RyaW5nOjpnZXRTdHJpbmdQcm9wZXJ0eVNsb3QoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYg
c2xvdCkKICAgICB7CiAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCkgewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcihleGVj
LCBtX3ZhbHVlLnNpemUoKSkpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShqc051bWJlcihl
eGVjLCBtX2xlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIAog
ICAgICAgICBib29sIGlzU3RyaWN0VUludDMyOwogICAgICAgICB1bnNpZ25lZCBpID0gcHJvcGVy
dHlOYW1lLnRvU3RyaWN0VUludDMyKCZpc1N0cmljdFVJbnQzMik7Ci0gICAgICAgIGlmIChpc1N0
cmljdFVJbnQzMiAmJiBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdmFsdWUuc2l6ZSgpKSkg
ewotICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhl
eGVjLCBtX3ZhbHVlLCBpKSk7CisgICAgICAgIGlmIChpc1N0cmljdFVJbnQzMiAmJiBpIDwgbV9s
ZW5ndGgpIHsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoanNTaW5nbGVDaGFyYWN0ZXJTdWJz
dHJpbmcoZXhlYywgdmFsdWUoKSwgaSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KIApAQCAtMjM4LDggKzMyMSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OmdldFN0cmluZ1Byb3BlcnR5U2xvdChFeGVj
U3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JiBzbG90KQog
ICAgIHsKLSAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X3ZhbHVlLnNpemUoKSkpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUoanNTaW5nbGVDaGFy
YWN0ZXJTdWJzdHJpbmcoZXhlYywgbV92YWx1ZSwgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIGlm
IChwcm9wZXJ0eU5hbWUgPCBtX2xlbmd0aCkgeworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShq
c1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhleGVjLCB2YWx1ZSgpLCBwcm9wZXJ0eU5hbWUpKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA1MTY2NikKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsNiArMjA0LDE0IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBsZWZ0SXNTdHJpbmcgPSB2MS5p
c1N0cmluZygpOwogICAgICAgICBpZiAobGVmdElzU3RyaW5nICYmIHYyLmlzU3RyaW5nKCkpIHsK
KyAgICAgICAgICAgIGlmIChhc1N0cmluZyh2MSktPmlzUm9wZSgpIHx8IGFzU3RyaW5nKHYyKS0+
aXNSb3BlKCkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8SlNTdHJpbmc6OlJvcGU+IHJvcGUg
PSBKU1N0cmluZzo6Um9wZTo6Y3JlYXRlKDIpOworICAgICAgICAgICAgICAgIHJvcGUtPmluaXRp
YWxpemVGaWJlcigwLCBhc1N0cmluZyh2MSkpOworICAgICAgICAgICAgICAgIHJvcGUtPmluaXRp
YWxpemVGaWJlcigxLCBhc1N0cmluZyh2MikpOworICAgICAgICAgICAgICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlLnJlbGVh
c2UoKSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIFJlZlB0cjxVU3RyaW5nOjpSZXA+
IHZhbHVlID0gY29uY2F0ZW5hdGUoYXNTdHJpbmcodjEpLT52YWx1ZSgpLnJlcCgpLCBhc1N0cmlu
Zyh2MiktPnZhbHVlKCkucmVwKCkpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSk7CkBAIC0yOTgs
NDcgKzMwNiwxOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIEFTU0VSVChjb3Vu
dCA+PSAzKTsKIAotICAgICAgICAvLyBFc3RpbWF0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIHJlcXVp
cmVkIHRvIGhvbGQgdGhlIGVudGlyZSBzdHJpbmcuICBJZiBhbGwKLSAgICAgICAgLy8gYXJndW1l
bnRzIGFyZSBzdHJpbmdzLCB3ZSBjYW4gZWFzaWx5IGNhbGN1bGF0ZSB0aGUgZXhhY3QgYW1vdW50
IG9mIHNwYWNlCi0gICAgICAgIC8vIHJlcXVpcmVkLiAgRm9yIGFueSBvdGhlciBhcmd1bWVudHMs
IGZvciBub3cgbGV0J3MgYXNzdW1lIHRoZXkgbWF5IHJlcXVpcmUKLSAgICAgICAgLy8gMTEgVUNo
YXJzIG9mIHN0b3JhZ2UuICBUaGlzIGlzIGVub3VjaCB0byBob2xkIGFueSBpbnQsIGFuZCBsaWtl
bHkgaXMgYWxzbwotICAgICAgICAvLyByZWFzb25hYmxlIGZvciB0aGUgb3RoZXIgaW1tZWRpYXRl
cy4gIFdlIG1heSB3YW50IHRvIGNvbWUgYmFjayBhbmQgdHVuZQotICAgICAgICAvLyB0aGlzIHZh
bHVlIGF0IHNvbWUgcG9pbnQuCi0gICAgICAgIHVuc2lnbmVkIGJ1ZmZlclNpemUgPSAwOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICAgICAg
SlNWYWx1ZSB2ID0gc3RyaW5nc1tpXS5qc1ZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAoTElLRUxZ
KHYuaXNTdHJpbmcoKSkpCi0gICAgICAgICAgICAgICAgYnVmZmVyU2l6ZSArPSBhc1N0cmluZyh2
KS0+dmFsdWUoKS5zaXplKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnVm
ZmVyU2l6ZSArPSAxMTsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEFsbG9jYXRlIGFuIG91dHB1
dCBzdHJpbmcgdG8gc3RvcmUgdGhlIHJlc3VsdC4KLSAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGFy
Z3VtZW50IGlzIGEgU3RyaW5nLCBhbmQgaWYgaXQgaGFzIHRoZSBjYXBhY2l0eSAob3IgY2FuIGdy
b3cKLSAgICAgICAgLy8gaXRzIGNhcGFjaXR5KSB0byBob2xkIHRoZSBlbnRpcmUgcmVzdWx0IHRo
ZW4gdXNlIHRoaXMgYXMgYSBiYXNlIHRvIGNvbmNhdGVuYXRlCi0gICAgICAgIC8vIG9udG8uICBP
dGhlcndpc2UsIGFsbG9jYXRlIGEgbmV3IGVtcHR5IG91dHB1dCBidWZmZXIuCi0gICAgICAgIEpT
VmFsdWUgZmlyc3RWYWx1ZSA9IHN0cmluZ3NbMF0uanNWYWx1ZSgpOwotICAgICAgICBSZWZQdHI8
VVN0cmluZzo6UmVwPiByZXN1bHRSZXA7Ci0gICAgICAgIGlmIChmaXJzdFZhbHVlLmlzU3RyaW5n
KCkgJiYgKHJlc3VsdFJlcCA9IGFzU3RyaW5nKGZpcnN0VmFsdWUpLT52YWx1ZSgpLnJlcCgpKS0+
cmVzZXJ2ZUNhcGFjaXR5KGJ1ZmZlclNpemUpKSB7Ci0gICAgICAgICAgICAvLyBXZSdyZSBnb2lu
ZyB0byBjb25jYXRlbmF0ZSBvbnRvIHRoZSBmaXJzdCBzdHJpbmcgLSByZW1vdmUgaXQgZnJvbSB0
aGUgbGlzdCBvZiBpdGVtcyB0byBiZSBhcHBlbmRlZC4KLSAgICAgICAgICAgICsrc3RyaW5nczsK
LSAgICAgICAgICAgIC0tY291bnQ7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0
UmVwID0gVVN0cmluZzo6UmVwOjpjcmVhdGVFbXB0eUJ1ZmZlcihidWZmZXJTaXplKTsKLSAgICAg
ICAgVVN0cmluZyByZXN1bHQocmVzdWx0UmVwKTsKKyAgICAgICAgUmVmUHRyPEpTU3RyaW5nOjpS
b3BlPiByb3BlID0gSlNTdHJpbmc6OlJvcGU6OmNyZWF0ZShjb3VudCk7CiAKLSAgICAgICAgLy8g
TG9vcCBvdmVyIHRoZSBvcGVyYW5kcywgd3JpdGluZyB0aGVtIGludG8gdGhlIG91dHB1dCBidWZm
ZXIuCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CiAgICAg
ICAgICAgICBKU1ZhbHVlIHYgPSBzdHJpbmdzW2ldLmpzVmFsdWUoKTsKICAgICAgICAgICAgIGlm
IChMSUtFTFkodi5pc1N0cmluZygpKSkKLSAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGFz
U3RyaW5nKHYpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICByb3BlLT5pbml0aWFsaXplRmli
ZXIoaSwgYXNTdHJpbmcodikpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQodi50b1N0cmluZyhjYWxsRnJhbWUpKTsKKyAgICAgICAgICAgICAgICByb3Bl
LT5pbml0aWFsaXplRmliZXIoaSwgdi50b1N0cmluZyhjYWxsRnJhbWUpLnJlcCgpKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHJldHVybiBqc1N0cmluZyhjYWxsRnJhbWUsIHJlc3VsdCk7CisgICAg
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsK
KyAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcm9w
ZS5yZWxlYXNlKCkpOwogICAgIH0KLQogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBP
cGVyYXRpb25zX2gKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ09iamVjdC5jcHAJ
KHJldmlzaW9uIDUxNjY2KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIGJvb2wgU3RyaW5nT2JqZWN0Ojpk
ZWxldGVQcm9wZXJ0eShFeGVjU3QKIAogdm9pZCBTdHJpbmdPYmplY3Q6OmdldE93blByb3BlcnR5
TmFtZXMoRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcykK
IHsKLSAgICBpbnQgc2l6ZSA9IGludGVybmFsVmFsdWUoKS0+dmFsdWUoKS5zaXplKCk7CisgICAg
aW50IHNpemUgPSBpbnRlcm5hbFZhbHVlKCktPmxlbmd0aCgpOwogICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgc2l6ZTsgKytpKQogICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4
ZWMsIFVTdHJpbmc6OmZyb20oaSkpKTsKICAgICByZXR1cm4gSlNPYmplY3Q6OmdldE93blByb3Bl
cnR5TmFtZXMoZXhlYywgcHJvcGVydHlOYW1lcyk7Cg==
</data>
<flag name="review"
          id="26085"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>