Saturday, December 22, 2012

jquery + css sample source log–pkbookshelf

from one unnamed source, i changed from it.

image

your can see it demo fromhttp://cdn.pk17s.cn/s/htm/sample/jquery.pkBookShelf/index.htm

here is source:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>

<meta http-equiv="Author" content="liandeliang@yahoo.com.cn" />
<meta http-equiv="Copyright" content="pkrss.com" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="robots" content="all" />
<meta name="Distribution" content="global" />
<meta http-equiv="Cache-Control" content="max-age=3000"/>
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<link rel="shortcut icon" href="/favicon.ico" type="image/x-icon" />
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>pkrss - 图片魔法书 </title>
<style type="text/css">
body{
padding:0;
margin:0;
}

/** bookshelf **/
.pkbookshelf:before,.pkbookshelf:after {
content: ".";
display:block;
width: 100%;
height: 25px;
background: #620;
margin: 0;
background: -moz-linear-gradient(90deg, #620, #950 20%, #620 30%);
background: -webkit-gradient(linear, 0 100%, 0 0 , from(#620), color-stop(20%, #950), color-stop(30%, #620));
-o-box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.7);
-moz-box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.7);
-webkit-box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.7);
box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.7);
}
.pkbookshelf,.pkbookshelfInner{
width: 100%;
}
.pkbookshelfInner{
border-spacing:0;
background: #270202;
}
.pkbookshelf,.pkbookshelfInner,.pkbookshelfInner tbody,.pkbookshelfInner tr,.pkbookshelfInner tr td {
margin: 0;
padding: 0;
}
.pkbookshelfInner tr td.pkbookshelfInnerVSide {
content: ".";
width: 25px;
height: 100%;
background: #620;
-o-box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.7);
-moz-box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.7);
-webkit-box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.7);
box-shadow: 0px 10px 20px rgba(0, 0, 0, 0.7);
}

/** books **/
.pkbookshelfInnerBody_book {
display: inline-block;
float: left;
}
.pkbookshelfInnerBody_book .pkbookshelfInnerBody_thumbnail {
text-align: center;
width: 138px;
margin: 20px 20px 0 20px;
}
.pkbookshelfInnerBody_book:hover .pkbookshelfInnerBody_thumbnail {
-webkit-transform: scale(1.24, 1.24);
-moz-transform: scale(1.24, 1.24);
-o-transform: scale(1.24, 1.24);
-ms-transform: scale(1.24, 1.24);
transform: scale(1.24, 1.24);
-webkit-transition: -webkit-transform .2s cubic-bezier(.5,.1,.1,1);
-moz-transition: -moz-transform .2s cubic-bezier(.5,.1,.1,1);
-o-transition: -o-transform .2s cubic-bezier(.5,.1,.1,1);
-ms-transition: -ms-transform .2s cubic-bezier(.5,.1,.1,1);
transition: transform .2s cubic-bezier(.5,.1,.1,1);
}
.pkbookshelfInnerBody_book .pkbookshelfInnerBody_thumbnail a{
text-decoration:none;
}
.pkbookshelfInnerBody_book .pkbookshelfInnerBody_thumbnailBody {
height:144px;
width:120px;
text-overflow: ellipsis;
overflow: hidden;
display: inline-block;
background: white;
}
</style>
</head>
<body>
<div class="pkbookshelf">
<table class="pkbookshelfInner">
<tbody>
<tr>
<td class="pkbookshelfInnerVSide"></td>
<td class="pkbookshelfInnerBody">

<div class="pkbookshelfInnerBody_books">
<div class="pkbookshelfInnerBody_book">
<div class="pkbookshelfInnerBody_thumbnail">
<a href="javascript:;">
<span class="pkbookshelfInnerBody_thumbnailBody">
“我们现在可以确定,河南信阳光山县砍伤学生案的犯罪嫌疑人闵拥军,就是受到同村一名60多岁‘全能神’女信徒的影响,才导致了悲剧的发生。”曾多次参与侦破“全能神”邪教组织案件的中国人民公安大学教授、疑难案件犯罪心理分析专家武伯欣教授称。

  “河南中南部地区是‘全能神’传播的发源地和重灾区。”武伯欣说,今年12月,“全能神”邪教组织在所谓的“12月21日世界末日”即将到来之际,策划在多个地区提前行动,扩大影响力。
</span>
</a>
</div>
</div>

<div class="pkbookshelfInnerBody_book">
<div class="pkbookshelfInnerBody_thumbnail">
<a href="javascript:;">
<img height="144" src="http://imagery.pragprog.com/products/261/dsproc_largebeta.jpg?1345061523" width="120" />
</a>
</div>
</div>
<div class="pkbookshelfInnerBody_book">
<div class="pkbookshelfInnerBody_thumbnail">
<a href="javascript:"><img height="144" src="http://imagery.pragprog.com/products/256/tpantlr2_largebeta.jpg?1340069054" width="120" /></a>
</div>
</div>
</div>

</td>
<td class="pkbookshelfInnerVSide"></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>

Friday, December 21, 2012

腾讯应用中心—您的应用【语音新闻王】已经上架

《中国移动开发者社区本周精彩推荐》:2012年中

Content-Type: text/html; charset = "GB2312"
Content-Transfer-Encoding: base64

PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0i
NzAwIj4NCjx0Ym9keT4NCjx0cj4NCjx0ZCB3aWR0aD0iNDc3Ij4NCjx0YWJsZSBib3JkZXI9IjAi
IGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjQ3NyI+DQo8dGJvZHk+DQo8
dHI+DQo8dGQ+PGltZyBzcmM9Imh0dHA6Ly9kZXYuMTAwODYuY24vZGV2X211bHVfc2NfeXVueWlu
Zy9zdWJqZWN0LzIwMTEwNC93ZWVrbHkvZGV2bG9nby5wbmciIGhlaWdodD0iNzMiIHdpZHRoPSI0
NzciIC8+DQogPC90ZD48L3RyPg0KPHRyPg0KPHRkPjxpbWcgc3JjPSJodHRwOi8vZGV2LjEwMDg2
LmNuL2NtZG4vc3VwZXNpdGUvYXR0YWNobWVudHMvbGFyZ2VpbmZvcm1fYXR0YWNobWVudHMvMTIx
MjE5LzIwMTIxMjE5Xzc5MTdhNDc5YjFiMjI1ZmE4ZGJiNTQ4NDEyXzQxNzU5LmpwZyIgaGVpZ2h0
PSIxNTAiIHdpZHRoPSI0NzciIC8+DQogPC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPg0K
PHRkIGJnY29sb3I9IiMwNzU2OWUiIHZhbGlnbj0idG9wIiB3aWR0aD0iMjIzIj4NCjx0YWJsZSBi
b3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjIyMyI+DQo8
dGJvZHk+DQo8dHI+DQo8dGQgaGVpZ2h0PSIxODAiPjxpbWcgc3JjPSJodHRwOi8vZGV2LjEwMDg2
LmNuL2Rldl9tdWx1X3NjX3l1bnlpbmcvc3ViamVjdC8yMDExMDQvd2Vla2x5L3dlZWtseV9sb2dv
LnBuZyIgaGVpZ2h0PSIxODAiIHdpZHRoPSIyMjMiIC8+DQogPC90ZD48L3RyPg0KPHRyPg0KPHRk
IHN0eWxlPSJmb250LXNpemU6MThweDtjb2xvcjojZmZmZmZmOyIgaGVpZ2h0PSI0MyIgYWxpZ249
ImNlbnRlciIgdmFsaWduPSJjZW50ZXIiPrXaNjHG2jwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+
PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4NCjx0YWJsZSBiZ2NvbG9yPSIjZWFmOGZmIiBib3Jk
ZXI9IjAiIGNlbGxwYWRkaW5nPSIxNCIgY2VsbHNwYWNpbmc9IjMiIHdpZHRoPSI3MDAiPg0KPHRi
b2R5Pg0KPHRyPg0KPHRkIGJnY29sb3I9IiNmZmZmZmYiPg0KPHRhYmxlIGJvcmRlcj0iMCIgY2Vs
bHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjY1Ij4NCjx0Ym9keT4NCjx0cj4N
Cjx0ZCBoZWlnaHQ9IjI1Ij4NCjxwIHN0eWxlPSJmb250LXNpemU6MThweDtjb2xvcjojMzFiOGZm
OyIgYWxpZ249ImxlZnQiPjxzdHJvbmc+sb7W3M23zPW8sM3GvPbL99L9PC9zdHJvbmc+PC9wPjwv
dGQ+PC90cj4NCjx0cj4NCjx0ZCBiZ2NvbG9yPSIjZWFmOGZmIj4mbmJzcDs8aW1nIHNyYz0iaHR0
cDovL2Rldi4xMDA4Ni5jbi9kZXZfbXVsdV9zY195dW55aW5nL3N1YmplY3QvMjAxMTA0L3dlZWts
eS9lX2JiLnBuZyIgaGVpZ2h0PSI3IiB3aWR0aD0iNSIgLz4NCiAmbmJzcDs8YSBocmVmPSIjMSI+
PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwNzU2OWU7Ij4yMDEyxOrW0Ln60sa2
r8irx/K/qrei1d+087vhyKuzzL6rssq72LnLPC9zcGFuPjwvYT48YnIgLz4NCiZuYnNwOzxpbWcg
c3JjPSJodHRwOi8vZGV2LjEwMDg2LmNuL2Rldl9tdWx1X3NjX3l1bnlpbmcvc3ViamVjdC8yMDEx
MDQvd2Vla2x5L2VfYmIucG5nIiBoZWlnaHQ9IjciIHdpZHRoPSI1IiAvPg0KICZuYnNwOzxhIGhy
ZWY9IiMyIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzA3NTY5ZTsiPk1NobCw
2c3yx+DE6rS00rW8xruuobG12sj9vde2zsirufrGwMnzveG5+7mryr48L3NwYW4+PC9hPjxiciAv
Pg0KJm5ic3A7PGltZyBzcmM9Imh0dHA6Ly9kZXYuMTAwODYuY24vZGV2X211bHVfc2NfeXVueWlu
Zy9zdWJqZWN0LzIwMTEwNC93ZWVrbHkvZV9iYi5wbmciIGhlaWdodD0iNyIgd2lkdGg9IjUiIC8+
DQogJm5ic3A7PGEgaHJlZj0iIzMiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjoj
MDc1NjllOyI+u7bTrbLOvNNNTdOm08PE2rzGt9HE3MGm09C9sbX30dA8L3NwYW4+PC9hPjxiciAv
Pg0KJm5ic3A7PGltZyBzcmM9Imh0dHA6Ly9kZXYuMTAwODYuY24vZGV2X211bHVfc2NfeXVueWlu
Zy9zdWJqZWN0LzIwMTEwNC93ZWVrbHkvZV9iYi5wbmciIGhlaWdodD0iNyIgd2lkdGg9IjUiIC8+
DQogJm5ic3A7PGEgaHJlZj0iIzQiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjoj
MDc1NjllOyI+0sa2r9Om08PJzLOhMjAxMsTqMTHUwrzGt9HUwr3hy+PK/b7dvLC908rVt6LGsbCy
xcXNqNaqPC9zcGFuPjwvYT48YnIgLz4NCiZuYnNwOzxpbWcgc3JjPSJodHRwOi8vZGV2LjEwMDg2
LmNuL2Rldl9tdWx1X3NjX3l1bnlpbmcvc3ViamVjdC8yMDExMDQvd2Vla2x5L2VfYmIucG5nIiBo
ZWlnaHQ9IjciIHdpZHRoPSI1IiAvPg0KICZuYnNwOzxhIGhyZWY9IiM1Ij48c3BhbiBzdHlsZT0i
Zm9udC1zaXplOjEycHg7Y29sb3I6IzA3NTY5ZTsiPrbUu7DW0Ln60sa2r8Du1L7X3LLDo7rW0Ln6
0sa2r7XEzrTAtLaozru8sLei1bk8L3NwYW4+PC9hPjxiciAvPg0KJm5ic3A7PGltZyBzcmM9Imh0
dHA6Ly9kZXYuMTAwODYuY24vZGV2X211bHVfc2NfeXVueWluZy9zdWJqZWN0LzIwMTEwNC93ZWVr
bHkvZV9iYi5wbmciIGhlaWdodD0iNyIgd2lkdGg9IjUiIC8+DQogJm5ic3A7PGEgaHJlZj0iIzYi
PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMDc1NjllOyI+1dDJzMeizLijutbQ
ufrSxravus3W2LXjus/X97vvsOnHqdS80sfKvTwvc3Bhbj48L2E+PGEgaHJlZj0iIzYiPjxzcGFu
IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMDc1NjllOyI+IDwvc3Bhbj48L2E+PGJyIC8+
DQombmJzcDs8aW1nIHNyYz0iaHR0cDovL2Rldi4xMDA4Ni5jbi9kZXZfbXVsdV9zY195dW55aW5n
L3N1YmplY3QvMjAxMTA0L3dlZWtseS9lX2JiLnBuZyIgaGVpZ2h0PSI3IiB3aWR0aD0iNSIgLz4N
CiAmbmJzcDs8YSBocmVmPSIjNyI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMw
NzU2OWU7Ij5NTdTGMi4wo7rE3MGmuPy/qrfFoaK6z9f3uPy/qrfFoaK+utX5uPy5q8a9PC9zcGFu
PjwvYT48YnIgLz4NCiZuYnNwOzxpbWcgc3JjPSJodHRwOi8vZGV2LjEwMDg2LmNuL2Rldl9tdWx1
X3NjX3l1bnlpbmcvc3ViamVjdC8yMDExMDQvd2Vla2x5L2VfYmIucG5nIiBoZWlnaHQ9IjciIHdp
ZHRoPSI1IiAvPg0KICZuYnNwOzxhIGhyZWY9IiM4Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEy
cHg7Y29sb3I6IzA3NTY5ZTsiPtbQufrSxravv6q3otXfvuPA1rK/ybPB+rvutq8tuvS6zbrGzNjV
vjwvc3Bhbj48L2E+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48IS0tw7/W3M23zPUtLT4NCjx0
YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjY2
NSI+DQo8dGJvZHk+DQo8dHI+DQo8dGQgaGVpZ2h0PSIxNSI+Jm5ic3A7PC90ZD48L3RyPg0KPHRy
Pg0KPHRkIGhlaWdodD0iMzEiPjxpbWcgYWx0PSKxvtbczbfM9SIgc3JjPSJodHRwOi8vZGV2LjEw
MDg2LmNuL2Rldl9tdWx1X3NjX3l1bnlpbmcvc3ViamVjdC8yMDExMDQvd2Vla2x5L2J6dHQucG5n
IiBoZWlnaHQ9IjMxIiB3aWR0aD0iNjY1IiAvPg0KIDwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+
PCEtLTEtLT4NCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0i
MCIgd2lkdGg9IjY2NSI+DQo8dGJvZHk+DQo8dHI+DQo8dGQgaGVpZ2h0PSIxNSI+PGEgbmFtZT0i
MSI+PC9hPjwvdGQ+PC90cj4NCjx0cj4NCjx0ZD4NCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRk
aW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjY2NSI+DQo8dGJvZHk+DQo8dHI+DQo8dGQg
d2lkdGg9IjExMCI+PGltZyBhbHQ9IiIgc3JjPSJodHRwOi8vZGV2LjEwMDg2LmNuL2NtZG4vc3Vw
ZXNpdGUvYXR0YWNobWVudHMvbGFyZ2VpbmZvcm1fYXR0YWNobWVudHMvMTIxMjE5LzIwMTIxMjE5
X2ZjY2Y4MmEwNGQ5MDI1OGUyNzA0NTA3MjgzXzQxNzU5LnBuZyIgaGVpZ2h0PSIxMTAiIHdpZHRo
PSIxMTAiIC8+DQogPC90ZD4NCjx0ZCB3aWR0aD0iMTUiPiZuYnNwOzwvdGQ+DQo8dGQgYWxpZ249
ImxlZnQiIHdpZHRoPSI1NDAiPg0KPHAgc3R5bGU9ImZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNp
emU6MTRweDtjb2xvcjojMDc1NjllOyI+MjAxMsTq1tC5+tLGtq/Iq8fyv6q3otXftPO74cirs8y+
q7LKu9i5yzwvcD4NCjxwIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNjY2OyI+MjAxMsTq
1tC5+tLGtq/Iq8fyv6q3otXftPO74dLUobDSxravuMSx5Mn6u+4/u+O+27S00MK1xMGmwb+hsc6q
1vfM4qOs0tTCzMmroaKzz9DFoaKwssirzqrXvNTyo6y5sr2osvrStbrP1/fQwsn6zKyho7G+tM60
87vh1tC5+tLGtq+9q7eisrzX7tDCu6XBqs341b3C1KGiyP2089LGtq+7pcGqzfjQwrL6xrehosr9
yq7P7rrP1/fV/rLfoaLCzMmrsLLIq7PP0MWzq9LpoaK/qtW5z9azodXQyczHosy4Li4uPGEgaHJl
Zj0iaHR0cDovL2Rldi4xMDA4Ni5jbi9jZ2RjMjAxMj9mcm9tPWhvbWV6aXh1bjAxIiB0YXJnZXQ9
Il9ibGFuayI+uPy24DwvYT48L3A+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+
PC90Ym9keT48L3RhYmxlPjwhLS0yLS0+DQo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0i
MCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2NjUiPg0KPHRib2R5Pg0KPHRyPg0KPHRkIGhlaWdo
dD0iMTUiPjxhIG5hbWU9IjIiPjwvYT48L3RkPjwvdHI+DQo8dHI+DQo8dGQ+DQo8dGFibGUgYm9y
ZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2NjUiPg0KPHRi
b2R5Pg0KPHRyPg0KPHRkIGFsaWduPSJsZWZ0Ij4NCjxwIHN0eWxlPSJmb250LXdlaWdodDpub3Jt
YWw7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzA3NTY5ZTsiPk1NobCw2c3yx+DE6rS00rW8xruuobG1
2sj9vde2zsirufrGwMnzveG5+7mryr48L3A+DQo8cCBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29s
b3I6IzY2NjsiPtbQufrSxravTU2hsLDZzfLH4MTqtLTStbzGu66hsbXayP2917bOyKu5+tPF0OPT
ptPDxsDJ87vhvq25/cj9zOzGwMnzo6zTydDQ0rXXqLzSus3GwMnzzcW21Mjrzqe1xDI4MLz+08XQ
47LOyPzTptPDtNOhorS00uLQ1KGi0tXK9dDUtci9x7bIvfjQ0Mnzusu6zbTyt9ajrMbA0aGz9rXa
yP2917bOsNnN8sfgxOq0tNK1vMa7rjE2MLj2u/G9sb+qt6LV3yANCiAgLi4uPGEgaHJlZj0iaHR0
cDovL2Rldi4xMDA4Ni5jbi9uZXdzL01NbmV3cy8xMTMwNy5odG1sIiB0YXJnZXQ9Il9ibGFuayI+
uPy24DwvYT48L3A+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+PC90Ym9keT48
L3RhYmxlPjwhLS0zLS0+DQo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNw
YWNpbmc9IjAiIHdpZHRoPSI2NjUiPg0KPHRib2R5Pg0KPHRyPg0KPHRkIGhlaWdodD0iMTUiPjxh
IG5hbWU9IjMiPjwvYT48L3RkPjwvdHI+DQo8dHI+DQo8dGQ+DQo8dGFibGUgYm9yZGVyPSIwIiBj
ZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2NjUiPg0KPHRib2R5Pg0KPHRy
Pg0KPHRkIGFsaWduPSJsZWZ0Ij4NCjxwIHN0eWxlPSJmb250LXdlaWdodDpub3JtYWw7Zm9udC1z
aXplOjE0cHg7Y29sb3I6IzA3NTY5ZTsiPru2062yzrzTTU3TptPDxNq8xrfRxNzBptPQvbG199HQ
PC9wPg0KPHAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2NjY7Ij7W0Ln60sa2r9Om08PJ
zLOh19QxMtTCMTfI1S0xMtTCMzDI1dTav6q3otXfyefH+NW5v6rTptPDxNq8xrfRxNzBps7Kvu21
99HQo6zP69Kq06bTw8TavMa30cTcwabX9sTE0Km4xLHko6y4xMnGxMTQqbf+zvHDtKO/TU2zz9H7
xPqyztPrzsq+7bX30dCjrDIwMNa7vqvDwNS/s9e/28vNsrvNoy4uLjxhIGhyZWY9Imh0dHA6Ly9k
ZXYuMTAwODYuY24vbmV3cy9NTW5ld3MvMTE0NDMuaHRtbD9mcm9tPWhvbWVzcWdnMDMiIHRhcmdl
dD0iX2JsYW5rIj64/LbgPC9hPjwvcD48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPjwvdGQ+PC90
cj48L3Rib2R5PjwvdGFibGU+PCEtLTQtLT4NCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5n
PSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjY2NSI+DQo8dGJvZHk+DQo8dHI+DQo8dGQgaGVp
Z2h0PSIxNSI+PGEgbmFtZT0iNCI+PC9hPjwvdGQ+PC90cj4NCjx0cj4NCjx0ZD4NCjx0YWJsZSBi
b3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjY2NSI+DQo8
dGJvZHk+DQo8dHI+DQo8dGQgYWxpZ249ImxlZnQiPg0KPHAgc3R5bGU9ImZvbnQtd2VpZ2h0Om5v
cm1hbDtmb250LXNpemU6MTRweDtjb2xvcjojMDc1NjllOyI+0sa2r9Om08PJzLOhMjAxMsTqMTHU
wrzGt9HUwr3hy+PK/b7dvLC908rVt6LGsbCyxcXNqNaqPC9wPg0KPHAgc3R5bGU9ImZvbnQtc2l6
ZToxMnB4O2NvbG9yOiM2NjY7Ij4yMDEyxOoxMdTCvMa30dTCtcS94cvjyv2+3dLRvq3N6rPJt6Ky
vKO6x+u547Tz0sa2r9Om08PJzLOhv6q3otXftcfCvNbQufrSxravv6q3otXfyefH+KH6ztK1xNOm
08Oh+s7StcTVy7unudzA7aH6veHL47Lp0a+ju86qwcvIt7GjttTVysr9vt21xNPQ0KfQ1KOsyOfQ
6NKqyerH67bU1cujrMfrueO088rWu/rTptPDuPbIy7+qt6LV37rNxvPStdOm08PM4bmpyczO8bHY
1Nq1sdTC1cu1pbeisrzWrsjVxvC1xDMwuPbX1Mi7yNXE2r340NDJ6sfrLi4uPGEgaHJlZj0iaHR0
cDovL2Rldi4xMDA4Ni5jbi9uZXdzL01NbmV3cy8xMTQ0NC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+
uPy24DwvYT48L3A+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+PC90Ym9keT48
L3RhYmxlPjwhLS3XytG2vqvRoS0tPg0KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAi
IGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjY1Ij4NCjx0Ym9keT4NCjx0cj4NCjx0ZCBoZWlnaHQ9
IjE1Ij4mbmJzcDs8L3RkPjwvdHI+DQo8dHI+DQo8dGQgaGVpZ2h0PSIzMSI+PGltZyBhbHQ9ItfK
0ba+q9GhIiBzcmM9Imh0dHA6Ly9kZXYuMTAwODYuY24vZGV2X211bHVfc2NfeXVueWluZy9zdWJq
ZWN0LzIwMTEwNC93ZWVrbHkvenhqeC5wbmciIGhlaWdodD0iMzEiIHdpZHRoPSI2NjUiIC8+DQog
PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48IS0tNS0tPg0KPHRhYmxlIGJvcmRlcj0iMCIgY2Vs
bHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjY1Ij4NCjx0Ym9keT4NCjx0cj4N
Cjx0ZCBoZWlnaHQ9IjE1Ij48YSBuYW1lPSI1Ij48L2E+PC90ZD48L3RyPg0KPHRyPg0KPHRkPg0K
PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0i
NjY1Ij4NCjx0Ym9keT4NCjx0cj4NCjx0ZCB3aWR0aD0iMTEwIj48aW1nIGFsdD0iIiBzcmM9Imh0
dHA6Ly9kZXYuMTAwODYuY24vY21kbi9zdXBlc2l0ZS9hdHRhY2htZW50cy9sYXJnZWluZm9ybV9h
dHRhY2htZW50cy8xMjEyMTkvMjAxMjEyMTlfMDY2YTFiYWNiZmNlMjZmZjliNjI2MjM3NTFfNDE3
NTkucG5nIiBoZWlnaHQ9IjExMCIgd2lkdGg9IjExMCIgLz4NCiA8L3RkPg0KPHRkIHdpZHRoPSIx
NSI+Jm5ic3A7PC90ZD4NCjx0ZCBhbGlnbj0ibGVmdCIgd2lkdGg9IjU0MCI+DQo8cCBzdHlsZT0i
Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtc2l6ZToxNHB4O2NvbG9yOiMwNzU2OWU7Ij621Luw1tC5
+tLGtq/A7tS+19yyw6O61tC5+tLGtq+1xM60wLS2qM67vLC3otW5PC9wPg0KPHAgc3R5bGU9ImZv
bnQtc2l6ZToxMnB4O2NvbG9yOiM2NjY7Ij4yMDEyxOoxMtTCNcjVo6wyMDEyxOrW0Ln60sa2r8ir
x/K/qrei1d+087vh1Nq549bdufq8yrvh0unW0NDEyqK087+qxLujodbQufrSxravwO7UvtfcssO9
08rc1vez1sjLzfXEwbXRtcTP1rOhssm3w7bUu7DKsbHtyr6jrNbQufrSxravvauzycGi0sa2r7ul
warN+Lmry76jrMbatP2w0dLGtq+7pcGqzfi1xLy8yvWhotOm08OhorL6xre0+Mjrtb3W0Ln60sa2
r7SrzbO1xNTL06rJzMzlz7XWrsTao6y3/s7x09q0q82z1MvTqsnMo6zWp7PF09q0q82z1MvTqsnM
o6y4xNTstKvNs9TL06rJzC4uLjxhIGhyZWY9Imh0dHA6Ly9kZXYuMTAwODYuY24vbmV3cy9NTW5l
d3MvMTEzNDEuaHRtbD9mcm9tPWhvbWV6aXh1bjA2IiB0YXJnZXQ9Il9ibGFuayI+z+rPuMTayN21
47v35K/AwCZndDsmZ3Q7Jmd0OzwvYT48L3A+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT48L3Rk
PjwvdHI+PC90Ym9keT48L3RhYmxlPjwhLS02LS0+DQo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFk
ZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2NjUiPg0KPHRib2R5Pg0KPHRyPg0KPHRk
IGhlaWdodD0iMTUiPjxhIG5hbWU9IjYiPjwvYT48L3RkPjwvdHI+DQo8dHI+DQo8dGQ+DQo8dGFi
bGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI2NjUi
Pg0KPHRib2R5Pg0KPHRyPg0KPHRkIHdpZHRoPSIxMTAiPjxpbWcgYWx0PSIiIHNyYz0iaHR0cDov
L2Rldi4xMDA4Ni5jbi9jbWRuL3N1cGVzaXRlL2F0dGFjaG1lbnRzL2xhcmdlaW5mb3JtX2F0dGFj
aG1lbnRzLzEyMTIxOS8yMDEyMTIxOV8yNTU5NGJhNGY2ZGExZjBjNTRmNDY5MDUxOV80MTc1OS5w
bmciIGhlaWdodD0iMTEwIiB3aWR0aD0iMTEwIiAvPg0KIDwvdGQ+DQo8dGQgd2lkdGg9IjE1Ij4m
bmJzcDs8L3RkPg0KPHRkIGFsaWduPSJsZWZ0IiB3aWR0aD0iNTQwIj4NCjxwIHN0eWxlPSJmb250
LXdlaWdodDpub3JtYWw7Zm9udC1zaXplOjE0cHg7Y29sb3I6IzA3NTY5ZTsiPtXQyczHosy4o7rW
0Ln60sa2r7rN1ti147rP1/e777Dpx6nUvNLHyr08L3A+DQo8cCBzdHlsZT0iZm9udC1zaXplOjEy
cHg7Y29sb3I6IzY2NjsiPjIwMTLE6jEy1MI1yNWjrDIwMTLE6tbQufrSxravyKvH8r+qt6LV37Tz
u+HU2rnj1t25+rzKu+HS6dbQ0MTKorTzv6rEu6Oh1tC5+tLGtq+6zdbYteO6z9f3u++w6cep1LzS
x8q9o6zG5NbQ1dDJzMeizLj037S00MKy+sa3t6KyvLvht9bC28yzvK+497v5tdi6z9f31f6y373p
ydyhoryv1tDHqdS8oaK6z9f3u++w6bS00MKy+sa3t6KyvLywus/X98eizLi1yLbgz+65psTcoa08
YSBocmVmPSJodHRwOi8vZGV2LjEwMDg2LmNuL25ld3MvTU1uZXdzLzExMzczLmh0bWw/ZnJvbT1o
b21leml4dW4wMSIgdGFyZ2V0PSJfYmxhbmsiPs/qz7jE2sjdteO79+SvwMAmZ3Q7Jmd0OyZndDs8
L2E+PC9wPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJs
ZT48IS0tNy0tPg0KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5n
PSIwIiB3aWR0aD0iNjY1Ij4NCjx0Ym9keT4NCjx0cj4NCjx0ZCBoZWlnaHQ9IjE1Ij48YSBuYW1l
PSI3Ij48L2E+PC90ZD48L3RyPg0KPHRyPg0KPHRkPg0KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBh
ZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjY1Ij4NCjx0Ym9keT4NCjx0cj4NCjx0
ZCB3aWR0aD0iMTEwIj48aW1nIGFsdD0iIiBzcmM9Imh0dHA6Ly9kZXYuMTAwODYuY24vY21kbi9z
dXBlc2l0ZS9hdHRhY2htZW50cy9sYXJnZWluZm9ybV9hdHRhY2htZW50cy8xMjEyMTkvMjAxMjEy
MTlfMmU3MDNlODYxZGZmOWY2NDVkZGE4Mjc1NThfNDE3NTkucG5nIiBoZWlnaHQ9IjExMCIgd2lk
dGg9IjExMCIgLz4NCiA8L3RkPg0KPHRkIHdpZHRoPSIxNSI+Jm5ic3A7PC90ZD4NCjx0ZCBhbGln
bj0ibGVmdCIgd2lkdGg9IjU0MCI+DQo8cCBzdHlsZT0iZm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQt
c2l6ZToxNHB4O2NvbG9yOiMwNzU2OWU7Ij5NTdTGMi4wo7rE3MGmuPy/qrfFoaK6z9f3uPy/qrfF
oaK+utX5uPy5q8a9PC9wPg0KPHAgc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM2NjY7Ij4y
MDEyxOoxMtTCNcjVo6wyMDEyxOrW0Ln60sa2r8irx/K/qrei1d+087vho6hDR0RDMjAxMqOp1Nq5
49bdufq8yrvh0unW0NDEyqK087+qxLujodbQufrSxravueO2q7mry764sdfcvq3A7cfwzsS71Lei
srxNTdTGMi4wo6xNTdTGMi4wsPzAqLj8vNO/qrfFxNzBpqOsuPy807+qt8W1xLrP1/fEo8q9o6y4
/LzTuavGvbXEvrrV+bv61sYNCiAgLi4uPGEgaHJlZj0iaHR0cDovL2Rldi4xMDA4Ni5jbi9uZXdz
L01NbmV3cy8xMTM1NS5odG1sP2Zyb209aG9tZXppeHVuMDUiIHRhcmdldD0iX2JsYW5rIj7P6s+4
xNrI3bXju/fkr8DAJmd0OyZndDsmZ3Q7PC9hPjwvcD48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxl
PjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PCEtLTgtLT4NCjx0YWJsZSBib3JkZXI9IjAiIGNl
bGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjY2NSI+DQo8dGJvZHk+DQo8dHI+
DQo8dGQgaGVpZ2h0PSIxNSI+PGEgbmFtZT0iOCI+PC9hPjwvdGQ+PC90cj4NCjx0cj4NCjx0ZD4N
Cjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9
IjY2NSI+DQo8dGJvZHk+DQo8dHI+DQo8dGQgd2lkdGg9IjExMCI+PGltZyBhbHQ9IiIgc3JjPSJo
dHRwOi8vZGV2LjEwMDg2LmNuL2NtZG4vc3VwZXNpdGUvYXR0YWNobWVudHMvbGFyZ2VpbmZvcm1f
YXR0YWNobWVudHMvMTIxMjE5LzIwMTIxMjE5X2VlZWQ4OTQyYjQ0YWViYTZjMjMyOTUxNDQ1XzQx
NzU5LnBuZyIgaGVpZ2h0PSIxMTAiIHdpZHRoPSIxMTAiIC8+DQogPC90ZD4NCjx0ZCB3aWR0aD0i
MTUiPiZuYnNwOzwvdGQ+DQo8dGQgYWxpZ249ImxlZnQiIHdpZHRoPSI1NDAiPg0KPHAgc3R5bGU9
ImZvbnQtd2VpZ2h0Om5vcm1hbDtmb250LXNpemU6MTRweDtjb2xvcjojMDc1NjllOyI+1tC5+tLG
tq+/qrei1d++48DWsr/Js8H6u+62ry269LrNusbM2NW+PC9wPg0KPHAgc3R5bGU9ImZvbnQtc2l6
ZToxMnB4O2NvbG9yOiM2NjY7Ij4xMdTCMjbI1aOsxNrDybnFTU2+48DWsr+zycGi0sfKvfTf1tC5
+tLGtq+/qrei1d++48DWsr/Js8H6u+62ry269LrNusbM2NW+obDN5teqyta7+k1NwLSw78TjobHU
2sTaw8m5xcqmt7a089GnvtnQ0KOsxNrDybnF0sa2r8r9vt2yv7ix19y+rcDtwfXP/tOioaJNTbi6
1PDIy9XFxfSzzKGixNrDybnFzcXOr9Gn0KOyv7K/s6TW+sDty/fTwMa9oaLUw7PJyP28yr/GvLzT
0M/euavLvtfcvq3A7bPCyNm4+bXIs/bPr8HLu+62ry4uLjxhIGhyZWY9Imh0dHA6Ly9kZXYuMTAw
ODYuY24vbmV3cy9NTW5ld3MvMTE0NDAuaHRtbCIgdGFyZ2V0PSJfYmxhbmsiPs/qz7jE2sjdteO7
9+SvwMAmZ3Q7Jmd0OyZndDs8L2E+PC9wPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PC90ZD48
L3RyPjwvdGJvZHk+PC90YWJsZT48L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPg0KPHRhYmxlIGJn
Y29sb3I9IiNlYWY4ZmYiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjE0IiBjZWxsc3BhY2luZz0i
MyIgd2lkdGg9IjcwMCI+DQogIDx0Ym9keT4NCjx0cj4NCjx0ZCBiZ2NvbG9yPSIjZmZmZmZmIj48
IS0twtvMs8jIzPstLT4NCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3Bh
Y2luZz0iMCIgd2lkdGg9IjY2NSI+DQo8dGJvZHk+DQo8dHI+DQo8dGQgaGVpZ2h0PSIzMSI+PGlt
ZyBhbHQ9IsLbzLPIyMz7IiBzcmM9Imh0dHA6Ly9kZXYuMTAwODYuY24vZGV2X211bHVfc2NfeXVu
eWluZy9zdWJqZWN0LzIwMTEwNC93ZWVrbHkvYmJzLnBuZyIgaGVpZ2h0PSIzMSIgd2lkdGg9IjY2
NSIgLz4NCiA8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPg0KPHRhYmxlIGJvcmRlcj0iMCIgY2Vs
bHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNjY1Ij4NCjx0Ym9keT4NCjx0cj4N
Cjx0ZCBjb2xzcGFuPSI0IiBoZWlnaHQ9IjE1Ij4mbmJzcDs8L3RkPjwvdHI+DQo8dHI+DQo8dGQg
c3R5bGU9InRleHQtYWxpZ246bGVmdDsiIHdpZHRoPSI4MCI+PGltZyBzcmM9Imh0dHA6Ly9kZXYu
MTAwODYuY24vZGV2X211bHVfc2NfeXVueWluZy9zdWJqZWN0LzIwMTEwNC93ZWVrbHkvYmJzbG9n
by5wbmciIGhlaWdodD0iODAiIHdpZHRoPSI4MCIgLz4NCiA8L3RkPg0KPHRkIHN0eWxlPSJ0ZXh0
LWFsaWduOmxlZnQ7IiB3aWR0aD0iMTUiPjxiciAvPg0KPC90ZD4NCjx0ZCBzdHlsZT0idGV4dC1h
bGlnbjpsZWZ0OyIgd2lkdGg9IjI4NSI+DQo8cD48YSBocmVmPSJodHRwOi8vZGV2LjEwMDg2LmNu
L2NtZG4vYmJzL3RocmVhZC04MTkzMC0xLTEuaHRtbD9mcm9tPWhvbWViYnNuZXcwNCIgdGFyZ2V0
PSJfYmxhbmsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMDc1NjllO3RleHQt
ZGVjb3JhdGlvbjpub25lOyI+SFRNTDXS9Ma1Ose2yOu88rWltcTJ+dL0zOHKvry8x8k8L3NwYW4+
PC9hPjxiciAvPg0KPGEgaHJlZj0iaHR0cDovL2Rldi4xMDA4Ni5jbi9jbWRuL2Jicy90aHJlYWQt
ODE2NDAtMS0xLmh0bWw/ZnJvbT1ob21lYmJzbmV3MDYiIHRhcmdldD0iX2JsYW5rIj48c3BhbiBz
dHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzA3NTY5ZTt0ZXh0LWRlY29yYXRpb246bm9uZTsi
Psy4u6XBqs34vrrV+dbQtcSyu7bUs8bVvdX5PC9zcGFuPjwvYT48YnIgLz4NCjxhIGhyZWY9Imh0
dHA6Ly9kZXYuMTAwODYuY24vY21kbi9iYnMvdGhyZWFkLTgxNjE1LTEtMS5odG1sP2Zyb209aG9t
ZWJic25ldzA5IiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2Nv
bG9yOiMwNzU2OWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ij4yMDEyxOoxMtTCseCzzNPv0dTFxdDQ
sPE8L3NwYW4+PC9hPiA8L3A+PC90ZD4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyIgd2lk
dGg9IjI4NSI+DQo8cD48YSBocmVmPSJodHRwOi8vZGV2LjEwMDg2LmNuL2NtZG4vYmJzL3RocmVh
ZC04MTg3My0xLTEuaHRtbD9mcm9tPWhvbWViYnNuZXcwMyIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFu
IHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojMDc1NjllO3RleHQtZGVjb3JhdGlvbjpub25l
OyI+yOe6zsnqx+u8xrfRteOzrLn9MTC49rXESUFQ06bTwzwvc3Bhbj48L2E+PGJyIC8+DQo8YSBo
cmVmPSJodHRwOi8vZGV2LjEwMDg2LmNuL2NtZG4vYmJzL3RocmVhZC04MTY1Ni0xLTEuaHRtbD9m
cm9tPWhvbWViYnNuZXcwNyIgdGFyZ2V0PSJfYmxhbmsiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6
MTJweDtjb2xvcjojMDc1NjllO3RleHQtZGVjb3JhdGlvbjpub25lOyI+ob631s/tob9BbmRyb2lk
IFB1c2ggv6rUtLe9sLi94s72PC9zcGFuPjwvYT48YnIgLz4NCjxhIGhyZWY9Imh0dHA6Ly9kZXYu
MTAwODYuY24vY21kbi9iYnMvdGhyZWFkLTgxNjQ5LTEtMS5odG1sP2Zyb209aG9tZWJic25ldzEw
IiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwNzU2
OWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ij6hvrfWz+2hv0FuZHJvaWTKtc/WyMvO79TatdjNvNbQ
0sa2rzwvc3Bhbj48L2E+PC9wPjwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+PCEtLbmkvt/OxLW1
vqvRoS0tPg0KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIw
IiB3aWR0aD0iNjY1Ij4NCjx0Ym9keT4NCjx0cj4NCjx0ZCBoZWlnaHQ9IjE1Ij4mbmJzcDs8L3Rk
PjwvdHI+DQo8dHI+DQo8dGQgaGVpZ2h0PSIzMSI+PGltZyBhbHQ9Irmkvt/OxLW1vqvRoSIgc3Jj
PSJodHRwOi8vZGV2LjEwMDg2LmNuL2Rldl9tdWx1X3NjX3l1bnlpbmcvc3ViamVjdC8yMDExMDQv
d2Vla2x5L3dpa2kucG5nIiBoZWlnaHQ9IjMxIiB3aWR0aD0iNjY1IiAvPg0KIDwvdGQ+PC90cj48
L3Rib2R5PjwvdGFibGU+DQo8dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNw
YWNpbmc9IjAiIHdpZHRoPSI2NjUiPg0KPHRib2R5Pg0KPHRyPg0KPHRkIGNvbHNwYW49IjQiIGhl
aWdodD0iMTUiPiZuYnNwOzwvdGQ+PC90cj4NCjx0cj4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjps
ZWZ0OyIgd2lkdGg9IjgwIj48aW1nIHNyYz0iaHR0cDovL2Rldi4xMDA4Ni5jbi9kZXZfbXVsdV9z
Y195dW55aW5nL3N1YmplY3QvMjAxMTA0L3dlZWtseS93aWtpbG9nby5wbmciIGhlaWdodD0iODAi
IHdpZHRoPSI4MCIgLz4NCiA8L3RkPg0KPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOmxlZnQ7IiB3aWR0
aD0iMTUiPjxiciAvPg0KPC90ZD4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0OyIgd2lkdGg9
IjI4NSI+DQo8cD48YSBocmVmPSJodHRwOi8vZGV2LjEwMDg2LmNuL2NtZG4vd2lraS9pbmRleC5w
aHA/ZG9jLXZpZXctNjY0NS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5bGU9ImZvbnQt
c2l6ZToxMnB4O2NvbG9yOiMwNzU2OWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ij5BbmRyb2lkIElu
dGVudMnutsjGys72PC9zcGFuPjwvYT48YnIgLz4NCjxhIGhyZWY9Imh0dHA6Ly9kZXYuMTAwODYu
Y24vY21kbi93aWtpL2luZGV4LnBocD9kb2Mtdmlldy0yMTQyLmh0bWwiIHRhcmdldD0iX2JsYW5r
Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzA3NTY5ZTt0ZXh0LWRlY29yYXRp
b246bm9uZTsiPkZvcm0gVUkgY29tcG9uZW500qrWp7PWxqS39Dwvc3Bhbj48L2E+PGJyIC8+DQo8
YSBocmVmPSJodHRwOi8vZGV2LjEwMDg2LmNuL2NtZG4vd2lraS9pbmRleC5waHA/ZG9jLXZpZXct
MTEzNC5odG1sIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2Nv
bG9yOiMwNzU2OWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ij5MQVJFTkHGvcyoRnJhbWV3b3JrMi4w
seCzzNa4xM8gPC9zcGFuPjwvYT48L3A+PC90ZD4NCjx0ZCBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0
OyIgd2lkdGg9IjI4NSI+DQo8cD48YSBocmVmPSJodHRwOi8vZGV2LjEwMDg2LmNuL2NtZG4vd2lr
aS9pbmRleC5waHA/ZG9jLXZpZXctNDQ0NS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5
bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwNzU2OWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ij5B
bmRyb2lkIMq1z9a87LLpzfjC58rHt/G/ydPDPC9zcGFuPjwvYT48YnIgLz4NCjxhIGhyZWY9Imh0
dHA6Ly9kZXYuMTAwODYuY24vY21kbi93aWtpL2luZGV4LnBocD9kb2Mtdmlldy01Mzg2Lmh0bWwi
IHRhcmdldD0iX2JsYW5rIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzA3NTY5
ZTt0ZXh0LWRlY29yYXRpb246bm9uZTsiPkFuZHJvaWQgTGlzdEFjdGl2aXR5ILWl0aGwtMWl08O3
qDwvc3Bhbj48L2E+PGJyIC8+DQo8YSBocmVmPSJodHRwOi8vZGV2LjEwMDg2LmNuL2NtZG4vd2lr
aS9pbmRleC5waHA/ZG9jLXZpZXctNDkzMi5odG1sIiB0YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5
bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiMwNzU2OWU7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ij5B
bmRyb2lkLbeiy822zNDFtcTUtMLrPC9zcGFuPjwvYT4gPC9wPjwvdGQ+PC90cj48L3Rib2R5Pjwv
dGFibGU+PC90ZD48L3RyPjwvdGJvZHk+PC90YWJsZT4NCjx0YWJsZSBiZ2NvbG9yPSIjZDZlY2Y5
IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIxNyIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI3MDAi
Pg0KPHRib2R5Pg0KPHRyPg0KPHRkPjxzcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtj
b2xvcjojNTg5M2NiOyI+PHNwYW4+PGltZyBhbHQ9IrnY16LO0sPHIiBzcmM9Imh0dHA6Ly9kZXYu
MTAwODYuY24vZGV2X211bHVfc2NfeXVueWluZy9zdWJqZWN0LzIwMTEwNC93ZWVrbHkvYWJvdXQu
cG5nIiBoZWlnaHQ9IjMxIiB3aWR0aD0iNjY1IiAvPg0KIDwvc3Bhbj48YnIgLz4NCjEzOcu1v808
L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9zaGVxdS4xMDA4Ni5jbi9fTDUyMjI4MDU4IiB0YXJnZXQ9
Il9ibGFuayI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1ODkzY2I7dGV4dC1k
ZWNvcmF0aW9uOm5vbmU7Ij5odHRwOi8vc2hlcXUuMTAwODYuY24vX0w1MjIyODA1ODwvc3Bhbj48
L2E+PGJyIC8+DQo8c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzU4OTNjYjsiPtDC
wMvOorKpPC9zcGFuPiA8YSBocmVmPSJodHRwOi8vdC5zaW5hLmNvbS5jbi8xOTY3MDEyOTY0IiB0
YXJnZXQ9Il9ibGFuayI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1ODkzY2I7
dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ij5odHRwOi8vdC5zaW5hLmNvbS5jbi8xOTY3MDEyOTY0PC9z
cGFuPjwvYT48YnIgLz4NCjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjojNTg5M2Ni
OyI+zNrRts6isqk8L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly90LnFxLmNvbS9tbWRldmVsb3AiIHRh
cmdldD0iX2JsYW5rIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzU4OTNjYjt0
ZXh0LWRlY29yYXRpb246bm9uZTsiPmh0dHA6Ly90LnFxLmNvbS9tbWRldmVsb3A8L3NwYW4+PC9h
PjxiciAvPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1ODkzY2I7Ij63/s7x
08rP5Dwvc3Bhbj4gPGEgaHJlZj0ibWFpbHRvOmFwc2VydmljZUBjaGluYW1vYmlsZS5jb20iIHRh
cmdldD0iX2JsYW5rIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzU4OTNjYjt0
ZXh0LWRlY29yYXRpb246bm9uZTsiPmFwc2VydmljZUBjaGluYW1vYmlsZS5jb208L3NwYW4+PC9h
PjxiciAvPg0KPHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMnB4O2NvbG9yOiM1ODkzY2I7Ij7JzM7x
us/X97f+zvHIyM/fIDQwMC0xMDA4Ni0yMKOo1tzSu9bB1tzO5SA4OjMwLTEyOjAwIDEzOjMwLTE3
OjMwo6k8L3NwYW4+PC9zcGFuPjwvdGQ+PC90cj4NCjx0cj4NCjx0ZCBiZ2NvbG9yPSIjMDAyYzU1
Ij48YSBocmVmPSJodHRwOi8vZGV2LjEwMDg2LmNuLz9mcm9tPW1haWwiIHRhcmdldD0iX2JsYW5r
Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEycHg7Y29sb3I6IzJmNzRiNDt0ZXh0LWRlY29yYXRp
b246bm9uZTsiPtbQufrSxravv6q3otXfyefH+ChkZXYuMTAwODYuY24pPC9zcGFuPjwvYT48L3Rk
PjwvdHI+PC90Ym9keT48L3RhYmxlPjxici8+PGJyLz7S8s6qxPrU+L6t16Ky4bPJzqrW0Ln60sa2
r7+qt6LV38nnx/i1xNPDu6ejrMv50tTE+rvhytW1vdXit+LTyrz+oaPO0sPHsaPWpL32z/LE+rei
y8252NPa1tC5+tLGtq+/qrei1d/J58f418rRtrywt/7O8bXEtefX09PKvP6ho9bQufrSxravv6q3
otXfyefH+Nfw1tiyorGju6TE+rXE0v7LvaGjDQrOqsi3saPO0sPHtcS3/s7x0MXPorK7sbu1sdf2
wKy7+NPKvP60psDto6zH67DRIHNlcnZpY2VAbW1hcmtldC5jb20gzO28086qxPq1xMGqz7XIy6Gj
DQrI57n7xPqyu9S40uK8zND4vdPK1cC019TW0Ln60sa2r7+qt6LV38nnx/i1xNfUtq+2qdTE08q8
/qOsx+u147v3PGEgaHJlZj0naHR0cDovL2Rldi4xMDA4Ni5jbi9jbWRuL3N1cGVzaXRlL25ld2Rl
di5sb2dpbm91dC5waHA/ZnJvbT1vcmRlcmVtYWlsJyB0YXJnZXQ9J19ibGFuayc+zcu2qdPKvP48
L2E+oaMNCsjnufvE+s/rtqnUxLj8tuC78rj80MLE+sv5tqnUxLXE08q8/sHQse2jrMfrteO79zxh
IGhyZWY9J2h0dHA6Ly9kZXYuMTAwODYuY24vY21kbi9zdXBlc2l0ZS9uZXdkZXYubG9naW5vdXQu
cGhwP2Zyb209b3JkZXJlbWFpbCcgdGFyZ2V0PSdfYmxhbmsnPrj80MLO0rXE08q8/rap1MQ8L2E+
oaMNCg==

