<?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>54608</bug_id>
          
          <creation_ts>2011-02-16 19:20:15 -0800</creation_ts>
          <short_desc>Refactor WriteBarrier and DeprecatedPtr to have less code duplication.</short_desc>
          <delta_ts>2011-02-18 06:59:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>54705</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>abarth</cc>
    
    <cc>buildbot</cc>
    
    <cc>eric</cc>
    
    <cc>galpeter</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>352538</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-16 19:20:15 -0800</bug_when>
    <thetext>Refactor WriteBarrier and DeprecatedPtr to have less code duplication.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353041</commentid>
    <comment_count>1</comment_count>
      <attachid>82833</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-02-17 11:16:26 -0800</bug_when>
    <thetext>Created attachment 82833
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353048</commentid>
    <comment_count>2</comment_count>
      <attachid>82833</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-02-17 11:25:16 -0800</bug_when>
    <thetext>Comment on attachment 82833
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353073</commentid>
    <comment_count>3</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2011-02-17 12:02:40 -0800</bug_when>
    <thetext>Attachment 82833 did not build on win:
Build output: http://queues.webkit.org/results/7929545</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353106</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-02-17 12:43:16 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/78856 might have broken Windows Release (Build)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353530</commentid>
    <comment_count>5</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-02-18 04:50:16 -0800</bug_when>
    <thetext>I saw this patch was rolled out, and I decided to help you a little. v8-crypto goes into an infinite loop because of the following expression:

var a = new Array()
a[0] = 1
print(a.length)

It is &quot;0&quot; with this patch, and &quot;1&quot; after the patch was rolled out. I think the append does not happen, but I need some further investigation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353544</commentid>
    <comment_count>6</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-02-18 05:31:47 -0800</bug_when>
    <thetext>
emit_op_put_by_val:
 addSlowCase(branch32(AboveOrEqual, regT2, Address(regT0, OBJECT_OFFSETOF(JSArray, m_vectorLength))));

0xb791027f:     cmp    0x30(%eax),%ecx
(gdb) x $eax+0x30
0xb78c2ff0:     0x00000003
(gdb) x $ecx
0x0:    Cannot access memory at address 0x0

eax points to the array, and its length is 3, instead of 0. Thus the append is &quot;successful&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353561</commentid>
    <comment_count>7</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-02-18 06:28:32 -0800</bug_when>
    <thetext>Forget about my previous comment, the initialCapacity is 3, so that is ok.

However, the vector clear loop in JSArray constructor:

JSArray::JSArray(JSGlobalData&amp; globalData, NonNullPassRefPtr&lt;Structure&gt; structure, const ArgList&amp; list)

    for (; i &lt; initialStorage; i++)
        vector[i].clear();

was set the values to EmptyValueTag, but when this patch is applied, it set to 0 by WriteBarrier.h:78 void clear() { m_value = 0; }

Zero is not even a valid JSValue32_64 tag, so this is totally wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353570</commentid>
    <comment_count>8</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-02-18 06:47:44 -0800</bug_when>
    <thetext>was:
WriteBarrier.h:122 void clear() { m_value = JSValue::encode(JSValue()); }
  which is: JSValue.h:403 u.asBits.tag = EmptyValueTag;

now:
WriteBarrier.h:78 void clear() { m_value = 0; }

I&apos;ll try:
WriteBarrier.h:78 void clear() { m_value = JSValue::encode(JSValue()); }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353579</commentid>
    <comment_count>9</comment_count>
      <attachid>82833</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2011-02-18 06:57:31 -0800</bug_when>
    <thetext>Comment on attachment 82833
Patch

Note that this patch was landed in r78856 and rolled out in r78945 (see bug 54705).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>353582</commentid>
    <comment_count>10</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2011-02-18 06:59:30 -0800</bug_when>
    <thetext>I know :) But the patch is not necessary wrong, maybe just there is small bug in it.

Unfortunately this is not working when T is JSCell:

WriteBarrier.h:78 void clear() { m_value = JSValue::encode(JSValue()); }</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>82833</attachid>
            <date>2011-02-17 11:16:26 -0800</date>
            <delta_ts>2011-02-18 06:57:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-54608-20110217111625.patch</filename>
            <type>text/plain</type>
            <size>23441</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogNzg3NDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGVh
