From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============1493412313014006422==" MIME-Version: 1.0 From: Claire Chang To: kbuild-all@lists.01.org Subject: Re: [chrome-os:chromeos-5.4 180/242] drivers/net/wireless/mediatek/mt76/tx.c:504:7: error: 'q' undeclared; did you mean 'sq'? Date: Mon, 19 Apr 2021 11:36:18 +0800 Message-ID: In-Reply-To: List-Id: --===============1493412313014006422== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable IIUC, this is caused by the patch order and should be fixed already. Sorry for the inconvenience. On Sat, Apr 17, 2021 at 11:52 AM Nicolas Boichat wrote: > +Claire Chang > > On Sat, Apr 17, 2021 at 11:16 AM kernel test robot wrot= e: > >> tree: https://chromium.googlesource.com/chromiumos/third_party/kernel >> chromeos-5.4 >> head: 03c601082f2f279deba7e2b6923e735273c65587 >> commit: 0d7e331a785cdb87c2b4005d226bf8a22f7fd87e [180/242] UPSTREAM: >> mt76: rely on AQL for burst size limits on tx queueing >> config: nios2-allyesconfig (attached as .config) >> compiler: nios2-linux-gcc (GCC) 9.3.0 >> reproduce (this is a W=3D1 build): >> wget >> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross >> -O ~/bin/make.cross >> chmod +x ~/bin/make.cross >> git remote add chrome-os >> https://chromium.googlesource.com/chromiumos/third_party/kernel >> git fetch --no-tags chrome-os chromeos-5.4 >> git checkout 0d7e331a785cdb87c2b4005d226bf8a22f7fd87e >> # save the attached .config to linux build tree >> COMPILER_INSTALL_PATH=3D$HOME/0day COMPILER=3Dgcc-9.3.0 make.cro= ss >> W=3D1 ARCH=3Dnios2 >> >> If you fix the issue, kindly add following tag as appropriate >> Reported-by: kernel test robot >> >> Note: the chrome-os/chromeos-5.4 HEAD >> 03c601082f2f279deba7e2b6923e735273c65587 builds fine. >> It only hurts bisectibility. >> >> All errors (new ones prefixed by >>): >> >> drivers/net/wireless/mediatek/mt76/tx.c: In function >> 'mt76_txq_send_burst': >> >> drivers/net/wireless/mediatek/mt76/tx.c:504:7: error: 'q' undeclared >> (first use in this function); did you mean 'sq'? >> 504 | if (q->queued + MT_TXQ_FREE_THR >=3D q->ndesc) >> | ^ >> | sq >> drivers/net/wireless/mediatek/mt76/tx.c:504:7: note: each undeclared >> identifier is reported only once for each function it appears in >> drivers/net/wireless/mediatek/mt76/tx.c: In function >> 'mt76_txq_schedule_list': >> drivers/net/wireless/mediatek/mt76/tx.c:547:7: error: 'q' undeclared >> (first use in this function); did you mean 'sq'? >> 547 | if (q->queued + MT_TXQ_FREE_THR >=3D q->ndesc) >> | ^ >> | sq >> >> >> vim +504 drivers/net/wireless/mediatek/mt76/tx.c >> >> 461 >> 462 static int >> 463 mt76_txq_send_burst(struct mt76_phy *phy, struct mt76_sw_queue >> *sq, >> 464 struct mt76_txq *mtxq) >> 465 { >> 466 struct mt76_dev *dev =3D phy->dev; >> 467 struct ieee80211_txq *txq =3D mtxq_to_txq(mtxq); >> 468 enum mt76_txq_id qid =3D mt76_txq_get_qid(txq); >> 469 struct mt76_wcid *wcid =3D mtxq->wcid; >> 470 struct mt76_queue *hwq =3D sq->q; >> 471 struct ieee80211_tx_info *info; >> 472 struct sk_buff *skb; >> 473 int n_frames =3D 1; >> 474 bool stop =3D false; >> 475 int idx; >> 476 >> 477 if (test_bit(MT_WCID_FLAG_PS, &wcid->flags)) >> 478 return 0; >> 479 >> 480 if (atomic_read(&wcid->non_aql_packets) >=3D >> MT_MAX_NON_AQL_PKT) >> 481 return 0; >> 482 >> 483 skb =3D mt76_txq_dequeue(phy, mtxq, false); >> 484 if (!skb) >> 485 return 0; >> 486 >> 487 info =3D IEEE80211_SKB_CB(skb); >> 488 if (!(wcid->tx_info & MT_WCID_TX_INFO_SET)) >> 489 ieee80211_get_tx_rates(txq->vif, txq->sta, skb, >> 490 info->control.rates, 1); >> 491 >> 492 idx =3D __mt76_tx_queue_skb(dev, qid, skb, wcid, txq->st= a, >> &stop); >> 493 if (idx < 0) >> 494 return idx; >> 495 >> 496 do { >> 497 if (test_bit(MT76_STATE_PM, &phy->state) || >> 498 test_bit(MT76_RESET, &phy->state)) >> 499 return -EBUSY; >> 500 >> 501 if (stop) >> 502 break; >> 503 >> > 504 if (q->queued + MT_TXQ_FREE_THR >=3D q->ndesc) >> 505 break; >> 506 >> 507 skb =3D mt76_txq_dequeue(phy, mtxq, false); >> 508 if (!skb) >> 509 break; >> 510 >> 511 info =3D IEEE80211_SKB_CB(skb); >> 512 if (!(wcid->tx_info & MT_WCID_TX_INFO_SET)) >> 513 ieee80211_get_tx_rates(txq->vif, >> txq->sta, skb, >> 514 >> info->control.rates, 1); >> 515 >> 516 idx =3D __mt76_tx_queue_skb(dev, qid, skb, wcid, >> txq->sta, &stop); >> 517 if (idx < 0) >> 518 break; >> 519 >> 520 n_frames++; >> 521 } while (1); >> 522 >> 523 dev->queue_ops->kick(dev, hwq); >> 524 >> 525 return n_frames; >> 526 } >> 527 >> >> --- >> 0-DAY CI Kernel Test Service, Intel Corporation >> https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org >> >> -- >> You received this message because you are subscribed to the Google Groups >> "cros-kernel-buildreports" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to cros-kernel-buildreports+unsubscribe(a)googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/cros-kernel-buildreports/202104171103.= baCz56rh-lkp%40intel.com >> . >> > --===============1493412313014006422== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.htm" PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+SUlVQywgdGhpcyBpcyBjYXVzZWQgYnkgdGhl IHBhdGNoIG9yZGVyIGFuZCBzaG91bGQgYmUgZml4ZWQgYWxyZWFkeS4gU29ycnkgZm9yIHRoZcKg aW5jb252ZW5pZW5jZS48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGly PSJsdHIiIGNsYXNzPSJnbWFpbF9hdHRyIj5PbiBTYXQsIEFwciAxNywgMjAyMSBhdCAxMTo1MiBB TSBOaWNvbGFzIEJvaWNoYXQgJmx0OzxhIGhyZWY9Im1haWx0bzpkcmlua2NhdEBnb29nbGUuY29t Ij5kcmlua2NhdEBnb29nbGUuY29tPC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3Rl IGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3Jk ZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2 IGRpcj0ibHRyIj48ZGl2IGRpcj0ibHRyIj48YSBjbGFzcz0iZ21haWxfcGx1c3JlcGx5IiBpZD0i Z21haWwtbV82NzI4MTQzODgzNzkwMzUyNzgxcGx1c1JlcGx5Q2hpcC0wIiBocmVmPSJtYWlsdG86 dGllbnR6dUBnb29nbGUuY29tIiB0YXJnZXQ9Il9ibGFuayI+K0NsYWlyZSBDaGFuZzwvYT7CoDxi cj48L2Rpdj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiIGNsYXNz PSJnbWFpbF9hdHRyIj5PbiBTYXQsIEFwciAxNywgMjAyMSBhdCAxMToxNiBBTSBrZXJuZWwgdGVz dCByb2JvdCAmbHQ7PGEgaHJlZj0ibWFpbHRvOmxrcEBpbnRlbC5jb20iIHRhcmdldD0iX2JsYW5r Ij5sa3BAaW50ZWwuY29tPC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNz PSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVm dDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5nLWxlZnQ6MWV4Ij50cmVlOsKgIMKg PGEgaHJlZj0iaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtb3MvdGhp cmRfcGFydHkva2VybmVsIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRwczov L2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW1vcy90aGlyZF9wYXJ0eS9rZXJuZWw8 L2E+IGNocm9tZW9zLTUuNDxicj4KaGVhZDrCoCDCoDAzYzYwMTA4MmYyZjI3OWRlYmE3ZTJiNjky M2U3MzUyNzNjNjU1ODc8YnI+CmNvbW1pdDogMGQ3ZTMzMWE3ODVjZGI4N2MyYjQwMDVkMjI2YmY4 YTIyZjdmZDg3ZSBbMTgwLzI0Ml0gVVBTVFJFQU06IG10NzY6IHJlbHkgb24gQVFMIGZvciBidXJz dCBzaXplIGxpbWl0cyBvbiB0eCBxdWV1ZWluZzxicj4KY29uZmlnOiBuaW9zMi1hbGx5ZXNjb25m aWcgKGF0dGFjaGVkIGFzIC5jb25maWcpPGJyPgpjb21waWxlcjogbmlvczItbGludXgtZ2NjIChH Q0MpIDkuMy4wPGJyPgpyZXByb2R1Y2UgKHRoaXMgaXMgYSBXPTEgYnVpbGQpOjxicj4KwqAgwqAg wqAgwqAgd2dldCA8YSBocmVmPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaW50 ZWwvbGtwLXRlc3RzL21hc3Rlci9zYmluL21ha2UuY3Jvc3MiIHJlbD0ibm9yZWZlcnJlciIgdGFy Z2V0PSJfYmxhbmsiPmh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9pbnRlbC9sa3At dGVzdHMvbWFzdGVyL3NiaW4vbWFrZS5jcm9zczwvYT4gLU8gfi9iaW4vbWFrZS5jcm9zczxicj4K wqAgwqAgwqAgwqAgY2htb2QgK3ggfi9iaW4vbWFrZS5jcm9zczxicj4KwqAgwqAgwqAgwqAgZ2l0 IHJlbW90ZSBhZGQgY2hyb21lLW9zIDxhIGhyZWY9Imh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291 cmNlLmNvbS9jaHJvbWl1bW9zL3RoaXJkX3BhcnR5L2tlcm5lbCIgcmVsPSJub3JlZmVycmVyIiB0 YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVt b3MvdGhpcmRfcGFydHkva2VybmVsPC9hPjxicj4KwqAgwqAgwqAgwqAgZ2l0IGZldGNoIC0tbm8t dGFncyBjaHJvbWUtb3MgY2hyb21lb3MtNS40PGJyPgrCoCDCoCDCoCDCoCBnaXQgY2hlY2tvdXQg MGQ3ZTMzMWE3ODVjZGI4N2MyYjQwMDVkMjI2YmY4YTIyZjdmZDg3ZTxicj4KwqAgwqAgwqAgwqAg IyBzYXZlIHRoZSBhdHRhY2hlZCAuY29uZmlnIHRvIGxpbnV4IGJ1aWxkIHRyZWU8YnI+CsKgIMKg IMKgIMKgIENPTVBJTEVSX0lOU1RBTExfUEFUSD0kSE9NRS8wZGF5IENPTVBJTEVSPWdjYy05LjMu MCBtYWtlLmNyb3NzIFc9MSBBUkNIPW5pb3MyIDxicj4KPGJyPgpJZiB5b3UgZml4IHRoZSBpc3N1 ZSwga2luZGx5IGFkZCBmb2xsb3dpbmcgdGFnIGFzIGFwcHJvcHJpYXRlPGJyPgpSZXBvcnRlZC1i eToga2VybmVsIHRlc3Qgcm9ib3QgJmx0OzxhIGhyZWY9Im1haWx0bzpsa3BAaW50ZWwuY29tIiB0 YXJnZXQ9Il9ibGFuayI+bGtwQGludGVsLmNvbTwvYT4mZ3Q7PGJyPgo8YnI+Ck5vdGU6IHRoZSBj aHJvbWUtb3MvY2hyb21lb3MtNS40IEhFQUQgMDNjNjAxMDgyZjJmMjc5ZGViYTdlMmI2OTIzZTcz NTI3M2M2NTU4NyBidWlsZHMgZmluZS48YnI+CsKgIMKgIMKgIEl0IG9ubHkgaHVydHMgYmlzZWN0 aWJpbGl0eS48YnI+Cjxicj4KQWxsIGVycm9ycyAobmV3IG9uZXMgcHJlZml4ZWQgYnkgJmd0OyZn dDspOjxicj4KPGJyPgrCoCDCoGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHgu YzogSW4gZnVuY3Rpb24gJiMzOTttdDc2X3R4cV9zZW5kX2J1cnN0JiMzOTs6PGJyPgomZ3Q7Jmd0 OyBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L3R4LmM6NTA0Ojc6IGVycm9yOiAm IzM5O3EmIzM5OyB1bmRlY2xhcmVkIChmaXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbik7IGRpZCB5 b3UgbWVhbiAmIzM5O3NxJiMzOTs/PGJyPgrCoCDCoCDCoDUwNCB8wqAgwqBpZiAocS0mZ3Q7cXVl dWVkICsgTVRfVFhRX0ZSRUVfVEhSICZndDs9IHEtJmd0O25kZXNjKTxicj4KwqAgwqAgwqAgwqAg wqB8wqAgwqAgwqAgwqBePGJyPgrCoCDCoCDCoCDCoCDCoHzCoCDCoCDCoCDCoHNxPGJyPgrCoCDC oGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvdHguYzo1MDQ6Nzogbm90ZTogZWFj aCB1bmRlY2xhcmVkIGlkZW50aWZpZXIgaXMgcmVwb3J0ZWQgb25seSBvbmNlIGZvciBlYWNoIGZ1 bmN0aW9uIGl0IGFwcGVhcnMgaW48YnI+CsKgIMKgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0 ZWsvbXQ3Ni90eC5jOiBJbiBmdW5jdGlvbiAmIzM5O210NzZfdHhxX3NjaGVkdWxlX2xpc3QmIzM5 Ozo8YnI+CsKgIMKgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni90eC5jOjU0Nzo3 OiBlcnJvcjogJiMzOTtxJiMzOTsgdW5kZWNsYXJlZCAoZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rp b24pOyBkaWQgeW91IG1lYW4gJiMzOTtzcSYjMzk7Pzxicj4KwqAgwqAgwqA1NDcgfMKgIMKgaWYg KHEtJmd0O3F1ZXVlZCArIE1UX1RYUV9GUkVFX1RIUiAmZ3Q7PSBxLSZndDtuZGVzYyk8YnI+CsKg IMKgIMKgIMKgIMKgfMKgIMKgIMKgIMKgXjxicj4KwqAgwqAgwqAgwqAgwqB8wqAgwqAgwqAgwqBz cTxicj4KPGJyPgo8YnI+CnZpbSArNTA0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210 NzYvdHguYzxicj4KPGJyPgrCoCDCoDQ2McKgIDxicj4KwqAgwqA0NjLCoCBzdGF0aWMgaW50PGJy PgrCoCDCoDQ2M8KgIG10NzZfdHhxX3NlbmRfYnVyc3Qoc3RydWN0IG10NzZfcGh5ICpwaHksIHN0 cnVjdCBtdDc2X3N3X3F1ZXVlICpzcSw8YnI+CsKgIMKgNDY0wqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgc3RydWN0IG10NzZfdHhxICptdHhxKTxicj4KwqAgwqA0NjXCoCB7PGJyPgrC oCDCoDQ2NsKgIMKgIMKgIMKgIMKgIHN0cnVjdCBtdDc2X2RldiAqZGV2ID0gcGh5LSZndDtkZXY7 PGJyPgrCoCDCoDQ2N8KgIMKgIMKgIMKgIMKgIHN0cnVjdCBpZWVlODAyMTFfdHhxICp0eHEgPSBt dHhxX3RvX3R4cShtdHhxKTs8YnI+CsKgIMKgNDY4wqAgwqAgwqAgwqAgwqAgZW51bSBtdDc2X3R4 cV9pZCBxaWQgPSBtdDc2X3R4cV9nZXRfcWlkKHR4cSk7PGJyPgrCoCDCoDQ2OcKgIMKgIMKgIMKg IMKgIHN0cnVjdCBtdDc2X3djaWQgKndjaWQgPSBtdHhxLSZndDt3Y2lkOzxicj4KwqAgwqA0NzDC oCDCoCDCoCDCoCDCoCBzdHJ1Y3QgbXQ3Nl9xdWV1ZSAqaHdxID0gc3EtJmd0O3E7PGJyPgrCoCDC oDQ3McKgIMKgIMKgIMKgIMKgIHN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzs8YnI+CsKg IMKgNDcywqAgwqAgwqAgwqAgwqAgc3RydWN0IHNrX2J1ZmYgKnNrYjs8YnI+CsKgIMKgNDczwqAg wqAgwqAgwqAgwqAgaW50IG5fZnJhbWVzID0gMTs8YnI+CsKgIMKgNDc0wqAgwqAgwqAgwqAgwqAg Ym9vbCBzdG9wID0gZmFsc2U7PGJyPgrCoCDCoDQ3NcKgIMKgIMKgIMKgIMKgIGludCBpZHg7PGJy PgrCoCDCoDQ3NsKgIDxicj4KwqAgwqA0NzfCoCDCoCDCoCDCoCDCoCBpZiAodGVzdF9iaXQoTVRf V0NJRF9GTEFHX1BTLCAmYW1wO3djaWQtJmd0O2ZsYWdzKSk8YnI+CsKgIMKgNDc4wqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIDA7PGJyPgrCoCDCoDQ3OcKgIDxicj4KwqAgwqA0ODDC oCDCoCDCoCDCoCDCoCBpZiAoYXRvbWljX3JlYWQoJmFtcDt3Y2lkLSZndDtub25fYXFsX3BhY2tl dHMpICZndDs9IE1UX01BWF9OT05fQVFMX1BLVCk8YnI+CsKgIMKgNDgxwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgcmV0dXJuIDA7PGJyPgrCoCDCoDQ4MsKgIDxicj4KwqAgwqA0ODPCoCDCoCDC oCDCoCDCoCBza2IgPSBtdDc2X3R4cV9kZXF1ZXVlKHBoeSwgbXR4cSwgZmFsc2UpOzxicj4KwqAg wqA0ODTCoCDCoCDCoCDCoCDCoCBpZiAoIXNrYik8YnI+CsKgIMKgNDg1wqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgcmV0dXJuIDA7PGJyPgrCoCDCoDQ4NsKgIDxicj4KwqAgwqA0ODfCoCDCoCDC oCDCoCDCoCBpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOzxicj4KwqAgwqA0ODjCoCDCoCDC oCDCoCDCoCBpZiAoISh3Y2lkLSZndDt0eF9pbmZvICZhbXA7IE1UX1dDSURfVFhfSU5GT19TRVQp KTxicj4KwqAgwqA0ODnCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZWVlODAyMTFfZ2V0X3R4 X3JhdGVzKHR4cS0mZ3Q7dmlmLCB0eHEtJmd0O3N0YSwgc2tiLDxicj4KwqAgwqA0OTDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlu Zm8tJmd0O2NvbnRyb2wucmF0ZXMsIDEpOzxicj4KwqAgwqA0OTHCoCA8YnI+CsKgIMKgNDkywqAg wqAgwqAgwqAgwqAgaWR4ID0gX19tdDc2X3R4X3F1ZXVlX3NrYihkZXYsIHFpZCwgc2tiLCB3Y2lk LCB0eHEtJmd0O3N0YSwgJmFtcDtzdG9wKTs8YnI+CsKgIMKgNDkzwqAgwqAgwqAgwqAgwqAgaWYg KGlkeCAmbHQ7IDApPGJyPgrCoCDCoDQ5NMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVy biBpZHg7PGJyPgrCoCDCoDQ5NcKgIDxicj4KwqAgwqA0OTbCoCDCoCDCoCDCoCDCoCBkbyB7PGJy PgrCoCDCoDQ5N8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0ZXN0X2JpdChNVDc2X1NU QVRFX1BNLCAmYW1wO3BoeS0mZ3Q7c3RhdGUpIHx8PGJyPgrCoCDCoDQ5OMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHRlc3RfYml0KE1UNzZfUkVTRVQsICZhbXA7cGh5LSZndDtzdGF0 ZSkpPGJyPgrCoCDCoDQ5OcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJl dHVybiAtRUJVU1k7PGJyPgrCoCDCoDUwMMKgIDxicj4KwqAgwqA1MDHCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBpZiAoc3RvcCk8YnI+CsKgIMKgNTAywqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgYnJlYWs7PGJyPgrCoCDCoDUwM8KgIDxicj4KwqAmZ3Q7IDUwNMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChxLSZndDtxdWV1ZWQgKyBNVF9UWFFfRlJFRV9USFIg Jmd0Oz0gcS0mZ3Q7bmRlc2MpPGJyPgrCoCDCoDUwNcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGJyZWFrOzxicj4KwqAgwqA1MDbCoCA8YnI+CsKgIMKgNTA3wqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgc2tiID0gbXQ3Nl90eHFfZGVxdWV1ZShwaHksIG10eHEsIGZhbHNl KTs8YnI+CsKgIMKgNTA4wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKCFza2IpPGJyPgrC oCDCoDUwOcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJyZWFrOzxicj4K wqAgwqA1MTDCoCA8YnI+CsKgIMKgNTExwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW5mbyA9 IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTs8YnI+CsKgIMKgNTEywqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgaWYgKCEod2NpZC0mZ3Q7dHhfaW5mbyAmYW1wOyBNVF9XQ0lEX1RYX0lORk9fU0VUKSk8 YnI+CsKgIMKgNTEzwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWVlZTgw MjExX2dldF90eF9yYXRlcyh0eHEtJmd0O3ZpZiwgdHhxLSZndDtzdGEsIHNrYiw8YnI+CsKgIMKg NTE0wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBpbmZvLSZndDtjb250cm9sLnJhdGVzLCAxKTs8YnI+CsKgIMKg NTE1wqAgPGJyPgrCoCDCoDUxNsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlkeCA9IF9fbXQ3 Nl90eF9xdWV1ZV9za2IoZGV2LCBxaWQsIHNrYiwgd2NpZCwgdHhxLSZndDtzdGEsICZhbXA7c3Rv cCk7PGJyPgrCoCDCoDUxN8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChpZHggJmx0OyAw KTxicj4KwqAgwqA1MTjCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVh azs8YnI+CsKgIMKgNTE5wqAgPGJyPgrCoCDCoDUyMMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IG5fZnJhbWVzKys7PGJyPgrCoCDCoDUyMcKgIMKgIMKgIMKgIMKgIH0gd2hpbGUgKDEpOzxicj4K wqAgwqA1MjLCoCA8YnI+CsKgIMKgNTIzwqAgwqAgwqAgwqAgwqAgZGV2LSZndDtxdWV1ZV9vcHMt Jmd0O2tpY2soZGV2LCBod3EpOzxicj4KwqAgwqA1MjTCoCA8YnI+CsKgIMKgNTI1wqAgwqAgwqAg wqAgwqAgcmV0dXJuIG5fZnJhbWVzOzxicj4KwqAgwqA1MjbCoCB9PGJyPgrCoCDCoDUyN8KgIDxi cj4KPGJyPgotLS08YnI+CjAtREFZIENJIEtlcm5lbCBUZXN0IFNlcnZpY2UsIEludGVsIENvcnBv cmF0aW9uPGJyPgo8YSBocmVmPSJodHRwczovL2xpc3RzLjAxLm9yZy9oeXBlcmtpdHR5L2xpc3Qv a2J1aWxkLWFsbEBsaXN0cy4wMS5vcmciIHJlbD0ibm9yZWZlcnJlciIgdGFyZ2V0PSJfYmxhbmsi Pmh0dHBzOi8vbGlzdHMuMDEub3JnL2h5cGVya2l0dHkvbGlzdC9rYnVpbGQtYWxsQGxpc3RzLjAx Lm9yZzwvYT48YnI+Cjxicj4KLS0gPGJyPgpZb3UgcmVjZWl2ZWQgdGhpcyBtZXNzYWdlIGJlY2F1 c2UgeW91IGFyZSBzdWJzY3JpYmVkIHRvIHRoZSBHb29nbGUgR3JvdXBzICZxdW90O2Nyb3Mta2Vy bmVsLWJ1aWxkcmVwb3J0cyZxdW90OyBncm91cC48YnI+ClRvIHVuc3Vic2NyaWJlIGZyb20gdGhp cyBncm91cCBhbmQgc3RvcCByZWNlaXZpbmcgZW1haWxzIGZyb20gaXQsIHNlbmQgYW4gZW1haWwg dG8gPGEgaHJlZj0ibWFpbHRvOmNyb3Mta2VybmVsLWJ1aWxkcmVwb3J0cyUyQnVuc3Vic2NyaWJl QGdvb2dsZWdyb3Vwcy5jb20iIHRhcmdldD0iX2JsYW5rIj5jcm9zLWtlcm5lbC1idWlsZHJlcG9y dHMrdW5zdWJzY3JpYmVAZ29vZ2xlZ3JvdXBzLmNvbTwvYT4uPGJyPgpUbyB2aWV3IHRoaXMgZGlz Y3Vzc2lvbiBvbiB0aGUgd2ViIHZpc2l0IDxhIGhyZWY9Imh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5j b20vZC9tc2dpZC9jcm9zLWtlcm5lbC1idWlsZHJlcG9ydHMvMjAyMTA0MTcxMTAzLmJhQ3o1NnJo LWxrcCU0MGludGVsLmNvbSIgcmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6 Ly9ncm91cHMuZ29vZ2xlLmNvbS9kL21zZ2lkL2Nyb3Mta2VybmVsLWJ1aWxkcmVwb3J0cy8yMDIx MDQxNzExMDMuYmFDejU2cmgtbGtwJTQwaW50ZWwuY29tPC9hPi48YnI+CjwvYmxvY2txdW90ZT48 L2Rpdj48L2Rpdj4KPC9ibG9ja3F1b3RlPjwvZGl2PjwvZGl2Pgo= --===============1493412313014006422==--