Monday, December 17, 2012

jquery + css sample source log–pkbookshelfheader

from one unnamed source, i changed from it.

image

your can see it demo from http://cdn.pk17s.cn/s/htm/sample/jquery.pkBookShelfHeader/index.htm

here is css:

.bookshelf_menu_wrapper {
width: 100%;
background: url(images/templatemo_menu.jpg) no-repeat top center;
}
.bookshelf_menu_wrapper .bookshelf_menu {
background: url(images/templatemo_menu.jpg) no-repeat top center;
width: 100%;
height: 103px;
margin: 0 auto;
}
.bookshelf_menu_wrapper .bookshelf_menu ul.bookshelf_navigation {
height: 100%;
list-style: none;
margin: 0 auto;
padding: 0;
display:table;
}
.bookshelf_menu_wrapper .bookshelf_menu ul.bookshelf_navigation li {
display: inline-block;
margin: 0px;
padding: 0;
}
.bookshelf_menu_wrapper .bookshelf_menu ul.bookshelf_navigation a {
float: left;
display: block;
width: 104px;
height: 70px;
padding: 34px 15px 0;
color: #FFFFFF;
font-size: 18px;
font-weight: bold;
text-decoration: none;
text-align: center;
background: url(images/templatemo_menu_bg.png) no-repeat top center
}
.bookshelf_menu_wrapper .bookshelf_menu ul.bookshelf_navigation a:hover, .bookshelf_menu_wrapper .bookshelf_menu ul.bookshelf_navigation a.selected {
color: #FFFF00;
}
.bookshelf_menu_wrapper .bookshelf_menu ul.bookshelf_navigation a:focus {
outline: none;
}