ZjFhNDczOThhM2E1ZDIxYTE0NmE0NGI0MTI3ZTQxZTcxMjRiYWMuLmFjZTk4NTlmYjIwN2JkMjU4
YWJkNTA3Yjk5MjgzMDZiOTdlNGYxYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSAr
MSw0OSBAQAorMjAxMS0wMi0xNyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIFdy
aXRlQmFycmllciBhbmQgRGVwcmVjYXRlZFB0ciB0byBoYXZlIGxlc3MgY29kZSBkdXBsaWNhdGlv
bi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0NjA4
CisKKyAgICAgICAgTWFrZSB1c2Ugb2YgdGhlIHRyaWNrcyB1c2VkIGZvciBIYW5kbGUsIGV0IGFs
IHRvIGF2b2lkIGR1cGxpY2F0aW5nIGFsbAorICAgICAgICBvZiB0aGUgbG9naWMgZm9yIERlcHJl
Y2F0ZWRQdHIgYW5kIFdyaXRlQmFycmllciBzaW1wbHkgdG8gc3VwcG9ydCBrbm93bgorICAgICAg
ICB2cy4gdW5rbm93biB0eXBlcy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY29sbGVjdG9yL2hhbmRsZXMvR2xvYmFsLmg6
CisgICAgICAgIChKU0M6Okdsb2JhbDo6aW50ZXJuYWxTZXQpOgorICAgICAgICAqIGNvbGxlY3Rv
ci9oYW5kbGVzL0hhbmRsZS5oOgorICAgICAgICAoSlNDOjpIYW5kbGU6OkhhbmRsZSk6CisgICAg
ICAgIChKU0M6OkhhbmRsZTo6Z2V0KToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpKU0FycmF5Ojpzb3J0TnVtZXJpYyk6CisgICAgICAgICogcnVudGltZS9K
U09iamVjdC5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6aW5saW5lR2V0T3duUHJvcGVydHlT
bG90KToKKyAgICAgICAgKiBydW50aW1lL1Nsb3RBY2Nlc3Nvci5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6U2xvdFR5cGVzOjpnZXRGcm9tQmFzZVR5cGUpOgorICAgICAgICAoSlNDOjpTbG90VHlw
ZXM6OmNvbnZlcnRUb0Jhc2VUeXBlKToKKyAgICAgICAgKEpTQzo6U2xvdFR5cGVzOjpnZXRGcm9t
U2xvdCk6CisgICAgICAgIChKU0M6OlNsb3RUeXBlczo6dG9KU1ZhbHVlKToKKyAgICAgICAgKEpT
Qzo6U2xvdFR5cGVzOjp2YWxpZGF0ZVVwY2FzdCk6CisgICAgICAgIChKU0M6OlNsb3RBY2Nlc3Nv
cjo6b3BlcmF0b3ItPik6CisgICAgICAgIChKU0M6OlNsb3RBY2Nlc3Nvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKiBydW50aW1lL1dlYWtHQ1B0ci5oOgorICAgICAgICAoSlNDOjpXZWFrR0NQdHI6
OmdldCk6CisgICAgICAgIChKU0M6OldlYWtHQ1B0cjo6aW50ZXJuYWxTZXQpOgorICAgICAgICAq
IHJ1bnRpbWUvV3JpdGVCYXJyaWVyLmg6CisgICAgICAgIChKU0M6OkRlcHJlY2F0ZWRQdHI6OkRl
cHJlY2F0ZWRQdHIpOgorICAgICAgICAoSlNDOjpEZXByZWNhdGVkUHRyOjpnZXQpOgorICAgICAg
ICAoSlNDOjpEZXByZWNhdGVkUHRyOjpzbG90KToKKyAgICAgICAgKEpTQzo6RGVwcmVjYXRlZFB0
cjo6b3BlcmF0b3I9KToKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyVHJhbnNsYXRvcjo6Y29u
dmVydFRvU3RvcmFnZSk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllclRyYW5zbGF0b3I6OmNv
bnZlcnRGcm9tU3RvcmFnZSk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U6OnNldCk6
CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U6OmdldCk6CisgICAgICAgIChKU0M6Oldy
aXRlQmFycmllckJhc2U6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyQmFzZTo6
c2xvdCk6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllckJhc2U6Om9wZXJhdG9yIFVuc3BlY2lm
aWVkQm9vbFR5cGUqKToKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyQmFzZTo6b3BlcmF0b3Ih
KToKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyQmFzZTo6c2V0V2l0aG91dFdyaXRlQmFycmll
cik6CisgICAgICAgIChKU0M6OldyaXRlQmFycmllcjo6V3JpdGVCYXJyaWVyKToKKwogPT0gUm9s
bGVkIG92ZXIgdG8gQ2hhbmdlTG9nLTIwMTEtMDItMTYgPT0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggNTQ0OTQ3MTdlMzc4M2ViMDhlMDkyMWIzMGM4ZjU5NWZlOGM4MDBlNS4uYTFm
NjY3ZTE5MDdhMzU1YTc4YzNhY2U5YmQ3MmExNjg5NTBkZDVlYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTM3NCw2ICszNzQsNyBAQAogCQlBN0M0MEMwQTEzMEIwNTdEMDBEMDAy
QTEgLyogQmxvY2tTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdDNDBDMDcxMzBCMDU3RDAwRDAwMkExIC8qIEJsb2NrU3RhY2suaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBN0M0MEMwQjEzMEIw
NTdEMDBEMDAyQTEgLyogU2VudGluZWxMaW5rZWRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0M0MEMwODEzMEIwNTdEMDBEMDAyQTEgLyogU2Vu
dGluZWxMaW5rZWRMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQTdDNDBDMEMxMzBCMDU3RDAwRDAwMkExIC8qIFNpbmdseUxpbmtlZExpc3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3QzQwQzA5
MTMwQjA1N0QwMEQwMDJBMSAvKiBTaW5nbHlMaW5rZWRMaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQTdDNDBEMkQxMzBDOEU0MjAwRDAwMkEx
IC8qIFNsb3RBY2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTdDNDBEMkMxMzBDOEU0MjAwRDAwMkExIC8qIFNsb3RBY2Nlc3Nvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3QzUzMEU0MTAy
QTM4MTMwMDVCQzc0MSAvKiBNYXJrU3RhY2tQb3NpeC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0M1MzBFMzEwMkEzODEzMDA1QkM3NDEgLyogTWFy
a1N0YWNrUG9zaXguY3BwICovOyB9OwogCQlBN0Q2NDlBQTEwMTUyMjRFMDA5QjJFMUIgLyogUG9z
c2libHlOdWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0Q2NDlBOTEwMTUyMjRFMDA5QjJFMUIgLyogUG9zc2libHlOdWxsLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQTdEQ0I5NzMxMkU1MTkzRjAw
OTExOTQwIC8qIFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8qIFdyaXRlQmFycmllci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xMDM5
LDYgKzEwNDAsNyBAQAogCQlBN0M0MEMwNzEzMEIwNTdEMDBEMDAyQTEgLyogQmxvY2tTdGFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCbG9ja1N0YWNrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzQwQzA4MTMwQjA1N0QwMEQwMDJBMSAvKiBTZW50aW5l
bExpbmtlZExpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VudGluZWxM
aW5rZWRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3QzQwQzA5MTMwQjA1
N0QwMEQwMDJBMSAvKiBTaW5nbHlMaW5rZWRMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNpbmdseUxpbmtlZExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQTdDNDBEMkMxMzBDOEU0MjAwRDAwMkExIC8qIFNsb3RBY2Nlc3Nvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90QWNjZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTdDNTMwRTMxMDJBMzgxMzAwNUJDNzQxIC8qIE1hcmtTdGFja1Bvc2l4LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hcmtTdGFja1Bvc2l4LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdENjQ5QTkxMDE1MjI0RTAwOUIyRTFC
IC8qIFBvc3NpYmx5TnVsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQb3Nz
aWJseU51bGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdEQ0I3NzkxMkUzRDkw
NTAwOTExOTQwIC8qIFdyaXRlQmFycmllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXcml0ZUJhcnJpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE4OTYs
NiArMTg5OCw3IEBACiAJCQkJMTQwMzVEQjAxMERCRkIyQTAwRkZGRkU3IC8qIFdlYWtHQ1B0ci5o
ICovLAogCQkJCTE0MjBCRTdBMTBBQTZEREIwMEY0NTVEMiAvKiBXZWFrUmFuZG9tLmggKi8sCiAJ
CQkJQTdEQ0I3NzkxMkUzRDkwNTAwOTExOTQwIC8qIFdyaXRlQmFycmllci5oICovLAorCQkJCUE3
QzQwRDJDMTMwQzhFNDIwMEQwMDJBMSAvKiBTbG90QWNjZXNzb3IuaCAqLywKIAkJCSk7CiAJCQlw
YXRoID0gcnVudGltZTsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNDQ2LDYgKzI0
NDksNyBAQAogCQkJCUE3QzQwQzBBMTMwQjA1N0QwMEQwMDJBMSAvKiBCbG9ja1N0YWNrLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0M0MEMwQjEzMEIwNTdEMDBEMDAyQTEgLyogU2VudGluZWxMaW5r
ZWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0M0MEMwQzEzMEIwNTdEMDBEMDAyQTEgLyog
U2luZ2x5TGlua2VkTGlzdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdDNDBEMkQxMzBDOEU0MjAw
RDAwMkExIC8qIFNsb3RBY2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvY29sbGVjdG9yL2hhbmRsZXMvR2xvYmFsLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvY29sbGVjdG9yL2hhbmRsZXMvR2xvYmFsLmgKaW5kZXggNTcxZmUzMTIxMzc2
OTQyYzVhYWYyNTdiN2ViOGZjMjBhYjBlMWE2Yi4uYWM2MDBhZDE4MTNmZTVmODA1YWUwYjgzMmY4
ZDJhZmRjM2ZkM2MzNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rv
ci9oYW5kbGVzL0dsb2JhbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb2xsZWN0b3Iv
aGFuZGxlcy9HbG9iYWwuaApAQCAtMTMyLDcgKzEzMiw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICB2b2lkIGludGVybmFsU2V0KEV4dGVybmFsVHlwZSB2YWx1ZSkKICAgICB7Ci0gICAgICAg
IEpTVmFsdWUgbmV3VmFsdWUoSGFuZGxlVHlwZXM8VD46OnRvSlNWYWx1ZSh2YWx1ZSkpOworICAg
ICAgICBKU1ZhbHVlIG5ld1ZhbHVlKFNsb3RUeXBlczxUPjo6dG9KU1ZhbHVlKHZhbHVlKSk7CiAg
ICAgICAgIEhhbmRsZVNsb3Qgc2xvdCA9IHRoaXMtPnNsb3QoKTsKICAgICAgICAgQVNTRVJUKHNs
b3QpOwogICAgICAgICBIYW5kbGVIZWFwOjpoZWFwRm9yKHNsb3QpLT53cml0ZUJhcnJpZXIoc2xv
dCwgbmV3VmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rv
ci9oYW5kbGVzL0hhbmRsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2NvbGxlY3Rvci9oYW5k
bGVzL0hhbmRsZS5oCmluZGV4IDk4YzYwZWNiY2M0YmVhODY1MzI4N2RlODY3YzVhODEzMjc1OGJi
NzcuLjVhOWQ0OWRkNGZjZThjNTU5ZmJlNTU1NWIzZDRkNmU5Mjg1YmMyM2UgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9jb2xsZWN0b3IvaGFuZGxlcy9IYW5kbGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvY29sbGVjdG9yL2hhbmRsZXMvSGFuZGxlLmgKQEAgLTI2LDcg
KzI2LDcgQEAKICNpZm5kZWYgSGFuZGxlX2gKICNkZWZpbmUgSGFuZGxlX2gKIAotI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgIlNsb3RBY2Nlc3Nvci5oIgogCiAjaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KIApAQCAtODksNDAgKzg5LDE2IEBAIHByaXZhdGU6CiAgICAgSGFu
ZGxlU2xvdCBtX3Nsb3Q7CiB9OwogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IEhhbmRs
ZVR5cGVzIHsKLSAgICB0eXBlZGVmIFQqIEV4dGVybmFsVHlwZTsKLSAgICBzdGF0aWMgRXh0ZXJu
YWxUeXBlIGdldEZyb21TbG90KEhhbmRsZVNsb3Qgc2xvdCkgeyByZXR1cm4gKHNsb3QgJiYgKnNs
b3QpID8gcmVpbnRlcnByZXRfY2FzdDxFeHRlcm5hbFR5cGU+KHNsb3QtPmFzQ2VsbCgpKSA6IDA7
IH0KLSAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoVCogY2VsbCkgeyByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxKU0NlbGwqPihjZWxsKTsgfQotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiBz
dGF0aWMgdm9pZCB2YWxpZGF0ZVVwY2FzdCgpIHsgVCogdGVtcDsgdGVtcCA9IChVKikwOyB9Ci19
OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgSGFuZGxlVHlwZXM8VW5rbm93bj4gewotICAgIHR5cGVk
ZWYgSlNWYWx1ZSBFeHRlcm5hbFR5cGU7Ci0gICAgc3RhdGljIEV4dGVybmFsVHlwZSBnZXRGcm9t
U2xvdChIYW5kbGVTbG90IHNsb3QpIHsgcmV0dXJuIHNsb3QgPyAqc2xvdCA6IEpTVmFsdWUoKTsg
fQotICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShjb25zdCBKU1ZhbHVlJiB2KSB7IHJldHVy
biB2OyB9Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IHN0YXRpYyB2b2lkIHZhbGlkYXRlVXBj
YXN0KCkge30KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBCYXNlLCB0eXBlbmFtZSBUPiBzdHJ1
Y3QgSGFuZGxlQ29udmVydGVyIHsKLSAgICBUKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8QmFzZSo+KHRoaXMpLT5nZXQoKTsgfQotICAgIGNvbnN0IFQqIG9wZXJhdG9yLT4oKSBj
b25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPmdldCgpOyB9Ci0g
ICAgVCogb3BlcmF0b3IqKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZSo+KHRoaXMpLT5nZXQo
KTsgfQotICAgIGNvbnN0IFQqIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEJhc2UqPih0aGlzKS0+Z2V0KCk7IH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBC
YXNlPiBzdHJ1Y3QgSGFuZGxlQ29udmVydGVyPEJhc2UsIFVua25vd24+IHsKLX07Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBIYW5kbGUgOiBwdWJsaWMgSGFuZGxlQmFzZSwgcHVibGlj
IEhhbmRsZUNvbnZlcnRlcjxIYW5kbGU8VD4sIFQ+IHsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBj
bGFzcyBIYW5kbGUgOiBwdWJsaWMgSGFuZGxlQmFzZSwgcHVibGljIFNsb3RBY2Nlc3NvcjxIYW5k
bGU8VD4sIFQ+IHsKIHB1YmxpYzoKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEhhbmRsZVR5cGVzPFQ+
OjpFeHRlcm5hbFR5cGUgRXh0ZXJuYWxUeXBlOworICAgIHR5cGVkZWYgdHlwZW5hbWUgU2xvdFR5
cGVzPFQ+OjpFeHRlcm5hbFR5cGUgRXh0ZXJuYWxUeXBlOwogICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBVPiBIYW5kbGUoSGFuZGxlPFU+IG8pCiAgICAgewotICAgICAgICB0eXBlbmFtZSBIYW5kbGVU
eXBlczxUPjo6dGVtcGxhdGUgdmFsaWRhdGVVcGNhc3Q8VT4oKTsKKyAgICAgICAgdHlwZW5hbWUg
U2xvdFR5cGVzPFQ+Ojp0ZW1wbGF0ZSB2YWxpZGF0ZVVwY2FzdDxVPigpOwogICAgICAgICBtX3Ns
b3QgPSBvLnNsb3QoKTsKICAgICB9CiAKLSAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gSGFuZGxlVHlwZXM8VD46OmdldEZyb21TbG90KHRoaXMtPnNsb3QoKSk7IH0KKyAgICBF
eHRlcm5hbFR5cGUgZ2V0KCkgY29uc3QgeyByZXR1cm4gU2xvdFR5cGVzPFQ+OjpnZXRGcm9tU2xv
dCh0aGlzLT5zbG90KCkpOyB9CiAKIHByb3RlY3RlZDoKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAppbmRleCBiMGIyNmE1YWYxNTkwOWVmMDljNThlNGNmMWVkZWFh
NGRlYTQzMGJmLi5lNzQyNjZlNzE2MGY0M2MyNDAwMGFhNDEwNTQ0ZDg1NTE2YTA3ZjQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmNwcApAQCAtODk4LDcgKzg5OCw3
IEBAIHZvaWQgSlNBcnJheTo6c29ydE51bWVyaWMoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGNv
bXBhcmVGdW5jdGlvbiwgQ2FsbFR5cGUgY2FsCiAgICAgYm9vbCBhbGxWYWx1ZXNBcmVOdW1iZXJz
ID0gdHJ1ZTsKICAgICBzaXplX3Qgc2l6ZSA9IHN0b3JhZ2UtPm1fbnVtVmFsdWVzSW5WZWN0b3I7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgaWYgKCFz
dG9yYWdlLT5tX3ZlY3RvcltpXS5pc051bWJlcigpKSB7CisgICAgICAgIGlmICghc3RvcmFnZS0+
bV92ZWN0b3JbaV0tPmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIGFsbFZhbHVlc0FyZU51bWJl
cnMgPSBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAppbmRleCBiMGY1NDk5MjAxMGM1NWM3ZGU2NjBlZTVm
ODQ3OWY0ZDExOTJjYjhjLi4xNzI0MTMyM2YyMmUxZWMyYTZjMDFiYTI4OTljOGI4Y2FlNGFmOWJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKQEAgLTQ1NCw3ICs0
NTQsNyBAQCBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppbmhlcml0cyhjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbykgY29uc3QKIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6aW5saW5lR2V0T3du
UHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7CiAgICAgaWYgKFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4qIGxvY2F0aW9uID0gZ2V0RGlyZWN0TG9jYXRpb24ocHJvcGVydHlOYW1lKSkgewotICAg
ICAgICBpZiAobV9zdHJ1Y3R1cmUtPmhhc0dldHRlclNldHRlclByb3BlcnRpZXMoKSAmJiBsb2Nh
dGlvbi0+aXNHZXR0ZXJTZXR0ZXIoKSkKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlLT5oYXNHZXR0
ZXJTZXR0ZXJQcm9wZXJ0aWVzKCkgJiYgKCpsb2NhdGlvbiktPmlzR2V0dGVyU2V0dGVyKCkpCiAg
ICAgICAgICAgICBmaWxsR2V0dGVyUHJvcGVydHlTbG90KHNsb3QsIGxvY2F0aW9uKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZSh0aGlzLCBsb2NhdGlvbi0+Z2V0KCks
IG9mZnNldEZvckxvY2F0aW9uKGxvY2F0aW9uKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TbG90QWNjZXNzb3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Nsb3RBY2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVjY2JmYjNkMmI0ZTA0NDc4NDVjMGI1
YThlYmZjNDg5MjQ0OGFmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TbG90QWNjZXNzb3IuaApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBTbG90QWNjZXNzb3JfaAorI2RlZmluZSBTbG90QWNjZXNzb3JfaAorCisjaW5jbHVk
ZSAiSlNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNDZWxsOworCit0eXBl
ZGVmIGVudW0geyB9IFVua25vd247Cit0eXBlZGVmIEpTVmFsdWUqIEhhbmRsZVNsb3Q7CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgU2xvdFR5cGVzIHsKKyAgICB0eXBlZGVmIFQqIEV4
dGVybmFsVHlwZTsKKyAgICB0eXBlZGVmIEpTQ2VsbCogRXh0ZXJuYWxUeXBlQmFzZTsKKyAgICBz
dGF0aWMgRXh0ZXJuYWxUeXBlIGdldEZyb21CYXNlVHlwZShFeHRlcm5hbFR5cGVCYXNlIGJhc2Up
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RXh0ZXJuYWxUeXBlPihiYXNlKTsgfQorICAgIHN0
YXRpYyBFeHRlcm5hbFR5cGVCYXNlIGNvbnZlcnRUb0Jhc2VUeXBlKEV4dGVybmFsVHlwZSB2YWx1
ZSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxFeHRlcm5hbFR5cGVCYXNlPih2YWx1ZSk7IH0K
KyAgICBzdGF0aWMgRXh0ZXJuYWxUeXBlIGdldEZyb21TbG90KEhhbmRsZVNsb3Qgc2xvdCkgeyBy
ZXR1cm4gKHNsb3QgJiYgKnNsb3QpID8gcmVpbnRlcnByZXRfY2FzdDxFeHRlcm5hbFR5cGU+KHNs
b3QtPmFzQ2VsbCgpKSA6IDA7IH0KKyAgICBzdGF0aWMgSlNWYWx1ZSB0b0pTVmFsdWUoRXh0ZXJu
YWxUeXBlIGNlbGwpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RXh0ZXJuYWxUeXBlQmFzZT4o
Y2VsbCk7IH0KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gc3RhdGljIHZvaWQgdmFsaWRhdGVV
cGNhc3QoKSB7IFQqIHRlbXA7IHRlbXAgPSAoVSopMDsgfQorfTsKKwordGVtcGxhdGUgPD4gc3Ry
dWN0IFNsb3RUeXBlczxVbmtub3duPiB7CisgICAgdHlwZWRlZiBKU1ZhbHVlIEV4dGVybmFsVHlw
ZTsKKyAgICB0eXBlZGVmIEpTVmFsdWUgRXh0ZXJuYWxUeXBlQmFzZTsKKyAgICBzdGF0aWMgRXh0
ZXJuYWxUeXBlIGdldEZyb21CYXNlVHlwZShFeHRlcm5hbFR5cGVCYXNlIGJhc2UpIHsgcmV0dXJu
IGJhc2U7IH0KKyAgICBzdGF0aWMgRXh0ZXJuYWxUeXBlQmFzZSBjb252ZXJ0VG9CYXNlVHlwZShF
eHRlcm5hbFR5cGUgdmFsdWUpIHsgcmV0dXJuIHZhbHVlOyB9CisgICAgc3RhdGljIEV4dGVybmFs
VHlwZSBnZXRGcm9tU2xvdChIYW5kbGVTbG90IHNsb3QpIHsgcmV0dXJuIHNsb3QgPyAqc2xvdCA6
IEpTVmFsdWUoKTsgfQorICAgIHN0YXRpYyBKU1ZhbHVlIHRvSlNWYWx1ZShjb25zdCBKU1ZhbHVl
JiB2KSB7IHJldHVybiB2OyB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IHN0YXRpYyB2b2lk
IHZhbGlkYXRlVXBjYXN0KCkge30KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBCYXNlLCB0eXBl
bmFtZSBUPiBzdHJ1Y3QgU2xvdEFjY2Vzc29yIHsKKyAgICBUKiBvcGVyYXRvci0+KCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8QmFzZSo+KHRoaXMpLT5nZXQoKTsgfQorICAgIGNvbnN0IFQqIG9wZXJh
dG9yLT4oKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBCYXNlKj4odGhpcyktPmdl
dCgpOyB9CisgICAgVCogb3BlcmF0b3IqKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZSo+KHRo
aXMpLT5nZXQoKTsgfQorICAgIGNvbnN0IFQqIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PGNvbnN0IEJhc2UqPih0aGlzKS0+Z2V0KCk7IH0KK307CisKK3RlbXBsYXRlIDx0
eXBlbmFtZSBCYXNlPiBzdHJ1Y3QgU2xvdEFjY2Vzc29yPEJhc2UsIFVua25vd24+IHsKKyAgICBK
U1ZhbHVlKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmFzZSo+KHRoaXMpLT5z
bG90KCk7IH0KKyAgICBjb25zdCBKU1ZhbHVlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgQmFzZSo+KHRoaXMpLT5zbG90KCk7IH0KKyAgICBKU1ZhbHVlKiBv
cGVyYXRvciooKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCYXNlKj4odGhpcyktPnNsb3QoKTsgfQor
ICAgIGNvbnN0IEpTVmFsdWUqIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IEJhc2UqPih0aGlzKS0+c2xvdCgpOyB9Cit9OworCisvLyBKU1ZhbHVlIHNob3VsZCBu
b3QgYmUgdXNlZCBkaXJlY3RseQordGVtcGxhdGUgPHR5cGVuYW1lIEJhc2U+IHN0cnVjdCBTbG90
QWNjZXNzb3I8QmFzZSwgSlNWYWx1ZT47Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgU2xvdFR5cGVzPEpT
VmFsdWU+OworCit9CisKKyNlbmRpZiAvLyBTbG90QWNjZXNzb3JfaApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV2Vha0dDUHRyLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9XZWFrR0NQdHIuaAppbmRleCBhMDEzOGMwOGM1OTA0YjIzY2RkYzUxZWY3
YzA2NzhjYzk0YjFlMWM2Li5iNjA5YzFmZjU4OTMxNWIxMWFiYWExZGQyYzZlZGJhMDdhNTRiOTEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NQdHIuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9XZWFrR0NQdHIuaApAQCAtMzIsMTEg
KzMyLDExIEBACiBuYW1lc3BhY2UgSlNDIHsKIC8vIEEgc21hcnQgcG9pbnRlciB3aG9zZSBnZXQo
KSBmdW5jdGlvbiByZXR1cm5zIDAgZm9yIGNlbGxzIHRoYXQgaGF2ZSBkaWVkCiAKLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBjbGFzcyBXZWFrR0NQdHIgOiBwdWJsaWMgSGFuZGxlQ29udmVydGVyPFdl
YWtHQ1B0cjxUPiwgVD4gewordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYWtHQ1B0ciA6
IHB1YmxpYyBTbG90QWNjZXNzb3I8V2Vha0dDUHRyPFQ+LCBUPiB7CiAgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoV2Vha0dDUHRyKTsKIAogcHVibGljOgotICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFu
ZGxlVHlwZXM8VD46OkV4dGVybmFsVHlwZSBFeHRlcm5hbFR5cGU7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBTbG90VHlwZXM8VD46OkV4dGVybmFsVHlwZSBFeHRlcm5hbFR5cGU7CiAgICAgCiAgICAg
V2Vha0dDUHRyKCkKICAgICAgICAgOiBtX3Nsb3QoMCkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGlj
OgogICAgICAgICBpbnRlcm5hbFNldCh2YWx1ZSk7CiAgICAgfQogCi0gICAgRXh0ZXJuYWxUeXBl
IGdldCgpIGNvbnN0IHsgcmV0dXJuICBIYW5kbGVUeXBlczxUPjo6Z2V0RnJvbVNsb3QobV9zbG90
KTsgfQorICAgIEV4dGVybmFsVHlwZSBnZXQoKSBjb25zdCB7IHJldHVybiAgU2xvdFR5cGVzPFQ+
OjpnZXRGcm9tU2xvdChtX3Nsb3QpOyB9CiAgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewpA
QCAtOTEsNyArOTEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgaW50ZXJuYWxTZXQoRXh0ZXJuYWxU
eXBlIHZhbHVlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fc2xvdCk7Ci0gICAgICAgIEpTVmFs
dWUgbmV3VmFsdWUoSGFuZGxlVHlwZXM8VD46OnRvSlNWYWx1ZSh2YWx1ZSkpOworICAgICAgICBK
U1ZhbHVlIG5ld1ZhbHVlKFNsb3RUeXBlczxUPjo6dG9KU1ZhbHVlKHZhbHVlKSk7CiAgICAgICAg
IEhhbmRsZUhlYXA6OmhlYXBGb3IobV9zbG90KS0+d3JpdGVCYXJyaWVyKG1fc2xvdCwgbmV3VmFs
dWUpOwogICAgICAgICAqbV9zbG90ID0gbmV3VmFsdWU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIuaAppbmRleCA0NDg0MGFkZGQ3MWFiZmY1NzEx
ODIyNjMzNWQ1ZWQzZjdlMDA2YjdlLi5kZmQ0MGEzMmQ2YzkwZDJhYjFiNjRlNTBlMDBiOWI5NGMw
YWI5ZDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJh
cnJpZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJhcnJpZXIu
aApAQCAtMjYsMTI5ICsyNiw5NCBAQAogI2lmbmRlZiBXcml0ZUJhcnJpZXJfaAogI2RlZmluZSBX
cml0ZUJhcnJpZXJfaAogCi0jaW5jbHVkZSAiSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlNsb3RBY2Nl
c3Nvci5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTR2xvYmFs
RGF0YTsKIAotdHlwZWRlZiBlbnVtIHsgfSBVbmtub3duOwotdHlwZWRlZiBKU1ZhbHVlKiBIYW5k
bGVTbG90OwotCi10ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgRGVwcmVjYXRlZFB0ciB7Cit0ZW1w
bGF0ZSA8Y2xhc3MgVD4gY2xhc3MgRGVwcmVjYXRlZFB0ciA6IHB1YmxpYyBTbG90QWNjZXNzb3I8
RGVwcmVjYXRlZFB0cjxUPiwgVD4gewogcHVibGljOgotICAgIERlcHJlY2F0ZWRQdHIoKSA6IG1f
Y2VsbCgwKSB7IH0KLSAgICBEZXByZWNhdGVkUHRyKFQqIGNlbGwpIDogbV9jZWxsKHJlaW50ZXJw
cmV0X2Nhc3Q8SlNDZWxsKj4oY2VsbCkpIHsgfQotICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KG1fY2VsbCk7IH0KLSAgICBUKiBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9jZWxsKTsgfQotICAgIFQqIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxUKj4obV9jZWxsKTsgfQotICAgIAotICAgIEpT
Q2VsbCoqIHNsb3QoKSB7IHJldHVybiAmbV9jZWxsOyB9CisgICAgdHlwZWRlZiB0eXBlbmFtZSBT
bG90VHlwZXM8VD46OkV4dGVybmFsVHlwZSBFeHRlcm5hbFR5cGU7CisgICAgdHlwZWRlZiB0eXBl
bmFtZSBTbG90VHlwZXM8VD46OkV4dGVybmFsVHlwZUJhc2UgRXh0ZXJuYWxUeXBlQmFzZTsKICAg
ICAKLSAgICB0eXBlZGVmIFQqIChEZXByZWNhdGVkUHRyOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7
Ci0gICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBjb25zdCB7IHJldHVybiBtX2Nl
bGwgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7IH0KLQot
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY2VsbDsgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgSlNDZWxsKiBtX2NlbGw7Ci19OwotCi10ZW1wbGF0ZSA8PiBjbGFzcyBEZXByZWNh
dGVkUHRyPFVua25vd24+IHsKLXB1YmxpYzoKLSAgICBEZXByZWNhdGVkUHRyKCkgeyB9Ci0gICAg
RGVwcmVjYXRlZFB0cihKU1ZhbHVlIHZhbHVlKSA6IG1fdmFsdWUodmFsdWUpIHsgfQotICAgIERl
cHJlY2F0ZWRQdHIoSlNDZWxsKiB2YWx1ZSkgOiBtX3ZhbHVlKHZhbHVlKSB7IH0KLSAgICBjb25z
dCBKU1ZhbHVlJiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0gICAgY29uc3QgSlNW
YWx1ZSogb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KLSAgICBjb25zdCBK
U1ZhbHVlKiBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJm1fdmFsdWU7IH0KKyAgICBEZXBy
ZWNhdGVkUHRyKCkgOiBtX3ZhbHVlKCkgeyB9CisgICAgRGVwcmVjYXRlZFB0cihFeHRlcm5hbFR5
cGUgdmFsdWUpIDogbV92YWx1ZShTbG90VHlwZXM8VD46OmNvbnZlcnRUb0Jhc2VUeXBlKHZhbHVl
KSkgeyB9CisgICAgRXh0ZXJuYWxUeXBlIGdldCgpIGNvbnN0IHsgcmV0dXJuIFNsb3RUeXBlczxU
Pjo6Z2V0RnJvbUJhc2VUeXBlKG1fdmFsdWUpOyB9CiAgICAgCi0gICAgSlNWYWx1ZSogc2xvdCgp
IHsgcmV0dXJuICZtX3ZhbHVlOyB9CisgICAgRXh0ZXJuYWxUeXBlQmFzZSogc2xvdCgpIHsgcmV0
dXJuICZtX3ZhbHVlOyB9CiAgICAgCi0gICAgdHlwZWRlZiBKU1ZhbHVlIChEZXByZWNhdGVkUHRy
OjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgdHlwZWRlZiBFeHRlcm5hbFR5cGUgKERlcHJl
Y2F0ZWRQdHI6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKICAgICBvcGVyYXRvciBVbnNwZWNpZmll
ZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPyByZWludGVycHJldF9jYXN0PFVu
c3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7IH0KKyAgICAKICAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CisgICAgY29uc3QgRGVwcmVjYXRlZFB0ciYgb3Bl
cmF0b3I9KEV4dGVybmFsVHlwZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgPSBTbG90
VHlwZXM8VD46OmNvbnZlcnRUb0Jhc2VUeXBlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KICAgICAKLXByaXZhdGU6Ci0gICAgSlNWYWx1ZSBtX3ZhbHVlOworcHJvdGVjdGVk
OgorICAgIEV4dGVybmFsVHlwZUJhc2UgbV92YWx1ZTsKIH07CiAKLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgV3JpdGVCYXJyaWVyQ2hlY2sgewotICAgIHN0YXRpYyBjb25zdCBib29sIElz
SlNWYWx1ZSA9IGZhbHNlOwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdyaXRlQmFycmll
clRyYW5zbGF0b3IgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsKiBXcml0ZUJhcnJpZXJT
dG9yYWdlVHlwZTsKKyAgICBzdGF0aWMgV3JpdGVCYXJyaWVyU3RvcmFnZVR5cGUgY29udmVydFRv
U3RvcmFnZShUKiBjZWxsKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PFdyaXRlQmFycmllclN0
b3JhZ2VUeXBlPihjZWxsKTsgfQorICAgIHN0YXRpYyBUKiBjb252ZXJ0RnJvbVN0b3JhZ2UoV3Jp
dGVCYXJyaWVyU3RvcmFnZVR5cGUgc3RvcmFnZSkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxU
Kj4oc3RvcmFnZSk7IH0KIH07CiAKLXRlbXBsYXRlIDw+IHN0cnVjdCBXcml0ZUJhcnJpZXJDaGVj
azxKU1ZhbHVlPiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgSXNKU1ZhbHVlID0gdHJ1ZTsKLX07
Cit0ZW1wbGF0ZSA8PiBjbGFzcyBXcml0ZUJhcnJpZXJUcmFuc2xhdG9yPFVua25vd24+OwogCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZSB7Cit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgV3JpdGVCYXJyaWVyQmFzZSA6IHB1YmxpYyBTbG90QWNjZXNzb3I8
RGVwcmVjYXRlZFB0cjxUPiwgVD4sIHB1YmxpYyBXcml0ZUJhcnJpZXJUcmFuc2xhdG9yPFQ+IHsK
IHB1YmxpYzoKLSAgICBDT01QSUxFX0FTU0VSVCghV3JpdGVCYXJyaWVyQ2hlY2s8VD46OklzSlNW
YWx1ZSwgV3JpdGVCYXJyaWVyX0pTVmFsdWVfaXNfaW52YWxpZF9fdXNlX3Vua25vd24pOwotICAg
IHZvaWQgc2V0KEpTR2xvYmFsRGF0YSYsIGNvbnN0IEpTQ2VsbCosIFQqIHZhbHVlKSB7IHRoaXMt
Pm1fY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SlNDZWxsKj4odmFsdWUpOyB9CisgICAgdHlwZWRl
ZiB0eXBlbmFtZSBTbG90VHlwZXM8VD46OkV4dGVybmFsVHlwZSBFeHRlcm5hbFR5cGU7CisgICAg
dHlwZWRlZiB0eXBlbmFtZSBTbG90VHlwZXM8VD46OkV4dGVybmFsVHlwZUJhc2UgRXh0ZXJuYWxU
eXBlQmFzZTsKKyAgICB0eXBlZGVmIHR5cGVuYW1lIFdyaXRlQmFycmllclRyYW5zbGF0b3I8VD46
OldyaXRlQmFycmllclN0b3JhZ2VUeXBlIFN0b3JhZ2VUeXBlOworCisgICAgdm9pZCBzZXQoSlNH
bG9iYWxEYXRhJiwgY29uc3QgSlNDZWxsKiwgRXh0ZXJuYWxUeXBlIHZhbHVlKSB7IHRoaXMtPm1f
dmFsdWUgPSBXcml0ZUJhcnJpZXJUcmFuc2xhdG9yPFQ+Ojpjb252ZXJ0VG9TdG9yYWdlKHZhbHVl
KTsgfQogICAgIAotICAgIFQqIGdldCgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
VCo+KG1fY2VsbCk7IH0KLSAgICBUKiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxUKj4obV9jZWxsKTsgfQotICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiBz
dGF0aWNfY2FzdDxUKj4obV9jZWxsKTsgfQotICAgIHZvaWQgY2xlYXIoKSB7IG1fY2VsbCA9IDA7
IH0KKyAgICBFeHRlcm5hbFR5cGUgZ2V0KCkgY29uc3QgeyByZXR1cm4gV3JpdGVCYXJyaWVyVHJh
bnNsYXRvcjxUPjo6Y29udmVydEZyb21TdG9yYWdlKG1fdmFsdWUpOyB9CisgICAgdm9pZCBjbGVh
cigpIHsgbV92YWx1ZSA9IDA7IH0KICAgICAKLSAgICBKU0NlbGwqKiBzbG90KCkgeyByZXR1cm4g
Jm1fY2VsbDsgfQorICAgIEV4dGVybmFsVHlwZUJhc2UqIHNsb3QoKQorICAgIHsKKyAgICAgICAg
dW5pb24geworICAgICAgICAgICAgU3RvcmFnZVR5cGUqIGludHlwZTsKKyAgICAgICAgICAgIEV4
dGVybmFsVHlwZUJhc2UqIG91dHR5cGU7CisgICAgICAgIH0gdTsKKyAgICAgICAgdS5pbnR5cGUg
PSAmbV92YWx1ZTsKKyAgICAgICAgcmV0dXJuIHUub3V0dHlwZTsKKyAgICB9CiAgICAgCi0gICAg
dHlwZWRlZiBUKiAoV3JpdGVCYXJyaWVyQmFzZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOwotICAg
IG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUqKCkgY29uc3QgeyByZXR1cm4gbV9jZWxsID8g
cmVpbnRlcnByZXRfY2FzdDxVbnNwZWNpZmllZEJvb2xUeXBlKj4oMSkgOiAwOyB9CisgICAgdHlw
ZWRlZiBFeHRlcm5hbFR5cGUgKFdyaXRlQmFycmllckJhc2U6OipVbnNwZWNpZmllZEJvb2xUeXBl
KTsKKyAgICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKigpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWUgPyByZWludGVycHJldF9jYXN0PFVuc3BlY2lmaWVkQm9vbFR5cGUqPigxKSA6IDA7IH0K
ICAgICAKLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NlbGw7IH0KKyAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX3ZhbHVlOyB9CiAKLSAgICB2b2lk
IHNldFdpdGhvdXRXcml0ZUJhcnJpZXIoVCogdmFsdWUpIHsgdGhpcy0+bV9jZWxsID0gcmVpbnRl
cnByZXRfY2FzdDxKU0NlbGwqPih2YWx1ZSk7IH0KKyAgICB2b2lkIHNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoRXh0ZXJuYWxUeXBlIHZhbHVlKSB7IHRoaXMtPm1fdmFsdWUgPSBXcml0ZUJhcnJpZXJU
cmFuc2xhdG9yPFQ+Ojpjb252ZXJ0VG9TdG9yYWdlKHZhbHVlKTsgfQogCiBwcm90ZWN0ZWQ6Ci0g
ICAgSlNDZWxsKiBtX2NlbGw7CisgICAgU3RvcmFnZVR5cGUgbV92YWx1ZTsKIH07CiAKLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXcml0ZUJhcnJpZXIgOiBwdWJsaWMgV3JpdGVCYXJyaWVy
QmFzZTxUPiB7Cit0ZW1wbGF0ZSA8PiBjbGFzcyBXcml0ZUJhcnJpZXJUcmFuc2xhdG9yPFVua25v
d24+IHsKIHB1YmxpYzoKLSAgICBXcml0ZUJhcnJpZXIoKSB7IHRoaXMtPm1fY2VsbCA9IDA7IH0K
LSAgICBXcml0ZUJhcnJpZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwq
IG93bmVyLCBUKiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMtPnNldChnbG9iYWxEYXRhLCBv
d25lciwgdmFsdWUpOwotICAgIH0KLQorICAgIHZvaWQgc2V0VW5kZWZpbmVkKCkgeyBzdGF0aWNf
Y2FzdDxXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kj4odGhpcyktPnNldFdpdGhvdXRXcml0ZUJh
cnJpZXIoanNVbmRlZmluZWQoKSk7IH0KKyAgICB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIFdyaXRl
QmFycmllclN0b3JhZ2VUeXBlOworICAgIHN0YXRpYyBXcml0ZUJhcnJpZXJTdG9yYWdlVHlwZSBj
b252ZXJ0VG9TdG9yYWdlKEpTVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2
YWx1ZSk7IH0KKyAgICBzdGF0aWMgSlNWYWx1ZSBjb252ZXJ0RnJvbVN0b3JhZ2UoV3JpdGVCYXJy
aWVyU3RvcmFnZVR5cGUgc3RvcmFnZSkgeyByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHN0b3JhZ2Up
OyB9CiB9OwogCi10ZW1wbGF0ZSA8PiBjbGFzcyBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+IHsK
LXB1YmxpYzoKLSAgICB2b2lkIHNldChKU0dsb2JhbERhdGEmLCBjb25zdCBKU0NlbGwqLCBKU1Zh
bHVlIHZhbHVlKSB7IG1fdmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOyB9Ci0gICAgdm9p
ZCBzZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUgdmFsdWUpIHsgbV92YWx1ZSA9IEpTVmFs
dWU6OmVuY29kZSh2YWx1ZSk7IH0KLSAgICBKU1ZhbHVlIGdldCgpIGNvbnN0IHsgcmV0dXJuIEpT
VmFsdWU6OmRlY29kZShtX3ZhbHVlKTsgfQotICAgIHZvaWQgY2xlYXIoKSB7IG1fdmFsdWUgPSBK
U1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsgfQotICAgIHZvaWQgc2V0VW5kZWZpbmVkKCkgeyBt
X3ZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOyB9Ci0gICAgYm9vbCBpc051
bWJlcigpIGNvbnN0IHsgcmV0dXJuIGdldCgpLmlzTnVtYmVyKCk7IH0KLSAgICBib29sIGlzR2V0
dGVyU2V0dGVyKCkgY29uc3QgeyByZXR1cm4gZ2V0KCkuaXNHZXR0ZXJTZXR0ZXIoKTsgfQotICAg
IAotICAgIEpTVmFsdWUqIHNsb3QoKQotICAgIHsgCi0gICAgICAgIHVuaW9uIHsKLSAgICAgICAg
ICAgIEVuY29kZWRKU1ZhbHVlKiB2OwotICAgICAgICAgICAgSlNWYWx1ZSogc2xvdDsKLSAgICAg
ICAgfSB1OwotICAgICAgICB1LnYgPSAmbV92YWx1ZTsKLSAgICAgICAgcmV0dXJuIHUuc2xvdDsK
LSAgICB9Ci0gICAgCi0gICAgdHlwZWRlZiBKU1ZhbHVlIChXcml0ZUJhcnJpZXJCYXNlOjoqVW5z
cGVjaWZpZWRCb29sVHlwZSk7Ci0gICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSooKSBj
b25zdCB7IHJldHVybiBnZXQoKSA/IHJlaW50ZXJwcmV0X2Nhc3Q8VW5zcGVjaWZpZWRCb29sVHlw
ZSo+KDEpIDogMDsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWdldCgp
OyB9IAotICAgIAotcHJvdGVjdGVkOgotICAgIEVuY29kZWRKU1ZhbHVlIG1fdmFsdWU7Ci19Owot
Ci10ZW1wbGF0ZSA8PiBjbGFzcyBXcml0ZUJhcnJpZXI8VW5rbm93bj4gOiBwdWJsaWMgV3JpdGVC
YXJyaWVyQmFzZTxVbmtub3duPiB7Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV3JpdGVC
YXJyaWVyIDogcHVibGljIFdyaXRlQmFycmllckJhc2U8VD4gewogcHVibGljOgotICAgIFdyaXRl
QmFycmllcigpIHsgbV92YWx1ZSA9IEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOyB9Ci0gICAg
V3JpdGVCYXJyaWVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgSlNDZWxsKiBvd25l
ciwgSlNWYWx1ZSB2YWx1ZSkKKyAgICBXcml0ZUJhcnJpZXIoKSB7IHRoaXMtPmNsZWFyKCk7IH0K
KyAgICBXcml0ZUJhcnJpZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBKU0NlbGwq
IG93bmVyLCB0eXBlbmFtZSBXcml0ZUJhcnJpZXJCYXNlPFQ+OjpFeHRlcm5hbFR5cGUgdmFsdWUp
CiAgICAgewogICAgICAgICB0aGlzLT5zZXQoZ2xvYmFsRGF0YSwgb3duZXIsIHZhbHVlKTsKICAg
ICB9CisKIH07CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IERlcHJlY2F0ZWRQdHI8VT4mIGxocywgY29uc3QgRGVwcmVjYXRl
ZFB0cjxWPiYgcmhzKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>