<?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>22390</bug_id>
          
          <creation_ts>2008-11-20 18:27:52 -0800</creation_ts>
          <short_desc>Abstract away JSC:: usage in WebCore/xml</short_desc>
          <delta_ts>2008-11-21 16:12:35 -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>WebCore Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Fisher (:fishd, Google)">fishd</reporter>
          <assigned_to name="Darin Fisher (:fishd, Google)">fishd</assigned_to>
          <cc>darin</cc>
    
    <cc>ggaren</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>99577</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-20 18:27:52 -0800</bug_when>
    <thetext>Abstract away JSC:: usage in WebCore/xml

There is just a small bit of XMLHttpRequest code that uses JSC::Value*
directly.  It uses it to provide a fast responseText getter to JS.

This is a proposal to define a ScriptString class that acts like a holder for a
JSC::UString.  XMLHttpRequest::m_responseText is modified to be a ScriptString instead of a JSC::UString.  ScriptString can be implicitly converted to UString for convenience.

Along the way, I found that there is no UString specific jsStringOrNull, which means that the optimization of storing responseText as a UString was basically being defeated due to an implicit conversion to String.  It turns out that providing a jsStringOrNull that takes a UString causes &apos;ambiguous implicit conversion&apos; errors elsewhere (see JSElement.cpp), but using ScriptString works fine, so I have done that to help performance of accessing responseText.

If this proposal looks good, then I&apos;ll do a follow-up patch that applies ScriptString elsewhere.  For now, I am just focused on the WebCore/xml directory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99578</commentid>
    <comment_count>1</comment_count>
      <attachid>25328</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-20 18:42:16 -0800</bug_when>
    <thetext>Created attachment 25328
v1 patch

This patch also includes some const fixes to InspectorController that enable implicit conversion from ScriptString to UString work (and it&apos;s just a good idea to pass these as const references anyways).

I was not able to completely abstract away JSC from XMLHttpRequest, so I moved a few bits into #if USE(JSC).  Those bits do not need a V8 equivalent.

I decided to change XMLHttpRequest::m_lastSendURL into a WebCore::String since it is only used as a String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99590</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-20 21:05:39 -0800</bug_when>
    <thetext>If the UString stored in XMLHttpRequest is being converted to a WebCore::String, this is a regression.  This probably happened when converting JSXMLHttpRequest to be autogenerated a few months back.  We should perf test it again, as I know in the past this optimization has been a good win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99596</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-11-20 21:18:58 -0800</bug_when>
    <thetext>Indeed, looking at the 3.2 branch, the old code for responseText was:

            JSValue* result = jsOwnedStringOrNull(m_impl-&gt;getResponseText(ec));
            setDOMException(exec, ec);

I have filed bug 22392 to track fixing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99615</commentid>
    <comment_count>4</comment_count>
      <attachid>25339</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-20 22:24:32 -0800</bug_when>
    <thetext>Created attachment 25339
v2 patch

Adjusted the patch to take into account Sam&apos;s change.  Now, it is not necessary to augment JSDOMBinding.{h,cpp}!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99617</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-20 22:29:08 -0800</bug_when>
    <thetext>Whoops, I left some spurious changes to JSDOMBinding.{h,cpp} in that patch.  Revision coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99619</commentid>
    <comment_count>6</comment_count>
      <attachid>25340</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-20 22:34:39 -0800</bug_when>
    <thetext>Created attachment 25340
v2.1 patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99724</commentid>
    <comment_count>7</comment_count>
      <attachid>25340</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-11-21 15:55:08 -0800</bug_when>
    <thetext>Comment on attachment 25340
v2.1 patch

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99725</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2008-11-21 16:12:35 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/38680</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25328</attachid>
            <date>2008-11-20 18:42:16 -0800</date>
            <delta_ts>2008-11-20 22:24:32 -0800</delta_ts>
            <desc>v1 patch</desc>
            <filename>script_string_1.diff</filename>
            <type>text/plain</type>
            <size>12174</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4NjUx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDgtMTEt
MjAgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjIzOTAKKyAgICAgICAgQWJzdHJhY3QgYXdheSBKU0M6OiB1c2FnZSBp
biBXZWJDb3JlL3htbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmpzU3RyaW5nT3JOdWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRTdHJpbmcuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6OlNjcmlwdFN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6Om9wZXJhdG9yIEpTQzo6VVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6OmlzTnVsbCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRTdHJpbmc6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpv
cGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpvcGVyYXRvcis9KToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFJlc291cmNlOjpYTUxIdHRwUmVxdWVzdFJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNlOjpzZXRYTUxIdHRwUmVxdWVzdFBy
b3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3Vy
Y2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjbGVhclJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5o
OgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNldExhc3RTZW5kVVJMKToKKwog
MjAwOC0xMS0yMCAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluCkluZGV4OiBiaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAJKHJl
dmlzaW9uIDM4NjQwKQorKysgYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIk1lc3NhZ2VQb3J0LmgiCiAjaW5jbHVk
ZSAiUmFuZ2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24u
aCIKICNpbmNsdWRlIDxydW50aW1lL1Byb3RvdHlwZUZ1bmN0aW9uLmg+CiAjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgpAQCAtMzQ1LDYgKzM0NiwxMyBAQCBKU1ZhbHVlKiBqc1N0cmluZ09y
TnVsbChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHMpOwogfQog
CitKU1ZhbHVlKiBqc1N0cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNjcmlwdFN0
cmluZyYgcykKK3sKKyAgICBpZiAocy5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBzKTsKK30KKwogSlNWYWx1ZSoganNPd25lZFN0
cmluZ09yTnVsbChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHMpCiB7CiAgICAgaWYg
KHMuaXNOdWxsKCkpCkluZGV4OiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkocmV2aXNpb24gMzg2NDApCisrKyBiaW5k
aW5ncy9qcy9KU0RPTUJpbmRpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3MgS1VSTDsKICAg
ICBjbGFzcyBOb2RlOworICAgIGNsYXNzIFNjcmlwdFN0cmluZzsKICAgICBjbGFzcyBTdHJpbmc7
CiAgICAgY2xhc3MgSlNOb2RlOwogCkBAIC0xNTMsNiArMTU0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEpTQzo6RXhlY1N0YXRlKiwgRXhjZXB0aW9u
Q29kZSk7CiAKICAgICBKU0M6OkpTVmFsdWUqIGpzU3RyaW5nT3JOdWxsKEpTQzo6RXhlY1N0YXRl
KiwgY29uc3QgU3RyaW5nJik7IC8vIG51bGwgaWYgdGhlIHN0cmluZyBpcyBudWxsCisgICAgSlND
OjpKU1ZhbHVlKiBqc1N0cmluZ09yTnVsbChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IFNjcmlwdFN0
cmluZyYpOyAvLyBudWxsIGlmIHRoZSBzdHJpbmcgaXMgbnVsbAogICAgIEpTQzo6SlNWYWx1ZSog
anNTdHJpbmdPck51bGwoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBLVVJMJik7IC8vIG51bGwgaWYg
dGhlIFVSTCBpcyBudWxsCiAKICAgICBKU0M6OkpTVmFsdWUqIGpzU3RyaW5nT3JVbmRlZmluZWQo
SlNDOjpFeGVjU3RhdGUqLCBjb25zdCBTdHJpbmcmKTsgLy8gdW5kZWZpbmVkIGlmIHRoZSBzdHJp
bmcgaXMgbnVsbApJbmRleDogYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgJKHJldmlzaW9uIDApCisrKyBiaW5kaW5ncy9q
cy9TY3JpcHRTdHJpbmcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoYykgMjAwOCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICogCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTY3JpcHRTdHJpbmdfaAorI2RlZmluZSBTY3JpcHRTdHJpbmdfaAorCisjaW5jbHVkZSA8
cnVudGltZS9KU0xvY2suaD4KKyNpbmNsdWRlIDxydW50aW1lL1VTdHJpbmcuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHJpbmc7CisKK2NsYXNzIFNjcmlwdFN0cmluZyB7Citw
dWJsaWM6CisgICAgU2NyaXB0U3RyaW5nKGNvbnN0IGNoYXIqIHMpIDogbV9zdHIocykge30KKyAg
ICBTY3JpcHRTdHJpbmcoY29uc3QgSlNDOjpVU3RyaW5nJiBzKSA6IG1fc3RyKHMpIHt9CisKKyAg
ICBvcGVyYXRvciBKU0M6OlVTdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cjsgfQorCisgICAg
Ym9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBtX3N0ci5pc051bGwoKTsgfQorICAgIHNpemVf
dCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zdHIuc2l6ZSgpOyB9CisKKyAgICBTY3JpcHRTdHJp
bmcmIG9wZXJhdG9yPShjb25zdCBjaGFyKiBzKQorICAgIHsKKyAgICAgICAgSlNDOjpKU0xvY2sg
bG9jayhmYWxzZSk7CisgICAgICAgIG1fc3RyID0gczsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKworICAgIFNjcmlwdFN0cmluZyYgb3BlcmF0b3IrPShjb25zdCBTdHJpbmcmIHMpCisg
ICAgeworICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKKyAgICAgICAgbV9zdHIgKz0g
czsKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworcHJpdmF0ZToKKyAgICBKU0M6OlVT
dHJpbmcgbV9zdHI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBT
Y3JpcHRTdHJpbmdfaApJbmRleDogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
Mzg2NDApCisrKyBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBzdHJ1Y3QgQ29uc29sZU1lc3NhZ2UgewogLy8gWE1MSHR0
cFJlcXVlc3RSZXNvdXJjZSBDbGFzcwogCiBzdHJ1Y3QgWE1MSHR0cFJlcXVlc3RSZXNvdXJjZSB7
Ci0gICAgWE1MSHR0cFJlcXVlc3RSZXNvdXJjZShKU0M6OlVTdHJpbmcmIHNvdXJjZVN0cmluZykK
KyAgICBYTUxIdHRwUmVxdWVzdFJlc291cmNlKGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNlU3Ry
aW5nKQogICAgIHsKICAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CiAgICAgICAgIHRo
aXMtPnNvdXJjZVN0cmluZyA9IHNvdXJjZVN0cmluZy5yZXAoKTsKQEAgLTMwMiw3ICszMDIsNyBA
QCBzdHJ1Y3QgSW5zcGVjdG9yUmVzb3VyY2UgOiBwdWJsaWMgUmVmQ291CiAgICAgICAgICAgICBK
U1ZhbHVlUHJvdGVjdChjb250ZXh0LCBuZXdTY3JpcHRPYmplY3QpOwogICAgIH0KIAotICAgIHZv
aWQgc2V0WE1MSHR0cFJlcXVlc3RQcm9wZXJ0aWVzKEpTQzo6VVN0cmluZyYgZGF0YSkKKyAgICB2
b2lkIHNldFhNTEh0dHBSZXF1ZXN0UHJvcGVydGllcyhjb25zdCBKU0M6OlVTdHJpbmcmIGRhdGEp
CiAgICAgewogICAgICAgICB4bWxIdHRwUmVxdWVzdFJlc291cmNlLnNldChuZXcgWE1MSHR0cFJl
cXVlc3RSZXNvdXJjZShkYXRhKSk7CiAgICAgfQpAQCAtMjQ5OCw3ICsyNDk4LDcgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpkaWRGYWlsTG9hZGluZwogICAgIH0KIH0KIAotdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpyZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBKU0M6OlVTdHJpbmcmIHNvdXJjZVN0cmluZykKK3ZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgSlNDOjpVU3RyaW5nJiBzb3VyY2VTdHJpbmcpCiB7
CiAgICAgaWYgKCFlbmFibGVkKCkpCiAgICAgICAgIHJldHVybjsKSW5kZXg6IGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAkocmV2aXNpb24gMzg2NDApCisrKyBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMsNyArMjAzLDcgQEAgcHVibGljOgogICAgIHZv
aWQgZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIsIGludCBsZW5ndGhSZWNlaXZlZCk7CiAgICAgdm9pZCBkaWRGaW5pc2hMb2Fk
aW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKICAgICB2b2lk
IGRpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVy
LCBjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0gICAgdm9pZCByZXNvdXJjZVJldHJpZXZlZEJ5WE1M
SHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBKU0M6OlVTdHJpbmcmIHNvdXJj
ZVN0cmluZyk7CisgICAgdm9pZCByZXNvdXJjZVJldHJpZXZlZEJ5WE1MSHR0cFJlcXVlc3QodW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBKU0M6OlVTdHJpbmcmIHNvdXJjZVN0cmluZyk7
CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgdm9pZCBkaWRPcGVuRGF0YWJhc2UoRGF0YWJh
c2UqLCBjb25zdCBTdHJpbmcmIGRvbWFpbiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24pOwpJbmRleDogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAzODY0MCkKKysrIHhtbC9YTUxIdHRw
UmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDYgQEAKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgotI2luY2x1ZGUgIkpT
RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIktVUkxIYXNoLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgpAQCAtNDcsOSArNDUsMTIgQEAKICNpbmNsdWRlICJYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnQuaCIKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdFVwbG9hZC5oIgog
I2luY2x1ZGUgIm1hcmt1cC5oIgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CiAjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCisjaWYgVVNFKEpTQykKKyNpbmNsdWRlICJKU0RPTVdp
bmRvdy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdHlwZWRlZiBIYXNoU2V0
PFN0cmluZywgQ2FzZUZvbGRpbmdIYXNoPiBIZWFkZXJzU2V0OwpAQCAtMjA2LDcgKzIwNyw3IEBA
IFhNTEh0dHBSZXF1ZXN0OjpTdGF0ZSBYTUxIdHRwUmVxdWVzdDo6cmUKICAgICByZXR1cm4gbV9z
dGF0ZTsKIH0KIAotY29uc3QgSlNDOjpVU3RyaW5nJiBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VU
ZXh0KCkgY29uc3QKK2NvbnN0IFNjcmlwdFN0cmluZyYgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNl
VGV4dCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fcmVzcG9uc2VUZXh0OwogfQpAQCAtNzc4LDEw
ICs3NzksNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjppbnRlcm5hbEFib3J0KCkKIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OmNsZWFyUmVzcG9uc2UoKQogewogICAgIG1fcmVzcG9uc2UgPSBSZXNvdXJj
ZVJlc3BvbnNlKCk7Ci0gICAgewotICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAg
ICAgICAgbV9yZXNwb25zZVRleHQgPSAiIjsKLSAgICB9CisgICAgbV9yZXNwb25zZVRleHQgPSAi
IjsKICAgICBtX2NyZWF0ZWREb2N1bWVudCA9IGZhbHNlOwogICAgIG1fcmVzcG9uc2VYTUwgPSAw
OwogfQpAQCAtODI2LDYgKzgyNCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0RXJyb3Io
KQogCiB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpICAgICAgICAKIHsKKyNp
ZiBVU0UoSlNDKQogICAgIC8vIFRoZSBYSFIgb2JqZWN0IGl0c2VsZiBob2xkcyBvbiB0byB0aGUg
cmVzcG9uc2VUZXh0LCBhbmQKICAgICAvLyB0aHVzIGhhcyBleHRyYSBjb3N0IGV2ZW4gaW5kZXBl
bmRlbnQgb2YgYW55CiAgICAgLy8gcmVzcG9uc2VUZXh0IG9yIHJlc3BvbnNlWE1MIG9iamVjdHMg
aXQgaGFzIGhhbmRlZApAQCAtODM3LDYgKzgzNiw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRy
b3BQcm90ZWN0aW9uKCkgICAKICAgICAgICAgaWYgKEpTQzo6SlNWYWx1ZSogd3JhcHBlciA9IGdl
dENhY2hlZERPTU9iamVjdFdyYXBwZXIoKndpbmRvdy0+Z2xvYmFsRGF0YSgpLCB0aGlzKSkKICAg
ICAgICAgICAgIEpTQzo6SGVhcDo6aGVhcCh3cmFwcGVyKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0
KG1fcmVzcG9uc2VUZXh0LnNpemUoKSAqIDIpOwogICAgIH0KKyNlbmRpZgogCiAgICAgdW5zZXRQ
ZW5kaW5nQWN0aXZpdHkodGhpcyk7CiB9CkBAIC0xMDUyLDExICsxMDUyLDggQEAgdm9pZCBYTUxI
dHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyhTdQogICAgIGlmIChtX3N0YXRlIDwgSEVBREVS
U19SRUNFSVZFRCkKICAgICAgICAgY2hhbmdlU3RhdGUoSEVBREVSU19SRUNFSVZFRCk7CiAKLSAg
ICB7Ci0gICAgICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwotICAgICAgICBpZiAobV9kZWNv
ZGVyKQotICAgICAgICAgICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwot
ICAgIH0KKyAgICBpZiAobV9kZWNvZGVyKQorICAgICAgICBtX3Jlc3BvbnNlVGV4dCArPSBtX2Rl
Y29kZXItPmZsdXNoKCk7CiAKICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKSkgewogICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZyYW1lLT5wYWdlKCkpIHsKQEAgLTEy
NTIsMTIgKzEyNDksNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YShTdWJy
CiAgICAgaWYgKGxlbiA9PSAtMSkKICAgICAgICAgbGVuID0gc3RybGVuKGRhdGEpOwogCi0gICAg
U3RyaW5nIGRlY29kZWQgPSBtX2RlY29kZXItPmRlY29kZShkYXRhLCBsZW4pOwotCi0gICAgewot
ICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAgbV9yZXNwb25zZVRleHQg
Kz0gZGVjb2RlZDsKLSAgICB9CisgICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNvZGVyLT5kZWNv
ZGUoZGF0YSwgbGVuKTsKIAogICAgIGlmICghbV9lcnJvcikgewogICAgICAgICB1cGRhdGVBbmRE
aXNwYXRjaE9uUHJvZ3Jlc3MobGVuKTsKSW5kZXg6IHhtbC9YTUxIdHRwUmVxdWVzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHhtbC9YTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiAzODY0MCkKKysrIHhtbC9Y
TUxIdHRwUmVxdWVzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVk
ZSAiRm9ybURhdGEuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAi
U3VicmVzb3VyY2VMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJTY3JpcHRTdHJpbmcuaCIKICNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTcxLDEwICs3
MiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBvdmVycmlkZU1pbWVUeXBlKGNvbnN0IFN0cmluZyYg
b3ZlcnJpZGUpOwogICAgIFN0cmluZyBnZXRBbGxSZXNwb25zZUhlYWRlcnMoRXhjZXB0aW9uQ29k
ZSYpIGNvbnN0OwogICAgIFN0cmluZyBnZXRSZXNwb25zZUhlYWRlcihjb25zdCBTdHJpbmcmIG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKLSAgICBjb25zdCBKU0M6OlVTdHJpbmcmIHJlc3Bv
bnNlVGV4dCgpIGNvbnN0OworICAgIGNvbnN0IFNjcmlwdFN0cmluZyYgcmVzcG9uc2VUZXh0KCkg
Y29uc3Q7CiAgICAgRG9jdW1lbnQqIHJlc3BvbnNlWE1MKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRM
YXN0U2VuZExpbmVOdW1iZXIodW5zaWduZWQgbGluZU51bWJlcikgeyBtX2xhc3RTZW5kTGluZU51
bWJlciA9IGxpbmVOdW1iZXI7IH0KLSAgICB2b2lkIHNldExhc3RTZW5kVVJMKEpTQzo6VVN0cmlu
ZyB1cmwpIHsgbV9sYXN0U2VuZFVSTCA9IHVybDsgfQorICAgIHZvaWQgc2V0TGFzdFNlbmRVUkwo
Y29uc3QgU3RyaW5nJiB1cmwpIHsgbV9sYXN0U2VuZFVSTCA9IHVybDsgfQogCiAgICAgWE1MSHR0
cFJlcXVlc3RVcGxvYWQqIHVwbG9hZCgpOwogICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiBvcHRp
b25hbFVwbG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fdXBsb2FkLmdldCgpOyB9CkBAIC0yMDgsNyAr
MjA5LDcgQEAgcHJpdmF0ZToKICAgICAvLyB0byBiZSBhYmxlIHRvIHNoYXJlIHRoZSBidWZmZXIg
d2l0aCBKYXZhU2NyaXB0IHZlcnNpb25zIG9mIHRoZSB3aG9sZSBvciBwYXJ0aWFsIHN0cmluZy4K
ICAgICAvLyBJbiBjb250cmFzdCwgdGhpcyBzdHJpbmcgZG9lc24ndCBpbnRlcmFjdCBtdWNoIHdp
dGggdGhlIHJlc3Qgb2YgdGhlIGVuZ2luZSBzbyBpdCdzIG5vdCB0aGF0CiAgICAgLy8gYmlnIGEg
Y29zdCB0aGF0IGl0IGlzbid0IGEgU3RyaW5nLgotICAgIEpTQzo6VVN0cmluZyBtX3Jlc3BvbnNl
VGV4dDsKKyAgICBTY3JpcHRTdHJpbmcgbV9yZXNwb25zZVRleHQ7CiAgICAgbXV0YWJsZSBib29s
IG1fY3JlYXRlZERvY3VtZW50OwogICAgIG11dGFibGUgUmVmUHRyPERvY3VtZW50PiBtX3Jlc3Bv
bnNlWE1MOwogCkBAIC0yMjQsNyArMjI1LDcgQEAgcHJpdmF0ZToKICAgICBsb25nIGxvbmcgbV9y
ZWNlaXZlZExlbmd0aDsKICAgICAKICAgICB1bnNpZ25lZCBtX2xhc3RTZW5kTGluZU51bWJlcjsK
LSAgICBKU0M6OlVTdHJpbmcgbV9sYXN0U2VuZFVSTDsKKyAgICBTdHJpbmcgbV9sYXN0U2VuZFVS
TDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25339</attachid>
            <date>2008-11-20 22:24:32 -0800</date>
            <delta_ts>2008-11-20 22:34:39 -0800</delta_ts>
            <desc>v2 patch</desc>
            <filename>script_string_2.diff</filename>
            <type>text/plain</type>
            <size>11290</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4NjU0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDgtMTEt
MjAgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjIzOTAKKyAgICAgICAgQWJzdHJhY3QgYXdheSBKU0M6OiB1c2FnZSBp
biBXZWJDb3JlL3htbAorCisgICAgICAgICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAgICAgICAgKiBiaW5kaW5n
cy9qcy9TY3JpcHRTdHJpbmcuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJp
bmc6OlNjcmlwdFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6Om9wZXJh
dG9yIEpTQzo6VVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6OmlzTnVs
bCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRTdHJpbmc6OnNpemUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0U3RyaW5nOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0
U3RyaW5nOjpvcGVyYXRvcis9KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFJlc291cmNlOjpYTUxI
dHRwUmVxdWVzdFJlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclJlc291cmNl
OjpzZXRYTUxIdHRwUmVxdWVzdFByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oOgorICAgICAgICAqIHhtbC9YTUxI
dHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6cmVzcG9u
c2VUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjbGVhclJlc3BvbnNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkRmluaXNoTG9hZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6
OnNldExhc3RTZW5kVVJMKToKKwogMjAwOC0xMS0yMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgpJbmRleDogYmluZGlu
Z3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBiaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCShyZXZpc2lvbiAzODY1NCkKKysrIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJNZXNzYWdlUG9y
dC5oIgogI2luY2x1ZGUgIlJhbmdlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJv
bGxlci5oIgorI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1
ZXN0RXhjZXB0aW9uLmgiCiAjaW5jbHVkZSA8cnVudGltZS9Qcm90b3R5cGVGdW5jdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KSW5kZXg6IGJpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZpc2lv
biAzODY1NCkKKysrIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNyw2ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBGcmFtZTsKICAg
ICBjbGFzcyBLVVJMOwogICAgIGNsYXNzIE5vZGU7CisgICAgY2xhc3MgU2NyaXB0U3RyaW5nOwog
ICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBKU05vZGU7CiAKSW5kZXg6IGJpbmRpbmdzL2pz
L1NjcmlwdFN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5o
CShyZXZpc2lvbiAwKQorKysgYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMu
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU2NyaXB0U3RyaW5nX2gKKyNkZWZpbmUg
U2NyaXB0U3RyaW5nX2gKKworI2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8
cnVudGltZS9VU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5n
OworCitjbGFzcyBTY3JpcHRTdHJpbmcgeworcHVibGljOgorICAgIFNjcmlwdFN0cmluZyhjb25z
dCBjaGFyKiBzKSA6IG1fc3RyKHMpIHt9CisgICAgU2NyaXB0U3RyaW5nKGNvbnN0IEpTQzo6VVN0
cmluZyYgcykgOiBtX3N0cihzKSB7fQorCisgICAgb3BlcmF0b3IgSlNDOjpVU3RyaW5nKCkgY29u
c3QgeyByZXR1cm4gbV9zdHI7IH0KKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4g
bV9zdHIuaXNOdWxsKCk7IH0KKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
LnNpemUoKTsgfQorCisgICAgU2NyaXB0U3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgY2hhciogcykK
KyAgICB7CisgICAgICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICBtX3N0ciA9
IHM7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBTY3JpcHRTdHJpbmcmIG9w
ZXJhdG9yKz0oY29uc3QgU3RyaW5nJiBzKQorICAgIHsKKyAgICAgICAgSlNDOjpKU0xvY2sgbG9j
ayhmYWxzZSk7CisgICAgICAgIG1fc3RyICs9IHM7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgSlNDOjpVU3RyaW5nIG1fc3RyOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gU2NyaXB0U3RyaW5nX2gKSW5kZXg6IGluc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBpbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDM4NjU0KQorKysgaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgc3RydWN0
IENvbnNvbGVNZXNzYWdlIHsKIC8vIFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UgQ2xhc3MKIAogc3Ry
dWN0IFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UgewotICAgIFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2Uo
SlNDOjpVU3RyaW5nJiBzb3VyY2VTdHJpbmcpCisgICAgWE1MSHR0cFJlcXVlc3RSZXNvdXJjZShj
b25zdCBKU0M6OlVTdHJpbmcmIHNvdXJjZVN0cmluZykKICAgICB7CiAgICAgICAgIEpTQzo6SlNM
b2NrIGxvY2soZmFsc2UpOwogICAgICAgICB0aGlzLT5zb3VyY2VTdHJpbmcgPSBzb3VyY2VTdHJp
bmcucmVwKCk7CkBAIC0zMDIsNyArMzAyLDcgQEAgc3RydWN0IEluc3BlY3RvclJlc291cmNlIDog
cHVibGljIFJlZkNvdQogICAgICAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgbmV3U2Ny
aXB0T2JqZWN0KTsKICAgICB9CiAKLSAgICB2b2lkIHNldFhNTEh0dHBSZXF1ZXN0UHJvcGVydGll
cyhKU0M6OlVTdHJpbmcmIGRhdGEpCisgICAgdm9pZCBzZXRYTUxIdHRwUmVxdWVzdFByb3BlcnRp
ZXMoY29uc3QgSlNDOjpVU3RyaW5nJiBkYXRhKQogICAgIHsKICAgICAgICAgeG1sSHR0cFJlcXVl
c3RSZXNvdXJjZS5zZXQobmV3IFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UoZGF0YSkpOwogICAgIH0K
QEAgLTI0OTgsNyArMjQ5OCw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmFpbExv
YWRpbmcKICAgICB9CiB9CiAKLXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRy
aWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgSlNDOjpVU3Ry
aW5nJiBzb3VyY2VTdHJpbmcpCit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0
cmlldmVkQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEpT
Qzo6VVN0cmluZyYgc291cmNlU3RyaW5nKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm47CkluZGV4OiBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDM4NjU0KQor
KysgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjAz
LDcgKzIwMyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERv
Y3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVuZ3RoUmVjZWl2
ZWQpOwogICAgIHZvaWQgZGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllcik7CiAgICAgdm9pZCBkaWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRl
ciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAg
IHZvaWQgcmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgSlNDOjpVU3RyaW5nJiBzb3VyY2VTdHJpbmcpOworICAgIHZvaWQgcmVzb3VyY2VS
ZXRyaWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3Qg
SlNDOjpVU3RyaW5nJiBzb3VyY2VTdHJpbmcpOwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAg
IHZvaWQgZGlkT3BlbkRhdGFiYXNlKERhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKSW5kZXg6IHhtbC9YTUxI
dHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0geG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2
aXNpb24gMzg2NTQpCisrKyB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw4ICszNCw2IEBACiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVFRQ
UGFyc2Vycy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJK
U0RPTUJpbmRpbmcuaCIKLSNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIktVUkwu
aCIKICNpbmNsdWRlICJLVVJMSGFzaC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTQ3LDkgKzQ1
LDEyIEBACiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCiAjaW5jbHVk
ZSAiWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRl
IDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lm
IFVTRShKU0MpCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHR5cGVkZWYgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gSGVh
ZGVyc1NldDsKQEAgLTIwNiw3ICsyMDcsNyBAQCBYTUxIdHRwUmVxdWVzdDo6U3RhdGUgWE1MSHR0
cFJlcXVlc3Q6OnJlCiAgICAgcmV0dXJuIG1fc3RhdGU7CiB9CiAKLWNvbnN0IEpTQzo6VVN0cmlu
ZyYgWE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dCgpIGNvbnN0Citjb25zdCBTY3JpcHRTdHJp
bmcmIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZVRleHQoKSBjb25zdAogewogICAgIHJldHVybiBt
X3Jlc3BvbnNlVGV4dDsKIH0KQEAgLTc3OCwxMCArNzc5LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVz
dDo6aW50ZXJuYWxBYm9ydCgpCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjbGVhclJlc3BvbnNlKCkK
IHsKICAgICBtX3Jlc3BvbnNlID0gUmVzb3VyY2VSZXNwb25zZSgpOwotICAgIHsKLSAgICAgICAg
SlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIG1fcmVzcG9uc2VUZXh0ID0gIiI7Ci0g
ICAgfQorICAgIG1fcmVzcG9uc2VUZXh0ID0gIiI7CiAgICAgbV9jcmVhdGVkRG9jdW1lbnQgPSBm
YWxzZTsKICAgICBtX3Jlc3BvbnNlWE1MID0gMDsKIH0KQEAgLTgyNiw2ICs4MjQsNyBAQCB2b2lk
IFhNTEh0dHBSZXF1ZXN0OjphYm9ydEVycm9yKCkKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJv
cFByb3RlY3Rpb24oKSAgICAgICAgCiB7CisjaWYgVVNFKEpTQykKICAgICAvLyBUaGUgWEhSIG9i
amVjdCBpdHNlbGYgaG9sZHMgb24gdG8gdGhlIHJlc3BvbnNlVGV4dCwgYW5kCiAgICAgLy8gdGh1
cyBoYXMgZXh0cmEgY29zdCBldmVuIGluZGVwZW5kZW50IG9mIGFueQogICAgIC8vIHJlc3BvbnNl
VGV4dCBvciByZXNwb25zZVhNTCBvYmplY3RzIGl0IGhhcyBoYW5kZWQKQEAgLTgzNyw2ICs4MzYs
NyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpICAgCiAgICAgICAgIGlm
IChKU0M6OkpTVmFsdWUqIHdyYXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCp3aW5k
b3ctPmdsb2JhbERhdGEoKSwgdGhpcykpCiAgICAgICAgICAgICBKU0M6OkhlYXA6OmhlYXAod3Jh
cHBlciktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChtX3Jlc3BvbnNlVGV4dC5zaXplKCkgKiAyKTsK
ICAgICB9CisjZW5kaWYKIAogICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogfQpAQCAt
MTA1MiwxMSArMTA1Miw4IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmco
U3UKICAgICBpZiAobV9zdGF0ZSA8IEhFQURFUlNfUkVDRUlWRUQpCiAgICAgICAgIGNoYW5nZVN0
YXRlKEhFQURFUlNfUkVDRUlWRUQpOwogCi0gICAgewotICAgICAgICBKU0M6OkpTTG9jayBsb2Nr
KGZhbHNlKTsKLSAgICAgICAgaWYgKG1fZGVjb2RlcikKLSAgICAgICAgICAgIG1fcmVzcG9uc2VU
ZXh0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKLSAgICB9CisgICAgaWYgKG1fZGVjb2RlcikKKyAg
ICAgICAgbV9yZXNwb25zZVRleHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwogCiAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgaWYgKFBhZ2UqIHBh
Z2UgPSBmcmFtZS0+cGFnZSgpKSB7CkBAIC0xMjUyLDEyICsxMjQ5LDcgQEAgdm9pZCBYTUxIdHRw
UmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoU3VicgogICAgIGlmIChsZW4gPT0gLTEpCiAgICAgICAg
IGxlbiA9IHN0cmxlbihkYXRhKTsKIAotICAgIFN0cmluZyBkZWNvZGVkID0gbV9kZWNvZGVyLT5k
ZWNvZGUoZGF0YSwgbGVuKTsKLQotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxz
ZSk7Ci0gICAgICAgIG1fcmVzcG9uc2VUZXh0ICs9IGRlY29kZWQ7Ci0gICAgfQorICAgIG1fcmVz
cG9uc2VUZXh0ICs9IG1fZGVjb2Rlci0+ZGVjb2RlKGRhdGEsIGxlbik7CiAKICAgICBpZiAoIW1f
ZXJyb3IpIHsKICAgICAgICAgdXBkYXRlQW5kRGlzcGF0Y2hPblByb2dyZXNzKGxlbik7CkluZGV4
OiB4bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB4bWwvWE1MSHR0cFJlcXVlc3Qu
aAkocmV2aXNpb24gMzg2NTQpCisrKyB4bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgiCisj
aW5jbHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC03MSwxMCArNzIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgb3Zl
cnJpZGVNaW1lVHlwZShjb25zdCBTdHJpbmcmIG92ZXJyaWRlKTsKICAgICBTdHJpbmcgZ2V0QWxs
UmVzcG9uc2VIZWFkZXJzKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBTdHJpbmcgZ2V0UmVz
cG9uc2VIZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0g
ICAgY29uc3QgSlNDOjpVU3RyaW5nJiByZXNwb25zZVRleHQoKSBjb25zdDsKKyAgICBjb25zdCBT
Y3JpcHRTdHJpbmcmIHJlc3BvbnNlVGV4dCgpIGNvbnN0OwogICAgIERvY3VtZW50KiByZXNwb25z
ZVhNTCgpIGNvbnN0OwogICAgIHZvaWQgc2V0TGFzdFNlbmRMaW5lTnVtYmVyKHVuc2lnbmVkIGxp
bmVOdW1iZXIpIHsgbV9sYXN0U2VuZExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOyB9Ci0gICAgdm9p
ZCBzZXRMYXN0U2VuZFVSTChKU0M6OlVTdHJpbmcgdXJsKSB7IG1fbGFzdFNlbmRVUkwgPSB1cmw7
IH0KKyAgICB2b2lkIHNldExhc3RTZW5kVVJMKGNvbnN0IFN0cmluZyYgdXJsKSB7IG1fbGFzdFNl
bmRVUkwgPSB1cmw7IH0KIAogICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB1cGxvYWQoKTsKICAg
ICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogb3B0aW9uYWxVcGxvYWQoKSBjb25zdCB7IHJldHVybiBt
X3VwbG9hZC5nZXQoKTsgfQpAQCAtMjA4LDcgKzIwOSw3IEBAIHByaXZhdGU6CiAgICAgLy8gdG8g
YmUgYWJsZSB0byBzaGFyZSB0aGUgYnVmZmVyIHdpdGggSmF2YVNjcmlwdCB2ZXJzaW9ucyBvZiB0
aGUgd2hvbGUgb3IgcGFydGlhbCBzdHJpbmcuCiAgICAgLy8gSW4gY29udHJhc3QsIHRoaXMgc3Ry
aW5nIGRvZXNuJ3QgaW50ZXJhY3QgbXVjaCB3aXRoIHRoZSByZXN0IG9mIHRoZSBlbmdpbmUgc28g
aXQncyBub3QgdGhhdAogICAgIC8vIGJpZyBhIGNvc3QgdGhhdCBpdCBpc24ndCBhIFN0cmluZy4K
LSAgICBKU0M6OlVTdHJpbmcgbV9yZXNwb25zZVRleHQ7CisgICAgU2NyaXB0U3RyaW5nIG1fcmVz
cG9uc2VUZXh0OwogICAgIG11dGFibGUgYm9vbCBtX2NyZWF0ZWREb2N1bWVudDsKICAgICBtdXRh
YmxlIFJlZlB0cjxEb2N1bWVudD4gbV9yZXNwb25zZVhNTDsKIApAQCAtMjI0LDcgKzIyNSw3IEBA
IHByaXZhdGU6CiAgICAgbG9uZyBsb25nIG1fcmVjZWl2ZWRMZW5ndGg7CiAgICAgCiAgICAgdW5z
aWduZWQgbV9sYXN0U2VuZExpbmVOdW1iZXI7Ci0gICAgSlNDOjpVU3RyaW5nIG1fbGFzdFNlbmRV
Ukw7CisgICAgU3RyaW5nIG1fbGFzdFNlbmRVUkw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25340</attachid>
            <date>2008-11-20 22:34:39 -0800</date>
            <delta_ts>2008-11-21 15:55:08 -0800</delta_ts>
            <desc>v2.1 patch</desc>
            <filename>script_string_2.1.diff</filename>
            <type>text/plain</type>
            <size>10417</size>
            <attacher name="Darin Fisher (:fishd, Google)">fishd</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM4NjU0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMDgtMTEt
MjAgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjIzOTAKKyAgICAgICAgQWJzdHJhY3QgYXdheSBKU0M6OiB1c2FnZSBp
biBXZWJDb3JlL3htbAorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpTY3JpcHRTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjpvcGVyYXRvciBKU0M6OlVTdHJpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6U2NyaXB0U3RyaW5nOjppc051bGwpOgorICAgICAgICAoV2ViQ29yZTo6
U2NyaXB0U3RyaW5nOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3Bl
cmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFN0cmluZzo6b3BlcmF0b3IrPSk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MSHR0cFJlcXVlc3RSZXNvdXJjZTo6WE1MSHR0cFJlcXVlc3RSZXNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JSZXNvdXJjZTo6c2V0WE1MSHR0cFJlcXVlc3RQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNl
UmV0cmlldmVkQnlYTUxIdHRwUmVxdWVzdCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3BvbnNlVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6Y2xlYXJSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0
cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJl
cXVlc3Q6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3QuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpzZXRMYXN0U2VuZFVSTCk6CisKIDIw
MDgtMTEtMjAgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHZW9mZnJleSBHYXJlbi4KSW5kZXg6IGJpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL1NjcmlwdFN0cmluZy5oCShyZXZpc2lvbiAwKQorKysg
YmluZGluZ3MvanMvU2NyaXB0U3RyaW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgsIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
IAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgU2NyaXB0U3RyaW5nX2gKKyNkZWZpbmUgU2NyaXB0U3RyaW5nX2gKKwor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNMb2NrLmg+CisjaW5jbHVkZSA8cnVudGltZS9VU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworCitjbGFzcyBTY3JpcHRT
dHJpbmcgeworcHVibGljOgorICAgIFNjcmlwdFN0cmluZyhjb25zdCBjaGFyKiBzKSA6IG1fc3Ry
KHMpIHt9CisgICAgU2NyaXB0U3RyaW5nKGNvbnN0IEpTQzo6VVN0cmluZyYgcykgOiBtX3N0cihz
KSB7fQorCisgICAgb3BlcmF0b3IgSlNDOjpVU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHI7
IH0KKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV9zdHIuaXNOdWxsKCk7IH0K
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyLnNpemUoKTsgfQorCisgICAg
U2NyaXB0U3RyaW5nJiBvcGVyYXRvcj0oY29uc3QgY2hhciogcykKKyAgICB7CisgICAgICAgIEpT
Qzo6SlNMb2NrIGxvY2soZmFsc2UpOworICAgICAgICBtX3N0ciA9IHM7CisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICB9CisKKyAgICBTY3JpcHRTdHJpbmcmIG9wZXJhdG9yKz0oY29uc3QgU3Ry
aW5nJiBzKQorICAgIHsKKyAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7CisgICAgICAg
IG1fc3RyICs9IHM7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgSlNDOjpVU3RyaW5nIG1fc3RyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gU2NyaXB0U3RyaW5nX2gKSW5kZXg6IGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9s
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDM4NjU0KQorKysgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAgc3RydWN0IENvbnNvbGVNZXNzYWdlIHsK
IC8vIFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UgQ2xhc3MKIAogc3RydWN0IFhNTEh0dHBSZXF1ZXN0
UmVzb3VyY2UgewotICAgIFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UoSlNDOjpVU3RyaW5nJiBzb3Vy
Y2VTdHJpbmcpCisgICAgWE1MSHR0cFJlcXVlc3RSZXNvdXJjZShjb25zdCBKU0M6OlVTdHJpbmcm
IHNvdXJjZVN0cmluZykKICAgICB7CiAgICAgICAgIEpTQzo6SlNMb2NrIGxvY2soZmFsc2UpOwog
ICAgICAgICB0aGlzLT5zb3VyY2VTdHJpbmcgPSBzb3VyY2VTdHJpbmcucmVwKCk7CkBAIC0zMDIs
NyArMzAyLDcgQEAgc3RydWN0IEluc3BlY3RvclJlc291cmNlIDogcHVibGljIFJlZkNvdQogICAg
ICAgICAgICAgSlNWYWx1ZVByb3RlY3QoY29udGV4dCwgbmV3U2NyaXB0T2JqZWN0KTsKICAgICB9
CiAKLSAgICB2b2lkIHNldFhNTEh0dHBSZXF1ZXN0UHJvcGVydGllcyhKU0M6OlVTdHJpbmcmIGRh
dGEpCisgICAgdm9pZCBzZXRYTUxIdHRwUmVxdWVzdFByb3BlcnRpZXMoY29uc3QgSlNDOjpVU3Ry
aW5nJiBkYXRhKQogICAgIHsKICAgICAgICAgeG1sSHR0cFJlcXVlc3RSZXNvdXJjZS5zZXQobmV3
IFhNTEh0dHBSZXF1ZXN0UmVzb3VyY2UoZGF0YSkpOwogICAgIH0KQEAgLTI0OTgsNyArMjQ5OCw3
IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkRmFpbExvYWRpbmcKICAgICB9CiB9CiAK
LXZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBSZXF1
ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgSlNDOjpVU3RyaW5nJiBzb3VyY2VTdHJpbmcp
Cit2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnJlc291cmNlUmV0cmlldmVkQnlYTUxIdHRwUmVx
dWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEpTQzo6VVN0cmluZyYgc291cmNl
U3RyaW5nKQogewogICAgIGlmICghZW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGluc3BlY3Rvci9J
bnNwZWN0b3JDb250cm9sbGVyLmgJKHJldmlzaW9uIDM4NjU0KQorKysgaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDcgKzIwMyw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIGRpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpOwogICAgIHZvaWQgZGlk
RmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7
CiAgICAgdm9pZCBkaWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpOwotICAgIHZvaWQgcmVzb3VyY2VSZXRy
aWV2ZWRCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgSlNDOjpVU3Ry
aW5nJiBzb3VyY2VTdHJpbmcpOworICAgIHZvaWQgcmVzb3VyY2VSZXRyaWV2ZWRCeVhNTEh0dHBS
ZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgSlNDOjpVU3RyaW5nJiBzb3Vy
Y2VTdHJpbmcpOwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIHZvaWQgZGlkT3BlbkRhdGFi
YXNlKERhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiBkb21haW4sIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiB2ZXJzaW9uKTsKSW5kZXg6IHhtbC9YTUxIdHRwUmVxdWVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0geG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMzg2NTQpCisrKyB4
bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw4ICszNCw2IEBACiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKLSNp
bmNsdWRlICJKU0RPTVdpbmRvdy5oIgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJLVVJM
SGFzaC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKQEAgLTQ3LDkgKzQ1LDEyIEBACiAjaW5jbHVkZSAi
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RV
cGxvYWQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKLSNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5o
PgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIAorI2lmIFVTRShKU0MpCisjaW5jbHVk
ZSAiSlNET01XaW5kb3cuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHR5cGVk
ZWYgSGFzaFNldDxTdHJpbmcsIENhc2VGb2xkaW5nSGFzaD4gSGVhZGVyc1NldDsKQEAgLTIwNiw3
ICsyMDcsNyBAQCBYTUxIdHRwUmVxdWVzdDo6U3RhdGUgWE1MSHR0cFJlcXVlc3Q6OnJlCiAgICAg
cmV0dXJuIG1fc3RhdGU7CiB9CiAKLWNvbnN0IEpTQzo6VVN0cmluZyYgWE1MSHR0cFJlcXVlc3Q6
OnJlc3BvbnNlVGV4dCgpIGNvbnN0Citjb25zdCBTY3JpcHRTdHJpbmcmIFhNTEh0dHBSZXF1ZXN0
OjpyZXNwb25zZVRleHQoKSBjb25zdAogewogICAgIHJldHVybiBtX3Jlc3BvbnNlVGV4dDsKIH0K
QEAgLTc3OCwxMCArNzc5LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6aW50ZXJuYWxBYm9ydCgp
CiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjbGVhclJlc3BvbnNlKCkKIHsKICAgICBtX3Jlc3BvbnNl
ID0gUmVzb3VyY2VSZXNwb25zZSgpOwotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhm
YWxzZSk7Ci0gICAgICAgIG1fcmVzcG9uc2VUZXh0ID0gIiI7Ci0gICAgfQorICAgIG1fcmVzcG9u
c2VUZXh0ID0gIiI7CiAgICAgbV9jcmVhdGVkRG9jdW1lbnQgPSBmYWxzZTsKICAgICBtX3Jlc3Bv
bnNlWE1MID0gMDsKIH0KQEAgLTgyNiw2ICs4MjQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojph
Ym9ydEVycm9yKCkKIAogdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZHJvcFByb3RlY3Rpb24oKSAgICAg
ICAgCiB7CisjaWYgVVNFKEpTQykKICAgICAvLyBUaGUgWEhSIG9iamVjdCBpdHNlbGYgaG9sZHMg
b24gdG8gdGhlIHJlc3BvbnNlVGV4dCwgYW5kCiAgICAgLy8gdGh1cyBoYXMgZXh0cmEgY29zdCBl
dmVuIGluZGVwZW5kZW50IG9mIGFueQogICAgIC8vIHJlc3BvbnNlVGV4dCBvciByZXNwb25zZVhN
TCBvYmplY3RzIGl0IGhhcyBoYW5kZWQKQEAgLTgzNyw2ICs4MzYsNyBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0Ojpkcm9wUHJvdGVjdGlvbigpICAgCiAgICAgICAgIGlmIChKU0M6OkpTVmFsdWUqIHdy
YXBwZXIgPSBnZXRDYWNoZWRET01PYmplY3RXcmFwcGVyKCp3aW5kb3ctPmdsb2JhbERhdGEoKSwg
dGhpcykpCiAgICAgICAgICAgICBKU0M6OkhlYXA6OmhlYXAod3JhcHBlciktPnJlcG9ydEV4dHJh
TWVtb3J5Q29zdChtX3Jlc3BvbnNlVGV4dC5zaXplKCkgKiAyKTsKICAgICB9CisjZW5kaWYKIAog
ICAgIHVuc2V0UGVuZGluZ0FjdGl2aXR5KHRoaXMpOwogfQpAQCAtMTA1MiwxMSArMTA1Miw4IEBA
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmRpZEZpbmlzaExvYWRpbmcoU3UKICAgICBpZiAobV9zdGF0
ZSA8IEhFQURFUlNfUkVDRUlWRUQpCiAgICAgICAgIGNoYW5nZVN0YXRlKEhFQURFUlNfUkVDRUlW
RUQpOwogCi0gICAgewotICAgICAgICBKU0M6OkpTTG9jayBsb2NrKGZhbHNlKTsKLSAgICAgICAg
aWYgKG1fZGVjb2RlcikKLSAgICAgICAgICAgIG1fcmVzcG9uc2VUZXh0ICs9IG1fZGVjb2Rlci0+
Zmx1c2goKTsKLSAgICB9CisgICAgaWYgKG1fZGVjb2RlcikKKyAgICAgICAgbV9yZXNwb25zZVRl
eHQgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwogCiAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgaWYgKFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgp
KSB7CkBAIC0xMjUyLDEyICsxMjQ5LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2
ZURhdGEoU3VicgogICAgIGlmIChsZW4gPT0gLTEpCiAgICAgICAgIGxlbiA9IHN0cmxlbihkYXRh
KTsKIAotICAgIFN0cmluZyBkZWNvZGVkID0gbV9kZWNvZGVyLT5kZWNvZGUoZGF0YSwgbGVuKTsK
LQotICAgIHsKLSAgICAgICAgSlNDOjpKU0xvY2sgbG9jayhmYWxzZSk7Ci0gICAgICAgIG1fcmVz
cG9uc2VUZXh0ICs9IGRlY29kZWQ7Ci0gICAgfQorICAgIG1fcmVzcG9uc2VUZXh0ICs9IG1fZGVj
b2Rlci0+ZGVjb2RlKGRhdGEsIGxlbik7CiAKICAgICBpZiAoIW1fZXJyb3IpIHsKICAgICAgICAg
dXBkYXRlQW5kRGlzcGF0Y2hPblByb2dyZXNzKGxlbik7CkluZGV4OiB4bWwvWE1MSHR0cFJlcXVl
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSB4bWwvWE1MSHR0cFJlcXVlc3QuaAkocmV2aXNpb24gMzg2NTQp
CisrKyB4bWwvWE1MSHR0cFJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBA
QAogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgog
I2luY2x1ZGUgIlN1YnJlc291cmNlTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiU2NyaXB0U3Ry
aW5nLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC03MSwxMCArNzIsMTAgQEAgcHVibGljOgogICAgIHZvaWQgb3ZlcnJpZGVNaW1lVHlwZShjb25z
dCBTdHJpbmcmIG92ZXJyaWRlKTsKICAgICBTdHJpbmcgZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBTdHJpbmcgZ2V0UmVzcG9uc2VIZWFkZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAgY29uc3QgSlNDOjpVU3Ry
aW5nJiByZXNwb25zZVRleHQoKSBjb25zdDsKKyAgICBjb25zdCBTY3JpcHRTdHJpbmcmIHJlc3Bv
bnNlVGV4dCgpIGNvbnN0OwogICAgIERvY3VtZW50KiByZXNwb25zZVhNTCgpIGNvbnN0OwogICAg
IHZvaWQgc2V0TGFzdFNlbmRMaW5lTnVtYmVyKHVuc2lnbmVkIGxpbmVOdW1iZXIpIHsgbV9sYXN0
U2VuZExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOyB9Ci0gICAgdm9pZCBzZXRMYXN0U2VuZFVSTChK
U0M6OlVTdHJpbmcgdXJsKSB7IG1fbGFzdFNlbmRVUkwgPSB1cmw7IH0KKyAgICB2b2lkIHNldExh
c3RTZW5kVVJMKGNvbnN0IFN0cmluZyYgdXJsKSB7IG1fbGFzdFNlbmRVUkwgPSB1cmw7IH0KIAog
ICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB1cGxvYWQoKTsKICAgICBYTUxIdHRwUmVxdWVzdFVw
bG9hZCogb3B0aW9uYWxVcGxvYWQoKSBjb25zdCB7IHJldHVybiBtX3VwbG9hZC5nZXQoKTsgfQpA
QCAtMjA4LDcgKzIwOSw3IEBAIHByaXZhdGU6CiAgICAgLy8gdG8gYmUgYWJsZSB0byBzaGFyZSB0
aGUgYnVmZmVyIHdpdGggSmF2YVNjcmlwdCB2ZXJzaW9ucyBvZiB0aGUgd2hvbGUgb3IgcGFydGlh
bCBzdHJpbmcuCiAgICAgLy8gSW4gY29udHJhc3QsIHRoaXMgc3RyaW5nIGRvZXNuJ3QgaW50ZXJh
Y3QgbXVjaCB3aXRoIHRoZSByZXN0IG9mIHRoZSBlbmdpbmUgc28gaXQncyBub3QgdGhhdAogICAg
IC8vIGJpZyBhIGNvc3QgdGhhdCBpdCBpc24ndCBhIFN0cmluZy4KLSAgICBKU0M6OlVTdHJpbmcg
bV9yZXNwb25zZVRleHQ7CisgICAgU2NyaXB0U3RyaW5nIG1fcmVzcG9uc2VUZXh0OwogICAgIG11
dGFibGUgYm9vbCBtX2NyZWF0ZWREb2N1bWVudDsKICAgICBtdXRhYmxlIFJlZlB0cjxEb2N1bWVu
dD4gbV9yZXNwb25zZVhNTDsKIApAQCAtMjI0LDcgKzIyNSw3IEBAIHByaXZhdGU6CiAgICAgbG9u
ZyBsb25nIG1fcmVjZWl2ZWRMZW5ndGg7CiAgICAgCiAgICAgdW5zaWduZWQgbV9sYXN0U2VuZExp
bmVOdW1iZXI7Ci0gICAgSlNDOjpVU3RyaW5nIG1fbGFzdFNlbmRVUkw7CisgICAgU3RyaW5nIG1f
bGFzdFNlbmRVUkw7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="11734"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>