here is htm layout source:

<div class="bookshelf_menu_wrapper">
<div class="bookshelf_menu">
<ul class="bookshelf_navigation">
<li><a href="javascript:;" class="divWorkStatistTableCaptionX pkAutoTranslactor">Exit</a></li>
<li><a href="javascript:;" class="selected">Current</a></li>
</ul>
</div>
</div>
</div>

Saturday, December 15, 2012

中信银行UKEY无法更新证书问题

这篇日志,主要是说中信网银证书WIN7更新失败问题的我解决办法.

本文的我采用纯正虚拟机XP的IE6操作更新成功!

中信银行2012-12-15说UKEY证书过期.

14号有客服说我证书过期.让我去网上更新或去营业点更新.

然后我的是WIN7.上网更新证书,它妈的跳出说未安装浏览器的一个WINXP补丁.

   



亲爱的用户:
  由于您现在使用的IE浏览器版本尚未安装微软公司提供的323172安全补丁,您现在暂时无法正常下载CFCA的数字证书。请您根据您所使用的操作系统的类型和版本下载相应的补丁程序,并安装。谢谢您的配合

请根据IE版本及密钥长度情况选择以下补丁进行安装(查看IE版本的方法)




操作系统 语言 补丁大小(KB) 下载地址
Windows98 中文 205 323172CHS8.EXE
英文 214 323172USA8.EXE

Windows ME 中文 203 323172CHSM.EXE
英文 211 323172USAM.EXE

Windows NT4.0 中文 272 CHSQ323172i.exe
英文 268 Q323172i.exe

Windows2000 中文 331 q323172_W2K_SP4_X86_CN1.exe
英文 329 q323172_W2K_SP4_X86_EN.exe

WindowsXP 中文 276 Q323172_WXP_SP1_x86_CHS.exe
英文 276 Q323172_WXP_SP1_x86_ENU.exe


  如果您要了解这个补丁程序的详细信息,请您参考微软网站上的说明。不在上面的列表中的操作系统的补丁,也可以在此网页中找到。

  只有您安装完补丁程序之后,您才可以重新下载证书。


中国金融认证中心(CFCA)
2004年11月



15号早上才知道永安城市没有一家中信银行.


启动WINXP英文虚拟机.下载中信伴侣,无法运行,打开系统日志,查看才知道是没有装VC2005运行库.靠.它不会自动帮我们装啊.垃圾中信.


我去上网搜索VC2005运行库.vcredist_x86_64.rar大概几5MB左右大小.放入虚拟机,安装好了,就可以运行中信伴侣了.不过安装界面在英文系统下是乱码.还好我经验丰富.乱码也一直下一步.


中信伴侣的插件都安装好了,重启系统了.


打开中信主页,登陆.点击右上方的"安全中心"->上方的"证书管理"->上方的"证书在线更新".输入我的姓名拼音,没有空格.


过一会,会弹出几个IE警告框,要选"是"或同意哟.


image


Monday, December 10, 2012

my jquery sample source log:save media file not play media file

'saveas':function (url){
setTimeout(function(){
var id = "saveasiframeobj_objhelper";
var obj = document.getElementById(id);
if(!obj){
obj = document.createElement("a");
obj.target="_blank";
obj.id=id;
obj.style.display = "none";
obj.download='';
document.body.appendChild(obj);
}
obj.href = url;
obj.click();
},0);
}



note: obj.download attribute. this is used by browser to download, not play it .it can replace system saveas method. good prefected for pkrss.


if you want to special the save as downloadfilename.postfix,you can like this:

obj.download='downloadfilename';



this is from my project http://www.pk17s.cn ‘s part source sample. you can used anytimers.

Saturday, December 8, 2012

sourceforge server build phpbb and discuz log

1.move phpbb discuz from old server to sourceforge server.

1.1.ssh sourceforge

1.2.copy phpbb  discuz to sourceforge bbs/

1.3.import phpbb discuz mysql database gzip compressed file to mysql.

1.4 changed config.php for new db setting

1.5 run http://www.pkstate.com/bbs/ ok

now phpbb is moving ok. but discuz table size gziped is more than 2mb so much.i changed them nowing.

 

if datatable is small than 2mb.than your can export tham by phpmyadmin used gzip and drop exist option.

if database is big,ex:180mb you can export it used gzip and drop exist option,and line limits need replace 50000 to 50000000.and export it.

then ftp it to server.and ssh it,and “gzip –d bigsql.sql.gz”

then: mysql  -h hostname–u root –p

then: used databasename

then: source fullpath/bigsql.sql

Thursday, December 6, 2012

wordpress blog move home log

today, i need move wordpress blog from one endpoint to other point.

1.zip compress:

zip -r wordpress.zip wordpress/



2.ftp upload wordpress.zip


3.copy wp_xxx mysql data to remote new mysql server.


4.open the url.

amazon linux ami apache2 mysql error log - many connection errors

amazon linux ami apache2 mysql error log:

An error occurred

Application error

Exception information:

Message: SQLSTATE[HY000] [1129] Host 'ip-10-170-69-209.us-west-1.compute.internal' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

Stack trace:



reloved in ssh:

mysqladmin flush-hosts


or resloved in mysqladmin:
flush hosts

Monday, December 3, 2012

bing website tool seo suggest log

 


SEO 建议
错误数目 说明
1 此标题过短或过长。
1 此说明过长或过短。
1 页面缺失 meta language 信息。
清除选择
! 当前 URL 中检测到重定向 隐藏
HTTP 代码 URL
302 http://www.pk17s.cn/
200 http://www.pk17s.cn/s/cache/mw/task=htm&o=p&uilang=en&rsslang=en.htm
已分析 页面来源 原始
选定的建议
页面缺失 meta language 信息。 (此规则的问题标记在当前视图中不可见)

*JavaScript 密集页面在此视图中可能无法正常呈现。
中严重性问题

页面缺失 meta language 信息。

建议的操作:
在页面的 <head> 部分使用 <meta http-equiv="content-language" content="ll-cc"> 标记,其中 "ll-cc" 表示该内容适用的语言和国家/地区的区域性代码。另外,您也可以在 <html> 或 <title> 标记中使用 lang="ll-cc" 属性。

SEO 说明:
Meta Language 信息可作为帮助我们了解页面内容适用的目标语言和国家/地区的提示。如果您的网站不位于该国家/地区,则此信息便能起作用。使用 "content-language" 元标记将区域性代码嵌入页面的 <head> 部分。例如,<meta http-equiv="content-language" content="en-gb"> 表示页面的语言是英文,适用国家为英国。另外,您也可以使用 <html lang="en-gb"> 或 <title lang="en-gb">。


高严重性问题

此标题过短或过长。

建议的操作:
将标题的长度更改为 5 到 100 个字符之间

SEO 说明:
如果标题太短,则可能无法向我们提供了解页面相关性的足够信息。如果标题太长,则需要在搜索结果中进行缩短,而且您的关键字也可能无法显示在搜索结果页面上。您应将标题的长度保持在 5 到 100 个字符之间。


高严重性问题

此说明过长或过短。

建议的操作:
将页面源代码 <meta description> 标记中的说明的长度更改为 25 到 160 个字符之间。

SEO 说明:
搜索引擎抓取程序只显示该说明在搜索结果页中的前 150-160 个字符,因此如果说明过长,搜索者可能无法看到所有文本;如果说明过短,搜索引擎可能会添加页面其他位置找到的文本内容。请注意,如果搜索引擎认为您授权的其他说明与用户搜索内容的相关性更好,则可能显示该说明。

Saturday, December 1, 2012

android tts develop log

android text to voice doc:

public class
TextToSpeech
extends Object
java.lang.Object
↳ android.speech.tts.TextToSpeech
Class Overview
Synthesizes speech from text for immediate playback or to create a sound file.

A TextToSpeech instance can only be used to synthesize text once it has completed its initialization. Implement the TextToSpeech.OnInitListener to be notified of the completion of the initialization.
When you are done using the TextToSpeech instance, call the shutdown() method to release the native resources used by the TextToSpeech engine.

Summary
Nested Classes
class TextToSpeech.Engine Constants and parameter names for controlling text-to-speech.
class TextToSpeech.EngineInfo Information about an installed text-to-speech engine.
interface TextToSpeech.OnInitListener Interface definition of a callback to be invoked indicating the completion of the TextToSpeech engine initialization.
interface TextToSpeech.OnUtteranceCompletedListener Listener that will be called when the TTS service has completed synthesizing an utterance.
Constants
String ACTION_TTS_QUEUE_PROCESSING_COMPLETED Broadcast Action: The TextToSpeech synthesizer has completed processing of all the text in the speech queue.
int ERROR Denotes a generic operation failure.
int LANG_AVAILABLE Denotes the language is available for the language by the locale, but not the country and variant.
int LANG_COUNTRY_AVAILABLE Denotes the language is available for the language and country specified by the locale, but not the variant.
int LANG_COUNTRY_VAR_AVAILABLE Denotes the language is available exactly as specified by the locale.
int LANG_MISSING_DATA Denotes the language data is missing.
int LANG_NOT_SUPPORTED Denotes the language is not supported.
int QUEUE_ADD Queue mode where the new entry is added at the end of the playback queue.
int QUEUE_FLUSH Queue mode where all entries in the playback queue (media to be played and text to be synthesized) are dropped and replaced by the new entry.
int SUCCESS Denotes a successful operation.
Public Constructors
TextToSpeech(Context context, TextToSpeech.OnInitListener listener)
The constructor for the TextToSpeech class, using the default TTS engine.
TextToSpeech(Context context, TextToSpeech.OnInitListener listener, String engine)
The constructor for the TextToSpeech class, using the given TTS engine.
Public Methods
int addEarcon(String earcon, String filename)
Adds a mapping between a string of text and a sound file.
int addEarcon(String earcon, String packagename, int resourceId)
Adds a mapping between a string of text and a sound resource in a package.
int addSpeech(String text, String packagename, int resourceId)
Adds a mapping between a string of text and a sound resource in a package.
int addSpeech(String text, String filename)
Adds a mapping between a string of text and a sound file.
boolean areDefaultsEnforced()
Checks whether the user's settings should override settings requested by the calling application.
String getDefaultEngine()
Gets the package name of the default speech synthesis engine.
List<TextToSpeech.EngineInfo> getEngines()
Gets a list of all installed TTS engines.
Set<String> getFeatures(Locale locale)
Queries the engine for the set of features it supports for a given locale.
Locale getLanguage()
Returns a Locale instance describing the language currently being used by the TextToSpeech engine.
int isLanguageAvailable(Locale loc)
Checks if the specified language as represented by the Locale is available and supported.
boolean isSpeaking()
Checks whether the TTS engine is busy speaking.
int playEarcon(String earcon, int queueMode, HashMap<String, String> params)
Plays the earcon using the specified queueing mode and parameters.
int playSilence(long durationInMs, int queueMode, HashMap<String, String> params)
Plays silence for the specified amount of time using the specified queue mode.
int setEngineByPackageName(String enginePackageName)
This method is deprecated. This doesn'
t inform callers when the TTS engine has been initialized. TextToSpeech(Context, OnInitListener, String) can be used with the appropriate engine name. Also, there is no guarantee that the engine specified will be loaded. If it isn't installed or disabled, the user / system wide defaults will apply.
int setLanguage(Locale loc)
Sets the text-to-speech language.
int setOnUtteranceCompletedListener(TextToSpeech.OnUtteranceCompletedListener listener)
This method is deprecated. Use setOnUtteranceProgressListener(UtteranceProgressListener) instead.
int setOnUtteranceProgressListener(UtteranceProgressListener listener)
Sets the listener that will be notified of various events related to the synthesis of a given utterance.
int setPitch(float pitch)
Sets the speech pitch for the TextToSpeech engine.
int setSpeechRate(float speechRate)
Sets the speech rate.
void shutdown()
Releases the resources used by the TextToSpeech engine.
int speak(String text, int queueMode, HashMap<String, String> params)
Speaks the string using the specified queuing strategy and speech parameters.
int stop()
Interrupts the current utterance (whether played or rendered to file) and discards other utterances in the queue.
int synthesizeToFile(String text, HashMap<String, String> params, String filename)
Synthesizes the given text to a file using the specified parameters.
[Collapse]
Inherited Methods
From class java.lang.Object
Object clone()
Creates and returns a copy of this Object.
boolean equals(Object o)
Compares this instance with the specified object and indicates if they are equal.
void finalize()
Invoked when the garbage collector has detected that this instance is no longer reachable.
final Class<?> getClass()
Returns the unique instance of Class that represents this object'
s class.
int hashCode()
Returns an integer hash code for this object.
final void notify()
Causes a thread which is waiting on this object's monitor (by means of calling one of the wait() methods) to be woken up.
final void notifyAll()
Causes all threads which are waiting on this object'
s monitor (by means of calling one of the wait() methods) to be woken up.
String toString()
Returns a string containing a concise, human-readable description of this object.
final void wait()
Causes the calling thread to wait until another thread calls the notify() or notifyAll() method of this object.
final void wait(long millis, int nanos)
Causes the calling thread to wait until another thread calls the notify() or notifyAll() method of this object or until the specified timeout expires.
final void wait(long millis)
Causes the calling thread to wait until another thread calls the notify() or notifyAll() method of this object or until the specified timeout expires.
Constants
public static final String ACTION_TTS_QUEUE_PROCESSING_COMPLETED

Since: API Level 4
Broadcast Action: The TextToSpeech synthesizer has completed processing of all the text in the speech queue. Note that this notifies callers when the engine has finished has processing text data. Audio playback might not have completed (or even started) at this point. If you wish to be notified when this happens, see TextToSpeech.OnUtteranceCompletedListener.

Constant Value: "android.speech.tts.TTS_QUEUE_PROCESSING_COMPLETED"
public static final int ERROR

Since: API Level 4
Denotes a generic operation failure.

Constant Value: -1 (0xffffffff)
public static final int LANG_AVAILABLE

Since: API Level 4
Denotes the language is available for the language by the locale, but not the country and variant.

Constant Value: 0 (0x00000000)
public static final int LANG_COUNTRY_AVAILABLE

Since: API Level 4
Denotes the language is available for the language and country specified by the locale, but not the variant.

Constant Value: 1 (0x00000001)
public static final int LANG_COUNTRY_VAR_AVAILABLE

Since: API Level 4
Denotes the language is available exactly as specified by the locale.

Constant Value: 2 (0x00000002)
public static final int LANG_MISSING_DATA

Since: API Level 4
Denotes the language data is missing.

Constant Value: -1 (0xffffffff)
public static final int LANG_NOT_SUPPORTED

Since: API Level 4
Denotes the language is not supported.

Constant Value: -2 (0xfffffffe)
public static final int QUEUE_ADD

Since: API Level 4
Queue mode where the new entry is added at the end of the playback queue.

Constant Value: 1 (0x00000001)
public static final int QUEUE_FLUSH

Since: API Level 4
Queue mode where all entries in the playback queue (media to be played and text to be synthesized) are dropped and replaced by the new entry. Queues are flushed with respect to a given calling app. Entries in the queue from other callees are not discarded.

Constant Value: 0 (0x00000000)
public static final int SUCCESS

Since: API Level 4
Denotes a successful operation.

Constant Value: 0 (0x00000000)
Public Constructors
public TextToSpeech (Context context, TextToSpeech.OnInitListener listener)

Since: API Level 4
The constructor for the TextToSpeech class, using the default TTS engine. This will also initialize the associated TextToSpeech engine if it isn't already running.

Parameters
context The context this instance is running in.
listener The TextToSpeech.OnInitListener that will be called when the TextToSpeech engine has initialized.
public TextToSpeech (Context context, TextToSpeech.OnInitListener listener, String engine)

Since: API Level 14
The constructor for the TextToSpeech class, using the given TTS engine. This will also initialize the associated TextToSpeech engine if it isn'
t already running.

Parameters
context The context this instance is running in.
listener The TextToSpeech.OnInitListener that will be called when the TextToSpeech engine has initialized.
engine Package name of the TTS engine to use.
Public Methods
public int addEarcon (String earcon, String filename)

Since: API Level 4
Adds a mapping between a string of text and a sound file. Use this to add custom earcons.

Parameters
earcon The name of the earcon. Example: "[tick]"
filename The full path to the sound file (for example: "/sdcard/mysounds/tick.wav")
Returns
Code indicating success or failure. See ERROR and SUCCESS.
See Also
playEarcon(String, int, HashMap)
public int addEarcon (String earcon, String packagename, int resourceId)

Since: API Level 4
Adds a mapping between a string of text and a sound resource in a package. Use this to add custom earcons.

Parameters
earcon The name of the earcon. Example: "[tick]"
packagename the package name of the application that contains the resource. This can for instance be the package name of your own application. Example: "com.google.marvin.compass"
The package name can be found in the AndroidManifest.xml of the application containing the resource.
<manifest xmlns:android="..." package="com.google.marvin.compass">

resourceId Example: R.raw.tick_snd
Returns
Code indicating success or failure. See ERROR and SUCCESS.
See Also
playEarcon(String, int, HashMap)
public int addSpeech (String text, String packagename, int resourceId)

Since: API Level 4
Adds a mapping between a string of text and a sound resource in a package. After a call to this method, subsequent calls to speak(String, int, HashMap) will play the specified sound resource if it is available, or synthesize the text it is missing.

Parameters
text The string of text. Example: "south_south_east"
packagename Pass the packagename of the application that contains the resource. If the resource is in your own application (this is the most common case), then put the packagename of your application here.
Example: "com.google.marvin.compass"
The packagename can be found in the AndroidManifest.xml of your application.
<manifest xmlns:android="..." package="com.google.marvin.compass">

resourceId Example: R.raw.south_south_east
Returns
Code indicating success or failure. See ERROR and SUCCESS.
public int addSpeech (String text, String filename)

Since: API Level 4
Adds a mapping between a string of text and a sound file. Using this, it is possible to add custom pronounciations for a string of text. After a call to this method, subsequent calls to speak(String, int, HashMap) will play the specified sound resource if it is available, or synthesize the text it is missing.

Parameters
text The string of text. Example: "south_south_east"
filename The full path to the sound file (for example: "/sdcard/mysounds/hello.wav")
Returns
Code indicating success or failure. See ERROR and SUCCESS.
public boolean areDefaultsEnforced ()

Since: API Level 8
Checks whether the user's settings should override settings requested by the calling application. As of the Ice cream sandwich release, user settings never forcibly override the app's settings.

public String getDefaultEngine ()

Since: API Level 8
Gets the package name of the default speech synthesis engine.

Returns
Package name of the TTS engine that the user has chosen as their default.
public List<TextToSpeech.EngineInfo> getEngines ()

Since: API Level 14
Gets a list of all installed TTS engines.

Returns
A list of engine info objects. The list can be empty, but never null.
public Set<String> getFeatures (Locale locale)

Since: API Level 15
Queries the engine for the set of features it supports for a given locale. Features can either be framework defined, e.g. KEY_FEATURE_NETWORK_SYNTHESIS or engine specific. Engine specific keys must be prefixed by the name of the engine they are intended for. These keys can be used as parameters to speak(String, int, java.util.HashMap) and synthesizeToFile(String, java.util.HashMap, String). Features are boolean flags, and their values in the synthesis parameters must be behave as per parseBoolean(String).

Parameters
locale The locale to query features for.
public Locale getLanguage ()

Since: API Level 4
Returns a Locale instance describing the language currently being used by the TextToSpeech engine.

Returns
language, country (if any) and variant (if any) used by the engine stored in a Locale instance, or null on error.
public int isLanguageAvailable (Locale loc)

Since: API Level 4
Checks if the specified language as represented by the Locale is available and supported.

Parameters
loc The Locale describing the language to be used.
Returns
Code indicating the support status for the locale. See LANG_AVAILABLE, LANG_COUNTRY_AVAILABLE, LANG_COUNTRY_VAR_AVAILABLE, LANG_MISSING_DATA and LANG_NOT_SUPPORTED.
public boolean isSpeaking ()

Since: API Level 4
Checks whether the TTS engine is busy speaking. Note that a speech item is considered complete once it's audio data has been sent to the audio mixer, or written to a file. There might be a finite lag between this point, and when the audio hardware completes playback.

Returns
true if the TTS engine is speaking.
public int playEarcon (String earcon, int queueMode, HashMap<String, String> params)

Since: API Level 4
Plays the earcon using the specified queueing mode and parameters. The earcon must already have been added with addEarcon(String, String) or addEarcon(String, String, int).

Parameters
earcon The earcon that should be played
queueMode QUEUE_ADD or QUEUE_FLUSH.
params Parameters for the request. Can be null. Supported parameter names: KEY_PARAM_STREAM, KEY_PARAM_UTTERANCE_ID. Engine specific parameters may be passed in but the parameter keys must be prefixed by the name of the engine they are intended for. For example the keys "com.svox.pico_foo" and "com.svox.pico:bar" will be passed to the engine named "com.svox.pico" if it is being used.
Returns
ERROR or SUCCESS.
public int playSilence (long durationInMs, int queueMode, HashMap<String, String> params)

Since: API Level 4
Plays silence for the specified amount of time using the specified queue mode.

Parameters
durationInMs The duration of the silence.
queueMode QUEUE_ADD or QUEUE_FLUSH.
params Parameters for the request. Can be null. Supported parameter names: KEY_PARAM_UTTERANCE_ID. Engine specific parameters may be passed in but the parameter keys must be prefixed by the name of the engine they are intended for. For example the keys "com.svox.pico_foo" and "com.svox.pico:bar" will be passed to the engine named "com.svox.pico" if it is being used.
Returns
ERROR or SUCCESS.
public int setEngineByPackageName (String enginePackageName)

Since: API Level 8
This method is deprecated.
This doesn'
t inform callers when the TTS engine has been initialized. TextToSpeech(Context, OnInitListener, String) can be used with the appropriate engine name. Also, there is no guarantee that the engine specified will be loaded. If it isn't installed or disabled, the user / system wide defaults will apply.

Sets the TTS engine to use.

Parameters
enginePackageName The package name for the synthesis engine (e.g. "com.svox.pico")
Returns
ERROR or SUCCESS.
public int setLanguage (Locale loc)

Since: API Level 4
Sets the text-to-speech language. The TTS engine will try to use the closest match to the specified language as represented by the Locale, but there is no guarantee that the exact same Locale will be used. Use isLanguageAvailable(Locale) to check the level of support before choosing the language to use for the next utterances.

Parameters
loc The locale describing the language to be used.
Returns
Code indicating the support status for the locale. See LANG_AVAILABLE, LANG_COUNTRY_AVAILABLE, LANG_COUNTRY_VAR_AVAILABLE, LANG_MISSING_DATA and LANG_NOT_SUPPORTED.
public int setOnUtteranceCompletedListener (TextToSpeech.OnUtteranceCompletedListener listener)

Since: API Level 4
This method is deprecated.
Use setOnUtteranceProgressListener(UtteranceProgressListener) instead.

Sets the listener that will be notified when synthesis of an utterance completes.

Parameters
listener The listener to use.
Returns
ERROR or SUCCESS.
public int setOnUtteranceProgressListener (UtteranceProgressListener listener)

Since: API Level 15
Sets the listener that will be notified of various events related to the synthesis of a given utterance. See UtteranceProgressListener and KEY_PARAM_UTTERANCE_ID.

Parameters
listener the listener to use.
Returns
ERROR or SUCCESS
public int setPitch (float pitch)

Since: API Level 4
Sets the speech pitch for the TextToSpeech engine. This has no effect on any pre-recorded speech.

Parameters
pitch Speech pitch. 1.0 is the normal pitch, lower values lower the tone of the synthesized voice, greater values increase it.
Returns
ERROR or SUCCESS.
public int setSpeechRate (float speechRate)

Since: API Level 4
Sets the speech rate. This has no effect on any pre-recorded speech.

Parameters
speechRate Speech rate. 1.0 is the normal speech rate, lower values slow down the speech (0.5 is half the normal speech rate), greater values accelerate it (2.0 is twice the normal speech rate).
Returns
ERROR or SUCCESS.
public void shutdown ()

Since: API Level 4
Releases the resources used by the TextToSpeech engine. It is good practice for instance to call this method in the onDestroy() method of an Activity so the TextToSpeech engine can be cleanly stopped.

public int speak (String text, int queueMode, HashMap<String, String> params)

Since: API Level 4
Speaks the string using the specified queuing strategy and speech parameters.

Parameters
text The string of text to be spoken.
queueMode The queuing strategy to use, QUEUE_ADD or QUEUE_FLUSH.
params Parameters for the request. Can be null. Supported parameter names: KEY_PARAM_STREAM, KEY_PARAM_UTTERANCE_ID, KEY_PARAM_VOLUME, KEY_PARAM_PAN. Engine specific parameters may be passed in but the parameter keys must be prefixed by the name of the engine they are intended for. For example the keys "com.svox.pico_foo" and "com.svox.pico:bar" will be passed to the engine named "com.svox.pico" if it is being used.
Returns
ERROR or SUCCESS.
public int stop ()

Since: API Level 4
Interrupts the current utterance (whether played or rendered to file) and discards other utterances in the queue.

Returns
ERROR or SUCCESS.
public int synthesizeToFile (String text, HashMap<String, String> params, String filename)

Since: API Level 4
Synthesizes the given text to a file using the specified parameters.

Parameters
text The text that should be synthesized
params Parameters for the request. Can be null. Supported parameter names: KEY_PARAM_UTTERANCE_ID. Engine specific parameters may be passed in but the parameter keys must be prefixed by the name of the engine they are intended for. For example the keys "com.svox.pico_foo" and "com.svox.pico:bar" will be passed to the engine named "com.svox.pico" if it is being used.
filename Absolute file filename to write the generated audio data to.It should be something like "/sdcard/myappsounds/mysound.wav".
Returns
ERROR or SUCCESS.
Except as noted, this content is licensed under Apache 2.0. For details and restrictions, see the Content License.
Android 4.1 r1 - 11 Jul 2012 1:54
About Android | Legal | Support

this is also in your android install path:

file:///E:/Program%20Files/Android/android-sdk/docs/reference/android/speech/tts/TextToSpeech.html





 


android 2.3 engine locale list:

Language / Locale                 Supported since version

English, US (en_US) 1.1
German, Germany (de_DE) 1.1
Chinese, PRC (zh_CN) 1.5
Chinese, Taiwan (zh_TW) 1.5
Czech, Czech Republic (cs_CZ) 1.5
Dutch, Belgium (nl_BE) 1.5
Dutch, Netherlands (nl_NL) 1.5
English, Australia (en_AU) 1.5
English, Britain (en_GB) 1.5
English, Canada (en_CA) 1.5
English, New Zealand (en_NZ) 1.5
English, Singapore(en_SG) 1.5
French, Belgium (fr_BE) 1.5
French, Canada (fr_CA) 1.5
French, France (fr_FR) 1.5
French, Switzerland (fr_CH) 1.5
German, Austria (de_AT) 1.5
German, Liechtenstein (de_LI) 1.5
German, Switzerland (de_CH) 1.5
Italian, Italy (it_IT) 1.5
Italian, Switzerland (it_CH) 1.5
Japanese (ja_JP) 1.5
Korean (ko_KR) 1.5
Polish (pl_PL) 1.5
Russian (ru_RU) 1.5
Spanish (es_ES) 1.5
Arabic, Egypt (ar_EG) 2.3
Arabic, Israel (ar_IL) 2.3
Bulgarian, Bulgaria (bg_BG) 2.3
Catalan, Spain (ca_ES) 2.3
Croatian, Croatia (hr_HR) 2.3
Danish, Denmark(da_DK) 2.3
English, India (en_IN) 2.3
English, Ireland (en_IE) 2.3
English, Zimbabwe (en_ZA) 2.3
Finnish, Finland (fi_FI) 2.3
Greek, Greece (el_GR) 2.3
Hebrew, Israel (iw_IL)* 2.3
Hindi, India (hi_IN) 2.3
Hungarian, Hungary (hu_HU) 2.3
Indonesian, Indonesia (in_ID)* 2.3
Latvian, Latvia (lv_LV) 2.3
Lithuanian, Lithuania (lt_LT) 2.3
Norwegian-Bokmol, Norway(nb_NO) 2.3
Portuguese, Brazil (pt_BR) 2.3
Portuguese, Portugal (pt_PT) 2.3
Romanian, Romania (ro_RO) 2.3
Serbian (sr_RS) 2.3
Slovak, Slovakia (sk_SK) 2.3
Slovenian, Slovenia (sl_SI) 2.3
Spanish, US (es_US) 2.3
Swedish, Sweden (sv_SE) 2.3
Tagalog, Philippines (tl_PH) 2.3
Thai, Thailand (th_TH) 2.3
Turkish, Turkey (tr_TR) 2.3
Ukrainian, Ukraine (uk_UA) 2.3
Vietnamese, Vietnam (vi_VN) 2.3

4.0.3 tts engine list:

Arabic, Egypt (ar_EG)
Arabic, Israel (ar_IL)
Bulgarian, Bulgaria (bg_BG)
Catalan, Spain (ca_ES)
Czech, Czech Republic (cs_CZ)
Danish, Denmark(da_DK)
German, Austria (de_AT)
German, Switzerland (de_CH)
German, Germany (de_DE)
German, Liechtenstein (de_LI)
Greek, Greece (el_GR)
English, Australia (en_AU)
English, Canada (en_CA)
English, Britain (en_GB)
English, Ireland (en_IE)
English, India (en_IN)
English, New Zealand (en_NZ)
English, Singapore(en_SG)
English, US (en_US)
English, South Africa (en_ZA)
Spanish (es_ES)
Spanish, US (es_US)
Finnish, Finland (fi_FI)
French, Belgium (fr_BE)
French, Canada (fr_CA)
French, Switzerland (fr_CH)
French, France (fr_FR)
Hebrew, Israel (he_IL)
Hindi, India (hi_IN)
Croatian, Croatia (hr_HR)
Hungarian, Hungary (hu_HU)
Indonesian, Indonesia (id_ID)
Italian, Switzerland (it_CH)
Italian, Italy (it_IT)
Japanese (ja_JP)
Korean (ko_KR)
Lithuanian, Lithuania (lt_LT)
Latvian, Latvia (lv_LV)
Norwegian bokmål, Norway (nb_NO)
Dutch, Belgium (nl_BE)
Dutch, Netherlands (nl_NL)
Polish (pl_PL)
Portuguese, Brazil (pt_BR)
Portuguese, Portugal (pt_PT)
Romanian, Romania (ro_RO)
Russian (ru_RU)
Slovak, Slovakia (sk_SK)
Slovenian, Slovenia (sl_SI)
Serbian (sr_RS)
Swedish, Sweden (sv_SE)
Thai, Thailand (th_TH)
Tagalog, Philippines (tl_PH)
Turkish, Turkey (tr_TR)
Ukrainian, Ukraine (uk_UA)
Vietnamese, Vietnam (vi_VN)
Chinese, PRC (zh_CN)
Chinese, Taiwan (zh_TW)





android 2.3安装中文语音引擎.


1.点这里:

http://www.coolapk.com/apk/4526/




下载对应的主程序+离线语音包.


2. 修复系统的 设置 –> 语音输入与输出 选项.


我的是华为C8650+. android 2.3.6 系统自带操作系统.


先找了一个语音选项修复的应用,只看见广告有效,其它功能一律一点退出.


后找了”Vlingo虚拟助手”,也没有看见有该选项.


又装了"科大讯飞语音输入法",只看见输入法有它的选项,语音输入与输出还是没有见到.


高度了代码,朗读的TTS还是不运行中文语言.


又找了文档说,TextToSpeech.setEngineByPackageName(String engineName) 可以设置语言引擎,如果没有安装该引擎,系统会默认使用缺省的.


这是它的文档网址:http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece7631046893b4c4380146d96864968d4e414c422461a163cbde070724746899820301cfc091ab1a168252a5577f1c893d60bc0bf932d2e8b2d326459db0144dc4af39d06789a76875a98f445a1edac7484aea3959915&p=817fc307c5934eac58eec92d0216d621&newp=8b2a95448e8909ff57ee947d4c508a305c5bc4387ebad714788cd900&user=baidu&fm=sc&query=android+intent+tts&qid=c6efdc2402a9ed2b&p1=1


后面通过TextToSpeech.setEngineByPackageName("com.iflytek.tts") 这样也同上面一样.不能用.虽然这个函数返回值是0.


准备使用讯飞语音.不知道这支持不支持离线.


后来找到这句话:

缺少相应的程序模块,系统被精简了
在/system/app中加入以下系统文件:Picotts.apk,TtsService.apk,改权限为rw-r--r--重启即可



比如,我的手机是华为C8650+,去上网找相应的ROM,再弄出上面的文件到手机里.一会尝试.

Friday, November 30, 2012

html5 的manifest禁用

 

当你启用了一个这样的html5的清单缓存文件后.它errro让我处理好久

<html manifest="cache.manifest">



所以你网站有使用cache.manifest这个同地址的的网页全会被这个所缓存.


如果你想禁用它,改成这样,没有用

<html>
唯一的办法是,在服务器上删除cache.manifest文件. 让它返回404

android develop error log

 

error log:

Falling back on PROMPT mode since _cordovaNative is missing.



by:


i only add cordova-2.2.0.js file to my project source.


and need to add full cordova javascript framework. wait for me to found that.

Thursday, November 29, 2012

android:debuggable字段说明

关于android develop开发说明的android:debuggable字段说明:

android:debuggable字段说明这个字段,在高度时,编译器默认设置为true,当导出签名包时,默认设置为false.

如果判断:

try{
debugMode = (this.getPackageManager().getPackageInfo("pk17s.cn", 0).applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
}catch(Exception e){
debugMode = false;
}


this对象为界面类,Context的基类即可.


Monday, November 26, 2012

pkrss source 之 chrome.tts试用

今天我的pkrss看到有文章说chrome有chrome.tts的接口,所以我写下以下测试source:

// http://developer.chrome.com/extensions/tts.html
var speaktts_chrome = {
'tts':null,

'support':function(){
if((typeof(chrome) != "undefined") && chrome && (typeof(chrome.tts) != "undefined") && chrome.tts )
return true;
return false;
},

'init':function(){

if(!this.support())
return;

this.tts = chrome.tts;

speaktts.tts = this;
},

'ttsList':null,
'getTTSList':function(cb){
if(!this.ttsList){
this.ttsList = [];
chrome.tts.getVoices(function(voices) {
var tts,ttslist,ttsitem;
for (var i = 0; i < voices.length; i++) {
tts = voices[i];
ttsitem = ttslist[tts.lang];
if(!ttsitem){
ttsitem = {'locale':tts.lang,'tts':[]};
speaktts_chrome.ttsList.push(ttsitem);
}
ttsitem.tts.push({"id":tts.extensionId,"name":tts.voiceName});
}
});
}else{
if(cb)
cb(this.ttsList);
}
},

'speak':function(id){
var s = pksetting.user.locale2tts[pksetting.user.locale];
if(s){
if(s!="")
s = "&tts=" + s;
}else{
s = "";
}

var info = pkrsslib.getItemById(id);

this.tts.speak(
info.title,{
'lang': 'zh-CN',
'onEvent': function(event) {
// event.type in
// 'start': The engine has started speaking the utterance.
// 'word': A word boundary was reached. Use event.charIndex to determine the current speech position.
// 'sentence': A sentence boundary was reached. Use event.charIndex to determine the current speech position.
// 'marker': An SSML marker was reached. Use event.charIndex to determine the current speech position.
// 'end': The engine has finished speaking the utterance.
// 'interrupted': This utterance was interrupted by another call to speak() or stop() and did not finish.
// 'cancelled': This utterance was queued, but then cancelled by another call to speak() or stop() and never began to speak at all.
// 'error': An engine-specific error occurred and this utterance cannot be spoken. Check event.errorMessage for details.
// event.charIndex current position
if(event.type == 'end'){
speaktts.playing = false;

if(speaktts.autonext)
pkrssspeak.speaknext();
}
}
});
},

'stop':function(){
if(this.tts.played)
this.tts.pause();
}
};



结果发现,人家只支持在chrome store package的应用程序中.


我就把它打包到我的原来的chrome包中加载我的目标网址.


结果它出现以下错误:

尝试安装此扩展程序时出现以下警告:
'tts' is only allowed for extensions, legacy packaged apps and packaged apps, and this is a hosted app.




然后在鼠标单击事件中增加请求权限代码.


chrome.permissions.request({permissions: ['*://localhost/*','ttsEngine']}, 
function(p1,p2){
});


说Error during permissions.request: '*://localhost/*' is not a recognized permission.


改成


chrome.permissions.request({permissions: ['ttsEngine']}, 
function(p1,p2){
});


说:Error during permissions.request: The optional permissions API does not support 'ttsEngine'.


把ttsEngine改成tts也是一样.