diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..10fa70b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,14 @@
+# Windows
+[Dd]esktop.ini
+Thumbs.db
+$RECYCLE.BIN/
+
+# macOS
+.DS_Store
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+
+# Node.js
+node_modules/
diff --git a/12.jpg b/12.jpg
new file mode 100644
index 0000000..020c9f5
Binary files /dev/null and b/12.jpg differ
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..7bb43b8
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,24 @@
+LICENSE - "MIT License"
+
+Copyright (c) 2016 by Tencent Cloud
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c80f234
--- /dev/null
+++ b/README.md
@@ -0,0 +1,49 @@
+# -
+一个用来背单词每天打卡的微信小程序,还有词汇测试,包含多种词库
+后台由腾讯云wafer解决方案
+=====================================
+![image](https://raw.githubusercontent.com/flymysql/WeChat-applets/master/12.jpg)
+
+## 源码简介
+
+```tree
+Demo
+├── LICENSE
+├── README.md
+├── app.js
+├── app.json
+├── config.js
+├── package.json
+├── pages
+│ ├── about
+│ ├── audio_rest
+│ ├── choice
+│ ├── collect_test
+│ ├── detail_word
+│ ├── index
+│ ├── job
+│ ├── me
+│ ├── my_word
+│ ├── rank
+│ ├── search
+│ ├── study
+│ ├── suggestion
+│ └── test
+├── utils
+├── data
+├── assets
+├── images
+└── vendor
+ └── qcloud-weapp-client-sdk/
+```
+
+`app.js` 是小程序入口文件。
+
+`app.json` 是小程序的微信配置,其中指定了本示例的两个页面,页面分别在 `pages/index/` 和 `pages/chat/` 目录下。
+
+`config.js` 是我们小程序自己的业务配置。
+
+`wafer2-client-sdk` 是[客户端 SDK](https://github.com/tencentyun/wafer2-client-sdk)
+
+仅供学习,转载请注明出处
+另外个人博客求一波友链 https://www.idealli.com
diff --git a/app.js b/app.js
new file mode 100644
index 0000000..9a2a926
--- /dev/null
+++ b/app.js
@@ -0,0 +1,193 @@
+//app.js
+
+var qcloud = require('./vendor/wafer2-client-sdk/index');
+var config = require('./config');
+var util = require('./utils/util.js')
+
+App({
+ appData: {
+ appId: config.service.appId,
+ baseUrl: `${config.service.host}/weapp/`,
+ tunnelStatus: 'close',//统一管理唯一的信道连接的状态:connect、close、reconnecting、reconnect、error
+ friendsFightingRoom: undefined,//好友对战时创建的唯一房间名,作为好友匹配的标识
+ },
+ onLaunch(opt) {
+ this.appData.opt = opt
+ qcloud.setLoginUrl(config.service.loginUrl); //设置登录地址
+ this.doLogin();
+ },
+ onShow(opt) {
+ this.storeUser_network(opt)//每次打开程序都启动存储用户关系表
+ },
+ doLogin() { //登录
+ let that = this
+ util.showBusy('正在登录');
+ qcloud.login({
+ success(result) {//此处的result竟然不包含openid,所以res取缓存中的数据
+ util.showSuccess('登录成功')
+ let res = wx.getStorageSync('user_info_F2C224D4-2BCE-4C64-AF9F-A6D872000D1A');
+ if (that.userInfoReadyCallback) {
+ that.userInfoReadyCallback(res)
+ }
+ },
+ fail(error) {
+ util.showModel('登录失败', error);
+ }
+ });
+ },
+ pageGetUserInfo(page, openIdReadyCallback) { //在page中获取用户信息
+ const userInfo = wx.getStorageSync('user_info_F2C224D4-2BCE-4C64-AF9F-A6D872000D1A')
+ if (userInfo) {
+ page.setData({
+ userInfo,
+ openId: userInfo.openId
+ })
+ this.appData.openId = userInfo.openId
+ if (openIdReadyCallback) {
+ openIdReadyCallback(userInfo.openId)
+ }
+ } else {
+ this.userInfoReadyCallback = (userInfo) => { //获取用户信息后的回调函数
+ page.setData({ //每个page都会自动存储userInfo和openId
+ userInfo,
+ openId: userInfo.openId
+ })
+ if (openIdReadyCallback) { //如果设置了openid的回调函数,则调用回调
+ openIdReadyCallback(userInfo.openId)
+ }
+ }
+ }
+ },
+ //tunnel:由于一个小程序只能同时连接一个信道而且设计页面跳转后信道对象会销毁问题,所以将其放在app.js中统一管理
+ tunnelCreate() {//创建一个新信道,并监听相关数据的变化
+ const that = this
+ const tunnel = that.tunnel = new qcloud.Tunnel(config.service.tunnelUrl) //放在app对象下供全局使用
+ tunnel.open()
+ tunnel.on('connect', () => {//监听信道连接
+ console.info("tunnelStatus = 'connect'")
+ this.appData.tunnelStatus = 'connect' //改变信道状态为已连接
+ if (that.tunnelConnectCallback) {//设置回调
+ that.tunnelConnectCallback()
+ }
+ })
+ tunnel.on('close', () => {//监听信道断开
+ console.info("tunnelStatus = 'close'")
+ this.appData.tunnelStatus = 'close' //改变信道状态为已断开
+ if (that.tunnelCloseCallback) {//设置回调
+ that.tunnelCloseCallback()
+ }
+ })
+ tunnel.on('reconnecting', () => {//监听信道重新链接
+ console.info("tunnelStatus = 'reconnecting'")
+ this.appData.tunnelStatus = 'reconnecting' //改变信道状态为重新连接中
+ if (that.tunnelReconnectingCallback) {//设置回调
+ that.tunnelReconnectingCallback()
+ }
+ })
+ tunnel.on('reconnect', () => {//监听信道重新连接成功
+ console.info("tunnelStatus = 'reconnect'")
+ console.info('重连后的信道为:' + tunnel.socketUrl.slice(tunnel.socketUrl.indexOf('tunnelId=') + 9, tunnel.socketUrl.indexOf('&')))
+ this.appData.tunnelStatus = 'reconnect' //改变信道状态为重新连接成功
+ if (that.tunnelReconnectCallback) {//设置回调
+ that.tunnelReconnectCallback()
+ }
+ })
+ tunnel.on('error', () => {//监听信道发生错误
+ console.info("tunnelStatus = 'error'")
+ this.appData.tunnelStatus = 'error' //改变信道状态为发生错误
+ util.showSuccess('您已断线,请检查联网')
+ wx.navigateBack({
+ url: '../entry/entry'
+ })
+ if (that.tunnelErrorCallback) {//设置回调
+ that.tunnelErrorCallback()
+ }
+ })
+ tunnel.on('PING', () => {//PING-PONG机制:监听服务器PING
+ console.info("接收到PING")
+ tunnel.emit('PONG', {//给出回应
+ openId: this.appData.openId
+ })
+ console.info("发出了PONG")
+ })
+
+ },
+
+ /******************用户关系点击表操作******************/
+ //注意1:所有从分享中启动的页面onLoad都添加:
+ /*
+ app.appData.fromClickId = opt.currentClickId
+ app.upDateUser_networkFromClickId = require('../../utils/upDateUser_networkFromClickId.js').upDateUser_networkFromClickId
+ wx.showShareMenu({
+ withShareTicket: true
+ })
+ */
+ //注意2:所有分享页面路径都添加:?currentClickId=' + app.appData.currentClickId,
+ //注意3:所有分享页面的分享成功回调都添加: require('../../utils/upDateShareInfoToUser_network.js').upDateShareInfoToUser_network(app,that,res)
+
+ storeUser_network(opt) {
+ const that = this
+ const userInfo = wx.getStorageSync('user_info_F2C224D4-2BCE-4C64-AF9F-A6D872000D1A')
+ if (userInfo) {//已缓存的用户数据直接用
+ getGId(that, userInfo, opt)
+ } else {
+ this.userInfoReadyCallback = (userInfo) => { //获取用户信息后的回调函数
+ getGId(that, userInfo, opt)
+ }
+ }
+ function getGId(that, userInfo, opt) {
+ //判断是否是从微信群内打开该程序的
+ wx.getShareInfo({
+ shareTicket: opt.shareTicket,
+ //含GId的情况
+ success: (res) => {
+ qcloud.request({
+ login: false,
+ data: {
+ appId: that.appData.appId,
+ openId: userInfo.openId,
+ encryptedData: res.encryptedData,
+ iv: res.iv
+ },
+ url: `${that.appData.baseUrl}getGId`,
+ success: (res) => {
+ let GId = res.data.data
+ store(that, userInfo, opt, GId)
+ }
+ })
+ },
+ //不含GId的情况
+ fail: function (res) {
+ store(that, userInfo, opt)
+ }
+ })
+ }
+ function store(that, userInfo, opt, GId = '') { //参数内要写that:that作为一个对象不能凭空产生
+ let data = {
+ //clickId:自动生成的数据,
+ fromClickId: that.appData.fromClickId ? that.appData.fromClickId : 0,//从哪个clickId那里打开的
+ appId: that.appData.appId,
+ openId: userInfo.openId,
+ fromGId: GId,
+ scene: opt.scene,
+ //time:自动生成的数据,
+ //param_1:转发时才会更新当前clickId中的param_1数据
+ }
+ //将数据存储到数据库点击表中,同时将得到的clickId放在全局变量供page分享时调用
+ qcloud.request({
+ login: false,
+ data,
+ url: `${that.appData.baseUrl}storeUser_network`,
+ success: (res) => {
+ let currentClickId = res.data.data
+ that.appData.currentClickId = currentClickId//设置当前新插入的clickId为全局fromClickId
+ let fromClickId = that.appData.fromClickId
+ if (that.upDateUser_networkFromClickId && fromClickId) {//存在fromClickId,则进行数据库更新
+ that.upDateUser_networkFromClickId(that, currentClickId, fromClickId)
+ }
+ }
+ });
+ }
+ },
+
+})
\ No newline at end of file
diff --git a/app.json b/app.json
new file mode 100644
index 0000000..7ceb326
--- /dev/null
+++ b/app.json
@@ -0,0 +1,55 @@
+{
+ "pages":[
+ "pages/job/job",
+ "pages/study/study",
+ "pages/search/search",
+ "pages/detail-word/detail-word",
+ "pages/me/me",
+ "pages/choice/choice",
+ "pages/test/test",
+ "pages/collect_card/collect_card",
+ "pages/audio_test/audio_test",
+ "pages/about/about",
+ "pages/my_word/my_word",
+ "pages/suggestion/suggestion",
+ "pages/sql/sql",
+
+ "pages/rank/rank"
+
+ ],
+
+ "window":{
+ "backgroundTextStyle":"light",
+ "backgroundColor": "#fff",
+ "navigationBarBackgroundColor": "#fff",
+ "navigationBarTitleText": "小鸡单词",
+ "navigationBarTextStyle":"black"
+ }
+,
+ "tabBar": {
+ "color": "#000",
+ "selectedColor": "#000",
+ "borderStyle": "white",
+ "backgroundColor": "#ffffff",
+ "list": [
+ {
+ "pagePath": "pages/job/job",
+ "text": "首页",
+ "iconPath": "images/home2.png",
+ "selectedIconPath": "images/home.png"
+ },
+ {
+ "pagePath": "pages/search/search",
+ "text": "查单词",
+ "iconPath": "images/search2.png",
+ "selectedIconPath": "images/search.png"
+ },
+ {
+ "pagePath": "pages/me/me",
+ "text": "我的",
+ "iconPath": "images/ji.png",
+ "selectedIconPath": "images/ji2.png"
+ }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app.wxss b/app.wxss
new file mode 100644
index 0000000..5abe0ba
--- /dev/null
+++ b/app.wxss
@@ -0,0 +1,14 @@
+/**app.wxss**/
+
+page {
+ background-color: #EFEFF4;
+}
+
+.container {
+ height: 100%;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: space-between;
+ box-sizing: border-box;
+}
diff --git a/assets/font/chalkboard.ttf b/assets/font/chalkboard.ttf
new file mode 100644
index 0000000..b003b87
Binary files /dev/null and b/assets/font/chalkboard.ttf differ
diff --git a/config.js b/config.js
new file mode 100644
index 0000000..388ebf9
--- /dev/null
+++ b/config.js
@@ -0,0 +1,32 @@
+/**
+ * 小程序配置文件
+ */
+
+// 此处主机域名修改成腾讯云解决方案分配的域名
+var host = 'https://www.sinx2018.cn' //开发环境
+
+var appId ='你的appid'
+
+var config = {
+
+ // 下面的地址配合云端 Demo 工作
+ service: {
+ appId,
+
+ host,
+
+ // 登录地址,用于建立会话
+ loginUrl: `${host}/weapp/login`,
+
+ // 测试的请求地址,用于测试会话
+ requestUrl: `${host}/weapp/user`,
+
+ // 测试的信道服务地址
+ tunnelUrl: `${host}/weapp/tunnel`,
+
+ // 上传图片接口
+ uploadUrl: `${host}/weapp/upload`
+ }
+}
+
+module.exports = config
diff --git a/data/cet4.js b/data/cet4.js
new file mode 100644
index 0000000..af0b86f
--- /dev/null
+++ b/data/cet4.js
@@ -0,0 +1,2904 @@
+
+
+var word_list=
+[ 'sincere',
+ 'mood',
+ 'static',
+ 'senator',
+ 'hobby',
+ 'lad',
+ 'equip',
+ 'frown',
+ 'fasten',
+ 'software',
+ 'stir',
+ 'distribution',
+ 'flexible',
+ 'solution',
+ 'panel',
+ 'ministry',
+ 'supreme',
+ 'describe',
+ 'limb',
+ 'circumstance',
+ 'core',
+ 'assistant',
+ 'mess',
+ 'minus',
+ 'statistic',
+ 'pregnant',
+ 'sector',
+ 'detection',
+ 'statue',
+ 'bride',
+ 'cycle',
+ 'saucer',
+ 'skillful',
+ 'civilization',
+ 'overhead',
+ 'clash',
+ 'grant',
+ 'bond',
+ 'staff',
+ 'intermediate',
+ 'guitar',
+ 'comprehensive',
+ 'presence',
+ 'appliance',
+ 'cushion',
+ 'emergency',
+ 'solve',
+ 'label',
+ 'slim',
+ 'status',
+ 'steady',
+ 'include',
+ 'resistance',
+ 'prime',
+ 'ambassador',
+ 'derive',
+ 'sponsor',
+ 'proportion',
+ 'mental',
+ 'punch',
+ 'result',
+ 'client',
+ 'steamer',
+ 'option',
+ 'dormitory',
+ 'attitude',
+ 'steep',
+ 'agency',
+ 'steer',
+ 'scandal',
+ 'definite',
+ 'cautious',
+ 'prayer',
+ 'nest',
+ 'domestic',
+ 'chest',
+ 'airline',
+ 'rebel',
+ 'satisfactory',
+ 'stem',
+ 'render',
+ 'object',
+ 'gardener',
+ 'shrink',
+ 'parade',
+ 'rumour',
+ 'rug',
+ 'establish',
+ 'primarily',
+ 'kindness',
+ 'breast',
+ 'sticky',
+ 'boost',
+ 'fund',
+ 'incredible',
+ 'abroad',
+ 'detective',
+ 'stiff',
+ 'stimulate',
+ 'fame',
+ 'consume',
+ 'accelerate',
+ 'lightning',
+ 'sting',
+ 'bound',
+ 'rouse',
+ 'cultivate',
+ 'material',
+ 'personnel',
+ 'display',
+ 'particle',
+ 'frog',
+ 'impression',
+ 'biology',
+ 'drunk',
+ 'barrier',
+ 'stock',
+ 'fisherman',
+ 'politician',
+ 'royal',
+ 'barber',
+ 'stocking',
+ 'delegate',
+ 'highlight',
+ 'depression',
+ 'signature',
+ 'atmosphere',
+ 'evaluate',
+ 'rescue',
+ 'personality',
+ 'latter',
+ 'parliament',
+ 'input',
+ 'partial',
+ 'loyalty',
+ 'calendar',
+ 'overlook',
+ 'debate',
+ 'stoop',
+ 'cube',
+ 'submerge',
+ 'credit',
+ 'surrounding',
+ 'stove',
+ 'submit',
+ 'carrier',
+ 'imply',
+ 'strain',
+ 'consist',
+ 'strap',
+ 'efficient',
+ 'accommodation、',
+ 'strategic',
+ 'layer',
+ 'exclaim',
+ 'representative',
+ 'forecast',
+ 'discipline',
+ 'neutral',
+ 'interpret',
+ 'knot',
+ 'desirable',
+ 'promote',
+ 'acceptance',
+ 'mayor',
+ 'equation',
+ 'routine',
+ 'ripe',
+ 'prove',
+ 'likewise',
+ 'chap',
+ 'explore',
+ 'overnight',
+ 'strategy',
+ 'straw',
+ 'bind',
+ 'stream',
+ 'bearing',
+ 'suppose',
+ 'access',
+ 'remain',
+ 'abstract',
+ 'stretch',
+ 'approximate',
+ 'striking',
+ 'abuse',
+ 'critic',
+ 'interpretation',
+ 'string',
+ 'illustrate',
+ 'helpful',
+ 'leak',
+ 'accountant',
+ 'crude',
+ 'product',
+ 'strip',
+ 'stripe',
+ 'communicate',
+ 'following',
+ 'hedge',
+ 'consumer',
+ 'emotional',
+ 'craft',
+ 'institute',
+ 'indispensable',
+ 'scheme',
+ 'scale',
+ 'replace',
+ 'bark',
+ 'gramme',
+ 'congress',
+ 'bump',
+ 'stroke',
+ 'ingredient',
+ 'arbitrary',
+ 'pinch',
+ 'exploit',
+ 'action',
+ 'ash',
+ 'rope',
+ 'bulk',
+ 'strengthen',
+ 'independent',
+ 'board',
+ 'recall',
+ 'studio',
+ 'grave',
+ 'eve',
+ 'formal',
+ 'absorb',
+ 'sensitive',
+ 'ability',
+ 'fairy',
+ 'talent',
+ 'comparison',
+ 'stuff',
+ 'brow',
+ 'infer',
+ 'invasion',
+ 'grand',
+ 'stress',
+ 'journalist',
+ 'supply',
+ 'penetrate',
+ 'subject',
+ 'pole',
+ 'raw',
+ 'embassy',
+ 'carpenter',
+ 'appropriate',
+ 'socialist',
+ 'protein',
+ 'enlarge',
+ 'inherit',
+ 'chemist',
+ 'conflict',
+ 'drain',
+ 'architecture',
+ 'charity',
+ 'entitle',
+ 'subsequent',
+ 'span',
+ 'pea',
+ 'instruct',
+ 'spite',
+ 'slender',
+ 'automobile',
+ 'behavior',
+ 'envy',
+ 'substance',
+ 'contest',
+ 'spit',
+ 'mutual',
+ 'dorm',
+ 'substantial',
+ 'meanwhile',
+ 'desire',
+ 'conviction',
+ 'interaction',
+ 'menu',
+ 'frustrate',
+ 'belief',
+ 'confusion',
+ 'civilize',
+ 'preface',
+ 'chemical',
+ 'horizontal',
+ 'invitation',
+ 'auto',
+ 'electric',
+ 'purse',
+ 'blank',
+ 'courtyard',
+ 'rural',
+ 'discourage',
+ 'reflection',
+ 'rainbow',
+ 'slide',
+ 'removal',
+ 'missing',
+ 'graph',
+ 'fortnight14',
+ 'disgust',
+ 'offense',
+ 'allow',
+ 'proportional',
+ 'devote',
+ 'empire',
+ 'microphone',
+ 'subtract',
+ 'pace',
+ 'gesture',
+ 'loop',
+ 'sheer',
+ 'cupboard',
+ 'sore',
+ 'raid',
+ 'lower',
+ 'comment',
+ 'distress',
+ 'publicity',
+ 'spin',
+ 'museum',
+ 'outstanding',
+ 'rack',
+ 'rent',
+ 'housing',
+ 'complain',
+ 'evidently',
+ 'lung',
+ 'deny',
+ 'ownership',
+ 'rid',
+ 'harness',
+ 'acknowledge',
+ 'passion',
+ 'genuine',
+ 'imaginary',
+ 'prompt',
+ 'invention',
+ 'lucky',
+ 'confidence',
+ 'suburb',
+ 'industrialize',
+ 'fearful',
+ 'intelligence',
+ 'childhood',
+ 'crush',
+ 'intention',
+ 'finding',
+ 'subway',
+ 'magnet',
+ 'defect',
+ 'attribute',
+ 'release',
+ 'succession',
+ 'chip',
+ 'similar',
+ 'maintain',
+ 'advertisement',
+ 'privilege',
+ 'dull',
+ 'provoke',
+ 'function',
+ 'substitute',
+ 'extreme',
+ 'orbit',
+ 'correspondent',
+ 'fashionable',
+ 'allowance',
+ 'component',
+ 'interrupt',
+ 'successive',
+ 'external',
+ 'somehow',
+ 'declaration',
+ 'distribute',
+ 'specialist',
+ 'rotate',
+ 'rod',
+ 'suck',
+ 'negative',
+ 'suffer',
+ 'sufficient',
+ 'court',
+ 'curl',
+ 'bureau',
+ 'moist',
+ 'relative',
+ 'suggestion',
+ 'restless',
+ 'delivery',
+ 'claim',
+ 'suicide',
+ 'dip',
+ 'profit',
+ 'lease',
+ 'disposal',
+ 'appeal',
+ 'cart',
+ 'stable',
+ 'married',
+ 'reckon',
+ 'practically',
+ 'reception',
+ 'jury',
+ 'glory',
+ 'mist',
+ 'congratulate',
+ 'sum',
+ 'execute',
+ 'essay',
+ 'route',
+ 'merit',
+ 'local',
+ 'compromise',
+ 'rally',
+ 'feather',
+ 'characterize',
+ 'explode',
+ 'aware',
+ 'grain',
+ 'kettle',
+ 'summarize',
+ 'faulty',
+ 'highly',
+ 'summary',
+ 'conservation',
+ 'summit',
+ 'reward',
+ 'available',
+ 'specialize',
+ 'structure',
+ 'resident',
+ 'boundary',
+ 'radical',
+ 'leading',
+ 'rag',
+ 'prescribe',
+ 'demonstrate',
+ 'manner',
+ 'sunrise',
+ 'construct',
+ 'railway',
+ 'opportunity',
+ 'lag',
+ 'fade',
+ 'sunset',
+ 'singular',
+ 'broom',
+ 'beneath',
+ 'recreation',
+ 'procession',
+ 'tackle',
+ 'combination',
+ 'hell',
+ 'proof',
+ 'resort',
+ 'recruit',
+ 'contrast',
+ 'sunshine',
+ 'introduction',
+ 'ancestor',
+ 'split',
+ 'painful',
+ 'superb',
+ 'interest',
+ 'noticeable',
+ 'graduate',
+ 'glance',
+ 'bloody',
+ 'fierce',
+ 'paragraph',
+ 'enquire',
+ 'preparation',
+ 'justice',
+ 'drip',
+ 'emit',
+ 'superficial',
+ 'recommendation',
+ 'sole',
+ 'folk',
+ 'rank',
+ 'motor',
+ 'airport',
+ 'enclose',
+ 'bounce',
+ 'occasion',
+ 'determine',
+ 'advisable',
+ 'permission',
+ 'statement',
+ 'award',
+ 'bold',
+ 'so-called',
+ 'superior',
+ 'sunlight',
+ 'alternative',
+ 'kingdom',
+ 'mobile',
+ 'damn',
+ 'storage',
+ 'supplement',
+ 'locate',
+ 'cabin',
+ 'majority',
+ 'receiver',
+ 'support',
+ 'Bible',
+ 'assign',
+ 'episode',
+ 'fatal',
+ 'pad',
+ 'excursion',
+ 'ignorant',
+ 'county',
+ 'condense',
+ 'heal',
+ 'asset',
+ 'involve',
+ 'rear',
+ 'hollow',
+ 'charter',
+ 'leadership',
+ 'shallow',
+ 'procedure',
+ 'impressive',
+ 'controversial',
+ 'curve',
+ 'spiritual',
+ 'astonish',
+ 'fold',
+ 'alert',
+ 'condition',
+ 'segment',
+ 'cabbage',
+ 'condemn',
+ 'mild',
+ 'surgery',
+ 'leisure',
+ 'accomplish',
+ 'plug',
+ 'presentation',
+ 'surplus',
+ 'cassette',
+ 'surround',
+ 'private',
+ 'bulb',
+ 'meaning',
+ 'annual',
+ 'expansion',
+ 'eliminate',
+ 'horn',
+ 'responsibility',
+ 'dam',
+ 'challenge',
+ 'alike',
+ 'phenomenon',
+ 'survey',
+ 'curtain',
+ 'household',
+ 'survival',
+ 'medal',
+ 'invest',
+ 'survive',
+ 'awkward',
+ 'synthetic',
+ 'manufacture',
+ 'curse',
+ 'suspect',
+ 'suspend',
+ 'tide',
+ 'crossing',
+ 'tour',
+ 'barely',
+ 'cope',
+ 'gap',
+ 'oppose',
+ 'deadline',
+ 'automatic',
+ 'joint',
+ 'surrender',
+ 'rude',
+ 'faint',
+ 'conference',
+ 'issue',
+ 'swallow',
+ 'interior',
+ 'calculator',
+ 'analyse',
+ 'hazard',
+ 'miracle',
+ 'sway',
+ 'editorial',
+ 'recognition',
+ 'librarian',
+ 'analysis',
+ 'kid',
+ 'partner',
+ 'swear',
+ 'center',
+ 'tidy',
+ 'passport',
+ 'swell',
+ 'link',
+ 'brave',
+ 'swift',
+ 'prohibit',
+ 'approve',
+ 'swing',
+ 'ideal',
+ 'arrest',
+ 'landscape',
+ 'represent',
+ 'audience',
+ 'switch',
+ 'sword',
+ 'spot',
+ 'symbol',
+ 'sanction',
+ 'bucket',
+ 'poetry',
+ 'fibre',
+ 'pension',
+ 'beggar',
+ 'illustration',
+ 'liable',
+ 'bunch',
+ 'management',
+ 'sympathize',
+ 'session',
+ 'delicious',
+ 'breeze',
+ 'imitate',
+ 'infant',
+ 'sympathy',
+ 'advantage',
+ 'considerable',
+ 'spur',
+ 'religious',
+ 'banner',
+ 'nylon',
+ 'exceedingly',
+ 'symptom',
+ 'pillar',
+ 'outcome',
+ 'journey',
+ 'forehead',
+ 'conscience',
+ 'precise',
+ 'cable',
+ 'screw',
+ 'gang',
+ 'favour',
+ 'constitute',
+ 'squeeze',
+ 'system',
+ 'culture',
+ 'missile',
+ 'cast',
+ 'Marxist',
+ 'prior',
+ 'dye',
+ 'graceful',
+ 'onion',
+ 'seal',
+ 'saint',
+ 'hesitate',
+ 'crawl',
+ 'contribute',
+ 'fascinating',
+ 'entertainment',
+ 'cigarette',
+ 'immense',
+ 'outer',
+ 'revolutionary',
+ 'fabric',
+ 'ridge',
+ 'mass',
+ 'competent',
+ 'conclusion',
+ 'bang',
+ 'curious',
+ 'pulse',
+ 'encounter',
+ 'concern',
+ 'preposition',
+ 'pond',
+ 'provision',
+ 'reinforce',
+ 'systematic(al)',
+ 'rail',
+ 'pat',
+ 'rational',
+ 'flee',
+ 'response',
+ 'executive',
+ 'tag',
+ 'means',
+ 'nephew',
+ 'motivate',
+ 'failure',
+ 'consistent',
+ 'nowhere',
+ 'sympathetic',
+ 'sketch',
+ 'calm',
+ 'tame',
+ 'cancel',
+ 'pray',
+ 'target',
+ 'camel',
+ 'technician',
+ 'setting',
+ 'technique',
+ 'tax',
+ 'emerge',
+ 'capable',
+ 'technology',
+ 'selfish',
+ 'definition',
+ 'per',
+ 'participate',
+ 'tedious',
+ 'anxious',
+ 'famine',
+ 'fundamental',
+ 'plural',
+ 'anticipate',
+ 'teenager',
+ 'compress',
+ 'pepper',
+ 'discharge',
+ 'telescope',
+ 'temper',
+ 'extensive',
+ 'amuse',
+ 'current',
+ 'mask',
+ 'musician',
+ 'temple',
+ 'decay',
+ 'criticism',
+ 'feedback',
+ 'accordance',
+ 'perceive',
+ 'scarcely',
+ 'clay',
+ 'intelligent',
+ 'conductor',
+ 'frequency',
+ 'attractive',
+ 'garlic',
+ 'temporary',
+ 'recognize',
+ 'puzzle',
+ 'elevator',
+ 'acquisition',
+ 'absolute',
+ 'frank',
+ 'hip',
+ 'polish',
+ 'democratic',
+ 'temptation',
+ 'disguise',
+ 'glue',
+ 'solemn',
+ 'tend',
+ 'ancient',
+ 'effective',
+ 'channel',
+ 'primitive',
+ 'consent',
+ 'organize',
+ 'drama',
+ 'miserable',
+ 'fur',
+ 'antique',
+ 'replacement',
+ 'inner',
+ 'clerk',
+ 'liquor',
+ 'presently',
+ 'gene',
+ 'security',
+ 'nerve',
+ 'greedy',
+ 'essential',
+ 'decorate',
+ 'excess',
+ 'compare',
+ 'command',
+ 'fuel',
+ 'plastic',
+ 'characteristic',
+ 'pressure',
+ 'nearby',
+ 'environment',
+ 'crime',
+ 'pigeon',
+ 'cement',
+ 'magnificent',
+ 'tendency',
+ 'investigate',
+ 'infinite',
+ 'painter',
+ 'tender',
+ 'legal',
+ 'moderate',
+ 'atomic',
+ 'anchor',
+ 'mystery',
+ 'associate',
+ 'reaction',
+ 'affect',
+ 'tense',
+ 'flour',
+ 'comedy',
+ 'directly',
+ 'collision',
+ 'absent',
+ 'critical',
+ 'paw',
+ 'crew',
+ 'congratulation',
+ 'interference',
+ 'flesh',
+ 'innocent',
+ 'excitement',
+ 'adult',
+ 'enhance',
+ 'arrival',
+ 'brief',
+ 'ambition',
+ 'outline',
+ 'aeroplane',
+ 'fertilizer',
+ 'tension',
+ 'petrol',
+ 'distinguish',
+ 'shortcoming',
+ 'propose',
+ 'former',
+ 'consumption',
+ 'terminal',
+ 'casual',
+ 'tough',
+ 'pursue',
+ 'unexpected',
+ 'governor',
+ 'oral',
+ 'territory',
+ 'mere',
+ 'gross',
+ 'tone',
+ 'indication',
+ 'concerning',
+ 'embrace',
+ 'numerous',
+ 'launch',
+ 'discount',
+ 'maintenance',
+ 'incline',
+ 'liberal',
+ 'lavatory',
+ 'marry',
+ 'constitution',
+ 'tolerate',
+ 'intellectual',
+ 'amateur',
+ 'mushroom',
+ 'millimetre',
+ 'mate',
+ 'elbow',
+ 'textile',
+ 'frame',
+ 'blend',
+ 'misunderstand',
+ 'lap',
+ 'notion',
+ 'hatred',
+ 'slippery',
+ 'durable',
+ 'inference',
+ 'employee',
+ 'sausage',
+ 'theme',
+ 'colleague',
+ 'dramatic',
+ 'patience',
+ 'spacecraft',
+ 'preserve',
+ 'import',
+ 'bankrupt',
+ 'cartoon',
+ 'alliance',
+ 'romantic',
+ 'barrel',
+ 'theoretical',
+ 'stack',
+ 'settle',
+ 'hopeful',
+ 'criminal',
+ 'insert',
+ 'specifically',
+ 'accuse',
+ 'reveal',
+ 'pack',
+ 'guilty',
+ 'payment',
+ 'offensive',
+ 'elect',
+ 'downward',
+ 'liquid',
+ 'clue',
+ 'jazz',
+ 'conjunction',
+ 'lord',
+ 'therapy',
+ 'cease',
+ 'variable',
+ 'identity',
+ 'obligation',
+ 'relativity',
+ 'consult',
+ 'anyway',
+ 'indirect',
+ 'agent',
+ 'scan',
+ 'lemon',
+ 'opponent',
+ 'climate',
+ 'addition',
+ 'architect',
+ 'integrate',
+ 'exterior',
+ 'thereby',
+ 'therefore',
+ 'handful',
+ 'loyal',
+ 'furthermore',
+ 'insurance',
+ 'category',
+ 'refine',
+ 'thick',
+ 'minority',
+ 'sorrow',
+ 'thinking',
+ 'quiz',
+ 'airplane',
+ 'thirsty',
+ 'objection',
+ 'platform',
+ 'merchant',
+ 'fertile',
+ 'particularly',
+ 'division',
+ 'crisis',
+ 'thorough',
+ 'forth',
+ 'observer',
+ 'retreat',
+ 'relevant',
+ 'precision',
+ 'admit',
+ 'jungle',
+ 'thoughtful',
+ 'apartment',
+ 'afterward',
+ 'entire',
+ 'carbon',
+ 'chamber',
+ 'realm',
+ 'ratio',
+ 'capture',
+ 'baseball',
+ 'boring',
+ 'crowd',
+ 'sample',
+ 'estate',
+ 'threat',
+ 'reliable',
+ 'constant',
+ 'sustain',
+ 'horsepower',
+ 'suspicion',
+ 'prospect',
+ 'conduct',
+ 'lawn',
+ 'transmit',
+ 'pollution',
+ 'slip',
+ 'influential',
+ 'handle',
+ 'threaten',
+ 'aircraft',
+ 'thrive',
+ 'harm',
+ 'similarly',
+ 'prominent',
+ 'signal',
+ 'encourage',
+ 'recession',
+ 'commitment',
+ 'monitor',
+ 'spark',
+ 'mug',
+ 'absence',
+ 'appreciate',
+ 'bean',
+ 'elastic',
+ 'presumably',
+ 'bargain',
+ 'significant',
+ 'throat',
+ 'extend',
+ 'comparable',
+ 'container',
+ 'chief',
+ 'instant',
+ 'thrust',
+ 'thumb',
+ 'honey',
+ 'enforce',
+ 'ease',
+ 'thunder',
+ 'livingroom',
+ 'monument',
+ 'assess',
+ 'panic',
+ 'blanket',
+ 'drift',
+ 'normally',
+ 'dismiss',
+ 'deputy',
+ 'acre',
+ 'contract',
+ 'anniversary',
+ 'mainland',
+ 'expose',
+ 'policy',
+ 'machinery',
+ 'exert',
+ 'collection',
+ 'gasoline',
+ 'dispose',
+ 'arouse',
+ 'rage',
+ 'inward',
+ 'series',
+ 'roast',
+ 'timber',
+ 'reluctant',
+ 'license',
+ 'upright',
+ 'author',
+ 'mission',
+ 'growth',
+ 'attack',
+ 'furnish',
+ 'pretend',
+ 'concentrate',
+ 'institution',
+ 'flat',
+ 'tissue',
+ 'delicate',
+ 'upper',
+ 'gram',
+ 'crown',
+ 'title',
+ 'convey',
+ 'mount',
+ 'toast',
+ 'tolerance',
+ 'amongst',
+ 'slice',
+ 'dairy',
+ 'consultant',
+ 'multiply',
+ 'naked',
+ 'centigrade',
+ 'measurement',
+ 'precaution',
+ 'allocate',
+ 'certificate',
+ 'agenda',
+ 'electronic',
+ 'alongside',
+ 'conventional',
+ 'topic',
+ 'renew',
+ 'torch',
+ 'clap',
+ 'conservative',
+ 'copyright',
+ 'establishment',
+ 'layout',
+ 'auxiliary',
+ 'major',
+ 'legislation',
+ 'moisture',
+ 'nationality',
+ 'foundation',
+ 'gulf',
+ 'assistance',
+ 'combat',
+ 'exhibit',
+ 'donation',
+ 'fragment',
+ 'reverse',
+ 'apply',
+ 'reform',
+ 'generally',
+ 'electron',
+ 'distinct...',
+ 'priority',
+ 'elementary',
+ 'towel',
+ 'opera',
+ 'digital',
+ 'artistic',
+ 'elderly',
+ 'crack',
+ 'evidence',
+ 'naturally',
+ 'mechanic',
+ 'trace',
+ 'expand',
+ 'laughter',
+ 'compass',
+ 'lean',
+ 'minister',
+ 'duration',
+ 'comprehension',
+ 'tractor',
+ 'tradition',
+ 'compete',
+ 'goodness',
+ 'tragedy',
+ 'offend',
+ 'instinct',
+ 'retire',
+ 'professional',
+ 'bullet',
+ 'trail',
+ 'prosperity',
+ 'pants',
+ 'minor',
+ 'shortage',
+ 'equality',
+ 'jealous',
+ 'dominate',
+ 'inspect',
+ 'generator',
+ 'lorry',
+ 'cue',
+ 'transfer',
+ 'farewell',
+ 'revenue',
+ 'transform',
+ 'hay',
+ 'advocate',
+ 'modify',
+ 'fantastic',
+ 'complicated',
+ 'historic',
+ 'specify',
+ 'translation',
+ 'prosperous',
+ 'baggage',
+ 'pour',
+ 'transmission',
+ 'obtain',
+ 'enthusiasm',
+ 'equivalent',
+ 'assemble',
+ 'slope',
+ 'secondary',
+ 'assume',
+ 'awful',
+ 'process',
+ 'lick',
+ 'overcome',
+ 'motion',
+ 'crucial',
+ 'priest',
+ 'transparent',
+ 'illegal',
+ 'fancy',
+ 'conscious',
+ 'transport',
+ 'contemporary',
+ 'chill',
+ 'breadth',
+ 'flood',
+ 'species',
+ 'necessity',
+ 'scare',
+ 'scientific',
+ 'transportation',
+ 'regardless',
+ 'create',
+ 'diagram',
+ 'valid',
+ 'copper',
+ 'estimate',
+ 'carriage',
+ 'mat',
+ 'cashier',
+ 'sensible',
+ 'faithful',
+ 'trap',
+ 'intensity',
+ 'remedy',
+ 'hearing',
+ 'decent',
+ 'historical',
+ 'confine',
+ 'gymnasium',
+ 'academy',
+ 'definitely',
+ 'recorder',
+ 'sour',
+ 'fruitful',
+ 'expectation',
+ 'disappear',
+ 'trash',
+ 'bleed',
+ 'carrot',
+ 'tray',
+ 'realistic',
+ 'retain',
+ 'fortunately',
+ 'comb',
+ 'reference',
+ 'treatment',
+ 'powerful',
+ 'positive',
+ 'owing',
+ 'appoint',
+ 'artificial',
+ 'project',
+ 'treaty',
+ 'emphasis',
+ 'select',
+ 'tremble',
+ 'attraction',
+ 'abundant',
+ 'faith',
+ 'mathematical',
+ 'navy',
+ 'tremendous',
+ 'dominant',
+ 'proposal',
+ 'magnetic',
+ 'harden',
+ 'trend',
+ 'elaborate',
+ 'bat',
+ 'triangle',
+ 'literary',
+ 'jail',
+ 'design',
+ 'script',
+ '',
+ 'saddle',
+ 'lest',
+ 'creep',
+ 'afford',
+ 'trial',
+ 'inn',
+ 'choke',
+ 'dental',
+ 'council',
+ 'portion',
+ 'lodge',
+ 'troop',
+ 'vague',
+ 'tropical',
+ 'coil',
+ 'benefit',
+ 'troublesome',
+ 'female',
+ 'pose',
+ 'truly',
+ 'peculiar',
+ 'export',
+ 'resume',
+ 'portrait',
+ 'utter',
+ 'bacteria',
+ 'idle',
+ 'pledge',
+ 'exchange',
+ 'emotion',
+ 'harsh',
+ 'exposure',
+ 'saving',
+ 'reasonable',
+ 'trumpet',
+ 'applause',
+ 'nonsense',
+ 'fantasy',
+ 'usage',
+ 'finance',
+ 'exaggerate',
+ 'trunk',
+ 'grocer',
+ 'cruise',
+ 'initial',
+ 'railroad',
+ 'tube',
+ 'attain',
+ 'devise',
+ 'density',
+ 'tune',
+ 'source',
+ 'shrug',
+ 'daylight',
+ 'tunnel',
+ 'site',
+ 'turbine',
+ 'handy',
+ 'background',
+ 'tutor',
+ 'sauce',
+ 'combine',
+ 'pill',
+ 'bay',
+ 'ceremony',
+ 'formula',
+ 'reservior',
+ 'delete',
+ 'pump',
+ 'backward',
+ 'twist',
+ 'range',
+ 'niece',
+ 'protest',
+ 'centimetre',
+ 'predict',
+ 'acquaintance',
+ 'learning',
+ 'spider',
+ 'counsel',
+ 'commit',
+ 'typewriter',
+ 'sin',
+ 'sow',
+ 'companion',
+ 'destination',
+ 'typical',
+ 'corresponding',
+ 'donkey',
+ 'frontier',
+ 'outlook',
+ 'typist',
+ 'apart',
+ 'additional',
+ 'consequence',
+ 'nevertheless',
+ 'dirt',
+ 'lobby',
+ 'occasional',
+ 'doubtful',
+ 'committee',
+ 'tyre',
+ 'ugly',
+ 'parallel',
+ 'cooperate',
+ 'appetite',
+ 'impose',
+ 'invade',
+ 'controversy',
+ 'confident',
+ 'nursery',
+ 'fraction',
+ 'cabinet',
+ 'amid...',
+ 'manufacturer',
+ 'independence',
+ 'academic',
+ 'evolve',
+ 'exception',
+ 'dictation',
+ 'profession',
+ 'authority',
+ 'deposit',
+ 'enquiry',
+ 'differ',
+ 'argument',
+ 'memorial',
+ 'faculty',
+ 'dim',
+ 'moreover',
+ 'earnest',
+ 'heroic',
+ 'umbrella',
+ 'orchestra',
+ 'arithmetic',
+ 'basically',
+ 'battery',
+ 'heel',
+ 'oblige',
+ 'convict',
+ 'respond',
+ 'cite',
+ 'discard',
+ 'grab',
+ 'deceive',
+ 'senior',
+ 'modest',
+ 'continuous',
+ 'comprise',
+ 'revolt',
+ 'expense',
+ 'campus',
+ 'mold',
+ 'insure',
+ 'cash',
+ 'virtue',
+ 'violent',
+ 'react',
+ 'odd',
+ 'diverse',
+ 'manual',
+ 'uncover',
+ 'ban',
+ 'confront',
+ 'undergo',
+ 'journal',
+ 'emperor',
+ 'undergraduate',
+ 'circular',
+ 'dictate',
+ 'inform',
+ 'underground',
+ 'hook',
+ 'underline',
+ 'male',
+ 'proceed',
+ 'hydrogen',
+ 'force',
+ 'fog',
+ 'fluid',
+ 'drill',
+ 'understanding',
+ 'nitrogen',
+ 'commission',
+ 'jaw',
+ 'undertake',
+ 'salary',
+ 'skilled',
+ 'assembly',
+ 'merry',
+ 'undo',
+ 'undoubtedly',
+ 'globe',
+ 'uneasy',
+ 'precious',
+ 'mosquito',
+ 'petroleum',
+ 'favourable',
+ 'sightseeing',
+ 'economic',
+ 'multiple',
+ 'poverty',
+ 'rely',
+ 'effort',
+ 'accumulate',
+ 'cheat',
+ 'humorous',
+ 'rare',
+ 'rival',
+ 'echo',
+ 'investment',
+ 'collapse',
+ 'corridor',
+ 'despite',
+ 'pit',
+ 'counter',
+ 'balcony',
+ 'diplomatic',
+ 'cigar',
+ 'bathe',
+ 'conquer',
+ 'inflation',
+ 'thermometer',
+ 'worthwhile',
+ 'scenery',
+ 'terror',
+ 'average',
+ 'democracy',
+ 'slap',
+ 'obstacle',
+ 'occur',
+ 'nuisance',
+ 'significance',
+ 'up-to-date',
+ 'justify...',
+ 'neglect',
+ 'membership',
+ 'union',
+ 'roller',
+ 'formation',
+ 'punctual',
+ 'relieve',
+ 'candy',
+ 'spokesman',
+ 'employer',
+ 'unique',
+ 'mathematics',
+ 'herd',
+ 'cheerful',
+ 'advertise',
+ 'reflexion',
+ 'unite',
+ 'secure',
+ 'mineral',
+ 'universal',
+ 'lane',
+ 'beloved',
+ 'adapt',
+ 'mislead',
+ 'drag',
+ 'flash',
+ 'immigrant',
+ 'remarkable',
+ 'increasingly',
+ 'indoor',
+ 'palm',
+ 'exclusive',
+ 'namely',
+ 'universe',
+ 'burst',
+ 'preferable',
+ 'filter',
+ 'anyhow',
+ 'score',
+ 'qualify',
+ 'global',
+ 'heave',
+ 'unless',
+ 'excessive',
+ 'marine',
+ 'behalf',
+ 'advanced',
+ 'soda',
+ 'unlike',
+ 'adjust',
+ 'unload',
+ 'leader',
+ 'spelling',
+ 'accordingly',
+ 'anxiety',
+ 'ridiculous',
+ 'unusual',
+ 'scholarship',
+ 'divorce',
+ 'headquarters',
+ 'commerce',
+ 'torture',
+ 'fashion',
+ 'incident',
+ 'upset',
+ 'underneath',
+ 'recover',
+ 'theory',
+ 'evolution',
+ 'myth',
+ 'trim',
+ 'mud',
+ 'unfortunately',
+ 'relate',
+ 'extraordinary',
+ 'debt',
+ 'urge',
+ 'urgent',
+ 'qualification',
+ 'satellite',
+ 'publication',
+ 'cliff',
+ 'restrain',
+ 'commander',
+ 'carpet',
+ 'peer',
+ 'highway',
+ 'breed',
+ 'ensure',
+ 'requirement',
+ 'attempt',
+ 'flock',
+ 'largely',
+ 'restraint',
+ 'focus',
+ 'protective',
+ 'utility',
+ 'jet',
+ 'coordinate',
+ 'restore',
+ 'receipt',
+ 'contrary',
+ 'christian',
+ 'hardware',
+ 'bloom',
+ 'dragon',
+ 'specimen',
+ 'chew',
+ 'utmost',
+ 'original',
+ 'religion',
+ 'communication',
+ 'beyond',
+ 'vacant',
+ 'conclude',
+ 'restrict',
+ 'respectively',
+ 'fairly',
+ 'sailor',
+ 'remark',
+ 'assure',
+ 'balance',
+ 'campaign',
+ 'psychological',
+ 'contradiction',
+ 'dose',
+ 'vacation',
+ 'immediately',
+ 'vacuum',
+ 'ore',
+ 'clause',
+ 'cattle',
+ 'barn',
+ 'laser',
+ 'initiative',
+ 'compel',
+ 'basis',
+ 'contact',
+ 'guarantee',
+ 'semiconductor',
+ 'rib',
+ 'obvious',
+ 'geometry',
+ 'butcher',
+ 'triumph',
+ 'maid',
+ 'eyesight',
+ 'interview',
+ 'vain',
+ 'paste',
+ 'soak',
+ 'exceed',
+ 'boom',
+ 'item',
+ 'hammer',
+ 'metric',
+ 'jar',
+ 'resource',
+ 'compose',
+ 'military',
+ 'package',
+ 'van',
+ 'besides',
+ 'injection',
+ 'laboratory',
+ 'vanish',
+ 'experimental',
+ 'mysterious',
+ 'sake',
+ 'keen',
+ 'vapour',
+ 'haste',
+ 'magic',
+ 'poisonous',
+ 'aid',
+ 'coach',
+ 'decrease',
+ 'relief',
+ 'continual',
+ 'slight',
+ 'stare',
+ 'grace',
+ 'band',
+ 'mechanical',
+ 'considerate',
+ 'ditch',
+ 'ignorance',
+ 'balloon',
+ 'brake',
+ 'data',
+ 'bake',
+ 'gear',
+ 'patient',
+ 'altitude',
+ 'inquiry',
+ 'implement',
+ 'remind',
+ 'pint',
+ 'engine',
+ 'bid',
+ 'scout',
+ 'mould',
+ 'avenue',
+ 'instance',
+ 'career',
+ 'fountain',
+ 'format',
+ 'correspond',
+ 'clarify',
+ 'mercy',
+ 'expression',
+ 'exact',
+ 'decade',
+ 'dimension',
+ 'vision',
+ 'unity',
+ 'vigorous',
+ 'via',
+ 'skim',
+ 'severe',
+ 'conquest',
+ 'improve',
+ 'variety',
+ 'election',
+ 'expert',
+ 'dive',
+ 'various',
+ 'rifle',
+ 'stake',
+ 'corporation',
+ 'vary',
+ 'eagle',
+ 'figure',
+ 'vast',
+ 'simplify',
+ 'instead',
+ 'shell',
+ 'drawer',
+ 'quote',
+ 'depress',
+ 'schedule',
+ 'limitation',
+ 'disturb',
+ 'cancer',
+ 'accord',
+ 'industrial',
+ 'preference',
+ 'screen',
+ 'error',
+ 'gratitude',
+ 'slam',
+ 'evil',
+ 'accent',
+ 'imagination',
+ 'elsewhere',
+ 'champion',
+ 'framework',
+ 'social',
+ 'endure',
+ 'gradual',
+ 'sleeve',
+ 'concession',
+ 'vehicle',
+ 'register',
+ 'apology',
+ 'luggage',
+ 'desperate',
+ 'billion',
+ 'venture',
+ 'queue',
+ 'aside',
+ 'reflect',
+ 'beneficial',
+ 'repeatedly',
+ 'kindergarten',
+ 'verify',
+ 'reduction',
+ 'version',
+ 'implication',
+ 'accustomed',
+ 'helicopter',
+ 'normal',
+ 'shiver',
+ 'stadium',
+ 'grasp',
+ 'economy',
+ 'rotten',
+ 'dash',
+ 'recently',
+ 'concept',
+ 'rigid',
+ 'entertain',
+ 'vertical',
+ 'vessel',
+ 'evident',
+ 'apologize',
+ 'scholar',
+ 'costly',
+ 'veteran',
+ 'glimpse',
+ 'finally',
+ 'approval',
+ 'judgement',
+ 'regulation',
+ 'cord',
+ 'powder',
+ 'improvement',
+ 'remote',
+ 'provide',
+ 'rub',
+ 'fiction',
+ 'occurrence',
+ 'adopt',
+ 'navigation',
+ 'adventure',
+ 'float',
+ 'dynamic',
+ 'vibrate',
+ 'indifferent',
+ 'plot',
+ 'horror',
+ 'fatigue',
+ 'consideration',
+ 'vice',
+ 'notebook',
+ 'chop',
+ 'respect',
+ 'admission',
+ 'disease',
+ 'ignore',
+ 'infect',
+ 'confirm',
+ 'harbour',
+ 'concrete',
+ 'organic',
+ 'phase',
+ 'previous',
+ 'helpless',
+ 'amaze',
+ 'despair',
+ 'victim',
+ 'possibility',
+ 'video',
+ 'viewpoint',
+ 'erect',
+ 'obey',
+ 'rarely',
+ 'vinegar',
+ 'approach',
+ 'violate',
+ 'distinction',
+ 'holy',
+ 'philosophy',
+ 'golf',
+ 'outward',
+ 'section',
+ 'penalty',
+ 'dump',
+ 'internal',
+ 'installation',
+ 'charge',
+ 'criticize',
+ 'disorder',
+ 'rocket',
+ 'dessert',
+ 'dispute',
+ 'butterfly',
+ 'circuit',
+ 'frequent',
+ 'depart',
+ 'lens',
+ 'sigh',
+ 'violence',
+ 'reserve',
+ 'aluminium',
+ 'hence',
+ 'pine',
+ 'opening',
+ 'acid',
+ 'hen',
+ 'giant',
+ 'crystal',
+ 'operational',
+ 'racial',
+ 'construction',
+ 'planet',
+ 'image',
+ 'blade',
+ 'physicist',
+ 'sack',
+ 'behave',
+ 'organism',
+ 'shortly',
+ 'interval',
+ 'violet',
+ 'draught',
+ 'appointment',
+ 'meantime',
+ 'murder',
+ 'violin',
+ 'perspective',
+ 'laundry',
+ 'virtual',
+ 'virtually',
+ 'calculate',
+ 'confess',
+ 'appearance',
+ 'virus',
+ 'ambulance',
+ 'liberty',
+ 'consequently',
+ 'insist',
+ 'solar',
+ 'flourish',
+ 'correspondence',
+ 'pronoun',
+ 'property',
+ 'shave',
+ 'selection',
+ 'limited',
+ 'enormous',
+ 'impact',
+ 'visible',
+ 'conceal',
+ 'earthquake',
+ 'curriculum',
+ 'feature',
+ 'loaf',
+ 'stain',
+ 'demand',
+ 'media',
+ 'comparative',
+ 'massive',
+ 'ultimate',
+ 'extent',
+ 'employment',
+ 'medium',
+ 'urban',
+ 'engineering',
+ 'marvelous',
+ 'event',
+ 'resolve',
+ 'avoid',
+ 'respective',
+ 'boast',
+ 'sew',
+ 'indicate',
+ 'govern',
+ 'visual',
+ 'utilize',
+ 'chase',
+ 'prevail',
+ 'pillow',
+ 'packet',
+ 'heap',
+ 'variation',
+ 'primary',
+ 'dense',
+ 'outside',
+ 'owe',
+ 'interfere',
+ 'burden',
+ 'scatter',
+ 'starve',
+ 'simplicity',
+ 'bare',
+ 'compound',
+ 'orderly',
+ 'resolution',
+ 'learned',
+ 'shelter',
+ 'reporter',
+ 'profile',
+ 'shed',
+ 'necessarily',
+ 'vitamin',
+ 'reproduce',
+ 'grateful',
+ 'convenience',
+ 'vivid',
+ 'outset',
+ 'deserve',
+ 'assignment',
+ 'principal',
+ 'enable',
+ 'refrigerator',
+ 'keyboard',
+ 'poison',
+ 'mill',
+ 'electrical',
+ 'install',
+ 'output',
+ 'ally',
+ 'vocabulary',
+ 'athlete',
+ 'honourable',
+ 'brass',
+ 'merely',
+ 'engage',
+ 'sphere',
+ 'purple',
+ 'volcano',
+ 'decline',
+ 'classic',
+ 'stale',
+ 'liberate',
+ 'standpoint',
+ 'activity',
+ 'volt',
+ 'arrange',
+ 'canal',
+ 'device',
+ 'voltage',
+ 'angle',
+ 'volume',
+ 'voluntary',
+ 'rhythm',
+ 'bore',
+ 'marriage',
+ 'bet',
+ 'spade',
+ 'official',
+ 'beast',
+ 'drum',
+ 'crash',
+ 'boot',
+ 'charm',
+ 'literature',
+ 'handbag',
+ 'volunteer',
+ 'oval',
+ 'glorious',
+ 'inspire',
+ 'protection',
+ 'argue',
+ 'cop',
+ 'given',
+ 'chapter',
+ 'likely',
+ 'omit',
+ 'adequate',
+ 'departure',
+ 'according',
+ 'shift',
+ 'sophisticated',
+ 'damp',
+ 'fry',
+ 'extension',
+ 'instruction',
+ 'assumption',
+ 'potential',
+ 'permanent',
+ 'quit',
+ 'region',
+ 'overseas',
+ 'vote',
+ 'furnace',
+ 'wagon',
+ 'agriculture',
+ 'oven',
+ 'waist',
+ 'editor',
+ 'republican',
+ 'factor',
+ 'hint',
+ 'waken',
+ 'plunge',
+ 'applicable',
+ 'wander',
+ 'luxury',
+ 'loosen',
+ 'readily',
+ 'devil',
+ 'border',
+ 'warmth',
+ 'creative',
+ 'waterproof',
+ 'cargo',
+ 'complaint',
+ 'explosion',
+ 'economical',
+ 'progressive',
+ 'residence',
+ 'resemble',
+ 'perception',
+ 'annoy',
+ 'whichever',
+ 'whereas',
+ 'rob',
+ 'recommend',
+ 'pitch',
+ 'perform',
+ 'connect',
+ 'pilot',
+ 'vital',
+ 'scold',
+ 'intense',
+ 'horrible',
+ 'edition',
+ 'speculate',
+ 'mechanism',
+ 'dumb',
+ 'handwriting',
+ 'educate',
+ 'landlord',
+ 'glove',
+ 'scope',
+ 'recovery',
+ 'weaken',
+ 'refusal',
+ 'wealth',
+ 'overall',
+ 'reputation',
+ 'ending',
+ 'spill',
+ 'character',
+ 'notify',
+ 'pollute',
+ 'persist',
+ 'principle',
+ 'peak',
+ 'margin',
+ 'regarding',
+ 'repetition',
+ 'spectacular',
+ 'humour',
+ 'achievement',
+ 'salad',
+ 'fare',
+ 'flame',
+ 'convention',
+ 'network',
+ 'reservation',
+ 'ribbon',
+ 'plentiful',
+ 'classify',
+ 'weapon',
+ 'dissolve',
+ 'splendid',
+ 'scarce',
+ 'politics',
+ 'alphabet',
+ 'performance',
+ 'clumsy',
+ 'ax',
+ 'wealthy',
+ 'detect',
+ 'physician',
+ 'guy',
+ 'administration',
+ 'emphasize',
+ 'frost',
+ 'contribution',
+ 'weave',
+ 'crane',
+ 'muscle',
+ 'admire',
+ 'exclude',
+ 'inquire',
+ 'dialect',
+ 'weed',
+ 'accident',
+ 'Negro',
+ 'identify',
+ 'instrument',
+ 'scratch',
+ 'dependent',
+ 'moral',
+ 'individual',
+ 'loan',
+ 'divide',
+ 'chin',
+ 'shield',
+ 'minimum',
+ 'lump',
+ 'loose',
+ 'scissors',
+ 'diameter',
+ 'soar',
+ 'molecule',
+ 'gaze',
+ 'relationship',
+ 'reality',
+ 'risk',
+ 'fee',
+ 'mature',
+ 'provided',
+ 'curiosity',
+ 'organ',
+ 'grind',
+ 'harmony',
+ 'lamb',
+ 'column',
+ 'weekly',
+ 'riot',
+ 'being',
+ 'plus',
+ 'nightmare',
+ 'budget',
+ 'chart',
+ 'porter',
+ 'dusk',
+ 'somewhat',
+ 'weep',
+ 'weld',
+ 'competition',
+ 'gallon',
+ 'convert',
+ 'publish',
+ 'market',
+ 'kneel',
+ 'postpone',
+ 'liter',
+ 'click',
+ 'logical',
+ 'convince',
+ 'headline',
+ 'disaster',
+ 'welfare',
+ 'pierce',
+ 'ankle',
+ 'radiation',
+ 'origin',
+ 'well-known',
+ 'exhaust',
+ 'hardship',
+ 'bubble',
+ 'intimate',
+ 'defeat',
+ 'bacon',
+ 'creature',
+ 'optional',
+ 'probable',
+ 'fuss',
+ 'wax',
+ 'nucleus',
+ 'financial',
+ 'sequence',
+ 'concede',
+ 'brand',
+ 'junior',
+ 'whale',
+ 'whatsoever',
+ 'relax',
+ 'fireman',
+ 'crust',
+ 'observation',
+ 'mention',
+ 'guideline',
+ 'insight',
+ 'nuclear',
+ 'seminar',
+ 'colony',
+ 'jeans',
+ 'deliberate',
+ 'catalog',
+ 'salesman',
+ 'liver',
+ 'inevitable',
+ 'deck',
+ 'arrangement',
+ 'forbid',
+ 'account',
+ 'operator',
+ 'whilst',
+ 'lid',
+ 'humble',
+ 'descend',
+ 'furniture',
+ 'aggressive',
+ 'footstep',
+ 'invent',
+ 'plantation',
+ 'accurate',
+ 'mankind',
+ 'log',
+ 'pessimistic',
+ 'neighbourhood',
+ 'glow',
+ 'injure',
+ 'objective',
+ 'alter',
+ 'electricity',
+ 'apparent',
+ 'arrow',
+ 'occupy',
+ 'hunt',
+ 'poll',
+ 'grape',
+ 'capacity',
+ 'refresh',
+ 'guidance',
+ 'ounce',
+ 'applicant',
+ 'ashamed',
+ 'draft',
+ 'whip',
+ 'philosopher',
+ 'greenhouse',
+ 'competitive',
+ 'destruction',
+ 'application',
+ 'impatient',
+ 'logic',
+ 'negotiate',
+ 'germ',
+ 'whisper',
+ 'withdraw',
+ 'aspect',
+ 'require',
+ 'beam',
+ 'smash',
+ 'responsible',
+ 'accompany',
+ 'affection',
+ 'detail',
+ 'commercial',
+ 'efficiency',
+ 'organization',
+ 'whistle',
+ 'injury',
+ 'refugee',
+ 'embarrass',
+ 'inhabitant',
+ 'province',
+ 'collective',
+ 'ruin',
+ 'resist',
+ 'genius',
+ 'quotation',
+ 'hut',
+ 'community',
+ 'isolate',
+ 'whoever',
+ 'snap',
+ 'ache',
+ 'optical',
+ 'alarm',
+ 'wholly',
+ 'semester',
+ 'impress',
+ 'fate',
+ 'resistant',
+ 'maximum',
+ 'wicked',
+ 'possess',
+ 'widen',
+ 'widespread',
+ 'active',
+ 'beard',
+ 'classification',
+ 'postage',
+ 'widow',
+ 'accidental',
+ 'happen',
+ 'element',
+ 'era',
+ 'arise',
+ 'poem',
+ 'explosive',
+ 'width',
+ 'grammar',
+ 'wisdom',
+ 'insult',
+ 'freight',
+ 'physical',
+ 'conversely',
+ 'wit',
+ 'location',
+ 'hostile',
+ 'reject',
+ 'purchase',
+ 'jewel',
+ 'determination',
+ 'preliminary',
+ 'withstand',
+ 'insect',
+ 'civil',
+ 'scrape',
+ 'blast',
+ 'witness',
+ 'melt',
+ 'scream',
+ 'hopeless',
+ 'wolf',
+ 'sacrifice',
+ 'forge',
+ 'lover',
+ 'connection',
+ 'possession',
+ 'wool',
+ 'identical',
+ 'preceding',
+ 'workshop',
+ 'entry',
+ 'digest',
+ 'rate',
+ 'define',
+ 'fulfill',
+ 'generous',
+ 'owner',
+ 'passive',
+ 'chaos',
+ 'workman',
+ 'motive',
+ 'attract',
+ 'revise',
+ 'senate',
+ 'observe',
+ 'alcohol',
+ 'settlement',
+ 'radar',
+ 'gum',
+ 'worm',
+ 'grip',
+ 'optimistic',
+ 'nature',
+ 'brilliant',
+ 'worldwide',
+ 'inferior',
+ 'audio',
+ 'circulate',
+ 'abandon',
+ 'assist',
+ 'pattern',
+ 'index',
+ 'worship',
+ 'fleet',
+ 'mixture',
+ 'currency',
+ 'outlet',
+ 'facility',
+ 'attorney',
+ 'regulate',
+ 'intend',
+ 'brick',
+ 'measure',
+ 'claw',
+ 'rat',
+ 'feasible',
+ 'parcel',
+ 'worthless',
+ 'leap',
+ 'horizon',
+ 'socialism',
+ 'influence',
+ 'document',
+ 'worthy',
+ 'dot',
+ 'heading',
+ 'naval',
+ 'oxygen',
+ 'roar',
+ 'fluent',
+ 'poet',
+ 'gym',
+ 'resign',
+ 'wrap',
+ 'sexual',
+ 'endless',
+ 'occupation',
+ 'extra',
+ 'intensive',
+ 'candidate',
+ 'wreck',
+ 'aboard',
+ 'festival',
+ 'single',
+ 'federal',
+ 'microscope',
+ 'classical',
+ 'attach',
+ 'zone',
+ 'deaf',
+ 'spoil',
+ 'wrist',
+ 'accuracy',
+ 'invisible',
+ 'association',
+ 'writer',
+ 'writing',
+ 'X-ray',
+ 'civilian',
+ 'gaol',
+ 'hire',
+ 'confuse',
+ 'garbage',
+ 'overtake',
+ 'gravity',
+ 'yawn',
+ 'sideways',
+ 'bundle',
+ 'leather',
+ 'concentration',
+ 'portable',
+ 'elegant',
+ 'spray',
+ 'yearly',
+ 'funeral',
+ 'acute',
+ 'ghost',
+ 'halt',
+ 'complex',
+ 'coarse',
+ 'patch',
+ 'favourite',
+ 'rust',
+ 'await',
+ 'acquire',
+ 'prejudice',
+ 'yield',
+ 'bolt',
+ 'generate',
+ 'gallery',
+ 'existence',
+ 'percentage',
+ 'specific',
+ 'youngster',
+ 'act',
+ 'address',
+ 'advance',
+ 'age',
+ 'aim',
+ 'air',
+ 'appear',
+ 'arm',
+ 'article',
+ 'atom',
+ 'attend',
+ 'bad',
+ 'badly',
+ 'bar',
+ 'battle',
+ 'bear',
+ 'belt',
+ 'block',
+ 'blue',
+ 'body',
+ 'book',
+ 'boss',
+ 'bother',
+ 'bow',
+ 'box',
+ 'branch',
+ 'bridge',
+ 'button',
+ 'can',
+ 'capital',
+ 'catch',
+ 'celebrate',
+ 'cell',
+ 'chair',
+ 'change',
+ 'cheap',
+ 'china',
+ 'class',
+ 'coat',
+ 'code',
+ 'coin',
+ 'collect',
+ 'company',
+ 'composition',
+ 'concert',
+ 'content',
+ 'correct',
+ 'course',
+ 'crop',
+ 'custom',
+ 'daily',
+ 'deal',
+ 'deed',
+ 'degree',
+ 'deliver',
+ 'description',
+ 'desert',
+ 'duty',
+ 'edge',
+ 'employ',
+ 'even',
+ 'exit',
+ 'express',
+ 'fail',
+ 'fair',
+ 'familiar',
+ 'fan',
+ 'file',
+ 'film',
+ 'fine',
+ 'fire',
+ 'firm',
+ 'flow',
+ 'fly',
+ 'garage',
+ 'general',
+ 'gift',
+ 'goal',
+ 'golden',
+ 'hand',
+ 'handsome',
+ 'head',
+ 'hear',
+ 'heavy',
+ 'hero',
+ 'hide',
+ 'hit',
+ 'hot',
+ 'house',
+ 'ice',
+ 'immediate',
+ 'industry',
+ 'iron',
+ 'kill',
+ 'last',
+ 'lead',
+ 'letter',
+ 'library',
+ 'lift',
+ 'live',
+ 'lonely',
+ 'long',
+ 'lot',
+ 'mad',
+ 'mark',
+ 'master',
+ 'match',
+ 'mean',
+ 'might',
+ 'mine',
+ 'minute',
+ 'mirror',
+ 'moon',
+ 'next',
+ 'novel',
+ 'nurse',
+ 'order',
+ 'paper',
+ 'park',
+ 'part',
+ 'period',
+ 'permit',
+ 'piece',
+ 'pipe',
+ 'plain',
+ 'plane',
+ 'plant',
+ 'plate',
+ 'play',
+ 'please',
+ 'pool',
+ 'post',
+ 'pound',
+ 'power',
+ 'present',
+ 'president',
+ 'press',
+ 'pretty',
+ 'pride',
+ 'prize',
+ 'program',
+ 'pronounce',
+ 'pupil',
+ 'race',
+ 'rapid',
+ 'reason',
+ 'receive',
+ 'refer',
+ 'rest',
+ 'revolution',
+ 'role',
+ 'room',
+ 'rough',
+ 'row',
+ 'rush',
+ 'safe',
+ 'sandwich',
+ 'satisfaction',
+ 'save',
+ 'school',
+ 'season',
+ 'sentence',
+ 'share',
+ 'sharp',
+ 'shoot',
+ 'shoulder',
+ 'silence',
+ 'skirt',
+ 'society',
+ 'soil',
+ 'sort',
+ 'sound',
+ 'spare',
+ 'spring',
+ 'stage',
+ 'stamp',
+ 'stomach',
+ 'student',
+ 'succeed',
+ 'suggest',
+ 'suit',
+ 'sunny',
+ 'table',
+ 'tank',
+ 'tap',
+ 'tear',
+ 'tell',
+ 'terrible',
+ 'ticket',
+ 'tip',
+ 'tired',
+ 'tower',
+ 'treasure',
+ 'treat',
+ 'try',
+ 'uniform',
+ 'unit',
+ 'value',
+ 'voyage',
+ 'wage',
+ 'want',
+ 'water',
+ 'well',
+ 'wind',
+ 'world',
+ 'wound',
+ 'abundance',
+ 'accommodate',
+ 'aerial',
+ 'aisle',
+ 'ambitious',
+ 'applaud',
+ 'appraisal',
+ 'auction',
+ 'aviation',
+ 'bachelor',
+ 'baffle',
+ 'ballet',
+ 'beforehand',
+ 'blockade',
+ 'breakthrough',
+ 'briefcase',
+ 'brutal',
+ 'calorie',
+ 'casualty',
+ 'census',
+ 'chronic',
+ 'chronological',
+ 'cling',
+ 'cognitive',
+ 'commonplace',
+ 'compensate',
+ 'concise',
+ 'conform',
+ 'consequent',
+ 'console',
+ 'continuity',
+ 'cooperative',
+ 'corporate',
+ 'costume',
+ 'courtesy',
+ 'coverage',
+ 'creation',
+ 'cumulative',
+ 'deadly',
+ 'decisive',
+ 'defiance',
+ 'deficiency',
+ 'destructive',
+ 'diligent',
+ 'disastrous',
+ 'distract',
+ 'divine',
+ 'dock',
+ 'donate',
+ 'endurance',
+ 'energetic',
+ 'enrich',
+ 'enthusiastic',
+ 'erosion',
+ 'eternal',
+ 'ethnic',
+ 'expedition',
+ 'fake',
+ 'fitting',
+ 'flaw',
+ 'foster',
+ 'grim',
+ 'guidepost',
+ 'heighten',
+ 'heir',
+ 'heritage',
+ 'hum',
+ 'humanity',
+ 'hurricane',
+ 'iceberg',
+ 'identification',
+ 'ignition',
+ 'illusion',
+ 'imaginative',
+ 'imitation',
+ 'imperative',
+ 'indicative',
+ 'induce',
+ 'inland',
+ 'instrumental',
+ 'interact',
+ 'invariably',
+ 'irrigation',
+ 'likelihood',
+ 'literacy',
+ 'locality',
+ 'lounge',
+ 'memoir',
+ 'memorize',
+ 'monetary',
+ 'monopoly',
+ 'morality',
+ 'muscular',
+ 'notwithstanding',
+ 'nurture',
+ 'nutritious',
+ 'olive',
+ 'optimum',
+ 'paperback',
+ 'pedestrian',
+ 'permissible',
+ 'pest',
+ 'physiological',
+ 'plague',
+ 'preach',
+ 'premature',
+ 'prescription',
+ 'prestige',
+ 'prevalent',
+ 'productive',
+ 'productivity',
+ 'profess',
+ 'profitable',
+ 'profound',
+ 'prophecy',
+ 'prospective',
+ 'pumpkin',
+ 'purity',
+ 'pursuit',
+ 'quest',
+ 'random',
+ 'rap',
+ 'recite',
+ 'reconcile',
+ 'recycle',
+ 'referee',
+ 'relay',
+ 'repertoire',
+ 'residential',
+ 'reunion',
+ 'revelation',
+ 'revenge',
+ 'revolve',
+ 'scrutiny',
+ 'seemingly',
+ 'silicon',
+ 'slogan',
+ 'smuggle',
+ 'snack',
+ 'solitary',
+ 'stability',
+ 'stationary',
+ 'stereo',
+ 'stern',
+ 'subjective',
+ 'subordinate',
+ 'sue',
+ 'telecommunication',
+ 'thereafter',
+ 'tile',
+ 'timely',
+ 'token',
+ 'tolerant',
+ 'toll',
+ 'tract',
+ 'transient',
+ 'transition',
+ 'tuition',
+ 'unemployment',
+ 'unify',
+ 'upbringing',
+ 'versus',
+ 'vicious',
+ 'vigor',
+ 'vita',
+ 'vocal',
+ 'vulnerable',
+ 'wallet',
+ 'wardrobe',
+ 'warfare',
+ 'wrinkle'
+ ]
+
+
+module.exports = {
+ wordList: word_list
+}
diff --git a/data/cet4_import.js b/data/cet4_import.js
new file mode 100644
index 0000000..5839eb2
--- /dev/null
+++ b/data/cet4_import.js
@@ -0,0 +1,692 @@
+var word_list =
+['alter',
+ 'burst',
+ 'dispose',
+ 'blast',
+ 'consume',
+ 'split',
+ 'spit',
+ 'spill',
+ 'slip',
+ 'slide',
+ 'bacteria',
+ 'breed',
+ 'budget',
+ 'candidate',
+ 'campus',
+ 'liberal',
+ 'transform',
+ 'transmit',
+ 'transplant',
+ 'transport',
+ 'shift',
+ 'vary',
+ 'vanish',
+ 'swallow',
+ 'suspicion',
+ 'suspicious',
+ 'mild',
+ 'tender',
+ 'nuisance',
+ 'insignificant',
+ 'accelerate',
+ 'absolute',
+ 'boundary',
+ 'brake',
+ 'catalog',
+ 'vague',
+ 'vain',
+ 'extinct',
+ 'extraordinary',
+ 'extreme',
+ 'agent',
+ 'alcohol',
+ 'appeal',
+ 'appreciate',
+ 'approve',
+ 'stimulate',
+ 'acquire',
+ 'accomplish',
+ 'network',
+ 'tide',
+ 'tidy',
+ 'trace',
+ 'torture',
+ 'wander',
+ 'wax',
+ 'weave',
+ 'preserve',
+ 'abuse',
+ 'academic',
+ 'academy',
+ 'battery',
+ 'barrier',
+ 'cargo',
+ 'career',
+ 'vessel',
+ 'vertical',
+ 'oblige',
+ 'obscure',
+ 'extent',
+ 'exterior',
+ 'external',
+ 'petrol',
+ 'petroleum',
+ 'delay',
+ 'decay',
+ 'decent',
+ 'route',
+ 'ruin',
+ 'sake',
+ 'satellite',
+ 'scale',
+ 'temple',
+ 'tedious',
+ 'tend',
+ 'tendency',
+ 'ultimate',
+ 'undergo',
+ 'abundant',
+ 'adopt',
+ 'adapt',
+ 'bachelor',
+ 'casual',
+ 'trap',
+ 'vacant',
+ 'vacuum',
+ 'oral',
+ 'optics',
+ 'organ',
+ 'excess',
+ 'expel',
+ 'expend',
+ 'expenditure',
+ 'expense',
+ 'expensive',
+ 'expand',
+ 'expansion',
+ 'private',
+ 'individual',
+ 'personal',
+ 'personnel',
+ 'thePacificOcean',
+ 'theAtlanticOcean',
+ 'theArcticOcean',
+ 'theAntarcticOcean',
+ 'grant',
+ 'grand',
+ 'invade',
+ 'acid',
+ 'acknowledge',
+ 'balcony',
+ 'calculate',
+ 'calendar',
+ 'optimistic',
+ 'optional',
+ 'outstanding',
+ 'export',
+ 'import',
+ 'impose',
+ 'religion',
+ 'religious',
+ 'victim',
+ 'video',
+ 'videotape',
+ 'offend',
+ 'bother',
+ 'interfere',
+ 'internal',
+ 'beforehand',
+ 'racial',
+ 'radiation',
+ 'radical',
+ 'range',
+ 'wonder',
+ 'isolate',
+ 'issue',
+ 'hollow',
+ 'hook',
+ 'adequate',
+ 'adhere',
+ 'ban',
+ 'capture',
+ 'valid',
+ 'valley',
+ 'consistent',
+ 'continuous',
+ 'continual',
+ 'explode',
+ 'exploit',
+ 'explore',
+ 'explosion',
+ 'explosive',
+ 'remote',
+ 'removal',
+ 'render',
+ 'precaution',
+ 'idle',
+ 'identify',
+ 'identify',
+ 'poverty',
+ 'resistant',
+ 'resolve',
+ 'barrel',
+ 'bargain',
+ 'coarse',
+ 'coach',
+ 'code',
+ 'coil',
+ 'adult',
+ 'advertise',
+ 'advertisement',
+ 'agency',
+ 'focus',
+ 'forbid',
+ 'debate',
+ 'debt',
+ 'decade',
+ 'enclose',
+ 'encounter',
+ 'globe',
+ 'global',
+ 'scan',
+ 'scandal',
+ 'significance',
+ 'subsequent',
+ 'virtue',
+ 'virtual',
+ 'orient',
+ 'portion',
+ 'target',
+ 'portable',
+ 'decline',
+ 'illusion',
+ 'likelihood',
+ 'stripe',
+ 'emphasize',
+ 'emotion',
+ 'emotional',
+ 'awful',
+ 'awkward',
+ 'clue',
+ 'collision',
+ 'device',
+ 'devise',
+ 'inevitable',
+ 'naval',
+ 'navigation',
+ 'necessity',
+ 'previous',
+ 'provision',
+ 'pursue',
+ 'stale',
+ 'substitute',
+ 'deserve',
+ 'discrimination',
+ 'professional',
+ 'secure',
+ 'security',
+ 'scratch',
+ 'talent',
+ 'insurance',
+ 'insure',
+ 'nevertheless',
+ 'neutral',
+ 'spot',
+ 'spray',
+ 'medium',
+ 'media',
+ 'auxiliary',
+ 'automatic',
+ 'compete',
+ 'competent',
+ 'competition',
+ 'distribute',
+ 'disturb',
+ 'infer',
+ 'integrate',
+ 'moist',
+ 'moisture',
+ 'promote',
+ 'region',
+ 'register',
+ 'stable',
+ 'sophisticated',
+ 'splendid',
+ 'cancel',
+ 'variable',
+ 'prospect',
+ 'prosperity',
+ 'aspect',
+ 'cope',
+ 'core',
+ 'maintain',
+ 'mainland',
+ 'discipline',
+ 'domestic',
+ 'constant',
+ 'cliff',
+ 'authority',
+ 'audio',
+ 'attitude',
+ 'community',
+ 'commit',
+ 'comment',
+ 'distinguish',
+ 'distress',
+ 'facility',
+ 'faculty',
+ 'mixture',
+ 'mood',
+ 'moral',
+ 'prominent',
+ 'substance',
+ 'substantial',
+ 'prompt',
+ 'vivid',
+ 'vocabulary',
+ 'venture',
+ 'version',
+ 'waist',
+ 'weld',
+ 'yawn',
+ 'yield',
+ 'zone',
+ 'strategy',
+ 'strategic',
+ 'tense',
+ 'tension',
+ 'avenue',
+ 'available',
+ 'comparable',
+ 'comparative',
+ 'dash',
+ 'data',
+ 'dive',
+ 'diverse',
+ 'entitle',
+ 'regulate',
+ 'release',
+ 'exaggerate',
+ 'evil',
+ 'shrink',
+ 'subtract',
+ 'suburb',
+ 'subway',
+ 'survey',
+ 'wealthy',
+ 'adjust',
+ 'attach',
+ 'profit',
+ 'profitable',
+ 'slope',
+ 'reinforce',
+ 'reject',
+ 'fatal',
+ 'fate',
+ 'humble',
+ 'illegal',
+ 'award',
+ 'aware',
+ 'column',
+ 'comedy',
+ 'dumb',
+ 'dump',
+ 'deaf',
+ 'decorate',
+ 'principal',
+ 'principle',
+ 'prior',
+ 'priority',
+ 'prohibit',
+ 'remarkable',
+ 'remedy',
+ 'repetition',
+ 'vain',
+ 'undertake',
+ 'unique',
+ 'obstacle',
+ 'odd',
+ 'omit',
+ 'opponent',
+ 'opportunity',
+ 'orchestra',
+ 'semester',
+ 'semiconductor',
+ 'seminar',
+ 'terminal',
+ 'territory',
+ 'approximate',
+ 'arbitrary',
+ 'architect',
+ 'architecture',
+ 'biology',
+ 'geography',
+ 'geology',
+ 'geometry',
+ 'arichmetic',
+ 'algebra',
+ 'entertainment',
+ 'enthusiasm',
+ 'entry',
+ 'enviroment',
+ 'episode',
+ 'equation',
+ 'restrain',
+ 'restraint',
+ 'resume',
+ 'severe',
+ 'sexual',
+ 'simplicity',
+ 'simplify',
+ 'sorrow',
+ 'stuff',
+ 'temporary',
+ 'temptation',
+ 'terror',
+ 'thrust',
+ 'treaty',
+ 'arise',
+ 'arouse',
+ 'burden',
+ 'bureau',
+ 'marveous',
+ 'massive',
+ 'mature',
+ 'maximum',
+ 'minimum',
+ 'nonsense',
+ 'nuclear',
+ 'nucleus',
+ 'retail',
+ 'retain',
+ 'restrict',
+ 'sponsor',
+ 'spur',
+ 'triumph',
+ 'tuition',
+ 'twist',
+ 'undergraduate',
+ 'universal',
+ 'universe',
+ 'viaprep.',
+ 'vibrate',
+ 'virus',
+ 'voluntary',
+ 'volunteer',
+ 'vote',
+ 'wagon',
+ 'appoint',
+ 'approach',
+ 'appropriate',
+ 'bunch',
+ 'bundle',
+ 'ceremony',
+ 'chaos',
+ 'discount',
+ 'display',
+ 'equivalent',
+ 'erect',
+ 'fax',
+ 'ferfile',
+ 'fertilizer',
+ 'grateful',
+ 'gratitude',
+ 'horror',
+ 'horrible',
+ 'Internet',
+ 'interpret',
+ 'interpretation',
+ 'jungle',
+ 'knot',
+ 'leak',
+ 'lean',
+ 'leap',
+ 'modify',
+ 'nylon',
+ 'onion',
+ 'powder',
+ 'applicable',
+ 'applicant',
+ 'breadth',
+ 'conservation',
+ 'conservative',
+ 'parallel',
+ 'passion',
+ 'passive',
+ 'pat',
+ 'peak',
+ 'phenomenon',
+ 'reluctant',
+ 'rely',
+ 'relevant',
+ 'reliable',
+ 'relief',
+ 'reputation',
+ 'rescue',
+ 'triangle',
+ 'sequence',
+ 'shallow',
+ 'shivervi',
+ 'shrug',
+ 'signature',
+ 'sincere',
+ 'utilify',
+ 'utilise',
+ 'utter',
+ 'variation',
+ 'vehicle',
+ 'applause',
+ 'appliance',
+ 'consent',
+ 'conquer',
+ 'defect',
+ 'delicate',
+ 'evolve',
+ 'evolution',
+ 'frown',
+ 'frustrate',
+ 'guarantee',
+ 'guilty',
+ 'jealous',
+ 'jeans',
+ 'liquor',
+ 'literlitre',
+ 'modest',
+ 'molecule',
+ 'orbit',
+ 'participate',
+ 'particle',
+ 'particularly',
+ 'respond',
+ 'response',
+ 'sensible',
+ 'sensitive',
+ 'tremble',
+ 'tremendous',
+ 'trend',
+ 'trial',
+ 'apparent',
+ 'appetite',
+ 'deposit',
+ 'deputy',
+ 'derive',
+ 'descend',
+ 'missile',
+ 'mission',
+ 'mist',
+ 'noticeable',
+ 'notify',
+ 'notion',
+ 'resemble',
+ 'reveal',
+ 'revenue',
+ 'shelter',
+ 'shield',
+ 'vital',
+ 'vitally',
+ 'urban',
+ 'urge',
+ 'urgent',
+ 'usage',
+ 'violence',
+ 'violent',
+ 'violet',
+ 'weed',
+ 'welfare',
+ 'whatsoever',
+ 'whereasconj.',
+ 'essential',
+ 'estimate',
+ 'uate',
+ 'exceed',
+ 'exceedingly',
+ 'exclaim',
+ 'exclude',
+ 'exclusive',
+ 'excursion',
+ 'flash',
+ 'flee',
+ 'flexible',
+ 'flock',
+ 'hardware',
+ 'harmony',
+ 'haste',
+ 'hatred',
+ 'incident',
+ 'index',
+ 'infant',
+ 'infect',
+ 'inferior',
+ 'infinite',
+ 'ingredient',
+ 'inhabitant',
+ 'jail',
+ 'jam',
+ 'jewel',
+ 'joint',
+ 'junior',
+ 'laser',
+ 'launch',
+ 'luxury',
+ 'magnet',
+ 'male',
+ 'female',
+ 'manual',
+ 'manufacture',
+ 'marine',
+ 'mutual',
+ 'naked',
+ 'negative',
+ 'neglect',
+ 'origin',
+ 'oval',
+ 'outset',
+ 'presumably',
+ 'prevail',
+ 'quit',
+ 'quotation',
+ 'recreation',
+ 'recruit',
+ 'rival',
+ 'shuttle',
+ 'skim',
+ 'sketch',
+ 'slender',
+ 'theme',
+ 'textile',
+ 'tropical',
+ 'kneel',
+ 'label',
+ 'merchant',
+ 'mere',
+ 'nuisance',
+ 'numerrous',
+ 'parade',
+ 'pants[pl.]',
+ 'partial',
+ 'passport',
+ 'prescribe',
+ 'primitive',
+ 'ridge',
+ 'ridiculous',
+ 'ridid',
+ 'withstand',
+ 'witness',
+ 'withdraw',
+ 'slippery',
+ 'smash',
+ 'snap',
+ 'software',
+ 'solar',
+ 'lynar',
+ 'submerge',
+ 'submit',
+ 'timber',
+ 'tissue',
+ 'title',
+ 'tone',
+ 'drift',
+ 'drip',
+ 'durable',
+ 'duration',
+ 'dusk',
+ 'leather',
+ 'legislation',
+ 'leisure',
+ 'loose',
+ 'loosen',
+ 'tarnest',
+ 'earthquake',
+ 'echo',
+ 'elaborate',
+ 'elastic',
+ 'elbow',
+ 'electron',
+ 'volcano',
+ 'volume',
+ 'fatigue',
+ 'faulty',
+ 'favorable',
+ 'favorite',
+ 'gallery',
+ 'gallon',
+ 'gap',
+ 'garbage',
+ 'gaze',
+ 'gear',
+ 'gene',
+ 'lestconj.',
+ 'liable',
+ 'liberal',
+ 'liberty',
+ 'licencelicense',
+ 'moisture',
+ 'motivate',
+ 'motive',
+ 'generate',
+ 'genius',
+ 'genuine',
+ 'gasoline',
+ 'germ',
+ 'gesture',
+ 'giant',
+ 'glimpse',
+ 'glory',
+ 'glorious',
+ 'golf',
+ 'hydrogen',
+ 'oxygen',
+ 'hostile',
+ 'household',
+ 'hook',
+ 'holy',
+ 'hint',
+ 'hestiate',
+ 'highlight',
+ 'hence',
+ 'herd',
+]
+module.exports = {
+ wordList: word_list
+}
\ No newline at end of file
diff --git a/data/cet4_t.js b/data/cet4_t.js
new file mode 100644
index 0000000..62a5b7b
--- /dev/null
+++ b/data/cet4_t.js
@@ -0,0 +1,423 @@
+var translate =
+ ['处理',
+
+
+ '增长',
+ '技术',
+ '理论',
+
+ '经济',
+
+ '实证研究综述',
+
+ '帐户',
+ '经济',
+
+ '个人',
+
+ '产品',
+ '率()',
+
+ '创建',
+
+ '下降',
+ '哈尔达',
+ '广告',
+
+ '能力',
+
+ 'professionala',
+ '点',
+ '趋向',
+
+ '视图',
+
+ '主张',
+ '量',
+
+ '社区;',
+ '关心',
+
+ '环境',
+ '因子',
+ '情报',
+ '可能',
+ '广告',
+ '返回',
+ '社会',
+
+ '后果',
+ '药物',
+ '专家',
+
+ '延伸',
+
+ '产业',
+ '道德',
+
+
+ '行动',
+ '成人',
+
+ '志向',
+ '竞争',
+ '容量',
+ '详情',
+
+ '证据',
+ '演化',
+ '基金',
+ '通货膨胀',
+ '本地',
+ '保持',
+ '管理',
+ '生产率',
+ '生存',
+
+ '宇宙',
+
+ '学习',
+
+
+ '广告',
+ '影响',
+ '效益',
+
+ '辩论',
+ '直',
+ '元件',
+ '必要',
+
+ '识别',
+ '打算',
+ '投资',
+ '合理',
+ '责任',
+ '机会',
+ '个性',
+ '私人的',
+
+ '改变',
+ '适当',
+
+ '繁荣',
+
+ '结合',
+
+ '公司',
+ '企业',
+ '联邦',
+ '加油站',
+ '高度',
+ '问题',
+
+ '组织同一雇主',
+ '原理',
+ '项目',
+ '认识-ISE',
+ '具体',
+ '结构体',
+
+ '物质',
+ '趋势',
+
+ '活动',
+ '优点',
+ '方面',
+ '态度',
+ '平衡',
+
+ '特性',
+
+ '要求',
+ '评论',
+
+ '构成',
+ '合同',
+
+ '创意',
+ '文化',
+ '历史',
+ '解释',
+
+ '方式',
+ '质量;',
+ '获得',
+ '强大',
+ '预测',
+ '风险',
+
+ '机器人',
+ '转移',
+ '种类',
+
+ '办法',
+ '论据',
+ '承担',
+ '蓝图',
+ '气候',
+ '竞争的',
+ '复杂',
+ '概念',
+ '迷惑',
+ '危急',
+ '原油',
+ '出现',
+ '雇员',
+ '存在',
+ '革新',
+ '访谈',
+ '涉及',
+ '日志',
+ '链接',
+
+ '表现',
+
+ '运动',
+ '明显',
+ '性能',
+ '政策',
+ '可能性',
+ '压力',
+ '属性',
+ '展望',
+
+ '涉及',
+
+ '资源',
+ '资源',
+ '自杀',
+
+ '访问',
+ '获得',
+ '适应',
+ '额外',
+ '激进',
+ '业余',
+ '分析',
+ '应用',
+ '出现',
+ '假设',
+ '保证',
+ '权威',
+ '避免',
+ '偏压',
+
+ '简要',
+
+ '现金',
+ '挑战',
+
+ '委员会',
+ '冲突',
+
+ '考虑',
+ '不变',
+
+ '消费',
+ '联系',
+ '惯例',
+ '说服',
+ '宇宙',
+ '数据',
+ '定义',
+ '交货',
+ '演示',
+ '拒绝',
+ '数字',
+ '学科',
+ '区别',
+ '教育',
+ '有效',
+ '电子',
+ '重点',
+ '启用',
+ '错误',
+ '建立',
+ '程度',
+ '焦点',
+ '功能',
+ '基本的',
+ '基因',
+ '天才',
+ '巨人',
+ 'HUMO',
+
+ '意义',
+ '改善',
+ '独立',
+ '影响',
+
+ '直觉',
+ '意向',
+ '发明',
+ '项目',
+ '机制',
+ '观察',
+ '奇',
+ '得罪',
+ '反对',
+ '面板',
+ '现象',
+ '物理',
+ '潜在',
+
+ '延长',
+ '心理',
+ '反映',
+ '相关',
+ '备注',
+
+ '需求',
+ '响应',
+ 'rsponse',
+ '负责任的',
+ '革命',
+ '抢',
+ '规模',
+ '安全',
+ '现场',
+
+ '状态',
+ '股票',
+ '强调',
+ '足够',
+ '调查',
+ '同情',
+ '威胁',
+ '失业',
+ '投票',
+
+
+ '国外',
+ '上诉',
+ '俘虏',
+
+ '基础设施',
+ '溢价',
+
+ '辞职',
+ '跨度',
+
+ '标题',
+ '不太可能',
+
+ '放弃',
+ '确认',
+ '加成',
+ '广告',
+ '援助',
+
+ '骚扰',
+ '明显的',
+ '欣赏',
+
+ '人为',
+ '组装',
+ '属性',
+
+ '基础',
+ '出价',
+
+
+ '事业',
+ '仪式',
+ '字符',
+ '商业',
+
+ '承诺',
+ '商品',
+ '比较',
+ '比较',
+ '补偿',
+ '进行',
+
+ '会议',
+ '置信度',
+ '面对',
+ '对比',
+ '常规',
+ '刑事',
+
+ '危机',
+ '评论家',
+ '当前',
+
+ '周期',
+
+ '定义',
+ '剥夺',
+ '派生',
+ '值得',
+ '设备',
+ '减少',
+ '消失',
+ '丢弃',
+ '容易',
+ '高效',
+ '雇主',
+ '有权',
+ '估计',
+
+ '行政人员',
+
+ '费用',
+ '出口',
+ '外部',
+ '吸引',
+ '时尚',
+ '致命',
+ '闪',
+
+ '禁止',
+ '正式',
+ '形成',
+ '前任的',
+
+ '毛',
+
+
+ '保证',
+
+ '幸福',
+ '有害',
+ '因此',
+ '说明',
+ '意味着',
+ '表明',
+ '必然',
+ '损伤',
+ '知识分子',
+
+ '智能',
+ '内部',
+ '证明',
+ '标签',
+ '制造',
+ '修改',
+ '垄断',
+ '大多',
+ '忽略',
+ '网络',
+ '不过',
+ '概念',
+ '核',
+ 'offspringsing。',
+ '起源',
+ '步伐',
+ '痛苦',
+ '政治',
+ '具有',
+ '贫穷',
+ '特权',
+ '利润',
+
+ '促进',
+ '比例',
+ '追求',
+ '激进',
+ ]
+
+module.exports = {
+ wordList:translate
+}
\ No newline at end of file
diff --git a/data/cet6.js b/data/cet6.js
new file mode 100644
index 0000000..a63419c
--- /dev/null
+++ b/data/cet6.js
@@ -0,0 +1,3102 @@
+var word_list = [
+ 'initially',
+ 'makeup',
+
+ 'rmost',
+ 'optimum',
+ 'block',
+ 'damn',
+ 'outeintegral',
+ 'composition',
+ 'value',
+ 'dignity',
+ 'grunt',
+ 'abide',
+
+ 'composer',
+ 'slave',
+
+ 'resultant',
+ 'consequent',
+ 'hike',
+ 'action',
+ 'trade',
+ 'deal',
+ 'lease',
+ 'charter',
+
+ 'headquarters',
+ 'executive',
+ 'main',
+ 'overall',
+
+ 'conceit',
+ 'ultraviolet',
+
+ 'descendant',
+ 'endow',
+ 'datum',
+ 'qualification',
+
+ 'bourgeois',
+ 'woodpecker',
+
+ 'bump',
+ 'crash',
+
+ 'way',
+ 'superb',
+
+ 'ornament',
+ 'decorative',
+
+ 'ornamental',
+ 'mount',
+ 'shipment',
+ 'can',
+
+ 'array',
+ 'diversion',
+
+ 'convert',
+ 'transition',
+ 'torque',
+ 'workshop',
+
+ 'patent',
+ 'clutch',
+
+ 'nest',
+ 'coin',
+
+ 'noted',
+ 'watchful',
+
+ 'inject',
+ 'storage',
+
+ 'position',
+ 'metropolitan',
+
+ 'principally',
+ 'stalk',
+
+ 'preside',
+ 'eject',
+
+ 'bamboo',
+ 'jewellery',
+
+ 'wrinkle',
+ 'axial',
+
+ 'axis',
+ 'ambient',
+
+ 'anniversary',
+ 'peripheral',
+
+ 'perimeter()',
+ 'anybody',
+
+ 'responsible',
+ 'consequence',
+ 'category',
+ 'species',
+
+ 'hearty',
+ 'neutron',
+
+ 'intermediate',
+ 'proton',
+ 'qualitative',
+ 'fabricate',
+
+ 'fabrication',
+ 'volunteer',
+ 'rebuke',
+ 'indicative',
+ 'instructor',
+
+ 'denote',
+
+ 'designate',
+ 'colonial',
+
+ 'vocation',
+ 'notable',
+
+ 'merit',
+ 'weaver',
+
+ 'brace',
+ 'check',
+
+ 'symptom',
+ 'regime',
+
+ 'second',
+ 'bearing',
+
+ 'politics',
+ 'platform',
+
+ 'confirmation',
+ 'testify',
+ 'audience',
+ 'correctly',
+
+ 'positive',
+ 'normalization',
+ 'sign',
+ 'conqueror',
+
+ 'controversy',
+ 'suppress',
+
+ 'gust',
+ 'clinic',
+
+ 'diagnose',
+ 'sincerity',
+
+ 'cherish',
+ 'detective',
+ 'underline',
+ 'grind',
+
+ 'discount',
+ 'literally',
+
+ 'illuminate',
+ 'summon',
+ 'marsh',
+ 'entertainment',
+
+ 'hindrance',
+ 'hose',
+
+ 'sofa',
+ 'tensile',
+
+ 'warfare',
+ 'battle',
+
+ 'predominant',
+ 'unfold',
+ 'cling',
+ 'viscous',
+
+ 'coherent',
+ 'album',
+
+ 'glue',
+ 'cement',
+
+ 'adhere',
+ 'strip',
+
+ 'further',
+ 'multiplication',
+
+ 'liability',
+ 'shipbuilding',
+ 'grasshopper',
+ 'wink',
+
+ 'mint',
+ 'hollow',
+
+ 'hymn',
+ 'glorify',
+
+ 'fore',
+ 'therein',
+
+ 'overseas',
+ 'ashore',
+
+ 'outside',
+ 'brand',
+
+ 'alongside',
+ 'Roam',
+
+ 'over',
+ 'reproduction',
+
+ 'operation',
+ 'freight',
+
+ 'specification',
+ 'disastrous',
+
+ 'locomotive',
+ 'lunar',
+
+ 'dome',
+ 'cylinder',
+
+ 'undertake',
+ 'primitive',
+ 'prototype',
+ 'vowel',
+
+ 'satisfactorily',
+ 'nucleus',
+
+ 'marshal',
+ 'subscription',
+ 'prophet',
+ 'prophecy',
+
+ 'prediction',
+ 'preset',
+
+ 'beforehand',
+ 'budget',
+
+ 'foresee',
+ 'prevention',
+
+ 'tulip',
+ 'intonation',
+
+ 'cosmic',
+ 'cosmos',
+
+ 'overlap',
+ 'excuse',
+
+ 'senseless',
+ 'amusement',
+ 'torpedo',
+ 'margin',
+
+ 'roundabout',
+ 'kidnap',
+ 'guilt',
+ 'shadowy',
+
+ 'avail',
+ 'ambitious',
+
+ 'significant',
+ 'validity',
+
+ 'availability',
+ 'finite',
+
+ 'magnet',
+ 'profitable',
+ 'advantageous',
+ 'courteous',
+ 'bead',
+ 'commonsense',
+ 'conservative',
+ 'liable',
+ 'yacht',
+ 'uranium',
+
+ 'tanker',
+ 'postal',
+
+ 'superiority',
+ 'elbow',
+
+ 'paper',
+ 'cutter',
+
+ 'net',
+ 'head',
+
+ 'tug',
+ 'hook',
+
+ 'formulate',
+ 'sniff',
+
+ 'courageous',
+ 'emigrate',
+ 'perpetual',
+ 'everlasting',
+ 'periodic',
+ 'stiffness',
+
+ 'comply',
+ 'bound',
+
+ 'salute',
+ 'cater',
+
+ 'press',
+ 'printer',
+
+ 'harbour',
+ 'eternal',
+ 'tempt',
+ 'cite',
+
+ 'ignite',
+ 'derivation',
+
+ 'banker',
+ 'obscure',
+
+ 'inasmuch',
+ 'through',
+
+ 'observation',
+ 'consciousness',
+
+ 'cross',
+ 'refrain',
+
+ 'restrain',
+ 'singular',
+
+ 'house',
+ 'obligation',
+
+ 'formerly',
+ 'desert',
+
+ 'transmission',
+ 'veil',
+
+ 'forsake',
+ 'displace',
+
+ 'displacement',
+ 'garment',
+
+ 'colonist',
+ 'Islam',
+
+ 'instrumental',
+ 'evenly',
+
+ 'wardrobe',
+ 'compatible',
+
+ 'stitch',
+ 'concert',
+
+ 'chop',
+ 'baby',
+
+ 'troop',
+ 'episode',
+
+ 'cluster',
+ 'generalization',
+
+ 'burglar',
+ 'amateur',
+
+ 'Jesus',
+ 'metallurgy',
+
+ 'fort',
+ 'prescription',
+
+ 'postulate',
+ 'wag',
+
+ 'cradle',
+ 'oxide',
+
+ 'waver',
+ 'domestic',
+
+ 'oxidize',
+ 'banquet',
+
+ 'foster',
+ 'anode',
+
+ 'balcony',
+ 'scope',
+
+ 'proverb',
+ 'cloak',
+
+ 'prolong',
+ 'sharply',
+
+ 'pickle',
+ 'squash',
+
+ 'retard',
+ 'squeeze',
+
+ 'dentist',
+ 'overwhelming',
+
+ 'opium',
+ 'overwhelm',
+
+ 'deposit',
+ 'velocity',
+
+ 'compression',
+ 'patrol',
+
+ 'circulation',
+ 'scholarship',
+
+ 'cruise',
+ 'option',
+
+ 'cigar',
+ 'cock',
+
+ 'quest',
+ 'melody',
+
+ 'radiant',
+ 'gorgeous',
+
+ 'overhang',
+ 'narration',
+
+ 'propaganda',
+ 'warrant',
+
+ 'console',
+ 'declaration',
+
+ 'sequence',
+ 'nun',
+
+ 'embroidery',
+ 'eloquence',
+
+ 'requisite',
+ 'pacific',
+
+ 'survival',
+ 'flush',
+
+ 'wind',
+ 'formal',
+
+ 'directory',
+ 'constituent',
+
+ 'scarlet',
+ 'regenerative',
+
+ 'religion',
+ 'appreciation',
+
+ 'novelty',
+ 'psychology',
+
+ 'bridegroom',
+ 'zinc',
+
+ 'novel',
+ 'jean',
+
+ 'crab',
+ 'gradient',
+
+ 'subscript',
+ 'evil',
+
+ 'sideways',
+ 'collaborate',
+
+ 'vicious',
+ 'team',
+
+ 'coefficient',
+ 'wedge',
+
+ 'calibration',
+ 'cautious',
+
+ 'paragraph',
+ 'caution',
+
+ 'suitcase',
+ 'decimal',
+
+ 'puppy',
+ 'footpath',
+
+ 'closet',
+ 'pamphlet',
+
+ 'disappearance',
+ 'recreation',
+
+ 'slack',
+ 'consumption',
+
+ 'consumer',
+ 'token',
+
+ 'depression',
+ 'forward',
+
+ 'ivory',
+ 'onward',
+
+ 'orientation',
+ 'defy',
+
+ 'southwards',
+ 'northward',
+
+ 'yearn',
+ 'hail',
+
+ 'pilgrim',
+ 'spice',
+
+ 'fragrant',
+ 'analogy',
+
+ 'incense',
+ 'uniformly',
+
+ 'resemblance',
+ 'correlation',
+
+ 'interact',
+ 'coincide',
+
+ 'inversely',
+ 'striking',
+
+ 'qualify',
+ 'reciprocal',
+
+ 'devotion',
+ 'microscopic',
+
+ 'realistic',
+ 'distinctly',
+
+ 'linear',
+ 'bacon',
+
+ 'apparent',
+ 'gossip',
+
+ 'ramble',
+ 'shower',
+
+ 'priority',
+ 'decline',
+
+ 'precede',
+ 'descent',
+
+ 'subordinate',
+ 'slim',
+
+ 'taper',
+ 'petty',
+
+ 'inferior',
+ 'nice',
+
+ 'filament',
+ 'bacterium',
+
+ 'systematically',
+ 'lace',
+
+ 'spectrum',
+ 'drama',
+
+ 'germ',
+ 'theatre',
+
+ 'comedy',
+ 'quench',
+
+ 'tape',
+ 'assault',
+
+ 'usage',
+ 'extinguish',
+
+ 'absorption',
+ 'intake',
+
+ 'substantial',
+ 'physically',
+
+ 'luncheon',
+ 'body()',
+
+ 'ignorance',
+ 'insignificant',
+
+ 'doubtless',
+ 'iinfinitely',
+
+ 'ndefinite',
+ 'unlimited',
+
+ 'infinite()',
+ 'incapable',
+
+ 'fearless',
+ 'unique',
+
+ 'innumerable',
+ 'faultless',
+
+ 'inorganic',
+ 'foreign',
+
+ 'ruthless',
+ 'nought',
+
+ 'filthsnail',
+
+ 'compliment',
+ 'question',
+
+ 'hum',
+ 'literal()',
+
+ 'illiterate',
+ 'stationery',
+
+ 'plague',
+ 'situated',
+
+ 'graze()',
+ 'latitude',
+
+ 'softness',
+ 'commission',
+
+ 'locality',
+ 'vitamin',
+
+ 'stern',
+ 'idealism',
+
+ 'unpaid',
+ 'Venus',
+
+ 'bachelor',
+ 'mast',
+
+ 'violation',
+ 'towards',
+
+ 'enclosure',
+ 'catalogue',
+
+ 'violate',
+ 'subtle',
+
+ 'plead',
+ 'microprocessor',
+
+ 'calculus',
+ 'awful',
+
+ 'atom',
+ 'microwave',
+
+ 'negligible',
+ 'majesty',
+
+ 'gleam',
+ 'endanger',
+
+ 'prestige',
+ 'peril',
+
+ 'crisis',
+ 'dismiss',
+
+ 'fro',
+ 'mesh',
+
+ 'web',
+ 'network',
+
+ 'trifle',
+ 'crooked',
+
+ 'stubborn',
+ 'completion',
+
+ 'hull',
+ 'diplomatic',
+
+ 'strange',
+ 'alien',
+
+ 'distort',
+ 'twist',
+
+ 'ile',
+ 'twatt()',
+
+ 'elliptical',
+ 'haul',
+
+ 'hip',
+ 'devour',
+
+ 'retirement',
+ 'drawback',
+
+ 'inference',
+ 'rational',
+
+ 'propulsion',
+ 'propel',
+
+ 'recommendation',
+ 'overthrow',
+
+ 'impulse',
+ 'presumably',
+
+ 'gather',
+ 'shove()',
+
+ 'solidarity',
+ 'regiment',
+
+ 'bandit',
+ 'lever',
+
+ 'overtake',
+ 'nose()',
+
+ 'bald',
+ 'projector',
+
+ 'poll',
+ 'dizzy',
+
+ 'steal',
+ 'misery',
+
+ 'torment',
+ 'thrash',
+
+ 'dominant',
+ 'dominate',
+
+ 'statistics',
+ 'identical',
+
+ 'likeness',
+ 'even',
+
+ 'homogeneous',
+ 'notify',
+
+ 'simultaneous',
+ 'advertise',
+
+ 'coordinate',
+ 'popularity',
+
+ 'accessory',
+ 'whilstconj.',
+
+ 'correspondence',
+ 'currency',
+
+ 'entry',
+ 'inflation',
+
+ 'ordinarily',
+ 'customary',
+
+ 'resignation',
+ 'hydrocarbon',
+
+ 'blacksmith',
+ 'skip',
+
+ 'ferrous',
+ 'hop()',
+
+ 'regulate',
+ 'modulate()',
+
+ 'overlook',
+ 'settlement()',
+
+ 'adjoin',
+ 'mishief',
+
+ 'questionnaire',
+ 'Catholic',
+
+ 'sweetness',
+ 'theme',
+
+ 'accord',
+ 'nominate',
+
+ 'dessert',
+ 'finance',
+
+ 'astronomy',
+ 'embody',
+
+ 'nourish',
+ 'enhance',
+
+ 'elevate()',
+ 'raise',
+
+ 'introduce()',
+ 'peculiarity',
+
+ 'purify()',
+ 'individual',
+
+ 'essential',
+ 'bore',
+
+ 'flee',
+ 'earthenware',
+
+ 'outlaw',
+ 'wade',
+
+ 'probe',
+ 'expedition',
+
+ 'charcoal',
+ 'plain',
+
+ 'greed',
+ 'negotiate',
+
+ 'pedal',
+ 'moss',
+
+ 'thereof',
+ 'trivial',
+
+ 'detail',
+ 'concern',
+
+ 'what',
+ 'miniature',
+
+ 'hurt',
+ 'deformation',
+
+ 'deform',
+ 'replace',
+
+ 'scrap',
+ 'plastic',
+
+ 'shorthand',
+ 'garlic',
+
+
+ 'fringe',
+ 'perish',
+
+ 'scout',
+ 'random',
+
+ 'laundry',
+ 'hiss',
+
+ 'loosely',
+ 'rip',
+
+ 'rear',
+ 'speculate',
+
+ 'smuggle',
+ 'confidence',
+
+ 'velvet',
+ 'treasurer',
+
+ 'exposition',
+ 'observe',
+
+ 'preach',
+ 'momentary',
+
+ 'instantaneous',
+ 'couch',
+
+ 'slumber',
+ 'numerical',
+
+ 'buffalo',
+ 'rinse',
+
+ 'hydraulic',
+ 'harp',
+
+ 'watery',
+ 'reckon',
+
+ 'wrestle',
+ 'terminology',
+
+ 'proficient',
+ 'proficiency',
+
+ 'erect',
+ 'manuscript',
+
+ 'input',
+ 'dependant',
+
+ 'grant',
+ 'handbook',
+
+ 'miser',
+ 'adoption',
+
+ 'trolley',
+ 'oath',
+
+ 'vow',
+ 'wholesome',
+
+ 'revenue',
+ 'indoor',
+
+ 'pledge',
+ 'moderately',
+
+ 'fitness',
+ 'vision',
+
+ 'fitting',
+ 'snob',
+
+ 'occurrence',
+ 'snobbish',
+
+ 'influence',
+ 'attendant',
+
+ 'municipal',
+ 'automate',
+
+ 'conform',
+ 'divert',
+
+ 'specialize',
+ 'hazard',
+
+ 'standardize',
+ 'distinguish',
+
+ 'lengthen',
+ 'evaporate',
+
+ 'shame',
+ 'resign',
+
+ 'freshen',
+ 'perfect',
+
+ 'ventilate',
+ 'infect',
+
+ 'soften',
+ 'blaze',
+
+ 'acquaint',
+ 'facilitate',
+
+ 'lubricate',
+ 'paralyse',
+
+ 'subdue',
+ 'sorrowful',
+
+ 'suit',
+ 'subject',
+
+ 'confront',
+ 'insulate',
+
+ 'bend',
+ 'deafen',
+
+ 'integrate',
+ 'tiresome',
+
+ 'moor',
+ 'terrify',
+
+ 'alternate',
+ 'minimize',
+
+ 'mingle',
+ 'interconnect',
+
+ 'reconcile',
+ 'enrich',
+
+ 'degrade',
+ 'embarrass',
+
+ 'oblige',
+ 'decay',
+
+ 'contrast',
+ 'mature',
+
+ 'tangle',
+ 'ice',
+
+ 'overload',
+ 'develop',
+
+ 'sweeten',
+ 'nourishment',
+
+ 'thicken',
+ 'experimentation',
+
+ 'jog',
+ 'virtual',
+
+ 'establish',
+ 'baffle',
+
+ 'engage',
+ 'execution',
+
+ 'vector',
+ 'quartz',
+
+ 'pantry',
+ 'whitewash',
+
+ 'experimentally',
+ 'limestone',
+
+ 'graphite',
+ 'humidity',
+
+ 'verse',
+ 'handout',
+
+ 'unemployment',
+ 'disgrace',
+
+ 'residual',
+ 'remainder',
+
+ 'stiff',
+ 'excel',
+
+ 'hide',
+ 'ecology',
+
+ 'vital',
+ 'producer',
+
+ 'productive',
+ 'hoist',
+
+ 'productivity',
+ 'deliberately',
+
+ 'kidney',
+ 'censor',
+
+ 'shrine',
+ 'mystery',
+
+ 'deliberate',
+ 'profound',
+
+ 'trench',
+ 'editorial',
+
+ 'photography',
+ 'sociology',
+
+ 'conceive',
+ 'divine',
+
+ 'reject',
+ 'serpent',
+
+ 'maid',
+ 'maiden',
+
+ 'extravagant',
+ 'scorch',
+
+ 'context',
+ 'Heaven',
+
+ 'counsel',
+ 'trader',
+
+ 'tradesman',
+ 'dealer',
+
+ 'merchandise',
+ 'blue',
+
+ 'ware',
+ 'shark',
+
+ 'goodness',
+ 'gravel',
+
+ 'underwear',
+ 'sardine',
+
+ 'cancel',
+ 'tone',
+
+ 'gap',
+ 'scan',
+
+ 'sift',
+ 'uproar',
+
+ 'stroll',
+ 'choice',
+
+ 'triangular',
+ 'prose',
+
+ 'emission',
+ 'tolerant',
+
+ 'mute',
+ 'commodity',
+
+ 'routine',
+ 'deem',
+
+ 'recognition',
+ 'merciful',
+
+ 'awake',
+ 'undertaking',
+
+ 'identification',
+ 'personnel',
+
+ 'pitch',
+ 'hostage',
+
+ 'humanity',
+ 'thermal',
+
+ 'tropic',
+ 'personality',
+
+ 'tropical',
+ 'concession',
+
+ 'combustion',
+ 'flock',
+
+ 'whisker',
+ 'conviction',
+
+ 'certainty',
+ 'deficiency',
+
+ 'quantify',
+ 'deficient',
+
+ 'positively',
+ 'claim',
+
+ 'scarcity',
+ 'late',
+
+ 'flaw',
+ 'extract',
+
+ 'induce',
+ 'crank',
+
+ 'dissipate',
+ 'persuasion',
+
+ 'expel',
+ 'spherical',
+
+ 'Jupiter',
+ 'sight',
+
+ 'mistress',
+ 'plea',
+
+ 'mosque',
+ 'petition',
+
+ 'cleanliness',
+ 'global',
+
+ 'rap',
+ 'inclination',
+
+ 'rash',
+ 'admiration',
+
+ 'bronze',
+ 'slit',
+
+ 'industrious',
+ 'section',
+
+ 'agreeable',
+ 'hardy',
+
+ 'compulsory',
+ 'denounce',
+
+ 'segment',
+ 'mighty',
+
+ 'constraint',
+ 'pious',
+
+ 'lobby',
+ 'consistent',
+
+ 'thoughtless',
+ 'predecessor',
+
+ 'visa',
+ 'migrate',
+
+ 'gracious',
+ 'modesty',
+
+ 'pertinent',
+ 'siren',
+
+ 'utensil',
+ 'maple',
+
+ 'kilowatt',
+ 'follower',
+
+ 'apt',
+ 'garage',
+
+ 'motel',
+ 'pant',
+
+ 'hitherto',
+ 'jack',
+
+ 'motorway',
+ 'sitting-room',
+
+ 'barometer',
+ 'scratch',
+
+ 'count',
+ 'message',
+
+ 'enlighten',
+ 'implore',
+
+ 'knight',
+ 'subsequently',
+
+ 'marvel',
+ 'cheat',
+
+ 'periodical',
+ 'currently',
+
+ 'universally',
+ 'raisin',
+
+ 'bushel',
+ 'fracture',
+
+ 'bankrupt',
+ 'persecute',
+
+ 'incline',
+ 'tack',
+
+ 'destructive',
+ 'flask',
+
+ 'terrace',
+ 'tranquil',
+
+ 'civilian',
+ 'equation',
+
+ 'commonplace',
+ 'equilibrium',
+
+ 'frequency',
+ 'bleach',
+
+ 'barren',
+ 'float',
+
+ 'flake',
+ 'adjacent',
+
+ 'deflection',
+ 'cape',
+
+ 'clash',
+ 'prejudice',
+
+ 'collide',
+ 'ingredient',
+
+ 'shell',
+ 'battery',
+
+ 'foam',
+ 'limp',
+
+ 'bypass',
+ 'ascend',
+
+ 'dispatch',
+ 'stagger',
+
+ 'hover',
+ 'range',
+
+ 'faction',
+ 'clap',
+
+ 'drainage',
+ 'reptile',
+
+ 'ohm',
+ 'hostess',
+
+ 'overhear',
+ 'waitress',
+
+ 'feminine',
+ 'blouse',
+
+ 'goddess',
+ 'coward',
+
+ 'radiator',
+ 'strive',
+
+ 'mess',
+ 'distortion',
+
+ 'Saturn',
+ 'shorten',
+
+ 'milky',
+ 'peer',
+
+ 'wrench',
+ 'nickel',
+
+ 'wring',
+ 'junior',
+
+ 'annually',
+ 'practicable',
+
+ 'capability',
+ 'basin',
+
+ 'interior',
+ 'tickle',
+
+ 'incredible',
+ 'difficult',
+
+ 'refugee',
+ 'antarctic',
+
+ 'pumpkin',
+ 'polar',
+
+ 'masculine',
+ 'endurance',
+
+ 'baron',
+ 'intent',
+
+ 'pasture',
+ 'sodium',
+
+ 'end',
+ 'oyster',
+
+ 'skyscraper',
+ 'magician',
+
+ 'module',
+ 'feel',
+
+ 'ambiguous',
+ 'destiny',
+
+ 'doom',
+ 'proposition',
+
+ 'bid',
+ 'decidedly',
+
+ 'destine',
+ 'formulation',
+
+ 'explicit',
+ 'classic',
+
+ 'sensible',
+ 'promptly',
+
+ 'brightness',
+ 'deposition',
+
+ 'sensitivity',
+ 'enchant',
+
+ 'representation',
+ 'confidential',
+
+ 'nursery',
+ 'fascinate',
+
+ 'superstition',
+ 'perplex',
+
+ 'stray',
+ 'bewilder',
+
+ 'hurl',
+ 'pore',
+
+ 'jerk',
+ 'fuss',
+
+ 'snap',
+ 'offensive',
+
+ 'ally',
+ 'cartoon',
+
+ 'threshold',
+ 'vine',
+
+ 'charm',
+ 'expire',
+
+ 'fair',
+ 'bull',
+
+ 'wharf',
+ 'circus',
+
+ 'ass',
+ 'filter',
+
+ 'propeller',
+ 'spiral',
+
+ 'nut',
+ 'oval',
+
+ 'Roman',
+ 'video',
+
+ 'thesis',
+ 'reed',
+ 'forum',
+ 'box',
+
+ 'hug',
+ 'leakage',
+
+ 'stairway',
+ 'bridle',
+
+ 'monopoly',
+ 'exile',
+
+ 'streamline',
+ 'flux',
+
+ 'willow',
+ 'track',
+
+ 'rascal',
+ 'otherwise',
+
+ 'prevalent',
+ 'gramophone',
+
+ 'province',
+ 'vicinity',
+
+ 'consul',
+ 'grove',
+
+ 'retail',
+ 'fission',
+
+ 'flexible',
+ 'prey',
+
+ 'inspiration',
+ 'martyr',
+
+ 'neighbouring',
+ 'grin',
+
+ 'expect',
+ 'blush',
+
+ 'attachment',
+ 'ripple',
+
+ 'quantitative',
+ 'junction',
+
+ 'allied',
+ 'mitten',
+
+ 'chestnut',
+ 'solar',
+
+ 'exceptional',
+ 'impose',
+
+ 'utilization',
+ 'stereo',
+
+ 'cubic',
+ 'legislation',
+
+ 'historian',
+ 'historic',
+
+ 'mechanics',
+ 'intellect',
+
+ 'ideally',
+ 'abstract',
+
+ 'slang',
+ 'courtesy',
+
+ 'ion',
+ 'excursion',
+
+ 'twilight',
+ 'prism',
+
+ 'grim',
+ 'troublesome',
+
+ 'similarity',
+ 'flank',
+
+ 'analogue',
+ 'optimism',
+
+ 'sophisticated',
+ 'comprehend',
+
+ 'straightforward',
+ 'idleness',
+
+ 'wasteful',
+ 'flight',
+
+ 'dust',
+ 'violent',
+
+ 'rapture',
+ 'furious',
+
+ 'shabby',
+ 'satisfaction',
+
+ 'fury',
+ 'rapidity',
+
+ 'snack',
+ 'pants',
+
+ 'bitterness',
+ 'wither',
+
+ 'parade',
+ 'fastener',
+
+ 'clasp',
+ 'stammer',
+
+ 'panic',
+ 'spatial',
+
+ 'terrorist',
+ 'suspicious',
+
+ 'fantastic',
+ 'shady',
+
+ 'pneumatic',
+ 'questionable',
+
+ 'aerial',
+ 'gnaw',
+
+ 'peacock',
+ 'portable',
+
+ 'void',
+ 'adjustable',
+
+ 'longing',
+ 'frightful',
+
+ 'grateful',
+ 'formidable',
+
+ 'dreadful',
+ 'likelihood()',
+
+ 'possibility',
+ 'particular',
+
+ 'monstrous',
+ 'appreciable',
+
+ 'respectable',
+ 'whereby',
+
+ 'shameful',
+ 'ponder',
+
+ 'comparable',
+ 'exploration',
+
+ 'discern',
+ 'inaugurate',
+
+ 'generosity',
+ 'initiate',
+
+ 'fell()',
+ 'commence',
+
+ 'carry',
+ 'reclaim',
+
+ 'evolution',
+ 'unlock',
+
+ 'start',
+ 'sheriff',
+
+ 'sovereign',
+ 'reel',
+
+ 'monarch',
+ 'mob',
+
+ 'bugle',
+ 'decisive',
+
+ 'extinct',
+ 'polymer',
+
+ 'govern',
+ 'hurricane',
+
+ 'winding',
+ 'sting',
+
+ 'curly',
+ 'gigantic',
+
+ 'repel',
+ 'uphold',
+
+ 'exemplify',
+ 'rectangle',
+
+ 'reside',
+ 'administration',
+
+ 'induction',
+ 'Christ',
+
+ 'second-hand',
+ 'dwell',
+
+ 'symposium',
+ 'whoeverpro',
+
+ 'rectify',
+ 'vein',
+
+ 'competitor',
+ 'competitive',
+
+ 'contend',
+ 'alert',
+
+ 'warning',
+ 'whale',
+
+ 'selection',
+ 'literary',
+
+ 'thorough',
+ 'refinery',
+
+ 'finely',
+ 'vigorous',
+
+ 'fright',
+ 'dismay',
+
+ 'astonishment',
+ 'empirical',
+
+ 'support',
+ 'longitude',
+
+ 'economics',
+ 'notwithstanding',
+
+ 'prohibition',
+ 'perfection',
+
+ 'shortcut',
+ 'prudent',
+
+ 'inlet',
+ 'compact',
+
+ 'tightly',
+ 'barely',
+
+ 'metallic',
+ 'interpret',
+
+ 'tuna',
+ 'untie',
+
+ 'henceforth',
+ 'tackle',
+
+ 'presentation',
+ 'dissolve()',
+
+ 'mustard',
+ 'tuberculosis',
+
+ 'version',
+ 'incorporate',
+
+ 'construction',
+ 'yeast',
+
+ 'abbreviation',
+ 'tutor',
+
+ 'thrifty',
+ 'disillusion',
+
+ 'economically',
+ 'horn',
+
+ 'interview',
+ 'reef',
+
+ 'receiver',
+ 'coke',
+
+ 'doctrine',
+ 'intercourse',
+
+ 'symphony',
+ 'degradation',
+
+ 'soy',
+ 'parachute',
+
+ 'oar',
+ 'discourse',
+
+ 'ginger',
+ 'inspector',
+
+ 'architect',
+ 'reserve',
+
+ 'splash',
+ 'challenge',
+
+ 'clip',
+ 'enterprise',
+
+ 'theory',
+ 'firmness',
+
+ 'diminish',
+ 'resolute',
+
+ 'lessen',
+ 'sturdy',
+
+ 'steady',
+ 'stability',
+
+ 'persistence',
+ 'shrill',
+
+ 'persevere',
+ 'hypothesis',
+
+ 'bridge',
+ 'insistent',
+
+ 'rate',
+ 'sham',
+
+ 'clamp',
+ 'presume',
+
+ 'fake',
+ 'beetle',
+
+ 'clip',
+ 'heater',
+
+ 'sandwich',
+ 'deepen',
+
+ 'homely',
+ 'heighten',
+
+ 'fowl',
+ 'line',
+
+ 'poultry',
+ 'stillness',
+
+ 'lodging',
+ 'succession',
+
+ 'successor',
+ 'craft',
+
+ 'quarterly',
+ 'souvenir',
+
+ 'documentary',
+ 'disorder',
+
+ 'scheme',
+ 'complaint',
+
+ 'marginal',
+ 'forthcoming',
+
+ 'terminal',
+ 'extreme',
+
+ 'geometrical',
+ 'polarity',
+
+ 'bazaar',
+ 'guitar',
+
+ 'gathering',
+ 'irritate',
+
+ 'set',
+ 'timely',
+
+ 'drastic',
+ 'radical',
+
+ 'Christian',
+ 'energetic',
+
+ 'elemental',
+ 'mechanism',
+
+ 'severe',
+ 'dynamic',
+
+ 'ultimate',
+ 'witty',
+
+ 'muscular',
+ 'fence',
+
+ 'ingenious',
+ 'fellowship',
+
+ 'ingenuity',
+ 'ham',
+
+ 'framework',
+ 'Mars',
+
+ 'stall',
+ 'piston',
+
+ 'tact',
+ 'vigour',
+
+ 'mixer',
+ 'bribe',
+
+ 'engagement',
+ 'response',
+
+ 'cloudy',
+ 'wield',
+
+ 'badge',
+ 'modification',
+
+ 'corrupt',
+ 'environmental',
+
+ 'locust',
+ 'fossil',
+
+ 'wasp',
+ 'pregnant',
+
+ 'desolate',
+ 'glider',
+
+ 'royalty',
+ 'slide',
+
+ 'illusion',
+ 'pulley',
+
+ 'correlate',
+ 'ruby',
+
+ 'granite',
+ 'outcome',
+
+ 'walnut',
+ 'hit',
+
+ 'arc',
+ 'transverse',
+
+ 'exclamation',
+ 'traverse',
+
+ 'harmonious',
+ 'monk',
+
+ 'bed',
+ 'synthesis',
+
+ 'cooperative',
+ 'applause',
+
+ 'hinge',
+ 'applaud',
+
+ 'proper',
+ 'pal',
+
+ 'composite',
+ 'romantic',
+
+ 'hospitality',
+ 'howl',
+
+ 'hurrahint.',
+ 'log',
+
+ 'aerospace',
+ 'pedestrian',
+
+ 'hesitate',
+ 'move',
+
+ 'pest',
+ 'turtle',
+
+ 'strait',
+ 'seaport',
+
+ 'custom',
+ 'surplus',
+
+ 'cable',
+ 'excess',
+
+ 'overestimate',
+ 'orchard',
+
+ 'pirate',
+ 'peel',
+
+ 'seaside',
+ 'stone',
+
+ 'excessively',
+ 'slap',
+
+ 'boiler',
+ 'define',
+
+ 'inland',
+ 'regulation',
+
+ 'salmon',
+ 'provision',
+
+ 'roller',
+ 'replacement',
+
+ 'valuable',
+ 'spacious',
+
+ 'silicon',
+ 'radial',
+
+ 'regularity',
+ 'amplitude',
+
+ 'photoelectric',
+ 'orchestra',
+
+ 'optical',
+ 'blast',
+
+ 'shrub',
+ 'pipe',
+
+ 'irrigation',
+ 'coffin',
+
+ 'inertia',
+ 'bureaucracy',
+
+ 'monster',
+ 'obstinate',
+
+ 'client',
+ 'inherent',
+
+ 'fixture',
+ 'pluck',
+
+ 'agitation',
+ 'antique',
+
+ 'skeleton',
+ 'thigh',
+
+ 'constitute',
+ 'cereal',
+
+ 'assessment',
+ 'hound',
+
+ 'tribute',
+ 'gutter',
+
+ 'number',
+ 'arch',
+
+ 'commonwealth',
+ 'impartial',
+
+ 'vault',
+ 'duke',
+
+ 'consolidate',
+ 'rooster',
+
+ 'mercury',
+ 'studio',
+
+ 'convention',
+ 'implement',
+
+ 'earnings',
+ 'combat',
+
+ 'impart',
+ 'workpiece',
+
+ 'energize',
+ 'reveal',
+
+ 'flavour',
+ 'dove',
+
+ 'insulator',
+ 'plateau',
+
+ 'vaccinate',
+ 'tower',
+
+ 'elevation',
+ 'lofty',
+
+ 'intervene',
+ 'lattice',
+
+ 'olive',
+ 'dry',
+
+ 'perception',
+ 'Thanksgiving',
+
+ 'sentiment',
+ 'sensation',
+
+ 'outline',
+ 'conception',
+
+ 'notion',
+ 'chill',
+
+ 'summary',
+ 'generalize',
+
+ 'mend',
+ 'impress',
+
+ 'by-product',
+ 'complication',
+
+ 'duplicate',
+ 'satellite',
+
+ 'complexity',
+ 'appendix',
+
+ 'extra',
+ 'emerge',
+
+ 'charge',
+ 'coach',
+
+ 'incidentally',
+ 'obedience',
+
+ 'negative',
+ 'maintenance',
+
+ 'corrosion',
+ 'veto',
+
+ 'erosion',
+ 'denial',
+
+ 'subsidiary',
+ 'Buddhism',
+
+ 'answer',
+ 'dedicate',
+
+ 'obedient',
+ 'pineapple',
+
+ 'flatter',
+ 'seam',
+
+ 'landscape',
+ 'windmill',
+
+ 'abundance',
+ 'indignation',
+
+ 'plump',
+ 'molecular',
+
+ 'shatter',
+ 'limb',
+
+ 'offset',
+ 'fraction',
+
+ 'analytic',
+ 'distract',
+
+ 'installment',
+ 'split',
+
+ 'detach',
+ 'interface',
+
+ 'partition',
+ 'relay',
+
+ 'diverge',
+ 'litter',
+
+ 'abolish',
+ 'gangster',
+
+ 'fly',
+ 'indulge',
+
+ 'herd',
+ 'extraordinarily',
+
+ 'aviation',
+ 'pattern',
+
+ 'imitation',
+ 'reproduce',
+
+ 'magnify',
+ 'handicap',
+
+ 'hamper',
+ 'estate',
+
+ 'handy',
+ 'reactor',
+
+ 'blunder',
+ 'mirror',
+
+ 'offence',
+ 'echo',
+
+ 'contrary',
+ 'contradict',
+
+ 'propagation',
+ 'propagate',
+
+ 'decree',
+ 'toss',
+
+ 'flannel',
+ 'valve',
+
+ 'originate',
+ 'spokesman',
+
+ 'outlet',
+ 'incidence',
+
+ 'generate',
+ 'flame',
+
+ 'invoice',
+ 'detector',
+
+ 'luminous',
+ 'exert',
+
+ 'beam',
+ 'motive',
+
+ 'dynamo',
+ 'rattle',
+
+ 'dioxide',
+ 'offspring',
+
+ 'bait',
+ 'youngster',
+
+ 'whereasconj.',
+ 'malice',
+
+ 'subsequent',
+ 'nightmare',
+
+ 'spite',
+ 'yoke',
+
+ 'deprive',
+ 'mountainous',
+
+ 'windy',
+ 'versatile',
+
+ 'stew',
+ 'mop',
+
+ 'halve',
+ 'provoke',
+
+ 'symmetry',
+ 'symmetrical',
+
+ 'resent',
+ 'assert',
+
+ 'affirm',
+ 'shortage',
+
+ 'alignment',
+ 'jealousy',
+
+ 'cuckoo',
+ 'gamble',
+
+ 'jam',
+ 'ferry',
+
+ 'solo',
+ 'linger',
+
+ 'distinct',
+ 'dictator',
+
+ 'fighter',
+ 'champion',
+
+ 'insight',
+ 'jelly',
+
+ 'tease',
+ 'cavity',
+
+ 'grease',
+ 'disturbance',
+
+ 'mobilize',
+ 'kinetic',
+
+ 'location',
+ 'theorem',
+
+ 'subscribe',
+ 'orient',
+
+ 'summit',
+ 'pressure',
+
+ 'sculpture',
+ 'capacitance',
+
+ 'electronics',
+ 'electrode',
+
+ 'capacitor',
+ 'electrician',
+
+ 'telex',
+ 'first-rate',
+
+ 'kindle',
+ 'basement',
+
+ 'geology',
+ 'mortgage',
+
+ 'geographical',
+ 'hostile',
+
+ 'magistrate',
+ 'underestimate',
+
+ 'whisper',
+ 'murmur',
+
+ 'enroll',
+ 'burner',
+
+ 'equivalent',
+ 'morality',
+
+ 'clatter',
+ 'triumphant',
+
+ 'theft',
+ 'attendance',
+
+ 'between',
+ 'cartridge',
+
+ 'yolk',
+ 'detain',
+
+ 'algebra',
+ 'simplicity',
+
+ 'fill',
+ 'attorney',
+
+ 'simple',
+ 'deputy',
+
+ 'jug',
+ 'delegate',
+
+ 'representative',
+ 'massacre',
+
+ 'gorilla',
+ 'embassy',
+
+ 'magnitude',
+ 'ambassador',
+
+ 'stride',
+ 'mansion',
+
+ 'continental',
+ 'multitude',
+
+ 'barley',
+ 'infinity',
+
+ 'steak',
+ 'butt',
+
+ 'largely',
+ 'prairie',
+
+ 'widely',
+ 'smash',
+
+ 'sneeze',
+ 'lighter',
+
+ 'snore',
+ 'thresh',
+
+ 'forge',
+ 'passport',
+
+ 'inaccessible',
+ 'latent',
+
+ 'frustrate',
+ 'frail',
+
+ 'fragile',
+ 'catalyst',
+
+ 'crisp',
+ 'promotion',
+
+ 'reckless',
+ 'follow',
+
+ 'vulgar',
+ 'overflow',
+
+ 'massive',
+ 'smart',
+
+ 'harsh',
+ 'thereafter',
+
+ 'jungle',
+ 'prick',
+
+ 'porcelain',
+ 'initial',
+
+ 'magnetism',
+ 'glossary',
+
+ 'vocabulary',
+ 'sheer',
+
+ 'stem',
+ 'perpendicular',
+
+ 'poke',
+ 'author',
+
+ 'lipstick',
+ 'innovation',
+
+ 'stainless',
+ 'initiative',
+
+ 'puff',
+ 'infectious',
+
+ 'shipwreck',
+ 'romance',
+
+ 'report',
+ 'herald',
+
+ 'circular',
+ 'leaflet',
+
+ 'sensor',
+ 'missionary',
+
+ 'convey',
+ 'pierce',
+
+ 'penetration',
+ 'antenna',
+
+ 'penalty',
+ 'transaction',
+
+ 'virgin',
+ 'exclusive',
+
+ 'notorious',
+ 'scandal',
+
+ 'specimen',
+ 'extraction',
+
+ 'equator',
+ 'adore',
+
+ 'worship',
+ 'punch',
+
+ 'gear',
+ 'strife',
+
+ 'bug',
+ 'persist',
+
+ 'proceeding',
+ 'acknowledge',
+
+ 'breakfast',
+ 'shoulder',
+
+ 'dine',
+ 'offer',
+
+ 'length',
+ 'membership',
+
+ 'systematic',
+ 'integrity',
+
+ 'kit',
+ 'commend',
+
+ 'muse',
+ 'meditate',
+
+ 'hushint.',
+ 'repeal',
+
+ 'brood',
+ 'immerse',
+
+ 'lathe',
+ 'row',
+
+ 'mock',
+ 'supersonic',
+
+ 'reign',
+ 'ultrasonic',
+
+ 'resident',
+ 'nickname',
+
+ 'surpass',
+ 'waggon',
+
+ 'spectacle',
+ 'haunt',
+
+ 'visit',
+ 'frequent',
+
+ 'shovel',
+ 'toad',
+
+ 'diesel',
+ 'horizon',
+
+ 'errand',
+ 'ascertain',
+
+ 'groove',
+ 'tactics',
+
+ 'grassy',
+ 'herb',
+
+ 'manipulate',
+ 'cruelty',
+
+ 'warehouse',
+ 'hatch',
+
+ 'participate',
+ 'participant',
+
+ 'napkin',
+ 'senator',
+
+ 'reference',
+ 'spectator',
+
+ 'parameter',
+ 'recipe',
+
+ 'assumption',
+ 'rule',
+
+ 'substance',
+ 'friction',
+
+ 'sermon',
+ 'absent',
+
+ 'awkward',
+ 'wretched',
+
+ 'disagreement',
+ 'immortal',
+
+ 'misfortune',
+ 'incompatible',
+
+ 'stuffy',
+ 'instability',
+
+ 'incomplete',
+ 'improper',
+
+ 'dissatisfaction',
+ 'irrespective',
+
+ 'opaque',
+ 'inevitably',
+
+ 'watertight',
+ 'undesirable',
+
+ 'inaccurate',
+ 'unreasonable',
+
+ 'absurd',
+ 'irregularity',
+
+ 'unfit',
+ 'uncertain',
+
+ 'impurity',
+ 'disregard',
+
+ 'inadequate',
+ 'invariably',
+
+ 'uneasy',
+ 'mammal',
+
+ 'supplement',
+ 'complement',
+
+ 'compensation',
+ 'barge',
+
+ 'humanitarian',
+ 'icy',
+
+ 'invalid',
+ 'objective',
+
+ 'fluctuation',
+ 'villa',
+
+ 'strength',
+ 'characterize',
+
+ 'fluctuate',
+ 'signify',
+
+ 'ward',
+ 'manifest',
+
+ 'seemingly',
+ 'norm',
+
+ 'superficial',
+ 'heading',
+
+ 'criterion',
+ 'discrimination',
+
+ 'advocate',
+ 'transform',
+
+ 'alteration',
+ 'reason',
+
+ 'loosen',
+ 'program',
+
+ 'fall',
+ 'edit',
+
+ 'rim',
+ 'hearth',
+
+ 'verge',
+ 'fireplace',
+
+ 'patron',
+ 'diploma',
+
+ 'indispensable',
+ 'sullen',
+
+ 'breakdown',
+ 'essence',
+
+ 'bandage',
+ 'captive',
+
+ 'reverse',
+ 'deviation',
+
+ 'arctic',
+ 'tragic',
+
+ 'grief',
+ 'firework',
+
+ 'wrath',
+ 'storm',
+
+ 'woe',
+ 'vengeance',
+
+ 'tyrant',
+ 'grumble',
+
+ 'tyranny',
+ 'assurance',
+
+ 'panther',
+ 'fuse',
+
+ 'leopard',
+ 'reservation',
+
+ 'announce',
+ 'safeguard',
+
+ 'fortress',
+ 'preservation',
+
+ 'mint',
+ 'saturation',
+
+ 'mist',
+ 'chip',
+
+ 'siege',
+ 'baseball',
+
+ 'inclusive',
+ 'scar',
+
+ 'embrace',
+ 'radius',
+
+ 'tar',
+ 'trigger',
+
+ 'hemisphere',
+ 'blind',
+
+ 'liner',
+ 'millionaire',
+
+ 'shutter',
+ 'white',
+
+ 'lily',
+ 'bank',
+
+ 'idiot',
+ 'blond',
+
+ 'bestow',
+ 'subdivide',
+
+ 'tabulate',
+ 'dock',
+
+ 'straighten',
+ 'flatten',
+
+ 'ascribe',
+ 'except',
+
+ 'entitle',
+ 'haughty',
+
+ 'ballet',
+ 'foul',
+
+ 'assassinate',
+ 'burial',
+
+ 'luxurious',
+ 'patriot',
+
+ 'patriotic',
+ 'dwarf',
+
+ 'alasint.',
+ 'stout',
+
+ 'pathetic',
+ 'Egyptian',
+
+ 'shouldaux.',
+ 'oughtaux',
+
+ 'referee',
+'scripture',
+
+ 'pendulum',
+'gross',
+
+'outbreak',
+'heave',
+
+ 'shuttle',
+ 'pop',
+
+ 'market',
+ 'lining',
+
+ 'mild',
+ 'rigorous',
+
+ 'climax',
+ 'shrimp',
+
+ 'panel',
+ 'peak',
+
+ 'epoch',
+ 'drain',
+
+ 'cane',
+ 'switch',
+
+ 'immigrate',
+ 'expenditure',
+
+ 'board',
+ 'lump',
+
+ 'disperse',
+ 'elapse',
+
+ 'deviate',
+ 'hoarse',
+
+ 'clearing',
+ 'pose',
+
+ 'eclipse',
+ 'quiver',
+
+ 'shade',
+ 'unanimous',
+
+ 'constitution',
+ 'pier',
+
+ 'spill',
+ 'span',
+
+ 'perch',
+ 'flutter',
+
+ 'frock',
+ 'clown',
+
+ 'resume',
+ 'pace',
+
+ 'pope',
+ 'axle',
+
+ 'lounge',
+ 'chord',
+
+ 'realization',
+ 'pyjamas',
+
+ 'measurement',
+ 'elegant',
+
+ 'refreshment',
+ 'bishop',
+
+ 'ticket',
+ 'software',
+
+ 'hard',
+ 'kernel',
+
+ 'gesture',
+ 'insert',
+
+ 'situation',
+ 'wisdom',
+
+ 'growl',
+ 'buzz',
+
+ 'shaft',
+ 'breed',
+
+ 'ear',
+ 'dean',
+
+ 'sink',
+ 'fertile',
+
+ 'ranch',
+ 'versus',
+
+ 'grope',
+ 'pedlar',
+
+ 'squat',
+ 'scrub',
+
+ 'rally',
+ 'tread',
+
+ 'fling',
+ 'crack',
+
+ 'escort',
+ 'slander',
+
+ 'swell',
+ 'menace',
+
+ 'tramp',
+ 'suicide',
+
+ 'tighten',
+ 'jingle',
+
+ 'trample',
+ 'thrill',
+
+ 'fret',
+ 'tilt',
+
+ 'revolve',
+ 'deflect',
+
+ 'rotate',
+ 'repay',
+
+ 'compensate',
+ 'hoe',
+
+ 'default',
+ 'scoff',
+
+ 'infer',
+ 'retort',
+
+ 'broaden',
+ 'chorus',
+
+ 'decompose',
+ 'beware',
+
+ 'grab',
+ 'riot',
+
+ 'entreat',
+ 'urge',
+
+ 'supervise',
+ 'shrug',
+
+ 'concentrate',
+ 'revive',
+
+ 'terminate',
+ 'dazzle',
+
+ 'transplant',
+ 'peck',
+
+ 'xerox',
+ 'trot',
+
+'solidify',
+ 'ridicule',
+
+ 'sneer',
+ 'boycott',
+
+ 'chatter',
+ 'plunder',
+
+ 'endeavor',
+ 'scramble',
+
+ 'flap',
+ 'credit',
+
+ 'tow',
+ 'clockwise',
+
+ 'slaughter',
+ 'headlong',
+
+ 'counter',
+ 'melancholy',
+
+ 'eastward',
+ 'bulletin',
+
+ 'Moslem',
+ 'allowancen',
+
+]
+module.exports = {
+ wordList: word_list
+}
\ No newline at end of file
diff --git a/data/cet6_import.js b/data/cet6_import.js
new file mode 100644
index 0000000..c124f7b
--- /dev/null
+++ b/data/cet6_import.js
@@ -0,0 +1,422 @@
+var word_list=[
+
+ 'hospitality',
+ 'pastime',
+ 'revenue',
+ 'routine',
+ 'scorn',
+ 'shortage',
+ 'smash',
+ 'stability',
+ 'stack',
+ 'standard',
+ 'surface',
+ 'temperament',
+ 'threshold',
+ 'tolerance',
+ 'transaction',
+ 'trend',
+ 'transition',
+ 'variation',
+ 'warehouse',
+ 'way',
+ 'access',
+ 'accommodation',
+ 'acknowledgement',
+ 'pattern',
+ 'penalty',
+ 'pension',
+ 'personality',
+ 'pledge',
+ 'position',
+ 'predecessor',
+ 'premise',
+ 'prescription',
+ 'preservation',
+ 'prestige',
+ 'priority',
+ 'prestige',
+ 'prospect',
+ 'rate',
+ 'ration',
+ 'reflection',
+ 'recession',
+ 'reputation',
+ 'reservation',
+ 'illusion',
+ 'ingredient',
+ 'insight',
+ 'inspection',
+ 'instinct',
+ 'integrity',
+ 'intuition',
+ 'lease',
+ 'legislation',
+ 'limitation',
+ 'loyalty',
+ 'luxury',
+ 'manifestation',
+ 'mechanism',
+ 'minority',
+ 'misfortune',
+ 'morality',
+ 'notion',
+ 'obligation',
+ 'occasion',
+ 'opponent',
+ 'ornament',
+ 'admiration',
+ 'advocate',
+ 'allowance',
+ 'ambition',
+ 'analogy',
+ 'anticipation',
+ 'appreciation',
+ 'array',
+ 'assurance',
+ 'blame',
+ 'blunder',
+ 'budget',
+ 'capability',
+ 'cash',
+ 'circulation',
+ 'commitment',
+ 'compensation',
+ 'consideration',
+ 'distinction',
+ 'emergency',
+ 'encouragement',
+ 'essence',
+ 'estimate',
+ 'expenditure',
+ 'extinctionn',
+ 'fashion',
+ 'flaw',
+ 'fortune',
+ 'fraction',
+ 'fuse',
+ 'guarantee',
+ 'guilt',
+ 'harmony',
+
+
+ 'abnormal',
+ 'absurd',
+ 'abundant',
+ 'acute',
+ 'aggressive',
+ 'ambiguous',
+ 'ambitious',
+ 'appropriate',
+ 'authentic',
+ 'average',
+ 'barren',
+ 'bound',
+ 'chronic',
+ 'commentary',
+ 'compact',
+ 'competitive',
+ 'compulsory',
+ 'confidential',
+ 'conservative',
+ 'consistent',
+ 'conspicuous',
+ 'crucial',
+ 'current',
+ 'decent',
+ 'delicate',
+ 'destructive',
+ 'economic',
+ 'elegant',
+ 'embarrassing',
+ 'energetic',
+ 'equivalent',
+ 'eternal',
+ 'exclusive',
+ 'extinct',
+ 'fake',
+ 'fatal',
+ 'feasible',
+ 'feeble',
+ 'gloomy',
+ 'greasy',
+ 'identical',
+ 'imaginative',
+ 'inaccessible',
+ 'inadequate',
+ 'incredible',
+ 'indifference',
+ 'indignant',
+ 'infectious',
+ 'inferior',
+ 'inferior',
+ 'inherent',
+ 'inspirational',
+ 'intent',
+ 'intricate',
+ 'Intrinsic',
+ 'irreplaceable',
+ 'literal',
+ 'massive',
+ 'merciful',
+ 'mobile',
+ 'naive',
+ 'negligible',
+ 'notorious',
+ 'obedient',
+ 'obscure',
+ 'optimistic',
+ 'original',
+ 'pathetic',
+ 'persistent',
+ 'potential',
+ 'prevalent',
+ 'primitive',
+ 'proficient',
+ 'profound',
+ 'prominent',
+ 'prompt',
+ 'raw',
+ 'relevant',
+ 'respectable',
+ 'rewarding',
+ 'rough',
+ 'rude',
+ 'sensitive',
+ 'sheer',
+ 'shrewd',
+ 'stationary',
+ 'subordinate',
+ 'subtle',
+ 'superficial',
+ 'suspicious',
+ 'tedious',
+ 'trivial',
+ 'turbulent',
+ 'underlying',
+ 'versatile',
+ 'vivid',
+ 'void',
+ 'vulnerable',
+ 'worth',
+
+
+ 'abandon',
+ 'acknowledge',
+ 'acquaint',
+ 'acquire',
+ 'afford',
+ 'allege',
+ 'alternate',
+ 'anticipate',
+ 'applaud',
+ 'ascend',
+ 'ascribe',
+ 'assemble',
+ 'assign',
+ 'attribute',
+ 'base',
+ 'bewilder',
+ 'breed',
+ 'cling',
+ 'coincide',
+ 'collaborate',
+ 'collide',
+ 'commence',
+ 'compensate',
+ 'complement',
+ 'comply',
+ 'conceive',
+ 'concern',
+ 'condense',
+ 'conflict',
+ 'conform',
+ 'confront',
+ 'conserve',
+ 'consolidate',
+ 'convey',
+ 'crash',
+ 'cruise',
+ 'dazzle',
+ 'deceive',
+ 'decline',
+ 'dedicate',
+ 'defend',
+ 'defy',
+ 'deny',
+ 'deprive',
+ 'derive',
+ 'descend',
+ 'descend',
+ 'deserve',
+ 'deviate',
+ 'disguise',
+ 'dominate',
+ 'drain',
+ 'duplicate',
+ 'eliminate',
+ 'endure',
+ 'enhance',
+ 'enroll',
+ 'evoke',
+ 'immerse',
+ 'impose',
+ 'induce',
+ 'indulge',
+ 'intend',
+ 'interpret',
+ 'jeopardize',
+ 'linger',
+ 'locate',
+ 'magnify',
+ 'mean',
+ 'mingle',
+ 'minimize',
+ 'monitor',
+ 'neglect',
+ 'occupy',
+ 'oppress',
+ 'originate',
+ 'overlap',
+ 'overwhelm',
+ 'parade',
+ 'permeate',
+ 'prescribe',
+ 'preside',
+ 'prolong',
+ 'promise',
+ 'propel',
+ 'protest',
+ 'provoke',
+ 'radiate',
+ 'reconcile',
+ 'refresh',
+ 'refute',
+ 'remain',
+ 'repel',
+ 'rescue',
+ 'resign',
+ 'resort',
+ 'resume',
+ 'revenge',
+ 'scan',
+ 'scrape',
+ 'scratch',
+ 'shrink',
+ 'standardize',
+ 'steer',
+ 'strengthen',
+ 'stretch',
+ 'subscribe',
+ 'suck()',
+ 'suppress',
+ 'sustain',
+ 'tackle',
+ 'tempt',
+ 'terminate',
+ 'transmit',
+ 'verify',
+ 'view',
+ 'wreck',
+
+
+ 'deliberately',
+ 'deliberately',
+ 'exclusively',
+ 'explicitly',
+ 'forcibly',
+ 'formerly',
+ 'increasingly',
+ 'inevitably',
+ 'intentionally',
+ 'optimistically',
+ 'outwardly',
+ 'presumably',
+ 'simultaneously',
+ 'somewhat',
+ 'spontaneously',
+ 'startlingly',
+ 'triumphantly',
+ 'unexpectedly',
+ 'virtually',
+
+
+ 'adhereto',
+ 'afterall',
+ 'atrandom',
+ 'breakout',
+ 'breakup',
+ 'butfor',
+ 'byfar',
+ 'bynomeans',
+ 'catchon',
+ 'catchupwith',
+ 'collidewith',
+ 'comeupwith',
+ 'commenton',
+ 'contraryto',
+ 'contributeto',
+ 'copewith',
+ 'cutshort',
+ 'doawaywith',
+ 'docreditto',
+ 'dueto',
+ 'goinfor',
+ 'gooff',
+ 'hangbyathread',
+ 'heappraiseupon',
+ 'inaccordancewith',
+ 'inbetween',
+ 'incaseof',
+ 'inhonourof',
+ 'inresponseto',
+ 'intermsof',
+ 'inthat',
+ 'inthevicinityof',
+ 'keepoff',
+ 'layoff',
+ 'letalone',
+ 'lookinto',
+ 'lookon',
+ 'losenotime',
+ 'makesenseofsth.',
+ 'ofnoavail',
+ 'onfile',
+ 'onnoaccount',
+ 'onthedecline',
+ 'outofstock',
+ 'providedthat',
+ 'pullup',
+ 'putaway',
+ 'regardlessof',
+ 'resultin',
+ 'seeto',
+ 'showto',
+ 'standfor',
+ 'takeon',
+ 'takeover',
+ 'taketo',
+ 'talkinto',
+ 'thatis',
+ 'turnin',
+ 'turnout',
+ 'turnto',
+ 'wardoff',
+ 'withreferenceto',
+ 'workout',
+ 'worthoneswhile',
+ 'abbreviation',
+ 'abolish',
+ 'absent',
+ 'absorption',
+ 'abstract',
+ 'absurd',
+ 'abundance',
+ 'accessory',
+ 'accord',
+ 'acknowledge',
+
+]
+module.exports = {
+ wordList: word_list
+}
\ No newline at end of file
diff --git a/data/kaoyan.js b/data/kaoyan.js
new file mode 100644
index 0000000..ef3f160
--- /dev/null
+++ b/data/kaoyan.js
@@ -0,0 +1,5691 @@
+var word_list=[
+ 'assault',
+ 'steamer',
+
+ 'principal',
+ 'pendulum',
+
+ 'consumption',
+ 'reliable',
+
+ 'argument',
+ 'butter',
+
+ 'score',
+ 'sham',
+
+ 'rise',
+ 'cable',
+
+ 'signal',
+ 'palm',
+
+ 'man',
+ 'mercy',
+
+ 'sniff',
+ 'medical',
+
+ 'critical',
+ 'rice',
+
+ 'extensive',
+ 'over',
+
+ 'tolerance',
+ 'agent',
+
+ 'denote',
+ 'slight',
+
+ 'fierce',
+ 'lively',
+
+ 'idiot',
+ 'surpass',
+
+ 'regarding',
+ 'thigh',
+
+ 'claim',
+ 'welcome',
+
+ 'surge',
+ 'back',
+
+ 'railroad',
+ 'impact',
+
+ 'coordinate',
+ 'ounce',
+
+ 'renovate',
+ 'policy',
+
+ 'efficiency',
+ 'refresh',
+
+ 'attempt',
+ 'slum',
+
+ 'gown',
+ 'disclose',
+
+ 'material',
+ 'wheel',
+
+ 'cotton',
+ 'border',
+
+ 'minor',
+ 'tension',
+
+ 'magistrate',
+ 'evolve',
+
+ 'idea',
+ 'spectacle',
+
+ 'whale',
+ 'cashier',
+
+ 'fall',
+ 'blow',
+
+ 'prosecute',
+ 'setback',
+
+ 'comparison',
+ 'auction',
+
+ 'translation',
+ 'flare',
+
+ 'valuable',
+ 'feasible',
+
+ 'feeling',
+ 'path',
+
+ 'market',
+ 'wretched',
+
+ 'formidable',
+ 'father',
+
+ 'peaceful',
+ 'stop',
+
+ 'antenna',
+ 'want',
+
+ 'Saturday',
+ 'judge',
+
+ 'suggestion',
+ 'cottage',
+
+ 'outline',
+ 'warehouse',
+
+ 'billion',
+ 'fault',
+
+ 'canal',
+ 'angel',
+
+ 'ecology',
+ 'peace',
+
+ 'eliminate',
+ 'ceiling',
+
+ 'clarify',
+ 'no',
+
+
+
+ 'calculate',
+ 'massacre',
+
+ 'china',
+ 'integrity',
+
+ 'input',
+ 'ash',
+
+ 'kidney',
+ 'clue',
+
+ 'tribe',
+ 'riddle',
+
+ 'wood',
+ 'simply',
+
+ 'formulate',
+ 'reach',
+
+ 'royal',
+ 'hound',
+
+ 'ordinary',
+ 'trim',
+
+ 'ant',
+ 'guilt',
+
+ 'leave',
+ 'abdomen',
+
+ 'toilet',
+ 'youth',
+
+ 'woman',
+ 'metal',
+
+ 'legal',
+ 'allocate',
+
+ 'rear',
+ 'provision',
+
+ 'operate',
+ 'decline',
+
+ 'sociable',
+ 'better',
+
+ 'prevalent',
+ 'mark',
+
+ 'interval',
+ 'calm',
+
+ 'mislead',
+ 'register',
+
+ 'affection',
+ 'duty',
+
+ 'legitimate',
+ 'magnificent',
+
+ 'security',
+ 'liable',
+
+ 'sometimes',
+ 'detector',
+
+ 'thief',
+ 'level',
+
+ 'skirt',
+ 'key',
+
+ 'pump',
+ 'versus',
+
+ 'joint',
+ 'scream',
+
+ 'solution',
+ 'cucumber',
+
+ 'slender',
+ 'suspend',
+
+ 'translate',
+ 'shoe',
+
+ 'theory',
+ 'invade',
+
+ 'drift',
+ 'relish',
+
+ 'paper',
+ 'mosaic',
+
+ 'diameter',
+ 'flexible',
+
+ 'submarine',
+ 'during',
+
+ 'cocaine',
+ 'merge',
+
+ 'active',
+ 'breadth',
+
+ 'plate',
+ 'room',
+
+ 'philosophy',
+ 'weekday',
+
+ 'call',
+ 'perceive',
+
+ 'destiny',
+ 'lion',
+
+ 'pollution',
+ 'acre',
+
+ 'labor',
+ 'deliver',
+
+ 'machinery',
+ 'pub',
+
+ 'entail',
+ 'seed',
+
+ 'twist',
+ 'realise',
+
+ 'from',
+ 'sarcastic',
+
+
+ 'bury',
+ 'science',
+ 'deviate',
+ 'gang',
+ 'acute',
+ 'Alter',
+ 'minimize',
+ 'dismay',
+ 'modernization',
+ 'individual',
+ 'priest',
+ 'agriculture',
+ 'spring',
+ 'counsel',
+ 'enlighten',
+ 'gentle',
+ 'seminar',
+ 'inch',
+ 'pipe',
+ 'grocer',
+ 'performance',
+ 'abstract',
+ 'civilization',
+ 'exemplify',
+ 'vocation',
+ 'six',
+ 'dealer',
+ 'breed',
+ 'item',
+ 'radiant',
+ 'production',
+ 'satisfaction',
+ 'intensive',
+ 'habitat',
+ 'effect',
+ 'connection',
+ 'rather',
+ 'medieval',
+ 'ladder',
+ 'timid',
+ 'suspicion',
+ 'seek',
+ 'wing',
+
+ 'TV',
+ 'amateur',
+ 'devote',
+ 'mingle',
+ 'government',
+ 'romance',
+ 'appointment',
+ 'accord',
+ 'enclose',
+ 'mind',
+ 'row',
+ 'missing',
+ 'urgent',
+ 'shelter',
+ 'orient',
+ 'circle',
+ 'have',
+ 'sleep',
+ 'plateau',
+ 'kite',
+ 'fast',
+
+ 'surround',
+ 'slipper',
+ 'tomato',
+ 'criminal',
+ 'ritual',
+ 'kin',
+ 'absorb',
+ 'poet',
+ 'pyramid',
+ 'knife',
+ 'array',
+ 'bet',
+ 'defend',
+ 'mountain',
+
+ 'bell',
+
+ 'wooden',
+ 'apparent',
+ 'thunder',
+ 'supplement',
+ 'troop',
+ 'reduce',
+ 'pioneer',
+ 'state',
+ 'dial',
+
+ 'suburb',
+ 'complain',
+ 'plunge',
+ 'week',
+ 'racket',
+ 'queen',
+ 'maths',
+
+ 'just',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'infant',
+ 'norm',
+
+ 'peninsula',
+ 'soul',
+
+ 'secret',
+ 'faculty',
+
+ 'league',
+ 'replacement',
+
+ 'count',
+ 'congress',
+
+ 'impose',
+ 'hinder',
+
+ 'gesture',
+ 'backward',
+
+ 'importance',
+ 'cup',
+
+ 'memorial',
+ 'lay',
+
+ 'conform',
+ 'chat',
+
+ 'centigrade',
+ 'supermarket',
+
+ 'dangerous',
+ 'according',
+ 'to',
+
+ 'instrumental',
+ 'reject',
+
+ 'chair',
+ 'loaf',
+
+ 'amplifier',
+ 'outfit',
+
+ 'glitter',
+ 'test',
+
+ 'fluctuate',
+ 'wound',
+
+ 'actual',
+ 'Alloy',
+
+ 'dragon',
+ 'waterproof',
+
+ 'pattern',
+ 'immediate',
+
+ 'wish',
+ 'respect',
+
+ 'fun',
+ 'beat',
+
+ 'meat',
+ 'health',
+
+ 'capacity',
+ 'management',
+
+ 'fringe',
+ 'clutch',
+
+ 'projector',
+ 'salesman',
+
+ 'daily',
+ 'stem',
+
+ 'marble',
+ 'cruel',
+
+ 'triumph',
+ 'dump',
+
+ 'diffuse',
+ 'restless',
+
+ 'index',
+ 'such',
+
+ 'farewell',
+ 'strain',
+
+ 'agenda',
+ 'almost',
+
+ 'watch',
+ 'pregnant',
+
+ 'maneuver',
+ 'conversation',
+
+ 'stationary',
+ 'scale',
+
+ 'knob',
+ 'notorious',
+
+ 'exposure',
+ 'far',
+
+ 'central',
+ 'camera',
+
+ 'undergo',
+ 'reproach',
+
+ 'meet',
+ 'liver',
+
+ 'finite',
+ 'amend',
+
+ 'blueprint',
+ 'goodby',
+
+ 'loud',
+ 'overtime',
+
+ 'insurance',
+ 'vicious',
+
+ 'merely',
+ 'donkey',
+
+ 'each',
+ 'dialect',
+
+ 'somehow',
+ 'moist',
+
+ 'mischief',
+ 'multiple',
+
+ 'parent',
+ 'forum',
+
+ 'outlet',
+ 'globe',
+
+ 'bud',
+ 'uneasy',
+
+ 'metropolitan',
+ 'lab',
+
+ 'famine',
+ 'mug',
+
+ 'itself',
+ 'action',
+
+ 'expansion',
+ 'handwriting',
+
+ 'analysis',
+ 'deck',
+
+ 'homogeneous',
+ 'warn',
+
+ 'association',
+ 'secondary',
+
+ 'formula',
+ 'nylon',
+
+ 'rank',
+ 'postcard',
+
+ 'difficult',
+ 'society',
+
+ 'meanwhile',
+ 'aircraft',
+
+ 'contrary',
+ 'uproar',
+
+ 'violin',
+ 'persuade',
+
+ 'indifferent',
+ 'tail',
+
+ 'weight',
+ 'daylight',
+
+ 'wage',
+ 'consistent',
+
+ 'hay',
+ 'family',
+
+ 'upset',
+ 'manipulate',
+
+ 'variable',
+ 'crime',
+
+ 'melon',
+ 'upward',
+
+ 'allege',
+ 'illegal',
+
+ 'swan',
+ 'invite',
+
+ 'whirl',
+ 'resolution',
+
+ 'favor',
+ 'shady',
+
+ 'damage',
+ 'spread',
+
+ 'shepherd',
+ 'noble',
+
+ 'dome',
+ 'torch',
+
+ 'they',
+ 'radar',
+
+ 'whether',
+ 'assume',
+
+ 'proportion',
+ 'significance',
+
+ 'excess',
+ 'excessive',
+
+ 'eighteen',
+ 'recede',
+
+ 'postman',
+ 'remarkable',
+
+ 'opening',
+ 'skeptical',
+
+ 'revenue',
+ 'fail',
+
+ 'thousand',
+ 'vanity',
+
+ 'catalog',
+ 'rib',
+
+ 'silicon',
+ 'odds',
+
+ 'arrow',
+ 'cope',
+
+ 'stick',
+ 'implication',
+
+ 'documentary',
+ 'vague',
+
+ 'hover',
+ 'nonsense',
+
+ 'charter',
+ 'different',
+
+ 'entry',
+ 'hunt',
+
+
+ 'instance',
+ 'framework',
+ 'fourteen',
+ 'investment',
+ 'combine',
+ 'your',
+ 'intricate',
+ 'razor',
+ 'ruby',
+ 'library',
+ 'judgement',
+ 'conduct',
+ 'designate',
+ 'violence',
+ 'linen',
+ 'discount',
+ 'next',
+ 'casual',
+ 'associate',
+ 'leak',
+ 'automatic',
+ 'commend',
+ 'kingdom',
+ 'breakdown',
+ 'loosen',
+ 'nurture',
+ 'dorm',
+ 'private',
+ 'barely',
+ 'defy',
+ 'education',
+ 'panel',
+ 'reservoir',
+ 'wool',
+ 'arrogant',
+ 'realm',
+ 'Friday',
+ 'waterfall',
+ 'architecture',
+ 'deposit',
+ 'inclusive',
+ 'cure',
+ 'compassion',
+ 'coincidence',
+ 'until',
+ 'citizen',
+ 'Sunday',
+ 'population',
+ 'wedding',
+ 'describe',
+ 'occasional',
+ 'underlying',
+ 'patent',
+ 'interim',
+ 'reclaim',
+ 'ascend',
+ 'clap',
+ 'fame',
+ 'queer',
+ 'paperback',
+ 'revive',
+ 'engineer',
+ 'tolerate',
+ 'conclusion',
+ 'preserve',
+ 'ticket',
+ 'ride',
+ 'reed',
+ 'client',
+ 'smile',
+ 'quota',
+ 'Easter',
+ 'throat',
+ 'arouse',
+ 'ancestor',
+
+ 'if',
+
+ 'prosperous',
+ 'cream',
+ 'electron',
+ 'budget',
+ 'illuminate',
+ 'discuss',
+ 'pursuit',
+ 'gas',
+ 'wink',
+ 'opinion',
+ 'shrewd',
+ 'handbook',
+ 'evacuate',
+ 'fright',
+
+ 'comedy',
+ 'land',
+ 'endure',
+ 'henceforth',
+ 'pleasure',
+ 'response',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'communication',
+ 'magnify',
+
+ 'form',
+ 'graceful',
+
+ 'controversy',
+ 'analyse',
+
+ 'innumerable',
+ 'artificial',
+
+ 'obedience',
+ 'privacy',
+
+ 'jet',
+ 'tub',
+
+ 'flavor',
+ 'feedback',
+
+ 'conjunction',
+ 'salad',
+
+ 'awful',
+ 'property',
+
+ 'mutual',
+ 'upper',
+
+ 'silly',
+ 'bound',
+
+ 'domain',
+ 'cool',
+
+ 'name',
+ 'overwhelming',
+
+ 'publication',
+ 'savage',
+
+ 'transplant',
+ 'linguistic',
+
+ 'in',
+ 'nobody',
+
+ 'cloth',
+ 'punctual',
+
+ 'ruin',
+ 'elapse',
+
+ 'poultry',
+ 'tariff',
+
+ 'reign',
+ 'hence',
+
+ 'convention',
+ 'underline',
+
+ 'intelligent',
+ 'wreath',
+
+ 'around',
+ 'concert',
+
+ 'eleven',
+ 'flee',
+
+ 'useful',
+ 'focus',
+
+ 'dubious',
+ 'body',
+
+ 'absent',
+ 'plantation',
+
+ 'vice',
+ 'safety',
+
+ 'drop',
+ 'loan',
+
+ 'otherwise',
+ 'dental',
+
+ 'bind',
+ 'orderly',
+
+ 'legend',
+ 'confuse',
+
+ 'sky',
+ 'prior',
+
+ 'eligible',
+ 'essential',
+
+ 'narrative',
+ 'transform',
+
+ 'tile',
+ 'specific',
+
+ 'nose',
+ 'basement',
+
+ 'entertain',
+ 'along',
+
+ 'experience',
+ 'capital',
+
+ 'stress',
+ 'monotonous',
+
+ 'fill',
+ 'union',
+
+ 'hardly',
+ 'lamb',
+
+ 'bundle',
+ 'miniature',
+
+ 'mill',
+ 'coherent',
+
+ 'heave',
+ 'fan',
+
+ 'gay',
+ 'dawn',
+
+ 'statistical',
+ 'offend',
+
+ 'fence',
+ 'flight',
+
+
+ 'grand',
+ 'tank',
+ 'prisoner',
+ 'withhold',
+ 'whenever',
+ 'retort',
+ 'equipment',
+ 'hearing',
+ 'confusion',
+ 'early',
+ 'so',
+ 'short',
+ 'tooth',
+ 'affluent',
+ 'clause',
+ 'breach',
+ 'character',
+ 'bonus',
+ 'heritage',
+ 'hook',
+ 'above',
+ 'joy',
+ 'salary',
+ 'semiconductor',
+ 'hungry',
+ 'horsepower',
+ 'guarantee',
+ 'obtain',
+ 'complete',
+ 'tea',
+ 'shrug',
+ 'retail',
+
+ 'shirt',
+ 'duck',
+ 'model',
+ 'continual',
+ 'straightforward',
+ 'middle',
+ 'painting',
+ 'cop',
+ 'extent',
+ 'book',
+ 'wherever',
+ 'finger',
+ 'grief',
+ 'myself',
+ 'content',
+ 'lightning',
+ 'retire',
+ 'bottom',
+ 'numerical',
+ 'main',
+ 'canvas',
+ 'small',
+ 'solar',
+ 'regime',
+ 'fate',
+ 'shuttle',
+ 'temporary',
+ 'census',
+ 'really',
+ 'find',
+ 'rail',
+ 'assure',
+ 'track',
+ 'pale',
+ 'outcome',
+ 'year',
+ 'horizontal',
+ 'obstacle',
+ 'majesty',
+ 'trade',
+ 'screw',
+ 'dynamic',
+ 'tackle',
+ 'dwelling',
+ 'certainly',
+ 'acceptance',
+ 'verify',
+ 'bath',
+ 'package',
+ 'oak',
+ 'brow',
+ 'cupboard',
+ 'record',
+ 'instant',
+ 'root',
+ 'ore',
+ 'helmet',
+ 'cathedral',
+ 'who',
+ 'graduate',
+ 'mistress',
+ 'possibly',
+ 'brick',
+ 'directory',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'intersection',
+ 'king',
+
+ 'half',
+ 'discharge',
+
+ 'overseas',
+ 'pretext',
+
+ 'jargon',
+ 'calorie',
+
+ 'scare',
+ 'depend',
+
+ 'thin',
+ 'design',
+
+ 'sample',
+ 'modest',
+
+ 'reinforce',
+ 'notify',
+
+ 'pen',
+ 'near',
+
+ 'stain',
+ 'whichever',
+
+ 'cafeteria',
+ 'cosy',
+
+ 'tan',
+ 'dedicate',
+
+ 'lately',
+ 'penny',
+
+ 'radioactive',
+ 'logic',
+
+ 'gravity',
+ 'injury',
+
+ 'ban',
+ 'carbohydrate',
+
+ 'sphere',
+ 'luggage',
+
+ 'exist',
+ 'addict',
+
+ 'new',
+ 'minister',
+
+ 'tax',
+ 'evolution',
+
+ 'see',
+ 'fiber',
+
+ 'listen',
+ 'end',
+
+ 'chemistry',
+ 'where',
+
+ 'ministry',
+ 'negative',
+
+ 'stack',
+ 'scold',
+
+ 'coupon',
+ 'ankle',
+
+ 'green',
+ 'foolish',
+
+ 'deserve',
+ 'victim',
+
+ 'resume',
+ 'always',
+
+ 'cigaret',
+ 'sail',
+
+ 'wicked',
+ 'owing',
+
+ 'troublesome',
+ 'abound',
+
+ 'powder',
+ 'parallel',
+
+ 'dessert',
+ 'cattle',
+
+ 'worse',
+ 'practically',
+
+ 'testimony',
+ 'cord',
+
+ 'interact',
+ 'spontaneous',
+
+ 'distribute',
+ 'harness',
+
+ 'conservative',
+ 'sailor',
+
+ 'hello',
+ 'harassment',
+
+ 'quiz',
+ 'relative',
+
+ 'commonwealth',
+ 'finance',
+
+ 'toe',
+ 'soda',
+
+ 'eight',
+ 'consideration',
+
+ 'hijack',
+ 'nap',
+
+ 'renaissance',
+ 'rotten',
+
+ 'pop',
+ 'mask',
+
+ 'delegate',
+ 'airline',
+
+
+ 'collar',
+ 'the',
+ 'headache',
+ 'entity',
+ 'impart',
+
+ 'manager',
+ 'dignity',
+ 'quarrel',
+ 'account',
+ 'raise',
+ 'melt',
+ 'artist',
+ 'tie',
+
+ 'nominal',
+ 'quit',
+ 'plane',
+ 'undo',
+ 'absolute',
+ 'boot',
+ 'confidence',
+ 'editor',
+ 'receive',
+ 'passport',
+ 'dinner',
+ 'colonial',
+ 'obvious',
+ 'resign',
+ 'hysterical',
+ 'everyday',
+ 'excitement',
+ 'personal',
+
+ 'TRUE',
+ 'fit',
+
+ 'please',
+ 'possibility',
+ 'enter',
+ 'dictate',
+ 'outskirts',
+ 'cheap',
+ 'overflow',
+ 'fabricate',
+ 'measure',
+ 'natural',
+ 'watt',
+ 'presently',
+ 'screen',
+ 'hear',
+ 'fisherman',
+ 'perhaps',
+ 'intend',
+ 'cabin',
+ 'operator',
+ 'axis',
+ 'expense',
+ 'straight',
+ 'concrete',
+ 'basketball',
+ 'sudden',
+ 'airport',
+ 'cock',
+ 'general',
+ 'shield',
+ 'costume',
+ 'headline',
+ 'grown-up',
+ 'constituent',
+ 'piano',
+ 'probe',
+ 'lecture',
+ 'hose',
+ 'meal',
+ 'rumor',
+ 'snap',
+ 'psychology',
+ 'moisture',
+ 'gradual',
+
+ 'critic',
+
+ 'branch',
+ 'easy',
+ 'harm',
+
+ 'harvest',
+ 'divorce',
+ 'successful',
+ 'appear',
+ 'lake',
+ 'telescope',
+ 'brim',
+ 'foot',
+ 'conference',
+ 'fire',
+ 'boast',
+ 'mortal',
+ 'childhood',
+ 'panorama',
+ 'galaxy',
+ 'take',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'treasure',
+ 'ten',
+
+ 'eve',
+ 'virtual',
+
+ 'ink',
+ 'experimental',
+
+ 'prescribe',
+ 'subscribe',
+
+ 'box',
+ 'mean',
+
+ 'interface',
+ 'violate',
+
+ 'net',
+ 'stadium',
+
+ 'expel',
+ 'clothe',
+
+ 'reptile',
+ 'bar',
+
+ 'nickel',
+ 'socialism',
+
+ 'circular',
+ 'knee',
+
+ 'rake',
+ 'thick',
+
+ 'beast',
+ 'celebrity',
+
+ 'bull',
+ 'final',
+
+ 'tram',
+ 'diary',
+
+ 'creative',
+ 'blind',
+
+ 'access',
+ 'financial',
+
+ 'altogether',
+ 'bug',
+
+ 'reference',
+ 'primitive',
+
+ 'prosperity',
+ 'brandy',
+
+ 'rectangle',
+ 'recognize',
+
+ 'concern',
+ 'climb',
+
+ 'residence',
+ 'gallon',
+
+ 'invaluable',
+ 'prejudice',
+
+ 'heroic',
+ 'could',
+
+ 'equality',
+ 'strip',
+
+ 'elsewhere',
+ 'force',
+
+ 'setting',
+ 'poem',
+
+ 'garden',
+ 'mist',
+
+ 'tire',
+ 'sorry',
+
+ 'corn',
+ 'inlet',
+
+ 'sector',
+ 'participate',
+
+ 'hop',
+ 'impatient',
+
+ 'genius',
+ 'factory',
+
+ 'line',
+ 'idle',
+
+ 'thumb',
+ 'leisure',
+
+ 'develop',
+ 'manual',
+
+ 'patron',
+ 'shiver',
+
+ 'loyal',
+ 'semester',
+
+ 'kneel',
+ 'much',
+
+ 'spear',
+ 'future',
+
+ 'homework',
+ 'squeeze',
+
+ 'anxious',
+ 'nothing',
+
+ 'edit',
+ 'whereas',
+
+ 'gather',
+ 'lead',
+
+ 'seat',
+ 'gene',
+
+ 'neck',
+ 'typist',
+
+ 'housewife',
+ 'pharmacy',
+
+ 'utilizegreenhouse',
+
+ 'happen',
+ 'circumference',
+
+ 'biscuit',
+ 'prototype',
+
+ 'mercury',
+ 'pave',
+
+ 'expenditure',
+ 'detach',
+
+ 'notable',
+ 'animal',
+
+ 'outset',
+ 'aluminum',
+
+ 'anxiety',
+ 'people',
+
+ 'intact',
+ 'triangle',
+
+ 'pit',
+ 'tour',
+
+ 'trousers',
+ 'dine',
+
+ 'lift',
+ 'attitude',
+
+ 'report',
+ 'voluntary',
+
+ 'studio',
+ 'oppress',
+
+ 'shatter',
+ 'trouble',
+
+ 'steady',
+ 'baby',
+
+ 'surprise',
+ 'goat',
+
+ 'believe',
+ 'scarce',
+
+ 'sell',
+ 'fine',
+
+ 'radio',
+ 'territory',
+
+ 'grow',
+ 'thorough',
+
+ 'quantify',
+ 'best',
+
+ 'prophet',
+ 'Christmas',
+
+ 'inside',
+ 'misery',
+
+ 'waiter',
+ 'signify',
+
+ 'bump',
+ 'intention',
+
+ 'sympathy',
+ 'cheque',
+
+ 'assurance',
+ 'freedom',
+
+ 'defeat',
+ 'value',
+
+ 'minority',
+ 'free',
+
+ 'beforehand',
+ 'longitude',
+
+ 'medium',
+ 'periodical',
+
+ 'handkerchief',
+ 'religion',
+
+ 'appreciate',
+ 'alternative',
+
+ 'on',
+ 'disregard',
+
+ 'remnant',
+ 'gymnasium',
+
+ 'terrible',
+ 'irrigate',
+
+ 'familiar',
+ 'scholar',
+
+ 'proficiency',
+ 'beam',
+
+ 'rash',
+ 'adjacent',
+
+ 'glue',
+ 'gloomy',
+
+ 'despise',
+ 'robot',
+
+ 'soon',
+ 'plural',
+
+ 'recall',
+ 'shallow',
+
+ 'personality',
+ 'wardrobe',
+
+ 'knowledge',
+ 'Alike',
+
+ 'panic',
+ 'consecutive',
+
+ 'innocent',
+ 'numb',
+
+ 'those',
+ 'sin',
+
+ 'arrest',
+ 'plug',
+
+ 'switch',
+ 'prescription',
+
+ 'river',
+ 'undertake',
+
+ 'stable',
+ 'keen',
+
+ 'subtle',
+ 'assistance',
+
+ 'oxide',
+ 'handsome',
+
+ 'eastern',
+ 'kilo',
+
+ 'engagement',
+ 'marvelous',
+
+ 'sponge',
+ 'erase',
+
+ 'annual',
+ 'apt',
+
+ 'treason',
+ 'auditorium',
+
+ 'trifle',
+ 'rebel',
+
+ 'satisfy',
+ 'puff',
+
+ 'friction',
+ 'successor',
+
+ 'opera',
+ 'pierce',
+
+ 'drive',
+ 'assignment',
+
+ 'underestimate',
+ 'cradle',
+
+ 'steep',
+ 'navigation',
+
+ 'tomb',
+ 'maybe',
+
+ 'tribute',
+ 'engine',
+
+ 'jewelry',
+ 'splendid',
+
+ 'must',
+ 'Christian',
+
+ 'award',
+ 'express',
+
+ 'cripple',
+ 'density',
+
+ 'ignorance',
+ 'ponder',
+
+ 'assert',
+ 'bend',
+
+ 'phase',
+ 'tongue',
+
+ 'psychiatry',
+ 'deficiency',
+
+ 'influence',
+ 'tractor',
+
+ 'sway',
+ 'latent',
+
+ 'sorrow',
+ 'prince',
+
+ 'monkey',
+ 'pinch',
+
+ 'laptop',
+ 'presence',
+
+ 'lag',
+ 'refute',
+
+ 'forehead',
+ 'shed',
+
+ 'underlie',
+ 'vary',
+
+ 'foster',
+ 'subordinate',
+
+ 'specialist',
+ 'plentiful',
+
+ 'exceed',
+ 'breast',
+
+ 'random',
+ 'nail',
+
+ 'comprise',
+ 'ship',
+
+ 'tiger',
+ 'tired',
+
+ 'literature',
+ 'commission',
+
+ 'gender',
+ 'field',
+
+ 'army',
+ 'pause',
+
+ 'stoop',
+ 'erect',
+
+ 'building',
+ 'feed',
+
+ 'coal',
+ 'sacrifice',
+ 'delete',
+ 'brace',
+ 'necessary',
+ 'welfare',
+ 'generate',
+ 'delicate',
+ 'inject',
+ 'require',
+ 'lemon',
+ 'succeed',
+ 'sale',
+ 'ultimate',
+ 'jury',
+ 'poison',
+ 'power',
+ 'deliberate',
+ 'seem',
+ 'vulnerable',
+ 'restrain',
+ 'passion',
+ 'pillow',
+ 'scarcely',
+ 'dare',
+ 'postpone',
+ 'disaster',
+ 'allowance',
+ 'portable',
+ 'duration',
+ 'similar',
+ 'sacred',
+ 'somebody',
+ 'textbook',
+ 'ocean',
+ 'chemical',
+ 'opaque',
+ 'November',
+ 'pickup',
+ 'audio',
+ 'stubborn',
+ 'coat',
+ 'improvement',
+ 'owe',
+ 'become',
+ 'potato',
+ 'background',
+ 'passive',
+ 'revelation',
+ 'elastic',
+ 'percent',
+ 'us',
+ 'concede',
+ 'precedent',
+ 'helpful',
+ 'bee',
+ 'collection',
+ 'hole',
+ 'bosom',
+ 'grin',
+ 'venture',
+ 'instead',
+ 'handy',
+ 'break',
+ 'locomotive',
+ 'modern',
+ 'liberate',
+ 'pilot',
+ 'repeat',
+ 'hang',
+ 'innovation',
+ 'palace',
+ 'advise',
+ 'layman',
+ 'eminent',
+ 'recovery',
+ 'strive',
+ 'ballet',
+ 'rod',
+ 'expand',
+ 'wise',
+ 'fifteen',
+ 'coffee',
+ 'element',
+ 'angle',
+ 'cricket',
+ 'found',
+ 'wheat',
+ 'reserve',
+ 'restrict',
+ 'frustrate',
+ 'Alien',
+ 'past',
+ 'companion',
+ 'craft',
+ 'decide',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'withstand',
+ 'reading',
+ 'cushion',
+ 'cereal',
+
+ 'later',
+ 'corridor',
+
+ 'sideways',
+ 'drink',
+
+ 'nut',
+ 'sing',
+
+ 'reckon',
+ 'derive',
+
+ 'overnight',
+ 'substance',
+
+ 'contemplate',
+ 'credit',
+
+ 'rouse',
+ 'object',
+
+ 'grammar',
+ 'Alert',
+
+ 'disposition',
+ 'strength',
+
+ 'insist',
+ 'emphasize',
+
+ 'pea',
+ 'nation',
+
+ 'plus',
+ 'several',
+
+ 'sculpture',
+ 'zinc',
+
+ 'season',
+ 'reader',
+
+ 'west',
+ 'string',
+
+ 'pole',
+ 'ending',
+
+ 'fairy',
+ 'tonight',
+
+ 'velocity',
+ 'hobby',
+
+ 'replace',
+ 'method',
+
+ 'yellow',
+ 'why',
+
+ 'work',
+ 'beneath',
+
+ 'deer',
+ 'visible',
+
+ 'everywhere',
+ 'worldwide',
+
+ 'humiliate',
+ 'independent',
+
+ 'encourage',
+ 'increase',
+
+ 'outward',
+ 'inventory',
+
+ 'forest',
+ 'cough',
+
+ 'foremost',
+ 'cohesive',
+
+ 'bureau',
+ 'depart',
+
+ 'distant',
+ 'magnet',
+
+ 'outside',
+ 'crucial',
+
+ 'beware',
+ 'scar',
+
+ 'afternoon',
+ 'chocolate',
+
+ 'support',
+ 'twelve',
+
+ 'file',
+ 'consist',
+
+ 'official',
+ 'doubt',
+
+ 'simplicity',
+ 'smell',
+
+ 'soil',
+ 'note',
+
+ 'medal',
+ 'silver',
+
+ 'clean',
+ 'bulb',
+
+ 'close',
+ 'purple',
+
+ 'rubber',
+ 'motion',
+
+ 'republic',
+ 'database',
+
+ 'hair',
+ 'complaint',
+
+ 'dialog',
+ 'social',
+
+ 'organize',
+ 'clay',
+ 'perspective',
+ 'cultivate',
+ 'arbitrary',
+ 'child',
+
+ 'freight',
+ 'age',
+
+ 'lend',
+ 'golf',
+
+ 'reason',
+ 'confirm',
+
+ 'silent',
+ 'timber',
+
+ 'conscientious',
+ 'insult',
+
+ 'married',
+ 'patient',
+
+ 'may',
+ 'horn',
+
+ 'ambassador',
+ 'zero',
+
+ 'advance',
+ 'murmur',
+
+ 'declaration',
+ 'right',
+
+ 'term',
+ 'disguise',
+
+ 'flash',
+ 'scatter',
+
+ 'bear',
+ 'mere',
+
+ 'prevent',
+ 'logical',
+
+ 'coalition',
+ 'brutal',
+
+ 'well-known',
+ 'prolong',
+
+ 'throne',
+ 'rob',
+
+ 'drawer',
+ 'offer',
+
+ 'send',
+ 'pronounce',
+
+ 'worthy',
+ 'expend',
+
+ 'memory',
+ 'facility',
+
+ 'mutter',
+ 'introduce',
+
+ 'curriculum',
+ 'fear',
+
+ 'copy',
+ 'captain',
+
+ 'garlic',
+ 'starve',
+
+ 'shampoo',
+ 'jug',
+
+ 'when',
+ 'superior',
+
+ 'shabby',
+ 'quiver',
+
+ 'bacon',
+ 'emit',
+
+ 'enquire',
+ 'zebra',
+
+ 'escalate',
+ 'hostess',
+
+ 'coach',
+ 'route',
+
+ 'bank',
+ 'skillful',
+
+ 'chop',
+ 'dig',
+
+ 'accustomed',
+ 'Aisle',
+
+ 'delicious',
+ 'frame',
+
+ 'remote',
+ 'delay',
+
+ 'wall',
+ 'stroll',
+
+ 'away',
+ 'cloak',
+
+ 'hammer',
+ 'fertile',
+
+ 'submit',
+ 'viewpoint',
+
+ 'hoist',
+ 'compress',
+
+ 'correspondence',
+ 'transparent',
+
+ 'diagnose',
+ 'although',
+
+ 'composition',
+ 'barn',
+
+ 'sharp',
+ 'wealthy',
+
+ 'fat',
+
+ 'profile',
+
+ 'lack',
+ 'heroine',
+
+ 'comply',
+ 'pair',
+
+ 'cook',
+ 'abroad',
+
+ 'anyone',
+ 'beside',
+
+ 'dive',
+ 'destructive',
+
+ 'insert',
+ 'overhead',
+
+ 'acid',
+ 'fantastic',
+
+ 'cap',
+ 'celebrate',
+
+ 'attach',
+ 'select',
+
+ 'fore',
+ 'discovery',
+
+ 'genuine',
+ 'gracious',
+
+ 'contact',
+ 'moment',
+
+ 'tame',
+ 'honey',
+
+ 'jazz',
+ 'bake',
+
+ 'disease',
+ 'perplex',
+
+ 'fixture',
+ 'basic',
+
+ 'prize',
+ 'only',
+
+ 'bewilder',
+ 'approximate',
+
+ 'deem',
+ 'industrialize',
+
+ 'benefit',
+ 'preclude',
+
+ 'relieve',
+ 'morality',
+
+ 'impetus',
+ 'pasture',
+
+ 'garage',
+ 'heavy',
+
+ 'browse',
+ 'bankrupt',
+
+ 'identity',
+ 'resent',
+
+ 'quantity',
+ 'rent',
+
+ 'sincere',
+ 'spend',
+
+ 'characteristic',
+ 'formation',
+
+ 'promising',
+ 'incorporate',
+
+ 'saw',
+ 'productivity',
+
+ 'inference',
+ 'watch',
+
+ 'satisfactory',
+ 'rigorous',
+
+ 'persevere',
+ 'infrastructure',
+
+ 'refine',
+ 'synthesis',
+
+ 'roast',
+ 'descent',
+
+ 'crystal',
+ 'aggressive',
+
+ 'insure',
+ 'scientist',
+
+ 'uncle',
+ 'aspect',
+
+ 'historical',
+ 'bore',
+
+ 'speech',
+ 'police',
+
+ 'goods',
+ 'shave',
+
+ 'reveal',
+ 'confidential',
+
+ 'refreshment',
+ 'lawyer',
+
+ 'usual',
+ 'exit',
+
+ 'midst',
+ 'button',
+
+ 'rectify',
+ 'eye',
+ 'two',
+
+ 'plain',
+ 'comfortable',
+ 'view',
+ 'spy',
+ 'today',
+ 'accessory',
+ 'lumber',
+ 'enjoy',
+ 'he',
+ 'compensate',
+
+ 'lest',
+ 'technician',
+ 'equator',
+
+ 'survival',
+ 'light',
+ 'suppress',
+ 'front',
+ 'cling',
+ 'accurate',
+ 'overwhelm',
+ 'membership',
+ 'accordingly',
+ 'lamp',
+ 'anywhere',
+ 'royalty',
+ 'group',
+ 'phrase',
+ 'cheer',
+ 'apart',
+ 'nerve',
+ 'island',
+ 'aeroplane',
+ 'investigate',
+ 'fearful',
+ 'adjust',
+ 'flow',
+ 'nationality',
+ 'display',
+ 'hot',
+ 'rain',
+ 'pride',
+ 'therapy',
+ 'limp',
+ 'editorial',
+ 'miserable',
+ 'purpose',
+ 'desirable',
+ 'county',
+ 'conventional',
+ 'aspire',
+ 'adapt',
+ 'fireman',
+ 'litter',
+ 'yield',
+ 'groan',
+ 'slim',
+ 'brilliant',
+ 'fertilizer',
+ 'borrow',
+ 'optimistic',
+ 'monthly',
+ 'kit',
+ 'imperial',
+ 'perfect',
+ 'plan',
+ 'formal',
+ 'block',
+ 'decent',
+ 'jaw',
+
+ 'sly',
+ 'guideline',
+ 'shut',
+ 'spoon',
+ 'gross',
+ 'harsh',
+ 'belt',
+ 'secure',
+ 'gulf',
+ 'enlarge',
+ 'nowhere',
+ 'premise',
+ 'enforce',
+ 'evoke',
+ 'mental',
+ 'tone',
+ 'ambitious',
+ 'both',
+ 'assembly',
+ 'shout',
+ 'east',
+ 'cycle',
+ 'upstairs',
+ 'durable',
+ 'precede',
+ 'diamond',
+ 'sociology',
+ 'depict',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'nervous',
+
+ 'poster',
+
+ 'coil',
+
+ 'speculate',
+
+ 'microphone',
+
+ 'physics',
+
+ 'rainbow',
+
+ 'nevertheless',
+
+ 'pan',
+
+ 'vacuum',
+ 'software',
+
+ 'spoil',
+ 'contend',
+
+ 'hasty',
+ 'physician',
+
+ 'swear',
+ 'difficulty',
+
+ 'layoff',
+ 'terminal',
+
+ 'hurl',
+ 'aware',
+
+ 'geography',
+ 'incredible',
+
+ 'moon',
+ 'very',
+
+ 'to',
+ 'calcium',
+
+ 'speak',
+ 'biology',
+
+ 'initiative',
+ 'grope',
+
+ 'overlook',
+ 'function',
+
+ 'bad',
+ 'ear',
+
+ 'criterion',
+ 'cast',
+
+ 'subtract',
+ 'distance',
+
+ 'park',
+ 'brisk',
+
+ 'chance',
+ 'preparation',
+
+ 'number',
+ 'creature',
+
+ 'hostage',
+ 'pour',
+
+ 'gold',
+ 'sophomore',
+
+ 'metric',
+ 'reality',
+
+ 'admission',
+ 'misfortune',
+
+ 'forever',
+ 'lease',
+
+ 'launch',
+ 'heel',
+
+ 'electric',
+ 'gossip',
+
+ 'applaud',
+ 'scientific',
+
+ 'worthwhile',
+ 'reassure',
+
+ 'drown',
+ 'oxygen',
+
+ 'January',
+ 'prospective',
+
+ 'attain',
+ 'athlete',
+
+ 'rally',
+ 'manage',
+
+ 'divert',
+ 'plaster',
+
+ 'crowd',
+ 'acclaim',
+
+ 'pessimistic',
+ 'repertoire',
+
+ 'yet',
+ 'detain',
+
+ 'decision',
+ 'crust',
+
+ 'perfection',
+ 'weekend',
+
+ 'marital',
+ 'compete',
+
+ 'scholarship',
+ 'elevate',
+ 'correct',
+ 'blame',
+
+ 'pink',
+ 'gut',
+
+ 'step',
+ 'corrupt',
+
+ 'death',
+ 'change',
+
+ 'jolly',
+ 'startle',
+
+ 'paw',
+ 'yell',
+
+ 'analytic',
+ 'nursery',
+
+ 'institution',
+ 'mother',
+
+ 'rape',
+ 'voice',
+
+ 'occur',
+ 'talk',
+
+ 'renew',
+ 'undoubtedly',
+
+ 'statute',
+ 'surface',
+
+ 'even',
+ 'local',
+
+ 'reconcile',
+ 'fuse',
+
+ 'preceding',
+ 'departure',
+
+ 'whose',
+ 'overturn',
+
+ 'frighten',
+ 'May',
+
+ 'snowstorm',
+ 'donate',
+
+ 'cinema',
+ 'gear',
+
+ 'worship',
+ 'distinct',
+
+ 'singular',
+ 'communism',
+
+ 'forward',
+ 'vein',
+
+ 'draft',
+ 'feature',
+
+ 'pad',
+ 'distinction',
+
+ 'diligent',
+ 'stability',
+
+ 'wander',
+ 'sprout',
+
+ 'extract',
+ 'visual',
+
+ 'hardware',
+ 'thirteen',
+
+ 'scramble',
+ 'aesthetic',
+
+ 'gain',
+ 'article',
+
+ 'layer',
+ 'football',
+
+ 'consultant',
+ 'young',
+
+ 'locker',
+ 'chase',
+
+ 'you',
+ 'tight',
+
+ 'smog',
+ 'secretary',
+
+ 'push',
+ 'sequence',
+
+ 'lane',
+ 'beg',
+
+ 'ebb',
+ 'vertical',
+
+ 'wind',
+ 'purse',
+
+ 'dwarf',
+ 'serve',
+
+ 'since',
+ 'broad',
+
+ 'thrift',
+ 'mayor',
+
+ 'vinegar',
+ 'explosive',
+
+ 'mobile',
+ 'invitation',
+
+ 'sensitive',
+ 'Negro',
+
+ 'physiological',
+ 'civilize',
+
+ 'executive',
+ 'kitchen',
+
+ 'dislike',
+ 'partly',
+ 'petition',
+
+ 'diet',
+ 'howl',
+ 'chew',
+ 'recipe',
+ 'orthodox',
+ 'spot',
+ 'heroin',
+ 'stranger',
+ 'cut',
+ 'fox',
+ 'buffet',
+ 'pig',
+ 'administer',
+ 'collide',
+ 'white',
+ 'composite',
+ 'understand',
+ 'praise',
+ 'matter',
+ 'differentiate',
+ 'infrared',
+ 'sex',
+ 'embassy',
+ 'session',
+ 'plight',
+ 'abolish',
+ 'team',
+ 'alliance',
+ 'lick',
+ 'desert',
+ 'truth',
+ 'dip',
+ 'incident',
+ 'fountain',
+ 'invisible',
+ 'applicable',
+ 'tangle',
+ 'carriage',
+ 'furthermore',
+ 'girl',
+ 'inflation',
+ 'inform',
+ 'complication',
+ 'wrist',
+ 'here',
+ 'besides',
+ 'cart',
+ 'tray',
+ 'cement',
+ 'robust',
+
+ 'phenomenon',
+
+ 'smuggle',
+
+ 'Allow',
+
+ 'limitation',
+ 'batch',
+
+ 'digest',
+
+
+ 'trait',
+ 'consensus',
+ 'perpetual',
+ 'Catholic',
+ 'hell',
+ 'naval',
+ 'hatred',
+ 'seaside',
+ 'decay',
+ 'friendship',
+ 'afterward',
+ 'catastrophe',
+ 'estimate',
+ 'rule',
+ 'jog',
+ 'tower',
+ 'physicist',
+ 'shame',
+ 'adult',
+ 'shipment',
+ 'favorite',
+ 'herd',
+ 'attend',
+ 'finally',
+ 'relation',
+ 'noisy',
+ 'legislation',
+ 'being',
+ 'racial',
+ 'evident',
+ 'discipline',
+ 'lean',
+ 'fume',
+ 'department',
+ 'opportunity',
+ 'ever',
+ 'refrain',
+ 'divide',
+ 'fish',
+ 'difference',
+ 'swim',
+ 'surgery',
+ 'bureaucracy',
+ 'creep',
+ 'for',
+ 'personnel',
+ 'beach',
+ 'avail',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'adventure',
+
+ 'garbage',
+
+ 'deduce',
+
+ 'steward',
+
+ 'tunnel',
+
+ 'magazine',
+
+ 'overlap',
+
+ 'monarch',
+
+ 'summer',
+
+ 'bread',
+ 'conscious',
+
+ 'compensation',
+ 'soft',
+
+ 'off',
+ 'aural',
+
+ 'adjoin',
+ 'naughty',
+
+ 'fraction',
+ 'concise',
+
+ 'lifetime',
+ 'penalty',
+
+ 'cabbage',
+ 'sprinkle',
+
+ 'alphabet',
+ 'school',
+
+ 'dirty',
+ 'huddle',
+
+ 'discrepancy',
+ 'world',
+
+ 'landlady',
+ 'suite',
+
+ 'surgeon',
+ 'musician',
+
+ 'breath',
+ 'portion',
+
+ 'puppet',
+ 'vision',
+
+ 'typical',
+ 'garment',
+
+ 'pilgrim',
+ 'universe',
+
+ 'competition',
+ 'tick',
+
+ 'seize',
+ 'instinct',
+
+ 'application',
+ 'glass',
+
+ 'extension',
+ 'condition',
+
+ 'competent',
+ 'deal',
+
+ 'journalist',
+ 'commodity',
+
+ 'learning',
+ 'lever',
+
+ 'ultraviolet',
+ 'brush',
+
+ 'nature',
+ 'standpoint',
+
+ 'solemn',
+ 'carrier',
+
+ 'car',
+ 'surrender',
+
+ 'distill',
+ 'solitary',
+
+ 'rhythm',
+ 'drawing',
+
+ 'lip',
+ 'wife',
+
+ 'splash',
+ 'incur',
+
+ 'appetite',
+ 'diversion',
+
+ 'liability',
+ 'transient',
+
+ 'advocate',
+ 'spaceship',
+
+ 'widespread',
+ 'combination',
+
+ 'company',
+ 'deteriorate',
+
+ 'but',
+ 'offspring',
+
+ 'feather',
+ 'culture',
+
+ 'temperature',
+ 'unexpected',
+
+ 'pistol',
+ 'position',
+
+ 'tropical',
+ 'succession',
+
+ 'despatch',
+ 'feast',
+
+ 'thing',
+ 'hour',
+
+ 'bus',
+ 'tug',
+
+ 'show',
+ 'nutrition',
+
+ 'elaborateeyesight',
+
+ 'abide',
+ 'bed',
+
+ 'total',
+ 'moss',
+
+ 'teacher',
+ 'interfere',
+
+ 'napkin',
+ 'incline',
+
+ 'threshold',
+ 'literacy',
+
+ 'treat',
+ 'volleyball',
+
+ 'uncover',
+ 'infer',
+
+ 'canteen',
+ 'anguish',
+
+ 'while',
+ 'haste',
+
+ 'irritate',
+ 'blaze',
+
+ 'anonymous',
+ 'ornament',
+
+ 'kidnap',
+ 'accept',
+
+ 'witch',
+ 'strange',
+
+ 'underground',
+ 'delight',
+
+ 'race',
+ 'triple',
+
+ 'funny',
+ 'before',
+
+ 'maintenance',
+ 'write',
+
+ 'deed',
+ 'Bible',
+
+ 'finding',
+ 'flag',
+
+ 'cover',
+ 'hawk',
+
+ 'nightmare',
+ 'unite',
+
+ 'spill',
+ 'live',
+
+ 'damp',
+ 'trademark',
+
+ 'weekly',
+ 'wrap',
+
+ 'blur',
+ 'forthcoming',
+
+ 'ozone',
+ 'anybody',
+
+ 'respective',
+ 'enough',
+
+ 'process',
+ 'doom',
+
+ 'heal',
+ 'indignation',
+
+ 'employ',
+ 'round',
+
+ 'battle',
+ 'indication',
+
+ 'debate',
+ 'mud',
+
+ 'compose',
+ 'good',
+
+ 'upgrade',
+ 'brand',
+
+ 'capsule',
+ 'truck',
+
+ 'partner',
+ 'spite',
+
+ 'warmth',
+ 'fairly',
+
+ 'pepper',
+ 'domestic',
+
+ 'recover',
+ 'chin',
+
+ 'shoulder',
+ 'beloved',
+
+ 'female',
+ 'consequently',
+
+ 'entrepreneur',
+ 'what',
+
+ 'litre',
+ 'under',
+
+ 'save',
+ 'mount',
+
+ 'base',
+ 'southern',
+
+ 'conclude',
+ 'compare',
+
+ 'definition',
+ 'urban',
+
+ 'vote',
+ 'ruthless',
+
+ 'masculine',
+ 'distort',
+
+ 'equation',
+ 'poll',
+
+ 'dot',
+ 'custom',
+
+ 'channel',
+ 'inhabit',
+
+ 'tiresome',
+ 'agree',
+
+ 'exception',
+ 'grain',
+
+ 'simplify',
+ 'limit',
+
+ 'present',
+ 'pavement',
+
+ 'compel',
+ 'classmate',
+
+ 'anyhow',
+ 'quiet',
+
+ 'principle',
+ 'tobacco',
+
+ 'reward',
+ 'great',
+
+ 'revolve',
+ 'abnormal',
+
+ 'dollar',
+ 'glad',
+
+ 'sketch',
+ 'shift',
+
+ 'lie',
+ 'usually',
+
+ 'brave',
+ 'downstairs',
+
+ 'dominant',
+ 'controversial',
+
+ 'hundred',
+ 'toxic',
+
+ 'regular',
+ 'explain',
+
+ 'humanity',
+ 'milk',
+
+ 'drum',
+ 'scope',
+
+ 'month',
+ 'kill',
+
+ 'rescue',
+ 'choke',
+
+ 'ethnic',
+ 'bruise',
+
+ 'intrigue',
+ 'resistant',
+
+ 'envisage',
+ 'ill',
+
+ 'sufficient',
+ 'human',
+
+ 'expire',
+ 'proceed',
+
+ 'cloudy',
+ 'sting',
+
+ 'highland',
+ 'elbow',
+
+ 'dictionary',
+ 'millimeter',
+
+ 'average',
+ 'up',
+
+ 'convenience',
+ 'intercourse',
+
+ 'pay',
+ 'greeting',
+
+ 'same',
+ 'charm',
+
+ 'haul',
+ 'cruise',
+
+ 'hate',
+ 'counterpart',
+
+ 'ambition',
+ 'dear',
+
+ 'exam',
+ 'humidity',
+
+ 'three',
+ 'order',
+
+ 'sport',
+
+ 'condense',
+ 'war',
+ 'carpenter',
+ 'symphony',
+ 'stock',
+ 'consult',
+ 'auto',
+ 'recite',
+ 'chip',
+ 'band',
+ 'audit',
+ 'wallet',
+ 'escape',
+ 'convince',
+ 'so-called',
+ 'struggle',
+ 'propaganda',
+ 'condemn',
+ 'sword',
+ 'numerous',
+ 'agony',
+ 'heap',
+ 'orphan',
+ 'twin',
+ 'interview',
+
+ 'awake',
+ 'cliff',
+ 'classification',
+
+ 'post',
+ 'commence',
+
+ 'plead',
+ 'real',
+ 'soap',
+ 'twice',
+ 'paradigm',
+ 'guard',
+ 'delivery',
+ 'illness',
+ 'last',
+ 'characterize',
+ 'menu',
+ 'verge',
+ 'accuracy',
+ 'glimpse',
+ 'part',
+ 'isolate',
+ 'piston',
+ 'curl',
+ 'sleeve',
+ 'ensure',
+ 'yes',
+ 'overpass',
+
+ 'slit',
+
+ 'isle',
+
+ 'interpret',
+
+ 'sensible',
+
+
+ 'bullet',
+
+ 'humor',
+
+ 'fold',
+ 'lounge',
+ 'addition',
+ 'something',
+ 'frost',
+ 'god',
+ 'imaginary',
+ 'pure',
+ 'appendix',
+ 'tag',
+ 'colony',
+ 'flour',
+ 'housing',
+
+ 'mammal',
+
+ 'deceive',
+ 'mild',
+ 'terrify',
+ 'fulfill',
+ 'attract',
+ 'ninety',
+ 'painful',
+
+ 'tilt',
+
+ 'grease',
+ 'protein',
+ 'shade',
+ 'mend',
+
+ 'entitle',
+ 'coke',
+ 'dream',
+
+ 'classic',
+ 'rocket',
+ 'susceptible',
+
+ 'common',
+ 'excellent',
+ 'pronoun',
+ 'patience',
+ 'assist',
+ 'entertainment',
+ 'continent',
+ 'theoretical',
+ 'injure',
+ 'instruction',
+ 'adverb',
+ 'flock',
+ 'gap',
+ 'substitute',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'permit',
+
+ 'ton',
+
+ 'involve',
+
+ 'rational',
+
+ 'shrink',
+
+ 'equivalent',
+
+ 'notion',
+
+ 'clarity',
+
+ 'aggravate',
+
+ 'destruction',
+ 'second',
+
+ 'industrial',
+ 'chronic',
+
+ 'saturate',
+ 'exterior',
+
+ 'drawback',
+ 'moral',
+
+ 'breakfast',
+ 'touch',
+
+ 'conversion',
+ 'boss',
+
+ 'volt',
+ 'load',
+
+ 'prudent',
+ 'foundation',
+
+ 'shoot',
+ 'span',
+
+ 'accommodation',
+ 'colonel',
+
+ 'skull',
+ 'blend',
+
+ 'consume',
+ 'holder',
+
+ 'despair',
+ 'mystery',
+
+ 'unless',
+ 'often',
+
+ 'chess',
+ 'receipt',
+
+ 'congratulate',
+ 'weak',
+
+ 'flaw',
+ 'fair',
+
+ 'chairman',
+ 'autonomy',
+
+ 'shock',
+ 'remember',
+
+ 'actor',
+ 'tidy',
+
+ 'rejoice',
+ 'encounter',
+
+ 'ox',
+ 'study',
+
+ 'me',
+ 'glide',
+
+ 'prosper',
+ 'rarely',
+
+ 'denial',
+ 'patrol',
+
+ 'syndrome',
+ 'niece',
+
+ 'religious',
+ 'more',
+
+ 'eager',
+ 'noticeable',
+
+ 'hurricane',
+ 'hint',
+
+ 'overcoat',
+ 'fund',
+
+ 'afford',
+ 'fatigue',
+
+ 'induce',
+ 'less',
+
+ 'meeting',
+ 'analogue',
+
+ 'sophisticated',
+ 'sweat',
+
+ 'point',
+ 'cent',
+
+ 'risk',
+ 'liberty',
+
+ 'device',
+ 'communicate',
+
+ 'everything',
+ 'person',
+
+ 'overthrow',
+ 'pathetic',
+
+ 'fuss',
+ 'language',
+
+ 'stove',
+ 'amiable',
+
+ 'chorus',
+ 'balloon',
+
+ 'pleasant',
+ 'do',
+
+ 'Monday',
+ 'render',
+
+ 'bandage',
+ 'visa',
+
+ 'once',
+ 'might',
+
+ 'furious',
+ 'comprehensive',
+
+ 'ashore',
+ 'guilty',
+
+ 'concept',
+ 'some',
+
+ 'statue',
+ 'inhale',
+
+ 'auxiliary',
+ 'problem',
+
+ 'zigzag',
+ 'upon',
+
+ 'student',
+ 'these',
+
+ 'somewhat',
+ 'professor',
+
+ 'chest',
+ 'intimidate',
+
+ 'defect',
+ 'glance',
+
+ 'enclosure',
+ 'luxury',
+
+ 'stuff',
+ 'certificate',
+
+ 'space',
+ 'strife',
+
+ 'speciality',
+ 'sue',
+
+ 'door',
+ 'negligible',
+
+ 'overcome',
+ 'bitter',
+
+ 'fortunate',
+ 'civil',
+
+ 'neglect',
+ 'recur',
+
+ 'landlord',
+ 'furniture',
+
+ 'violent',
+ 'a',
+
+ 'utmost',
+ 'voyage',
+
+ 'kiss',
+ 'unemployment',
+
+ 'historic',
+ 'intrude',
+
+ 'oral',
+ 'resist',
+
+ 'hope',
+ 'tanker',
+
+ 'narrow',
+ 'pencil',
+
+ 'about',
+ 'remove',
+
+ 'federal',
+ 'badge',
+
+ 'scorn',
+ 'hat',
+
+ 'laundry',
+ 'embrace',
+
+ 'directly',
+ 'flourish',
+
+ 'merit',
+ 'dean',
+
+ 'credential',
+ 'adequate',
+
+ 'journal',
+ 'paddle',
+
+ 'margin',
+ 'forecast',
+
+ 'practise',
+ 'primary',
+
+ 'skilled',
+ 'height',
+
+ 'erosion',
+ 'attendant',
+
+ 'seemingly',
+ 'activity',
+
+ 'organization',
+ 'expedition',
+
+ 'music',
+ 'nearby',
+
+ 'publish',
+
+ 'friend',
+ 'learn',
+ 'noun',
+
+ 'agreement',
+ 'letter',
+ 'graphic',
+ 'stage',
+ 'sigh',
+ 'grieve',
+ 'eighty',
+ 'parliament',
+ 'cordial',
+ 'discover',
+ 'obstruct',
+ 'silk',
+
+ 'peel',
+ 'dumb',
+
+ 'grip',
+ 'refusal',
+ 'their',
+ 'specification',
+ 'expression',
+ 'remind',
+ 'apply',
+ 'patch',
+ 'golden',
+ 'honor',
+ 'resemble',
+ 'muscular',
+ 'ignite',
+ 'sneeze',
+ 'siren',
+ 'snatch',
+ 'pool',
+ 'technology',
+ 'interesting',
+ 'component',
+ 'amount',
+ 'dread',
+ 'fetch',
+ 'bold',
+ 'bald',
+ 'disastrous',
+ 'map',
+ 'jump',
+ 'wax',
+
+ 'terror',
+ 'certify',
+
+ 'frank',
+ 'merchant',
+ 'stumble',
+ 'knit',
+ 'shelf',
+ 'magic',
+
+ 'though',
+
+ 'scandal',
+
+
+ 'endow',
+ 'echo',
+ 'breathe',
+ 'blunt',
+ 'systematic',
+ 'unfold',
+ 'competitive',
+ 'extend',
+ 'sustain',
+ 'throughout',
+ 'freeze',
+ 'doorway',
+ 'internal',
+ 'water',
+ 'sun',
+ 'adopt',
+ 'evaporate',
+ 'win',
+ 'straw',
+ 'pursue',
+ 'tissue',
+
+ 'autumn',
+ 'sometime',
+
+ 'intelligible',
+ 'terrific',
+ 'rush',
+ 'flood',
+ 'outing',
+ 'campus',
+ 'gaze',
+ 'used',
+ 'cautious',
+ 'worth',
+ 'reasonable',
+ 'sunset',
+ 'vivid',
+ 'author',
+ 'handicap',
+ 'winter',
+ 'intuition',
+ 'clinic',
+
+ 'enormous',
+ 'pledge',
+ 'kick',
+ 'brother',
+ 'despite',
+ 'soluble',
+ 'resident',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'tuck',
+ 'exclude',
+ 'lavatory',
+
+ 'college',
+
+ 'revolution',
+
+ 'porter',
+
+ 'learned',
+
+ 'mile',
+
+ 'range',
+
+ 'law',
+ 'trend',
+
+ 'evidence',
+ 'disposal',
+
+ 'minute',
+ 'subject',
+
+ 'captive',
+ 'life',
+
+ 'geology',
+ 'conceive',
+
+ 'gamble',
+ 'clerk',
+
+ 'embody',
+ 'recycle',
+
+ 'crash',
+ 'scheme',
+
+ 'corrode',
+ 'undergraduate',
+
+ 'scissors',
+ 'pack',
+
+ 'juice',
+ 'fragment',
+
+ 'majority',
+ 'our',
+
+ 'odor',
+ 'suitable',
+
+ 'elite',
+ 'cancel',
+
+ 'overall',
+ 'negotiate',
+
+ 'persecute',
+ 'onto',
+
+ 'drought',
+ 'engineering',
+
+ 'cancer',
+ 'ready',
+
+ 'sponsor',
+ 'Also',
+
+ 'violet',
+ 'century',
+
+ 'I',
+ 'confine',
+
+ 'warrant',
+ 'customary',
+
+ 'commit',
+ 'lens',
+
+ 'preferable',
+ 'community',
+
+ 'exquisite',
+ 'lover',
+
+ 'zoo',
+ 'mass',
+
+ 'considerable',
+ 'drama',
+
+ 'streamline',
+ 'spider',
+
+ 'yard',
+ 'game',
+
+ 'summary',
+ 'charge',
+
+ 'kindergarten',
+ 'academy',
+
+ 'arch',
+ 'steer',
+
+ 'nod',
+ 'overhear',
+
+ 'beverage',
+ 'tow',
+
+ 'brain',
+ 'digital',
+
+ 'hire',
+ 'coordinate',
+
+ 'military',
+ 'propel',
+
+ 'suspect',
+ 'noon',
+
+ 'boy',
+ 'wholesome',
+
+ 'independence',
+ 'rose',
+ 'nineteen',
+ 'surplus',
+ 'someone',
+ 'occurrence',
+
+ 'millionaire',
+ 'attendance',
+
+ 'president',
+ 'bridge',
+
+ 'cylinder',
+ 'opponent',
+
+ 'repetition',
+ 'crack',
+
+ 'emphasis',
+ 'taxi',
+
+ 'by',
+ 'marine',
+
+ 'none',
+
+ 'annoy',
+
+ 'purchase',
+ 'eagle',
+
+ 'civilian',
+ 'spit',
+
+ 'discriminate',
+ 'infinite',
+
+ 'pillar',
+ 'stun',
+
+ 'rack',
+ 'fifty',
+
+ 'invasion',
+ 'inherent',
+
+ 'appearance',
+ 'aloud',
+
+ 'cigar',
+ 'exaggerate',
+
+ 'art',
+ 'static',
+
+ 'unanimous',
+ 'ignorant',
+
+ 'tend',
+ 'criticize',
+
+ 'FALSE',
+ 'bit',
+
+ 'code',
+ 'help',
+
+ 'destination',
+ 'prose',
+
+ 'slice',
+ 'skate',
+
+ 'leading',
+ 'ingredient',
+
+ 'ugly',
+ 'tap',
+
+ 'huge',
+ 'living-room',
+
+ 'cake',
+ 'quartz',
+
+ 'energy',
+ 'clockwise',
+
+ 'shilling',
+ 'integrate',
+
+ 'illusion',
+ 'dark',
+
+ 'occupation',
+ 'horrible',
+
+ 'confront',
+ 'wrinkle',
+
+ 'meditate',
+ 'comb',
+
+ 'fraud',
+ 'sense',
+
+ 'hedge',
+ 'daytime',
+
+ 'picture',
+ 'legacy',
+
+ 'disgust',
+ 'spouse',
+
+ 'leadership',
+ 'tentative',
+
+ 'preside',
+ 'rotary',
+
+ 'die',
+ 'bother',
+
+ 'storey',
+ 'astonish',
+
+ 'thus',
+ 'symptom',
+
+ 'irony',
+ 'thrust',
+
+ 'readily',
+ 'extinguish',
+
+ 'technical',
+ 'waste',
+
+ 'dimension',
+
+ 'suicide',
+
+ 'veil',
+ 'beyond',
+
+ 'demonstrate',
+ 'category',
+ 'virus',
+ 'mould',
+
+ 'junior',
+ 'humid',
+
+ 'dead',
+ 'class',
+
+ 'steal',
+ 'lapse',
+
+ 'cherry',
+ 'barren',
+
+ 'fist',
+ 'egg',
+
+ 'gun',
+ 'cyberspace',
+
+ 'figure',
+
+ 'synthetic',
+
+ 'thermometer',
+ 'exert',
+
+ 'requirement',
+ 'audience',
+
+ 'prone',
+ 'verse',
+
+ 'afraid',
+ 'color',
+
+ 'notebook',
+ 'sake',
+
+ 'exciting',
+ 'opt',
+
+ 'exempt',
+ 'eyebrow',
+
+ 'seldom',
+ 'edition',
+
+ 'squirrel',
+ 'soup',
+
+ 'construct',
+ 'flap',
+
+ 'willing',
+ 'temptation',
+
+ 'aerial',
+ 'courage',
+
+ 'sweep',
+ 'able',
+
+ 'summit',
+ 'ice',
+
+ 'clash',
+ 'detail',
+
+ 'daughter',
+ 'ingenious',
+
+ 'stagger',
+ 'repay',
+
+ 'salute',
+ 'honest',
+
+ 'explosion',
+ 'determine',
+
+ 'strawberry',
+ 'bat',
+
+ 'housework',
+ 'dependent',
+
+ 'turnover',
+ 'sunrise',
+
+ 'wrong',
+ 'relay',
+
+ 'sew',
+ 'bow',
+
+ 'drill',
+ 'umbrella',
+
+ 'republican',
+ 'banquet',
+
+ 'reckless',
+ 'office',
+
+ 'inertia',
+ 'degenerate',
+
+ 'of',
+ 'foul',
+
+ 'lap',
+ 'core',
+
+ 'failure',
+ 'compute',
+
+ 'impression',
+ 'relief',
+
+ 'previous',
+ 'smooth',
+
+ 'slow',
+ 'lose',
+
+ 'revolutionary',
+ 'practical',
+
+ 'loyalty',
+ 'knock',
+
+ 'too',
+ 'grass',
+ 'trial',
+
+ 'original',
+
+ 'minimum',
+ 'barber',
+
+ 'descendant',
+ 'elevator',
+ 'preference',
+ 'aside',
+
+ 'butterfly',
+ 'million',
+
+ 'shop',
+ 'courtyard',
+
+ 'match',
+ 'protect',
+
+ 'single',
+ 'supersonic',
+
+ 'darling',
+ 'nearly',
+
+ 'business',
+ 'wine',
+
+ 'peach',
+
+ 'generous',
+
+ 'complicated',
+ 'fireplace',
+
+ 'assassinate',
+ 'X-ray',
+
+ 'obsession',
+ 'wagon',
+
+ 'leather',
+ 'incidence',
+
+ 'puzzle',
+ 'belly',
+
+ 'passage',
+ 'tropic',
+
+ 'benign',
+ 'bubble',
+
+ 'recipient',
+ 'meantime',
+
+ 'begin',
+ 'alone',
+
+ 'hollow',
+ 'construction',
+
+ 'possess',
+ 'own',
+
+ 'grape',
+ 'lantern',
+
+ 'imperative',
+ 'already',
+
+ 'cease',
+ 'compartment',
+
+ 'dam',
+ 'bachelor',
+
+ 'catch',
+ 'dirt',
+
+ 'mechanic',
+ 'and',
+
+ 'agency',
+ 'corporation',
+
+ 'lame',
+ 'bicycle',
+
+ 'ease',
+ 'imply',
+
+ 'oil',
+ 'joke',
+
+ 'productive',
+ 'sauce',
+
+ 'loose',
+ 'swing',
+
+ 'lubricate',
+ 'jealous',
+
+ 'draw',
+ 'telegram',
+
+ 'dilute',
+ 'board',
+
+ 'purify',
+ 'dusk',
+
+ 'reverse',
+ 'sturdy',
+
+ 'ventilate',
+ 'kind',
+
+ 'crew',
+ 'bearing',
+
+ 'rifle',
+ 'escort',
+
+ 'speed',
+ 'zoom',
+
+ 'momentum',
+ 'other',
+
+ 'air-conditioning',
+ 'expect',
+
+ 'nasty',
+ 'waken',
+
+ 'ignore',
+ 'wild',
+
+ 'pamphlet',
+ 'standard',
+
+ 'horror',
+
+ 'stereotype',
+
+ 'stone',
+ 'direction',
+
+ 'particle',
+ 'weave',
+
+ 'status',
+ 'fundamental',
+
+ 'spur',
+ 'highly',
+
+ 'approve',
+ 'oneself',
+
+ 'stride',
+ 'gate',
+
+ 'prestige',
+ 'appoint',
+
+ 'September',
+ 'dove',
+
+ 'stall',
+ 'frown',
+
+ 'give',
+
+ 'hi',
+
+ 'hinge',
+ 'paint',
+
+ 'chamber',
+ 'testify',
+
+ 'phone',
+ 'abrupt',
+
+ 'province',
+ 'unity',
+
+ 'story',
+ 'region',
+
+ 'radiate',
+ 'ratio',
+
+ 'healthy',
+ 'sight',
+
+ 'pope',
+ 'pass',
+
+ 'mock',
+ 'maintain',
+
+ 'inferior',
+ 'blanket',
+
+ 'neat',
+ 'paste',
+
+ 'revenge',
+ 'workshop',
+
+ 'centimetre',
+ 'bone',
+
+ 'spirit',
+ 'guess',
+
+ 'horizon',
+ 'March',
+
+ 'e-mail',
+ 'inevitable',
+
+ 'accommodate',
+ 'devil',
+
+ 'dance',
+ 'success',
+
+ 'discourage',
+ 'stretch',
+
+ 'organism',
+ 'portrait',
+
+ 'comment',
+ 'quality',
+
+ 'specimen',
+ 'saddle',
+
+ 'farther',
+ 'hemisphere',
+
+ 'deduct',
+ 'adverse',
+
+ 'calendar',
+ 'precaution',
+
+ 'rubbish',
+ 'lad',
+
+ 'talent',
+ 'molecule',
+
+ 'cheek',
+ 'occasion',
+
+ 'sentence',
+ 'commemorate',
+
+ 'flesh',
+ 'will',
+
+ 'keyboard',
+ 'miss',
+
+ 'utter',
+ 'snack',
+
+ 'judicial',
+ 'plot',
+
+ 'moderate',
+ 'research',
+
+ 'teach',
+ 'approval',
+
+ 'crude',
+ 'texture',
+
+ 'visitor',
+ 'special',
+ 'hide',
+
+ 'hardship',
+ 'act',
+ 'hug',
+ 'rate',
+ 'big',
+ 'marry',
+ 'compass',
+ 'claw',
+ 'exact',
+ 'side',
+ 'salvation',
+ 'identical',
+ 'mood',
+
+ 'structure',
+ 'filter',
+
+ 'training',
+ 'born',
+ 'turbulent',
+ 'shake',
+ 'via',
+ 'posture',
+ 'onion',
+
+ 'conflict',
+
+ 'herb',
+
+ 'limb',
+
+ 'October',
+
+ 'stake',
+
+ 'detective',
+
+ 'ambulance',
+
+ 'intrinsic',
+ 'token',
+ 'wipe',
+ 'tent',
+ 'necessitate',
+ 'swift',
+ 'vanish',
+ 'profitable',
+ 'within',
+ 'ferry',
+ 'cheese',
+ 'mourn',
+
+ 'assistant',
+ 'court',
+ 'cry',
+ 'pity',
+ 'handful',
+ 'slippery',
+ 'politics',
+ 'valid',
+ 'locate',
+ 'quarterly',
+ 'bin',
+ 'flu',
+ 'observation',
+ 'contrive',
+ 'ward',
+
+ 'illustration',
+ 'economic',
+ 'hand',
+ 'grant',
+ 'battery',
+ 'convert',
+ 'cemetery',
+ 'ability',
+ 'declare',
+ 'manifest',
+ 'epoch',
+ 'quote',
+ 'threaten',
+ 'sunshine',
+ 'segment',
+ 'analogy',
+ 'son',
+ 'refuge',
+ 'juvenile',
+ 'heir',
+
+ 'December',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'conservation',
+ 'vigorous',
+ 'national',
+
+ 'madame',
+
+ 'questionnaire',
+ 'precise',
+ 'column',
+
+ 'fossil',
+ 'foam',
+ 'party',
+ 'compatible',
+ 'navy',
+ 'mature',
+ 'muscle',
+ 'invalid',
+ 'promote',
+ 'thesis',
+ 'debt',
+ 'quite',
+ 'presumably',
+ 'well',
+ 'rest',
+ 'edge',
+ 'window',
+ 'raid',
+ 'everyone',
+ 'barrel',
+ 'survive',
+ 'specify',
+
+
+ 'intelligence',
+ 'electricity',
+ 'energetic',
+ 'dull',
+ 'tall',
+ 'clock',
+ 'first',
+ 'fell',
+ 'intellectual',
+ 'whatever',
+
+ 'this',
+ 'responsible',
+ 'clothes',
+ 'outrage',
+ 'liquid',
+ 'hypocrisy',
+ 'okay',
+ 'location',
+ 'constant',
+ 'weed',
+ 'dish',
+
+ 'downward',
+
+ 'transaction',
+ 'strap',
+ 'shot',
+ 'embarrass',
+ 'wisdom',
+ 'anniversary',
+ 'swell',
+ 'graph',
+ 'strategy',
+ 'orchestra',
+ 'blast',
+ 'congratulation',
+ 'blossom',
+ 'north',
+ 'hamper',
+
+ 'resort',
+ 'destroy',
+ 'prominent',
+ 'eat',
+ 'oath',
+ 'earth',
+ 'petroleum',
+ 'drunk',
+ 'spin',
+ 'hydrogen',
+ 'cater',
+
+
+
+
+
+
+ 'cafe',
+ 'initial',
+ 'radical',
+ 'road',
+ 'continue',
+ 'toward',
+
+ 'institute',
+ 'toll',
+
+ 'absence',
+ 'exclaim',
+ 'stripe',
+ 'extreme',
+ 'output',
+ 'endeavor',
+ 'member',
+ 'amuse',
+ 'cow',
+ 'corner',
+ 'acquaint',
+ 'hesitate',
+ 'discourse',
+ 'initiate',
+ 'treaty',
+ 'possession',
+ 'junction',
+ 'whip',
+ 'external',
+ 'disperse',
+ 'parcel',
+ 'drain',
+ 'reform',
+ 'neutral',
+ 'countryside',
+ 'assemble',
+ 'thought',
+ 'manuscript',
+ 'pill',
+ 'responsibility',
+ 'least',
+ 'director',
+ 'particular',
+ 'generalize',
+ 'she',
+ 'dynasty',
+ 'movement',
+ 'clergy',
+ 'volcano',
+ 'impossible',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'parachute',
+
+ 'memo',
+
+ 'obedient',
+
+ 'miracle',
+
+ 'fabulous',
+
+ 'fracture',
+
+ 'profit',
+
+ 'pigeon',
+
+ 'soccer',
+
+ 'contest',
+
+ 'guidance',
+
+ 'fool',
+ 'funeral',
+
+ 'conquest',
+ 'pose',
+
+ 'swallow',
+ 'capable',
+
+ 'predecessor',
+ 'address',
+
+ 'chart',
+ 'avenue',
+
+ 'crop',
+ 'eventually',
+
+ 'cargo',
+ 'junk',
+
+ 'slot',
+ 'persuasion',
+
+ 'stab',
+ 'dissipate',
+
+ 'weapon',
+ 'modify',
+
+ 'superb',
+ 'deep',
+
+ 'his',
+ 'shove',
+
+ 'effective',
+ 'rip',
+
+ 'indoor',
+ 'germ',
+
+ 'dismiss',
+ 'master',
+
+ 'implement',
+ 'separate',
+
+ 'messenger',
+ 'reap',
+
+ 'nourish',
+ 'tumour',
+
+ 'strenuous',
+ 'which',
+
+ 'sweater',
+ 'amplify',
+
+ 'slogan',
+ 'striking',
+
+ 'sink',
+ 'compulsory',
+
+ 'finish',
+ 'then',
+
+ 'star',
+ 'wear',
+
+ 'interior',
+ 'chill',
+
+ 'economy',
+ 'staircase',
+
+ 'be',
+ 'goose',
+
+ 'whole',
+ 'project',
+
+ 'tempt',
+ 'artery',
+
+ 'herself',
+ 'conspiracy',
+
+ 'banana',
+ 'yearly',
+
+ 'economical',
+ 'large',
+
+ 'repression',
+ 'port',
+
+ 'famous',
+ 'fruitful',
+
+ 'uniform',
+ 'pulse',
+
+ 'heaven',
+ 'taste',
+
+ 'All',
+ 'hopeful',
+
+ 'frog',
+ 'compact',
+
+ 'job',
+ 'embark',
+
+ 'revise',
+ 'rap',
+
+ 'bronze',
+ 'superiority',
+
+ 'commonplace',
+ 'complement',
+
+ 'spectator',
+ 'giggle',
+
+ 'reliance',
+ 'ball',
+
+ 'immerse',
+ 'console',
+
+ 'solve',
+ 'colleague',
+
+ 'strong',
+ 'stool',
+
+ 'pastimebathroom',
+
+ 'widow',
+ 'wholly',
+
+ 'excursion',
+ 'sneak',
+
+ 'self',
+ 'bay',
+
+ 'behind',
+ 'rim',
+
+ 'humorous',
+ 'never',
+
+ 'oriental',
+ 'extinct',
+
+ 'recognition',
+ 'pear',
+
+ 'brook',
+ 'transport',
+
+ 'broom',
+ 'video',
+
+ 'counter',
+ 'greet',
+
+ 'reporter',
+ 'northwest',
+
+ 'consent',
+ 'cab',
+
+ 'bully',
+ 'illiterate',
+
+ 'bomb',
+ 'tradition',
+
+ 'gum',
+ 'lump',
+
+ 'travel',
+ 'cherish',
+
+ 'arrange',
+ 'night',
+
+ 'regard',
+ 'metaphor',
+
+ 'missile',
+ 'thank',
+
+ 'relevant',
+ 'fortune',
+
+ 'tear',
+ 'collect',
+
+ 'peer',
+ 'equip',
+
+ 'mutton',
+ 'punish',
+
+ 'preach',
+ 'forge',
+
+ 'build',
+ 'costly',
+
+ 'suffice',
+ 'downtown',
+
+ 'shadow',
+ 'typewriter',
+
+ 'cosmic',
+ 'ours',
+
+ 'lateral',
+ 'wait',
+
+ 'floor',
+ 'panda',
+
+ 'trunk',
+ 'cite',
+
+ 'revolt',
+ 'emperor',
+
+ 'anything',
+ 'decorate',
+
+ 'coward',
+ 'timely',
+
+ 'accompany',
+ 'surname',
+
+ 'illustrate',
+ 'advisable',
+ 'into',
+ 'damn',
+ 'piece',
+
+ 'menace',
+
+ 'climax',
+ 'erroneous',
+
+ 'camel',
+ 'habit',
+
+ 'soldier',
+ 'appeal',
+
+ 'compliment',
+ 'dramatic',
+
+ 'dilemma',
+ 'cave',
+
+ 'grey',
+ 'ray',
+
+ 'vacation',
+ 'reduction',
+
+ 'outbreak',
+ 'without',
+
+ 'senatorreputation',
+
+ 'persist',
+
+ 'recent',
+
+ 'stationery',
+ 'cheat',
+
+ 'glow',
+ 'amaze',
+
+ 'teenager',
+ 'mostly',
+
+ 'nine',
+ 'pail',
+
+ 'them',
+ 'radius',
+
+ 'curious',
+ 'should',
+
+ 'tempo',
+ 'cat',
+
+ 'trench',
+ 'morning',
+
+ 'skim',
+ 'proud',
+
+ 'cluster',
+ 'rot',
+
+ 'postage',
+ 'undermine',
+
+ 'vessel',
+ 'provided',
+
+ 'confess',
+ 'deputy',
+
+ 'giant',
+ 'peasant',
+
+ 'hospitality',
+ 'inhibit',
+
+ 'prey',
+ 'either',
+
+ 'sea',
+ 'area',
+
+ 'democratic',
+ 'bizarre',
+
+ 'period',
+ 'romantic',
+
+ 'distinguish',
+ 'lunch',
+
+ 'reflection',
+ 'minus',
+
+ 'still',
+ 'storm',
+
+ 'blackmail',
+ 'out',
+
+ 'vegetable',
+ 'ceremony',
+
+ 'van',
+ 'loom',
+
+ 'underneath',
+ 'sum',
+
+ 'internet',
+ 'literally',
+
+ 'anchor',
+ 'Tuesday',
+
+ 'novelty',
+ 'husband',
+
+ 'recorder',
+ 'practitioner',
+
+ 'differ',
+ 'halt',
+
+ 'image',
+ 'eclipse',
+
+ 'carpet',
+ 'probability',
+
+ 'bush',
+ 'somewhere',
+
+ 'verbal',
+ 'equal',
+
+ 'historian',
+ 'network',
+
+ 'conviction',
+ 'lofty',
+ 'leap',
+
+ 'text',
+ 'epidemic',
+ 'constrain',
+ 'harbor',
+ 'him',
+ 'comrade',
+ 'exhibit',
+ 'voltage',
+ 'deceit',
+ 'crab',
+ 'packet',
+ 'distract',
+ 'rope',
+ 'sole',
+ 'unload',
+ 'repair',
+ 'theft',
+ 'integral',
+ 'manner',
+
+ 'balcony',
+ 'qualification',
+ 'remark',
+ 'spray',
+ 'toy',
+ 'imagination',
+ 'operational',
+ 'fiction',
+ 'installation',
+ 'rough',
+ 'fond',
+ 'naked',
+ 'beginning',
+ 'locality',
+ 'origin',
+ 'whistle',
+ 'not',
+ 'retrospect',
+ 'use',
+ 'statesman',
+ 'regulation',
+ 'dim',
+ 'accelerate',
+ 'environment',
+ 'contribute',
+ 'outstanding',
+ 'inspiration',
+ 'various',
+ 'bark',
+ 'especially',
+ 'grade',
+ 'host',
+
+ 'price',
+
+ 'sad',
+
+ 'trash',
+
+ 'brittle',
+
+ 'gently',
+
+ 'tedious',
+
+ 'prevail',
+
+ 'booth',
+ 'circulate',
+ 'abuse',
+ 'supper',
+
+ 'list',
+
+ 'cartoon',
+ 'square',
+ 'scarf',
+
+ 'moan',
+ 'correspondent',
+ 'atmosphere',
+ 'gratitude',
+ 'silence',
+ 'preposition',
+ 'prayer',
+ 'liberal',
+ 'web',
+ 'vain',
+ 'lot',
+ 'offset',
+ 'sightseeing',
+ 'impress',
+ 'machine',
+ 'limited',
+ 'ache',
+ 'country',
+ 'pest',
+ 'namely',
+ 'magnetic',
+ 'hurt',
+ 'throw',
+ 'script',
+ 'assimilate',
+ 'likely',
+
+ 'motor',
+ 'veto',
+ 'customer',
+ 'agreeable',
+ 'fork',
+ 'probable',
+ 'dividend',
+ 'weather',
+ 'valley',
+ 'tenant',
+ 'brass',
+ 'lid',
+ 'chief',
+ 'peculiar',
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'curiosity',
+ 'skin',
+ 'top',
+ 'stamp',
+ 'conscience',
+ 'among',
+
+ 'linear',
+
+ 'hum',
+
+ 'evil',
+ 'latter',
+ 'length',
+ 'asleep',
+ 'whom',
+
+ 'salt',
+ 'soak',
+ 'articulate',
+ 'Thursday',
+ 'execute',
+ 'inherit',
+ 'attractive',
+ 'context',
+ 'jewel',
+ 'description',
+ 'combat',
+ 'comic',
+ 'happy',
+ 'threat',
+ 'vast',
+ 'roll',
+ 'saucer',
+ 'advertise',
+ 'rag',
+ 'heading',
+ 'burn',
+ 'blank',
+ 'dense',
+ 'prefer',
+ 'reciprocal',
+ 'leaf',
+ 'mysterious',
+ 'pork',
+ 'accumulate',
+ 'ourselves',
+ 'chaos',
+ 'erupt',
+ 'invert',
+ 'brake',
+ 'issue',
+
+
+
+
+
+
+ 'feel',
+
+ 'vocabulary',
+ 'tutor',
+ 'enhance',
+ 'merry',
+ 'transfer',
+ 'trivial',
+ 'stupid',
+ 'hero',
+ 'inhabitant',
+ 'climate',
+ 'carry',
+ 'rigid',
+ 'doze',
+ 'procession',
+ 'insect',
+ 'badly',
+ 'honorable',
+ 'bargain',
+ 'motivate',
+ 'mix',
+ 'wake',
+ 'outer',
+ 'safeguard',
+
+ 'crisis',
+
+ 'enthusiasm',
+ 'depress',
+ 'time',
+ 'product',
+ 'quilt',
+ 'sir',
+
+ 'flame',
+ 'specialize',
+ 'submerge',
+ 'mobilize',
+ 'clip',
+ 'clear',
+ 'result',
+ 'bill',
+ 'clone',
+ 'stiff',
+
+ 'plumber',
+ 'bright',
+ 'representative',
+ 'advice',
+ 'dairy',
+ 'levy',
+ 'writing',
+]
+module.exports = {
+ wordList: word_list
+}
\ No newline at end of file
diff --git a/data/kaoyan_import.js b/data/kaoyan_import.js
new file mode 100644
index 0000000..a4324af
--- /dev/null
+++ b/data/kaoyan_import.js
@@ -0,0 +1,982 @@
+var word_list=
+['process',
+
+
+ 'growth',
+ 'technology',
+ 'theory',
+
+ 'economy',
+
+ 'behavio',
+
+ 'account',
+ 'economic',
+
+ 'individual',
+
+ 'product',
+ 'rate()',
+
+ 'create',
+
+ 'decline',
+ 'harda',
+ 'ad',
+
+ 'ability',
+
+ 'professionala',
+ 'spot',
+ 'tend',
+
+ 'view',
+
+ 'advocate',
+ 'amount',
+
+ 'community;',
+ 'concern',
+
+ 'environment',
+ 'factor',
+ 'intelligence',
+ 'likely',
+ 'ad',
+ 'return',
+ 'social',
+
+ 'consequence',
+ 'drug',
+ 'expert',
+
+ 'extend',
+
+ 'industrial',
+ 'moral',
+
+
+ 'action',
+ 'adult',
+
+ 'ambition',
+ 'competition',
+ 'capacity',
+ 'detail',
+
+ 'evidence',
+ 'evolution',
+ 'fund',
+ 'inflation',
+ 'local',
+ 'maintain',
+ 'management',
+ 'productivity',
+ 'survive',
+
+ 'universe',
+
+ 'learn',
+
+
+ 'advertising',
+ 'affect',
+ 'benefit',
+
+ 'debate',
+ 'directly',
+ 'element',
+ 'essential',
+
+ 'identify',
+ 'intend',
+ 'investment',
+ 'reasonable',
+ 'responsibility',
+ 'opportunity',
+ 'personality',
+ 'private',
+
+ 'alter',
+ 'appropriate',
+
+ 'boom',
+
+ 'combine',
+
+ 'corporation',
+ 'enterprise',
+ 'federal',
+ 'gas',
+ 'highly',
+ 'issue',
+
+ 'organization-isation',
+ 'principle',
+ 'project',
+ 'recognize-ise',
+ 'specific',
+ 'structure',
+
+ 'substance',
+ 'trend',
+
+ 'activity',
+ 'advantage',
+ 'aspect',
+ 'attitude',
+ 'balance',
+
+ 'characteristic',
+
+ 'claim',
+ 'comment',
+
+ 'constitute',
+ 'contract',
+
+ 'creative',
+ 'culture',
+ 'historical',
+ 'interpret',
+
+ 'manner',
+ 'mass;',
+ 'obtain',
+ 'powerful',
+ 'predict',
+ 'risk',
+
+ 'robot',
+ 'shift',
+ 'species',
+
+ 'approach',
+ 'argument',
+ 'assume',
+ 'blueprint',
+ 'climate',
+ 'competitive',
+ 'complex',
+ 'concept',
+ 'confuse',
+ 'critical',
+ 'crude',
+ 'emerge',
+ 'employee',
+ 'existence',
+ 'innovation',
+ 'interview',
+ 'involve',
+ 'journal',
+ 'link',
+
+ 'manifest',
+
+ 'motion',
+ 'obvious',
+ 'performance',
+ 'policy',
+ 'possibility',
+ 'pressure',
+ 'property',
+ 'prospect',
+
+ 'relate',
+
+ 'resource',
+ 'source',
+ 'suicide',
+
+ 'access',
+ 'acquire',
+ 'adapt',
+ 'additional',
+ 'aggressive',
+ 'amateur',
+ 'analysis',
+ 'apply',
+ 'arise',
+ 'assumption',
+ 'assure',
+ 'authority',
+ 'avoid',
+ 'bias',
+
+ 'brief',
+
+ 'cash',
+ 'challenge',
+
+ 'committee',
+ 'conflict',
+
+ 'consideration',
+ 'constant',
+
+ 'consumption',
+ 'contact',
+ 'convention',
+ 'convince',
+ 'cosmic',
+ 'data',
+ 'definition',
+ 'delivery',
+ 'demonstrate',
+ 'deny',
+ 'digital',
+ 'discipline',
+ 'distinction',
+ 'educate',
+ 'effective',
+ 'electronic',
+ 'emphasis',
+ 'enable',
+ 'error',
+ 'establish',
+ 'extent',
+ 'focus',
+ 'function',
+ 'fundamental',
+ 'gene',
+ 'genius',
+ 'giant',
+ 'humo',
+
+ 'implication',
+ 'improvement',
+ 'independent',
+ 'influence',
+
+ 'instinct',
+ 'intention',
+ 'invention',
+ 'item',
+ 'mechanism',
+ 'observation',
+ 'odd',
+ 'offend',
+ 'oppose',
+ 'panel',
+ 'phenomenon',
+ 'physical',
+ 'potential',
+
+ 'prolong',
+ 'psychological',
+ 'reflect',
+ 'relevant',
+ 'remark',
+
+ 'requirement',
+ 'respond',
+ 'rsponse',
+ 'responsible',
+ 'revolution',
+ 'rob',
+ 'scale',
+ 'secure',
+ 'site',
+
+ 'status',
+ 'stock',
+ 'stress',
+ 'sufficient',
+ 'survey',
+ 'sympathy',
+ 'threaten',
+ 'unemployment',
+ 'vote',
+
+
+ 'abroad',
+ 'appeal',
+ 'captive',
+
+ 'infrastructure',
+ 'premium',
+
+ 'resign',
+ 'span',
+
+ 'title',
+ 'unlikely',
+
+ 'abandon',
+ 'acknowledge',
+ 'addition',
+ 'advertisement',
+ 'aid',
+
+ 'annoy',
+ 'apparent',
+ 'appreciate',
+
+ 'artificial',
+ 'assemble',
+ 'attribute',
+
+ 'basis',
+ 'bid',
+
+
+ 'career',
+ 'ceremony',
+ 'character',
+ 'commercial',
+
+ 'commit',
+ 'commodity',
+ 'comparative',
+ 'comparison',
+ 'compensation',
+ 'conduct',
+
+ 'conference',
+ 'confidence',
+ 'confront',
+ 'contrast',
+ 'conventional',
+ 'criminal',
+
+ 'crisis',
+ 'critic',
+ 'current',
+
+ 'cycle',
+
+ 'define',
+ 'deprive',
+ 'derive',
+ 'deserve',
+ 'device',
+ 'diminish',
+ 'disappear',
+ 'discard',
+ 'easily',
+ 'efficient',
+ 'employer',
+ 'entitle',
+ 'estimate',
+
+ 'executive',
+
+ 'expense',
+ 'export',
+ 'external',
+ 'fascinate',
+ 'fashion',
+ 'fatal',
+ 'flash',
+
+ 'forbid',
+ 'formal',
+ 'formation',
+ 'former',
+
+ 'gross',
+
+
+ 'guarantee',
+
+ 'happiness',
+ 'harmful',
+ 'hence',
+ 'illustrate',
+ 'imply',
+ 'indicate',
+ 'inevitable',
+ 'injure',
+ 'intellectual',
+
+ 'intelligent',
+ 'internal',
+ 'justify',
+ 'label',
+ 'manufacture',
+ 'modify',
+ 'monopoly',
+ 'mostly',
+ 'neglect',
+ 'network',
+ 'nevertheless',
+ 'notion',
+ 'nuclear',
+ 'offspringsing.',
+ 'originate',
+ 'pace',
+ 'painful',
+ 'politics',
+ 'possess',
+ 'poverty',
+ 'privilege',
+ 'profit',
+
+ 'promote',
+ 'proportion',
+ 'pursue',
+ 'radical',
+
+ 'range',
+
+ 'rarely',
+ 'reality',
+ 'register',
+ 'regulate',
+ 'reject',
+
+ 'remarkable',
+ 'replace',
+ 'represent',
+ 'restriction',
+ 'reveal',
+ 'reward',
+ 'rival',
+
+
+ 'scatter',
+ 'security',
+ 'skilled',
+ 'storage',
+ 'strive',
+ 'style',
+
+ 'surplus',
+
+ 'surround',
+ 'survival',
+ 'target',
+
+ 'tendency',
+ 'trace',
+
+ 'tradition',
+ 'transform',
+ 'union',
+ 'utility',
+ 'valid',
+ 'visible',
+ 'wisdom',
+ 'worthwhile',
+
+ 'abuse',
+ 'acquisition',
+ 'activate',
+ 'alternative',
+
+ 'anticipate',
+ 'assess',
+ 'assign',
+ 'assignment',
+ 'associate',
+
+
+
+ 'attain',
+ 'ban',
+ 'bind',
+ 'budget',
+
+
+ 'candidate',
+ 'casual',
+ 'census',
+ 'chemical',
+
+ 'circumstance',
+ 'colleague',
+ 'compel',
+ 'complaint',
+ 'compose',
+ 'comprehension',
+ 'conclusion',
+ 'confusion',
+ 'congress',
+ 'connection',
+ 'considerate',
+ 'contend',
+ 'context',
+ 'contrary',
+
+ 'contribute',
+ 'counsel',
+
+ 'crucial',
+ 'decrease',
+ 'democratic',
+ 'dependent',
+ 'dispute',
+ 'disregard',
+
+ 'distort',
+
+ 'distract',
+ 'diverse',
+ 'draft',
+ 'drift',
+ 'economics',
+ 'efficiency',
+ 'endanger',
+ 'endure',
+ 'enlarge',
+ 'enlighten',
+ 'enormous',
+ 'ensure',
+ 'equip',
+ 'equivalent',
+
+ 'essay',
+ 'establishment',
+ 'evolve',
+ 'exceed',
+ 'excess',
+ 'extreme',
+
+ 'fade',
+ 'failure',
+ 'fiction',
+ 'flourish',
+ 'folk',
+
+ 'forecast',
+ 'formulate',
+ 'generate',
+ 'geology',
+ 'global',
+ 'grant',
+
+ 'gravity',
+ 'handle',
+
+ 'harm',
+ 'helpful',
+ 'hesitate',
+ 'highlight',
+
+ 'hospitality',
+ 'ideal',
+
+ 'immigrant',
+ 'immune',
+ 'impact',
+ 'import',
+ 'impose',
+ 'inferior',
+
+ 'inform',
+
+ 'inquiry',
+ 'instance',
+ 'instant',
+
+ 'instrument',
+ 'insurance',
+ 'interact',
+ 'irritate',
+ 'keen',
+ 'legislation',
+ 'leisure',
+ 'liability',
+ 'logical',
+ 'mankind',
+ 'mathematical',
+ 'military',
+
+ 'mode',
+ 'moreover',
+ 'motive',
+ 'multitude',
+ 'novel',
+ 'a',
+ 'oblige',
+ 'opponent',
+ 'optimistic',
+ 'organic',
+ 'output',
+ 'phase',
+ 'pollution',
+ 'precise',
+ 'prejudice',
+
+ 'presence',
+ 'primary',
+ 'prompt',
+
+
+ 'proof',
+ 'propose',
+ 'proposition',
+ 'outlook',
+ 'prosperity',
+ 'provision',
+ 'random',
+ 'rare',
+ 'readily',
+ 'reckon',
+ 'recovery',
+ 'reference',
+ 'reform',
+
+ 'region',
+ 'regret',
+ 'relieve',
+ 'religion',
+ 'resist',
+ 'revolve',
+ 'schedule',
+
+ 'screen',
+
+ 'select',
+
+ 'sensitive',
+ 'significance',
+ 'slip',
+ 'solution',
+ 'somewhat',
+ 'spite',
+ 'stake',
+
+ 'standardize-ise',
+ 'steer.',
+ 'strategy',
+ 'stream',
+
+ 'substantial',
+ 'trail',
+ 'transition',
+ 'transmit',
+ 'transport',
+
+ 'trial',
+ 'typical',
+ 'underlie',
+ 'unexpected',
+ 'unfortunately',
+ 'unknown',
+ 'unlike',
+ 'prep',
+ 'unusual',
+ 'urgent',
+ 'vain',
+ 'verify',
+ 'viapre',
+ 'violence',
+ 'whereas',
+
+ 'abide',
+ 'absorb',
+ 'abundant',
+ 'accelerate',
+ 'accomplish',
+ 'accordingly',
+ 'accuracy',
+ 'accuse',
+ 'adopt',
+ 'advisable',
+ 'affiliate',
+
+ 'alcohol',
+ 'alternate',
+
+ 'ambitious',
+ 'ample',
+ 'annual',
+
+ 'application',
+ 'arbitrary',
+ 'atistic',
+ 'assert',
+ 'attach',
+ 'automobile',
+ 'aware',
+ 'awkward',
+ 'background',
+ 'balloon',
+
+ 'barely',
+ 'behalf',
+ 'besidesprep',
+ 'ad',
+ 'bound',
+ 'brake',
+ 'bulk',
+ 'capable',
+ 'caution',
+ 'cease',
+ 'channel',
+ 'chop',
+ 'classify',
+ 'cluster',
+
+ 'coincidence',
+ 'commerce',
+ 'communicate',
+
+ 'comparable',
+ 'compensate',
+ 'compete',
+ 'complicated',
+ 'concentrate',
+
+ 'confer',
+ 'confess',
+ 'confine',
+
+ 'confirm',
+ 'conform',
+ 'consentvi',
+ 'conservative',
+
+ 'consistent',
+ 'contemporary',
+
+ 'contestn',
+ 'contradict',
+ 'contribution',
+ 'convenience',
+ 'costly',
+ 'crack',
+
+ 'criticism',
+ 'criticizeise',
+ 'deem',
+ 'definite',
+ 'democracy',
+ 'dependence',
+ 'desirable',
+ 'diet',
+ 'dignity',
+ 'disaster',
+ 'disgrace',
+
+ 'disperse',
+ 'display',
+ 'distinct',
+ 'distinguish',
+ 'diversion',
+ 'dominate',
+ 'doom',
+ 'doubtful',
+ 'drag',
+
+ 'dramatic',
+ 'elegant',
+ 'eliminate',
+ 'elite',
+ 'embrace',
+ 'encounter',
+ 'engine',
+ 'enhance',
+ 'enrich',
+ 'envy',
+ 'epidemic',
+
+ 'exaggerate',
+ 'exceedingly',
+ 'exceptional',
+ 'excessive',
+ 'exhaust',
+
+ 'expand',
+ 'expose',
+ 'faulty',
+ 'feature',
+
+ 'female',
+ 'fertile',
+ 'fierce',
+ 'file',
+
+ 'finance',
+
+ 'flexible',
+ 'fluctuate',
+ 'forthad',
+ 'foundation',
+ 'frame',
+ 'frontier',
+ 'frustrate',
+ 'furious',
+ 'furthermore',
+ 'glimpse',
+ 'globe',
+ 'gradual',
+ 'hardship',
+ 'hasten',
+ 'hemisphere',
+ 'host',
+ 'household',
+
+ 'humble',
+
+ 'ignorant',
+ 'illegal',
+ 'impression',
+ 'incorporate',
+ 'indicative',
+ 'indifferent',
+ 'initial',
+ 'initiate',
+ 'initiative',
+ 'inject',
+ 'injury',
+ 'inpu',
+ 'instructor',
+ 'intense',
+ 'intensive',
+ 'interfere',
+ 'interval',
+ 'invent',
+ 'invest',
+ 'isolate',
+ 'jam',
+ 'kindness',
+ 'knot',
+
+ 'laughter',
+ 'leading',
+ 'likewise',
+ 'limitation',
+ 'loan',
+ 'lum',
+ 'magnitude',
+ 'maintenance',
+ 'manipulate',
+ 'migrate',
+ 'mild',
+ 'monetary',
+ 'mood',
+ 'multiple',
+
+ 'municipal',
+ 'myth',
+ 'necessity',
+ 'nerve',
+ 'objective',
+ 'occupation',
+ 'optional',
+ 'orient',
+
+ 'orientation',
+ 'original',
+
+ 'overcome',
+ 'overlook',
+ 'overseas',
+ 'overwhelming',
+ 'owing',
+ 'parallel',
+ 'paralyz',
+ 'partial',
+ 'participant',
+ 'passport',
+ 'perceive',
+ 'percentage',
+ 'perplex',
+ 'persist',
+ 'personnel',
+ 'philosopher',
+ 'plausible',
+ 'pop',
+ 'portion',
+ 'pose',
+ 'practically',
+ 'precede',
+ 'prescribe',
+ 'procedure',
+ 'productive',
+ 'profound',
+ 'puzzle',
+ 'qualify',
+ 'questionable',
+ 'quote',
+ 'rage',
+ 'rational',
+ 'raw',
+ 'rectify',
+ 'reinforce',
+ 'relationship',
+ 'reliable',
+ 'relief',
+ 'remote',
+ 'render',
+ 'renew',
+ 'resent',
+ 'reserve',
+ 'resort',
+
+ 'restrict',
+ 'resume',
+ 'retire',
+ 'retreat',
+ 'revenue',
+ 'reverse',
+
+
+ 'routine',
+
+ 'rude',
+ 'sacrifice',
+ 'scope',
+ 'senior',
+ 'sensation',
+ 'series',
+ 'severe',
+ 'shortly',
+ 'shrink',
+ 'simplify',
+ 'sketch',
+
+ 'split',
+ 'squeeze',
+
+ 'stationary',
+ 'stimulate',
+ 'stumble',
+ 'submit',
+ 'substitute',
+
+ 'subtle',
+ 'suggestion',
+ 'superior',
+
+ 'surpass',
+ 'suspicious',
+ 'sustain',
+ 'symbol',
+ 'tax',
+
+ 'teenager',
+ 'tempt',
+ 'thorough',
+ 'thrive',
+ 'timely',
+ 'trait',
+ 'transfe',
+ 'triumph',
+
+
+ 'undergo',
+ 'undertake',
+ 'unique',
+ 'universal',
+ 'urge',
+ 'validity',
+ 'vanish',
+ 'vary',
+ 'vehicle',
+ 'virtual',
+ 'virtue',
+ 'virus',
+ 'vital',
+ 'volcano',
+ 'volume',
+ 'witness',
+ 'worthy',
+ 'velocity',
+ 'yield',
+]
+module.exports = {
+ wordList: word_list
+}
\ No newline at end of file
diff --git a/data/vocabulary.js b/data/vocabulary.js
new file mode 100644
index 0000000..cde6829
--- /dev/null
+++ b/data/vocabulary.js
@@ -0,0 +1,12354 @@
+
+var word_list =
+ ['abacus',
+'abandon',
+'abase',
+'abate',
+'abbey',
+'abbreviate',
+'abbreviation',
+'abdicate',
+'abdomen',
+'abdominal',
+'abduct',
+'aberrant',
+'abhor',
+'abiding',
+'ability',
+'abject',
+'ablaze',
+'able',
+'ably',
+'abnormal',
+'abnormality',
+'aboard',
+'abode',
+'abolish',
+'abolition',
+'abominable',
+'aboriginal',
+'abort',
+'abound',
+'about',
+'above',
+'aboveboard',
+'abrasive',
+'abreast',
+'abridge',
+'abroad',
+'abrupt',
+'abruptly',
+'absence',
+'absent',
+'absentee',
+'absent-minded',
+'absolute',
+'absolutely',
+'absolve',
+'absorb',
+'absorption',
+'abstain',
+'abstention',
+'abstinence',
+'abstract',
+'absurd',
+'abundance',
+'abundant',
+'abuse',
+'abusive',
+'abyss',
+'academic',
+'academician',
+'academy',
+'accede',
+'accelerate',
+'accent',
+'accentuate',
+'accept',
+'acceptable',
+'acceptance',
+'access',
+'accessible',
+'accession',
+'accessory',
+'accident',
+'acclaim',
+'accommodate',
+'accommodation',
+'accompaniment',
+'accompanist',
+'accompany',
+'accomplice',
+'accomplish',
+'accomplished',
+'accomplishment',
+'accord',
+'accordance',
+'according',
+'accordingly',
+'accordion',
+'account',
+'accountable',
+'accountancy',
+'accountant',
+'accredit',
+'accrue',
+'accumulate',
+'accuracy',
+'accurate',
+'accusation',
+'accuse',
+'accustom',
+'ace',
+'ache',
+'achieve',
+'achievement',
+'acid',
+'acknowledge',
+'acknowledgement',
+'acoustics',
+'acquaint',
+'acquaintance',
+'acquiesce',
+'acquire',
+'acquisition',
+'acquit',
+'acquittal',
+'acre',
+'acrimony',
+'acrobat',
+'acronym',
+'across',
+'act',
+'acting',
+'action',
+'activate',
+'active',
+'activist',
+'activity',
+'actor',
+'actress',
+'actual',
+'actuality',
+'actually',
+'acumen',
+'acupuncture',
+'acute',
+'ad',
+'adamant',
+'adapt',
+'adaptable',
+'adaptation',
+'adapter',
+'adaptor',
+'add',
+'addict',
+'addiction',
+'addictive',
+'addition',
+'additional',
+'additionally',
+'additive',
+'address',
+'adept',
+'adequate',
+'adhere',
+'adherence',
+'adhesive',
+'adjacent',
+'adjective',
+'adjoin',
+'adjourn',
+'adjudicate',
+'adjunct',
+'adjust',
+'adjustment',
+'administer',
+'administration',
+'administrative',
+'administrator',
+'admirable',
+'admiral',
+'admiration',
+'admire',
+'admissible',
+'admission',
+'admit',
+'admittedly',
+'admonish',
+'ado',
+'adolescent',
+'adopt',
+'adoption',
+'adore',
+'adorn',
+'adrift',
+'adroit',
+'adult',
+'adulterate',
+'adultery',
+'adulthood',
+'advance',
+'advanced',
+'advantage',
+'advantageous',
+'advent',
+'adventure',
+'adventurism',
+'adventurist',
+'adventurous',
+'adverb',
+'adverbial',
+'adversary',
+'adverse',
+'adversity',
+'advertise',
+'advertisement',
+'advertising',
+'advice',
+'advisable',
+'advise',
+'adviser',
+'advisor',
+'advisory',
+'advocacy',
+'advocate',
+'aerial',
+'aerobatics',
+'aerobics',
+'aerodynamics',
+'aeronautics',
+'aeroplane',
+'aerosol',
+'aerospace',
+'aesthetics',
+'affable',
+'affair',
+'affect',
+'affection',
+'affectionate',
+'affiliate',
+'affinity',
+'affirm',
+'affirmative',
+'affix',
+'afflict',
+'affluent',
+'afford',
+'afield',
+'afloat',
+'afoot',
+'afraid',
+'afresh',
+'Africa',
+'African',
+'after',
+'aftereffect',
+'aftermath',
+'afternoon',
+'again',
+'against',
+'age',
+'aged',
+'agency',
+'agenda',
+'agent',
+'aggravate',
+'aggregate',
+'aggression',
+'aggressive',
+'aggressor',
+'aggrieved',
+'agile',
+'agitate',
+'agitation',
+'agnostic',
+'ago',
+'agonizing',
+'agony',
+'agree',
+'agreeable',
+'agreement',
+'agricultural',
+'agriculture',
+'aground',
+'ahead',
+'aid',
+'ailing',
+'ailment',
+'aim',
+'aimless',
+'air',
+'airbase',
+'airborne',
+'air-conditioned',
+'aircraft',
+'airfield',
+'airforce',
+'airily',
+'airlift',
+'airline',
+'airliner',
+'airmail',
+'airport',
+'airstrip',
+'airtight',
+'airway',
+'airy',
+'aisle',
+'ajar',
+'alarm',
+'alas',
+'album',
+'alchemy',
+'alcohol',
+'alcoholic',
+'alcoholism',
+'ale',
+'alert',
+'alga',
+'algebra',
+'alias',
+'alibi',
+'alien',
+'alienate',
+'align',
+'alike',
+'alimony',
+'alive',
+'alkali',
+'all',
+'Allah',
+'allay',
+'allege',
+'allegedly',
+'allegiance',
+'allegory',
+'allergic',
+'allergy',
+'alleviate',
+'alley',
+'alliance',
+'alligator',
+'allocate',
+'allocation',
+'allot',
+'allow',
+'allowance',
+'alloy',
+'allure',
+'allusion',
+'ally',
+'almanac',
+'almighty',
+'almond',
+'almost',
+'alms',
+'alone',
+'along',
+'alongside',
+'aloof',
+'aloud',
+'alphabet',
+'alphabetical',
+'already',
+'also',
+'altar',
+'alter',
+'alteration',
+'alternate',
+'alternative',
+'although',
+'altitude',
+'altogether',
+'aluminium',
+'aluminum',
+'alumna',
+'alumnus',
+'always',
+'am',
+'amalgamate',
+'amass',
+'amateur',
+'amaze',
+'amazing',
+'ambassador',
+'amber',
+'ambience',
+'ambiguity',
+'ambiguous',
+'ambition',
+'ambitious',
+'ambivalent',
+'ambulance',
+'ambush',
+'amenable',
+'amend',
+'amendment',
+'amenity',
+'America',
+'American',
+'amiable',
+'amicable',
+'amid',
+'amidst',
+'amiss',
+'ammeter',
+'ammonia',
+'ammunition',
+'amnesia',
+'amnesty',
+'among',
+'amongst',
+'amoral',
+'amount',
+'ampere',
+'amphibian',
+'amphibious',
+'ample',
+'amplifier',
+'amplify',
+'amuse',
+'amusement',
+'anaemia',
+'anaesthesia',
+'anaesthetic',
+'anaesthetize',
+'anagram',
+'anal',
+'analogue',
+'analogy',
+'analyse',
+'analysis',
+'analytical',
+'analyze',
+'anarchic',
+'anarchist',
+'anarchy',
+'anatomy',
+'ancestor',
+'ancestral',
+'ancestry',
+'anchor',
+'anchorage',
+'anchorman',
+'ancient',
+'and',
+'anecdote',
+'anemia',
+'anesthesia',
+'anesthetic',
+'anesthetize',
+'anew',
+'angel',
+'anger',
+'angle',
+'angrily',
+'angry',
+'anguish',
+'angular',
+'animal',
+'animate',
+'animation',
+'animosity',
+'ankle',
+'annals',
+'annex',
+'annihilate',
+'anniversary',
+'announce',
+'announcement',
+'announcer',
+'annoyance',
+'annual',
+'annuity',
+'annul',
+'anode',
+'anomaly',
+'anonymity',
+'anonymous',
+'another',
+'answer',
+'ant',
+'antagonism',
+'antagonist',
+'antagonize',
+'antarctic',
+'antecedent',
+'antelope',
+'antenna',
+'anthem',
+'anthology',
+'anthropology',
+'antibiotic',
+'antibody',
+'antic',
+'anticipate',
+'anticipation',
+'antidote',
+'antilogarithm',
+'antipathy',
+'antique',
+'antiquity',
+'antiseptic',
+'antler',
+'antonym',
+'anus',
+'anxiety',
+'anxious',
+'anxiously',
+'any',
+'anybody',
+'anyhow',
+'anymore',
+'anyone',
+'anything',
+'anyway',
+'anywhere',
+'apace',
+'apart',
+'apartheid',
+'apartment',
+'apathy',
+'ape',
+'aperture',
+'apex',
+'apiece',
+'apologetic',
+'apologize',
+'apology',
+'apoplexy',
+'apostrophe',
+'appalling',
+'apparatus',
+'apparel',
+'apparent',
+'apparently',
+'appeal',
+'appealing',
+'appear',
+'appearance',
+'appease',
+'append',
+'appendicitis',
+'appendix',
+'appetite',
+'applaud',
+'applause',
+'apple',
+'appliance',
+'applicable',
+'applicant',
+'application',
+'apply',
+'appoint',
+'appointee',
+'appointment',
+'apposite',
+'appraisal',
+'appraise',
+'appreciable',
+'appreciate',
+'appreciation',
+'appreciative',
+'apprehend',
+'apprehension',
+'apprentice',
+'approach',
+'appropriate',
+'approval',
+'approve',
+'approximate',
+'apricot',
+'April',
+'apron',
+'apt',
+'aptitude',
+'aquarium',
+'aquatic',
+'Arabia',
+'Arabian',
+'Arabic',
+'arbiter',
+'arbitrary',
+'arbitrate',
+'arc',
+'arcade',
+'arch',
+'archaeologist',
+'archaeology',
+'archaic',
+'archbishop',
+'archer',
+'archetype',
+'archipelago',
+'architect',
+'architecture',
+'archive',
+'archway',
+'arctic',
+'ardent',
+'ardor',
+'ardour',
+'arduous',
+'are',
+'area',
+'arena',
+'argue',
+'argument',
+'argumentative',
+'arid',
+'arise',
+'aristocracy',
+'aristocrat',
+'aristocratic',
+'arithmetic',
+'ark',
+'arm',
+'armada',
+'armament',
+'armchair',
+'armor',
+'armour',
+'armoury',
+'armpit',
+'army',
+'aroma',
+'aromatic',
+'around',
+'arouse',
+'arrange',
+'arrangement',
+'array',
+'arrears',
+'arrest',
+'arrival',
+'arrive',
+'arrogance',
+'arrogant',
+'arrow',
+'arsenal',
+'arson',
+'art',
+'artefact',
+'artery',
+'artful',
+'arthritis',
+'article',
+'articulate',
+'artifact',
+'artifice',
+'artificial',
+'artillery',
+'artisan',
+'artist',
+'artistic',
+'as',
+'ascend',
+'ascendant',
+'ascent',
+'ascertain',
+'ascetic',
+'ascribe',
+'ash',
+'ashamed',
+'ashore',
+'ashtray',
+'Asia',
+'Asian',
+'aside',
+'ask',
+'asleep',
+'aspect',
+'asphalt',
+'aspiration',
+'aspire',
+'aspirin',
+'ass',
+'assail',
+'assailant',
+'assassin',
+'assassinate',
+'assault',
+'assemble',
+'assembly',
+'assent',
+'assert',
+'assertion',
+'assertive',
+'assess',
+'assessment',
+'asset',
+'assiduous',
+'assign',
+'assignment',
+'assimilate',
+'assist',
+'assistance',
+'assistant',
+'associate',
+'association',
+'assorted',
+'assortment',
+'assume',
+'assumption',
+'assurance',
+'assure',
+'assuredly',
+'asterisk',
+'asthma',
+'astonish',
+'astonishment',
+'astound',
+'astral',
+'astray',
+'astrology',
+'astronaut',
+'astronomer',
+'astronomical',
+'astronomy',
+'astrophysics',
+'asylum',
+'asymmetric',
+'athlete',
+'athletic',
+'athletics',
+'Atlantic',
+'atlas',
+'atmosphere',
+'atmospheric',
+'atom',
+'atomic',
+'atrocious',
+'atrocity',
+'attach',
+'attache',
+'attachment',
+'attack',
+'attain',
+'attempt',
+'attend',
+'attendance',
+'attendant',
+'attention',
+'attentive',
+'attest',
+'attic',
+'attitude',
+'attorney',
+'attract',
+'attraction',
+'attractive',
+'attrition',
+'auction',
+'auctioneer',
+'audacious',
+'audible',
+'audience',
+'audio',
+'audiovisuals',
+'audit',
+'audition',
+'auditor',
+'auditorium',
+'augment',
+'august',
+'August',
+'aunt',
+'aura',
+'aural',
+'auspicious',
+'austere',
+'austerity',
+'Australian',
+'authentic',
+'author',
+'authorise',
+'authoritarian',
+'authoritative',
+'authority',
+'authorize',
+'autobiographical',
+'autobiography',
+'autocrat',
+'autocratic',
+'autograph',
+'automate',
+'automatic',
+'automation',
+'automobile',
+'autonomous',
+'autonomy',
+'autopsy',
+'autumn',
+'auxiliary',
+'availability',
+'available',
+'avalanche',
+'avenge',
+'avenue',
+'average',
+'aversion',
+'avert',
+'aviation',
+'avid',
+'avoid',
+'await',
+'awake',
+'awaken',
+'award',
+'aware',
+'away',
+'awe',
+'awesome',
+'awful',
+'awfully',
+'awkward',
+'awkwardly',
+'ax',
+'axe',
+'axiom',
+'axis',
+'axle',
+'babble',
+'baby',
+'baby-sit',
+'bachelor',
+'back',
+'backbiting',
+'backbone',
+'backbreaking',
+'backdate',
+'backdrop',
+'backfire',
+'background',
+'backhand',
+'backside',
+'backup',
+'backward',
+'backwards',
+'backwater',
+'backyard',
+'bacon',
+'bacteria',
+'bad',
+'badge',
+'badly',
+'badminton',
+'bad-tempered',
+'baffle',
+'bag',
+'baggage',
+'baggy',
+'bail',
+'bait',
+'bake',
+'baker',
+'bakery',
+'balance',
+'balcony',
+'bald',
+'bale',
+'baleful',
+'balk',
+'ball',
+'ballad',
+'ballast',
+'ballerina',
+'ballet',
+'ballistics',
+'balloon',
+'ballot',
+'balm',
+'balmy',
+'balustrade',
+'bamboo',
+'ban',
+'banal',
+'banana',
+'band',
+'bandage',
+'bandit',
+'bandwagon',
+'bane',
+'bang',
+'banish',
+'banister',
+'banjo',
+'bank',
+'banker',
+'banking',
+'bankrupt',
+'bankruptcy',
+'banner',
+'banquet',
+'banter',
+'baptism',
+'baptize',
+'bar',
+'barbarian',
+'barbaric',
+'barbarous',
+'barbecue',
+'barber',
+'bare',
+'barely',
+'bargain',
+'barge',
+'baritone',
+'barley',
+'barn',
+'barometer',
+'baron',
+'baroque',
+'barracks',
+'barrage',
+'barrel',
+'barren',
+'barricade',
+'barrier',
+'barrister',
+'barrow',
+'barter',
+'base',
+'baseball',
+'basement',
+'bash',
+'bashful',
+'basic',
+'basically',
+'basin',
+'basis',
+'bask',
+'basket',
+'basketball',
+'bass',
+'bastard',
+'bastion',
+'bat',
+'batch',
+'bath',
+'bathe',
+'bathroom',
+'baton',
+'battalion',
+'batter',
+'battery',
+'battle',
+'battlefield',
+'bawl',
+'bay',
+'bayonet',
+'bazaar',
+'be',
+'beach',
+'beacon',
+'bead',
+'beak',
+'beaker',
+'beam',
+'bean',
+'beard',
+'bearing',
+'beast',
+'beastly',
+'beat',
+'beating',
+'beautiful',
+'beautify',
+'beauty',
+'because',
+'beckon',
+'become',
+'bed',
+'bedding',
+'bedroom',
+'bedtime',
+'bee',
+'beef',
+'beeper',
+'beer',
+'beet',
+'beetle',
+'befall',
+'befit',
+'before',
+'beforehand',
+'beg',
+'beggar',
+'begin',
+'beginner',
+'beginning',
+'begrudge',
+'beguile',
+'behalf',
+'behave',
+'behavior',
+'behaviour',
+'behead',
+'behind',
+'beige',
+'being',
+'belie',
+'belief',
+'believe',
+'bell',
+'bellow',
+'belly',
+'belong',
+'belongings',
+'beloved',
+'below',
+'belt',
+'bemoan',
+'bemused',
+'bench',
+'benchmark',
+'bend',
+'beneath',
+'benediction',
+'beneficial',
+'beneficiary',
+'benefit',
+'benevolence',
+'benevolent',
+'benign',
+'bequeath',
+'bequest',
+'bereaved',
+'berry',
+'berth',
+'beset',
+'beside',
+'besides',
+'besiege',
+'best',
+'bestow',
+'bet',
+'betray',
+'better',
+'between',
+'beverage',
+'beware',
+'bewilder',
+'bewitch',
+'beyond',
+'bias',
+'Bible',
+'bibliography',
+'bicker',
+'bicycle',
+'bid',
+'big',
+'bigot',
+'bike',
+'bikini',
+'bilateral',
+'bile',
+'bilingual',
+'bill',
+'billiards',
+'billion',
+'billow',
+'bin',
+'binary',
+'bind',
+'binder',
+'binding',
+'binge',
+'bingo',
+'binoculars',
+'biochemistry',
+'biographical',
+'biography',
+'biological',
+'biologist',
+'biology',
+'biotechnology',
+'bipartisan',
+'birch',
+'bird',
+'birth',
+'birthday',
+'birthplace',
+'birthrate',
+'biscuit',
+'bisect',
+'bishop',
+'bit',
+'bite',
+'bitter',
+'bitterly',
+'bizarre',
+'black',
+'blackboard',
+'blacken',
+'blackmail',
+'blackout',
+'blacksmith',
+'bladder',
+'blade',
+'blame',
+'blanch',
+'bland',
+'blank',
+'blanket',
+'blare',
+'blast',
+'blatant',
+'blaze',
+'bleach',
+'bleak',
+'bleat',
+'bleed',
+'bleep',
+'blemish',
+'blend',
+'bless',
+'blessed',
+'blessing',
+'blind',
+'blink',
+'bliss',
+'blister',
+'blitz',
+'blizzard',
+'blob',
+'block',
+'blockade',
+'blond',
+'blonde',
+'blood',
+'bloody',
+'bloom',
+'blossom',
+'blot',
+'blotter',
+'blouse',
+'blue',
+'blueprint',
+'blues',
+'blunder',
+'blunt',
+'blur',
+'blurt',
+'blush',
+'board',
+'boardroom',
+'boast',
+'boat',
+'bobsleigh',
+'bodily',
+'body',
+'bodyguard',
+'bog',
+'boggle',
+'bogus',
+'boil',
+'boiler',
+'boisterous',
+'bold',
+'boldness',
+'bolt',
+'bomb',
+'bombard',
+'bomber',
+'bombshell',
+'bond',
+'bondage',
+'bone',
+'bonfire',
+'bonnet',
+'bonus',
+'bony',
+'boo',
+'booby',
+'book',
+'bookcase',
+'bookish',
+'bookkeeping',
+'booklet',
+'bookmark',
+'bookseller',
+'bookshelf',
+'bookshop',
+'bookstall',
+'bookstore',
+'boom',
+'boon',
+'boost',
+'boot',
+'booth',
+'bootleg',
+'booze',
+'border',
+'borderline',
+'bore',
+'bored',
+'boredom',
+'boring',
+'born',
+'borough',
+'borrow',
+'bosom',
+'boss',
+'bossy',
+'botanical',
+'botanist',
+'botany',
+'both',
+'bother',
+'bottle',
+'bottleneck',
+'bottom',
+'bough',
+'boulevard',
+'bounce',
+'boundary',
+'bountiful',
+'bounty',
+'bouquet',
+'bourgeois',
+'bourgeoisie',
+'bout',
+'boutique',
+'bow',
+'bowels',
+'bowl',
+'bowler',
+'bowling',
+'boxer',
+'boxing',
+'boy',
+'boycott',
+'boyfriend',
+'bra',
+'brace',
+'bracelet',
+'bracket',
+'brag',
+'braid',
+'brain',
+'brainless',
+'brainstorming',
+'brainwash',
+'brake',
+'branch',
+'brand',
+'brandy',
+'brash',
+'brass',
+'bravado',
+'brave',
+'bravery',
+'Brazilian',
+'breach',
+'bread',
+'breadth',
+'break',
+'breakfast',
+'breakthrough',
+'breast',
+'breath',
+'breathe',
+'breathless',
+'breathtaking',
+'breed',
+'breeze',
+'brevity',
+'brew',
+'brewery',
+'bribe',
+'bribery',
+'brick',
+'bridal',
+'bride',
+'bridegroom',
+'bridge',
+'bridle',
+'brief',
+'briefcase',
+'briefing',
+'briefly',
+'brigade',
+'bright',
+'brighten',
+'brilliance',
+'brilliant',
+'brim',
+'bring',
+'brink',
+'brisk',
+'bristle',
+'British',
+'Briton',
+'brittle',
+'broad',
+'broadcast',
+'broaden',
+'broccoli',
+'brochure',
+'broke',
+'broken',
+'broker',
+'brokerage',
+'bronchitis',
+'bronze',
+'brooch',
+'brood',
+'brook',
+'broom',
+'brothel',
+'brother',
+'brotherhood',
+'brother-in-law',
+'brotherly',
+'brow',
+'brown',
+'browse',
+'browser',
+'bruise',
+'brunch',
+'brunette',
+'brunt',
+'brush',
+'brusque',
+'brutal',
+'brute',
+'brutish',
+'bubble',
+'buck',
+'bucket',
+'buckle',
+'bud',
+'Buddha',
+'Buddhism',
+'Buddhist',
+'buddy',
+'budge',
+'budget',
+'buff',
+'buffalo',
+'buffer',
+'bug',
+'buggy',
+'bugle',
+'build',
+'builder',
+'building',
+'bulb',
+'bulge',
+'bulk',
+'bulky',
+'bull',
+'bulldozer',
+'bullet',
+'bulletin',
+'bullheaded',
+'bullish',
+'bully',
+'bum',
+'bump',
+'bumper',
+'bun',
+'bunch',
+'bundle',
+'bungalow',
+'bunk',
+'bunker',
+'buoy',
+'buoyancy',
+'burden',
+'burdensome',
+'bureau',
+'bureaucracy',
+'bureaucrat',
+'burglar',
+'burglary',
+'burial',
+'burn',
+'burrow',
+'burst',
+'bury',
+'bus',
+'bush',
+'bushel',
+'bushy',
+'business',
+'businessman',
+'bustle',
+'busy',
+'but',
+'butcher',
+'butler',
+'butter',
+'butterfly',
+'buttock',
+'button',
+'buy',
+'buzz',
+'by',
+'bye',
+'bypass',
+'by-product',
+'byte',
+'cab',
+'cabaret',
+'cabbage',
+'cabin',
+'cabinet',
+'cable',
+'cache',
+'cackle',
+'cactus',
+'CAD',
+'cadet',
+'cadre',
+'cafe',
+'cafeteria',
+'cage',
+'cajole',
+'cake',
+'calamity',
+'calcium',
+'calculate',
+'calculating',
+'calculation',
+'calculator',
+'calculus',
+'calendar',
+'calf',
+'caliber',
+'calibre',
+'call',
+'calligraphy',
+'callous',
+'callow',
+'calm',
+'calorie',
+'camel',
+'cameo',
+'camera',
+'camouflage',
+'camp',
+'campaign',
+'campus',
+'can',
+'Canadian',
+'canal',
+'canary',
+'cancel',
+'cancer',
+'candid',
+'candidate',
+'candle',
+'candy',
+'cane',
+'canine',
+'cannery',
+'cannibal',
+'cannon',
+'canny',
+'canoe',
+'canon',
+'canopy',
+'canteen',
+'canter',
+'Cantonese',
+'canvas',
+'canvass',
+'canyon',
+'cap',
+'capability',
+'capable',
+'capacity',
+'cape',
+'capillary',
+'capital',
+'capitalism',
+'capitalist',
+'capitalize',
+'capitulate',
+'caprice',
+'capricious',
+'capsize',
+'capsule',
+'captain',
+'caption',
+'captivate',
+'captive',
+'captivity',
+'capture',
+'car',
+'carat',
+'caravan',
+'carbohydrate',
+'carbon',
+'carcase',
+'carcass',
+'card',
+'cardboard',
+'cardiac',
+'cardigan',
+'cardinal',
+'care',
+'career',
+'carefree',
+'careful',
+'carefully',
+'careless',
+'caress',
+'caretaker',
+'cargo',
+'caricature',
+'carnage',
+'carnal',
+'carnation',
+'carnival',
+'carnivore',
+'carol',
+'carp',
+'carpenter',
+'carpet',
+'carriage',
+'carrier',
+'carrot',
+'carry',
+'cart',
+'carton',
+'cartoon',
+'cartridge',
+'carve',
+'cascade',
+'case',
+'cash',
+'cashier',
+'cashmere',
+'casino',
+'cask',
+'cassette',
+'cast',
+'caste',
+'castle',
+'casual',
+'casualty',
+'cat',
+'catalog',
+'catalogue',
+'catalyst',
+'cataract',
+'catastrophe',
+'catcall',
+'catch',
+'catchword',
+'catchy',
+'categorical',
+'categorize',
+'category',
+'cater',
+'caterpillar',
+'cathedral',
+'cathode',
+'Catholicism',
+'cattle',
+'catwalk',
+'cauliflower',
+'causal',
+'cause',
+'caution',
+'cautious',
+'cavalry',
+'cave',
+'cavern',
+'caviar',
+'cavity',
+'cease',
+'cedar',
+'cede',
+'ceiling',
+'celebrate',
+'celebrated',
+'celebration',
+'celebrity',
+'celery',
+'celestial',
+'cell',
+'cellar',
+'cello',
+'cellular',
+'celluloid',
+'Celsius',
+'cement',
+'cemetery',
+'censor',
+'censorious',
+'censorship',
+'censure',
+'census',
+'cent',
+'centenary',
+'center',
+'centigrade',
+'centimeter',
+'centimetre',
+'central',
+'centralize',
+'centre',
+'centrist',
+'century',
+'ceramic',
+'cereal',
+'cerebral',
+'ceremonial',
+'ceremonious',
+'ceremony',
+'certain',
+'certainly',
+'certainty',
+'certificate',
+'certify',
+'certitude',
+'cesspit',
+'chain',
+'chair',
+'chairman',
+'chalet',
+'chalk',
+'challenge',
+'challenging',
+'chamber',
+'champagne',
+'champion',
+'championship',
+'chance',
+'chancellor',
+'change',
+'changeable',
+'channel',
+'chant',
+'chaos',
+'chaotic',
+'chap',
+'chapel',
+'chaplain',
+'chapter',
+'character',
+'characteristic',
+'characterize',
+'charcoal',
+'charge',
+'chargeable',
+'chariot',
+'charisma',
+'charismatic',
+'charitable',
+'charity',
+'charming',
+'chart',
+'charter',
+'chartered',
+'charwoman',
+'chase',
+'chasm',
+'chaste',
+'chastity',
+'chat',
+'chatter',
+'chatterbox',
+'chauffeur',
+'chauvinism',
+'cheap',
+'cheat',
+'check',
+'checkout',
+'checkpoint',
+'cheek',
+'cheer',
+'cheerful',
+'cheese',
+'chef',
+'chemical',
+'chemist',
+'chemistry',
+'cheque',
+'cherish',
+'cherry',
+'chess',
+'chest',
+'chestnut',
+'chew',
+'chic',
+'chick',
+'chicken',
+'chief',
+'chiefly',
+'chieftain',
+'child',
+'childhood',
+'childish',
+'chill',
+'chilli',
+'chilly',
+'chime',
+'chimney',
+'chimpanzee',
+'chin',
+'china',
+'Chinese',
+'chip',
+'chirp',
+'chisel',
+'chivalry',
+'chloroplast',
+'chocolate',
+'choice',
+'choir',
+'choke',
+'cholera',
+'cholesterol',
+'choose',
+'chop',
+'choppy',
+'chopsticks',
+'choral',
+'chord',
+'chore',
+'choreography',
+'chorus',
+'Christ',
+'christen',
+'Christian',
+'Christianity',
+'Christmas',
+'chrome',
+'chromosome',
+'chronic',
+'chronicle',
+'chronological',
+'chronology',
+'chrysanthemum',
+'chubby',
+'chuck',
+'chuckle',
+'chum',
+'chunk',
+'church',
+'churchyard',
+'churlish',
+'churn',
+'cider',
+'cigar',
+'cigarette',
+'cinder',
+'cinema',
+'circle',
+'circuit',
+'circular',
+'circulate',
+'circulation',
+'circumference',
+'circumstance',
+'circumstantial',
+'circumvent',
+'circus',
+'cite',
+'citizen',
+'citizenship',
+'city',
+'civic',
+'civil',
+'civilian',
+'civilisation',
+'civilise',
+'civilization',
+'civilize',
+'clad',
+'claim',
+'claimant',
+'clam',
+'clamber',
+'clamor',
+'clamour',
+'clamp',
+'clan',
+'clandestine',
+'clang',
+'clap',
+'clarify',
+'clarity',
+'clash',
+'clasp',
+'class',
+'classic',
+'classical',
+'classification',
+'classified',
+'classify',
+'classmate',
+'classroom',
+'clatter',
+'clause',
+'claustrophobia',
+'claw',
+'clay',
+'clean',
+'cleaner',
+'cleanse',
+'clear',
+'clearance',
+'clearway',
+'cleavage',
+'cleave',
+'clench',
+'clergy',
+'clergyman',
+'clerk',
+'clever',
+'cliche',
+'click',
+'client',
+'cliff',
+'climactic',
+'climate',
+'climax',
+'climb',
+'clinch',
+'cling',
+'clinic',
+'clinical',
+'clip',
+'cloak',
+'clock',
+'clockwise',
+'clog',
+'clone',
+'close',
+'closely',
+'closet',
+'closure',
+'clot',
+'cloth',
+'clothes',
+'clothing',
+'cloud',
+'cloudy',
+'clout',
+'clown',
+'club',
+'clue',
+'clump',
+'clumsy',
+'cluster',
+'clutch',
+'clutter',
+'coach',
+'coal',
+'coalition',
+'coarse',
+'coast',
+'coastal',
+'coastline',
+'coat',
+'coax',
+'cobble',
+'cobbler',
+'cobra',
+'cobweb',
+'cocaine',
+'cock',
+'cockroach',
+'cocktail',
+'cocky',
+'cocoa',
+'coconut',
+'cod',
+'coddle',
+'code',
+'co-ed',
+'coefficient',
+'coerce',
+'coercion',
+'coexist',
+'coffee',
+'coffin',
+'cog',
+'cognitive',
+'coherent',
+'cohesive',
+'coil',
+'coin',
+'coinage',
+'coincide',
+'coincidence',
+'coke',
+'cola',
+'cold',
+'collaborate',
+'collaboration',
+'collapse',
+'collar',
+'collate',
+'colleague',
+'collect',
+'collection',
+'collective',
+'collector',
+'college',
+'collegiate',
+'collide',
+'collision',
+'collude',
+'collusion',
+'colon',
+'colonel',
+'colonial',
+'colonialist',
+'colonize',
+'colony',
+'color',
+'colossal',
+'colossus',
+'colour',
+'colourful',
+'colourless',
+'colt',
+'column',
+'columnist',
+'coma',
+'comb',
+'combat',
+'combatant',
+'combination',
+'combine',
+'combustible',
+'combustion',
+'come',
+'comedian',
+'comedy',
+'comet',
+'comfort',
+'comfortable',
+'comic',
+'comma',
+'command',
+'commandant',
+'commander',
+'commandment',
+'commemorate',
+'commence',
+'commend',
+'commendation',
+'commensurate',
+'comment',
+'commentary',
+'commentate',
+'commentator',
+'commerce',
+'commission',
+'commissioner',
+'commit',
+'commitment',
+'committed',
+'committee',
+'commodity',
+'common',
+'commonplace',
+'commonwealth',
+'commune',
+'communicable',
+'communicate',
+'communication',
+'communicative',
+'communion',
+'communique',
+'communism',
+'communist',
+'community',
+'commute',
+'compact',
+'companion',
+'companionship',
+'company',
+'comparable',
+'comparative',
+'comparatively',
+'compare',
+'comparison',
+'compartment',
+'compass',
+'compassion',
+'compassionate',
+'compatible',
+'compatriot',
+'compel',
+'compensate',
+'compensation',
+'compete',
+'competence',
+'competent',
+'competition',
+'competitive',
+'competitor',
+'compile',
+'complacency',
+'complacent',
+'complain',
+'complaint',
+'complement',
+'complementary',
+'complete',
+'completely',
+'complex',
+'complexion',
+'complexity',
+'compliance',
+'complicate',
+'complicated',
+'complicity',
+'compliment',
+'complimentary',
+'comply',
+'component',
+'compose',
+'composer',
+'composite',
+'composition',
+'composure',
+'compound',
+'comprehend',
+'comprehensible',
+'comprehension',
+'comprehensive',
+'compress',
+'compressor',
+'comprise',
+'compromise',
+'compulsion',
+'compulsory',
+'compunction',
+'compute',
+'computer',
+'comrade',
+'con',
+'conceal',
+'concede',
+'conceit',
+'conceited',
+'conceivable',
+'conceive',
+'concentrate',
+'concentration',
+'concentric',
+'concept',
+'conception',
+'conceptual',
+'concern',
+'concerning',
+'concert',
+'concerto',
+'concession',
+'conciliate',
+'concise',
+'conclude',
+'conclusion',
+'conclusive',
+'concord',
+'concrete',
+'concubine',
+'concur',
+'condemn',
+'condense',
+'condescend',
+'condition',
+'conditional',
+'conditioner',
+'condolence',
+'condom',
+'conducive',
+'conduct',
+'conductor',
+'cone',
+'confection',
+'confederacy',
+'confederate',
+'confer',
+'conference',
+'confess',
+'confession',
+'confetti',
+'confidant',
+'confide',
+'confidence',
+'confident',
+'confidential',
+'configuration',
+'confine',
+'confinement',
+'confirm',
+'confirmation',
+'confiscate',
+'conflate',
+'conflict',
+'conform',
+'conformity',
+'confront',
+'confrontation',
+'confuse',
+'confusion',
+'congenial',
+'congenital',
+'congested',
+'congestion',
+'congratulate',
+'congratulation',
+'congregate',
+'congregation',
+'congress',
+'congressman',
+'congruence',
+'congruency',
+'congruent',
+'conical',
+'conifer',
+'coniferous',
+'conjecture',
+'conjunction',
+'conjure',
+'connect',
+'connection',
+'connexion',
+'connoisseur',
+'connotation',
+'connote',
+'conquer',
+'conqueror',
+'conquest',
+'conscience',
+'conscientious',
+'conscientiously',
+'conscious',
+'consciousness',
+'conscript',
+'consecrate',
+'consecutive',
+'consensus',
+'consent',
+'consequence',
+'consequent',
+'consequently',
+'conservation',
+'conservatism',
+'conservative',
+'conserve',
+'consider',
+'considerable',
+'considerate',
+'consideration',
+'considering',
+'consign',
+'consignment',
+'consist',
+'consistency',
+'consistent',
+'console',
+'consolidate',
+'consonant',
+'consortium',
+'conspicuous',
+'conspiracy',
+'conspire',
+'constable',
+'constancy',
+'constant',
+'constantly',
+'constellation',
+'constituency',
+'constituent',
+'constitute',
+'constitution',
+'constitutional',
+'constrain',
+'constraint',
+'construct',
+'construction',
+'constructive',
+'consul',
+'consulate',
+'consult',
+'consultant',
+'consultation',
+'consume',
+'consumer',
+'consummate',
+'consumption',
+'contact',
+'contagious',
+'contain',
+'container',
+'containerization',
+'contaminate',
+'contemplate',
+'contemporary',
+'contempt',
+'contemptuous',
+'contend',
+'content',
+'contented',
+'contention',
+'contest',
+'contestant',
+'context',
+'continent',
+'continental',
+'contingency',
+'continual',
+'continue',
+'continuity',
+'continuous',
+'continuum',
+'contort',
+'contour',
+'contraception',
+'contraceptive',
+'contract',
+'contraction',
+'contractor',
+'contradict',
+'contradiction',
+'contradictory',
+'contrary',
+'contrast',
+'contribute',
+'contribution',
+'contributor',
+'contrive',
+'control',
+'controversial',
+'controversy',
+'conurbation',
+'convene',
+'convenience',
+'convenient',
+'convention',
+'conventional',
+'converge',
+'conversant',
+'conversation',
+'converse',
+'conversion',
+'convert',
+'convertible',
+'convex',
+'convey',
+'convict',
+'conviction',
+'convince',
+'convincing',
+'convoy',
+'convulse',
+'cook',
+'cooker',
+'cookery',
+'cookie',
+'cool',
+'cooler',
+'coop',
+'cooperate',
+'cooperation',
+'cooperative',
+'coordinate',
+'cop',
+'cope',
+'copier',
+'copper',
+'copy',
+'copyright',
+'coral',
+'cord',
+'cordial',
+'corduroy',
+'core',
+'cork',
+'cornea',
+'corner',
+'cornerstone',
+'cornet',
+'corollary',
+'coronation',
+'coroner',
+'corporal',
+'corporate',
+'corporation',
+'corps',
+'corpse',
+'corpulent',
+'corpus',
+'correct',
+'correction',
+'correlate',
+'correspond',
+'correspondence',
+'correspondent',
+'corridor',
+'corroborate',
+'corrode',
+'corrosion',
+'corrugated',
+'corrupt',
+'corruption',
+'cosmetic',
+'cosmic',
+'cosmopolitan',
+'cosmos',
+'cost',
+'costly',
+'costume',
+'cosy',
+'cot',
+'cottage',
+'cotton',
+'couch',
+'cough',
+'could',
+'council',
+'counsel',
+'counsellor',
+'count',
+'countable',
+'countenance',
+'counter',
+'counteract',
+'counterattack',
+'counterbalance',
+'counterfeit',
+'counterpart',
+'countess',
+'countless',
+'country',
+'countryside',
+'county',
+'coup',
+'couple',
+'coupon',
+'courage',
+'courageous',
+'courier',
+'course',
+'court',
+'courteous',
+'courtesy',
+'courtship',
+'courtyard',
+'cousin',
+'covenant',
+'cover',
+'coverage',
+'covert',
+'covet',
+'cow',
+'coward',
+'cowardice',
+'cowardly',
+'cowboy',
+'coy',
+'cozy',
+'crab',
+'crack',
+'cracker',
+'crackle',
+'cradle',
+'craft',
+'craftsman',
+'crafty',
+'crag',
+'cram',
+'cramp',
+'crane',
+'cranky',
+'crap',
+'crash',
+'crate',
+'crater',
+'crave',
+'craven',
+'crawl',
+'crayon',
+'craze',
+'crazy',
+'creak',
+'cream',
+'creamy',
+'crease',
+'create',
+'creation',
+'creative',
+'creativity',
+'creator',
+'creature',
+'credibility',
+'credible',
+'credit',
+'creditor',
+'credulous',
+'creed',
+'creek',
+'creep',
+'cremate',
+'crematorium',
+'creole',
+'crescent',
+'crest',
+'crew',
+'crib',
+'crime',
+'criminal',
+'crimson',
+'cringe',
+'crinkle',
+'cripple',
+'crisis',
+'crisp',
+'criterion',
+'critic',
+'critical',
+'criticise',
+'criticism',
+'criticize',
+'critique',
+'croak',
+'crockery',
+'crocodile',
+'crook',
+'crooked',
+'crop',
+'cross',
+'crossbow',
+'crosscheck',
+'cross-examine',
+'crossing',
+'crossword',
+'crotch',
+'crouch',
+'crow',
+'crowd',
+'crown',
+'crucial',
+'crucify',
+'crude',
+'cruel',
+'cruelty',
+'cruise',
+'cruiser',
+'crumb',
+'crumble',
+'crunch',
+'crusade',
+'crush',
+'crust',
+'crutch',
+'crux',
+'cry',
+'crypt',
+'cryptic',
+'crystal',
+'cub',
+'cube',
+'cubic',
+'cuckoo',
+'cucumber',
+'cuddle',
+'cudgel',
+'cue',
+'cuff',
+'cuisine',
+'culminate',
+'culprit',
+'cult',
+'cultivate',
+'cultivated',
+'cultural',
+'culture',
+'cumbersome',
+'cumulative',
+'cunning',
+'cup',
+'cupboard',
+'curable',
+'curator',
+'curb',
+'curd',
+'cure',
+'curfew',
+'curiosity',
+'curious',
+'curl',
+'currency',
+'current',
+'currently',
+'curriculum',
+'curry',
+'curse',
+'cursed',
+'cursive',
+'cursor',
+'cursory',
+'curt',
+'curtail',
+'curtain',
+'curve',
+'cushion',
+'custard',
+'custody',
+'custom',
+'customary',
+'customer',
+'cut',
+'cute',
+'cutlery',
+'cyberspace',
+'cycle',
+'cyclical',
+'cyclist',
+'cyclone',
+'cylinder',
+'cynic',
+'cynical',
+'cynicism',
+'dab',
+'Dacron',
+'dad',
+'daddy',
+'daffodil',
+'daft',
+'dagger',
+'daily',
+'dainty',
+'dairy',
+'dais',
+'daisy',
+'dam',
+'damage',
+'damn',
+'damned',
+'dampen',
+'damper',
+'damsel',
+'dance',
+'dancer',
+'dandelion',
+'danger',
+'dangerous',
+'dangle',
+'Danish',
+'dank',
+'dapper',
+'dappled',
+'dare',
+'daredevil',
+'daring',
+'dark',
+'darken',
+'darkness',
+'darling',
+'darn',
+'dash',
+'data',
+'database',
+'date',
+'dated',
+'daughter',
+'daughter-in-law',
+'daunt',
+'dauntless',
+'dawdle',
+'dawn',
+'day',
+'daybreak',
+'daydream',
+'daylight',
+'daytime',
+'daze',
+'dazzle',
+'deacon',
+'dead',
+'deaden',
+'deadline',
+'deadlock',
+'deadly',
+'deadweight',
+'deaf',
+'deafen',
+'dealer',
+'dealing',
+'dean',
+'dear',
+'death',
+'deathly',
+'debacle',
+'debase',
+'debate',
+'debilitate',
+'debit',
+'debris',
+'debt',
+'debtor',
+'debug',
+'debut',
+'decade',
+'decadent',
+'decay',
+'decease',
+'deceased',
+'deceit',
+'deceitful',
+'deceive',
+'decelerate',
+'December',
+'decency',
+'decent',
+'deception',
+'deceptive',
+'decibel',
+'decide',
+'decidedly',
+'decimal',
+'decimate',
+'decipher',
+'decision',
+'decisive',
+'deck',
+'deckhand',
+'declaim',
+'declaration',
+'declare',
+'decline',
+'decode',
+'decompose',
+'decor',
+'decorate',
+'decoration',
+'decorative',
+'decorous',
+'decorum',
+'decoy',
+'decrease',
+'decree',
+'decry',
+'dedicate',
+'deduce',
+'deduct',
+'deductible',
+'deduction',
+'deed',
+'deem',
+'deep',
+'deepen',
+'deeply',
+'deer',
+'deface',
+'defame',
+'default',
+'defeat',
+'defence',
+'defend',
+'defendant',
+'defender',
+'defense',
+'defensible',
+'defensive',
+'defer',
+'defiance',
+'defiant',
+'deficiency',
+'deficient',
+'deficit',
+'define',
+'definite',
+'definitely',
+'definition',
+'definitive',
+'deflate',
+'deflect',
+'defoliate',
+'deform',
+'defraud',
+'defrost',
+'deft',
+'defunct',
+'defuse',
+'defy',
+'degenerate',
+'degrade',
+'degree',
+'dehydrate',
+'deify',
+'deity',
+'delay',
+'delegate',
+'delegation',
+'delete',
+'deli',
+'deliberate',
+'deliberately',
+'deliberation',
+'delicacy',
+'delicate',
+'delicatessen',
+'delicious',
+'delight',
+'delightful',
+'delimit',
+'delineate',
+'delinquency',
+'delinquent',
+'delirious',
+'deliver',
+'deliverance',
+'deliverer',
+'delivery',
+'delta',
+'delude',
+'deluge',
+'delusion',
+'deluxe',
+'delve',
+'demagog',
+'demagogue',
+'demagoguery',
+'demagogy',
+'demand',
+'demanding',
+'demean',
+'demeanor',
+'demeanour',
+'demented',
+'demerit',
+'demo',
+'demobilize',
+'democracy',
+'democrat',
+'democratic',
+'demography',
+'demolish',
+'demon',
+'demonic',
+'demonstrable',
+'demonstrate',
+'demonstration',
+'demonstrative',
+'demoralize',
+'demote',
+'den',
+'denial',
+'denim',
+'denizen',
+'denominate',
+'denomination',
+'denominator',
+'denote',
+'denounce',
+'dense',
+'densely',
+'density',
+'dent',
+'dental',
+'dentist',
+'dentistry',
+'deny',
+'deodorant',
+'depart',
+'department',
+'departure',
+'depend',
+'dependant',
+'dependence',
+'dependent',
+'depict',
+'deplete',
+'deplore',
+'deploy',
+'depopulate',
+'deport',
+'depose',
+'deposit',
+'deposition',
+'depository',
+'depot',
+'deprecate',
+'depreciate',
+'depreciation',
+'depress',
+'depressed',
+'depressing',
+'depression',
+'deprive',
+'depth',
+'deputation',
+'deputy',
+'derail',
+'Derby',
+'derelict',
+'deride',
+'derision',
+'derivation',
+'derivative',
+'derive',
+'derogatory',
+'derrick',
+'descend',
+'descendant',
+'descent',
+'describe',
+'description',
+'descriptive',
+'desegregate',
+'deserve',
+'desiccate',
+'design',
+'designate',
+'designation',
+'designer',
+'desirable',
+'desire',
+'desirous',
+'desk',
+'desktop',
+'desolate',
+'desolation',
+'despair',
+'despatch',
+'desperate',
+'desperately',
+'desperation',
+'despicable',
+'despise',
+'despite',
+'despoil',
+'despot',
+'despotism',
+'dessert',
+'destination',
+'destine',
+'destined',
+'destiny',
+'destitute',
+'destroy',
+'destroyer',
+'destruction',
+'destructive',
+'detach',
+'detachable',
+'detached',
+'detachment',
+'detail',
+'detain',
+'detect',
+'detective',
+'detector',
+'detention',
+'deter',
+'detergent',
+'deteriorate',
+'determination',
+'determine',
+'determiner',
+'deterrent',
+'detest',
+'detonate',
+'detour',
+'detract',
+'detriment',
+'detrimental',
+'devastate',
+'develop',
+'development',
+'deviant',
+'deviate',
+'deviation',
+'device',
+'devil',
+'devilish',
+'devious',
+'devise',
+'devoid',
+'devolve',
+'devote',
+'devotion',
+'devour',
+'devout',
+'dew',
+'dewdrop',
+'dexterity',
+'diabetes',
+'diagnose',
+'diagnosis',
+'diagnostic',
+'diagonal',
+'diagram',
+'dial',
+'dialect',
+'dialectic',
+'dialog',
+'dialogue',
+'diameter',
+'diametrically',
+'diamond',
+'diarrhea',
+'diary',
+'dice',
+'dichotomy',
+'dictate',
+'dictation',
+'dictator',
+'dictatorship',
+'diction',
+'dictionary',
+'dictum',
+'didactic',
+'diddle',
+'die',
+'diehard',
+'diesel',
+'diet',
+'dietary',
+'dietitian',
+'differ',
+'difference',
+'different',
+'differentiate',
+'difficult',
+'difficulty',
+'diffidence',
+'diffident',
+'diffuse',
+'dig',
+'digest',
+'digestible',
+'digestion',
+'digestive',
+'digit',
+'digital',
+'dignified',
+'dignify',
+'dignitary',
+'dignity',
+'digress',
+'dike',
+'dilapidated',
+'dilate',
+'dilemma',
+'dilettante',
+'diligence',
+'diligent',
+'dilute',
+'dim',
+'dime',
+'dimension',
+'dimensional',
+'diminish',
+'dimple',
+'dine',
+'diner',
+'dinghy',
+'dingy',
+'dining',
+'dinner',
+'dinosaur',
+'diocese',
+'diode',
+'dioxide',
+'dip',
+'diphthong',
+'diploma',
+'diplomacy',
+'diplomat',
+'diplomatic',
+'dipper',
+'dire',
+'direction',
+'directive',
+'directly',
+'director',
+'directory',
+'dirt',
+'dirty',
+'disability',
+'disable',
+'disadvantage',
+'disadvantaged',
+'disadvantageous',
+'disagree',
+'disagreeable',
+'disagreement',
+'disappear',
+'disappoint',
+'disappointing',
+'disappointment',
+'disapproval',
+'disapprove',
+'disarm',
+'disarmament',
+'disarray',
+'disassociate',
+'disaster',
+'disastrous',
+'disavow',
+'disband',
+'disbelief',
+'disbelieve',
+'disc',
+'discard',
+'discern',
+'discernible',
+'discerning',
+'discharge',
+'disciple',
+'disciplinary',
+'discipline',
+'disclaim',
+'disclose',
+'disclosure',
+'disco',
+'disconcert',
+'discontent',
+'discord',
+'discount',
+'discourage',
+'discourse',
+'discover',
+'discovery',
+'discredit',
+'discreet',
+'discrepancy',
+'discrete',
+'discretion',
+'discriminate',
+'discrimination',
+'discus',
+'discuss',
+'discussion',
+'disdain',
+'disdainful',
+'disease',
+'disembark',
+'disenchant',
+'disentangle',
+'disfavor',
+'disfavour',
+'disgrace',
+'disgraceful',
+'disguise',
+'disgust',
+'disgusting',
+'dish',
+'dishonest',
+'dishonor',
+'dishonorable',
+'dishonour',
+'dishonourable',
+'dishwasher',
+'disillusion',
+'disinfect',
+'disinfectant',
+'disintegrate',
+'disintegration',
+'disinterested',
+'disjointed',
+'disjunctive',
+'disk',
+'dislike',
+'dislocate',
+'dislodge',
+'disloyal',
+'dismal',
+'dismantle',
+'dismay',
+'dismiss',
+'dismissal',
+'disobedience',
+'disobey',
+'disorder',
+'disparate',
+'disparity',
+'dispatch',
+'dispel',
+'dispensable',
+'dispensary',
+'dispensation',
+'dispense',
+'disperse',
+'dispirited',
+'displace',
+'displacement',
+'display',
+'displease',
+'displeasure',
+'disposable',
+'disposal',
+'dispose',
+'disposed',
+'disposition',
+'disprove',
+'dispute',
+'disqualify',
+'disregard',
+'disrepute',
+'disrespect',
+'disrupt',
+'dissatisfaction',
+'dissatisfy',
+'dissect',
+'disseminate',
+'dissension',
+'dissent',
+'dissertation',
+'disservice',
+'dissident',
+'dissimilar',
+'dissipated',
+'dissociate',
+'dissolute',
+'dissolution',
+'dissolve',
+'dissonance',
+'dissuade',
+'distance',
+'distant',
+'distaste',
+'distil',
+'distillation',
+'distinct',
+'distinction',
+'distinctive',
+'distinguish',
+'distinguishable',
+'distinguished',
+'distort',
+'distract',
+'distraction',
+'distraught',
+'distress',
+'distribute',
+'distribution',
+'district',
+'distrust',
+'disturb',
+'disturbance',
+'disunite',
+'disuse',
+'ditch',
+'dither',
+'ditto',
+'ditty',
+'dive',
+'diver',
+'diverge',
+'divergent',
+'diverse',
+'diversify',
+'diversion',
+'diversity',
+'divert',
+'divide',
+'dividend',
+'divine',
+'divinity',
+'divisible',
+'division',
+'divisive',
+'divorce',
+'divulge',
+'dizzy',
+'do',
+'docile',
+'dock',
+'dockyard',
+'doctor',
+'doctorate',
+'doctrine',
+'document',
+'documentary',
+'dodge',
+'dog',
+'dog-eared',
+'dogged',
+'dogma',
+'dogmatic',
+'dog-tired',
+'do-it-yourself',
+'doldrums',
+'dole',
+'doleful',
+'doll',
+'dollar',
+'dollop',
+'dolphin',
+'domain',
+'dome',
+'domestic',
+'domesticate',
+'domesticity',
+'domicile',
+'dominant',
+'dominate',
+'domineer',
+'domineering',
+'dominion',
+'domino',
+'don',
+'donate',
+'donation',
+'donator',
+'done',
+'donkey',
+'donor',
+'donut',
+'doodle',
+'doom',
+'doomed',
+'doomsday',
+'door',
+'doorstep',
+'doorway',
+'dope',
+'dormant',
+'dormitory',
+'dosage',
+'dose',
+'dossier',
+'dot',
+'dote',
+'doting',
+'double',
+'doubt',
+'doubtful',
+'doubtless',
+'dough',
+'dove',
+'dowager',
+'down',
+'down-and-out',
+'downcast',
+'downfall',
+'downgrade',
+'downhearted',
+'downhill',
+'downpour',
+'downright',
+'downstairs',
+'downstream',
+'downtime',
+'downtown',
+'downward',
+'dowry',
+'doze',
+'dozen',
+'drab',
+'draft',
+'draftsman',
+'drafty',
+'drag',
+'dragon',
+'dragonfly',
+'drain',
+'drainage',
+'drama',
+'dramatic',
+'dramatist',
+'dramatize',
+'drape',
+'drapery',
+'drastic',
+'draught',
+'draughtsman',
+'draughty',
+'draw',
+'drawback',
+'drawer',
+'drawing',
+'drawl',
+'dread',
+'dreadful',
+'dream',
+'dreary',
+'dredge',
+'dregs',
+'drench',
+'dress',
+'dressing',
+'dressy',
+'dribble',
+'drift',
+'drill',
+'drink',
+'drip',
+'dripping',
+'drive',
+'drive-in',
+'driver',
+'drizzle',
+'drone',
+'drool',
+'droop',
+'drop',
+'drought',
+'drown',
+'drowse',
+'drowsy',
+'drug',
+'druggist',
+'drugstore',
+'drum',
+'drummer',
+'drumstick',
+'drunk',
+'drunkard',
+'drunken',
+'dry',
+'dry-clean',
+'dryer',
+'dryly',
+'dual',
+'dub',
+'dubious',
+'duchess',
+'duchy',
+'duckling',
+'duct',
+'due',
+'duel',
+'duet',
+'duff',
+'duke',
+'dull',
+'duly',
+'dumb',
+'dumbfound',
+'dumfound',
+'dummy',
+'dump',
+'dumpling',
+'dumpy',
+'dunce',
+'dune',
+'dung',
+'dungeon',
+'duo',
+'dupe',
+'duplicate',
+'duplicity',
+'durable',
+'duration',
+'during',
+'dusk',
+'dusky',
+'dust',
+'dustbin',
+'duster',
+'dustman',
+'dustpan',
+'dusty',
+'Dutch',
+'dutiful',
+'duty',
+'duty-free',
+'dwarf',
+'dwell',
+'dweller',
+'dwelling',
+'dwindle',
+'dye',
+'dyke',
+'dynamic',
+'dynamics',
+'dynamism',
+'dynamite',
+'dynamo',
+'dynasty',
+'each',
+'eager',
+'eagerness',
+'eagle',
+'ear',
+'earache',
+'eardrum',
+'earl',
+'early',
+'earmark',
+'earn',
+'earnest',
+'earnings',
+'earphone',
+'earplug',
+'earring',
+'earth',
+'earthen',
+'earthenware',
+'earthly',
+'earthquake',
+'earthwork',
+'earthy',
+'ease',
+'easel',
+'easily',
+'east',
+'Easter',
+'eastern',
+'eastward',
+'easy',
+'easygoing',
+'eat',
+'eaves',
+'eavesdrop',
+'ebb',
+'ebony',
+'eccentric',
+'eccentricity',
+'echo',
+'eclectic',
+'eclipse',
+'ecological',
+'ecologist',
+'ecology',
+'economic',
+'economical',
+'economics',
+'economist',
+'economize',
+'economy',
+'ecosystem',
+'ecstasy',
+'ecstatic',
+'eczema',
+'eddy',
+'edge',
+'edgy',
+'edible',
+'edict',
+'edifice',
+'edit',
+'edition',
+'editor',
+'editorial',
+'educate',
+'education',
+'educational',
+'educationist',
+'educator',
+'eerie',
+'efface',
+'effect',
+'effective',
+'effeminate',
+'efficacy',
+'efficiency',
+'efficient',
+'effluent',
+'effort',
+'effusive',
+'egalitarian',
+'egg',
+'eggplant',
+'ego',
+'egocentric',
+'egoism',
+'egoist',
+'egotism',
+'eh',
+'eight',
+'eighteen',
+'eighteenth',
+'eighth',
+'eightieth',
+'eighty',
+'either',
+'ejaculate',
+'eject',
+'elaborate',
+'elapse',
+'elastic',
+'elasticity',
+'elated',
+'elbow',
+'elder',
+'elderly',
+'eldest',
+'elect',
+'election',
+'elector',
+'electorate',
+'electric',
+'electrical',
+'electrician',
+'electricity',
+'electrify',
+'electrocute',
+'electrode',
+'electromagnet',
+'electron',
+'electronic',
+'electronics',
+'electroplate',
+'electroscope',
+'electrostatic',
+'elegance',
+'elegant',
+'element',
+'elemental',
+'elementary',
+'elephant',
+'elevate',
+'elevation',
+'elevator',
+'eleven',
+'eleventh',
+'elf',
+'elicit',
+'eligible',
+'eliminate',
+'elimination',
+'elite',
+'ellipse',
+'elliptical',
+'elm',
+'elope',
+'eloquence',
+'eloquent',
+'else',
+'elsewhere',
+'elucidate',
+'elude',
+'elusive',
+'emaciated',
+'e-mail',
+'emanate',
+'emancipate',
+'embankment',
+'embargo',
+'embark',
+'embarrass',
+'embarrassing',
+'embarrassment',
+'embassy',
+'embattled',
+'embed',
+'embellish',
+'embezzle',
+'emblem',
+'embody',
+'emboss',
+'embrace',
+'embroider',
+'embroidery',
+'embroil',
+'embryo',
+'emend',
+'emerald',
+'emerge',
+'emergence',
+'emergency',
+'emergent',
+'emigrant',
+'emigrate',
+'emigration',
+'eminence',
+'eminent',
+'emir',
+'emissary',
+'emission',
+'emit',
+'emotion',
+'emotional',
+'emotive',
+'empathy',
+'emperor',
+'emphasis',
+'emphasize',
+'emphatic',
+'empire',
+'empirical',
+'empiricism',
+'employ',
+'employe',
+'employee',
+'employer',
+'employment',
+'empower',
+'empress',
+'empty',
+'emulate',
+'enable',
+'enact',
+'enamel',
+'encampment',
+'encase',
+'enchant',
+'encircle',
+'enclave',
+'enclose',
+'enclosure',
+'encompass',
+'encore',
+'encounter',
+'encourage',
+'encouragement',
+'encroach',
+'encumber',
+'encyclopaedia',
+'encyclopedia',
+'end',
+'endanger',
+'endeavor',
+'endeavour',
+'endemic',
+'ending',
+'endless',
+'endorse',
+'endow',
+'endurable',
+'endurance',
+'endure',
+'endways',
+'enemy',
+'energetic',
+'energize',
+'energy',
+'enfeeble',
+'enforce',
+'engage',
+'engaged',
+'engagement',
+'engender',
+'engine',
+'engineer',
+'engineering',
+'English',
+'Englishman',
+'Englishwoman',
+'engrave',
+'engross',
+'engulf',
+'enhance',
+'enigma',
+'enigmatic',
+'enjoy',
+'enjoyable',
+'enjoyment',
+'enlarge',
+'enlargement',
+'enlighten',
+'enlist',
+'enliven',
+'enmity',
+'ennoble',
+'enormity',
+'enormous',
+'enough',
+'enquire',
+'enquiry',
+'enrage',
+'enrich',
+'enrol',
+'ensconce',
+'ensemble',
+'enshrine',
+'ensign',
+'enslave',
+'ensue',
+'ensure',
+'entail',
+'entangle',
+'enter',
+'enterprise',
+'entertain',
+'entertainer',
+'entertaining',
+'entertainment',
+'enthral',
+'enthrall',
+'enthrone',
+'enthusiasm',
+'enthusiast',
+'enthusiastic',
+'entice',
+'entire',
+'entirety',
+'entitle',
+'entity',
+'entourage',
+'entrance',
+'entrant',
+'entreat',
+'entree',
+'entrepot',
+'entrepreneur',
+'entrust',
+'entry',
+'entwine',
+'enumerate',
+'envelop',
+'envelope',
+'enviable',
+'envious',
+'environment',
+'environmental',
+'environmentalism',
+'environmentalist',
+'envisage',
+'envision',
+'envoy',
+'envy',
+'enzyme',
+'eon',
+'ephemeral',
+'epic',
+'epidemic',
+'epigram',
+'epilogue',
+'episode',
+'epitaph',
+'epitome',
+'epitomize',
+'epoch',
+'epoch-making',
+'equable',
+'equal',
+'equality',
+'equally',
+'equate',
+'equation',
+'equator',
+'equiangular',
+'equidistant',
+'equilateral',
+'equilibrium',
+'equinox',
+'equip',
+'equipment',
+'equitable',
+'equity',
+'equivalence',
+'equivalent',
+'equivocal',
+'era',
+'eradicate',
+'erase',
+'eraser',
+'erasure',
+'erect',
+'erection',
+'erode',
+'erosion',
+'erotic',
+'err',
+'errand',
+'errant',
+'erratic',
+'erroneous',
+'error',
+'erudite',
+'erupt',
+'eruption',
+'escalate',
+'escalator',
+'escape',
+'escapee',
+'eschew',
+'escort',
+'Eskimo',
+'esoteric',
+'especial',
+'especially',
+'Esperanto',
+'espionage',
+'essay',
+'essayist',
+'essence',
+'essential',
+'establish',
+'establishment',
+'estancia',
+'estate',
+'esteem',
+'estimable',
+'estimate',
+'estimation',
+'estrange',
+'estuary',
+'et',
+'etc',
+'etcetera',
+'etceteras',
+'etch',
+'eternal',
+'ether',
+'ethereal',
+'ethic',
+'ethical',
+'ethics',
+'ethnic',
+'ethos',
+'etiquette',
+'eulogy',
+'euphemism',
+'euphemistic',
+'euphoria',
+'Europe',
+'European',
+'euthanasia',
+'evacuate',
+'evade',
+'evaluate',
+'evaluation',
+'evanescent',
+'evangelical',
+'evangelist',
+'evaporate',
+'evasive',
+'eve',
+'even',
+'event',
+'eventful',
+'eventual',
+'eventuality',
+'eventually',
+'ever',
+'evergreen',
+'everlasting',
+'evermore',
+'every',
+'everybody',
+'everyday',
+'everyone',
+'everything',
+'everywhere',
+'evict',
+'eviction',
+'evidence',
+'evident',
+'evidently',
+'evil',
+'evince',
+'evocative',
+'evoke',
+'evolution',
+'evolutionary',
+'evolve',
+'ewe',
+'exacerbate',
+'exact',
+'exactly',
+'exaggerate',
+'exalt',
+'exaltation',
+'exalted',
+'exam',
+'examination',
+'examine',
+'example',
+'exasperate',
+'excavate',
+'exceed',
+'exceedingly',
+'excel',
+'excellence',
+'excellency',
+'excellent',
+'except',
+'exception',
+'exceptional',
+'excerpt',
+'excess',
+'excessive',
+'exchange',
+'excise',
+'excitable',
+'excite',
+'excited',
+'excitement',
+'exciting',
+'exclaim',
+'exclamation',
+'exclude',
+'exclusion',
+'exclusive',
+'exclusively',
+'excursion',
+'excusable',
+'excuse',
+'execrable',
+'execute',
+'execution',
+'executioner',
+'executive',
+'executor',
+'exemplary',
+'exemplify',
+'exempt',
+'exercise',
+'exert',
+'exhale',
+'exhaust',
+'exhaustive',
+'exhibit',
+'exhibition',
+'exhibitor',
+'exhilarate',
+'exhilarating',
+'exhort',
+'exile',
+'exist',
+'existence',
+'existent',
+'existential',
+'existentialist',
+'exit',
+'exodus',
+'exonerate',
+'exorcise',
+'exorcize',
+'exotic',
+'expand',
+'expanse',
+'expansion',
+'expansive',
+'expect',
+'expectancy',
+'expectant',
+'expectation',
+'expedient',
+'expedite',
+'expedition',
+'expel',
+'expend',
+'expenditure',
+'expense',
+'expensive',
+'experience',
+'experienced',
+'experiment',
+'expert',
+'expertise',
+'expiration',
+'expire',
+'expiry',
+'explain',
+'explanation',
+'explanatory',
+'explicable',
+'explode',
+'exploit',
+'exploration',
+'exploratory',
+'explore',
+'explorer',
+'explosion',
+'explosive',
+'exponent',
+'export',
+'exporter',
+'expose',
+'exposition',
+'exposure',
+'expound',
+'expression',
+'expressive',
+'expressly',
+'expressway',
+'expropriate',
+'expulsion',
+'expunge',
+'expurgate',
+'exquisite',
+'extant',
+'extend',
+'extension',
+'extensive',
+'extent',
+'exterior',
+'exterminate',
+'external',
+'extinct',
+'extinction',
+'extinguish',
+'extinguisher',
+'extol',
+'extort',
+'extortionate',
+'extra',
+'extract',
+'extraction',
+'extractor',
+'extracurricular',
+'extradite',
+'extraneous',
+'extraordinary',
+'extrapolate',
+'extraterrestrial',
+'extravagance',
+'extravagant',
+'extravert',
+'extreme',
+'extremely',
+'extremism',
+'extremist',
+'extremity',
+'extricate',
+'extrovert',
+'exuberant',
+'exude',
+'exult',
+'eye',
+'eyeball',
+'eyebrow',
+'eyebrow',
+'eye-catching',
+'eyeglass',
+'eyelash',
+'eyeless',
+'eyelid',
+'eye-opener',
+'eyesight',
+'eyesore',
+'eyewash',
+'eyewitness',
+'fable',
+'fabric',
+'fabricate',
+'fabulous',
+'facade',
+'face',
+'facet',
+'facial',
+'facile',
+'facilitate',
+'facility',
+'facing',
+'facsimile',
+'fact',
+'faction',
+'factitious',
+'factor',
+'factory',
+'factual',
+'faculty',
+'fad',
+'fade',
+'fag',
+'Fahrenheit',
+'failing',
+'failure',
+'faint',
+'fainthearted',
+'fair',
+'fairground',
+'fairly',
+'fairness',
+'fairway',
+'fairy',
+'fairyland',
+'faith',
+'faithful',
+'faithfully',
+'fake',
+'falcon',
+'fall',
+'fallacious',
+'fallacy',
+'fallible',
+'falsehood',
+'falsetto',
+'falsify',
+'falsity',
+'falter',
+'fame',
+'famed',
+'familial',
+'familiar',
+'familiarize',
+'family',
+'famine',
+'famous',
+'fan',
+'fanatic',
+'fanciful',
+'fancy',
+'fantasize',
+'fantastic',
+'fantasy',
+'far',
+'faraway',
+'farce',
+'fare',
+'farewell',
+'far-fetched',
+'farm',
+'farmer',
+'farmhand',
+'farmhouse',
+'farming',
+'farmland',
+'farmyard',
+'far-off',
+'far-reaching',
+'farsighted',
+'farther',
+'fascinate',
+'fascinating',
+'fascination',
+'fascism',
+'Fascism',
+'Fascist',
+'fashion',
+'fashionable',
+'fasten',
+'fastening',
+'fastidious',
+'fat',
+'fatal',
+'fatalism',
+'fatality',
+'fate',
+'fated',
+'fateful',
+'father',
+'father-in-law',
+'fatherland',
+'fathom',
+'fatigue',
+'fatten',
+'fatuous',
+'faucet',
+'fault',
+'faulty',
+'fauna',
+'favor',
+'favorable',
+'favorite',
+'favoritism',
+'favour',
+'favourable',
+'favourite',
+'fawn',
+'fax',
+'faze',
+'fear',
+'fearful',
+'fearless',
+'feasible',
+'feast',
+'feat',
+'feather',
+'featherbrained',
+'feature',
+'February',
+'feckless',
+'fecund',
+'federal',
+'federalism',
+'federalist',
+'federate',
+'federation',
+'fee',
+'feeble',
+'feebleminded',
+'feed',
+'feedback',
+'feeder',
+'feel',
+'feeler',
+'feeling',
+'feign',
+'feint',
+'felicity',
+'fell',
+'fellow',
+'fellowship',
+'felony',
+'felt',
+'female',
+'feminine',
+'femininity',
+'feminism',
+'feminist',
+'fen',
+'fend',
+'fender',
+'ferment',
+'fermentation',
+'fern',
+'ferocious',
+'ferocity',
+'ferret',
+'ferry',
+'ferryboat',
+'fertile',
+'fertilize',
+'fertilizer',
+'fervent',
+'fervor',
+'fervour',
+'fester',
+'festival',
+'festive',
+'festivity',
+'festoon',
+'fetch',
+'fetching',
+'fete',
+'fetid',
+'fetish',
+'fetter',
+'fetus',
+'feud',
+'feudal',
+'feudalism',
+'fever',
+'feverish',
+'few',
+'fiance',
+'fiancee',
+'fiasco',
+'fiber',
+'fiberglass',
+'fibre',
+'fickle',
+'fiction',
+'fictitious',
+'fiddle',
+'fiddling',
+'fidelity',
+'fidget',
+'fie',
+'field',
+'fieldwork',
+'fiend',
+'fiendish',
+'fierce',
+'fiery',
+'fifteen',
+'fifteenth',
+'fifth',
+'fiftieth',
+'fifty',
+'fight',
+'fighter',
+'fighting',
+'figment',
+'figurative',
+'figure',
+'figurehead',
+'filament',
+'file',
+'filial',
+'fill',
+'fillet',
+'filling',
+'film',
+'filter',
+'filth',
+'filthy',
+'fin',
+'final',
+'finale',
+'finalist',
+'finally',
+'finance',
+'financial',
+'financier',
+'find',
+'finding',
+'fine',
+'finely',
+'finery',
+'finesse',
+'finger',
+'fingernail',
+'fingerprint',
+'fingertip',
+'finicky',
+'finish',
+'finished',
+'finite',
+'fir',
+'fire',
+'firearm',
+'firebrand',
+'firebrick',
+'firecracker',
+'firedamp',
+'fireman',
+'fireplace',
+'firepower',
+'fireproof',
+'fireside',
+'firewood',
+'firework',
+'first',
+'firstborn',
+'firsthand',
+'first-rate',
+'fiscal',
+'fish',
+'fisherman',
+'fishery',
+'fishing',
+'fishmonger',
+'fission',
+'fissure',
+'fist',
+'fitful',
+'fitness',
+'fitting',
+'five',
+'fix',
+'fixed',
+'fixer',
+'fixture',
+'fizz',
+'flabby',
+'flaccid',
+'flag',
+'flagpole',
+'flagrant',
+'flagship',
+'flagstaff',
+'flail',
+'flair',
+'flak',
+'flake',
+'flamboyant',
+'flame',
+'flammable',
+'flank',
+'flannel',
+'flap',
+'flare',
+'flash',
+'flashback',
+'flashlight',
+'flask',
+'flat',
+'flatten',
+'flatter',
+'flattery',
+'flaunt',
+'flautist',
+'flavor',
+'flavoring',
+'flavour',
+'flavouring',
+'flaw',
+'flawless',
+'flax',
+'flaxen',
+'flea',
+'fleck',
+'flee',
+'fleece',
+'fleet',
+'fleeting',
+'flesh',
+'flex',
+'flexibility',
+'flexible',
+'flexibly',
+'flexitime',
+'flick',
+'flicker',
+'flier',
+'flight',
+'flighty',
+'flimsy',
+'flinch',
+'fling',
+'flint',
+'flip',
+'flippant',
+'flirt',
+'flit',
+'float',
+'flock',
+'flog',
+'flood',
+'floodgate',
+'floodlight',
+'floor',
+'flop',
+'floppy',
+'floral',
+'florid',
+'florist',
+'flounder',
+'flour',
+'flourish',
+'flout',
+'flow',
+'flowchart',
+'flower',
+'flowerbed',
+'flowerpot',
+'flu',
+'fluctuate',
+'fluency',
+'fluent',
+'fluff',
+'fluid',
+'fluidity',
+'fluke',
+'fluorescent',
+'flurry',
+'flush',
+'flute',
+'flutist',
+'flutter',
+'flux',
+'fly',
+'flyer',
+'flyleaf',
+'flyover',
+'flypast',
+'flywheel',
+'foetus',
+'fogy',
+'foible',
+'foil',
+'foist',
+'fold',
+'folder',
+'foliage',
+'folk',
+'folklore',
+'follow',
+'follower',
+'following',
+'folly',
+'fond',
+'fondle',
+'font',
+'food',
+'foodstuff',
+'foolish',
+'foolproof',
+'foot',
+'football',
+'footballer',
+'footbridge',
+'foothill',
+'foothold',
+'footloose',
+'footman',
+'footnote',
+'footpath',
+'footprint',
+'footstep',
+'footwear',
+'footwork',
+'for',
+'forage',
+'foray',
+'forbear',
+'forbid',
+'forbidden',
+'forbidding',
+'force',
+'forceful',
+'forceps',
+'forcible',
+'ford',
+'fore',
+'forearm',
+'forebode',
+'foreboding',
+'forecast',
+'forecourt',
+'forefather',
+'forefinger',
+'forefront',
+'forego',
+'foregoing',
+'foreground',
+'forehead',
+'foreign',
+'foreigner',
+'foreknowledge',
+'foreland',
+'foreleg',
+'foreman',
+'foremost',
+'forename',
+'forensic',
+'forerunner',
+'foresee',
+'foreshadow',
+'foreshore',
+'foresight',
+'forest',
+'forestall',
+'forester',
+'forestry',
+'foretaste',
+'foretell',
+'forethought',
+'forever',
+'forewarn',
+'foreword',
+'forfeit',
+'forge',
+'forgery',
+'forget',
+'forgetful',
+'forgive',
+'fork',
+'forlorn',
+'form',
+'formal',
+'formality',
+'formalize',
+'format',
+'formation',
+'formative',
+'former',
+'formerly',
+'formidable',
+'formula',
+'formulate',
+'formulation',
+'fornicate',
+'forsake',
+'fort',
+'forte',
+'forth',
+'forthcoming',
+'forthright',
+'forthwith',
+'fortieth',
+'fortify',
+'fortitude',
+'fortnight',
+'fortress',
+'fortuitous',
+'fortunate',
+'fortunately',
+'fortune',
+'forty',
+'forum',
+'forward',
+'forwards',
+'fossil',
+'foster',
+'foul',
+'found',
+'foundation',
+'fount',
+'fountain',
+'four',
+'fourteen',
+'fourteenth',
+'fourth',
+'fowl',
+'foyer',
+'fraction',
+'fractional',
+'fractious',
+'fracture',
+'fragile',
+'fragment',
+'fragmentary',
+'fragrance',
+'fragrant',
+'frail',
+'frame',
+'framework',
+'franc',
+'franchise',
+'frank',
+'frankly',
+'frantic',
+'fraternal',
+'fraternity',
+'fraud',
+'fraudulent',
+'fraught',
+'fray',
+'freak',
+'freckle',
+'free',
+'freebie',
+'freedom',
+'freehand',
+'freelance',
+'freely',
+'freeway',
+'freewheel',
+'freeze',
+'freezer',
+'freezing',
+'freight',
+'freighter',
+'French',
+'Frenchman',
+'frenetic',
+'frenzied',
+'frenzy',
+'frequency',
+'frequent',
+'frequently',
+'fresco',
+'fresh',
+'freshman',
+'freshwater',
+'fret',
+'fretful',
+'friction',
+'Friday',
+'fridge',
+'friend',
+'friendly',
+'friendship',
+'fright',
+'frighten',
+'frightened',
+'frightening',
+'frightful',
+'frigid',
+'frill',
+'fringe',
+'frisk',
+'fritter',
+'frivolity',
+'frivolous',
+'frizzy',
+'fro',
+'frock',
+'frog',
+'frogman',
+'frolic',
+'from',
+'front',
+'frontage',
+'frontal',
+'frontier',
+'frost',
+'frostbite',
+'frosting',
+'frosty',
+'froth',
+'frown',
+'frozen',
+'frugal',
+'fruit',
+'fruiterer',
+'fruitful',
+'fruition',
+'fruitless',
+'frustrate',
+'frustration',
+'fry',
+'fuddle',
+'fudge',
+'fuel',
+'fugitive',
+'fulfill',
+'fulfillment',
+'full',
+'full-blown',
+'full-length',
+'full-time',
+'fully',
+'fumble',
+'fume',
+'function',
+'fund',
+'fundamental',
+'funeral',
+'funfair',
+'fungus',
+'funicular',
+'funk',
+'funky',
+'funnel',
+'funny',
+'fur',
+'furious',
+'furl',
+'furnace',
+'furnish',
+'furnishings',
+'furniture',
+'furrier',
+'furrow',
+'further',
+'furthermore',
+'furthest',
+'furtive',
+'fury',
+'fuse',
+'fusion',
+'fuss',
+'fussy',
+'futile',
+'futility',
+'future',
+'futuristic',
+'fuzz',
+'fuzzy',
+'gabble',
+'gable',
+'gadget',
+'gag',
+'gaiety',
+'gaily',
+'gain',
+'gala',
+'galaxy',
+'gale',
+'gallant',
+'gallery',
+'gallon',
+'gallop',
+'gallows',
+'galvanize',
+'gambit',
+'gamble',
+'gambler',
+'game',
+'gang',
+'gangster',
+'gaol',
+'gaoler',
+'gap',
+'gape',
+'garage',
+'garbage',
+'garden',
+'garland',
+'garlic',
+'garment',
+'garrison',
+'gas',
+'gaseous',
+'gash',
+'gasoline',
+'gasp',
+'gastric',
+'gastritis',
+'gate',
+'gateway',
+'gather',
+'gathering',
+'gauge',
+'gaunt',
+'gauze',
+'gay',
+'gaze',
+'gazette',
+'gear',
+'gearbox',
+'gem',
+'gender',
+'gene',
+'general',
+'generalise',
+'generalization',
+'generalize',
+'generally',
+'generate',
+'generation',
+'generative',
+'generator',
+'generic',
+'generosity',
+'generous',
+'genesis',
+'genetic',
+'genetics',
+'genial',
+'genius',
+'genocide',
+'genre',
+'genteel',
+'gentility',
+'gentle',
+'gentleman',
+'genuine',
+'geographic',
+'geography',
+'geologist',
+'geology',
+'geometric',
+'geometry',
+'geopolitics',
+'germ',
+'German',
+'germinate',
+'gerund',
+'gesticulate',
+'gesture',
+'get',
+'get-together',
+'ghastly',
+'ghetto',
+'ghost',
+'ghostly',
+'giant',
+'gibber',
+'gibberish',
+'gibbon',
+'giddy',
+'gift',
+'gifted',
+'gigantic',
+'giggle',
+'gild',
+'gill',
+'gimmick',
+'gin',
+'ginger',
+'gipsy',
+'giraffe',
+'girder',
+'girdle',
+'girl',
+'gist',
+'give',
+'given',
+'glacial',
+'glacier',
+'glad',
+'gladiator',
+'glamor',
+'glamorous',
+'glamour',
+'glamourous',
+'glance',
+'gland',
+'glare',
+'glaring',
+'glass',
+'glasshouse',
+'glaze',
+'gleam',
+'glean',
+'glee',
+'glide',
+'glider',
+'glimmer',
+'glimpse',
+'glint',
+'glisten',
+'glitter',
+'gloat',
+'global',
+'globe',
+'gloom',
+'gloomy',
+'glorify',
+'glorious',
+'glory',
+'gloss',
+'glossary',
+'glossy',
+'glove',
+'glow',
+'glue',
+'glum',
+'glutton',
+'gnarled',
+'gnaw',
+'go',
+'goal',
+'goalkeeper',
+'goat',
+'gobble',
+'god',
+'goddess',
+'godfather',
+'godmother',
+'goggle',
+'gold',
+'golden',
+'goldfish',
+'golf',
+'golfer',
+'gong',
+'gonorrhoea',
+'good',
+'goodbye',
+'good-hearted',
+'good-humored',
+'good-looking',
+'goodness',
+'goods',
+'goodwill',
+'goody',
+'goose',
+'gorge',
+'gorgeous',
+'gorilla',
+'gosh',
+'gospel',
+'gossip',
+'Gothic',
+'gourmet',
+'govern',
+'governess',
+'government',
+'governor',
+'gown',
+'grab',
+'grace',
+'graceful',
+'gracious',
+'grade',
+'gradual',
+'gradually',
+'graduate',
+'graduation',
+'graffiti',
+'graft',
+'grain',
+'gram',
+'grammar',
+'grammatical',
+'gramme',
+'gramophone',
+'grand',
+'grandchild',
+'granddaughter',
+'grandeur',
+'grandfather',
+'grandiose',
+'grandmother',
+'grandparent',
+'grandson',
+'grandstand',
+'granite',
+'granny',
+'grant',
+'granular',
+'granule',
+'grape',
+'grapevine',
+'graph',
+'graphic',
+'graphics',
+'grapple',
+'grasp',
+'grass',
+'grasshopper',
+'grassland',
+'grate',
+'grateful',
+'gratify',
+'gratitude',
+'gratuitous',
+'grave',
+'graveyard',
+'gravitate',
+'gravity',
+'gray',
+'graze',
+'grease',
+'great',
+'greatly',
+'greed',
+'greedy',
+'Greek',
+'green',
+'greenery',
+'greengrocer',
+'greenhouse',
+'greet',
+'greeting',
+'gregarious',
+'grenade',
+'grey',
+'greyhound',
+'grid',
+'grief',
+'grievance',
+'grieve',
+'grievous',
+'grill',
+'grim',
+'grimace',
+'grime',
+'grin',
+'grind',
+'grinder',
+'grip',
+'gripe',
+'grisly',
+'grit',
+'groan',
+'grocer',
+'grocery',
+'groom',
+'groove',
+'grope',
+'gross',
+'grotesque',
+'ground',
+'grounding',
+'groundwork',
+'group',
+'grove',
+'grovel',
+'grow',
+'growl',
+'grown-up',
+'growth',
+'grudge',
+'gruesome',
+'gruff',
+'grumble',
+'grumpy',
+'grunt',
+'guarantee',
+'guard',
+'guardian',
+'guerrilla',
+'guess',
+'guest',
+'guidance',
+'guide',
+'guillotine',
+'guilt',
+'guilty',
+'guise',
+'guitar',
+'gulf',
+'gull',
+'gullible',
+'gulp',
+'gum',
+'gun',
+'gunfire',
+'gunpowder',
+'gurgle',
+'guru',
+'gush',
+'gust',
+'gusto',
+'gut',
+'gutter',
+'guttural',
+'guy',
+'gym',
+'gymnasium',
+'gymnastic',
+'gymnastics',
+'gynaecology',
+'gynecology',
+'gypsy',
+'ha',
+'habit',
+'habitable',
+'habitat',
+'habitation',
+'habitual',
+'habitue',
+'hack',
+'hacker',
+'hackle',
+'hackneyed',
+'hacksaw',
+'hag',
+'haggard',
+'haggle',
+'hail',
+'hair',
+'haircut',
+'hairdo',
+'hairdresser',
+'hairpiece',
+'hairpin',
+'hairy',
+'hale',
+'half',
+'halfway',
+'hall',
+'hallmark',
+'hallo',
+'hallowed',
+'Halloween',
+'hallucinate',
+'hallucination',
+'halo',
+'halt',
+'halter',
+'halting',
+'halve',
+'ham',
+'hamburger',
+'hamlet',
+'hammer',
+'hammock',
+'hamper',
+'hamstring',
+'hand',
+'handbag',
+'handbook',
+'handcuff',
+'handful',
+'handgun',
+'handicap',
+'handicapped',
+'handicraft',
+'handily',
+'handiness',
+'handiwork',
+'handkerchief',
+'handle',
+'handlebar',
+'handout',
+'handpicked',
+'handshake',
+'handsome',
+'handsomely',
+'handstand',
+'handwriting',
+'handy',
+'handyman',
+'hang',
+'hangar',
+'hanger',
+'hangman',
+'hangnail',
+'hangover',
+'hanker',
+'hankie',
+'hanky',
+'haphazard',
+'hapless',
+'happen',
+'happening',
+'happily',
+'happiness',
+'happy',
+'harangue',
+'harass',
+'harbinger',
+'harbor',
+'harbour',
+'hard',
+'hardback',
+'hardball',
+'hardboard',
+'hard-boiled',
+'hardcore',
+'harden',
+'hardheaded',
+'hardly',
+'hardness',
+'hardship',
+'hardtop',
+'hardware',
+'hardwood',
+'hardworking',
+'hardy',
+'hare',
+'harebrained',
+'harelip',
+'harm',
+'harmful',
+'harmless',
+'harmonica',
+'harmonium',
+'harmonize',
+'harmony',
+'harness',
+'harp',
+'harpoon',
+'harrow',
+'harrowing',
+'harry',
+'harsh',
+'harvest',
+'hash',
+'hassle',
+'haste',
+'hasten',
+'hasty',
+'hat',
+'hatch',
+'hatchback',
+'hatchery',
+'hatchet',
+'hate',
+'hateful',
+'hatred',
+'haughty',
+'haul',
+'haulage',
+'haunch',
+'haunt',
+'haunting',
+'have',
+'haven',
+'haversack',
+'havoc',
+'hawk',
+'hawker',
+'hay',
+'haystack',
+'haywire',
+'hazard',
+'haze',
+'hazel',
+'he',
+'head',
+'headache',
+'headdress',
+'headgear',
+'headhunter',
+'heading',
+'headlamp',
+'headland',
+'headlight',
+'headline',
+'headlong',
+'headman',
+'headmaster',
+'headmistress',
+'head-on',
+'headphones',
+'headquarters',
+'headrest',
+'headroom',
+'headset',
+'headship',
+'headstone',
+'headstrong',
+'headway',
+'heady',
+'heal',
+'health',
+'healthy',
+'heap',
+'hear',
+'hearing',
+'hearsay',
+'hearse',
+'heart',
+'heartache',
+'heartbeat',
+'heartbreak',
+'heartbreaking',
+'heartbroken',
+'hearten',
+'heartfelt',
+'hearth',
+'heartily',
+'heartland',
+'heartless',
+'heartrending',
+'heartstring',
+'heartwarming',
+'hearty',
+'heat',
+'heater',
+'heath',
+'heathen',
+'heating',
+'heatstroke',
+'heave',
+'heavy',
+'heavyweight',
+'Hebrew',
+'heck',
+'heckle',
+'hectare',
+'hectic',
+'hector',
+'hedge',
+'hedgehog',
+'hedgerow',
+'hedonism',
+'hedonist',
+'heed',
+'hefty',
+'hegemony',
+'heifer',
+'height',
+'heighten',
+'heinous',
+'heir',
+'heiress',
+'heirloom',
+'helicopter',
+'helium',
+'hell',
+'hello',
+'helm',
+'helmet',
+'help',
+'helper',
+'helpful',
+'helping',
+'helpless',
+'hem',
+'hemisphere',
+'hemline',
+'hemlock',
+'hemophilia',
+'hemorrhage',
+'hemorrhoid',
+'hemp',
+'hen',
+'hence',
+'henceforth',
+'henchman',
+'henpecked',
+'hepatitis',
+'her',
+'herald',
+'herb',
+'herbivore',
+'herbivorous',
+'herd',
+'herdsman',
+'here',
+'hereabout',
+'hereafter',
+'hereby',
+'hereditary',
+'heredity',
+'herein',
+'hereof',
+'heresy',
+'heretic',
+'heretical',
+'hereto',
+'heretofore',
+'herewith',
+'heritage',
+'hermetic',
+'hermitage',
+'hero',
+'heroic',
+'heroin',
+'heroine',
+'herring',
+'hers',
+'herself',
+'hesitate',
+'hesitation',
+'heterodox',
+'heterogeneous',
+'hew',
+'hexagon',
+'hey',
+'heyday',
+'hi',
+'hiatus',
+'hibernate',
+'hiccough',
+'hiccup',
+'hidden',
+'hide',
+'hide-and-seek',
+'hideaway',
+'hidebound',
+'hideous',
+'hiding',
+'hierarch',
+'hierarchy',
+'hi-fi',
+'high',
+'highbrow',
+'highchair',
+'highland',
+'highlight',
+'highly',
+'high-pitched',
+'high-ranking',
+'high-rise',
+'high-sounding',
+'high-spirited',
+'high-tech',
+'highway',
+'hijack',
+'hike',
+'hiker',
+'hilarious',
+'hill',
+'hillock',
+'hillside',
+'hilt',
+'him',
+'himself',
+'hind',
+'hinder',
+'Hindi',
+'hindmost',
+'hindrance',
+'hindsight',
+'Hindu',
+'Hinduism',
+'hinge',
+'hint',
+'hinterland',
+'hip',
+'hippie',
+'hippo',
+'hippopotamus',
+'hippy',
+'hire',
+'his',
+'Hispanic',
+'hiss',
+'histogram',
+'historian',
+'historic',
+'history',
+'histrionic',
+'hit',
+'hitch',
+'hitchhike',
+'hither',
+'hitherto',
+'hive',
+'hoard',
+'hoarding',
+'hoarse',
+'hoary',
+'hoax',
+'hobble',
+'hobby',
+'hobbyhorse',
+'hobgoblin',
+'hobnail',
+'hobnob',
+'hockey',
+'hod',
+'hoe',
+'hog',
+'hoggish',
+'hogshead',
+'hoist',
+'hold',
+'holdall',
+'holder',
+'holding',
+'holdup',
+'hole',
+'holiday',
+'holiness',
+'hollow',
+'holly',
+'holocaust',
+'hologram',
+'holster',
+'holy',
+'homage',
+'home',
+'homebound',
+'homecoming',
+'homeland',
+'homeless',
+'homely',
+'homeopath',
+'homesick',
+'homestead',
+'homeward',
+'homework',
+'homey',
+'homicide',
+'homily',
+'homoeopath',
+'homogeneity',
+'homogeneous',
+'homogenize',
+'homosexual',
+'honest',
+'honestly',
+'honesty',
+'honey',
+'honeycomb',
+'honeymoon',
+'honk',
+'honor',
+'honorable',
+'honorary',
+'honour',
+'honourable',
+'hood',
+'hoodwink',
+'hoof',
+'hook',
+'hooligan',
+'hoop',
+'hooray',
+'hoot',
+'Hoover',
+'hop',
+'hope',
+'hopeful',
+'hopeless',
+'hopper',
+'horde',
+'horizon',
+'horizontal',
+'hormone',
+'horn',
+'horned',
+'hornet',
+'horoscope',
+'horrendous',
+'horrible',
+'horrid',
+'horrific',
+'horrify',
+'horror',
+'horse',
+'horseback',
+'horsehair',
+'horseman',
+'horseplay',
+'horsepower',
+'horseshoe',
+'horsewhip',
+'horsey',
+'horsy',
+'horticultural',
+'horticulture',
+'hose',
+'hosiery',
+'hospice',
+'hospitable',
+'hospital',
+'hospitality',
+'hospitalize',
+'hostage',
+'hostel',
+'hostess',
+'hostile',
+'hostility',
+'hot',
+'hotbed',
+'hot-blooded',
+'hotchpotch',
+'hotel',
+'hotelier',
+'hotfoot',
+'hothead',
+'hothouse',
+'hotly',
+'hotpot',
+'hound',
+'hour',
+'hourly',
+'house',
+'houseboat',
+'housebound',
+'housebreaker',
+'housecoat',
+'housecraft',
+'household',
+'householder',
+'housekeeper',
+'housemaid',
+'housemaster',
+'housewarming',
+'housewifery',
+'housework',
+'housing',
+'hovel',
+'hover',
+'hovercraft',
+'how',
+'however',
+'howl',
+'howler',
+'hub',
+'hubbub',
+'huckster',
+'huddle',
+'hue',
+'huff',
+'hug',
+'huge',
+'hulk',
+'hulking',
+'hull',
+'human',
+'humane',
+'humanism',
+'humanist',
+'humanitarian',
+'humanity',
+'humankind',
+'humanly',
+'humble',
+'humbug',
+'humdrum',
+'humid',
+'humidify',
+'humidity',
+'humiliate',
+'humiliating',
+'humility',
+'humorous',
+'humour',
+'humourous',
+'hump',
+'humpback',
+'humus',
+'hunch',
+'hunchback',
+'hundred',
+'hundredth',
+'hundredweight',
+'hunger',
+'hungry',
+'hunk',
+'hunt',
+'hunter',
+'hurdle',
+'hurl',
+'hurrah',
+'hurray',
+'hurricane',
+'hurried',
+'hurry',
+'hurt',
+'hurtle',
+'husband',
+'husbandry',
+'hush',
+'husk',
+'husky',
+'hustle',
+'hut',
+'hutch',
+'hybrid',
+'hydrant',
+'hydraulic',
+'hydrocarbon',
+'hydrochloric',
+'hydroelectric',
+'hydroelectricity',
+'hydrogen',
+'hydroxide',
+'hygiene',
+'hymn',
+'hype',
+'hyperactive',
+'hypercritical',
+'hypermarket',
+'hypertension',
+'hyphen',
+'hyphenate',
+'hypnosis',
+'hypnotic',
+'hypnotism',
+'hypocrisy',
+'hypocrite',
+'hypocritical',
+'hypoderm',
+'hypotenuse',
+'hypothesis',
+'hysteric',
+'hysterical',
+'ice',
+'iceberg',
+'icebox',
+'icebreaker',
+'ice-cream',
+'icicle',
+'icing',
+'icon',
+'icy',
+'idea',
+'ideal',
+'idealism',
+'idealist',
+'idealize',
+'identical',
+'identification',
+'identify',
+'identity',
+'ideological',
+'ideology',
+'idiom',
+'idiomatic',
+'idiosyncrasy',
+'idiot',
+'idle',
+'idly',
+'idol',
+'idolatry',
+'idolize',
+'idyllic',
+'ignite',
+'ignition',
+'ignoble',
+'ignominy',
+'ignorance',
+'ignorant',
+'ignore',
+'illegal',
+'illegible',
+'illegitimate',
+'illicit',
+'illiteracy',
+'illiterate',
+'illness',
+'illogical',
+'illuminate',
+'illuminating',
+'illumination',
+'illusion',
+'illustrate',
+'illustration',
+'illustrative',
+'illustrator',
+'illustrious',
+'image',
+'imagery',
+'imaginable',
+'imaginary',
+'imagination',
+'imaginative',
+'imagine',
+'imbalance',
+'imbecile',
+'imbecility',
+'imbibe',
+'imbue',
+'imitate',
+'imitation',
+'immaculate',
+'immaterial',
+'immature',
+'immeasurable',
+'immediate',
+'immediately',
+'immense',
+'immerse',
+'immigrant',
+'immigrate',
+'immigration',
+'imminent',
+'immobile',
+'immoral',
+'immortal',
+'immune',
+'immunize',
+'impact',
+'impair',
+'impale',
+'impart',
+'impartial',
+'impasse',
+'impassioned',
+'impassive',
+'impatience',
+'impatient',
+'impeach',
+'impeccable',
+'impede',
+'impediment',
+'impel',
+'impending',
+'impenetrable',
+'imperative',
+'imperceptible',
+'imperfect',
+'imperial',
+'imperialism',
+'imperialist',
+'imperil',
+'imperious',
+'impersonal',
+'impersonate',
+'impertinent',
+'impetuous',
+'impetus',
+'impinge',
+'impious',
+'implacable',
+'implant',
+'implement',
+'implicate',
+'implication',
+'implicit',
+'implore',
+'imply',
+'impolite',
+'import',
+'importance',
+'important',
+'importer',
+'impose',
+'imposing',
+'imposition',
+'impossibility',
+'impossible',
+'impostor',
+'impotence',
+'impotent',
+'impound',
+'impoverish',
+'impractical',
+'impregnable',
+'impregnate',
+'impress',
+'impression',
+'impressionable',
+'impressive',
+'imprint',
+'imprison',
+'imprisonment',
+'improbable',
+'impromptu',
+'improper',
+'improve',
+'improvement',
+'improvise',
+'imprudent',
+'impulse',
+'impulsive',
+'impure',
+'inability',
+'inaccessible',
+'inaction',
+'inadequacy',
+'inadequate',
+'inadvertent',
+'inanimate',
+'inappropriate',
+'inarticulate',
+'inaugural',
+'inaugurate',
+'inborn',
+'inbuilt',
+'incantation',
+'incapable',
+'incapacitate',
+'incarnate',
+'incarnation',
+'incendiary',
+'incense',
+'incentive',
+'inception',
+'incessant',
+'incest',
+'inch',
+'incidence',
+'incident',
+'incidental',
+'incidentally',
+'incinerate',
+'incipient',
+'incise',
+'incisive',
+'incite',
+'inclination',
+'incline',
+'include',
+'inclusion',
+'inclusive',
+'incoherent',
+'income',
+'incoming',
+'incomparable',
+'incompatible',
+'incompetent',
+'incomplete',
+'incomprehensible',
+'inconceivable',
+'inconsistent',
+'incontrovertible',
+'inconvenience',
+'inconvenient',
+'incorporate',
+'increasingly',
+'incredible',
+'incredibly',
+'incredulous',
+'incriminate',
+'incubate',
+'incubation',
+'incubator',
+'inculcate',
+'incumbent',
+'incur',
+'incurable',
+'incursion',
+'indebted',
+'indecent',
+'indecision',
+'indeed',
+'indefensible',
+'indefinable',
+'indefinite',
+'indelible',
+'indemnify',
+'indemnity',
+'indent',
+'independence',
+'independent',
+'in-depth',
+'indeterminate',
+'index',
+'Indian',
+'indicate',
+'indication',
+'indicative',
+'indicator',
+'indict',
+'indifference',
+'indifferent',
+'indigenous',
+'indigestion',
+'indignant',
+'indignation',
+'indignity',
+'indigo',
+'indirect',
+'indiscreet',
+'indiscriminate',
+'indispensable',
+'indisposed',
+'indisputable',
+'indistinguishable',
+'individual',
+'individualism',
+'individuality',
+'indoctrinate',
+'indolent',
+'indoor',
+'indoors',
+'indubitable',
+'induce',
+'inducement',
+'induct',
+'induction',
+'indulge',
+'indulgence',
+'indulgent',
+'industrialise',
+'industrialist',
+'industrialize',
+'industrious',
+'industry',
+'ineffective',
+'ineffectual',
+'inefficient',
+'ineluctable',
+'inept',
+'inequality',
+'inert',
+'inertia',
+'inescapable',
+'inestimable',
+'inevitable',
+'inexact',
+'inexhaustible',
+'inexorable',
+'inexperienced',
+'inexplicable',
+'infallible',
+'infamous',
+'infancy',
+'infant',
+'infantile',
+'infantry',
+'infatuated',
+'infatuation',
+'infect',
+'infection',
+'infectious',
+'infer',
+'inference',
+'inferior',
+'infernal',
+'infertile',
+'infest',
+'infidelity',
+'infighting',
+'infiltrate',
+'infinite',
+'infinitive',
+'infinity',
+'infirm',
+'infirmary',
+'infirmity',
+'inflame',
+'inflamed',
+'inflammable',
+'inflammation',
+'inflammatory',
+'inflate',
+'inflation',
+'inflection',
+'inflexible',
+'inflict',
+'inflow',
+'influence',
+'influential',
+'influenza',
+'influx',
+'inform',
+'informal',
+'informant',
+'information',
+'informative',
+'informed',
+'informer',
+'infrared',
+'infrastructure',
+'infringe',
+'infuriate',
+'infuse',
+'ingenious',
+'ingenuity',
+'ingenuous',
+'inglorious',
+'ingrained',
+'ingratiate',
+'ingratiating',
+'ingredient',
+'inhabit',
+'inhabitable',
+'inhabitant',
+'inhale',
+'inherent',
+'inherit',
+'inheritance',
+'inhibit',
+'inhuman',
+'inhumane',
+'inhumanity',
+'inimitable',
+'initial',
+'initially',
+'initiate',
+'initiative',
+'inject',
+'injection',
+'injunction',
+'injure',
+'injurious',
+'injury',
+'injustice',
+'inkling',
+'inlaid',
+'inland',
+'inlet',
+'inmate',
+'inmost',
+'inn',
+'innate',
+'inner',
+'innkeeper',
+'innocence',
+'innocent',
+'innovate',
+'innovation',
+'innumerable',
+'inoculate',
+'inoffensive',
+'inordinate',
+'input',
+'inquest',
+'inquire',
+'inquiring',
+'inquiry',
+'inquisition',
+'inquisitive',
+'insane',
+'insanity',
+'insatiable',
+'inscribe',
+'inscription',
+'insect',
+'insecticide',
+'insensibility',
+'insensitive',
+'inseparable',
+'insert',
+'inset',
+'inside',
+'insider',
+'insidious',
+'insight',
+'insignificant',
+'insincere',
+'insinuate',
+'insipid',
+'insist',
+'insistent',
+'insofar',
+'insolent',
+'insoluble',
+'insomnia',
+'insomniac',
+'insomuch',
+'inspect',
+'inspection',
+'inspector',
+'inspiration',
+'inspire',
+'inspiring',
+'install',
+'installation',
+'installment',
+'instalment',
+'instance',
+'instant',
+'instantaneous',
+'instantly',
+'instead',
+'instep',
+'instigate',
+'instil',
+'instill',
+'instinct',
+'institute',
+'institution',
+'institutional',
+'instruct',
+'instruction',
+'instructive',
+'instructor',
+'instrument',
+'instrumental',
+'insufficient',
+'insular',
+'insulate',
+'insulation',
+'insulator',
+'insult',
+'insulting',
+'insuperable',
+'insurance',
+'insure',
+'insured',
+'insurer',
+'insurgent',
+'insurmountable',
+'insurrection',
+'intact',
+'intake',
+'intangible',
+'integer',
+'integral',
+'integrate',
+'integrity',
+'intellect',
+'intellectual',
+'intelligence',
+'intelligent',
+'intelligible',
+'intend',
+'intense',
+'intensify',
+'intensity',
+'intensive',
+'intent',
+'intention',
+'intentional',
+'interact',
+'interaction',
+'interactive',
+'intercept',
+'intercession',
+'interchange',
+'intercom',
+'intercontinental',
+'intercourse',
+'interdependent',
+'interest',
+'interested',
+'interesting',
+'interface',
+'interfere',
+'interference',
+'interim',
+'interior',
+'interject',
+'interjection',
+'interlock',
+'interlocutor',
+'interloper',
+'interlude',
+'intermediary',
+'intermediate',
+'interment',
+'interminable',
+'intermingle',
+'intermittent',
+'intern',
+'internal',
+'international',
+'interpersonal',
+'interplay',
+'interpose',
+'interpret',
+'interpretation',
+'interpreter',
+'interrogate',
+'interrupt',
+'intersect',
+'intersection',
+'intersperse',
+'interval',
+'intervene',
+'intervention',
+'interventionist',
+'interview',
+'interviewee',
+'interviewer',
+'intestinal',
+'intestine',
+'intimacy',
+'intimidate',
+'into',
+'intolerable',
+'intolerant',
+'intonation',
+'intoxicant',
+'intoxicate',
+'intractable',
+'intransigent',
+'intransitive',
+'intrepid',
+'intricacy',
+'intricate',
+'intrigue',
+'intriguing',
+'intrinsic',
+'introduce',
+'introduction',
+'introductory',
+'introspection',
+'introvert',
+'intrude',
+'intruder',
+'intrusive',
+'intuition',
+'intuitive',
+'inundate',
+'invade',
+'invader',
+'invalid',
+'invalidate',
+'invaluable',
+'invariable',
+'invasion',
+'invent',
+'invention',
+'inventive',
+'inventor',
+'inventory',
+'inverse',
+'invert',
+'invest',
+'investigate',
+'investigation',
+'investigator',
+'investment',
+'investor',
+'inveterate',
+'invidious',
+'invigilate',
+'invigilator',
+'invigorate',
+'invincible',
+'inviolable',
+'invisible',
+'invitation',
+'invite',
+'inviting',
+'invocation',
+'invoice',
+'invoke',
+'involuntary',
+'involve',
+'involved',
+'invulnerable',
+'inward',
+'iodide',
+'iodine',
+'ion',
+'irascible',
+'iris',
+'Irish',
+'irk',
+'irksome',
+'iron',
+'ironic',
+'ironical',
+'irony',
+'irradiate',
+'irrational',
+'irreconcilable',
+'irreducible',
+'irregular',
+'irrelevant',
+'irreparable',
+'irrepressible',
+'irresistible',
+'irrespective',
+'irresponsible',
+'irretrievable',
+'irreverent',
+'irreversible',
+'irrevocable',
+'irrigate',
+'irrigation',
+'irritable',
+'irritant',
+'irritate',
+'irritating',
+'irritation',
+'irruption',
+'is',
+'Islam',
+'island',
+'isle',
+'isolate',
+'isolation',
+'isotherm',
+'isothermal',
+'isotope',
+'Israel',
+'Israeli',
+'issuance',
+'issue',
+'it',
+'Italian',
+'italic',
+'italics',
+'itch',
+'item',
+'itemize',
+'iterate',
+'itinerant',
+'itinerary',
+'its',
+'itself',
+'ivory',
+'ivy',
+'jab',
+'jack',
+'jacket',
+'jack-in-the-box',
+'jack-of-all-trades',
+'jade',
+'jagged',
+'jail',
+'jailer',
+'jam',
+'janitor',
+'January',
+'Japanese',
+'jar',
+'jargon',
+'jasmine',
+'javelin',
+'jaw',
+'jaywalk',
+'jazz',
+'jealous',
+'jealousy',
+'jeans',
+'jeep',
+'jeer',
+'jelly',
+'jellyfish',
+'jeopardise',
+'jeopardize',
+'jerk',
+'jerky',
+'jest',
+'Jesus',
+'jet',
+'jetty',
+'Jew',
+'jewel',
+'jeweler',
+'jewellery',
+'jewelry',
+'jigsaw',
+'jingle',
+'job',
+'jocular',
+'jog',
+'join',
+'joint',
+'joke',
+'jolly',
+'jolt',
+'jostle',
+'jot',
+'journal',
+'journalist',
+'journey',
+'joy',
+'joyful',
+'joyous',
+'joystick',
+'jubilant',
+'judge',
+'judgement',
+'judicial',
+'judicious',
+'jug',
+'juggle',
+'juice',
+'juicy',
+'July',
+'jumble',
+'jumbo',
+'jump',
+'junction',
+'juncture',
+'June',
+'jungle',
+'junior',
+'junk',
+'Jupiter',
+'jurisdiction',
+'juror',
+'jury',
+'justice',
+'justify',
+'juvenile',
+'juxtapose',
+'kaleidoscope',
+'kangaroo',
+'karat',
+'karate',
+'keel',
+'keen',
+'keep',
+'keeper',
+'kennel',
+'kernel',
+'kerosene',
+'ketchup',
+'kettle',
+'key',
+'keyboard',
+'keyhole',
+'keynote',
+'khaki',
+'kick',
+'kickoff',
+'kid',
+'kidnap',
+'kidney',
+'kill',
+'killer',
+'kilo',
+'kilobyte',
+'kilogram',
+'kilogramme',
+'kilometer',
+'kilometre',
+'kin',
+'kind',
+'kindergarten',
+'kindhearted',
+'kindle',
+'kindly',
+'kindness',
+'kindred',
+'king',
+'kingdom',
+'kinship',
+'kiosk',
+'kiss',
+'kit',
+'kitchen',
+'kite',
+'kitten',
+'kiwi',
+'knack',
+'knapsack',
+'knead',
+'knee',
+'kneel',
+'knife',
+'knight',
+'knighthood',
+'knit',
+'knob',
+'knock',
+'knot',
+'know',
+'know-how',
+'knowledge',
+'knowledgeable',
+'known',
+'knuckle',
+'Koran',
+'Korean',
+'kowtow',
+'lab',
+'label',
+'labor',
+'laboratory',
+'laborer',
+'laborious',
+'labour',
+'labyrinth',
+'lace',
+'lack',
+'lacquer',
+'lad',
+'ladder',
+'ladle',
+'lady',
+'ladybird',
+'lag',
+'lager',
+'lagoon',
+'lake',
+'lamb',
+'lame',
+'lament',
+'lamp',
+'lance',
+'land',
+'landing',
+'landlady',
+'landlord',
+'landmark',
+'landowner',
+'landscape',
+'lane',
+'language',
+'languid',
+'languish',
+'lantern',
+'lapse',
+'laptop',
+'large',
+'largely',
+'larva',
+'laryngitis',
+'larynx',
+'laser',
+'lash',
+'lass',
+'lasting',
+'lastly',
+'latch',
+'late',
+'lately',
+'latent',
+'later',
+'lateral',
+'lathe',
+'Latin',
+'latitude',
+'latter',
+'laugh',
+'laughter',
+'launch',
+'launderette',
+'laundry',
+'laureate',
+'laurel',
+'lava',
+'lavatory',
+'lavish',
+'law',
+'lawful',
+'lawn',
+'lawsuit',
+'lawyer',
+'lax',
+'lay',
+'layer',
+'layman',
+'layoff',
+'layout',
+'lazy',
+'leader',
+'leadership',
+'leading',
+'leaf',
+'leaflet',
+'league',
+'leak',
+'lean',
+'leap',
+'learn',
+'learned',
+'learning',
+'lease',
+'least',
+'leather',
+'leave',
+'lecture',
+'lecturer',
+'ledge',
+'ledger',
+'lee',
+'leek',
+'leeway',
+'left',
+'left-handed',
+'leg',
+'legacy',
+'legal',
+'legalize',
+'legend',
+'legendary',
+'legibility',
+'legible',
+'legion',
+'legislate',
+'legislation',
+'legislative',
+'legislature',
+'legitimate',
+'legitimize',
+'leisure',
+'lemon',
+'lemonade',
+'lend',
+'length',
+'lengthen',
+'lenience',
+'leniency',
+'lenient',
+'lens',
+'lentil',
+'leopard',
+'leprosy',
+'Lesbian',
+'less',
+'lessen',
+'lesson',
+'lest',
+'let',
+'lethal',
+'letter',
+'lettuce',
+'leukaemia',
+'levee',
+'level',
+'lever',
+'leverage',
+'levity',
+'levy',
+'lexical',
+'lexicography',
+'lexis',
+'liable',
+'liaison',
+'liar',
+'liberal',
+'liberalism',
+'liberate',
+'liberation',
+'liberty',
+'librarian',
+'library',
+'licence',
+'lichen',
+'lick',
+'lid',
+'lie',
+'lieu',
+'lieutenant',
+'life',
+'lifetime',
+'lift',
+'ligament',
+'light',
+'lighten',
+'lighter',
+'lighthouse',
+'lightning',
+'like',
+'likelihood',
+'likely',
+'liken',
+'likeness',
+'likewise',
+'liking',
+'lilac',
+'lily',
+'limb',
+'lime',
+'limelight',
+'limestone',
+'limit',
+'limitation',
+'limited',
+'limousine',
+'limp',
+'line',
+'lineage',
+'linear',
+'linen',
+'liner',
+'linesman',
+'linger',
+'linguist',
+'linguistic',
+'linguistics',
+'link',
+'lion',
+'lioness',
+'lip',
+'lipstick',
+'liquid',
+'liquidate',
+'liquor',
+'list',
+'listen',
+'liter',
+'literacy',
+'literal',
+'literally',
+'literary',
+'literate',
+'literature',
+'litigation',
+'litre',
+'litter',
+'little',
+'live',
+'livelihood',
+'lively',
+'liven',
+'liver',
+'livestock',
+'livid',
+'living',
+'lizard',
+'load',
+'loan',
+'loathe',
+'lobby',
+'lobe',
+'lobster',
+'local',
+'locality',
+'locate',
+'location',
+'lock',
+'locker',
+'locomotive',
+'locust',
+'lodge',
+'lodging',
+'loft',
+'lofty',
+'log',
+'logic',
+'logical',
+'logistics',
+'logo',
+'loin',
+'loiter',
+'loll',
+'lonely',
+'lonesome',
+'long',
+'longevity',
+'longing',
+'longitude',
+'look',
+'lookout',
+'loom',
+'loop',
+'loophole',
+'loose',
+'loosen',
+'loot',
+'lop',
+'lopsided',
+'lord',
+'lorry',
+'lose',
+'loss',
+'lost',
+'lot',
+'lotion',
+'lottery',
+'lotus',
+'loud',
+'loudspeaker',
+'lounge',
+'louse',
+'lousy',
+'lovable',
+'love',
+'lovely',
+'lover',
+'loving',
+'low',
+'lowbrow',
+'lower',
+'loyal',
+'loyalty',
+'lubricant',
+'lubricate',
+'lucid',
+'luck',
+'lucky',
+'lucrative',
+'ludicrous',
+'luggage',
+'lukewarm',
+'lull',
+'luminous',
+'lump',
+'lunacy',
+'lunar',
+'lunatic',
+'lunch',
+'luncheon',
+'lung',
+'lunge',
+'lurch',
+'lure',
+'lurk',
+'luscious',
+'lush',
+'lust',
+'luster',
+'lute',
+'luxuriant',
+'luxurious',
+'luxury',
+'lychee',
+'lynch',
+'lyric',
+'lyrical',
+'macaroni',
+'machine',
+'machinery',
+'macho',
+'mackerel',
+'mackintosh',
+'macroeconomic',
+'mad',
+'madam',
+'madame',
+'madden',
+'Mafia',
+'magazine',
+'maggot',
+'magic',
+'magical',
+'magician',
+'magnanimous',
+'magnate',
+'magnesium',
+'magnet',
+'magnetic',
+'magnetism',
+'magnificent',
+'magnify',
+'magnitude',
+'magnolia',
+'magpie',
+'mahogany',
+'maid',
+'maiden',
+'mail',
+'mailbox',
+'maim',
+'main',
+'mainland',
+'mainspring',
+'mainstay',
+'mainstream',
+'maintain',
+'maintenance',
+'maize',
+'majestic',
+'majesty',
+'major',
+'majority',
+'make',
+'make-believe',
+'makeshift',
+'make-up',
+'making',
+'maladjusted',
+'maladministration',
+'malady',
+'malaria',
+'male',
+'malformed',
+'malfunction',
+'malicious',
+'malign',
+'malignancy',
+'malignant',
+'mall',
+'malnutrition',
+'malpractice',
+'malt',
+'maltreat',
+'mammal',
+'mammoth',
+'man',
+'manacle',
+'manage',
+'manageable',
+'management',
+'manager',
+'managerial',
+'mandarin',
+'mandate',
+'mandatory',
+'mane',
+'manful',
+'manger',
+'mango',
+'manhood',
+'mania',
+'maniac',
+'manic',
+'manicure',
+'manifest',
+'manifestation',
+'manifesto',
+'manifold',
+'manipulate',
+'mankind',
+'manly',
+'man-made',
+'manner',
+'manoeuvre',
+'manpower',
+'mansion',
+'manslaughter',
+'mantelpiece',
+'mantle',
+'manual',
+'manufacture',
+'manure',
+'manuscript',
+'many',
+'Maori',
+'map',
+'maple',
+'mar',
+'marathon',
+'marble',
+'March',
+'march',
+'mare',
+'margarine',
+'margin',
+'marginal',
+'marijuana',
+'marine',
+'marital',
+'maritime',
+'mark',
+'marked',
+'marker',
+'market',
+'marketing',
+'marking',
+'marksman',
+'marmalade',
+'marquee',
+'marriage',
+'married',
+'marrow',
+'marry',
+'Mars',
+'marsh',
+'marshal',
+'mart',
+'martial',
+'martyr',
+'marvel',
+'marvellous',
+'marvelous',
+'Marxism',
+'Marxist',
+'mascot',
+'masculine',
+'masculinity',
+'mash',
+'mask',
+'masked',
+'mason',
+'masquerade',
+'mass',
+'massacre',
+'massage',
+'massive',
+'mast',
+'master',
+'mastermind',
+'masterpiece',
+'mastery',
+'mat',
+'mate',
+'material',
+'materialism',
+'materialize',
+'maternal',
+'maternity',
+'mathematical',
+'mathematician',
+'mathematics',
+'maths',
+'matinee',
+'mating',
+'matriculate',
+'matrix',
+'matron',
+'matter',
+'mattress',
+'mature',
+'maul',
+'mauve',
+'maverick',
+'maxim',
+'maximum',
+'may',
+'May',
+'maybe',
+'mayhem',
+'mayor',
+'maze',
+'me',
+'meadow',
+'meager',
+'meal',
+'mean',
+'meander',
+'meaning',
+'means',
+'meantime',
+'meanwhile',
+'measles',
+'measurable',
+'measure',
+'measurement',
+'meat',
+'Mecca',
+'mechanic',
+'mechanical',
+'mechanics',
+'mechanism',
+'mechanize',
+'medal',
+'meddle',
+'media',
+'mediate',
+'medicaid',
+'medical',
+'medication',
+'medicine',
+'medieval',
+'mediocre',
+'meditate',
+'Mediterranean',
+'medium',
+'meek',
+'meet',
+'meeting',
+'megaphone',
+'melancholy',
+'mellow',
+'melodrama',
+'melody',
+'melon',
+'melt',
+'member',
+'membership',
+'membrane',
+'memento',
+'memo',
+'memoir',
+'memorable',
+'memorandum',
+'memorial',
+'memorize',
+'memory',
+'menace',
+'mend',
+'menial',
+'meningitis',
+'menopause',
+'menstrual',
+'mental',
+'mentality',
+'mention',
+'menu',
+'mercantile',
+'mercenary',
+'merchandise',
+'merchant',
+'merciful',
+'merciless',
+'mercury',
+'mercy',
+'mere',
+'merely',
+'merge',
+'merit',
+'mermaid',
+'merry',
+'merry-go-round',
+'mesh',
+'mesmerize',
+'mess',
+'message',
+'messenger',
+'Messiah',
+'metabolism',
+'metal',
+'metallic',
+'metallurgy',
+'metaphor',
+'metaphysical',
+'meteor',
+'meteorology',
+'meter',
+'methane',
+'method',
+'methodical',
+'methodology',
+'meticulous',
+'metre',
+'metric',
+'metropolis',
+'metropolitan',
+'Mexican',
+'microbiology',
+'microchip',
+'microcomputer',
+'microorganism',
+'microphone',
+'microprocessor',
+'microscope',
+'microwave',
+'mid',
+'midday',
+'middle',
+'middleman',
+'midget',
+'midnight',
+'midst',
+'midway',
+'midwife',
+'might',
+'mighty',
+'migraine',
+'migrant',
+'migrate',
+'migration',
+'mild',
+'mile',
+'mileage',
+'milestone',
+'militant',
+'militarism',
+'military',
+'militia',
+'militiaman',
+'milk',
+'milkman',
+'milky',
+'mill',
+'millennium',
+'millet',
+'millimeter',
+'millimetre',
+'million',
+'millionaire',
+'millipede',
+'milometer',
+'mime',
+'mimic',
+'mince',
+'mind',
+'mine',
+'minefield',
+'miner',
+'mineral',
+'mingle',
+'miniature',
+'minibus',
+'minimum',
+'minister',
+'ministry',
+'mink',
+'minor',
+'minority',
+'minus',
+'minute',
+'miracle',
+'miraculous',
+'mirage',
+'mire',
+'mirror',
+'mirth',
+'misadventure',
+'misapprehend',
+'misapprehension',
+'misappropriate',
+'misbehave',
+'misbehavior',
+'misbehaviour',
+'miscalculate',
+'miscarriage',
+'miscellaneous',
+'mischief',
+'mischievous',
+'misconduct',
+'miser',
+'miserable',
+'misery',
+'misfit',
+'misfortune',
+'misgiving',
+'mislead',
+'misplace',
+'missile',
+'missing',
+'mission',
+'missionary',
+'mist',
+'mistake',
+'mistaken',
+'mistress',
+'misty',
+'misunderstand',
+'misunderstanding',
+'mitigate',
+'mitten',
+'mix',
+'mixer',
+'mixture',
+'moan',
+'moat',
+'mob',
+'mobile',
+'mobility',
+'mobilize',
+'mock',
+'mockery',
+'mode',
+'modem',
+'moderate',
+'modern',
+'modernism',
+'modernization',
+'modernize',
+'modest',
+'modesty',
+'modify',
+'modular',
+'module',
+'moist',
+'moisture',
+'moisturize',
+'mole',
+'molecule',
+'molest',
+'mollify',
+'moment',
+'momentary',
+'momentous',
+'momentum',
+'monarch',
+'monarchy',
+'monastery',
+'Monday',
+'monetary',
+'money',
+'Mongolian',
+'mongrel',
+'monitor',
+'monk',
+'monkey',
+'monochrome',
+'monogamy',
+'monolingual',
+'monolith',
+'monologue',
+'monopolise',
+'monopolize',
+'monopoly',
+'monotone',
+'monotonous',
+'monotony',
+'monsoon',
+'monster',
+'monstrous',
+'montage',
+'month',
+'monthly',
+'monument',
+'monumental',
+'mood',
+'moon',
+'moonlight',
+'moonlighting',
+'mop',
+'mope',
+'moral',
+'morale',
+'morality',
+'morbid',
+'more',
+'moreover',
+'mores',
+'moribund',
+'morning',
+'morphine',
+'mortal',
+'mortality',
+'mortar',
+'mortgage',
+'mortuary',
+'mosaic',
+'mosque',
+'mosquito',
+'moss',
+'most',
+'mostly',
+'motel',
+'moth',
+'mother',
+'mother-in-law',
+'motherland',
+'motif',
+'motion',
+'motionless',
+'motivate',
+'motivation',
+'motive',
+'motley',
+'motor',
+'motorist',
+'motorway',
+'motto',
+'mould',
+'mound',
+'mountain',
+'mountainous',
+'mournful',
+'mouse',
+'mousse',
+'moustache',
+'mouth',
+'mouthful',
+'movable',
+'move',
+'movement',
+'movie',
+'moving',
+'mow',
+'much',
+'mud',
+'muddle',
+'muddy',
+'muffin',
+'muffle',
+'mug',
+'mule',
+'multilateral',
+'multimedia',
+'multinational',
+'multiple',
+'multiply',
+'multitude',
+'mumble',
+'mummy',
+'mumps',
+'mundane',
+'municipal',
+'municipality',
+'munitions',
+'mural',
+'murder',
+'murmur',
+'muscle',
+'muscular',
+'muse',
+'museum',
+'mushroom',
+'music',
+'musical',
+'musician',
+'musk',
+'Muslim',
+'mussel',
+'must',
+'mustache',
+'mustard',
+'muster',
+'mutant',
+'mute',
+'mutilate',
+'mutter',
+'mutton',
+'mutual',
+'muzzle',
+'my',
+'myriad',
+'myself',
+'mysterious',
+'mystery',
+'mystic',
+'myth',
+'mythology',
+'nab',
+'nag',
+'nail',
+'naive',
+'naked',
+'name',
+'namely',
+'namesake',
+'nap',
+'nape',
+'napkin',
+'nappy',
+'narcissus',
+'narcotic',
+'narrate',
+'narration',
+'narrative',
+'narrator',
+'narrow',
+'nasal',
+'nasty',
+'nation',
+'national',
+'nationality',
+'nationwide',
+'native',
+'natural',
+'naturalize',
+'nature',
+'naughty',
+'nausea',
+'nautical',
+'naval',
+'navel',
+'navigate',
+'navigation',
+'navy',
+'Nazi',
+'Nazism',
+'near',
+'nearby',
+'nearly',
+'neat',
+'nebulous',
+'necessarily',
+'necessary',
+'necessitate',
+'necessity',
+'neck',
+'necklace',
+'nectar',
+'nee',
+'need',
+'needle',
+'needless',
+'needy',
+'negate',
+'negative',
+'neglect',
+'negligent',
+'negligible',
+'negotiable',
+'negotiate',
+'negotiation',
+'Negro',
+'neighbor',
+'neighborhood',
+'neighbourhood',
+'neither',
+'neoclassical',
+'neon',
+'nephew',
+'nerve',
+'nervous',
+'nest',
+'nestle',
+'net',
+'network',
+'neural',
+'neurological',
+'neurosis',
+'neurotic',
+'neutral',
+'neutralise',
+'neutralize',
+'never',
+'nevertheless',
+'new',
+'newborn',
+'newly',
+'news',
+'newscast',
+'newsletter',
+'newspaper',
+'newsreel',
+'next',
+'nib',
+'nibble',
+'nice',
+'nicely',
+'niche',
+'nickel',
+'nickname',
+'nicotine',
+'niece',
+'nigger',
+'nigh',
+'night',
+'nightclub',
+'nightgown',
+'nightingale',
+'nightmare',
+'nimble',
+'nine',
+'nineteen',
+'nineteenth',
+'ninety',
+'ninth',
+'nip',
+'nipple',
+'nirvana',
+'nitrate',
+'nitrogen',
+'no',
+'nobility',
+'noble',
+'nobleman',
+'nobody',
+'nod',
+'node',
+'noise',
+'noisy',
+'nomad',
+'nomadic',
+'nomenclature',
+'nominal',
+'nominate',
+'nomination',
+'nominee',
+'nonchalant',
+'none',
+'nonetheless',
+'nonsense',
+'nonstop',
+'noodle',
+'noon',
+'nor',
+'norm',
+'normal',
+'normally',
+'north',
+'northeast',
+'northern',
+'northwest',
+'nose',
+'nostalgia',
+'nostalgic',
+'nostril',
+'not',
+'notable',
+'notary',
+'notation',
+'note',
+'notebook',
+'noted',
+'nothing',
+'notice',
+'noticeable',
+'notification',
+'notify',
+'notion',
+'notoriety',
+'notorious',
+'notwithstanding',
+'nought',
+'noun',
+'nourish',
+'nourishment',
+'novelist',
+'novelty',
+'November',
+'novice',
+'now',
+'nowadays',
+'nowhere',
+'nuance',
+'nuclear',
+'nucleus',
+'nude',
+'nudge',
+'nudity',
+'nuisance',
+'numb',
+'number',
+'numeral',
+'numerical',
+'numerous',
+'nun',
+'nurse',
+'nursery',
+'nurture',
+'nut',
+'nutrient',
+'nutrition',
+'nutritious',
+'nuzzle',
+'nylon',
+'nymph',
+'oak',
+'oar',
+'oasis',
+'oath',
+'oats',
+'obedience',
+'obedient',
+'obese',
+'obesity',
+'obey',
+'obituary',
+'objection',
+'obligation',
+'obligatory',
+'oblige',
+'obliterate',
+'oblivion',
+'oblivious',
+'oblong',
+'oboe',
+'obscene',
+'obscenity',
+'obscure',
+'obscurity',
+'observance',
+'observant',
+'observation',
+'observatory',
+'observe',
+'observer',
+'obsess',
+'obsessive',
+'obsolete',
+'obstacle',
+'obstinate',
+'obstruct',
+'obstruction',
+'obtain',
+'obvious',
+'occasion',
+'occasional',
+'occidental',
+'occupancy',
+'occupation',
+'occupational',
+'occupy',
+'occur',
+'occurrence',
+'ocean',
+'oceanography',
+'clock',
+'October',
+'octopus',
+'odd',
+'odds',
+'ode',
+'odour',
+'of',
+'off',
+'offence',
+'offend',
+'offender',
+'offense',
+'offensive',
+'offer',
+'offhand',
+'office',
+'officer',
+'official',
+'offset',
+'offshore',
+'offspring',
+'often',
+'oh',
+'oil',
+'oily',
+'ointment',
+'old',
+'old-fashioned',
+'olive',
+'Olympic',
+'omega',
+'omelet',
+'omelette',
+'omen',
+'ominous',
+'omission',
+'omit',
+'omniscient',
+'on',
+'once',
+'oncoming',
+'one',
+'oneself',
+'ongoing',
+'onion',
+'online',
+'onlooker',
+'only',
+'onomatopoeia',
+'onset',
+'onslaught',
+'onto',
+'onward',
+'onwards',
+'ooze',
+'opal',
+'opaque',
+'open',
+'opener',
+'opening',
+'opera',
+'operate',
+'operation',
+'operational',
+'operative',
+'operator',
+'opinion',
+'opium',
+'opponent',
+'opportunity',
+'oppose',
+'opposite',
+'opposition',
+'oppress',
+'oppressive',
+'opt',
+'optical',
+'optics',
+'optimal',
+'optimism',
+'optimistic',
+'optimize',
+'optimum',
+'option',
+'optional',
+'opulent',
+'opus',
+'or',
+'oracle',
+'oral',
+'orange',
+'orator',
+'orbit',
+'orbital',
+'orchard',
+'orchestra',
+'orchestrate',
+'orchid',
+'ordain',
+'ordeal',
+'order',
+'orderly',
+'ordinal',
+'ordinance',
+'ordinarily',
+'ordinary',
+'ore',
+'organ',
+'organic',
+'organism',
+'organization',
+'organize',
+'orgasm',
+'orgy',
+'orient',
+'oriental',
+'orientation',
+'origin',
+'original',
+'originality',
+'originate',
+'ornament',
+'orphan',
+'orphanage',
+'orthodox',
+'orthodoxy',
+'oscillation',
+'ostensibly',
+'ostentatious',
+'ostrich',
+'other',
+'otherwise',
+'ought',
+'ounce',
+'our',
+'ours',
+'ourselves',
+'oust',
+'out',
+'outbreak',
+'outcast',
+'outcome',
+'outcry',
+'outdated',
+'outdoor',
+'outdoors',
+'outer',
+'outfit',
+'outgoing',
+'outgrow',
+'outing',
+'outlandish',
+'outlaw',
+'outlay',
+'outlet',
+'outline',
+'outlook',
+'outnumber',
+'outpost',
+'output',
+'outrage',
+'outrageous',
+'outreach',
+'outright',
+'outset',
+'outside',
+'outskirts',
+'outspoken',
+'outstanding',
+'outward',
+'outwards',
+'outweigh',
+'oval',
+'ovation',
+'oven',
+'over',
+'overall',
+'overboard',
+'overcast',
+'overcoat',
+'overcome',
+'overcrowd',
+'overdo',
+'overdose',
+'overdraft',
+'overdue',
+'overflow',
+'overgrown',
+'overhead',
+'overhear',
+'overjoyed',
+'overlap',
+'overleaf',
+'overlook',
+'overly',
+'overnight',
+'override',
+'overrule',
+'oversea',
+'overseas',
+'overshadow',
+'oversight',
+'overstate',
+'overt',
+'overtake',
+'overthrow',
+'overtime',
+'overture',
+'overturn',
+'overview',
+'overweight',
+'overwhelm',
+'overwhelming',
+'ovum',
+'owe',
+'owing',
+'owl',
+'own',
+'owner',
+'ownership',
+'ox',
+'oxide',
+'oxidize',
+'oxygen',
+'oyster',
+'ozone',
+'pace',
+'pacify',
+'pack',
+'package',
+'packet',
+'pact',
+'pad',
+'paddle',
+'paddock',
+'paddy',
+'padlock',
+'pagan',
+'page',
+'pageant',
+'pager',
+'pagoda',
+'pail',
+'pain',
+'painful',
+'painkiller',
+'painstaking',
+'paint',
+'painter',
+'painting',
+'pair',
+'pajamas',
+'pal',
+'palace',
+'palatable',
+'palatal',
+'palate',
+'pale',
+'palette',
+'palm',
+'palpable',
+'pamper',
+'pamphlet',
+'pan',
+'panacea',
+'pancake',
+'panda',
+'pane',
+'panel',
+'pang',
+'panic',
+'panorama',
+'panoramic',
+'pant',
+'panther',
+'pantomime',
+'pants',
+'paper',
+'paperweight',
+'paperwork',
+'par',
+'parable',
+'parachute',
+'parade',
+'paradigm',
+'paradise',
+'paradox',
+'paradoxical',
+'paraffin',
+'paragraph',
+'parallel',
+'paralyse',
+'paralysis',
+'paralytic',
+'paralyze',
+'parameter',
+'paramilitary',
+'paramount',
+'paranoia',
+'paranoid',
+'paraphrase',
+'parasite',
+'parcel',
+'pardon',
+'pare',
+'parent',
+'parentage',
+'parenthesis',
+'parenthetical',
+'parenthood',
+'parish',
+'parking',
+'parliament',
+'parliamentary',
+'parlor',
+'parody',
+'parole',
+'parrot',
+'parry',
+'parsley',
+'parson',
+'part',
+'partake',
+'partial',
+'partiality',
+'participant',
+'participate',
+'participle',
+'particle',
+'particular',
+'particularly',
+'parting',
+'partisan',
+'partition',
+'partly',
+'partner',
+'partner',
+'part-time',
+'party',
+'pass',
+'passage',
+'passenger',
+'passerby',
+'passion',
+'passionate',
+'passive',
+'passport',
+'password',
+'past',
+'pasta',
+'paste',
+'pastel',
+'pastime',
+'pastoral',
+'pastry',
+'pasture',
+'pat',
+'patch',
+'patchy',
+'patent',
+'path',
+'pathetic',
+'pathologic',
+'pathological',
+'pathology',
+'patience',
+'patio',
+'patriarch',
+'patriarchal',
+'patriot',
+'patriotic',
+'patron',
+'patronage',
+'patronize',
+'patter',
+'pattern',
+'pause',
+'pave',
+'pavement',
+'pavilion',
+'paw',
+'pay',
+'payable',
+'payment',
+'payoff',
+'payout',
+'payroll',
+'pea',
+'peace',
+'peaceful',
+'peach',
+'peacock',
+'peak',
+'peanut',
+'pear',
+'pearl',
+'peasant',
+'peat',
+'pebble',
+'peck',
+'peculiar',
+'peculiarity',
+'pedagogic',
+'pedagogical',
+'pedal',
+'pedantic',
+'peddle',
+'peddler',
+'pedestal',
+'pedestrian',
+'pedigree',
+'pedlar',
+'peek',
+'peel',
+'peep',
+'peer',
+'peg',
+'pelican',
+'pen',
+'penalize',
+'penalty',
+'pencil',
+'pendant',
+'pendent',
+'pending',
+'pendulum',
+'penetrate',
+'penguin',
+'peninsula',
+'penis',
+'penny',
+'pension',
+'pensioner',
+'pentagon',
+'pentathlon',
+'penthouse',
+'peony',
+'people',
+'pepper',
+'peppermint',
+'per',
+'perceive',
+'percent',
+'percentage',
+'perceptible',
+'perception',
+'perceptive',
+'perch',
+'percussion',
+'perfect',
+'perfection',
+'perform',
+'performance',
+'performer',
+'perfume',
+'perfunctory',
+'perhaps',
+'peril',
+'perilous',
+'perimeter',
+'period',
+'periodic',
+'periphery',
+'perish',
+'perjury',
+'perk',
+'permanent',
+'permeate',
+'permissible',
+'permission',
+'permit',
+'pernicious',
+'perpendicular',
+'perpetrate',
+'perpetrator',
+'perpetuate',
+'perplex',
+'persecute',
+'perseverance',
+'persevere',
+'Persian',
+'persimmon',
+'persist',
+'persistence',
+'persistency',
+'persistent',
+'person',
+'personage',
+'personal',
+'personality',
+'personify',
+'personnel',
+'perspective',
+'persuade',
+'persuasion',
+'persuasive',
+'pertain',
+'pertinent',
+'perturb',
+'pervade',
+'pervert',
+'pessimist',
+'pessimistic',
+'pest',
+'pester',
+'pesticide',
+'pet',
+'petal',
+'petition',
+'petrol',
+'petroleum',
+'petty',
+'phantom',
+'pharmaceutical',
+'pharmacist',
+'pharmacy',
+'phase',
+'PhD',
+'pheasant',
+'phenomenal',
+'phenomenon',
+'philanthropic',
+'philosopher',
+'philosophic',
+'philosophical',
+'philosophy',
+'phobia',
+'phoenix',
+'phone',
+'phonetic',
+'phonology',
+'phosphorous',
+'phosphorus',
+'photo',
+'photocopier',
+'photocopy',
+'photograph',
+'photographer',
+'photography',
+'phrase',
+'physical',
+'physician',
+'physicist',
+'physics',
+'physiological',
+'physiology',
+'physiotherapy',
+'physique',
+'pianist',
+'piano',
+'pick',
+'picket',
+'pickle',
+'pickpocket',
+'picnic',
+'pictorial',
+'picture',
+'picturesque',
+'pidgin',
+'pie',
+'piece',
+'pier',
+'pierce',
+'piety',
+'pig',
+'pigeon',
+'pigsty',
+'pike',
+'pile',
+'pilgrim',
+'pill',
+'pillar',
+'pillow',
+'pillowcase',
+'pilot',
+'pin',
+'pinch',
+'pine',
+'pineapple',
+'pink',
+'pinpoint',
+'pint',
+'pioneer',
+'pious',
+'pipe',
+'piracy',
+'pirate',
+'piss',
+'pistol',
+'piston',
+'pit',
+'pitcher',
+'pitfall',
+'pity',
+'pivot',
+'pivotal',
+'pizza',
+'place',
+'placid',
+'plague',
+'plaid',
+'plain',
+'plaintiff',
+'plan',
+'plane',
+'planet',
+'planetary',
+'plank',
+'plant',
+'planter',
+'plaque',
+'plasma',
+'plaster',
+'plastic',
+'plate',
+'plateau',
+'platform',
+'platinum',
+'platoon',
+'plausible',
+'play',
+'player',
+'playground',
+'playmate',
+'playoff',
+'playwright',
+'plaza',
+'plea',
+'plead',
+'pleasant',
+'please',
+'pleased',
+'pleasing',
+'pleasure',
+'pleat',
+'pledge',
+'plenary',
+'plenipotentiary',
+'plenty',
+'plight',
+'plot',
+'plough',
+'plow',
+'pluck',
+'plug',
+'plum',
+'plumb',
+'plumber',
+'plume',
+'plummet',
+'plump',
+'plunder',
+'plunger',
+'plural',
+'plus',
+'plush',
+'plutonium',
+'pneumonia',
+'poach',
+'pocket',
+'pockmark',
+'pod',
+'poem',
+'poet',
+'poetess',
+'poetic',
+'poetry',
+'poignant',
+'point',
+'poise',
+'poison',
+'poisonous',
+'poke',
+'poker',
+'polar',
+'polarity',
+'polemic',
+'police',
+'policeman',
+'policewoman',
+'policy',
+'Polish',
+'polish',
+'politburo',
+'polite',
+'politician',
+'politics',
+'poll',
+'pollen',
+'pollster',
+'pollutant',
+'pollute',
+'pollution',
+'polo',
+'polyester',
+'polytechnic',
+'pompous',
+'pond',
+'ponder',
+'pony',
+'poor',
+'popcorn',
+'pope',
+'poplar',
+'poppy',
+'popular',
+'popularity',
+'popularize',
+'population',
+'populous',
+'porcelain',
+'porch',
+'pore',
+'pork',
+'pornography',
+'porridge',
+'port',
+'portable',
+'porter',
+'portfolio',
+'portion',
+'portrait',
+'portray',
+'pose',
+'position',
+'positive',
+'possess',
+'possession',
+'possibility',
+'possible',
+'possibly',
+'postage',
+'postcard',
+'poster',
+'posthumous',
+'postman',
+'postpone',
+'postscript',
+'postulate',
+'posture',
+'pot',
+'potato',
+'potency',
+'potent',
+'potential',
+'potluck',
+'pottery',
+'pouch',
+'poultry',
+'pounce',
+'pour',
+'poverty',
+'powder',
+'power',
+'powerful',
+'practicable',
+'practical',
+'practicality',
+'practice',
+'practise',
+'practitioner',
+'pragmatic',
+'prairie',
+'praise',
+'pram',
+'prawn',
+'pray',
+'prayer',
+'preach',
+'precarious',
+'precaution',
+'precede',
+'precedent',
+'precinct',
+'precious',
+'precipitate',
+'precipitous',
+'precis',
+'precise',
+'precision',
+'preclude',
+'predatory',
+'predecessor',
+'predicament',
+'predicate',
+'predict',
+'prediction',
+'predominant',
+'prefabricate',
+'preface',
+'prefer',
+'preferable',
+'preference',
+'preferential',
+'prefix',
+'pregnancy',
+'pregnant',
+'prehistoric',
+'prejudice',
+'preliminary',
+'prelude',
+'premature',
+'premier',
+'premiere',
+'premise',
+'premium',
+'premonition',
+'prenatal',
+'preoccupation',
+'preoccupied',
+'preparation',
+'preparatory',
+'prepare',
+'preposition',
+'prerequisite',
+'preschool',
+'prescribe',
+'prescription',
+'presence',
+'presentation',
+'presently',
+'preservation',
+'preserve',
+'preside',
+'president',
+'presidential',
+'presidium',
+'pressing',
+'pressure',
+'prestige',
+'prestigious',
+'presumably',
+'presume',
+'presumption',
+'presuppose',
+'pretence',
+'pretend',
+'pretense',
+'pretentious',
+'pretext',
+'pretty',
+'prevail',
+'prevalent',
+'prevent',
+'prevention',
+'previous',
+'prey',
+'price',
+'priceless',
+'prick',
+'pride',
+'priest',
+'primary',
+'prime',
+'primitive',
+'prince',
+'princess',
+'principal',
+'principle',
+'print',
+'printer',
+'prior',
+'priority',
+'prism',
+'prison',
+'prisoner',
+'pristine',
+'privacy',
+'private',
+'privilege',
+'prize',
+'pro',
+'probability',
+'probably',
+'probation',
+'probe',
+'problem',
+'problematic',
+'problematical',
+'procedural',
+'procedure',
+'proceed',
+'process',
+'procession',
+'proclaim',
+'procure',
+'prod',
+'prodigal',
+'prodigy',
+'producer',
+'product',
+'production',
+'productive',
+'productivity',
+'profess',
+'profession',
+'professional',
+'professor',
+'proficiency',
+'proficient',
+'profile',
+'profit',
+'profitable',
+'profiteer',
+'profound',
+'program',
+'programme',
+'programmer',
+'progress',
+'progressive',
+'prohibit',
+'prohibition',
+'project',
+'projection',
+'projector',
+'proletarian',
+'proliferation',
+'prolific',
+'prologue',
+'prolong',
+'prominence',
+'prominent',
+'promise',
+'promising',
+'promote',
+'promotion',
+'prone',
+'pronoun',
+'pronounce',
+'pronunciation',
+'proof',
+'proofread',
+'prop',
+'propaganda',
+'propagate',
+'propel',
+'proper',
+'property',
+'prophecy',
+'prophesy',
+'prophet',
+'proponent',
+'proportion',
+'proportional',
+'proposal',
+'propose',
+'proposition',
+'proprietor',
+'prose',
+'prosecute',
+'prosecution',
+'prospect',
+'prospective',
+'prosperity',
+'prosperous',
+'prostate',
+'prostitute',
+'prostitution',
+'protagonist',
+'protect',
+'protection',
+'protective',
+'protein',
+'protest',
+'Protestant',
+'protocol',
+'prototype',
+'protracted',
+'protrude',
+'proud',
+'prove',
+'proverb',
+'provide',
+'provided',
+'provident',
+'province',
+'provincial',
+'provision',
+'provisional',
+'provocation',
+'provocative',
+'provoke',
+'prowess',
+'proximity',
+'prudent',
+'prune',
+'pseudo',
+'psychiatrist',
+'psychiatry',
+'psycho',
+'psychoanalyst',
+'psychologist',
+'psychology',
+'psychotherapist',
+'psychotherapy',
+'pub',
+'puberty',
+'public',
+'publication',
+'publish',
+'publisher',
+'pudding',
+'puff',
+'pull',
+'pullover',
+'pulp',
+'pulpit',
+'pulse',
+'pump',
+'pumpkin',
+'pun',
+'punch',
+'punctual',
+'punctuation',
+'puncture',
+'pungent',
+'punish',
+'punishment',
+'punitive',
+'puppet',
+'puppy',
+'purchase',
+'pure',
+'purely',
+'purge',
+'purify',
+'Puritan',
+'purity',
+'purple',
+'purport',
+'purpose',
+'purse',
+'pursue',
+'pursuit',
+'push',
+'put',
+'puzzle',
+'pyjamas',
+'pyramid',
+'python',
+'quack',
+'quadrangle',
+'quadrant',
+'quadratic',
+'quadrilateral',
+'quadruple',
+'quaff',
+'quail',
+'quaint',
+'quake',
+'Quaker',
+'qualification',
+'qualified',
+'qualifier',
+'qualify',
+'qualitative',
+'quality',
+'qualm',
+'quanta',
+'quantifier',
+'quantify',
+'quantitative',
+'quantity',
+'quantum',
+'quarantine',
+'quarrel',
+'quarry',
+'quart',
+'quarter',
+'quarterly',
+'quartet',
+'quartz',
+'quash',
+'quaver',
+'quay',
+'queen',
+'queer',
+'quell',
+'quench',
+'querulous',
+'query',
+'quest',
+'question',
+'questionable',
+'questionnaire',
+'queue',
+'quibble',
+'quick',
+'quickly',
+'quicksand',
+'quiet',
+'quietly',
+'quilt',
+'quintessence',
+'quintet',
+'quip',
+'quirk',
+'quit',
+'quite',
+'quitter',
+'quiver',
+'quixotic',
+'quiz',
+'quizzical',
+'quota',
+'quotation',
+'quote',
+'quotient',
+'rabbi',
+'rabbit',
+'rabid',
+'rabies',
+'racecourse',
+'racer',
+'racialism',
+'racism',
+'racist',
+'rack',
+'racket',
+'racketeer',
+'radar',
+'radial',
+'radiance',
+'radiant',
+'radiate',
+'radiation',
+'radiator',
+'radical',
+'radicalism',
+'radio',
+'radioactive',
+'radioactivity',
+'radiochemical',
+'radium',
+'radius',
+'raff',
+'raffle',
+'raft',
+'rag',
+'rage',
+'ragged',
+'raid',
+'raider',
+'railway',
+'rain',
+'rainbow',
+'raincoat',
+'raindrop',
+'rainfall',
+'rainproof',
+'rainy',
+'raise',
+'raiser',
+'raisin',
+'rake',
+'rally',
+'RAM',
+'ram',
+'ramble',
+'rambler',
+'ramification',
+'ramp',
+'rampage',
+'rampant',
+'rampart',
+'ranch',
+'rancid',
+'rancour',
+'random',
+'randy',
+'range',
+'ranger',
+'rank',
+'ransom',
+'rap',
+'rape',
+'rapid',
+'rapidly',
+'rapist',
+'rapport',
+'rapprochement',
+'rapt',
+'rare',
+'rarely',
+'rarity',
+'rascal',
+'rash',
+'raspberry',
+'rat',
+'rate',
+'rateable',
+'ratepayer',
+'rather',
+'rating',
+'ratio',
+'ration',
+'rational',
+'rationale',
+'rationalize',
+'rattle',
+'rattlesnake',
+'ravage',
+'rave',
+'raven',
+'ravine',
+'ravish',
+'raw',
+'ray',
+'razor',
+'reach',
+'react',
+'reaction',
+'reactionary',
+'reactor',
+'read',
+'reader',
+'readily',
+'readiness',
+'reading',
+'ready',
+'reaffirm',
+'real',
+'realise',
+'realism',
+'realist',
+'realistic',
+'reality',
+'realization',
+'realize',
+'really',
+'realm',
+'reap',
+'reappear',
+'rear',
+'rearguard',
+'rearmament',
+'rearrange',
+'reason',
+'reasonable',
+'reasoning',
+'reassemble',
+'reassure',
+'rebate',
+'rebel',
+'rebellion',
+'rebellious',
+'rebirth',
+'rebound',
+'rebuff',
+'rebuild',
+'rebuke',
+'recall',
+'recapture',
+'recede',
+'receipt',
+'receive',
+'receiver',
+'recent',
+'recently',
+'reception',
+'receptionist',
+'receptive',
+'recess',
+'recession',
+'recipe',
+'recipient',
+'reciprocal',
+'reciprocate',
+'reciprocity',
+'recital',
+'recitation',
+'recite',
+'reckless',
+'reckon',
+'reclaim',
+'recline',
+'recognition',
+'recognizable',
+'recognize',
+'recollect',
+'recollection',
+'recommend',
+'recommendation',
+'recompense',
+'reconcile',
+'reconciliation',
+'reconnaissance',
+'reconstruct',
+'record',
+'recorder',
+'recording',
+'recount',
+'recoup',
+'recourse',
+'recover',
+'recovery',
+'recreate',
+'recreation',
+'recruit',
+'rectangle',
+'rectangular',
+'rectification',
+'rectify',
+'rectitude',
+'rector',
+'recur',
+'recurrence',
+'recurrent',
+'recycle',
+'red',
+'redbrick',
+'reddish',
+'redeem',
+'redemption',
+'redemptive',
+'redevelopment',
+'red-hot',
+'redistribute',
+'redolent',
+'redraw',
+'redress',
+'reduce',
+'reduction',
+'redundancy',
+'redundant',
+'reed',
+'reedy',
+'reef',
+'re-examine',
+'refer',
+'referee',
+'reference',
+'referendum',
+'refine',
+'refined',
+'refinement',
+'refinery',
+'reflect',
+'reflection',
+'reflex',
+'reform',
+'reformer',
+'refrain',
+'refresh',
+'refreshing',
+'refreshment',
+'refrigerator',
+'refuge',
+'refugee',
+'refurbish',
+'refusal',
+'refuse',
+'refutation',
+'refute',
+'regain',
+'regal',
+'regard',
+'regarding',
+'regardless',
+'regatta',
+'regency',
+'regeneration',
+'regent',
+'regime',
+'regiment',
+'region',
+'register',
+'registrar',
+'registration',
+'registry',
+'regress',
+'regression',
+'regressive',
+'regret',
+'regular',
+'regularity',
+'regulate',
+'regulation',
+'rehabilitate',
+'rehearsal',
+'rehearse',
+'rehouse',
+'reign',
+'reimburse',
+'rein',
+'reinforce',
+'reinforcement',
+'reinstate',
+'reject',
+'rejection',
+'rejoice',
+'rejuvenate',
+'relapse',
+'relate',
+'relation',
+'relationship',
+'relative',
+'relativity',
+'relax',
+'relaxation',
+'relay',
+'release',
+'relegate',
+'relent',
+'relentless',
+'relevance',
+'relevant',
+'reliability',
+'reliable',
+'reliance',
+'relic',
+'relief',
+'relieve',
+'religion',
+'religious',
+'relinquish',
+'relish',
+'reluctance',
+'reluctant',
+'rely',
+'remain',
+'remainder',
+'remains',
+'remark',
+'remarkable',
+'remedial',
+'remedy',
+'remember',
+'remembrance',
+'remind',
+'reminder',
+'reminiscence',
+'reminiscent',
+'remission',
+'remit',
+'remittance',
+'remnant',
+'remorse',
+'remorseful',
+'remorseless',
+'remote',
+'removable',
+'removal',
+'remove',
+'remunerate',
+'remuneration',
+'renaissance',
+'rend',
+'render',
+'rendezvous',
+'rendition',
+'renegade',
+'renew',
+'renewal',
+'renounce',
+'renovate',
+'renovation',
+'renown',
+'renowned',
+'rent',
+'rental',
+'renunciation',
+'reorient',
+'rep',
+'repair',
+'repairable',
+'reparation',
+'repay',
+'repayment',
+'repeal',
+'repeat',
+'repeatedly',
+'repel',
+'repellent',
+'repent',
+'repentance',
+'repercussion',
+'repertoire',
+'repertory',
+'repetition',
+'repetitive',
+'repine',
+'replace',
+'replacement',
+'replay',
+'replenish',
+'replica',
+'replicate',
+'reply',
+'report',
+'reporter',
+'repository',
+'represent',
+'representation',
+'representative',
+'repress',
+'repression',
+'repressive',
+'reprimand',
+'reprisal',
+'reproach',
+'reproduce',
+'reprove',
+'reptile',
+'republic',
+'republican',
+'repudiate',
+'repugnant',
+'repulse',
+'repulsion',
+'repulsive',
+'reputable',
+'reputation',
+'repute',
+'request',
+'require',
+'requirement',
+'requisite',
+'requisition',
+'rescue',
+'research',
+'researcher',
+'resemblance',
+'resemble',
+'resent',
+'resentful',
+'resentment',
+'reservation',
+'reserve',
+'reservist',
+'reservoir',
+'reshape',
+'reshuffle',
+'reside',
+'residence',
+'resident',
+'residential',
+'residual',
+'resign',
+'resignation',
+'resigned',
+'resilience',
+'resin',
+'resinous',
+'resist',
+'resistance',
+'resistant',
+'resistor',
+'resolute',
+'resolution',
+'resolve',
+'resonance',
+'resort',
+'resounding',
+'resource',
+'resourceful',
+'respect',
+'respectability',
+'respectable',
+'respectful',
+'respective',
+'respiration',
+'respite',
+'resplendent',
+'respond',
+'respondent',
+'response',
+'responsibility',
+'responsible',
+'responsive',
+'rest',
+'restaurant',
+'restful',
+'restitution',
+'restless',
+'restoration',
+'restore',
+'restrain',
+'restraint',
+'restrict',
+'restrictive',
+'result',
+'resultant',
+'resume',
+'resumption',
+'resurgent',
+'resurrect',
+'resurrection',
+'resuscitation',
+'retail',
+'retailer',
+'retain',
+'retainer',
+'retaliate',
+'retard',
+'retell',
+'retention',
+'reticent',
+'retina',
+'retire',
+'retirement',
+'retort',
+'retreat',
+'retribution',
+'retrievable',
+'retrieval',
+'retrieve',
+'retrospect',
+'retrospective',
+'return',
+'reunion',
+'reunite',
+'revaluation',
+'revamp',
+'reveal',
+'revel',
+'revelation',
+'revenge',
+'revere',
+'reverence',
+'reverend',
+'reverent',
+'reverie',
+'reversal',
+'reverse',
+'reversible',
+'reversion',
+'revert',
+'review',
+'revise',
+'revision',
+'revitalize',
+'revival',
+'revive',
+'revivify',
+'revoke',
+'revolt',
+'revolution',
+'revolutionary',
+'revolve',
+'revolver',
+'revulsion',
+'reward',
+'rewrite',
+'rhetoric',
+'rhetorical',
+'rheumatism',
+'rhino',
+'rhinoceros',
+'rhyme',
+'rhythm',
+'rhythmic',
+'rhythmical',
+'rib',
+'ribald',
+'ribbon',
+'rice',
+'rich',
+'rickets',
+'rickety',
+'rickshaw',
+'rid',
+'riddle',
+'ride',
+'ridge',
+'ridicule',
+'ridiculous',
+'rifle',
+'rifleman',
+'rift',
+'rig',
+'right',
+'righteous',
+'right-hand',
+'rightly',
+'right-wing',
+'rigid',
+'rigorous',
+'rim',
+'rind',
+'ring',
+'rink',
+'rinse',
+'riot',
+'rip',
+'ripe',
+'ripen',
+'ripple',
+'rip-roaring',
+'rise',
+'risk',
+'risky',
+'rite',
+'ritual',
+'rival',
+'rivalry',
+'river',
+'rivet',
+'roach',
+'road',
+'roadside',
+'roadway',
+'roam',
+'roar',
+'roast',
+'rob',
+'robbery',
+'robe',
+'robin',
+'robot',
+'robust',
+'rock',
+'rocker',
+'rocket',
+'rocky',
+'rod',
+'rodent',
+'rodeo',
+'roger',
+'role',
+'roll',
+'roller',
+'Roman',
+'romance',
+'romantic',
+'romanticism',
+'Rome',
+'roof',
+'rookie',
+'room',
+'roost',
+'rooster',
+'root',
+'rope',
+'rose',
+'rosette',
+'rostrum',
+'rosy',
+'rot',
+'rota',
+'rotary',
+'rotate',
+'rotational',
+'rotor',
+'rotten',
+'rouge',
+'rough',
+'roughen',
+'roughly',
+'roulette',
+'round',
+'roundabout',
+'rounder',
+'roundup',
+'rouse',
+'route',
+'routine',
+'rove',
+'rover',
+'row',
+'rowdy',
+'rower',
+'royal',
+'royalist',
+'royalty',
+'rub',
+'rubber',
+'rubbish',
+'rubble',
+'rubdown',
+'ruby',
+'rucksack',
+'ruckus',
+'ruddy',
+'rude',
+'rudimentary',
+'rue',
+'rueful',
+'ruffian',
+'ruffle',
+'rug',
+'rugby',
+'rugged',
+'rugger',
+'ruin',
+'ruinous',
+'rule',
+'ruler',
+'ruling',
+'rum',
+'rumble',
+'rummage',
+'rumour',
+'run',
+'runaway',
+'runner',
+'runner-up',
+'running',
+'runway',
+'rupture',
+'rural',
+'rush',
+'russet',
+'Russian',
+'rust',
+'rustic',
+'rustle',
+'rusty',
+'rut',
+'ruthless',
+'rye',
+'Sabbath',
+'sabbatical',
+'sabotage',
+'saboteur',
+'sabre',
+'sack',
+'sacking',
+'sacrament',
+'sacred',
+'sacrifice',
+'sacrilegious',
+'sad',
+'sadden',
+'saddle',
+'sadism',
+'sadness',
+'safari',
+'safe',
+'safeguard',
+'safety',
+'saffron',
+'sag',
+'saga',
+'sagacious',
+'sagacity',
+'sage',
+'sail',
+'sailcloth',
+'sailor',
+'saint',
+'sake',
+'salad',
+'salary',
+'sale',
+'salesclerk',
+'salesgirl',
+'saleslady',
+'salesman',
+'salient',
+'saline',
+'saliva',
+'salivary',
+'salivate',
+'sallow',
+'salmon',
+'salon',
+'saloon',
+'salt',
+'salty',
+'salutary',
+'salute',
+'salvage',
+'salvation',
+'salvo',
+'samba',
+'same',
+'sampan',
+'sample',
+'sanatorium',
+'sanctification',
+'sanctify',
+'sanction',
+'sanctuary',
+'sanctum',
+'sand',
+'sandal',
+'sandstone',
+'sandwich',
+'sandy',
+'sane',
+'sanguinary',
+'sanguine',
+'sanitarium',
+'sanitary',
+'sanity',
+'Santa',
+'sap',
+'sapling',
+'sarcasm',
+'sarcastic',
+'sardine',
+'sardonic',
+'sarong',
+'sartorial',
+'sash',
+'Satan',
+'satanic',
+'satchel',
+'satellite',
+'satiate',
+'satiation',
+'satin',
+'satire',
+'satirical',
+'satirist',
+'satirize',
+'satisfaction',
+'satisfactory',
+'satisfied',
+'satisfy',
+'saturate',
+'Saturday',
+'Saturn',
+'satyr',
+'sauce',
+'saucepan',
+'saucer',
+'sauna',
+'saunter',
+'sausage',
+'savage',
+'savagery',
+'savant',
+'save',
+'savings',
+'saviour',
+'savour',
+'savoury',
+'saw',
+'sawmill',
+'saxophone',
+'say',
+'saying',
+'scab',
+'scaffold',
+'scaffolding',
+'scalar',
+'scale',
+'scallop',
+'scalp',
+'scalpel',
+'scan',
+'scandal',
+'scandalous',
+'Scandinavian',
+'scanner',
+'scant',
+'scanty',
+'scapegoat',
+'scar',
+'scarce',
+'scarcely',
+'scarcity',
+'scare',
+'scaremonger',
+'scarf',
+'scarlet',
+'scary',
+'scathing',
+'scatter',
+'scatterbrain',
+'scavenge',
+'scavenger',
+'scenario',
+'scene',
+'scenery',
+'scenic',
+'scent',
+'sceptical',
+'scepticism',
+'schedule',
+'schema',
+'schematize',
+'scheme',
+'schizophrenia',
+'scholar',
+'scholarly',
+'scholarship',
+'scholastic',
+'school',
+'schoolboy',
+'schoolchild',
+'schoolgirl',
+'schoolmaster',
+'schoolmistress',
+'science',
+'scientific',
+'scientist',
+'scintillation',
+'scissors',
+'scoff',
+'scold',
+'scooter',
+'scope',
+'scorch',
+'scorching',
+'score',
+'scoring',
+'scorn',
+'scorpion',
+'Scotch',
+'scotch',
+'Scotland',
+'Scots',
+'Scotsman',
+'Scotswoman',
+'Scottish',
+'scoundrel',
+'scour',
+'scout',
+'scowl',
+'scramble',
+'scrap',
+'scrape',
+'scratch',
+'scrawl',
+'scrawny',
+'scream',
+'screech',
+'screen',
+'screenplay',
+'screw',
+'screwdriver',
+'scribble',
+'scribe',
+'script',
+'scripture',
+'scriptwriter',
+'scroll',
+'scrounge',
+'scrub',
+'scrum',
+'scruple',
+'scrupulous',
+'scrutinize',
+'scrutiny',
+'scuba',
+'scuffle',
+'sculptor',
+'sculpture',
+'scum',
+'scupper',
+'scurf',
+'scurry',
+'scuttle',
+'scythe',
+'sea',
+'seafood',
+'seagull',
+'seal',
+'seam',
+'seaman',
+'seaport',
+'search',
+'seashore',
+'seasick',
+'seasickness',
+'seaside',
+'season',
+'seasoning',
+'seat',
+'seaward',
+'seaweed',
+'secession',
+'seclude',
+'secluded',
+'second',
+'secondary',
+'secondhand',
+'second-rate',
+'secrecy',
+'secret',
+'secretarial',
+'secretariat',
+'secretary',
+'secrete',
+'secretive',
+'sect',
+'sectarian',
+'section',
+'sector',
+'secular',
+'secure',
+'security',
+'sedan',
+'sedative',
+'sediment',
+'seduce',
+'seduction',
+'seductive',
+'see',
+'seed',
+'seedling',
+'seedy',
+'seek',
+'seem',
+'seemingly',
+'seep',
+'seesaw',
+'seethe',
+'segment',
+'segregate',
+'segregation',
+'seize',
+'seizure',
+'seldom',
+'select',
+'selection',
+'selective',
+'selenium',
+'self',
+'self-assured',
+'self-confidence',
+'self-conscious',
+'self-contained',
+'self-contradictory',
+'self-control',
+'self-criticism',
+'self-determination',
+'self-effacing',
+'self-employed',
+'self-evident',
+'self-government',
+'self-interest',
+'selfish',
+'selfless',
+'self-made',
+'self-opinionated',
+'self-pity',
+'self-possessed',
+'self-preservation',
+'self-reliant',
+'self-respect',
+'self-restraint',
+'self-service',
+'self-styled',
+'self-sufficient',
+'self-taught',
+'self-willed',
+'sell',
+'seller',
+'semantic',
+'semantics',
+'semblance',
+'semester',
+'semicolon',
+'seminal',
+'seminar',
+'senate',
+'senator',
+'senatorial',
+'send',
+'senile',
+'senility',
+'senior',
+'seniority',
+'sensation',
+'sensational',
+'sense',
+'senseless',
+'sensibility',
+'sensible',
+'sensitive',
+'sensitivity',
+'sensor',
+'sensory',
+'sensual',
+'sensuous',
+'sentence',
+'sentiment',
+'sentimental',
+'sentinel',
+'sentry',
+'separate',
+'separately',
+'separation',
+'separatist',
+'September',
+'sepulchre',
+'sequel',
+'sequence',
+'serenade',
+'serene',
+'serenely',
+'serenity',
+'serf',
+'sergeant',
+'serial',
+'series',
+'serious',
+'sermon',
+'serpent',
+'serrated',
+'serum',
+'servant',
+'serve',
+'service',
+'serviceable',
+'serviceman',
+'servile',
+'servility',
+'servitude',
+'sesame',
+'session',
+'set',
+'setback',
+'settee',
+'setting',
+'settle',
+'settlement',
+'settler',
+'seven',
+'seventeen',
+'seventh',
+'seventieth',
+'seventy',
+'sever',
+'several',
+'severe',
+'severity',
+'sew',
+'sewage',
+'sewer',
+'sewerage',
+'sex',
+'sexism',
+'sexist',
+'sexual',
+'sexuality',
+'sexy',
+'shabby',
+'shack',
+'shade',
+'shadow',
+'shadowy',
+'shady',
+'shaft',
+'shag',
+'shaggy',
+'shake',
+'shaky',
+'shallow',
+'sham',
+'shamble',
+'shame',
+'shamefaced',
+'shameful',
+'shameless',
+'shampoo',
+'shanghai',
+'shape',
+'shapely',
+'share',
+'shareholder',
+'shark',
+'sharp',
+'sharpen',
+'sharpener',
+'shatter',
+'shave',
+'She',
+'sheaf',
+'shear',
+'sheath',
+'shed',
+'sheen',
+'sheep',
+'sheepish',
+'sheer',
+'sheet',
+'sheikh',
+'shelf',
+'shell',
+'shellfish',
+'shelter',
+'shepherd',
+'sherry',
+'shield',
+'shift',
+'shilling',
+'shimmer',
+'shin',
+'shine',
+'shiny',
+'shipboard',
+'shipment',
+'shipping',
+'shipwreck',
+'shipyard',
+'shirk',
+'shirt',
+'shit',
+'shiver',
+'shoal',
+'shock',
+'shockproof',
+'shoddy',
+'shoe',
+'shoemaker',
+'shoot',
+'shopkeeper',
+'shoplift',
+'shopper',
+'shopping',
+'shore',
+'short',
+'shortage',
+'shortchange',
+'short-circuit',
+'shortcoming',
+'shortcut',
+'shorten',
+'shortfall',
+'shorthand',
+'shortly',
+'shorts',
+'shortsighted',
+'short-term',
+'shotgun',
+'shoulder',
+'shout',
+'show',
+'showcase',
+'showdown',
+'shower',
+'showpiece',
+'showy',
+'shred',
+'shrew',
+'shrewd',
+'shriek',
+'shrill',
+'shrimp',
+'shrine',
+'shrink',
+'shrinkage',
+'shrivel',
+'shroud',
+'shrub',
+'shrubbery',
+'shrubby',
+'shrug',
+'shudder',
+'shuffle',
+'shun',
+'shunt',
+'shut',
+'shutter',
+'shuttle',
+'sib',
+'sibling',
+'sic',
+'sicken',
+'sickening',
+'sickle',
+'sickness',
+'side',
+'sideboard',
+'sidelight',
+'sideline',
+'sidestep',
+'sidewalk',
+'sideways',
+'sidle',
+'siege',
+'sierra',
+'sieve',
+'sift',
+'sigh',
+'sight',
+'sightseeing',
+'sign',
+'signal',
+'signature',
+'signet',
+'significance',
+'significant',
+'signpost',
+'silage',
+'silence',
+'silent',
+'silhouette',
+'silica',
+'silicon',
+'silk',
+'silky',
+'silly',
+'silo',
+'silver',
+'silvery',
+'similar',
+'similarity',
+'simile',
+'simmer',
+'simple',
+'simpleton',
+'simplicity',
+'simplify',
+'simply',
+'simulate',
+'simultaneous',
+'simultaneously',
+'sin',
+'since',
+'sincere',
+'sincerity',
+'sinew',
+'sinful',
+'sing',
+'singe',
+'singer',
+'single',
+'singular',
+'sinister',
+'sink',
+'sinner',
+'sinuous',
+'siphon',
+'sir',
+'siren',
+'sirloin',
+'sister',
+'sit',
+'sitcom',
+'site',
+'situate',
+'situation',
+'sixpence',
+'sixteen',
+'sixteenth',
+'sixtieth',
+'sixty',
+'size',
+'sizeable',
+'sizzle',
+'skate',
+'skateboard',
+'skeleton',
+'skeptical',
+'sketch',
+'skid',
+'skilful',
+'skim',
+'skimmer',
+'skin',
+'skinny',
+'skip',
+'skipper',
+'skirmish',
+'skirt',
+'sky',
+'skylight',
+'skyline',
+'skyrocket',
+'skyscraper',
+'slab',
+'slack',
+'slacken',
+'slag',
+'slam',
+'slander',
+'slanderous',
+'slang',
+'slangy',
+'slant',
+'slap',
+'slash',
+'slat',
+'slate',
+'slaughter',
+'slave',
+'slavery',
+'slavish',
+'slay',
+'sleazy',
+'sledge',
+'sleek',
+'sleep',
+'sleeper',
+'sleepless',
+'sleepy',
+'sleet',
+'sleeve',
+'sleigh',
+'slender',
+'slice',
+'slick',
+'slide',
+'slight',
+'slightly',
+'slim',
+'slime',
+'slimnastics',
+'slimy',
+'sling',
+'slink',
+'slipper',
+'slippery',
+'slit',
+'slither',
+'sliver',
+'slogan',
+'slop',
+'slope',
+'slouch',
+'slowly',
+'slug',
+'sluggish',
+'slum',
+'slumber',
+'slump',
+'slur',
+'slurry',
+'sly',
+'smack',
+'small',
+'smart',
+'smash',
+'smear',
+'smell',
+'smelly',
+'smile',
+'smith',
+'smog',
+'smoke',
+'smokeless',
+'smoker',
+'smokestack',
+'smoking',
+'smoky',
+'smooth',
+'smother',
+'smoulder',
+'smudge',
+'smug',
+'smuggle',
+'snack',
+'snag',
+'snail',
+'snake',
+'snap',
+'snapshot',
+'snare',
+'snarl',
+'snatch',
+'sneak',
+'sneer',
+'sneeze',
+'snicker',
+'sniff',
+'sniffle',
+'snigger',
+'snipe',
+'sniper',
+'snivel',
+'snob',
+'snobbery',
+'snobbish',
+'snooker',
+'snooty',
+'snore',
+'snorkel',
+'snort',
+'snout',
+'snow',
+'snub',
+'snuff',
+'snug',
+'soak',
+'soap',
+'soapy',
+'soar',
+'sober',
+'sobriety',
+'soccer',
+'sociable',
+'social',
+'socialism',
+'socialist',
+'society',
+'sociological',
+'sociologist',
+'sociology',
+'sock',
+'socket',
+'soda',
+'sodium',
+'sofa',
+'soft',
+'soften',
+'softly',
+'software',
+'soggy',
+'soil',
+'sol',
+'solace',
+'solar',
+'soldier',
+'soldierly',
+'sole',
+'solely',
+'solemn',
+'solemnity',
+'solicit',
+'solicitor',
+'solid',
+'solidarity',
+'soliloquy',
+'solitary',
+'solitude',
+'solo',
+'soloist',
+'soluble',
+'solution',
+'solve',
+'solvency',
+'solvent',
+'sombre',
+'some',
+'somebody',
+'somehow',
+'someone',
+'something',
+'sometime',
+'sometimes',
+'somewhat',
+'somewhere',
+'son',
+'sonar',
+'sonata',
+'song',
+'son-in-law',
+'sonnet',
+'soon',
+'sooner',
+'soothe',
+'sophist',
+'sophisticate',
+'sophisticated',
+'sophomore',
+'soprano',
+'sordid',
+'sore',
+'sorghum',
+'sorrow',
+'sorrowful',
+'sorry',
+'sort',
+'sortie',
+'soul',
+'sound',
+'soup',
+'sour',
+'source',
+'south',
+'southeast',
+'southerly',
+'southern',
+'southward',
+'southwest',
+'souvenir',
+'sovereign',
+'sovereignty',
+'Soviet',
+'sow',
+'soy',
+'spa',
+'space',
+'spacecraft',
+'spaceship',
+'spacious',
+'spade',
+'Spain',
+'span',
+'Spaniard',
+'Spanish',
+'spanner',
+'spar',
+'spare',
+'sparingly',
+'spark',
+'sparkle',
+'sparrow',
+'sparse',
+'spasm',
+'spasmodic',
+'spate',
+'spatial',
+'spatter',
+'spawn',
+'speak',
+'speaker',
+'spear',
+'spearhead',
+'special',
+'specialist',
+'speciality',
+'specialize',
+'specially',
+'species',
+'specific',
+'specify',
+'specimen',
+'speck',
+'speckle',
+'spectacle',
+'spectacular',
+'spectator',
+'spectre',
+'spectrum',
+'speculate',
+'speculative',
+'speculator',
+'speech',
+'speed',
+'speedometer',
+'speedway',
+'spell',
+'spelling',
+'spend',
+'sperm',
+'spew',
+'sphere',
+'spice',
+'spicy',
+'spider',
+'spike',
+'spill',
+'spin',
+'spinach',
+'spindle',
+'spine',
+'spinner',
+'spinster',
+'spiral',
+'spire',
+'spirit',
+'spirited',
+'spiritual',
+'spirituality',
+'spit',
+'spite',
+'spiteful',
+'splash',
+'spleen',
+'splendid',
+'splendour',
+'splinter',
+'split',
+'splutter',
+'spoil',
+'spoken',
+'spokesman',
+'sponge',
+'sponsor',
+'spontaneous',
+'spook',
+'spoon',
+'spoonful',
+'sporadic',
+'spore',
+'sport',
+'sportsman',
+'sportsmanship',
+'sportswoman',
+'spot',
+'spotless',
+'spotlight',
+'spouse',
+'spout',
+'sprain',
+'sprawl',
+'spray',
+'spread',
+'spring',
+'springboard',
+'springlock',
+'sprinkle',
+'sprint',
+'sprout',
+'spruce',
+'spur',
+'spurious',
+'spy',
+'squabble',
+'squad',
+'squadron',
+'squalid',
+'squall',
+'squalor',
+'squander',
+'square',
+'squarely',
+'squash',
+'squat',
+'squawk',
+'squeak',
+'squeal',
+'squeamish',
+'squeeze',
+'squint',
+'squire',
+'squirm',
+'squirrel',
+'squirt',
+'stab',
+'stability',
+'stabilize',
+'stable',
+'staccato',
+'stack',
+'stadium',
+'staff',
+'stage',
+'stagger',
+'stagnant',
+'stagnation',
+'staid',
+'stain',
+'stainless',
+'stair',
+'staircase',
+'stake',
+'stale',
+'stalemate',
+'stalk',
+'stall',
+'stallion',
+'stalwart',
+'stamina',
+'stammer',
+'stamp',
+'stampede',
+'stance',
+'stand',
+'standard',
+'standardize',
+'standing',
+'standpoint',
+'standstill',
+'stanza',
+'staple',
+'stapler',
+'star',
+'starboard',
+'starch',
+'stardom',
+'stare',
+'stark',
+'starry',
+'start',
+'starter',
+'startle',
+'starvation',
+'starve',
+'state',
+'stately',
+'statement',
+'stateroom',
+'statesman',
+'static',
+'station',
+'stationary',
+'stationery',
+'statistical',
+'statistician',
+'statistics',
+'statue',
+'status',
+'statute',
+'statutory',
+'staunch',
+'stay',
+'steadfast',
+'steady',
+'steak',
+'steal',
+'stealth',
+'stealthily',
+'stealthy',
+'steam',
+'steamer',
+'steel',
+'steely',
+'steep',
+'steeple',
+'steer',
+'stem',
+'stench',
+'step',
+'stereo',
+'stereotype',
+'sterile',
+'sterility',
+'sterilize',
+'sterling',
+'stern',
+'steroid',
+'stethoscope',
+'steward',
+'stewardess',
+'stick',
+'stiff',
+'stiffen',
+'stifle',
+'stigma',
+'stile',
+'stimulant',
+'stimulate',
+'stimulation',
+'stimulus',
+'sting',
+'stink',
+'stint',
+'stipend',
+'stipulate',
+'stir',
+'stirrup',
+'stitch',
+'stock',
+'stockbroker',
+'stockholder',
+'stocking',
+'stoic',
+'stoical',
+'stoke',
+'stomach',
+'stone',
+'stoneware',
+'stony',
+'stoop',
+'stop',
+'stoppage',
+'stopper',
+'storage',
+'store',
+'storey',
+'storm',
+'story',
+'straddle',
+'straggle',
+'straight',
+'straighten',
+'straightforward',
+'strain',
+'strained',
+'strait',
+'straitlaced',
+'strand',
+'strange',
+'stranger',
+'strangle',
+'strap',
+'strategic',
+'strategist',
+'strategy',
+'stratify',
+'stratum',
+'straw',
+'strawberry',
+'stray',
+'streak',
+'stream',
+'streamline',
+'street',
+'streetcar',
+'strength',
+'strengthen',
+'strenuous',
+'stress',
+'stressful',
+'stretch',
+'stretcher',
+'strew',
+'stricken',
+'strict',
+'stricture',
+'stride',
+'strident',
+'strife',
+'strike',
+'striking',
+'string',
+'stringent',
+'strip',
+'stripe',
+'striped',
+'strive',
+'stroke',
+'stroll',
+'strong',
+'stronghold',
+'strontium',
+'structural',
+'structure',
+'struggle',
+'strut',
+'stubble',
+'stubborn',
+'student',
+'studio',
+'studious',
+'study',
+'stuffing',
+'stuffy',
+'stumble',
+'stump',
+'stun',
+'stunt',
+'stupefaction',
+'stupendous',
+'stupor',
+'sturdy',
+'stutter',
+'style',
+'stylish',
+'stylistic',
+'subconscious',
+'subdue',
+'subject',
+'subjection',
+'subjective',
+'subjectivity',
+'subjunctive',
+'sublime',
+'submarine',
+'submerge',
+'submission',
+'submissive',
+'submit',
+'subordinate',
+'subordination',
+'subscribe',
+'subsequent',
+'subside',
+'subsidiary',
+'subsidise',
+'subsidy',
+'substance',
+'substandard',
+'substantial',
+'substantiate',
+'substantive',
+'substitute',
+'substitution',
+'subtitle',
+'subtle',
+'subtlety',
+'subtly',
+'subtract',
+'subtraction',
+'suburb',
+'suburban',
+'suburbanite',
+'subversion',
+'subversive',
+'subvert',
+'subway',
+'succeed',
+'success',
+'successful',
+'succession',
+'successive',
+'successor',
+'succour',
+'succulent',
+'succumb',
+'such',
+'suck',
+'suckle',
+'suction',
+'sudden',
+'suddenly',
+'sue',
+'suffer',
+'sufferable',
+'sufferance',
+'suffering',
+'suffice',
+'sufficiency',
+'sufficient',
+'suffix',
+'suffocate',
+'suffrage',
+'sugar',
+'suggest',
+'suggestive',
+'suicidal',
+'suicide',
+'suit',
+'suitability',
+'suitable',
+'suitcase',
+'suite',
+'suitor',
+'sulfureous',
+'sulk',
+'sulky',
+'sullen',
+'sully',
+'sulphate',
+'sulphur',
+'sulphurous',
+'sultan',
+'sultry',
+'sum',
+'summarize',
+'summary',
+'summer',
+'summit',
+'summon',
+'summons',
+'sumo',
+'sumptuous',
+'sun',
+'sunbath',
+'sunbathe',
+'sunburn',
+'Sunday',
+'sundial',
+'sundry',
+'sunflower',
+'sunken',
+'sunlight',
+'sunny',
+'sunrise',
+'sunset',
+'sunshine',
+'sunstroke',
+'suntan',
+'super',
+'superb',
+'superficial',
+'superfluous',
+'superhuman',
+'superimpose',
+'superintend',
+'superintendent',
+'superior',
+'superiority',
+'superlative',
+'superman',
+'supermarket',
+'supernatural',
+'supersede',
+'supersonic',
+'superstition',
+'superstitious',
+'supervise',
+'supervision',
+'supervisor',
+'supper',
+'supplant',
+'supple',
+'supplement',
+'supplementary',
+'supply',
+'support',
+'supportive',
+'suppose',
+'supposition',
+'suppress',
+'suppression',
+'supremacy',
+'supreme',
+'surcharge',
+'sure',
+'surely',
+'surf',
+'surface',
+'surfboard',
+'surge',
+'surgeon',
+'surgery',
+'surgical',
+'surly',
+'surmount',
+'surname',
+'surpass',
+'surplus',
+'surprise',
+'surprising',
+'surreal',
+'surrealist',
+'surrender',
+'surreptitious',
+'surrogate',
+'surround',
+'surveillance',
+'survey',
+'survival',
+'survive',
+'survivor',
+'susceptibility',
+'susceptible',
+'suspect',
+'suspend',
+'suspender',
+'suspense',
+'suspension',
+'suspicion',
+'suspicious',
+'sustain',
+'sustenance',
+'swagger',
+'swallow',
+'swamp',
+'swan',
+'swap',
+'swarm',
+'swathe',
+'sway',
+'swear',
+'sweat',
+'sweater',
+'sweatshop',
+'Swede',
+'sweep',
+'sweeping',
+'sweet',
+'sweetheart',
+'swell',
+'swerve',
+'swift',
+'swim',
+'swimmer',
+'swindle',
+'swindler',
+'swine',
+'swing',
+'swipe',
+'swirl',
+'Swiss',
+'switch',
+'switchboard',
+'Switzerland',
+'swivel',
+'swollen',
+'swoop',
+'sword',
+'syllabic',
+'syllable',
+'syllabus',
+'symbol',
+'symbolic',
+'symbolism',
+'symbolize',
+'symmetric',
+'symmetry',
+'sympathetic',
+'sympathize',
+'sympathy',
+'symphonic',
+'symphony',
+'symposium',
+'symptom',
+'synagogue',
+'syndicate',
+'syndrome',
+'synonym',
+'synonymous',
+'synopsis',
+'synoptic',
+'syntactic',
+'syntax',
+'synthesis',
+'synthesize',
+'synthetic',
+'syphilis',
+'syringe',
+'syrup',
+'system',
+'systematic',
+'systematize',
+'tab',
+'table',
+'tablecloth',
+'tablet',
+'taboo',
+'tacit',
+'tacitly',
+'taciturn',
+'tackle',
+'tacky',
+'tact',
+'tactful',
+'tactic',
+'tactical',
+'tactician',
+'taffeta',
+'tag',
+'tail',
+'tailor',
+'taint',
+'take',
+'takeaway',
+'takeover',
+'tale',
+'talent',
+'talented',
+'talk',
+'talkative',
+'tall',
+'tally',
+'tame',
+'tamper',
+'tan',
+'tangent',
+'tangerine',
+'tangible',
+'tangle',
+'tank',
+'tanker',
+'tanner',
+'tannic',
+'tantalize',
+'tantamount',
+'tantrum',
+'tap',
+'tape',
+'taper',
+'tapestry',
+'tapeworm',
+'tar',
+'target',
+'tariff',
+'tarmac',
+'tarnish',
+'tarry',
+'tart',
+'tartan',
+'tartly',
+'task',
+'taste',
+'tasty',
+'tattoo',
+'tattooist',
+'taunt',
+'taut',
+'tavern',
+'tawdry',
+'tax',
+'taxation',
+'taxi',
+'tea',
+'teach',
+'teacher',
+'teacup',
+'teak',
+'team',
+'teapot',
+'tear',
+'tearful',
+'tease',
+'teaspoon',
+'technical',
+'technicality',
+'technician',
+'technique',
+'technocracy',
+'technologist',
+'technology',
+'teddy',
+'tedious',
+'tedium',
+'teem',
+'teenager',
+'teens',
+'teeter',
+'telegram',
+'telegraph',
+'telephone',
+'telescope',
+'televise',
+'television',
+'telex',
+'tell',
+'teller',
+'telling',
+'temper',
+'temperament',
+'temperamental',
+'temperate',
+'temperature',
+'temple',
+'tempo',
+'temporal',
+'temporary',
+'tempt',
+'temptation',
+'ten',
+'tenancy',
+'tenant',
+'tend',
+'tendency',
+'tender',
+'tendon',
+'tenet',
+'tennis',
+'tenor',
+'tense',
+'tensile',
+'tension',
+'tent',
+'tentative',
+'tenth',
+'tenuous',
+'tenure',
+'tepid',
+'term',
+'terminal',
+'terminate',
+'terminology',
+'terrace',
+'terra-cotta',
+'terrain',
+'terrestrial',
+'terrible',
+'terrific',
+'terrify',
+'territory',
+'terror',
+'terrorist',
+'terry',
+'terse',
+'tertiary',
+'test',
+'testament',
+'testator',
+'testify',
+'testimony',
+'tether',
+'text',
+'textbook',
+'textile',
+'textual',
+'texture',
+'than',
+'thank',
+'thankful',
+'that',
+'thatch',
+'thaw',
+'the',
+'theatre',
+'theatrical',
+'thee',
+'theft',
+'their',
+'theirs',
+'them',
+'thematic',
+'theme',
+'themselves',
+'then',
+'theologian',
+'theological',
+'theology',
+'theorem',
+'theoretical',
+'theory',
+'therapeutic',
+'therapist',
+'therapy',
+'there',
+'thereabout',
+'thereafter',
+'thereby',
+'therefore',
+'therein',
+'thereof',
+'thereto',
+'thereupon',
+'therewith',
+'thermal',
+'thermocouple',
+'thermodynamics',
+'thermometer',
+'thermonuclear',
+'thermostat',
+'thesaurus',
+'these',
+'thesis',
+'they',
+'thick',
+'thicket',
+'thick-skinned',
+'thief',
+'thigh',
+'thin',
+'thing',
+'think',
+'thinker',
+'thinking',
+'third',
+'thirst',
+'thirsty',
+'thirteen',
+'thirteenth',
+'thirtieth',
+'thirty',
+'this',
+'thistle',
+'thorn',
+'thorough',
+'thoroughbred',
+'thoroughfare',
+'those',
+'thou',
+'though',
+'thought',
+'thoughtful',
+'thoughtless',
+'thousand',
+'thousands',
+'thrash',
+'thread',
+'threadbare',
+'threat',
+'threaten',
+'three',
+'thresh',
+'threshold',
+'thrice',
+'thrift',
+'thrifty',
+'thrill',
+'thriller',
+'thrive',
+'throat',
+'throatily',
+'throb',
+'throne',
+'throng',
+'throttle',
+'through',
+'throughout',
+'throughput',
+'throw',
+'thrush',
+'thrust',
+'thud',
+'thug',
+'thumb',
+'thumbtack',
+'thump',
+'thunder',
+'thunderclap',
+'thunderous',
+'thunderstorm',
+'Thursday',
+'thus',
+'thwart',
+'thy',
+'thyroid',
+'tiara',
+'tick',
+'ticket',
+'tickle',
+'tidal',
+'tide',
+'tidy',
+'tie',
+'tier',
+'tie-up',
+'tiger',
+'tight',
+'tighten',
+'tile',
+'till',
+'tilt',
+'timber',
+'time',
+'timely',
+'timetable',
+'timid',
+'timidity',
+'tin',
+'tinder',
+'tinge',
+'tingle',
+'tinker',
+'tinkle',
+'tinny',
+'tint',
+'tiny',
+'tip',
+'tipper',
+'tiptoe',
+'tirade',
+'tire',
+'tired',
+'tiresome',
+'tissue',
+'titanic',
+'title',
+'to',
+'toad',
+'toast',
+'tobacco',
+'tobacconist',
+'today',
+'toddle',
+'toe',
+'toenail',
+'toffee',
+'together',
+'toil',
+'toilet',
+'token',
+'tolerable',
+'tolerance',
+'tolerant',
+'tolerate',
+'toleration',
+'toll',
+'tomato',
+'tomb',
+'tomorrow',
+'ton',
+'tonal',
+'tone',
+'tongs',
+'tongue',
+'tonic',
+'tonight',
+'tonnage',
+'tooth',
+'toothache',
+'toothbrush',
+'toothpaste',
+'top',
+'topic',
+'topographer',
+'topple',
+'topsoil',
+'torch',
+'torment',
+'torn',
+'tornado',
+'torpedo',
+'torrent',
+'torrential',
+'torrid',
+'torsion',
+'torso',
+'tortoise',
+'tortuous',
+'torture',
+'Tory',
+'toss',
+'total',
+'totalitarian',
+'totalitarianism',
+'totter',
+'touch',
+'touchdown',
+'touching',
+'tough',
+'tour',
+'tourism',
+'tourist',
+'tournament',
+'tout',
+'tow',
+'toward',
+'towel',
+'tower',
+'town',
+'townsfolk',
+'township',
+'townsman',
+'toxic',
+'toy',
+'trace',
+'track',
+'tract',
+'tractable',
+'tractor',
+'trade',
+'trademark',
+'tradesman',
+'tradition',
+'traditional',
+'traffic',
+'trafficker',
+'tragedian',
+'tragedy',
+'tragic',
+'trail',
+'trailer',
+'train',
+'training',
+'trait',
+'traitor',
+'tram',
+'tramp',
+'trample',
+'trance',
+'tranquil',
+'tranquility',
+'transaction',
+'transcend',
+'transcendental',
+'transcendentalism',
+'transcribe',
+'transfer',
+'transfigure',
+'transform',
+'transformation',
+'transfuse',
+'transient',
+'transistor',
+'transit',
+'transition',
+'transitive',
+'transitory',
+'translate',
+'translation',
+'translator',
+'translucent',
+'transmission',
+'transmit',
+'transmutation',
+'transmute',
+'transparency',
+'transparent',
+'transpire',
+'transplant',
+'transport',
+'transportation',
+'transpose',
+'transposition',
+'trap',
+'trash',
+'trauma',
+'travel',
+'traveller',
+'traverse',
+'trawl',
+'trawler',
+'tray',
+'treacherous',
+'treachery',
+'tread',
+'treason',
+'treasonable',
+'treasure',
+'treat',
+'treatise',
+'treatment',
+'treaty',
+'treble',
+'tree',
+'trek',
+'tremble',
+'tremendous',
+'tremor',
+'trench',
+'trend',
+'trespass',
+'trestle',
+'trial',
+'triangle',
+'triangular',
+'tribal',
+'tribe',
+'tribunal',
+'tributary',
+'tribute',
+'trick',
+'trickle',
+'tricky',
+'trifle',
+'trigger',
+'trill',
+'trilogy',
+'trim',
+'trinity',
+'trinket',
+'trio',
+'trip',
+'triple',
+'tripod',
+'tripper',
+'triumph',
+'triumphant',
+'trivia',
+'trivial',
+'trolley',
+'trombone',
+'troop',
+'trophy',
+'tropic',
+'tropical',
+'trot',
+'trouble',
+'troublemaker',
+'troubleshooter',
+'troublesome',
+'trough',
+'trounce',
+'troupe',
+'trousers',
+'trout',
+'truant',
+'truce',
+'truck',
+'trudge',
+'truism',
+'truly',
+'trump',
+'trumpet',
+'trundle',
+'trunk',
+'trust',
+'trustee',
+'trustworthy',
+'truth',
+'truthful',
+'try',
+'trying',
+'tryout',
+'tub',
+'tuba',
+'tube',
+'tuberculosis',
+'tubular',
+'tuck',
+'Tuesday',
+'tuft',
+'tug',
+'tuition',
+'tulip',
+'tumble',
+'tummy',
+'tumour',
+'tumult',
+'tuna',
+'tune',
+'tunnel',
+'turbid',
+'turbine',
+'turbot',
+'turbulence',
+'turbulent',
+'turf',
+'turkey',
+'turmoil',
+'turn',
+'turner',
+'turning',
+'turnip',
+'turnout',
+'turnover',
+'turnpike',
+'turret',
+'turtle',
+'turtleneck',
+'tutelage',
+'tutor',
+'tutorial',
+'tweed',
+'twelfth',
+'twelve',
+'twentieth',
+'twenty',
+'twice',
+'twig',
+'twilight',
+'twin',
+'twinkle',
+'twirl',
+'twist',
+'twitch',
+'two',
+'type',
+'typewriter',
+'typhoon',
+'typical',
+'typist',
+'typographical',
+'typography',
+'tyrannical',
+'tyrannize',
+'tyranny',
+'tyrant',
+'Tyre',
+'ubiquitous',
+'UFO',
+'ugly',
+'ulcer',
+'ulterior',
+'ultimate',
+'ultimatum',
+'ultrasonic',
+'ultrasound',
+'ultraviolet',
+'umbrella',
+'umpire',
+'unabashed',
+'unabated',
+'unable',
+'unacceptable',
+'unaccountable',
+'unaffected',
+'unanimous',
+'unashamed',
+'unassuming',
+'unaware',
+'unawares',
+'unbearable',
+'unbecoming',
+'unbelievable',
+'uncanny',
+'unceremonious',
+'uncertain',
+'uncharitable',
+'uncle',
+'uncomfortable',
+'uncompromising',
+'unconcern',
+'unconditional',
+'unconscious',
+'uncooperative',
+'uncouth',
+'uncover',
+'under',
+'underachieve',
+'underbrush',
+'undercharge',
+'underclass',
+'undercover',
+'undercut',
+'underdeveloped',
+'underdog',
+'underdone',
+'underestimate',
+'undergo',
+'undergraduate',
+'underground',
+'undergrowth',
+'underhand',
+'underlie',
+'underline',
+'underling',
+'undermine',
+'underneath',
+'underpass',
+'underprivileged',
+'undersell',
+'underside',
+'understand',
+'understandable',
+'understanding',
+'understate',
+'understudy',
+'undertake',
+'undertaker',
+'underwater',
+'underwear',
+'underworld',
+'underwrite',
+'undesirable',
+'undignified',
+'undo',
+'undoubted',
+'undue',
+'undulate',
+'unduly',
+'unearth',
+'uneasiness',
+'uneasy',
+'uneatable',
+'uneducated',
+'unemployed',
+'unemployment',
+'unequivocal',
+'unethical',
+'uneven',
+'unexpected',
+'unfailing',
+'unfair',
+'unfaithful',
+'unfamiliar',
+'unfathomable',
+'unfold',
+'unforeseen',
+'unforgettable',
+'unfortunate',
+'ungainly',
+'ungodly',
+'ungracious',
+'ungrateful',
+'unhappy',
+'unhealthy',
+'unheard-of',
+'unicorn',
+'uniform',
+'unify',
+'unilateral',
+'uninformed',
+'unintelligible',
+'uninviting',
+'union',
+'unique',
+'unisex',
+'unison',
+'unit',
+'unite',
+'united',
+'unity',
+'universal',
+'universe',
+'university',
+'unjust',
+'unkempt',
+'unkind',
+'unknown',
+'unlawful',
+'unleash',
+'unless',
+'unlike',
+'unlikely',
+'unlimited',
+'unlisted',
+'unload',
+'unlock',
+'unnatural',
+'unnecessary',
+'unnerve',
+'unobtrusive',
+'unoccupied',
+'unofficial',
+'unorthodox',
+'unpack',
+'unpalatable',
+'unparalleled',
+'unpleasant',
+'unplug',
+'unpopular',
+'unprecedented',
+'unpredictable',
+'unprejudiced',
+'unpretentious',
+'unprincipled',
+'unprofessional',
+'unqualified',
+'unquestionable',
+'unquestioning',
+'unravel',
+'unreal',
+'unreasonable',
+'unrelenting',
+'unremitting',
+'unrest',
+'unruly',
+'unscrew',
+'unseemly',
+'unsettle',
+'unsettled',
+'unsightly',
+'unskilled',
+'unsociable',
+'unsuspecting',
+'unswerving',
+'untenable',
+'untidy',
+'untie',
+'until',
+'untimely',
+'untiring',
+'untold',
+'untouchable',
+'untruth',
+'unusual',
+'unveil',
+'unwieldy',
+'unwilling',
+'unwind',
+'unwise',
+'unwitting',
+'unworldly',
+'up',
+'upbringing',
+'upcoming',
+'update',
+'upfront',
+'upgrade',
+'upheaval',
+'uphold',
+'upholster',
+'upkeep',
+'uplift',
+'upon',
+'upper',
+'upright',
+'uprising',
+'uproar',
+'uproot',
+'upset',
+'upside',
+'upstairs',
+'upstart',
+'upstream',
+'upsurge',
+'up-to-date',
+'uptown',
+'upward',
+'uranium',
+'urban',
+'urge',
+'urgent',
+'urinate',
+'urine',
+'US',
+'usage',
+'use',
+'used',
+'useful',
+'useless',
+'user',
+'usher',
+'usual',
+'usually',
+'usurer',
+'usurp',
+'utensil',
+'utilitarian',
+'utility',
+'utilize',
+'utmost',
+'Utopia',
+'utter',
+'vacancy',
+'vacant',
+'vacate',
+'vacation',
+'vaccinate',
+'vaccination',
+'vaccine',
+'vacuum',
+'vagabond',
+'vagrant',
+'vague',
+'vaguely',
+'vain',
+'Valentine',
+'valet',
+'valiant',
+'valid',
+'validate',
+'validity',
+'valley',
+'valour',
+'valuable',
+'value',
+'valve',
+'van',
+'vandal',
+'vandalism',
+'vanguard',
+'vanilla',
+'vanish',
+'vanity',
+'vanquish',
+'vantage',
+'vaporize',
+'vapour',
+'variable',
+'variant',
+'variation',
+'varicose',
+'variety',
+'various',
+'vary',
+'vase',
+'vast',
+'vat',
+'vault',
+'veal',
+'veer',
+'vegetable',
+'vegetarian',
+'vegetation',
+'vehement',
+'vehicle',
+'veil',
+'vein',
+'velocity',
+'velvet',
+'vendor',
+'venerable',
+'venerate',
+'venereal',
+'vengeance',
+'vengeful',
+'venison',
+'venom',
+'venomous',
+'vent',
+'ventilate',
+'ventilation',
+'ventilator',
+'ventral',
+'ventricle',
+'ventricular',
+'venture',
+'venue',
+'Venus',
+'veranda',
+'verb',
+'verbal',
+'verbatim',
+'verdict',
+'verdure',
+'verge',
+'verify',
+'veritable',
+'vermin',
+'vernacular',
+'vernal',
+'versatile',
+'versatility',
+'verse',
+'version',
+'versus',
+'vertebrate',
+'vertex',
+'vertical',
+'vertically',
+'vertices',
+'verve',
+'very',
+'vessel',
+'vest',
+'vestige',
+'vet',
+'veteran',
+'veterinary',
+'veto',
+'vex',
+'vexation',
+'vexatious',
+'via',
+'viable',
+'vial',
+'vibrant',
+'vibrate',
+'vibration',
+'vicar',
+'vicarage',
+'vicarious',
+'vicariously',
+'vice',
+'vicinity',
+'vicious',
+'viciousness',
+'victim',
+'victimize',
+'victor',
+'victorious',
+'victory',
+'video',
+'videophone',
+'vie',
+'view',
+'viewfinder',
+'viewpoint',
+'vigil',
+'vigilant',
+'vignette',
+'vigorous',
+'vigour',
+'vile',
+'villa',
+'village',
+'villager',
+'villain',
+'villainous',
+'vindicate',
+'vindictive',
+'vine',
+'vinegar',
+'vineyard',
+'vintage',
+'viola',
+'violate',
+'violation',
+'violence',
+'violent',
+'violet',
+'violin',
+'violinist',
+'VIP',
+'viral',
+'virgin',
+'virginal',
+'virile',
+'virtually',
+'virtue',
+'virtuous',
+'virulent',
+'virus',
+'visa',
+'visage',
+'viscera',
+'viscount',
+'visibility',
+'visible',
+'vision',
+'visionary',
+'visit',
+'visitation',
+'visitor',
+'vista',
+'visual',
+'visualize',
+'vital',
+'vitality',
+'vitalize',
+'vitamin',
+'vivacity',
+'vivid',
+'vocabulary',
+'vocal',
+'vocalist',
+'vocalization',
+'vocally',
+'vocation',
+'vocative',
+'vodka',
+'vogue',
+'voice',
+'void',
+'volatile',
+'volatility',
+'volcano',
+'volitional',
+'volleyball',
+'volt',
+'voltage',
+'voluble',
+'volume',
+'voluminous',
+'voluntary',
+'volunteer',
+'vomit',
+'vortex',
+'vote',
+'voter',
+'voucher',
+'vow',
+'vowel',
+'voyage',
+'vulgar',
+'vulgarity',
+'vulnerable',
+'vulture',
+'waddle',
+'wade',
+'wafer',
+'wag',
+'wage',
+'wagon',
+'wail',
+'waist',
+'waistcoat',
+'wait',
+'waiter',
+'waitress',
+'waive',
+'wake',
+'waken',
+'walk',
+'walkway',
+'wall',
+'wallet',
+'wallow',
+'walnut',
+'waltz',
+'wand',
+'wander',
+'wane',
+'want',
+'wanton',
+'war',
+'ward',
+'wardrobe',
+'warehouse',
+'warfare',
+'warhead',
+'warlike',
+'warlord',
+'warm',
+'warmth',
+'warn',
+'warning',
+'warp',
+'warrant',
+'warranty',
+'warrior',
+'warship',
+'wartime',
+'wary',
+'was',
+'wash',
+'washing',
+'wasp',
+'waste',
+'watch',
+'water',
+'watercolor',
+'waterfall',
+'waterfront',
+'watermark',
+'watermelon',
+'waterproof',
+'watershed',
+'watertight',
+'waterway',
+'watery',
+'watt',
+'wave',
+'waver',
+'wax',
+'way',
+'wayward',
+'we',
+'weak',
+'weaken',
+'weakness',
+'wealth',
+'wealthy',
+'wean',
+'weapon',
+'weaponry',
+'wear',
+'wearily',
+'weary',
+'weather',
+'weave',
+'web',
+'wed',
+'wedding',
+'wedge',
+'Wednesday',
+'weed',
+'week',
+'weekday',
+'weekend',
+'weekly',
+'weep',
+'weigh',
+'weight',
+'weighty',
+'weird',
+'welcome',
+'weld',
+'welfare',
+'well',
+'well-being',
+'well-known',
+'well-to-do',
+'Welsh',
+'were',
+'west',
+'western',
+'westward',
+'wet',
+'whack',
+'whale',
+'wharf',
+'what',
+'whatever',
+'wheat',
+'wheel',
+'when',
+'whenever',
+'where',
+'whereabouts',
+'whereas',
+'whereby',
+'wherever',
+'whether',
+'which',
+'whichever',
+'whiff',
+'while',
+'whim',
+'whimsical',
+'whip',
+'whirl',
+'whirlwind',
+'whisk',
+'whisker',
+'whiskey',
+'whisky',
+'whisper',
+'whistle',
+'white',
+'whiten',
+'whitewash',
+'whizz',
+'who',
+'whoever',
+'whole',
+'wholesale',
+'wholesome',
+'wholly',
+'whom',
+'whoop',
+'whose',
+'why',
+'wick',
+'wicked',
+'wicker',
+'wide',
+'widen',
+'widespread',
+'widow',
+'width',
+'wield',
+'wife',
+'wig',
+'wiggle',
+'wild',
+'will',
+'willing',
+'willow',
+'willpower',
+'wilt',
+'wily',
+'win',
+'wince',
+'wind',
+'windfall',
+'windmill',
+'window',
+'windscreen',
+'windy',
+'wine',
+'wing',
+'wink',
+'winner',
+'winter',
+'wipe',
+'wire',
+'wisdom',
+'wise',
+'wish',
+'wisp',
+'wit',
+'witch',
+'witchcraft',
+'with',
+'withdraw',
+'withdrawal',
+'wither',
+'withhold',
+'within',
+'without',
+'withstand',
+'witness',
+'witty',
+'wizard',
+'wobble',
+'woe',
+'woeful',
+'wolf',
+'woman',
+'womanliness',
+'womanly',
+'wonder',
+'wonderful',
+'woo',
+'wood',
+'wooden',
+'wool',
+'woolen',
+'woollen',
+'word',
+'wording',
+'work',
+'workbook',
+'worker',
+'workload',
+'workman',
+'workshop',
+'world',
+'worm',
+'worried',
+'worry',
+'worse',
+'worship',
+'worst',
+'worth',
+'worthless',
+'worthwhile',
+'worthy',
+'would',
+'wound',
+'wrap',
+'wrapper',
+'wrath',
+'wreath',
+'wreathe',
+'wreck',
+'wreckage',
+'wrench',
+'wrest',
+'wrestle',
+'wrestling',
+'wretched',
+'wriggle',
+'wring',
+'wrinkle',
+'wrist',
+'write',
+'writer',
+'writhe',
+'writing',
+'wrong',
+'wry',
+'xenophobia',
+'Xerox',
+'X-ray',
+'yacht',
+'Yahoo',
+'yank',
+'Yankee',
+'yard',
+'yardstick',
+'yarn',
+'yawn',
+'year',
+'yearly',
+'yearn',
+'yeast',
+'yell',
+'yellow',
+'yeoman',
+'yes',
+'yesterday',
+'yet',
+'yield',
+'yoga',
+'yoghourt',
+'yoghurt',
+'yogurt',
+'yolk',
+'you',
+'young',
+'youngster',
+'your',
+'yours',
+'yourself',
+'youth',
+'youthful',
+'yummy',
+'yuppie',
+'zany',
+'zeal',
+'zealot',
+'zealous',
+'zebra',
+'zenith',
+'zero',
+'zest',
+'zigzag',
+'zinc',
+'Zionism',
+'zip',
+'zipper',
+'zone',
+'zoo',
+'zoologist',
+'zoology',
+'zoom',
+'Zulu'
+]
+
+module.exports = {
+ wordList: word_list
+}
\ No newline at end of file
diff --git a/data/zy8.js b/data/zy8.js
new file mode 100644
index 0000000..99cc6d4
--- /dev/null
+++ b/data/zy8.js
@@ -0,0 +1,230 @@
+var word_list=[
+ 'bargain', 'ramage', 'void', 'imotent', 'saient',
+ 'suy', 'devious', 'utimate', 'rincie', 'bearing', 'indiscriminate', 'formative', 'refer', 'imromtuad', 'acumen', 'issue', 'mandate',
+ 'deicacy', 'range',
+
+ 'sabotage', 'tumbe',
+ 'articuar', 'ose', 'humiity', 'refect', 'assiduous', 'uift',
+ 'suerior', 'outgoing', 'aborious', 'dismante', 'begrudge;', 'dumbfound', 'inveterate', 'accountabe', 'trudge', 'incendiary', 'ascribe', 'rotrude', 'conscience',
+ 'incubate', 'wreckage', 'recou', 'accaim', 'evoke', 'exemify', 'barricade', 'neurosis', 'fiddy', 'acrimony', 'admit',
+ 'adjudicate', 'fog', 'insuar', 'fex', 'furtive', 'entwine', 'mediate', 'ease',
+ 'neuroogica', 'ausicious', 'strange',
+ 'transmute', 'withstand', 'wag', 'necessitate', 'inciient', 'traverse', 'henecked', 'infict', 'comexion', 'immobie', 'derecate', 'naturaize', 'muck', 'abreastad', 'rone', 'aroe', 'restore', 'rouse', 'jest', 'affict', 'jeoardize', 'daunt', 'ant', 'victimize',
+ 'connote', 'curtai', 'scae', 'brash', 'erihery', 'gentiity', 'negate', 'interserse', 'nostagia', 'scraw', 'founder', 'inexicabe',
+ 'account', 'emhasis', 'ean', 'archaic', 'genia', 'encounter', 'stereotye',
+ 'aggravate', 'adamant', 'erfunctory;', 'oerationa', 'artiaity', 'hudde', 'evity', 'resent', 'ubiquitous', 'eigibe', 'decimate', 'attach', 'outreach', 'exress', 'egaize', 'heady', 'fuzzy', 'ament', 'means', 'quaity', 'buky', 'baffe', 'bewitch', 'animate',
+ 'inarticuate',
+
+ 'nudge', 'gaze', 'remove', 'negotiabe', 'fervour', 'gratuitous', 'scuer', 'vogue', 'ervert',
+ 'estrange', 'abdicate', 'feature:', 'suy', 'rod', 'convoy', 'hubbub', 'ersist', 'booteg', 'mimic',
+
+ 'exacerbate', 'du',
+ 'esoteric', 'babbe', 'sar', 'grumy', 'secretive', 'histrionic', 'ositive', 'forcibe', 'tit', 'mind',
+ 'debase', 'eschew',
+ 'gesticuate', 'juvenie', 'mirage', 'demean', 'wince', 'araise', 'befit',
+ 'nonchaant', 'crytic', 'mitigate', 'torrid', 'imregnate', 'rearation', 'mandatory', 'embrace', 'evict', 'ostentatious', 'offensive', 'autograh', 'satiate', 'understudy', 'edgy', 'suffice', 'froth',
+ 'woe', 'har', 'conjure',
+
+ 'infirm',
+ 'fugitive', 'disseminate', 'maniac', 'crave',
+ 'secuate', 'ucrative', 'hande', 'airborne', 'eager', 'roortion', 'chivary',
+ 'generate', 'conscrit', 'disosa', 'rofess', 'imious', 'rinse', 'entrust', 'haucinate', 'amicabe',
+ 'invidious', 'candid', 'accord', 'avenge', 'vitaize', 'facie', 'quaint', 'desoi', 'maim', 'enaize', 'imeri', 'soace', 'trunde', 'extraoate', 'indurtsbe', 'eectrocute', 'interminabe', 'rey', 'mastermind', 'theretoad', 'cycica', 'notoriety', 'abound', 'ermeate',
+ 'credibiity', 'hahazard', 'rejuvenate', 'diverge', 'funk', 'unsette', 'imede', 'famiiar', 'existence', 'horrid', 'usur', 'veer', 'redoent', 'caim',
+ 'downhi', 'obscenity', 'aend', 'fiia', 'exonerate', 'stragge', 'reason',
+ 'etha',
+ 'intoxicate', 'ukewarm', 'antagonize', 'ominous', 'ace', 'crunch', 'adverse', 'roceeding',
+ 'conversant', 'wit', 'athoogica', 'favor', 'cardina', 'juxtaose', 'bod', 'heretoforead', 'rease', 'threat', 'faiing', 're', 'obsoete', 'reent', 'amagamate', 'disjointed',
+ 'ruin', 'crooked', 'dexterity', 'entite', 'imbute', 'overt', 'dither', 'transire:',
+ 'introsection', 'sweeing', 'downstreamad', 'exercise',
+ 'amer', 'brevity', 'incaacitate', 'configuration', 'squash', 'overtake', 'accrue', 'certain',
+ 'gum', 'irritant', 'animosity', 'eretrate', 'fasity', 'reute', 'bemish', 'surcharge', 'smear', 'faraway', 'jugge', 'monumenta', 'immateria', 'eniven', 'fimsy', 'henomena', 'insurgent', 'fasify', 'gavanize', 'remunerate', 'adet', 'congenita', 'meditate',
+ 'subject', 'nautica', 'innocent', 'beguie', 'stuffy', 'infexibe', 'imetuous', 'squa',
+ 'reimburse', 'embody', 'reciitate', 'fray', 'demoraize', 'addictive', 'arehend', 'oncoming', 'rowess', 'remark', 'uncharitabe', 'vindicate', 'comusion', 'honour',
+ 'devoid', 'osture', 'ay', 'urge', 'redemtion', 'vet', 'instigate', 'ingorious', 'horseay', 'bogge', 'vengefu', 'humdrum', 'manifestation', 'deress', 'acify', 'exude', 'verbatimad', 'waver', 'deuge', 'rebound', 'concede', 'cudde', 'threadbare', 'snigger',
+ 'imassioned', 'hae', 'stress',
+ 'sohisticate', 'vanquish', 'incisive', 'outandish', 'deart', 'fabricate', 'bunder', 'decare', 'meticuous', 'maign', 'savage', 'ratte', 'o', 'discernibe', 'radiant',
+ 'nab',
+ 'sot', 'hard-boied', 'ingratiate', 'ending', 're', 'robust', 'tyrannize', 'quiver', 'affiiate', 'mundane', 'enumerate', 'awesome', 'incomatibe', 'iberty;', 'eitome', 'writhe', 'concord', 'hoax', 'dank', 'fraught', 'tan',
+ 'ferocity', 'sniffe',
+ 'overook', 'rodigy', 'yied', 'boost', 'intimidate', 'enthrone', 'vex', 'intimacy', 'ecotic', 'daft', 'indigenous', 'infammabe', 'eave',
+ 'cuminate', 'coherent', 'fawess', 'vice', 'dote', 'deete', 'ouent', 'resort', 'grove',
+ 'hash',
+ 'detonate', 'vie', 'imoverish', 'utmost', 'strenuous', 'cutter', 'categorica', 'forge', 'sanctify', 'interject', 'rabid', 'itinerant', 'hyeractive', 'foresta', 'shunt', 'intractabe', 'fictitious', 'identify', 'satter', 'furry',
+ 'jot',
+ 'ester', 'ensconce', 'rominence', 'vagrant', 'disavow', 'encumber', 'grisy', 'brusque', 'orthodoxy', 'emend', 'invaidate', 'inocuate', 'firt', 'gravitate',
+ 'disentange', 'sovent', 'snie', 'invoice', 'uncouth', 'gaantry', 'nomadic', 'desiccate', 'augment',
+ 'jeer', 'grotesque', 'intreid', 'gauge', 'segregation', 'deve', 'astrayad',
+ 'motey', 'rut', 'equivoca', 'inch', 'event', 'savour', 'affection', 'majestic', 'ascendant', 'reegate', 'jumbe', 'suscetibe', 'beie', 'comosite',
+ 'incarnate', 'indoctrinate', 'misgiving', 'imassive', 'caamity', 'exicabe', 'egisate', 'docie', 'exansive', 'destitute', 'feign', 'disirited', 'meander', 'margina', 'accessibe', 'gobbe', 'charitabe', 'imrint',
+ 'incese', 'soi', 'subside',
+ 'hamstring',
+ 'indeibe', 'terse', 'ceanse', 'denominate', 'discerning', 'gossi',
+ 'hianthroic', 'inordinate', 'ethic', 'miitant',
+ 'eriodic', 'ime', 'decorous', 'cativity', 'combustibe', 'disenchant', 'cajoe', 'gruesome', 'rotoco', 'override', 'unrave', 'nuance',
+ 'tend', 'standing', 'hurte', 'serviceabe', 'deirious', 'fabby', 'gnared', 'caous', 'infringe', 'retard', 'aramount', 'substantiate', 'ineffectua', 'fastidious', 'scoff', 'nurture', 'consist', 'decoy', 'twitch', 'momentous', 'underwrite',
+ 'transcribe', 'aure',
+ 'irretrievabe', 'modify', 'infow', 'vent', 'rig',
+ 'shatter', 'rocure', 'rocedura', 'ead', 'gee', 'knead', 'bur', 'squea', 'accede', 'invoke',
+ 'awkward', 'arrest', 'schematize', 'shroud',
+ 'viabe', 'unduyad', 'tatters', 'n', 'thum', 'gaant', 'ravish', 'savish', 'erk', 'n,', 'misconduct', 'so', 'faow', 'cerebra', 'moisturize', 'inquire', 'rovident', 'snub', 'drench', 'confide', 'covert', 'brunt', 'occur', 'desicabeadj', 'irradiate', 'soradic',
+ 'deore', 'harass', 'vicinity', 'dwe', 'arbitrate', 'dormant', 'fidding', 'harbinger', 'imercetibe', 'inestimabe', 'mercantie', 'horrendous', 'understate',
+ 'gae', 'imound', 'commit', 'exedite', 'insoent', 'doubt',
+ 'ehemera', 'beasty', 'ossess',
+ 'humbug', 'coo', 'severity', 'graft', 'warranty', 'skinny', 'seazy', 'indemnify', 'disocate', 'fracture', 'sober', 'trounce', 'command', 'subordinate',
+ 'inborn', 'reeent',
+ 'quarantine', 'aboish', 'assai', 'rove',
+ 'aroach', 'uneash', 'unscrew', 'accordingad', 'defie', 'stow', 'umire', 'ambivaent', 'grae', 'emaciated', 'imart', 'counterfeit', 'vie', 'ernicious', 'hew', 'encomass', 'aude', 'candestine', 'stee', 'congenia', 'gogge', 'fritter', 'hobnob', 'imbibe',
+ 'absorb', 'tantaize', 'aosite',
+
+ 'favor',
+
+ 'hinge', 'badger', 'hyocrisy', 'incontrovertibe', 'inquisitive', 'reverence', 'imrudent', 'atrocious', 'nag', 'sue', 'revere',
+ 'rake', 'obese', 'resume', 'mau', 'refurbish', 'canvass', 'atronage', 'credit', 'asire', 'rumbe', 'bind', 'hereof', 'decaim', 'unnerve', 'mediocre', 'behaf', 'abase', 'stint', 'quash', 'fortuitous',
+ 'idyic', 'maignant', 'intuitive', 'rovisiona', 'anaesthetic', 'ragmatic', 'neurotic', 'inconceivabe', 'discaim', 'doe', 'defate', 'referentia', 'circumstantia',
+ 'invountary', 'hefty', 'ornate', 'finicky', 'confer', 'roagate', 'funky', 'fiendish', 'ore',
+ 'anoramic', 'zest', 'regret', 'unduate', 'insist', 'abduct', 'mutitude', 'moe', 'con', 'tentative', 'scrounge', 'wade', 'ure', 'uniatera', 'contro', 'arduous', 'miscarriage',
+ 'ficker', 'doom', 'hagge',
+ 'fumbe', 'fetid', 'ersecute', 'sraw', 'hoocaust', 'zoom',
+
+ 'utter', 'assent', 'audibe', 'ave', 'aby', 'survey', 'war',
+ 'aduterate', 'embezze', 'evince', 'moify',
+ 'buste', 'strut', 'intercession', 'comatibe', 'secude',
+
+ 'roost', 'ristine', 'intent', 'homogeneous', 'circumvent', 'eude', 'extremity', 'revert',
+ 'counteract', 'disose',
+ 'advent', 'momentary', 'tarnish', 'arody', 'trait', 'infantie', 'aergic', 'anguish', 'hackneyed', 'assimiate', 'anguid', 'in-deth', 'unreenting',
+ 'atronize', 'headstrong', 'eicit', 'scow', 'squaid', 'articuate', 'urch',
+ 'oust', 'wigge', 'succession', 'fecund', 'conduct',
+
+ 'misceaneous', 'ight', 'cear', 'herein', 'unitive', 'subime', 'aabe', 'immerse', 'feckess', 'abaze', 'comosure', 'ay', 'interock',
+ 'exto', 'outright', 'ingrained', 'nebuous', 'abject', 'quench', 'fraterna', 'eject', 'eretuate', 'erish', 'irreversibe', 'squirm', 'coude', 'comarison', 'remit',
+
+ 'ertinent', 'throtte', 'swie', 'coy', 'definitive',
+ 'comunction', 'derogatory', 'interay', 'casua', 'discount', 'vista',
+ 'reress', 'moest', 'vaidate', 'totter', 'insurmountabe', 'detai', 'uminous', 'vestige', 'extract', 'inhibit', 'evermore', 'wedge', 'searate',
+ 'rack', 'srint', 'tresass',
+
+ 'indistinguishabe', 'trick', 'aay', 'unbecoming',
+
+ 'strew', 'iminge', 'oiter', 'benign', 'jubiant', 'imetus', 'egendary',
+ 'thereuon', 'momentum', 'menia', 'foi', 'foow', 'irresective', 'reshuffe', 'reguarity', 'forebode', 'fervent', 'interface',
+ 'hereafter', 'imersonate', 'bear', 'teing',
+ 'entai', 'resumtion', 'arry', 'negigent', 'oach', 'backfire',
+
+ 'exhort', 'congested', 'gean', 'astora', 'hierarchy', 'frisk', 'atchy', 'fush', 'site', 'exterminate', 'adat', 'matricuate',
+ 'adorn', 'redress', 'forage', 'snive', 'avid', 'indigestion', 'effect', 'stiuate', 'roiferation', 'indict', 'assorted', 'comementary', 'consire', 'booze', 'coate', 'discreet', 'wean', 'forid', 'wobbe', 'cede', 'adroit', 'omous',
+ 'engender', 'ecuiar', 'margin',
+ 'germinate', 'engross', 'sur', 'consensus', 'dissension', 'tinge', 'devove', 'burst', 'ascertain', 'rambe', 'mesmerize', 'quam', 'devastate', 'ufront', 'downright', 'brain',
+ 'gentee',
+ 'caita', 'drowse', 'ooze', 'reica', 'ious', 'rototye', 'absent', 'symtom', 'imenetrabe', 'agitate', 'tarry', 'hiccu', 'hiccough', 'medde', 'dawde', 'rue',
+
+ 'inferna', 'affabe', 'audacious', 'stamede', 'et', 'beat', 'ruste', 'debit', 'hibernate', 'faze', 'fighty', 'esouse', 'indoent', 'zenith', 'u', 'itera', 'exaserate', 'hot-booded',
+ 'imertinent', 'crease', 'cohesive', 'inteigibe', 'heed', 'devout', 'otency', 'coexist', 'wreck', 'equitabe', 'enrage', 'abstain', 'servie', 'exuberant', 'rivet', 'inexorabe', 'nimbe', 'degrade', 'cumbersome', 'meager',
+ 'cativate', 'kee', 'breath', 'resect', 'essence', 'admissibe', 'veritabe', 'famboyant', 'haywire', 'fororn', 'befa', 'rofiteer', 'debiitate', 'ebb', 'stretch', 'recomense', 'exedient',
+ 'hidebound', 'confate', 'see', 'artake', 'scuffe', 'resutant', 'voatie',
+
+ 'facet', 'oathe', 'eementa', 'vioate', 'squawk', 'decry', 'taint', 'resigned', 'mercy', 'due', 'shuffe', 'obscene',
+ 'banish', 'misbehave', 'observant', 'arise', 'ertain', 'catter', 'cringe', 'whitewash', 'reudiate',
+ 'consummate', 'affinity', 'obscurity', 'trying', 'ouarize', 'futiity', 'faunt', 'bogus', 'ax', 'fester', 'deform', 'advocacy', 'itch',
+ 'grant',
+ 'withdraw', 'abiding', 'erudite', 'frantic',
+
+ 'debit', 'doode', 'ignobe', 'agie', 'indisutabe', 'exat', 'inoint', 'substantia', 'unwind',
+
+
+ 'tractabe', 'negigibe', 'bombard', 'with', 'innate', 'defect', 'immacuate', 'downhearted', 'abominabe', 'exound', 'disarate', 'eek', 'incite', 'strain',
+
+ 'drone', 'deface', 'sketch',
+ 'shanghai',
+
+ 'inexhaustibe', 'instantaneous', 'attrition', 'idiosyncrasy', 'detest', 'accident', 'revaent', 'intern', 'outcast', 'evove', 'imartia', 'seedy', 'scrutinize', 'acute',
+ 'imore', 'bamy', 'bountifu', 'remiere', 'certify',
+ 'irrevocabe', 'avert', 'invunerabe', 'neutraize', 'abort', 'oignant', 'tributary', 'enigmatic', 'temora', 'fitfu', 'bana', 'insidious', 'ersonify', 'urk', 'mortaity', 'defraud', 'frivoous', 'concur', 'giddy', 'bash', 'surious',
+ 'indubitabe', 'ecectic', 'waow', 'caress', 'exroriate', 'knack', 'censor', 'disservice', 'ubiquitousness', 'aart', 'abide', 'erturb', 'meek', 'usurge', 'deineate', 'ree', 'recurrent', 'sense',
+
+ 'masquerade',
+ 'outay', 'wrest', 'degenerate', 'antiathy', 'iteray', 'exhiarate', 'juncture', 'imicit',
+
+ 'rudent', 'buff', 'materiaize', 'radianty', 'underse', 'consign', 'restitution',
+ 'interose', 'rein', 'sustain', 'dehydrate', 'disinterested', 'contrive', 'extort', 'incoming', 'feeting', 'infirmity', 'aease', 'trame', 'mania', 'headway', 'nomina', 'evade', 'inet', 'incur', 'subscribe', 'obsess', 'squint', 'makeshift',
+ 'emathy', 'ageant', 'conciiate', 'resume', 'eement',
+ 'hobbe', 'sundry', 'bashfu', 'fiasco', 'afoot', 'fagrant', 'harness',
+ 'insiid', 'deviate', 'seek', 'fractious', 'methodica', 'acknowedge', 'fingerti', 'jumbo',
+ 'sag', 'emower', 'quibbe', 'countenance', 'mudde', 'granuar', 'uxuriant', 'feverish', 'reieve', 'mutiy', 'anew', 'imrovise', 'recine', 'iterate', 'aggrieved', 'foreshadow', 'undercharge', 'overstate', 'ignominy', 'batant',
+ 'demonstrabe', 'defuse', 'erious', 'fiant', 'rat', 'endorse',
+ 'seethe', 'chuck', 'wary', 'roceed', 'iquidate', 'cracke', 'roximity', 'ostuate', 'muse', 'huking', 'enient', 'disconcert', 'amass', 'communicate',
+ 'sasm',
+ 'obesity', 'coerce', 'ordain', 'deify', 'sautary', 'etherea',
+
+ 'contend', 'imerious', 'redundant',
+ 'discretion', 'numb', 'caow', 'intricacy', 'myriad', 'ight', 'whoo',
+ 'obsessive', 'transfer', 'evacuate', 'bicker', 'chic', 'bak', 'infame', 'mercenary', 'harrowing', 'disadvantage',
+
+ 'unfaiing', 'snar', 'damen', 'ruture',
+ 'carven',
+ 'scanty', 'highbrow', 'recount', 'corrugate', 'ermissibe', 'crux', 'gurge', 'fortify', 'rectify', 'faint',
+
+ 'viruent', 'tantamount', 'incumbent', 'unaccountabe',
+ 'energize', 'simuate', 'imant', 'commensurate', 'incursion',
+ 'feint', 'imit', 'rerimand', 'insta', 'irreverent', 'gaunt', 'convertibe', 'tinker', 'extricate', 'haste', 'havoc', 'squabbe', 'grandiose', 'joste', 'overshadow', 'sterie',
+
+ 'oerative', 'communicabe', 'hat',
+ 'curt', 'factitious', 'remature', 'warrant', 'scavenge',
+ 'cowardice', 'intrusive', 'gruff', 'entity', 'caituate', 'trust', 'covet', 'swear', 'aboveboard', 'benevoent', 'transient', 'matrix', 'suk', 'sovereign',
+ 'aradoxica', 'hye', 'deuxe', 'generic', 'equabe', 'raft', 'deosit', 'shirk', 'interfere', 'banch', 'butt', 'deem', 'incriminate', 'attribute',
+ 'tumutuous',
+ 'farsighted', 'imacabe', 'irk', 'hectic', 'embroi', 'uroot', 'interude', 'que', 'overwhem', 'magnitude', 'recur', 'discredit', 'reenish', 'unaatabe', 'fai', 'maractice', 'umb', 'distraught', 'affront', 'secrete', 'gri',
+ 'disrove', 'undertake', 'vaut', 'quai', 'irreconciabe', 'ni', 'summit', 'forbidding', 'fur', 'sum', 'indeterminate', 'dissove',
+ 'hyothesis', 'revoke', 'cost', 'heinous', 'hiarious', 'rough', 'finch',
+ 'idoize', 'venom', 'unfathomabe', 'ot', 'fret', 'efface', 'defer', 'aign', 'foy', 'iterate', 'regress', 'reguar', 'intransigent', 'zdj', 'far-fetched', 'decadent', 'reentance', 'interrogate', 'grace', 'irrearabe', 'interva', 'treacherous', 'ra',
+ 'oot', 'fout', 'vaet', 'deciher', 'contingent',
+ 'imregnabe', 'morbid', 'hyercritica', 'discrete', 'hearten', 'consoe', 'differentiate', 'irreducibe', 'indiscreet', 'robematica', 'detour', 'misarehend',
+ 'uright', 'rogress', 'huff', 'censure', 'escaate', 'camoufage', 'gratify', 'heredity', 'rohesy', 'muster', 'grie', 'tamer', 'hamer', 'haess', 'mar', 'temer',
+
+ 'anacea', 'sight',
+ 'deft', 'martia', 'bereaved', 'refute', 'defame', 'ungent', 'imressionabe', 'target', 'diffident', 'rummage', 'reuisite', 'egibe', 'throb',
+ 'excavate', 'stark', 'converge', 'fancifu', 'insanity', 'coax', 'extent',
+ 'sutry',
+ 'embem', 'reicate', 'hoodwink', 'incessant', 'devour',
+ 'harangue', 'scour', 'unrincied', 'imasse', 'decomose', 'manoeuvre', 'artfu', 'charisma', 'fatuous', 'ercetibe', 'ardent', 'contort', 'airy', 'shift',
+ 'shear', 'authorize', 'deiberate', 'emuate', 'infest', 'ase',
+ 'dissuade', 'recourse', 'frauduent', 'snag', 'heartwarming', 'imae', 'dereciate', 'manageabe', 'avish', 'submit', 'detract', 'omniscient', 'seudo',
+ 'redicament', 'senie', 'enthra', 'jerky', 'unge', 'faibe', 'intangibe', 'surrender', 'annihiate', 'ghasty', 'wied', 'wrigge', 'manifesto', 'abate', 'baefu', 'ercetion', 'transmit', 'harrow', 'dab', 'suersede', 'inquisition', 'tacit', 'waive',
+ 'mount', 'abrut', 'avai', 'ensue', 'august', 'coruent', 'jab', 'sembance', 'cross-examine', 'offhand', 'wicked', 'exemary', 'counterbaance', 'divuge', 'rerove', 'gabbe', 'reckon', 'rationaize', 'dainty',
+ 'roe', 'simmer',
+ 'gregarious', 'susend', 'buge', 'correate', 'eerie', 'hum', 'cram', 'redraw', 'reorient', 'daer', 'extradite', 'accentuate', 'bizarre', 'venerate', 'stumbe', 'eectrify',
+ 'defaut', 'credentias', 'erratic', 'constancy', 'iustrious', 'ervade', 'errant', 'erihera', 'ingenuous', 'hector', 'ucid', 'ush', 'transfigure', 'sout', 'hurde', 'roific', 'rotracted', 'incise', 'cursory', 'udicrous', 'disarity',
+ 'irascibe', 'transfuse', 'knock', 'meow', 'transcend', 'seduce', 'irreressibe', 'disensabe', 'imending', 'beckon', 'segregate', 'ounce', 'fend', 'intrigue', 'whisk', 'retentious', 'rudimentary', 'burt', 'retaiate', 'hasse',
+ 'conjecture', 'ercetive', 'snuff', 'incoherent', 'convuse', 'entreat', 'eavesdro', 'swive', 'extraneous', 'inescaabe', 'versatiity', 'defoiate', 'rosective', 'obiterate', 'shred', 'centraize', 'sufferance', 'advantage', 'mash',
+ 'swoo', 'condescend', 'domesticate', 'ainstaking', 'turmoi', 'tout', 'husky', 'agonizing', 'suerimose', 'ack', 'cater', 'fetter', 'twist', 'wreathe', 'indisosed', 'itemize', 'hoary', 'shun', 'remium',
+ 'comare', 'novety', 'remorse', 'retrosect', 'haggard', 'boisterous', 'interminge', 'heartrending', 'uscious', 'ivid', 'anguish', 'forego', 'egocentric', 'knowhow', 'deceerate', 'hammer', 'reoccuied', 'cumuative', 'highhanded', 'casize', 'retrieve', 'odds', 'ejacuate',
+ 'resurrect', 'ugrade', 'roosition', 'ardor', 'eucidate', 'recarious', 'mutiate', 'dictate', 'cinch', 'goss', 'forsake', 'suant', 'recude', 'side', 'reine', 'forfeit', 'corroborate', 'otent', 'wrench', 'araysis',
+ 'wring', 'quizzica', 'endow', 'fudge', 'infaibe', 'constrain', 'rid', 'adjoin', 'edantic', 'formuate', 'mutiatera', 'heterodox', 'survive', 'acquiesce', 'outsoken', 'heresy', 'egitimize', 'rodiga', 'aathy', 'entice', 'sort', 'reciitous',
+ 'deterrent', 'gaiety', 'cacuating', 'iicit', 'simy', 'sug', 'caricious', 'reuse', 'fisca', 'vicarious',
+ 'accredit', 'inoffensive', 'virtue', 'mumbe', 'simiar', 'woo', 'taunt', 'otimum', 'suerfuous', 'sideste',
+ 'exunge', 'obivion', 'araytic', 'deimit', 'diaidated', 'abusive', 'deride', 'articiate', 'reentess', 'ceremonious', 'nibbe', 'execrabe', 'resite', 'budge', 'enhance', 'nutrient', 'wai', 'rerequisite', 'convene', 'ummet',
+ 'maadjusted', 'ighten', 'domineer', 'quaver', 'comose', 'intrinsic', 'stawart', 'misaroriate', 'mesh', 'circumstance', 'diate', 'imair', 'disodge', 'obigatory', 'revent', 'staemate', 'deude', 'infuse', 'hacke',
+ 'hanker', 'toss',
+ 'onder', 'invincibe', 'gush', 'ongoing', 'yank', 'bemused', 'burrow', 'rescribe', 'ignite', 'jocuar', 'orchestrate', 'ineuctabe', 'austere', 'induct', 'imeccabe', 'abiity', 'insti', 'harmonize',
+ 'undercut', 'contemate', 'corrode', 'inundate', 'infitrate', 'sash',
+ 'incucate', 'injunction', 'mobiize', 'infatuated', 'critica',
+ 'aranoid', 'recirocate', 'frenetic', 'cranky',
+ 'concern', 'beset', 'staff',
+
+ 'feud', 'caricature', 'negative', 'canny', 'inadvertent', 'rend', 'corresond', 'gare', 'immunize', 'aberrant', 'sur', 'judicious', 'vernacuar', 'sink', 'skid', 'swa',
+ 'redemtive', 'ficke', 'unaraeed', 'forbear', 'dissociate', 'treat', 'invigorate', 'visuaize', 'intermittent', 'subvert', 'abuse', 'grievous', 'aatabe', 'quadrue', 'notion', 'harebrained', 'bare',
+ 'discharge',
+
+ 'frenzied', 'insuate', 'twir', 'status', 'aeviate', 'acquit', 'foist', 'ambience', 'hermetic', 'amiabe', 'britte', 'increduous', 'magnanimous', 'fair', 'hecke', 'fidget', 'ruffe', 'neura', 'uterior',
+ 'bemoan', 'reserve', 'wane', 'fainthearted', 'didactic', 'oaque', 'faacious', 'atera', 'shambe', 'estimabe', 'outweigh', 'unwitting', 'attest', 'hangover', 'resuose', 'shrive', 'ecstasy', 'entange', 'goat', 'inanimate', 'reinquish', 'underie', 'ucrative',
+ 'embeish', 'efficacy', 'indent', 'gorge', 'stuff', 'infuriate', 'swir', 'stricture', 'commentate', 'chaste', 'revam', 'decency',
+ 'dishonour', 'sew', 'evanescent', 'smother', 'smother', 'tedium', 'digress',
+ 'chime', 'heterogeneous', 'inmost', 'horrific', 'ramant',
+ 'admonish', 'stamina', 'forthright', 'tangent', 'tact', 'weird', 'neste', 'enfeebe', 'abrasive', 'insinuate', 'buffer', 'shove', 'freehand', 'remonition', 'consut', 'sa',
+ 'eniency', 'enience', 'seize', 'froic', 'otimize', 'enviabe', 'bequeath',
+
+]
+module.exports = {
+ wordList: word_list
+}
\ No newline at end of file
diff --git a/images/about.png b/images/about.png
new file mode 100644
index 0000000..6fac2d4
Binary files /dev/null and b/images/about.png differ
diff --git a/images/book.png b/images/book.png
new file mode 100644
index 0000000..00efb63
Binary files /dev/null and b/images/book.png differ
diff --git a/images/ciba.png b/images/ciba.png
new file mode 100644
index 0000000..9590929
Binary files /dev/null and b/images/ciba.png differ
diff --git a/images/home.png b/images/home.png
new file mode 100644
index 0000000..67cc052
Binary files /dev/null and b/images/home.png differ
diff --git a/images/home2.png b/images/home2.png
new file mode 100644
index 0000000..01d4368
Binary files /dev/null and b/images/home2.png differ
diff --git a/images/ji.png b/images/ji.png
new file mode 100644
index 0000000..a68eadf
Binary files /dev/null and b/images/ji.png differ
diff --git a/images/ji2.png b/images/ji2.png
new file mode 100644
index 0000000..a3760fe
Binary files /dev/null and b/images/ji2.png differ
diff --git a/images/line.png b/images/line.png
new file mode 100644
index 0000000..f17f1b8
Binary files /dev/null and b/images/line.png differ
diff --git a/images/mine.png b/images/mine.png
new file mode 100644
index 0000000..9672378
Binary files /dev/null and b/images/mine.png differ
diff --git a/images/more.png b/images/more.png
new file mode 100644
index 0000000..396bd15
Binary files /dev/null and b/images/more.png differ
diff --git a/images/new.png b/images/new.png
new file mode 100644
index 0000000..a146c6a
Binary files /dev/null and b/images/new.png differ
diff --git a/images/ok.png b/images/ok.png
new file mode 100644
index 0000000..2655db9
Binary files /dev/null and b/images/ok.png differ
diff --git a/images/sc.png b/images/sc.png
new file mode 100644
index 0000000..2ad4f95
Binary files /dev/null and b/images/sc.png differ
diff --git a/images/sc2.png b/images/sc2.png
new file mode 100644
index 0000000..e38ac13
Binary files /dev/null and b/images/sc2.png differ
diff --git a/images/search.png b/images/search.png
new file mode 100644
index 0000000..e0b7dd2
Binary files /dev/null and b/images/search.png differ
diff --git a/images/search2.png b/images/search2.png
new file mode 100644
index 0000000..f8882b9
Binary files /dev/null and b/images/search2.png differ
diff --git a/images/settings-selected.png b/images/settings-selected.png
new file mode 100644
index 0000000..ecdb40c
Binary files /dev/null and b/images/settings-selected.png differ
diff --git a/images/settings.png b/images/settings.png
new file mode 100644
index 0000000..d35879c
Binary files /dev/null and b/images/settings.png differ
diff --git a/images/test.png b/images/test.png
new file mode 100644
index 0000000..8399170
Binary files /dev/null and b/images/test.png differ
diff --git a/images/time.png b/images/time.png
new file mode 100644
index 0000000..b7f4d98
Binary files /dev/null and b/images/time.png differ
diff --git a/images/yuying.png b/images/yuying.png
new file mode 100644
index 0000000..a2ec1f3
Binary files /dev/null and b/images/yuying.png differ
diff --git a/images/zf.png b/images/zf.png
new file mode 100644
index 0000000..fd2b767
Binary files /dev/null and b/images/zf.png differ
diff --git "a/images/\346\262\237\351\200\232\351\241\265_\350\257\255\351\237\263_\345\217\263_03.png" "b/images/\346\262\237\351\200\232\351\241\265_\350\257\255\351\237\263_\345\217\263_03.png"
new file mode 100644
index 0000000..6ef3d7a
Binary files /dev/null and "b/images/\346\262\237\351\200\232\351\241\265_\350\257\255\351\237\263_\345\217\263_03.png" differ
diff --git a/imgs/PK_equal.svg b/imgs/PK_equal.svg
new file mode 100644
index 0000000..b987814
--- /dev/null
+++ b/imgs/PK_equal.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgs/PK_fail.svg b/imgs/PK_fail.svg
new file mode 100644
index 0000000..e7311de
--- /dev/null
+++ b/imgs/PK_fail.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgs/PK_success.svg b/imgs/PK_success.svg
new file mode 100644
index 0000000..8dbdb69
--- /dev/null
+++ b/imgs/PK_success.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgs/VS.svg b/imgs/VS.svg
new file mode 100644
index 0000000..71abb53
--- /dev/null
+++ b/imgs/VS.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgs/entry_fighting.jpg b/imgs/entry_fighting.jpg
new file mode 100644
index 0000000..fbf7ade
Binary files /dev/null and b/imgs/entry_fighting.jpg differ
diff --git a/imgs/entry_friends.jpg b/imgs/entry_friends.jpg
new file mode 100644
index 0000000..c9b6707
Binary files /dev/null and b/imgs/entry_friends.jpg differ
diff --git a/imgs/entry_qr.svg b/imgs/entry_qr.svg
new file mode 100644
index 0000000..3c71cbe
--- /dev/null
+++ b/imgs/entry_qr.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgs/entry_rank.jpg b/imgs/entry_rank.jpg
new file mode 100644
index 0000000..f8f7e9d
Binary files /dev/null and b/imgs/entry_rank.jpg differ
diff --git a/imgs/exp.svg b/imgs/exp.svg
new file mode 100644
index 0000000..bb6e921
--- /dev/null
+++ b/imgs/exp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgs/quit.svg b/imgs/quit.svg
new file mode 100644
index 0000000..f9722a8
--- /dev/null
+++ b/imgs/quit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/imgs/share.svg b/imgs/share.svg
new file mode 100644
index 0000000..c1fea62
--- /dev/null
+++ b/imgs/share.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..86b5e58
--- /dev/null
+++ b/package.json
@@ -0,0 +1,16 @@
+{
+ "name": "qcloud-weapp-client-demo",
+ "version": "2.0.0",
+ "description": "腾讯云微信小程序客户端 DEMO",
+ "main": "app.js",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/tencentyun/weapp-client-demo.git"
+ },
+ "keywords": [],
+ "author": "CFETeam",
+ "license": "MIT",
+ "dependencies": {
+ "wafer2-client-sdk": "^1.0.0"
+ }
+}
diff --git a/pages/about/about.js b/pages/about/about.js
new file mode 100644
index 0000000..20f0aaf
--- /dev/null
+++ b/pages/about/about.js
@@ -0,0 +1,66 @@
+// pages/about/about.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ }
+})
\ No newline at end of file
diff --git a/pages/about/about.json b/pages/about/about.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/pages/about/about.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/pages/about/about.wxml b/pages/about/about.wxml
new file mode 100644
index 0000000..0e6a6ad
--- /dev/null
+++ b/pages/about/about.wxml
@@ -0,0 +1,15 @@
+
+
+
+小鸡单词 v2.02
+开发者信息
+兰州小红鸡
+微博:@二肆
+意见反馈及商务合作
+联系微信:sinx-3
+本软件未开源,Demo原创归作者所有
+部分动图作者:@李宁静
+
+小鸡个人网站:http://www.sinx2018.cn
+
+
\ No newline at end of file
diff --git a/pages/about/about.wxss b/pages/about/about.wxss
new file mode 100644
index 0000000..a5966fc
--- /dev/null
+++ b/pages/about/about.wxss
@@ -0,0 +1,7 @@
+/* pages/about/about.wxss */
+.page{
+ background-color: white;
+ height: 1200rpx;
+ text-align: center;
+ font-size: 17px;
+}
\ No newline at end of file
diff --git a/pages/audio_test/audio_test.js b/pages/audio_test/audio_test.js
new file mode 100644
index 0000000..6ddb87e
--- /dev/null
+++ b/pages/audio_test/audio_test.js
@@ -0,0 +1,177 @@
+// pages/audio_test/audio_test.js
+var list = require('../../data/vocabulary.js')
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ daan: false,
+ showDaan: false,
+ complete: false,
+ num: 1,
+ true_num: 0
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ this.search()
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function (options) {
+ return {
+ title: "我在小鸡单词测试,答对了" + this.data.true_num + "道题,你也快来测一测吧!",
+ }
+ },
+ search() {
+
+ var that = this
+ var num = Math.floor(Math.random() * 400) + 1
+ var word4 = list.wordList[Math.floor(Math.random() * 12345) + 1]
+ wx.request({
+ url: 'https://api.shanbay.com/bdc/search/?word=' + word4,
+ data: {},
+ method: 'GET',
+ success: function (res) {
+ console.log(res)
+ that.setData({
+ da1: [res.data.data.definition.split(",")[0].split("\n")[0],word4]
+ })
+ if (num < 100) {
+ that.setData({ truedaan: res.data.data.definition.split(",")[0].split("\n")[0], true_word: word4})
+ }
+ }
+ })
+ var word3 = list.wordList[Math.floor(Math.random() * 12345) + 1]
+ wx.request({
+ url: 'https://api.shanbay.com/bdc/search/?word=' + word3,
+ data: {},
+ method: 'GET',
+ success: function (res) {
+ console.log(res)
+ that.setData({
+ da2: [res.data.data.definition.split(",")[0].split("\n")[0], word3]
+ })
+ if (num < 200&&num>100) {
+ that.setData({ truedaan: res.data.data.definition.split(",")[0].split("\n")[0], true_word: word3})
+ }
+ }
+ })
+ var word2 = list.wordList[Math.floor(Math.random() * 12345) + 1]
+ wx.request({
+ url: 'https://api.shanbay.com/bdc/search/?word=' + word2,
+ data: {},
+ method: 'GET',
+ success: function (res) {
+ console.log(res)
+ that.setData({
+ da3: [res.data.data.definition.split(",")[0].split("\n")[0],word2]
+ })
+ if (num < 300&&num>200) {
+ that.setData({ truedaan: res.data.data.definition.split(",")[0].split("\n")[0], true_word: word2 })
+ }
+ }
+ })
+ var word1 = list.wordList[Math.floor(Math.random() * 12345) + 1]
+ wx.request({
+ url: 'https://api.shanbay.com/bdc/search/?word=' + word1,
+ data: {},
+ method: 'GET',
+ success: function (res) {
+ console.log(res)
+ that.setData({
+ da4: [res.data.data.definition.split(",")[0].split("\n")[0],word1]
+ })
+ if (num >300) {
+ that.setData({ truedaan: res.data.data.definition.split(",")[0].split("\n")[0], true_word: word1})
+ }}
+ })
+
+ },
+ choice(e){
+ if(e.currentTarget.id === this.data.truedaan) {
+ this.setData({daan:true,true_num:this.data.true_num+1})
+ const innerAudioContext = wx.createInnerAudioContext()
+ innerAudioContext.autoplay = true
+ innerAudioContext.src = 'http://media-audio1.qiniu.baydn.com/us/n/ni/nice_v3.mp3'
+ innerAudioContext.onPlay(() => {
+ })
+ }
+ else{
+ this.setData({daan:false})
+ const innerAudioContext = wx.createInnerAudioContext()
+ innerAudioContext.autoplay = true
+ innerAudioContext.src = 'https://media-audio1.baydn.com/us%2Fs%2Fsa%2Fsad_v4.mp3'
+ innerAudioContext.onPlay(() => {
+ })
+ this.setData({ complete: true })
+ this.my_score()
+ this.paiming()
+ }
+
+ this.setData({ showDaan: true})
+
+ },
+ next(){
+ this.search()
+ this.setData({ showDaan: false, num: this.data.num + 1 })
+ },
+ again() {
+ this.setData({
+ showDaan: false,
+ complete: false,
+ num: 1,
+ true_num: 0
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/audio_test/audio_test.json b/pages/audio_test/audio_test.json
new file mode 100644
index 0000000..b1ee00e
--- /dev/null
+++ b/pages/audio_test/audio_test.json
@@ -0,0 +1,7 @@
+{
+ "backgroundTextStyle": "light",
+ "backgroundColor": "#141412",
+ "navigationBarBackgroundColor": "#141412",
+ "navigationBarTitleText": "小鸡单词",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/audio_test/audio_test.wxml b/pages/audio_test/audio_test.wxml
new file mode 100644
index 0000000..f8c84b8
--- /dev/null
+++ b/pages/audio_test/audio_test.wxml
@@ -0,0 +1,92 @@
+
+
+ {{true_word}}
+
+
+ {{num}}
+
+
+ {{da4[0]}}
+
+
+ {{da3[0]}}
+
+
+ {{da2[0]}}
+
+
+ {{da1[0]}}
+
+
+
+
+ {{truedaan}}
+
+
+ 回答正确
+
+
+ 回答错误
+
+
+ 下一个
+
+
+ {{true_num}}
+ 好友挑战
+ 历史最高分:{{my[2]}}
+
+
+ 排行榜·每周一更新
+ 总排行
+
+
+
+ 1
+
+ {{one[1]}}
+
+ {{one[2]}}
+
+
+
+ 2
+
+ {{two[1]}}
+
+ {{two[2]}}
+
+
+
+ 3
+
+ {{three[1]}}
+
+ {{three[2]}}
+
+
+
+ 4
+
+ {{four[1]}}
+
+ {{four[2]}}
+
+
+
+ {{my[3]}}
+
+ {{my[1]}}
+
+ {{my[2]}}
+
+
+
+ 再来一局
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/audio_test/audio_test.wxss b/pages/audio_test/audio_test.wxss
new file mode 100644
index 0000000..b3878b1
--- /dev/null
+++ b/pages/audio_test/audio_test.wxss
@@ -0,0 +1,2 @@
+/* pages/audio_test/audio_test.wxss */
+@import "../test/test.wxss";
\ No newline at end of file
diff --git a/pages/choice/choice.js b/pages/choice/choice.js
new file mode 100644
index 0000000..6fc79b0
--- /dev/null
+++ b/pages/choice/choice.js
@@ -0,0 +1,168 @@
+// pages/choice/choice.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ cihui:false,
+ tianshu:false,
+ id1:"kaoyan",
+ id2:"suiji",
+ id3:"cet4",
+ id4:"cet6",
+ id11:"kaoyan_import",
+ id12:"cet4_import",
+ id13:"cet6_import",
+ id14:"zy8",
+ id5:20,
+ id6: 30,
+ id7: 40,
+ id8: 50,
+ id9: 60,
+ id10: 80,
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ var cet4= require('../../data/cet4.js')
+ var cet4_import = require('../../data/cet4_import.js')
+ var cet6 = require('../../data/cet6.js')
+ var cet6_import = require('../../data/cet6_import.js')
+ var kaoyan = require('../../data/kaoyan.js')
+ var kaoyan_import = require('../../data/kaoyan_import.js')
+ var suiji = require('../../data/vocabulary.js')
+ var zy8= require('../../data/zy8.js')
+ wx.setStorage({
+ key: "cet4",
+ data: cet4.wordList
+ })
+ wx.setStorage({
+ key: "cet4_import",
+ data: cet4_import.wordList
+ })
+ wx.setStorage({
+ key: "cet6",
+ data: cet6.wordList
+ })
+ wx.setStorage({
+ key: "cet6_import",
+ data: cet6_import.wordList
+ })
+ wx.setStorage({
+ key: "kaoyan",
+ data: kaoyan.wordList
+ })
+ wx.setStorage({
+ key: "kaoyan_import",
+ data: kaoyan_import.wordList
+ })
+ wx.setStorage({
+ key: "suiji",
+ data: suiji.wordList
+ })
+ wx.setStorage({
+ key: "zy8",
+ data: zy8.wordList
+ })
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ },
+ choice_book(e)
+ {
+ this.setData({
+ cihui:true
+ })
+ wx.setStorage({
+ key: "book",
+ data: e.currentTarget.id
+ })
+ wx.setStorage({
+ key: 'day_num',
+ data: 0
+ })
+ },
+ day_num(e){
+ wx.setStorage({
+ key: "day_task",
+ data: e.currentTarget.id-0
+ })
+ wx.setStorage({
+ key: "word_num",
+ data: e.currentTarget.id-0
+ })
+ var task=[]
+ for (var i = 0; i
+
+ 考研词汇
+ 3837词
+
+ 顺序词汇12347词
+ 四级词汇2895词
+ 六级词汇2085词
+ 四级核心词 687词
+ 六级重点词407词
+ 考研核心词817词
+ 专八词汇1938词
+
+
+
+
+ 词汇书一共1000个单词
+ 你的每天任务量为:
+ 注意是指新词数
+ 20
+ 30
+ 40
+ 50
+ 60
+ 80
+
+
+开始
+
\ No newline at end of file
diff --git a/pages/choice/choice.wxss b/pages/choice/choice.wxss
new file mode 100644
index 0000000..989377b
--- /dev/null
+++ b/pages/choice/choice.wxss
@@ -0,0 +1,249 @@
+/* pages/choice/choice.wxss */
+
+.bg1{
+ height: 1200rpx;
+ width: 100%;
+ background-image: url('https://upload-images.jianshu.io/upload_images/4179819-9f18bb7a70c502fc.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/400');
+ background-size:cover;
+}
+.botton1{
+ position: fixed;
+ left: 5%;
+ top: 5%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 27%;
+ height: 20%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: white;
+ opacity: 0.78;
+}
+.botton2{
+ position: fixed;
+ left: 37%;
+ top: 5%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 27%;
+ height: 20%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: white;
+ opacity: 0.78;
+}
+.botton3{
+ position: fixed;
+ left: 69%;
+ top: 5%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 27%;
+ height: 20%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: white;
+ opacity: 0.78;
+}
+.botton4{
+ position: fixed;
+ left: 5%;
+ top: 30%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 27%;
+ height: 20%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: white;
+ opacity: 0.78;
+}
+.botton5{
+ position: fixed;
+ left: 37%;
+ top: 30%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 27%;
+ height: 20%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: white;
+ opacity: 0.78;
+}
+.botton6{
+ position: fixed;
+ left: 69%;
+ top: 30%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 27%;
+ height: 20%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: white;
+ opacity: 0.78;
+}
+
+.botton7{
+ position: fixed;
+ left: 5%;
+ top: 55%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 27%;
+ height: 20%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: white;
+ opacity: 0.78;
+}
+.botton8{
+ position: fixed;
+ left: 37%;
+ top: 55%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 27%;
+ height: 20%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: white;
+ opacity: 0.78;
+}
+.word{
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 38rpx;
+ color: black;
+ font-weight: 600
+}
+.num_word{
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 30rpx;
+ color: gray;
+ font-weight: 600
+}
+.bg2{
+ height: 200px;
+ width: 100%;
+ background-image: url('https://upload-images.jianshu.io/upload_images/4179819-bcc39e6dd6bc9878.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/429');
+
+}
+.bg3{
+ height: 1200rpx;
+ width: 100%;
+ background-color: white;
+ text-align: center;
+ font-size: 20px;
+ align-items: center;
+ background-image: url('https://upload-images.jianshu.io/upload_images/4179819-a2a42aa749ca2630.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/480');
+}
+.day1{
+ position: fixed;
+ right: 10%;
+ bottom: 10%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ border: 7rpx solid #4a475b;
+ align-items: center;
+ opacity: 0.78;
+ background-color: white;
+}
+.day2{
+ position: fixed;
+ right: 40%;
+ bottom: 10%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ border: 7rpx solid #4a475b;
+ align-items: center;
+ opacity: 0.78;
+ background-color: white;
+}
+.day3{
+ position: fixed;
+ right: 70%;
+ bottom: 10%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ border: 7rpx solid #4a475b;
+ align-items: center;
+ opacity: 0.78;
+ background-color: white;
+}
+.day4{
+ position: fixed;
+ right: 10%;
+ bottom: 25%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ border: 7rpx solid #4a475b;
+ align-items: center;
+ opacity: 0.78;
+ background-color: white;
+}
+.day5{
+ position: fixed;
+ right: 40%;
+ bottom: 25%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ border: 7rpx solid #4a475b;
+ align-items: center;
+ opacity: 0.78;
+ background-color: white;
+}
+.day6{
+ position: fixed;
+ right: 70%;
+ bottom: 25%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ border: 7rpx solid #4a475b;
+ align-items: center;
+ opacity: 0.78;
+ background-color: white;
+}
+
+.begin{
+ position: fixed;
+ left: 41%;
+ bottom: 15%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 80px;
+ height: 80px;
+ border: 7rpx solid #4a475b;
+ align-items: center;
+ opacity: 0.78;
+ background-color: white;
+}
\ No newline at end of file
diff --git a/pages/collect_card/collect_card.js b/pages/collect_card/collect_card.js
new file mode 100644
index 0000000..e9de675
--- /dev/null
+++ b/pages/collect_card/collect_card.js
@@ -0,0 +1,78 @@
+// pages/collect_card/collect_card.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.setData({ collect_list: wx.getStorageSync('collect')})
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ },
+ read: function (e) {
+ const innerAudioContext = wx.createInnerAudioContext()
+ innerAudioContext.autoplay = true
+ innerAudioContext.src = e.target.id
+ innerAudioContext.onPlay(() => {
+ })
+ innerAudioContext.onError((res) => {
+ console.log(res.errMsg)
+ console.log(res.errCode)
+ })
+ },
+})
\ No newline at end of file
diff --git a/pages/collect_card/collect_card.json b/pages/collect_card/collect_card.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/pages/collect_card/collect_card.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/pages/collect_card/collect_card.wxml b/pages/collect_card/collect_card.wxml
new file mode 100644
index 0000000..a1c3334
--- /dev/null
+++ b/pages/collect_card/collect_card.wxml
@@ -0,0 +1,16 @@
+
+
+
+ {{item[0]}} /{{item[1].uk}}/
+ {{item[4]}}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/collect_card/collect_card.wxss b/pages/collect_card/collect_card.wxss
new file mode 100644
index 0000000..51f8afe
--- /dev/null
+++ b/pages/collect_card/collect_card.wxss
@@ -0,0 +1,31 @@
+/* pages/collect_card/collect_card.wxss */
+.collect{
+ width: 100%;
+ margin: 10px;
+ font-size: 16px;
+ display: flex;
+ flex-direction: column;
+}
+
+.pages{
+ background-color: white;
+ height: 100%;width: 100%;
+}
+.simple_look{
+ display: flex;
+ flex-direction: row;
+ padding-top: 15px;
+ padding-left: 6px;
+
+}
+.definition{
+ padding-left: 38px;
+ font-size: 15px;
+
+}
+.last_line{
+ width: 100%;
+ height: 300px;
+ background-image: url('https://upload-images.jianshu.io/upload_images/4179819-4c247b1477685278.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/700');
+ background-repeat: round;
+}
\ No newline at end of file
diff --git a/pages/detail-word/detail-word.js b/pages/detail-word/detail-word.js
new file mode 100644
index 0000000..ffd7efc
--- /dev/null
+++ b/pages/detail-word/detail-word.js
@@ -0,0 +1,130 @@
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ voteTitle: null,
+ simple:false,
+ detail:false
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function (options) {
+
+ },
+ voteTitle: function (e) {
+ this.setData({ simple:true,voteTitle:e.detail.value})
+
+ },
+ detail(){
+
+ var that = this
+ wx.request({
+ url: 'https://api.shanbay.com/bdc/search/?word=' + this.data.voteTitle,
+ data: {},
+ method: 'GET',
+ success: function (res) {
+
+ console.log(res)
+ that.setData({
+ word: res.data.data.content,
+ pron: res.data.data.pronunciation,
+ definition: res.data.data.definition,
+ pron_audio: res.data.data.audio
+
+ })
+ that.get_sams(res.data.data.conent_id)
+ },
+ fail: function () {
+ },
+ complete: function () {
+ }
+ })
+
+ this.setData({
+ detail: true,
+ simple: false
+ })
+ },
+ read(){
+ const innerAudioContext = wx.createInnerAudioContext()
+ innerAudioContext.autoplay = true
+ innerAudioContext.src = this.data.pron_audio
+ innerAudioContext.onPlay(() => {
+ })
+ innerAudioContext.onError((res) => {
+ console.log(res.errMsg)
+ console.log(res.errCode)
+ })
+ },
+ get_sams(id){
+ var that=this
+ wx.request({
+ url: 'https://api.shanbay.com/bdc/example/?vocabulary_id=' + id,
+ data: {},
+ method: 'GET',
+ success: function (res) {
+ console.log(res)
+ that.setData({
+ defen: [res.data.data[0], res.data.data[4]]
+ })
+ },
+ fail: function () {
+ },
+ complete: function () {
+ }
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/detail-word/detail-word.json b/pages/detail-word/detail-word.json
new file mode 100644
index 0000000..c5ffe99
--- /dev/null
+++ b/pages/detail-word/detail-word.json
@@ -0,0 +1,8 @@
+{
+
+ "backgroundTextStyle": "light",
+ "backgroundColor": "#8a8a8a",
+ "navigationBarBackgroundColor": "#8a8a8a",
+ "navigationBarTitleText": "小鸡单词",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/detail-word/detail-word.wxml b/pages/detail-word/detail-word.wxml
new file mode 100644
index 0000000..cbedf50
--- /dev/null
+++ b/pages/detail-word/detail-word.wxml
@@ -0,0 +1,19 @@
+
+
+
+
+ {{voteTitle}}
+
+
+
+ {{word}} 【{{pron}}】
+
+ {{definition}}
+ {{defen[0].first}} {{defen[1].mid}} {{defen[0].last}}
+ {{defen[0].translation}}
+
+ {{defen[1].first}} {{defen[1].mid}} {{defen[1].last}}
+ {{defen[1].translation}}
+
+
+
diff --git a/pages/detail-word/detail-word.wxss b/pages/detail-word/detail-word.wxss
new file mode 100644
index 0000000..e7ac79a
--- /dev/null
+++ b/pages/detail-word/detail-word.wxss
@@ -0,0 +1,65 @@
+/* pages/detail-word/detail-word.wxss */
+@import "../study/study.wxss";
+.page{
+ background-image: url('https://upload-images.jianshu.io/upload_images/4179819-a2a42aa749ca2630.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/480');
+ height: 1200rpx;
+ width: 100%;
+ background-size: cover;
+}
+.input_counter{
+ position: fixed;
+ left: 7%;
+ top: 5%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width:86% ;
+ height: 90rpx;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: white;
+ opacity: 0.78;
+}
+.input{
+ width:85% ;
+ height: 78rpx;
+ color: black;
+ margin-top: 5rpx;
+}
+.simple_look{
+ position: fixed;
+ left: 10%;
+ top: 15%;
+ display: flex;
+ flex-direction: column;
+ width:78% ;
+ border: 1rpx solid #4a475b;
+ background-color: white;
+ opacity: 0.78;
+ padding:10px;
+}
+.read{
+ position: fixed;
+ right: 10%;
+ top: 17%;
+ display: flex;
+ flex-direction: column;
+ width:60rpx;
+ height: 60rpx;
+ border-radius: 50%;
+
+ background-color: white;
+ opacity: 0.78;
+}
+.sc{
+ position: fixed;
+ right: 25%;
+ top: 17%;
+ display: flex;
+ flex-direction: column;
+ width:60rpx;
+ height: 60rpx;
+
+ background-color: white;
+ opacity: 0.78;
+}
\ No newline at end of file
diff --git a/pages/index/index.js b/pages/index/index.js
new file mode 100644
index 0000000..6ae22ca
--- /dev/null
+++ b/pages/index/index.js
@@ -0,0 +1,26 @@
+//index.js
+//获取应用实例
+var app = getApp()
+Page({
+ data: {
+ motto: 'Hello World',
+ userInfo: {}
+ },
+ //事件处理函数
+ bindViewTap: function() {
+ wx.navigateTo({
+ url: '../logs/logs'
+ })
+ },
+ onLoad: function () {
+ console.log('onLoad')
+ var that = this
+ //调用应用实例的方法获取全局数据
+ app.getUserInfo(function(userInfo){
+ //更新数据
+ that.setData({
+ userInfo:userInfo
+ })
+ })
+ }
+})
diff --git a/pages/index/index.json b/pages/index/index.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/pages/index/index.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/pages/index/index.wxml b/pages/index/index.wxml
new file mode 100644
index 0000000..022ad3b
--- /dev/null
+++ b/pages/index/index.wxml
@@ -0,0 +1,10 @@
+
+
+
+
+ {{userInfo.nickName}}
+
+
+ {{motto}}
+
+
diff --git a/pages/index/index.wxss b/pages/index/index.wxss
new file mode 100644
index 0000000..ce30de0
--- /dev/null
+++ b/pages/index/index.wxss
@@ -0,0 +1,21 @@
+/**index.wxss**/
+.userinfo {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+}
+
+.userinfo-avatar {
+ width: 128rpx;
+ height: 128rpx;
+ margin: 20rpx;
+ border-radius: 50%;
+}
+
+.userinfo-nickname {
+ color: #aaa;
+}
+
+.usermotto {
+ margin-top: 200px;
+}
\ No newline at end of file
diff --git a/pages/index/md5.js b/pages/index/md5.js
new file mode 100644
index 0000000..597896b
--- /dev/null
+++ b/pages/index/md5.js
@@ -0,0 +1,200 @@
+var MD5 = function (string) {
+
+ function RotateLeft(lValue, iShiftBits) {
+ return (lValue<>>(32-iShiftBits));
+ }
+
+ function AddUnsigned(lX,lY) {
+ var lX4,lY4,lX8,lY8,lResult;
+ lX8 = (lX & 0x80000000);
+ lY8 = (lY & 0x80000000);
+ lX4 = (lX & 0x40000000);
+ lY4 = (lY & 0x40000000);
+ lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
+ if (lX4 & lY4) {
+ return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
+ }
+ if (lX4 | lY4) {
+ if (lResult & 0x40000000) {
+ return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
+ } else {
+ return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
+ }
+ } else {
+ return (lResult ^ lX8 ^ lY8);
+ }
+ }
+
+ function F(x,y,z) { return (x & y) | ((~x) & z); }
+ function G(x,y,z) { return (x & z) | (y & (~z)); }
+ function H(x,y,z) { return (x ^ y ^ z); }
+ function I(x,y,z) { return (y ^ (x | (~z))); }
+
+ function FF(a,b,c,d,x,s,ac) {
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
+ return AddUnsigned(RotateLeft(a, s), b);
+ };
+
+ function GG(a,b,c,d,x,s,ac) {
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
+ return AddUnsigned(RotateLeft(a, s), b);
+ };
+
+ function HH(a,b,c,d,x,s,ac) {
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
+ return AddUnsigned(RotateLeft(a, s), b);
+ };
+
+ function II(a,b,c,d,x,s,ac) {
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
+ return AddUnsigned(RotateLeft(a, s), b);
+ };
+
+ function ConvertToWordArray(string) {
+ var lWordCount;
+ var lMessageLength = string.length;
+ var lNumberOfWords_temp1=lMessageLength + 8;
+ var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
+ var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
+ var lWordArray=Array(lNumberOfWords-1);
+ var lBytePosition = 0;
+ var lByteCount = 0;
+ while ( lByteCount < lMessageLength ) {
+ lWordCount = (lByteCount-(lByteCount % 4))/4;
+ lBytePosition = (lByteCount % 4)*8;
+ lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<>>29;
+ return lWordArray;
+ };
+
+ function WordToHex(lValue) {
+ var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
+ for (lCount = 0;lCount<=3;lCount++) {
+ lByte = (lValue>>>(lCount*8)) & 255;
+ WordToHexValue_temp = "0" + lByte.toString(16);
+ WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
+ }
+ return WordToHexValue;
+ };
+
+ function Utf8Encode(string) {
+ string = string.replace(/\r\n/g,"\n");
+ var utftext = "";
+
+ for (var n = 0; n < string.length; n++) {
+
+ var c = string.charCodeAt(n);
+
+ if (c < 128) {
+ utftext += String.fromCharCode(c);
+ }
+ else if((c > 127) && (c < 2048)) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+
+ }
+
+ return utftext;
+ };
+
+ var x=Array();
+ var k,AA,BB,CC,DD,a,b,c,d;
+ var S11=7, S12=12, S13=17, S14=22;
+ var S21=5, S22=9 , S23=14, S24=20;
+ var S31=4, S32=11, S33=16, S34=23;
+ var S41=6, S42=10, S43=15, S44=21;
+
+ string = Utf8Encode(string);
+
+ x = ConvertToWordArray(string);
+
+ a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
+
+ for (k=0;k {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+ }
+ return [year, month, day].map(formatNumber).join('/')
+
+ },
+ choice(){
+ wx.navigateTo({
+ url: '../choice/choice',
+ })
+ },
+ test1_card(){
+ wx.navigateTo({
+ url: '../test/test',
+ })
+ },
+ test2_card(){
+ wx.navigateTo({
+ url: '../test/test',
+ })
+ },
+})
\ No newline at end of file
diff --git a/pages/job/job.json b/pages/job/job.json
new file mode 100644
index 0000000..4d8ca64
--- /dev/null
+++ b/pages/job/job.json
@@ -0,0 +1,8 @@
+{
+ "backgroundTextStyle": "light",
+ "backgroundColor": "#4a475b",
+ "navigationBarBackgroundColor": "#4a475b",
+ "navigationBarTitleText": "小鸡单词",
+ "navigationBarTextStyle": "white"
+
+}
\ No newline at end of file
diff --git a/pages/job/job.wxml b/pages/job/job.wxml
new file mode 100644
index 0000000..fdd3564
--- /dev/null
+++ b/pages/job/job.wxml
@@ -0,0 +1,43 @@
+
+
+
+ {{day_num}}
+ 打卡天数
+
+
+
+
+ 那么现在,开始我们的单词之旅
+
+ 点我
+
+
+
+ {{new_word}}
+ 新词数
+
+ {{today_word}}
+ 今日单词
+
+ {{lest_word}}
+ 已背单词
+
+ {{my_word}}
+ 我的单词
+
+
+
+
+ start
+
+
+
+ 英汉测试
+
+ 汉英测试
+
+
+
+
+
+
diff --git a/pages/job/job.wxss b/pages/job/job.wxss
new file mode 100644
index 0000000..440187d
--- /dev/null
+++ b/pages/job/job.wxss
@@ -0,0 +1,159 @@
+page{
+ height: 100%;
+ background-color: #fff
+}
+
+.job_day{
+ width: 100%;
+
+ height: 400rpx;
+ display: flex;
+ flex-direction: column;
+ background-image: url('https://upload-images.jianshu.io/upload_images/4179819-dbd16fa38e6e175d.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/540');
+ background-repeat: round;
+ opacity: 0.8
+}
+.day_num{
+ width: 100%;
+ margin-top: 100rpx;
+ font-size: 150rpx;
+ text-align: center;
+ color: red;
+ font-weight: 800;
+
+}
+.day_notice{
+ width: 100%;
+ font-size: 25rpx;
+ text-align: center;
+ margin-bottom: 20px;
+ font-weight: 700;
+ color: black
+}
+.word_num{
+ width: 100%;
+ height: 150rpx;
+ display: flex;
+ flex-direction: row;
+ background-color:white;
+ border-top: 7px solid ghostwhite;
+ justify-content: space-around;
+ font-weight: 400;
+ color: #515151;
+}
+.today_word_num{
+ font-size: 50rpx;
+ text-align: center;
+ font-weight: 800;
+}
+.new_word_num{
+ font-size: 50rpx;
+ text-align: center;
+ font-weight: 800;
+}
+.lest_num{
+ font-size: 50rpx;
+ text-align: center;
+ font-weight: 800;
+}
+.my_word_num{
+ font-size: 50rpx;
+ text-align: center;
+ font-weight: 800;
+}
+
+.star{
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 20px;
+ color: red;
+ background-color: white;
+ font-weight: 700;
+}
+.star_study{
+ display: flex;
+ margin-left: 40%;
+ margin-top: 20px;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 160rpx;
+ height: 160rpx;
+ border: 2rpx solid red;
+ align-items: center;
+ background-color: white;
+}
+.bookline{
+ display: flex;
+ margin-top: 60px;
+ flex-direction: row;
+ width: 100%;
+ height: 200px;
+ background-color: gainsboro;
+}
+.book1{
+ margin: 5%;
+ border-radius:20px;
+ background-repeat: round;
+ width: 40%;
+ height: 130px;
+ align-items: center;
+ text-align: center;
+ border: 1px #e3351f;
+ background-image: url('https://wxt.sinaimg.cn/thumb300/a0e81c70gy1fdd6iglc3xg20az0aywfg.gif?tags=%5B%5D')
+}
+.book2{
+ margin: 5%;
+ border-radius:20px;
+ background-repeat: round;
+
+ width: 40%;
+ height: 130px;
+ align-items: center;
+ text-align: center;
+ border: 1px #e3351f;
+ background-image: url('https://wxt.sinaimg.cn/thumb300/a0e81c70gy1fdd6ihqcp6g209q0a0wfz.gif?tags=%5B%5D');
+}
+.have_done{
+ position: fixed;
+ left: 10%;
+ bottom: 10%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 80%;
+ height: 80%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-image: url('https://upload-images.jianshu.io/upload_images/4179819-756122e814b07ec2.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/480');
+ background-size:cover;
+}
+.first_notice{
+ margin: auto;
+ margin-top: 45px;
+ font-family: Songti TC;
+ font-size: 38rpx;
+ color: white;
+ font-weight: 600
+}
+.start_botton{
+ position: fixed;
+ left: 41%;
+ bottom: 25%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ border: 6rpx solid gray;
+ align-items: center;
+ background-color: white;
+ opacity: 0.8;
+}
+.look_me{
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 38rpx;
+ color: black;
+ font-weight: 600;
+
+}
diff --git a/pages/me/me.js b/pages/me/me.js
new file mode 100644
index 0000000..abd4657
--- /dev/null
+++ b/pages/me/me.js
@@ -0,0 +1,147 @@
+
+
+const app = getApp()
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ userInfo: [],
+ yes:false
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ var time = this.set_time(new Date())
+ this.setData({
+ have_done: wx.getStorageSync(time),
+ word_num: wx.getStorageSync('word_num'),
+ day_task: wx.getStorageSync('day_task'),
+ userInfo: wx.getStorageSync('user_info_F2C224D4-2BCE-4C64-AF9F-A6D872000D1A')
+ })
+
+
+ },
+ set_time: function (date) {
+ var month = date.getMonth() + 1
+ var day = date.getDate()
+ var year = date.getFullYear()
+ const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+ }
+ return [year, month, day].map(formatNumber).join('/')
+
+ },
+
+ update(data) {
+ data = data || this.data
+ this.setData(data)
+
+ },
+
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ },
+ set_time: function (date) {
+ var month = date.getMonth() + 1
+ var day = date.getDate()
+ var year = date.getFullYear()
+ const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+ }
+ return [year, month, day].map(formatNumber).join('/')
+
+ },
+ my_collect(){
+ wx.navigateTo({
+ url: '../collect_card/collect_card',
+ })
+ },
+ choice_book(){
+ this.setData({
+ yes:true
+ })
+ },
+ choice(){
+ this.setData({yes:false})
+ wx.navigateTo({
+ url: '../choice/choice',
+ })
+ },
+ test_card(){
+ wx.navigateTo({
+ url: '../test/test',
+ })
+ },
+ about_me(){
+ wx.navigateTo({
+ url: '../about/about',
+ })
+ },
+ cancle(){
+ this.setData({
+ yes:false
+ })
+ },
+ my_word(){
+ wx.navigateTo({
+ url: '../my_word/my_word',
+ })
+ },
+ suggestion(){
+ wx.navigateTo({
+ url: '../suggestion/suggestion',
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/me/me.json b/pages/me/me.json
new file mode 100644
index 0000000..4d8ca64
--- /dev/null
+++ b/pages/me/me.json
@@ -0,0 +1,8 @@
+{
+ "backgroundTextStyle": "light",
+ "backgroundColor": "#4a475b",
+ "navigationBarBackgroundColor": "#4a475b",
+ "navigationBarTitleText": "小鸡单词",
+ "navigationBarTextStyle": "white"
+
+}
\ No newline at end of file
diff --git a/pages/me/me.wxml b/pages/me/me.wxml
new file mode 100644
index 0000000..bdbb0ec
--- /dev/null
+++ b/pages/me/me.wxml
@@ -0,0 +1,59 @@
+
+
+
+
+
+ {{userInfo.nickName}}
+
+
+
+
+
+ {{day_task}}
+
+
+
+ {{have_done}}
+
+
+
+ {{word_num}}
+
+
+
+
+
+
+
+ 我的单词
+
+
+
+ 我的收藏
+
+
+
+ 词汇测试
+
+
+ 选词汇书
+
+
+ 一个提议
+
+
+ 关于小鸡
+
+
+
+ 选新的词汇书,会覆盖之前的学习计划哦!
+
+ 取消
+
+
+ 确定
+
+
+
+
+
diff --git a/pages/me/me.wxss b/pages/me/me.wxss
new file mode 100644
index 0000000..20e22b6
--- /dev/null
+++ b/pages/me/me.wxss
@@ -0,0 +1,148 @@
+/* pages/me/me.wxss */
+
+/* pages/me/index.wxss */
+.page {
+ background-color: #fff;
+
+}
+
+.user-card {
+
+ box-shadow: 0 0 15rpx 0 rgba(0, 0, 0, 0.1);
+ position: relative;
+ background-size: contain;
+ z-index: 0;
+ margin-bottom: 30rpx;
+ padding-top: 80px;
+ background-image: url('https://upload-images.jianshu.io/upload_images/4179819-f9776ab6601fe9c2.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/700');
+ background-repeat: round;
+}
+
+.user-card__bg {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ width: 100%;
+ height: 1600rpx;
+ z-index: -1;
+}
+
+.user-card__head {
+ width: 120rpx;
+ height: 120rpx;
+ border: 1px solid #6482DD;
+ border-radius: 50%;
+ margin-left: 7%;
+ margin-right: 30rpx;
+ background-color: #fff;
+}
+
+.user-card__name {
+ color: #000;
+ font-size: 38rpx;
+}
+
+.user-card__links {
+ display: flex;
+ padding: 20rpx 0;
+ border-bottom: 1px solid #ccc;
+}
+
+.user-card__linkItem {
+ flex: 1;
+ font-size: 32rpx;
+ color: #333;
+ text-align: center;
+ border-right: 1px dotted #ccc;
+ padding: 5rpx 0;
+}
+
+.user-card__linkItem:last-child {
+ border-right: none;
+}
+
+.user-card__linkLabel {
+ color: black;
+}
+
+.user-card__linkValue {
+ padding-left: 15rpx;
+}
+.itemcard{
+ margin-left: 60rpx;
+ width: 50%;
+ border-bottom: 1rpx solid #ccc;
+ display: flex;
+ flex-direction: row;
+ height: 30px;
+ font-size: 20px;
+ padding-top:13px;
+
+}
+.item_line{
+ padding-top: 70rpx;
+ background-color: white;
+ width: 100%;
+ height: 800rpx;
+}
+.have_done{
+ position: fixed;
+ left: 10%;
+ bottom: 10%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 80%;
+ height: 80%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: wheat;
+ background-size:cover;
+}
+.first_notice{
+ margin: auto;
+ margin-top: 70px;
+ font-family: Songti TC;
+ font-size: 38rpx;
+ text-align: center;
+ padding: 20px;
+ color: balck;
+ font-weight: 600
+}
+.start_botton{
+ position: fixed;
+ left: 25%;
+ bottom: 25%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ border: 6rpx solid gray;
+ align-items: center;
+ background-color: white;
+ opacity: 0.8;
+}
+.cancle_botton{
+ position: fixed;
+ right: 25%;
+ bottom: 25%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 60px;
+ height: 60px;
+ border: 6rpx solid gray;
+ align-items: center;
+ background-color: white;
+ opacity: 0.8;
+}
+.look_me{
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 38rpx;
+ color: black;
+ font-weight: 600;
+
+}
\ No newline at end of file
diff --git a/pages/my_word/my_word.js b/pages/my_word/my_word.js
new file mode 100644
index 0000000..baba195
--- /dev/null
+++ b/pages/my_word/my_word.js
@@ -0,0 +1,86 @@
+// pages/my_word/my_word.js
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ id1: "kaoyan",
+ id2: "suiji",
+ id3: "cet4",
+ id4: "cet6",
+ id11: "kaoyan_import",
+ id12: "cet4_import",
+ id13: "cet6_import",
+ id14: "zy8",
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ },
+ choice_book(e){
+ var that=this
+ wx.getStorage({
+ key: e.currentTarget.id,
+ success: function(res) {
+ that.setData({
+ list: res.data,
+ dianji: true,
+ })
+ },
+ })
+
+ }
+})
\ No newline at end of file
diff --git a/pages/my_word/my_word.json b/pages/my_word/my_word.json
new file mode 100644
index 0000000..18291d3
--- /dev/null
+++ b/pages/my_word/my_word.json
@@ -0,0 +1,8 @@
+{
+
+ "backgroundTextStyle": "light",
+ "backgroundColor": "#f7dab0",
+ "navigationBarBackgroundColor": "#f7dab0",
+ "navigationBarTitleText": "小鸡单词",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/my_word/my_word.wxml b/pages/my_word/my_word.wxml
new file mode 100644
index 0000000..0c7161a
--- /dev/null
+++ b/pages/my_word/my_word.wxml
@@ -0,0 +1,28 @@
+
+
+ 考研词汇
+ 3837词
+
+ 顺序词汇12347词
+ 四级词汇2895词
+ 六级词汇2085词
+ 四级核心词 687词
+ 六级重点词407词
+ 考研核心词817词
+ 专八词汇1938词
+
+
+
+
+
+ {{item}}
+
+
+
+
+
+
+
+
+
+
diff --git a/pages/my_word/my_word.wxss b/pages/my_word/my_word.wxss
new file mode 100644
index 0000000..22a499d
--- /dev/null
+++ b/pages/my_word/my_word.wxss
@@ -0,0 +1,10 @@
+/* pages/my_word/my_word.wxss */
+@import "../choice/choice.wxss";
+@import "../collect_card/collect_card.wxss";
+.my_bg{
+ height: 1200rpx;
+ width: 100%;
+ background-color: #f7dab0;
+
+ background-size:cover;
+}
\ No newline at end of file
diff --git a/pages/rank/rank.js b/pages/rank/rank.js
new file mode 100644
index 0000000..0a281cb
--- /dev/null
+++ b/pages/rank/rank.js
@@ -0,0 +1,73 @@
+var qcloud = require('../../vendor/wafer2-client-sdk/index')
+var config = require('../../config')
+var util = require('../../utils/util.js')
+const app = getApp();
+Page({
+ data: {
+ currentTab: 0,
+ friendsData: [],
+ globalData: [],
+ loadNumber: 0//全球排名数据加载次数
+ },
+ onLoad: function (opt) {
+ wx.showShareMenu({
+ withShareTicket: true
+ })
+ app.pageGetUserInfo(this)
+ this.getRankGlobalData();
+ },
+ onShow() {
+ this.getRankFriendsData();
+ },
+ onReachBottom: function () {//下拉加载
+ const that = this
+ if (that.data.currentTab) {
+ that.getRankGlobalData()
+ }
+ },
+ getRankGlobalData() {//加载全球排名的数据
+ const that = this
+ qcloud.request({
+ login: false,
+ url: app.appData.baseUrl + 'getRankGlobalData',
+ data: {
+ loadNumber: that.data.loadNumber
+ },
+ success: (res) => {
+ that.setData({
+ globalData: that.data.globalData.concat(res.data.data),//数据叠加
+ loadNumber: that.data.loadNumber+1
+ })
+ },
+ fail(error) {
+ util.showModel('请求失败', error);
+ console.log('request fail', error);
+ },
+ })
+ },
+ getRankFriendsData: function () {
+ const that = this
+ qcloud.request({
+ login: false,
+ url: app.appData.baseUrl + 'getRankFriendsData',
+ data: {
+ openId: this.data.openId
+ },
+ success: (res) => {
+ this.setData({
+ friendsData: res.data.data
+ })
+ },
+ fail(error) {
+ util.showModel('请求失败', error);
+ console.log('request fail', error);
+ },
+ });
+ },
+ swichNav(e) {
+ var that = this;
+ that.setData({
+ currentTab: e.target.dataset.current,
+ })
+ },
+})
\ No newline at end of file
diff --git a/pages/rank/rank.json b/pages/rank/rank.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/pages/rank/rank.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/pages/rank/rank.wxml b/pages/rank/rank.wxml
new file mode 100644
index 0000000..79d5af9
--- /dev/null
+++ b/pages/rank/rank.wxml
@@ -0,0 +1,47 @@
+
+
+
+ 好友排名
+ 全球排名
+
+
+
+
+
+ {{index+1}}
+
+
+
+
+
+ {{item.nickName}}
+ 来自:{{item.city}}
+
+
+ 最强王者
+ 得分:{{item.score}}
+
+
+
+
+
+
+ {{index+1}}
+
+
+
+
+
+ {{item.nickName}}
+ 来自:{{item.city?item.city:'德玛西亚'}}
+
+
+ 最强王者
+ 得分:{{item.score}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pages/rank/rank.wxss b/pages/rank/rank.wxss
new file mode 100644
index 0000000..abd3a8a
--- /dev/null
+++ b/pages/rank/rank.wxss
@@ -0,0 +1,56 @@
+page {
+ background-color: wheat;
+ background-size:100% 100%;
+ background-attachment: fixed;
+ color: white;
+}
+
+.tab {
+ background:transparent;
+ display: flex;
+ justify-content: space-around;
+ text-align: center;
+ font-size: 32rpx;
+ line-height: 80rpx;
+ color: #999;
+ font-weight: bold;
+}
+
+.tab view {
+ width: 30%;
+}
+
+.on {
+ color: #333;
+ border-bottom: 4rpx solid #338fff;
+}
+
+.item {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ font-size: 30rpx;
+ width: 80%;
+ margin: 30rpx auto;
+ border-radius: 10rpx;
+ padding: 20rpx;
+ background: #999;
+ background: url('data:image/jpeg;base64,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') no-repeat;
+}
+
+.item image {
+ width: 100rpx;
+ height: 100rpx;
+ border-radius: 50%;
+ border: 8rpx solid #fff;
+}
+
+.itemDetail {
+ display: flex;
+ justify-content: space-between;
+}
+
+.itemDetail text {
+ display: inline-block;
+ margin: 10rpx;
+}
diff --git a/pages/search/search.js b/pages/search/search.js
new file mode 100644
index 0000000..28c923c
--- /dev/null
+++ b/pages/search/search.js
@@ -0,0 +1,103 @@
+//index.js
+var qcloud = require('../../vendor/wafer2-client-sdk/index')
+var config = require('../../config')
+var util = require('../../utils/util.js')
+const app = getApp();
+Page({
+ data: {
+ score: 0,
+ currentTab: 1,
+ friendsData: [],
+ globalData: [],
+ loadNumber: 0//全球排名数据加载次数
+ },
+ onLoad(opt) {
+ app.appData.fromClickId = opt.currentClickId
+ app.upDateUser_networkFromClickId = require('../../utils/upDateUser_networkFromClickId.js').upDateUser_networkFromClickId
+ wx.showShareMenu({
+ withShareTicket: true
+ })
+
+ wx.showShareMenu({
+ withShareTicket: true
+ })
+ app.pageGetUserInfo(this)
+ this.getRankGlobalData();
+ },
+ onShow() {
+
+ },
+ onShareAppMessage(res) {
+ const that = this;
+ return {
+ title: '谁才是头脑王者?比比看吧!',
+ path: `/pages/entry/entry?currentClickId=${app.appData.currentClickId}`,
+ success: (res) => {
+ //转发时向用户关系表中更新一条转发记录(个人为person,群为GId)。
+ require('../../utils/upDateShareInfoToUser_network.js').upDateShareInfoToUser_network(app, that, res)
+ }
+ }
+ },
+ onReachBottom: function () {//下拉加载
+ const that = this
+ if (that.data.currentTab) {
+ that.getRankGlobalData()
+ }
+ },
+ getRankGlobalData() {//加载全球排名的数据
+ const that = this
+ qcloud.request({
+ login: false,
+ url: app.appData.baseUrl + 'getRankGlobalData',
+ data: {
+ loadNumber: that.data.loadNumber
+ },
+ success: (res) => {
+ that.setData({
+ globalData: that.data.globalData.concat(res.data.data),//数据叠加
+ loadNumber: that.data.loadNumber + 1
+ })
+ },
+ fail(error) {
+ util.showModel('请求失败', error);
+ console.log('request fail', error);
+ },
+ })
+ },
+ getRankFriendsData: function () {
+ const that = this
+ qcloud.request({
+ login: false,
+ url: app.appData.baseUrl + 'getRankFriendsData',
+ data: {
+ openId: this.data.openId
+ },
+ success: (res) => {
+ this.setData({
+ friendsData: res.data.data
+ })
+ },
+ fail(error) {
+ util.showModel('请求失败', error);
+ console.log('request fail', error);
+ },
+ });
+ },
+ swichNav(e) {
+ var that = this;
+ that.setData({
+ currentTab: e.target.dataset.current,
+ })
+ },
+ word_test(){
+ wx.navigateTo({
+ url: '../test/test',
+ })
+ },
+ searchinput(){
+ wx.navigateTo({
+ url: '../detail-word/detail-word',
+ })
+ }
+
+})
\ No newline at end of file
diff --git a/pages/search/search.json b/pages/search/search.json
new file mode 100644
index 0000000..420918e
--- /dev/null
+++ b/pages/search/search.json
@@ -0,0 +1,10 @@
+{
+
+ "backgroundTextStyle": "light",
+ "backgroundColor": "#4a475b",
+ "navigationBarBackgroundColor": "#4a475b",
+ "navigationBarTitleText": "小鸡单词",
+ "navigationBarTextStyle": "white",
+ "enablePullDownRefresh": true
+
+}
\ No newline at end of file
diff --git a/pages/search/search.wxml b/pages/search/search.wxml
new file mode 100644
index 0000000..34eb830
--- /dev/null
+++ b/pages/search/search.wxml
@@ -0,0 +1,64 @@
+
+ 在此输入单词或句子
+
+
+
+
+ {{userInfo.nickName}}
+ 得分:{{score}}
+
+
+
+
+
+
+
+
+ 世界排名
+ 好友排名
+
+
+
+
+
+
+ {{index+1}}
+
+
+
+
+
+ {{item.nickName}}
+ 来自:{{item.city}}
+
+
+ 最强词王
+ 得分:{{item.score}}
+
+
+
+
+
+
+ {{index+1}}
+
+
+
+
+
+ {{item.nickName}}
+ 来自:{{item.city?item.city:'德玛西亚'}}
+
+
+ 最强词王
+ 得分:{{item.score}}
+
+
+
+
+
+
+ 挑战
+
+
+
diff --git a/pages/search/search.wxss b/pages/search/search.wxss
new file mode 100644
index 0000000..e8f8306
--- /dev/null
+++ b/pages/search/search.wxss
@@ -0,0 +1,147 @@
+@import "../rank/rank.wxss";
+
+.person-infor {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ padding: 16rpx;
+ width: 90%;
+ margin: 0 auto;
+ background-color: #f6f6f6;
+ border-radius: 10rpx;
+ color: white;
+}
+
+.avatarUrl {
+ width: 100rpx;
+ height: 100rpx;
+ border: 4rpx solid white;
+ border-radius: 50%;
+}
+
+.qr {
+ width: 100rpx;
+ height: 100rpx;
+}
+
+.choose {
+ position: relative;
+ margin-top: 20rpx;
+ color: #f6f6f6;
+}
+
+.choose view {
+ font-weight: bold;
+ font-size: 36rpx;
+ position: absolute;
+ left: 70%;
+ top: 15%;
+}
+
+.choose image {
+ width: 600rpx;
+ height: 320rpx;
+ border-radius: 10rpx;
+}
+
+
+.search-content{
+ width: 100%;
+ height: 330rpx;
+ background-color: #4a475b;
+ display: flex;
+ flex-direction: column;
+}
+.word-input{
+ margin: 0% 5% 5% 5%;
+ background-color: #6d6b79;
+ widows: 90%;
+ height: 150rpx;
+ border-radius: 6px;
+ color: ghostwhite;
+ opacity: 0.6;
+}
+.test_choice{
+ margin: 0% 5% 5% 5%;
+ widows: 90%;
+ height: 120rpx;
+ border-radius: 6px;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+}
+.test{
+ background-color: #ffffff;
+ height: 100rpx;
+ width: 45%;
+ border-radius: 6px;
+ align-items: center;
+ display: flex;
+ flex-direction: row;
+ color: grey;
+ font-size: 30rpx;
+ font-weight: 800;
+ justify-content: center;
+}
+.quanquan{
+ height: 70rpx;
+ width: 70rpx;
+ border-radius: 40rpx;
+ margin: 15rpx 15rpx;
+ background-color: red;
+ color: white;
+ font-size: 45rpx;
+ font-weight: 800;
+ text-align: center;
+}
+.paiming{
+ width: 100%;
+ height: 100%;
+ background-color: #fff;
+}
+.first_one{
+ display: flex;
+ flex-direction: row;
+ height: 40px;
+ font-size: 16px;
+ width: 100%;
+ color:red;
+ justify-content: space-between;
+ font-weight: 700;
+
+}
+
+.first_paimin{
+ height: 40px;
+ width: 15px;
+ color: goldenrod;
+ margin: auto;
+ padding: 12px;
+}
+.first_name{
+ height: 40px;
+ margin: auto;
+ padding: 12px;
+ color: #464765;
+}
+
+.button-test {
+ position: fixed;
+ left: 70%;
+ bottom: 110rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 160rpx;
+ height: 160rpx;
+ border: 1rpx solid red;
+ align-items: center;
+ background-color: white;
+}
+.word-test {
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 32rpx;
+ color: #585858;
+ font-weight: 700;
+}
\ No newline at end of file
diff --git a/pages/sql/sql.js b/pages/sql/sql.js
new file mode 100644
index 0000000..24715d6
--- /dev/null
+++ b/pages/sql/sql.js
@@ -0,0 +1,106 @@
+// pages/test/test.js
+var list = require('../../data/kaoyan_import.js')
+var list_t = require('../../data/cet4_t.js')
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ sql:""
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ var i=3631
+ for(i=3631;i<3966;i++){
+ this.search(i)
+ }
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function (options) {
+ return {
+ title: "我在小鸡单词测试,答对了" + this.data.true_num + "道题,你也快来测一测吧!",
+ }
+
+ },
+ search(a) {
+ var i=a-3631
+ var that=this
+ var word = list.wordList[i]
+ var title = list_t.wordList[i]
+ var num = Math.floor(Math.random() * 400) + 1
+ if (num < 100) {
+ that.setData({
+ sql: that.data.sql + "(" + a + ",3, '" + title + "', '[" + "{\"right\": true, \"answer\": \"" + word + "\"}" + "," + "{\"right\": false, \"answer\": \"" + list.wordList[i + 12] + "\"}" + "," + "{\"right\": false, \"answer\": \"" + list.wordList[i + 14] + "\"}" + "," + "{\"right\": false, \"answer\": \"" + list.wordList[i + 13] + "\"}" + "]'),"
+ })
+ }
+ if (100 < num && num < 200) {
+ that.setData({
+ sql: that.data.sql + "(" + a + ",3, '" + title + "', '[" + "{\"right\": false, \"answer\": \"" + list.wordList[i + 12] + "\"}" + "," + "{\"right\": true, \"answer\": \"" + word + "\"}" + "," + "{\"right\": false, \"answer\": \"" + list.wordList[i + 16] + "\"}" + "," + "{\"right\": false, \"answer\": \"" + list.wordList[i + 14] + "\"}" + "]'),"
+ })
+ }
+ if (num < 300 && num > 200) {
+ that.setData({
+ sql: that.data.sql + "(" + a + ",3, '" + title + "', '[" + "{\"right\": false, \"answer\": \"" + list.wordList[i + 13] + "\"}" + "," + "{\"right\": false, \"answer\": \"" + list.wordList[i + 11] + "\"}" + "," + "{\"right\": true, \"answer\": \"" + word + "\"}" + "," + "{\"right\": false, \"answer\": \"" + list.wordList[i + 12] + "\"}" + "]'),"
+ })
+ }
+ if (num > 300) {
+ that.setData({
+ sql: that.data.sql + "(" + a + ",3, '" + title + "', '[" + "{\"right\": false, \"answer\": \"" + list.wordList[i + 14] + "\"}" + "," + "{\"right\": false, \"answer\": \"" + list.wordList[i + 12] + "\"}" + "," + "{\"right\": false, \"answer\": \"" + list.wordList[i + 13] + "\"}" + "," + "{\"right\": true, \"answer\": \"" + word + "\"}" + "]'),"
+ })
+ }
+ },
+
+
+})
+
diff --git a/pages/sql/sql.json b/pages/sql/sql.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/pages/sql/sql.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/pages/sql/sql.wxml b/pages/sql/sql.wxml
new file mode 100644
index 0000000..e69de29
diff --git a/pages/sql/sql.wxss b/pages/sql/sql.wxss
new file mode 100644
index 0000000..c94b943
--- /dev/null
+++ b/pages/sql/sql.wxss
@@ -0,0 +1 @@
+/* pages/sql/sql.wxss */
\ No newline at end of file
diff --git a/pages/study/itemtpl.wxml b/pages/study/itemtpl.wxml
new file mode 100644
index 0000000..39ac7b5
--- /dev/null
+++ b/pages/study/itemtpl.wxml
@@ -0,0 +1,7 @@
+
+
+
+
+ {{item.first}} {{item.mid}} {{item.last}}
+ {{item.translation}}
+
diff --git a/pages/study/study.js b/pages/study/study.js
new file mode 100644
index 0000000..047eba4
--- /dev/null
+++ b/pages/study/study.js
@@ -0,0 +1,198 @@
+
+
+const app = getApp()
+Page({
+ data: {
+ time:"",
+ cpt:false,
+ counter:0,
+ dis:false,
+ id1:"我在小鸡单词看到这个单词觉得很有趣,一起来学习吧!",
+ id2:"我在小鸡单词完成了今天的所有单词!",
+ id3:3,
+ id4:4,
+ today_num:0
+ },
+ onLoad: function (options) {
+ this.setData({
+ time: this.set_time(new Date()),
+ day_num: wx.getStorageSync('day_task'),
+ book: wx.getStorageSync('book'),
+ })
+ var today_task = wx.getStorageSync('task')
+ var length = today_task.length
+ if (length > 0) {
+ var n = today_task.shift()
+ this.setData({ showNot: false })
+ this.setData({ counter: n })
+ wx.setStorage({
+ key: "task",
+ data: today_task
+ })
+
+ this.search(n)
+ }else{
+ this.complete()
+ }
+
+ },
+ show: function () {
+
+ this.setData({
+ showNot: true,
+ more: false
+ })
+ var today_task = wx.getStorageSync('task')
+ var length = today_task.length
+ today_task.push(this.data.counter)
+ today_task.splice(length / 2, 0, this.data.counter)
+ wx.setStorage({
+ key: "task",
+ data: today_task
+ })
+ },
+ onShareAppMessage: function (options) {
+ return{
+ title:options.target.id,
+ path:'/pages/job/job',
+ success:function(res){
+ console.log(res)
+ }
+ }
+
+ },
+ next:function(e) {
+ console.log(e)
+ if (e.currentTarget.id ){
+ wx.setStorage({
+ key: this.data.time,
+ data: wx.getStorageSync(this.data.time)+1
+ })
+ }
+ var today_task = wx.getStorageSync('task')
+ var length = today_task.length
+ if (length > 0) {
+ var n = today_task.shift()
+ this.setData({ showNot: false})
+ this.setData({counter:n})
+ wx.setStorage({
+ key: "task",
+ data: today_task
+ })
+
+ this.search(n)
+ }
+ else{
+ this.complete()
+ }
+
+ },
+
+ search:function (n) {
+
+ var word = wx.getStorageSync(this.data.book)[n]
+ this.setData({ content: word})
+ var that = this;
+ wx.request({
+ url: 'https://api.shanbay.com/bdc/search/?word=' + word,
+ data: {},
+ method: 'GET',
+ success: function (res) {
+ console.log(res)
+ that.setData({
+ pron: res.data.data.pronunciations,
+ pron_audio: res.data.data.audio_addresses,
+ definition: res.data.data.definition,
+ })
+ const innerAudioContext = wx.createInnerAudioContext()
+ innerAudioContext.autoplay = true
+ innerAudioContext.src = res.data.data.audio_addresses.uk[0]
+ innerAudioContext.onPlay(() => {
+ })
+ var id = res.data.data.conent_id
+ that.liju(id)
+ },
+ fail: function () {
+ },
+ complete: function () {
+ }
+ })
+
+ },
+ read: function (e) {
+ const innerAudioContext = wx.createInnerAudioContext()
+ innerAudioContext.autoplay = true
+ innerAudioContext.src = e.target.id
+ innerAudioContext.onPlay(() => {
+ })
+ innerAudioContext.onError((res) => {
+ console.log(res.errMsg)
+ console.log(res.errCode)
+ })
+ },
+ moredefen:function()
+ {
+ this.setData({more:true})
+ },
+ set_time: function (date) {
+ var month = date.getMonth() + 1
+ var day = date.getDate()
+ var year = date.getFullYear()
+ const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+ }
+ return [year, month, day].map(formatNumber).join('/')
+
+ },
+ complete(){
+ this.setData({cpt:true})
+ wx.setStorage({
+ key: 'day_num',
+ data: wx.getStorageSync('day_num')+1
+ })
+ },
+ handleSaveTap(){
+ if(wx.getStorageSync('collect')){
+ var collect = wx.getStorageSync('collect')
+ }
+ else {
+ var collect=[]
+ }
+ collect.push([this.data.content, this.data.pron, this.data.pron_audio, this.data.defen, this.data.definition])
+ wx.setStorage({
+ key: "collect",
+ data: collect
+ })
+
+ wx.showToast({ title: '收藏成功' })
+ },
+ liju(id) {
+ var that=this
+ wx.request({
+ url: 'https://api.shanbay.com/bdc/example/?vocabulary_id=' + id,
+ data: {},
+ method: 'GET',
+ success: function (res) {
+ console.log(res)
+ that.setData({
+ defen: [res.data.data[0], res.data.data[1], res.data.data[3], res.data.data[4]]
+
+ })
+ },
+ fail: function () {
+ },
+ complete: function () {
+ }
+ })
+
+ },
+ test(){
+ wx.navigateTo({
+ url: '../test/test',
+ success: function(res) {},
+ fail: function(res) {},
+ complete: function(res) {},
+ })
+ }
+})
\ No newline at end of file
diff --git a/pages/study/study.json b/pages/study/study.json
new file mode 100644
index 0000000..9e26dfe
--- /dev/null
+++ b/pages/study/study.json
@@ -0,0 +1 @@
+{}
\ No newline at end of file
diff --git a/pages/study/study.wxml b/pages/study/study.wxml
new file mode 100644
index 0000000..a533b14
--- /dev/null
+++ b/pages/study/study.wxml
@@ -0,0 +1,67 @@
+
+
+
+ {{content}}
+
+
+ /{{pron.uk}}/
+
+
+
+
+
+
+{{content}}
+
+
+英/{{pron.uk}}/
+
+美/{{pron.us}}/
+
+ {{definition}}
+
+更多例句
+
+
+
+ {{defen[0].first}} {{defen[0].mid}} {{defen[0].last}}
+ {{defen[0].translation}}
+
+ {{defen[1].first}} {{defen[1].mid}} {{defen[1].last}}
+ {{defen[1].translation}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 下一个
+
+
+
+
+
+
+
+
+ 太棒啦!今天的单词都背完了!
+ 测试
+
+
+
+
+
+ 不认识
+
+
+ 下一个
+
+
+
diff --git a/pages/study/study.wxss b/pages/study/study.wxss
new file mode 100644
index 0000000..19844a7
--- /dev/null
+++ b/pages/study/study.wxss
@@ -0,0 +1,284 @@
+@font-face {
+font-family: Chalkboard;
+src: url('/assets/font/chalkboard.ttf'),
+}
+page{
+ height: 100%;
+ background-color: wheat;
+}
+.detail_card{
+
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ padding: 20px;
+ background-color: wheat;
+
+}
+.detail_word{
+ font-weight: 900;
+ font-size: 35px;
+ font-family: Chalkboard;
+ padding-bottom: 30rpx;
+}
+.detail_pron{
+ font-size: 15px;
+ font-family: Chalkboard;
+ padding-bottom: 30rpx;
+ padding-right: 20px;
+ width: 90%;
+ display: flex;
+ flex-direction: row;
+}
+.detail_definition{
+ font-size: 14px;
+ font-family: Chalkboard;
+ padding-bottom: 30rpx;
+ margin-right: 40px;
+}
+.liju_content{
+ width: 78%;
+}
+.detail_defin{
+ font-size: 15px;
+ font-family: 微软雅黑,黑体;
+ padding-left: 20px;
+ display: inline-block;
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+.detail_defin_content{
+ display: flex;
+ flex-direction: row;
+}
+
+.job_day{
+ width: 100%;
+ height: 380rpx;
+ display: flex;
+ flex-direction: column;
+ background-color:white;
+ align-items: center;
+ box-sizing: border-box;
+
+}
+.day_num{
+ width: 100%;
+ margin-top: 70px;
+ font-size: 90rpx;
+ text-align: center;
+ color: #000;
+ font-family: Chalkboard;
+ font-weight: 800;
+}
+
+.content{
+ height:795rpx;
+ background-color: white;
+}
+
+
+
+.pron-container {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+
+.pron-icon {
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.word-pron {
+ margin-left: 9rpx;
+ font-family: Chalkboard;
+ font-size: 36rpx;
+ color: #8F8F8F;
+}
+
+.word-definition {
+ position: fixed;
+ height: 50%;
+ width: 100%;
+ bottom: 600rpx;
+ margin-top: 194rpx;
+ font-family: Yuanti TC;
+ font-size: 30rpx;
+ color: #585858;
+}
+
+.button-miss {
+ position: fixed;
+ left: 15%;
+ bottom: 110rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 160rpx;
+ height: 160rpx;
+ border: 1rpx solid red;
+ align-items: center;
+ background-color: white;
+}
+
+.word-miss {
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 32rpx;
+ color: #585858;
+ background-color: white;
+ font-weight: 700;
+}
+
+.button-next {
+ position: fixed;
+ left: 65%;
+ bottom: 110rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 160rpx;
+ height: 160rpx;
+ border: 1rpx solid red;
+ align-items: center;
+ background-color: white;
+}
+.word-next {
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 32rpx;
+ color: #585858;
+ font-weight: 700;
+}
+.defin_item{
+ height: 30px;
+ width: 80%;
+ font-size: 18px;
+ font-family: Songti TC;
+ padding-bottom: 10px;
+}
+.notice_line{
+ height: 30px;
+ width: 87%;
+ border-bottom: 1px solid red;
+
+}
+.ok{
+ margin-left: -45rpx;
+ font-size: 60rpx;
+ line-height: 90rpx;
+ text-align: center;
+ box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+ color: red;
+ position: fixed;
+ left: 50%;
+ bottom: 60rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 120rpx;
+ height: 120rpx;
+ border: 1rpx solid red;
+ align-items: center;
+ background-color: white;
+}
+.ok_word{
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 32rpx;
+ color: black;
+ font-weight: 800
+}
+.sc2{
+ position: fixed;
+ left: 80%;
+ top: 30px;
+ width: 50rpx;
+ height:50rpx;
+ margin-left: -45rpx;
+ font-size: 60rpx;
+ line-height: 90rpx;
+ text-align: center;
+ background-color: whitesmoke;
+ box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+ color: red;
+}
+.zf{
+ position: fixed;
+ left: 93%;
+ top: 30px;
+ width: 50rpx;
+ height:50rpx;
+ margin-left: -45rpx;
+ font-size: 60rpx;
+ line-height: 90rpx;
+ text-align: center;
+ background-color: whitesmoke;
+ box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.1);
+ color: red;
+}
+.complete{
+ position: fixed;
+ left: 15%;
+ bottom: 15%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 5%;
+ width: 70%;
+ height: 50%;
+ border: 1rpx solid #4a475b;
+ align-items: center;
+ background-color: #4a475b;
+ opacity: 0.7
+}
+.congratulate{
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 32rpx;
+ color: white;
+ font-weight: 800
+}
+.share{
+ position: fixed;
+ left: 21%;
+ bottom: 18%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 80px;
+ height: 80px;
+ border: 3rpx solid white;
+ align-items: center;
+ background-color: white
+
+
+}
+.challenge{
+ position: fixed;
+ right: 21%;
+ bottom: 18%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 80px;
+ height: 80px;
+ border: 3rpx solid white;
+ align-items: center;
+
+
+}
+.complete_bg{
+ height: 1200rpx;
+ width: 100%;
+ background-image: url('https://upload-images.jianshu.io/upload_images/4179819-9f18bb7a70c502fc.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/400');
+ background-size:cover;
+}
+.share_word{
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 32rpx;
+ color: black;
+ font-weight: 800
+}
\ No newline at end of file
diff --git a/pages/suggestion/suggestion.js b/pages/suggestion/suggestion.js
new file mode 100644
index 0000000..d94d4be
--- /dev/null
+++ b/pages/suggestion/suggestion.js
@@ -0,0 +1,75 @@
+// pages/suggestion/suggestion.js
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function () {
+
+ },
+ voteTitle: function (e) {
+ this.setData({ voteTitle: e.detail.value })
+
+ },
+ ok(){
+ wx.showToast({ title: '提交成功' })
+ }
+
+})
\ No newline at end of file
diff --git a/pages/suggestion/suggestion.json b/pages/suggestion/suggestion.json
new file mode 100644
index 0000000..b8e354b
--- /dev/null
+++ b/pages/suggestion/suggestion.json
@@ -0,0 +1,7 @@
+{
+ "backgroundTextStyle": "light",
+ "backgroundColor": "#f7dab0",
+ "navigationBarBackgroundColor": "#f7dab0",
+ "navigationBarTitleText": "小鸡单词",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/suggestion/suggestion.wxml b/pages/suggestion/suggestion.wxml
new file mode 100644
index 0000000..e9e6afe
--- /dev/null
+++ b/pages/suggestion/suggestion.wxml
@@ -0,0 +1,8 @@
+
+
+
+
+
+ 提交~
+
+
\ No newline at end of file
diff --git a/pages/suggestion/suggestion.wxss b/pages/suggestion/suggestion.wxss
new file mode 100644
index 0000000..f7357d9
--- /dev/null
+++ b/pages/suggestion/suggestion.wxss
@@ -0,0 +1,41 @@
+/* pages/suggestion/suggestion.wxss */
+
+.my_bg{
+ height: 1200rpx;
+ width: 100%;
+ background-color: #f7dab0;
+
+}
+.input_content{
+ margin-left: 10%;
+ width: 80%;
+ height: 400rpx;
+ background-color: #fff;
+ border: 2px solid #979797;
+ border-radius: 20rpx;
+ opacity: 0.9
+}
+.input{
+ height: 100%;
+ width: 100%;
+}
+.ok{
+ position: fixed;
+ left: 25%;
+ top:500rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width: 50%;
+ height: 100rpx;
+ border: 5px solid #979797;
+ align-items: center;
+ background-color: greenyellow;
+}
+.word-ok {
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 32rpx;
+ color: #000;
+ font-weight: 800;
+}
\ No newline at end of file
diff --git a/pages/test/test.js b/pages/test/test.js
new file mode 100644
index 0000000..d4b3a79
--- /dev/null
+++ b/pages/test/test.js
@@ -0,0 +1,268 @@
+// pages/test/test.js
+var list = require('../../data/vocabulary.js')
+var qcloud = require('../../vendor/wafer2-client-sdk/index')
+var config = require('../../config')
+var util = require('../../utils/util.js')
+const app = getApp();
+
+Page({
+
+ /**
+ * 页面的初始数据
+ */
+ data: {
+ da1:"",
+ da2: "",
+ da3: "",
+ da4: "",
+ daan:false,
+ showDaan:false,
+ complete:false,
+ true_num:0,
+ score:0,
+ currentTab: 0,
+ friendsData: [],
+ globalData: [],
+ loadNumber: 0, //全球排名数据加载次数
+ history:0
+ },
+
+ /**
+ * 生命周期函数--监听页面加载
+ */
+ onLoad: function (options) {
+ this.search()
+ app.appData.fromClickId = options.currentClickId
+ app.upDateUser_networkFromClickId = require('../../utils/upDateUser_networkFromClickId.js').upDateUser_networkFromClickId
+ wx.showShareMenu({
+ withShareTicket: true
+
+
+
+ })
+ app.pageGetUserInfo(this, this.getScore)
+
+
+
+ },
+
+ /**
+ * 生命周期函数--监听页面初次渲染完成
+ */
+ onReady: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面显示
+ */
+ onShow: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面隐藏
+ */
+ onHide: function () {
+
+ },
+
+ /**
+ * 生命周期函数--监听页面卸载
+ */
+ onUnload: function () {
+
+ },
+
+ /**
+ * 页面相关事件处理函数--监听用户下拉动作
+ */
+ onPullDownRefresh: function () {
+
+ },
+
+ /**
+ * 页面上拉触底事件的处理函数
+ */
+ onReachBottom: function () {
+
+ },
+
+ /**
+ * 用户点击右上角分享
+ */
+ onShareAppMessage: function (options) {
+ return {
+ title:"我在小鸡单词测试,答对了"+this.data.true_num+"道题,你也快来测一测吧!",
+ }
+
+ },
+ choice(e){
+ console.log(e)
+ if(e.currentTarget.id===this.data.true_word){
+ this.setData({ daan: true, true_num: this.data.true_num + 1})
+ const innerAudioContext = wx.createInnerAudioContext()
+ innerAudioContext.autoplay = true
+ innerAudioContext.src = 'http://media-audio1.qiniu.baydn.com/us/n/ni/nice_v3.mp3'
+ innerAudioContext.onPlay(() => {
+ })
+ }else{
+ this.setData({daan:false})
+ this.setData({ complete: true })
+ const innerAudioContext = wx.createInnerAudioContext()
+ innerAudioContext.autoplay = true
+ innerAudioContext.src = 'https://media-audio1.baydn.com/us%2Fs%2Fsa%2Fsad_v4.mp3'
+ innerAudioContext.onPlay(() => {
+ })
+ if(this.data.true_num>this.data.score){
+ this.set_score(this.data.true_num)
+ this.setData({ history: this.data.true_num})
+ }else{
+ this.setData({ history: this.data.score })
+ }
+
+ app.pageGetUserInfo(this, this.getScore)
+ wx.showShareMenu({
+ withShareTicket: true
+ })
+ app.pageGetUserInfo(this)
+ this.getRankGlobalData();
+
+ }
+ this.setData({showDaan:true})
+ },
+ search(){
+ var idx = Math.floor(Math.random() * 12345) + 1
+ var word = list.wordList[idx]
+ var that=this
+ wx.request({
+ url: 'https://api.shanbay.com/bdc/search/?word=' + word,
+ data: {},
+ method: 'GET',
+ success: function (res) {
+ that.setData({
+ title: res.data.data.definition.split(",")[0].split("\n")[0],
+ true_word:word
+ })
+ var num = Math.floor(Math.random() * 400) + 1
+ if(num<100){
+ that.setData({
+ da1:res.data.data.content,
+ da2: list.wordList[Math.floor(Math.random() * 12345) + 1] ,
+ da3: list.wordList[Math.floor(Math.random() * 12345) + 1],
+ da4: list.wordList[Math.floor(Math.random() * 12345) + 1],
+ })
+ }
+ if (100200) {
+ that.setData({
+ da3: res.data.data.content,
+ da2: list.wordList[Math.floor(Math.random() * 12345) + 1],
+ da1: list.wordList[Math.floor(Math.random() * 12345) + 1],
+ da4: list.wordList[Math.floor(Math.random() * 12345) + 1],
+ })
+ }
+ if (num>300) {
+ that.setData({
+ da4: res.data.data.content,
+ da2: list.wordList[Math.floor(Math.random() * 12345) + 1],
+ da3: list.wordList[Math.floor(Math.random() * 12345) + 1],
+ da1: list.wordList[Math.floor(Math.random() * 12345) + 1],
+ })
+ }
+ }
+ })
+ },
+ next(){
+ this.setData({ showDaan: false})
+
+ this.search()
+ },
+ complete(){
+
+ },
+ again(){
+ this.setData({
+ showDaan: false,
+ complete: false,
+ num: 1,
+ true_num: 0
+ })
+ this.search()
+ },
+ set_score(score) {
+ var openId = this.data.openId
+ if (openId) {
+ qcloud.request({
+ login: false,
+ url: `${app.appData.baseUrl}set_score`,
+ data: {
+ openId,
+ score,
+ },
+ success: (res) => {
+ console.log(res)
+
+ },
+ fail(error) {
+ util.showModel('请求失败', error);
+ },
+ });
+ }
+ },
+ getScore(openId) {
+ if (openId) {
+ qcloud.request({
+ login: false,
+ url: `${app.appData.baseUrl}get_score`,
+ data: {
+ openId
+ },
+ success: (res) => {
+ let score = res.data.data;
+ this.setData({
+ score
+ })
+ },
+ fail(error) {
+ util.showModel('请求失败', error);
+ },
+ });
+ }
+ },
+ onReachBottom: function () {//下拉加载
+ const that = this
+ if (that.data.currentTab) {
+ that.getRankGlobalData()
+ }
+ },
+ getRankGlobalData() {//加载全球排名的数据
+ const that = this
+ qcloud.request({
+ login: false,
+ url: app.appData.baseUrl + 'getRankGlobalData',
+ data: {
+ loadNumber: that.data.loadNumber
+ },
+ success: (res) => {
+ that.setData({
+ globalData: that.data.globalData.concat(res.data.data),//数据叠加
+ loadNumber: that.data.loadNumber + 1
+ })
+ },
+ fail(error) {
+ util.showModel('请求失败', error);
+ console.log('request fail', error);
+ },
+ })
+ },
+
+})
+
diff --git a/pages/test/test.json b/pages/test/test.json
new file mode 100644
index 0000000..a16b175
--- /dev/null
+++ b/pages/test/test.json
@@ -0,0 +1,8 @@
+{
+
+ "backgroundTextStyle": "light",
+ "backgroundColor": "#141412",
+ "navigationBarBackgroundColor": "#141412",
+ "navigationBarTitleText": "小鸡单词",
+ "navigationBarTextStyle": "white"
+}
\ No newline at end of file
diff --git a/pages/test/test.wxml b/pages/test/test.wxml
new file mode 100644
index 0000000..268747f
--- /dev/null
+++ b/pages/test/test.wxml
@@ -0,0 +1,98 @@
+
+
+
+
+ {{title}}
+
+
+ {{true_num}}
+
+
+ {{da4}}
+
+
+ {{da3}}
+
+
+ {{da2}}
+
+
+ {{da1}}
+
+
+
+
+ {{true_word}}
+
+
+ 回答正确
+
+
+ 回答错误
+
+
+ 下一个
+
+
+
+
+ {{true_num}}
+ 好友挑战
+ 历史最高分:{{history}}
+
+
+ 排行榜·每周一更新
+ 得分
+
+
+
+ 1
+
+ {{globalData[0].nickName}}
+
+ {{globalData[0].score}}
+
+
+
+ 2
+
+ {{globalData[1].nickName}}
+
+ {{globalData[1].score}}
+
+
+
+ 3
+
+ {{globalData[2].nickName}}
+
+ {{globalData[2].score}}
+
+
+
+ 4
+
+ {{globalData[3].nickName}}
+
+ {{globalData[3].score}}
+
+
+
+ 我
+
+ {{userInfo.nickName}}
+
+ {{history}}
+
+
+
+ 再来一局
+
+
+
+
+
+
+
diff --git a/pages/test/test.wxss b/pages/test/test.wxss
new file mode 100644
index 0000000..d5a0bd9
--- /dev/null
+++ b/pages/test/test.wxss
@@ -0,0 +1,365 @@
+/* pages/test/test.wxss */
+.page{
+ height:1200rpx;
+ background-color: #c3c6cf;
+}
+.job_day{
+ width: 100%;
+ height: 380rpx;
+ display: flex;
+ flex-direction: column;
+ background-color:#c3c6cf;
+ align-items: center;
+ box-sizing: border-box;
+
+}
+.day_num{
+ width: 100%;
+ margin-top: 70px;
+ font-size: 25px;
+ text-align: center;
+ color: #444;
+ font-family: Chalkboard;
+ font-weight: 800;
+}
+
+.content{
+ height:795rpx;
+ background-color:#c3c6cf;
+}
+
+.pron-container {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+}
+.sc2{
+ position: fixed;
+ right: 5%;
+ top: 25%;
+ width: 70rpx;
+ height:70rpx;
+ margin-left: -45rpx;
+ font-size: 60rpx;
+ line-height: 90rpx;
+ text-align: center;
+ background-color: #c3c6cf;
+ color: red;
+}
+.num_notice{
+ position: fixed;
+ left: 10%;
+ top:3%;
+ width: 42px;
+ height:42px;
+ margin-left: -45rpx;
+ line-height: 90rpx;
+ text-align: center;
+ color: black;
+ font-size: 40px;
+ font-weight: 800;
+}
+.pron-icon {
+ width: 48rpx;
+ height: 48rpx;
+}
+
+.word-pron {
+ margin-left: 9rpx;
+ font-family: Chalkboard;
+ font-size: 36rpx;
+ color: #8F8F8F;
+}
+
+.word-definition {
+ position: fixed;
+ height: 50%;
+ width: 100%;
+ bottom: 600rpx;
+ margin-top: 194rpx;
+ font-family: Yuanti TC;
+ font-size: 30rpx;
+ color: #585858;
+}
+
+.button-1 {
+ position: fixed;
+ left: 15%;
+ bottom: 80rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width: 70%;
+ height: 100rpx;
+ border: 5px solid #979797;
+ align-items: center;
+ background-color: #f6f6f6;
+}
+
+.word-miss {
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 32rpx;
+ color: #000;
+ font-weight: 700;
+}
+
+.button-2 {
+ position: fixed;
+ left: 15%;
+ bottom: 220rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width: 70%;
+ height: 100rpx;
+ border: 5px solid #979797;
+ align-items: center;
+ background-color: #f6f6f6;
+}
+.button-3 {
+ position: fixed;
+ left: 15%;
+ bottom: 360rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width: 70%;
+ height: 100rpx;
+ border:5px solid #979797;
+ align-items: center;
+ background-color: #f6f6f6;
+}
+.button-4 {
+ position: fixed;
+ left: 15%;
+ bottom: 500rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width: 70%;
+ height: 100rpx;
+ border: 5px solid #979797;
+ align-items: center;
+ background-color: #f6f6f6;
+}
+.button-8 {
+ position: fixed;
+ left: 15%;
+ bottom: 100rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width: 70%;
+ height: 100rpx;
+ border: 5px solid #979797;
+ align-items: center;
+ background-color: #f6f6f6;
+}
+.button-6 {
+ position: fixed;
+ left: 15%;
+ bottom: 250rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width: 70%;
+ height: 100rpx;
+ border: 5px solid #979797;
+ align-items: center;
+ background-color: #f6f6f6;
+}
+.button-7 {
+ position: fixed;
+ left: 15%;
+ bottom: 250rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width: 70%;
+ height: 100rpx;
+ border: 5px solid #979797;
+ align-items: center;
+ background-color: #f6f6f6;
+}
+.button-5 {
+ position: fixed;
+ left: 15%;
+ bottom: 400rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50rpx;
+ width: 70%;
+ height: 100rpx;
+ border: 5px solid #979797;
+ align-items: center;
+ background-color: #f6f6f6;
+}
+.share{
+ position: fixed;
+ left: 42%;
+ bottom: 600rpx;
+ display: flex;
+ flex-direction: column;
+ border-radius: 50%;
+ width: 150rpx;
+ height: 150rpx;
+ border: 1rpx solid gainsboro;
+ align-items: center;
+ background-color: ghostwhite;
+}
+
+.have_done{
+ position: fixed;
+ left: 0%;
+ bottom: 0%;
+ display: flex;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ align-items: center;
+ background-color: black;
+ opacity: 0.9;
+ color: white
+}
+.first_notice{
+ margin: auto;
+ margin-top: 20px;
+ font-family: Songti TC;
+ font-size: 70px;
+ text-align: center;
+ color: white;
+ font-weight: 800
+}
+.start_botton{
+ position: fixed;
+ left: 25%;
+ bottom: 15%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 30px;
+ width: 50%;
+ height: 45px;
+ align-items: center;
+ background-color: white;
+
+}
+.cancle_botton{
+ position: fixed;
+ left: 25%;
+ bottom: 5%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 30px;
+ width: 50%;
+ height: 45px;
+
+ align-items: center;
+ background-color: white;
+}
+.look_me{
+ margin: auto;
+ font-family: Songti TC;
+ font-size: 38rpx;
+ color: black;
+ font-weight: 600;
+
+}
+.haoyou{
+ position: fixed;
+ left: 40%;
+ top: 19%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 10px;
+ width: 20%;
+ height: 20px;
+ align-items: center;
+ border: 1rpx solid white;
+ font-size: 16px;
+}
+.history{
+ position: fixed;
+ left: 30%;
+ top: 25%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 10px;
+ width: 40%;
+ height: 20px;
+ align-items: center;
+ border-bottom: 1rpx solid white;
+ font-size: 16px;
+}
+.paihan{
+ position: fixed;
+ left: 5%;
+ top: 33%;
+ display: flex;
+ flex-direction: column;
+ border-radius: 2px;
+ width: 90%;
+ height: 38%;
+ border: 1rpx solid grey;
+ font-size: 16px;
+}
+.paihan_word{
+ display: flex;
+ flex-direction: row;
+ height: 20px;
+ font-size: 14px;
+ width: 100%;
+ color: gainsboro;
+ border-bottom: 1rpx solid white;
+ justify-content: space-between;
+}
+
+.first_one{
+ display: flex;
+ flex-direction: row;
+ height: 40px;
+ font-size: 16px;
+ width: 100%;
+ color: wheat;
+ justify-content: space-between;
+ font-weight: 700;
+
+}
+.myself{
+ display: flex;
+ flex-direction: row;
+ height: 40px;
+ font-size: 16px;
+ width: 100%;
+ color: wheat;
+ border-top: 1rpx solid #eee;
+ justify-content: space-between;
+ font-weight: 700;
+
+}
+.first_paimin{
+ height: 40px;
+ width: 15px;
+ color: goldenrod;
+ margin: auto;
+ padding: 12px;
+}
+.second_paimin{
+ height: 40px;
+ width: 15px;
+ color: rosybrown;
+ margin: auto;
+ padding: 12px;
+}
+.third_paimin{
+ height: 40px;
+ width: 15px;
+ color: skyblue;
+ margin: auto;
+ padding: 12px;
+}
+.first_name{
+ height: 40px;
+ margin: auto;
+ padding: 12px;
+}
diff --git a/project.config.json b/project.config.json
new file mode 100644
index 0000000..a153692
--- /dev/null
+++ b/project.config.json
@@ -0,0 +1,35 @@
+{
+ "description": "项目配置文件。",
+ "setting": {
+ "urlCheck": true,
+ "es6": true,
+ "postcss": true,
+ "minified": true,
+ "newFeature": true
+ },
+ "compileType": "miniprogram",
+ "libVersion": "1.9.91",
+ "appid": "wx90951b51c0e9f6f9",
+ "projectname": "%E5%B0%8F%E9%B8%A1%E5%8D%95%E8%AF%8D",
+ "condition": {
+ "search": {
+ "current": -1,
+ "list": []
+ },
+ "conversation": {
+ "current": -1,
+ "list": []
+ },
+ "plugin": {
+ "current": -1,
+ "list": []
+ },
+ "game": {
+ "list": []
+ },
+ "miniprogram": {
+ "current": -1,
+ "list": []
+ }
+ }
+}
\ No newline at end of file
diff --git a/utils/Touches.js b/utils/Touches.js
new file mode 100644
index 0000000..a834c54
--- /dev/null
+++ b/utils/Touches.js
@@ -0,0 +1,64 @@
+
+class Touches {
+ constructor() {
+
+ }
+
+ _getIndex(e) { // 获取滑动列表的下标值
+ return e.currentTarget.dataset.index
+ }
+
+ _getMoveX(e, startX) { // 获取滑动过程中滑动的距离
+ return this.getClientX(e) - startX
+ }
+
+ _getEndX(e, startX) { // 获取滑动结束滑动的距离
+ let touch = e.changedTouches
+ if (touch.length === 1) {
+ return touch[0].clientX - startX
+ }
+ }
+
+ _resetData(dataList) { // 重置数据, 把所有的列表 left 置为 0
+ for (let i in dataList) {
+ dataList[i].left = 0
+ }
+ return dataList
+ }
+
+ getClientX(e) { // 获取滑动的横坐标
+ let touch = e.touches
+ if (touch.length === 1) {
+ return touch[0].clientX
+ }
+ }
+
+ touchM(e, dataList, startX) { // touchmove 过程中更新列表数据
+ let list = this._resetData(dataList)
+ list[this._getIndex(e)].left = this._getMoveX(e, startX)
+ return list
+ }
+
+ touchE(e, dataList, startX, width) { // touchend 更新列表数据
+ let list = this._resetData(dataList)
+ let disX = this._getEndX(e, startX)
+ let left = 0
+
+ if (disX < 0) { // 判断滑动方向, (向左滑动)
+ // 滑动的距离大于删除宽度的一半就显示操作列表 否则不显示
+ Math.abs(disX) > width / 2 ? left = -width : left = 0
+ } else { // 向右滑动复位
+ left = 0
+ }
+
+ list[this._getIndex(e)].left = left
+ return list
+ }
+
+ deleteItem(e, dataList) { // 删除功能
+ dataList.splice(this._getIndex(e), 1)
+ return dataList
+ }
+}
+
+export default Touches
\ No newline at end of file
diff --git a/utils/animate.wxss b/utils/animate.wxss
new file mode 100644
index 0000000..c9fa448
--- /dev/null
+++ b/utils/animate.wxss
@@ -0,0 +1,1579 @@
+@charset "UTF-8";
+
+/*!
+ * animate.css -http://daneden.me/animate
+ * Version - 3.5.2
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
+ *
+ * Copyright (c) 2017 Daniel Eden
+ */
+
+.animated {
+ animation-duration: 1s;
+ animation-fill-mode: both;
+}
+
+.animated.infinite {
+ animation-iteration-count: infinite;
+}
+
+.animated.hinge {
+ animation-duration: 2s;
+}
+
+.animated.flipOutX,
+.animated.flipOutY,
+.animated.bounceIn,
+.animated.bounceOut {
+ animation-duration: .75s;
+}
+
+@keyframes bounce {
+ from, 20%, 53%, 80%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ transform: translate3d(0,0,0);
+ }
+
+ 40%, 43% {
+ animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+ transform: translate3d(0, -30px, 0);
+ }
+
+ 70% {
+ animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+ transform: translate3d(0, -15px, 0);
+ }
+
+ 90% {
+ transform: translate3d(0,-4px,0);
+ }
+}
+
+.bounce {
+ animation-name: bounce;
+ transform-origin: center bottom;
+}
+
+@keyframes flash {
+ from, 50%, to {
+ opacity: 1;
+ }
+
+ 25%, 75% {
+ opacity: 0;
+ }
+}
+
+.flash {
+ animation-name: flash;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes pulse {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 50% {
+ transform: scale3d(1.05, 1.05, 1.05);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.pulse {
+ animation-name: pulse;
+}
+
+@keyframes rubberBand {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 30% {
+ transform: scale3d(1.25, 0.75, 1);
+ }
+
+ 40% {
+ transform: scale3d(0.75, 1.25, 1);
+ }
+
+ 50% {
+ transform: scale3d(1.15, 0.85, 1);
+ }
+
+ 65% {
+ transform: scale3d(.95, 1.05, 1);
+ }
+
+ 75% {
+ transform: scale3d(1.05, .95, 1);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.rubberBand {
+ animation-name: rubberBand;
+}
+
+@keyframes shake {
+ from, to {
+ transform: translate3d(0, 0, 0);
+ }
+
+ 10%, 30%, 50%, 70%, 90% {
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 20%, 40%, 60%, 80% {
+ transform: translate3d(10px, 0, 0);
+ }
+}
+
+.shake {
+ animation-name: shake;
+}
+
+@keyframes headShake {
+ 0% {
+ transform: translateX(0);
+ }
+
+ 6.5% {
+ transform: translateX(-6px) rotateY(-9deg);
+ }
+
+ 18.5% {
+ transform: translateX(5px) rotateY(7deg);
+ }
+
+ 31.5% {
+ transform: translateX(-3px) rotateY(-5deg);
+ }
+
+ 43.5% {
+ transform: translateX(2px) rotateY(3deg);
+ }
+
+ 50% {
+ transform: translateX(0);
+ }
+}
+
+.headShake {
+ animation-timing-function: ease-in-out;
+ animation-name: headShake;
+}
+
+@keyframes swing {
+ 20% {
+ transform: rotate3d(0, 0, 1, 15deg);
+ }
+
+ 40% {
+ transform: rotate3d(0, 0, 1, -10deg);
+ }
+
+ 60% {
+ transform: rotate3d(0, 0, 1, 5deg);
+ }
+
+ 80% {
+ transform: rotate3d(0, 0, 1, -5deg);
+ }
+
+ to {
+ transform: rotate3d(0, 0, 1, 0deg);
+ }
+}
+
+.swing {
+ transform-origin: top center;
+ animation-name: swing;
+}
+
+@keyframes tada {
+ from {
+ transform: scale3d(1, 1, 1);
+ }
+
+ 10%, 20% {
+ transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 30%, 50%, 70%, 90% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 40%, 60%, 80% {
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+ }
+
+ to {
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.tada {
+ animation-name: tada;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes wobble {
+ from {
+ transform: none;
+ }
+
+ 15% {
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+ }
+
+ 30% {
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+ }
+
+ 45% {
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+ }
+
+ 60% {
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+ }
+
+ 75% {
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+ }
+
+ to {
+ transform: none;
+ }
+}
+
+.wobble {
+ animation-name: wobble;
+}
+
+@keyframes jello {
+ from, 11.1%, to {
+ transform: none;
+ }
+
+ 22.2% {
+ transform: skewX(-12.5deg) skewY(-12.5deg);
+ }
+
+ 33.3% {
+ transform: skewX(6.25deg) skewY(6.25deg);
+ }
+
+ 44.4% {
+ transform: skewX(-3.125deg) skewY(-3.125deg);
+ }
+
+ 55.5% {
+ transform: skewX(1.5625deg) skewY(1.5625deg);
+ }
+
+ 66.6% {
+ transform: skewX(-0.78125deg) skewY(-0.78125deg);
+ }
+
+ 77.7% {
+ transform: skewX(0.390625deg) skewY(0.390625deg);
+ }
+
+ 88.8% {
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+ }
+}
+
+.jello {
+ animation-name: jello;
+ transform-origin: center;
+}
+
+@keyframes bounceIn {
+ from, 20%, 40%, 60%, 80%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ 0% {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3);
+ }
+
+ 20% {
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ 40% {
+ transform: scale3d(.9, .9, .9);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(1.03, 1.03, 1.03);
+ }
+
+ 80% {
+ transform: scale3d(.97, .97, .97);
+ }
+
+ to {
+ opacity: 1;
+ transform: scale3d(1, 1, 1);
+ }
+}
+
+.bounceIn {
+ animation-name: bounceIn;
+}
+
+@keyframes bounceInDown {
+ from, 60%, 75%, 90%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ 0% {
+ opacity: 0;
+ transform: translate3d(0, -3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(0, 25px, 0);
+ }
+
+ 75% {
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 90% {
+ transform: translate3d(0, 5px, 0);
+ }
+
+ to {
+ transform: none;
+ }
+}
+
+.bounceInDown {
+ animation-name: bounceInDown;
+}
+
+@keyframes bounceInLeft {
+ from, 60%, 75%, 90%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ 0% {
+ opacity: 0;
+ transform: translate3d(-3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(25px, 0, 0);
+ }
+
+ 75% {
+ transform: translate3d(-10px, 0, 0);
+ }
+
+ 90% {
+ transform: translate3d(5px, 0, 0);
+ }
+
+ to {
+ transform: none;
+ }
+}
+
+.bounceInLeft {
+ animation-name: bounceInLeft;
+}
+
+@keyframes bounceInRight {
+ from, 60%, 75%, 90%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ from {
+ opacity: 0;
+ transform: translate3d(3000px, 0, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(-25px, 0, 0);
+ }
+
+ 75% {
+ transform: translate3d(10px, 0, 0);
+ }
+
+ 90% {
+ transform: translate3d(-5px, 0, 0);
+ }
+
+ to {
+ transform: none;
+ }
+}
+
+.bounceInRight {
+ animation-name: bounceInRight;
+}
+
+@keyframes bounceInUp {
+ from, 60%, 75%, 90%, to {
+ animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+ }
+
+ from {
+ opacity: 0;
+ transform: translate3d(0, 3000px, 0);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: translate3d(0, -20px, 0);
+ }
+
+ 75% {
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 90% {
+ transform: translate3d(0, -5px, 0);
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.bounceInUp {
+ animation-name: bounceInUp;
+}
+
+@keyframes bounceOut {
+ 20% {
+ transform: scale3d(.9, .9, .9);
+ }
+
+ 50%, 55% {
+ opacity: 1;
+ transform: scale3d(1.1, 1.1, 1.1);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3);
+ }
+}
+
+.bounceOut {
+ animation-name: bounceOut;
+}
+
+@keyframes bounceOutDown {
+ 20% {
+ transform: translate3d(0, 10px, 0);
+ }
+
+ 40%, 45% {
+ opacity: 1;
+ transform: translate3d(0, -20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+.bounceOutDown {
+ animation-name: bounceOutDown;
+}
+
+@keyframes bounceOutLeft {
+ 20% {
+ opacity: 1;
+ transform: translate3d(20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+.bounceOutLeft {
+ animation-name: bounceOutLeft;
+}
+
+@keyframes bounceOutRight {
+ 20% {
+ opacity: 1;
+ transform: translate3d(-20px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+.bounceOutRight {
+ animation-name: bounceOutRight;
+}
+
+@keyframes bounceOutUp {
+ 20% {
+ transform: translate3d(0, -10px, 0);
+ }
+
+ 40%, 45% {
+ opacity: 1;
+ transform: translate3d(0, 20px, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+.bounceOutUp {
+ animation-name: bounceOutUp;
+}
+
+@keyframes fadeIn {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
+ }
+}
+
+.fadeIn {
+ animation-name: fadeIn;
+}
+
+@keyframes fadeInDown {
+ from {
+ opacity: 0;
+ transform: translate3d(0, -100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInDown {
+ animation-name: fadeInDown;
+}
+
+@keyframes fadeInDownBig {
+ from {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInDownBig {
+ animation-name: fadeInDownBig;
+}
+
+@keyframes fadeInLeft {
+ from {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInLeft {
+ animation-name: fadeInLeft;
+}
+
+@keyframes fadeInLeftBig {
+ from {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInLeftBig {
+ animation-name: fadeInLeftBig;
+}
+
+@keyframes fadeInRight {
+ from {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInRight {
+ animation-name: fadeInRight;
+}
+
+@keyframes fadeInRightBig {
+ from {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInRightBig {
+ animation-name: fadeInRightBig;
+}
+
+@keyframes fadeInUp {
+ from {
+ opacity: 0;
+ transform: translate3d(0, 100%, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInUp {
+ animation-name: fadeInUp;
+}
+
+@keyframes fadeInUpBig {
+ from {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.fadeInUpBig {
+ animation-name: fadeInUpBig;
+}
+
+@keyframes fadeOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+.fadeOut {
+ animation-name: fadeOut;
+}
+
+@keyframes fadeOutDown {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+.fadeOutDown {
+ animation-name: fadeOutDown;
+}
+
+@keyframes fadeOutDownBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, 2000px, 0);
+ }
+}
+
+.fadeOutDownBig {
+ animation-name: fadeOutDownBig;
+}
+
+@keyframes fadeOutLeft {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+.fadeOutLeft {
+ animation-name: fadeOutLeft;
+}
+
+@keyframes fadeOutLeftBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(-2000px, 0, 0);
+ }
+}
+
+.fadeOutLeftBig {
+ animation-name: fadeOutLeftBig;
+}
+
+@keyframes fadeOutRight {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+.fadeOutRight {
+ animation-name: fadeOutRight;
+}
+
+@keyframes fadeOutRightBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(2000px, 0, 0);
+ }
+}
+
+.fadeOutRightBig {
+ animation-name: fadeOutRightBig;
+}
+
+@keyframes fadeOutUp {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+.fadeOutUp {
+ animation-name: fadeOutUp;
+}
+
+@keyframes fadeOutUpBig {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(0, -2000px, 0);
+ }
+}
+
+.fadeOutUpBig {
+ animation-name: fadeOutUpBig;
+}
+
+@keyframes flip {
+ from {
+ transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+ animation-timing-function: ease-out;
+ }
+
+ 40% {
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+ animation-timing-function: ease-out;
+ }
+
+ 50% {
+ transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+ animation-timing-function: ease-in;
+ }
+
+ 80% {
+ transform: perspective(400px) scale3d(.95, .95, .95);
+ animation-timing-function: ease-in;
+ }
+
+ to {
+ transform: perspective(400px);
+ animation-timing-function: ease-in;
+ }
+}
+
+.animated.flip {
+ -webkit-backface-visibility: visible;
+ backface-visibility: visible;
+ animation-name: flip;
+}
+
+@keyframes flipInX {
+ from {
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+ }
+
+ to {
+ transform: perspective(400px);
+ }
+}
+
+.flipInX {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ animation-name: flipInX;
+}
+
+@keyframes flipInY {
+ from {
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ animation-timing-function: ease-in;
+ opacity: 0;
+ }
+
+ 40% {
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+ animation-timing-function: ease-in;
+ }
+
+ 60% {
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+ opacity: 1;
+ }
+
+ 80% {
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+ }
+
+ to {
+ transform: perspective(400px);
+ }
+}
+
+.flipInY {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ animation-name: flipInY;
+}
+
+@keyframes flipOutX {
+ from {
+ transform: perspective(400px);
+ }
+
+ 30% {
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+ opacity: 1;
+ }
+
+ to {
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutX {
+ animation-name: flipOutX;
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+}
+
+@keyframes flipOutY {
+ from {
+ transform: perspective(400px);
+ }
+
+ 30% {
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+ opacity: 1;
+ }
+
+ to {
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+ opacity: 0;
+ }
+}
+
+.flipOutY {
+ -webkit-backface-visibility: visible !important;
+ backface-visibility: visible !important;
+ animation-name: flipOutY;
+}
+
+@keyframes lightSpeedIn {
+ from {
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
+ opacity: 0;
+ }
+
+ 60% {
+ transform: skewX(20deg);
+ opacity: 1;
+ }
+
+ 80% {
+ transform: skewX(-5deg);
+ opacity: 1;
+ }
+
+ to {
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.lightSpeedIn {
+ animation-name: lightSpeedIn;
+ animation-timing-function: ease-out;
+}
+
+@keyframes lightSpeedOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ transform: translate3d(100%, 0, 0) skewX(30deg);
+ opacity: 0;
+ }
+}
+
+.lightSpeedOut {
+ animation-name: lightSpeedOut;
+ animation-timing-function: ease-in;
+}
+
+@keyframes rotateIn {
+ from {
+ transform-origin: center;
+ transform: rotate3d(0, 0, 1, -200deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: center;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateIn {
+ animation-name: rotateIn;
+}
+
+@keyframes rotateInDownLeft {
+ from {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateInDownLeft {
+ animation-name: rotateInDownLeft;
+}
+
+@keyframes rotateInDownRight {
+ from {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateInDownRight {
+ animation-name: rotateInDownRight;
+}
+
+@keyframes rotateInUpLeft {
+ from {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateInUpLeft {
+ animation-name: rotateInUpLeft;
+}
+
+@keyframes rotateInUpRight {
+ from {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, -90deg);
+ opacity: 0;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: none;
+ opacity: 1;
+ }
+}
+
+.rotateInUpRight {
+ animation-name: rotateInUpRight;
+}
+
+@keyframes rotateOut {
+ from {
+ transform-origin: center;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: center;
+ transform: rotate3d(0, 0, 1, 200deg);
+ opacity: 0;
+ }
+}
+
+.rotateOut {
+ animation-name: rotateOut;
+}
+
+@keyframes rotateOutDownLeft {
+ from {
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, 45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownLeft {
+ animation-name: rotateOutDownLeft;
+}
+
+@keyframes rotateOutDownRight {
+ from {
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutDownRight {
+ animation-name: rotateOutDownRight;
+}
+
+@keyframes rotateOutUpLeft {
+ from {
+ transform-origin: left bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: left bottom;
+ transform: rotate3d(0, 0, 1, -45deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpLeft {
+ animation-name: rotateOutUpLeft;
+}
+
+@keyframes rotateOutUpRight {
+ from {
+ transform-origin: right bottom;
+ opacity: 1;
+ }
+
+ to {
+ transform-origin: right bottom;
+ transform: rotate3d(0, 0, 1, 90deg);
+ opacity: 0;
+ }
+}
+
+.rotateOutUpRight {
+ animation-name: rotateOutUpRight;
+}
+
+@keyframes hinge {
+ 0% {
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ }
+
+ 20%, 60% {
+ transform: rotate3d(0, 0, 1, 80deg);
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ }
+
+ 40%, 80% {
+ transform: rotate3d(0, 0, 1, 60deg);
+ transform-origin: top left;
+ animation-timing-function: ease-in-out;
+ opacity: 1;
+ }
+
+ to {
+ transform: translate3d(0, 700px, 0);
+ opacity: 0;
+ }
+}
+
+.hinge {
+ animation-name: hinge;
+}
+
+@keyframes jackInTheBox {
+ from {
+ opacity: 0;
+ transform: scale(0.1) rotate(30deg);
+ transform-origin: center bottom;
+ }
+
+ 50% {
+ transform: rotate(-10deg);
+ }
+
+ 70% {
+ transform: rotate(3deg);
+ }
+
+ to {
+ opacity: 1;
+ transform: scale(1);
+ }
+}
+
+.jackInTheBox {
+ animation-name: jackInTheBox;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes rollIn {
+ from {
+ opacity: 0;
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+ }
+
+ to {
+ opacity: 1;
+ transform: none;
+ }
+}
+
+.rollIn {
+ animation-name: rollIn;
+}
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@keyframes rollOut {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+ }
+}
+
+.rollOut {
+ animation-name: rollOut;
+}
+
+@keyframes zoomIn {
+ from {
+ opacity: 0;
+ transform: scale3d(.2, .2, .2);
+ }
+
+ 50% {
+ opacity: 1;
+ }
+}
+
+.zoomIn {
+ animation-name: zoomIn;
+}
+
+@keyframes zoomInDown {
+ from {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomInDown {
+ animation-name: zoomInDown;
+}
+
+@keyframes zoomInLeft {
+ from {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomInLeft {
+ animation-name: zoomInLeft;
+}
+
+@keyframes zoomInRight {
+ from {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomInRight {
+ animation-name: zoomInRight;
+}
+
+@keyframes zoomInUp {
+ from {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ 60% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomInUp {
+ animation-name: zoomInUp;
+}
+
+@keyframes zoomOut {
+ from {
+ opacity: 1;
+ }
+
+ 50% {
+ opacity: 0;
+ transform: scale3d(.3, .3, .3);
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+.zoomOut {
+ animation-name: zoomOut;
+}
+
+@keyframes zoomOutDown {
+ 40% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+ transform-origin: center bottom;
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomOutDown {
+ animation-name: zoomOutDown;
+}
+
+@keyframes zoomOutLeft {
+ 40% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale(.1) translate3d(-2000px, 0, 0);
+ transform-origin: left center;
+ }
+}
+
+.zoomOutLeft {
+ animation-name: zoomOutLeft;
+}
+
+@keyframes zoomOutRight {
+ 40% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale(.1) translate3d(2000px, 0, 0);
+ transform-origin: right center;
+ }
+}
+
+.zoomOutRight {
+ animation-name: zoomOutRight;
+}
+
+@keyframes zoomOutUp {
+ 40% {
+ opacity: 1;
+ transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+ animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+ }
+
+ to {
+ opacity: 0;
+ transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+ transform-origin: center bottom;
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+ }
+}
+
+.zoomOutUp {
+ animation-name: zoomOutUp;
+}
+
+@keyframes slideInDown {
+ from {
+ transform: translate3d(0, -100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInDown {
+ animation-name: slideInDown;
+}
+
+@keyframes slideInLeft {
+ from {
+ transform: translate3d(-100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInLeft {
+ animation-name: slideInLeft;
+}
+
+@keyframes slideInRight {
+ from {
+ transform: translate3d(100%, 0, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInRight {
+ animation-name: slideInRight;
+}
+
+@keyframes slideInUp {
+ from {
+ transform: translate3d(0, 100%, 0);
+ visibility: visible;
+ }
+
+ to {
+ transform: translate3d(0, 0, 0);
+ }
+}
+
+.slideInUp {
+ animation-name: slideInUp;
+}
+
+@keyframes slideOutDown {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(0, 100%, 0);
+ }
+}
+
+.slideOutDown {
+ animation-name: slideOutDown;
+}
+
+@keyframes slideOutLeft {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(-100%, 0, 0);
+ }
+}
+
+.slideOutLeft {
+ animation-name: slideOutLeft;
+}
+
+@keyframes slideOutRight {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(100%, 0, 0);
+ }
+}
+
+.slideOutRight {
+ animation-name: slideOutRight;
+}
+
+@keyframes slideOutUp {
+ from {
+ transform: translate3d(0, 0, 0);
+ }
+
+ to {
+ visibility: hidden;
+ transform: translate3d(0, -100%, 0);
+ }
+}
+
+.slideOutUp {
+ animation-name: slideOutUp;
+}
diff --git a/utils/base_bg.wxss b/utils/base_bg.wxss
new file mode 100644
index 0000000..7f99ece
--- /dev/null
+++ b/utils/base_bg.wxss
@@ -0,0 +1,6 @@
+page {
+ background: url('data:image/jpeg;base64,/9j/4QAYRXhpZgAASUkqAAgAAAAAAAAAAAAAAP/sABFEdWNreQABAAQAAAAeAAD/4QMqaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA1LjUtYzAxNCA3OS4xNTE0ODEsIDIwMTMvMDMvMTMtMTI6MDk6MTUgICAgICAgICI+IDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+IDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bXA6Q3JlYXRvclRvb2w9IkFkb2JlIFBob3Rvc2hvcCBDQyAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RjZBMjIyNTFEQkI5MTFFNzgyNzVEMjEwRjA3NEM3QUEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RjZBMjIyNTJEQkI5MTFFNzgyNzVEMjEwRjA3NEM3QUEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpGNkEyMjI0RkRCQjkxMUU3ODI3NUQyMTBGMDc0QzdBQSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpGNkEyMjI1MERCQjkxMUU3ODI3NUQyMTBGMDc0QzdBQSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pv/uAA5BZG9iZQBkwAAAAAH/2wCEABALCwsMCxAMDBAXDw0PFxsUEBAU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');
+ background-size: 100% 100%;
+ background-attachment: fixed;
+ color: white;
+}
\ No newline at end of file
diff --git a/utils/common.js b/utils/common.js
new file mode 100644
index 0000000..39ff111
--- /dev/null
+++ b/utils/common.js
@@ -0,0 +1,26 @@
+function showTip(sms, icon, fun, t) {
+ if (!t) {
+ t = 1000;
+ }
+ wx.showToast({
+ title: sms,
+ icon: icon,
+ duration: t,
+ success: fun
+ })
+}
+
+function showModal(c,t,fun) {
+ if(!t)
+ t='提示'
+ wx.showModal({
+ title: t,
+ content: c,
+ showCancel:false,
+ success: fun
+ })
+}
+
+
+module.exports.showTip = showTip;
+module.exports.showModal = showModal;
\ No newline at end of file
diff --git a/utils/md5.js b/utils/md5.js
new file mode 100644
index 0000000..c476f0c
--- /dev/null
+++ b/utils/md5.js
@@ -0,0 +1,200 @@
+ var MD5 = function (string) {
+
+ function RotateLeft(lValue, iShiftBits) {
+ return (lValue<>>(32-iShiftBits));
+ }
+
+ function AddUnsigned(lX,lY) {
+ var lX4,lY4,lX8,lY8,lResult;
+ lX8 = (lX & 0x80000000);
+ lY8 = (lY & 0x80000000);
+ lX4 = (lX & 0x40000000);
+ lY4 = (lY & 0x40000000);
+ lResult = (lX & 0x3FFFFFFF)+(lY & 0x3FFFFFFF);
+ if (lX4 & lY4) {
+ return (lResult ^ 0x80000000 ^ lX8 ^ lY8);
+ }
+ if (lX4 | lY4) {
+ if (lResult & 0x40000000) {
+ return (lResult ^ 0xC0000000 ^ lX8 ^ lY8);
+ } else {
+ return (lResult ^ 0x40000000 ^ lX8 ^ lY8);
+ }
+ } else {
+ return (lResult ^ lX8 ^ lY8);
+ }
+ }
+
+ function F(x,y,z) { return (x & y) | ((~x) & z); }
+ function G(x,y,z) { return (x & z) | (y & (~z)); }
+ function H(x,y,z) { return (x ^ y ^ z); }
+ function I(x,y,z) { return (y ^ (x | (~z))); }
+
+ function FF(a,b,c,d,x,s,ac) {
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(F(b, c, d), x), ac));
+ return AddUnsigned(RotateLeft(a, s), b);
+ };
+
+ function GG(a,b,c,d,x,s,ac) {
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(G(b, c, d), x), ac));
+ return AddUnsigned(RotateLeft(a, s), b);
+ };
+
+ function HH(a,b,c,d,x,s,ac) {
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(H(b, c, d), x), ac));
+ return AddUnsigned(RotateLeft(a, s), b);
+ };
+
+ function II(a,b,c,d,x,s,ac) {
+ a = AddUnsigned(a, AddUnsigned(AddUnsigned(I(b, c, d), x), ac));
+ return AddUnsigned(RotateLeft(a, s), b);
+ };
+
+ function ConvertToWordArray(string) {
+ var lWordCount;
+ var lMessageLength = string.length;
+ var lNumberOfWords_temp1=lMessageLength + 8;
+ var lNumberOfWords_temp2=(lNumberOfWords_temp1-(lNumberOfWords_temp1 % 64))/64;
+ var lNumberOfWords = (lNumberOfWords_temp2+1)*16;
+ var lWordArray=Array(lNumberOfWords-1);
+ var lBytePosition = 0;
+ var lByteCount = 0;
+ while ( lByteCount < lMessageLength ) {
+ lWordCount = (lByteCount-(lByteCount % 4))/4;
+ lBytePosition = (lByteCount % 4)*8;
+ lWordArray[lWordCount] = (lWordArray[lWordCount] | (string.charCodeAt(lByteCount)<>>29;
+ return lWordArray;
+ };
+
+ function WordToHex(lValue) {
+ var WordToHexValue="",WordToHexValue_temp="",lByte,lCount;
+ for (lCount = 0;lCount<=3;lCount++) {
+ lByte = (lValue>>>(lCount*8)) & 255;
+ WordToHexValue_temp = "0" + lByte.toString(16);
+ WordToHexValue = WordToHexValue + WordToHexValue_temp.substr(WordToHexValue_temp.length-2,2);
+ }
+ return WordToHexValue;
+ };
+
+ function Utf8Encode(string) {
+ string = string.replace(/\r\n/g,"\n");
+ var utftext = "";
+
+ for (var n = 0; n < string.length; n++) {
+
+ var c = string.charCodeAt(n);
+
+ if (c < 128) {
+ utftext += String.fromCharCode(c);
+ }
+ else if((c > 127) && (c < 2048)) {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ else {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+
+ }
+
+ return utftext;
+ };
+
+ var x=Array();
+ var k,AA,BB,CC,DD,a,b,c,d;
+ var S11=7, S12=12, S13=17, S14=22;
+ var S21=5, S22=9 , S23=14, S24=20;
+ var S31=4, S32=11, S33=16, S34=23;
+ var S41=6, S42=10, S43=15, S44=21;
+
+ string = Utf8Encode(string);
+
+ x = ConvertToWordArray(string);
+
+ a = 0x67452301; b = 0xEFCDAB89; c = 0x98BADCFE; d = 0x10325476;
+
+ for (k=0;k {
+
+ let userInfo = that.data.userInfo
+ userInfo.tunnelId = getCurrentTunnelId()
+ that.setData({
+ status: '已连接,对手匹配中...',
+ userInfo,//用户信息存储当前的信道ID
+ })
+ tunnel.emit('updateMatchInfo', {//发起匹配
+ openId: that.data.openId,
+ sortId: opt.sortId,
+ friendsFightingRoom: opt.friendsFightingRoom//匹配者含friendsFightingRoom则说明是好友之间的匹配
+ })
+ }
+
+ app.tunnelCloseCallback = () => {
+ that.setData({ status: '连接已关闭' })
+ //util.showSuccess('连接已断开')
+ }
+
+ app.tunnelReconnectCallback = () => {
+ util.showSuccess('已重新连接')
+ let userInfo = that.data.userInfo
+ userInfo.tunnelId = getCurrentTunnelId()
+ that.setData({
+ status: '网络已重连,匹配中...',
+ userInfo,
+ })
+ tunnel.emit('updateMatchInfo', {//发起匹配
+ openId: that.data.openId,
+ sortId: opt.sortId,
+ friendsFightingRoom: opt.friendsFightingRoom//匹配者含friendsFightingRoom则说明是好友之间的匹配
+ })
+ }
+
+ app.tunnelReconnectCallback = () => {
+ util.showSuccess('已重新连接')
+ let userInfo = that.data.userInfo
+ userInfo.tunnelId = getCurrentTunnelId()
+ that.setData({
+ status: '网络重连成功,对手匹配中...',
+ userInfo,
+ })
+ }
+
+ app.tunnelErrorCallback = (error) => {
+ that.setData({ status: '信道发生错误:' + error })
+ util.showSuccess('连接错误')
+ }
+
+ tunnel.on('matchNotice', (res) => {//监听匹配成功
+ console.log('res', res)
+ let user_me, user_others
+ if (res.player1.openId === that.data.openId){
+ user_me = res.player1
+ user_others=res.player2
+ }else{
+ user_me = res.player2
+ user_others = res.player1
+ }
+ wx.setStorageSync('user_me', user_me)
+ wx.setStorageSync('user_others', user_others)
+ that.setData({ status: user_me.nickName + ' VS ' + user_others.nickName })
+ setTimeout(goto_fighting_room, 2000)//延迟1s跳转到战队页面
+ function goto_fighting_room() {
+ wx.redirectTo({ //navigateTo不会会卸载该页面,只是将当前页面隐藏了,redirectTo会销毁当前页面
+ url: `../fighting_room/fighting_room?roomName=${res.player1.roomName}`
+ })
+ }
+ })
+}
+module.exports = { match }
\ No newline at end of file
diff --git a/utils/underscore.js b/utils/underscore.js
new file mode 100644
index 0000000..1f79048
--- /dev/null
+++ b/utils/underscore.js
@@ -0,0 +1,1574 @@
+// Underscore.js 1.8.3
+// http://underscorejs.org
+// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+// Underscore may be freely distributed under the MIT license.
+
+(function() {
+
+ // Baseline setup
+ // --------------
+
+ // Establish the root object, `window` in the browser, or `exports` on the server.
+ //var root = this;
+
+ // Save the previous value of the `_` variable.
+ //var previousUnderscore = root._;
+
+ // Save bytes in the minified (but not gzipped) version:
+ var ArrayProto = Array.prototype,
+ ObjProto = Object.prototype,
+ FuncProto = Function.prototype;
+
+ // Create quick reference variables for speed access to core prototypes.
+ var
+ push = ArrayProto.push,
+ slice = ArrayProto.slice,
+ toString = ObjProto.toString,
+ hasOwnProperty = ObjProto.hasOwnProperty;
+
+ // All **ECMAScript 5** native function implementations that we hope to use
+ // are declared here.
+ var
+ nativeIsArray = Array.isArray,
+ nativeKeys = Object.keys,
+ nativeBind = FuncProto.bind,
+ nativeCreate = Object.create;
+
+ // Naked function reference for surrogate-prototype-swapping.
+ var Ctor = function() {};
+
+ // Create a safe reference to the Underscore object for use below.
+ var _ = function(obj) {
+ if (obj instanceof _) return obj;
+ if (!(this instanceof _)) return new _(obj);
+ this._wrapped = obj;
+ };
+
+ // Export the Underscore object for **Node.js**, with
+ // backwards-compatibility for the old `require()` API. If we're in
+ // the browser, add `_` as a global object.
+ if (typeof exports !== 'undefined') {
+ if (typeof module !== 'undefined' && module.exports) {
+ exports = module.exports = _;
+ }
+ exports._ = _;
+ } else {
+ root._ = _;
+ }
+
+ // Current version.
+ _.VERSION = '1.8.3';
+
+ // Internal function that returns an efficient (for current engines) version
+ // of the passed-in callback, to be repeatedly applied in other Underscore
+ // functions.
+ var optimizeCb = function(func, context, argCount) {
+ if (context === void 0) return func;
+ switch (argCount == null ? 3 : argCount) {
+ case 1:
+ return function(value) {
+ return func.call(context, value);
+ };
+ case 2:
+ return function(value, other) {
+ return func.call(context, value, other);
+ };
+ case 3:
+ return function(value, index, collection) {
+ return func.call(context, value, index, collection);
+ };
+ case 4:
+ return function(accumulator, value, index, collection) {
+ return func.call(context, accumulator, value, index, collection);
+ };
+ }
+ return function() {
+ return func.apply(context, arguments);
+ };
+ };
+
+ // A mostly-internal function to generate callbacks that can be applied
+ // to each element in a collection, returning the desired result — either
+ // identity, an arbitrary callback, a property matcher, or a property accessor.
+ var cb = function(value, context, argCount) {
+ if (value == null) return _.identity;
+ if (_.isFunction(value)) return optimizeCb(value, context, argCount);
+ if (_.isObject(value)) return _.matcher(value);
+ return _.property(value);
+ };
+ _.iteratee = function(value, context) {
+ return cb(value, context, Infinity);
+ };
+
+ // An internal function for creating assigner functions.
+ var createAssigner = function(keysFunc, undefinedOnly) {
+ return function(obj) {
+ var length = arguments.length;
+ if (length < 2 || obj == null) return obj;
+ for (var index = 1; index < length; index++) {
+ var source = arguments[index],
+ keys = keysFunc(source),
+ l = keys.length;
+ for (var i = 0; i < l; i++) {
+ var key = keys[i];
+ if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];
+ }
+ }
+ return obj;
+ };
+ };
+
+ // An internal function for creating a new object that inherits from another.
+ var baseCreate = function(prototype) {
+ if (!_.isObject(prototype)) return {};
+ if (nativeCreate) return nativeCreate(prototype);
+ Ctor.prototype = prototype;
+ var result = new Ctor;
+ Ctor.prototype = null;
+ return result;
+ };
+
+ var property = function(key) {
+ return function(obj) {
+ return obj == null ? void 0 : obj[key];
+ };
+ };
+
+ // Helper for collection methods to determine whether a collection
+ // should be iterated as an array or as an object
+ // Related: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tolength
+ // Avoids a very nasty iOS 8 JIT bug on ARM-64. #2094
+ var MAX_ARRAY_INDEX = Math.pow(2, 53) - 1;
+ var getLength = property('length');
+ var isArrayLike = function(collection) {
+ var length = getLength(collection);
+ return typeof length == 'number' && length >= 0 && length <= MAX_ARRAY_INDEX;
+ };
+
+ // Collection Functions
+ // --------------------
+
+ // The cornerstone, an `each` implementation, aka `forEach`.
+ // Handles raw objects in addition to array-likes. Treats all
+ // sparse array-likes as if they were dense.
+ _.each = _.forEach = function(obj, iteratee, context) {
+ iteratee = optimizeCb(iteratee, context);
+ var i, length;
+ if (isArrayLike(obj)) {
+ for (i = 0, length = obj.length; i < length; i++) {
+ iteratee(obj[i], i, obj);
+ }
+ } else {
+ var keys = _.keys(obj);
+ for (i = 0, length = keys.length; i < length; i++) {
+ iteratee(obj[keys[i]], keys[i], obj);
+ }
+ }
+ return obj;
+ };
+
+ // Return the results of applying the iteratee to each element.
+ _.map = _.collect = function(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length,
+ results = Array(length);
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys ? keys[index] : index;
+ results[index] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+ };
+
+ // Create a reducing function iterating left or right.
+ function createReduce(dir) {
+ // Optimized iterator function as using arguments.length
+ // in the main function will deoptimize the, see #1991.
+ function iterator(obj, iteratee, memo, keys, index, length) {
+ for (; index >= 0 && index < length; index += dir) {
+ var currentKey = keys ? keys[index] : index;
+ memo = iteratee(memo, obj[currentKey], currentKey, obj);
+ }
+ return memo;
+ }
+
+ return function(obj, iteratee, memo, context) {
+ iteratee = optimizeCb(iteratee, context, 4);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length,
+ index = dir > 0 ? 0 : length - 1;
+ // Determine the initial value if none is provided.
+ if (arguments.length < 3) {
+ memo = obj[keys ? keys[index] : index];
+ index += dir;
+ }
+ return iterator(obj, iteratee, memo, keys, index, length);
+ };
+ }
+
+ // **Reduce** builds up a single result from a list of values, aka `inject`,
+ // or `foldl`.
+ _.reduce = _.foldl = _.inject = createReduce(1);
+
+ // The right-associative version of reduce, also known as `foldr`.
+ _.reduceRight = _.foldr = createReduce(-1);
+
+ // Return the first value which passes a truth test. Aliased as `detect`.
+ _.find = _.detect = function(obj, predicate, context) {
+ var key;
+ if (isArrayLike(obj)) {
+ key = _.findIndex(obj, predicate, context);
+ } else {
+ key = _.findKey(obj, predicate, context);
+ }
+ if (key !== void 0 && key !== -1) return obj[key];
+ };
+
+ // Return all the elements that pass a truth test.
+ // Aliased as `select`.
+ _.filter = _.select = function(obj, predicate, context) {
+ var results = [];
+ predicate = cb(predicate, context);
+ _.each(obj, function(value, index, list) {
+ if (predicate(value, index, list)) results.push(value);
+ });
+ return results;
+ };
+
+ // Return all the elements for which a truth test fails.
+ _.reject = function(obj, predicate, context) {
+ return _.filter(obj, _.negate(cb(predicate)), context);
+ };
+
+ // Determine whether all of the elements match a truth test.
+ // Aliased as `all`.
+ _.every = _.all = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys ? keys[index] : index;
+ if (!predicate(obj[currentKey], currentKey, obj)) return false;
+ }
+ return true;
+ };
+
+ // Determine if at least one element in the object matches a truth test.
+ // Aliased as `any`.
+ _.some = _.any = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var keys = !isArrayLike(obj) && _.keys(obj),
+ length = (keys || obj).length;
+ for (var index = 0; index < length; index++) {
+ var currentKey = keys ? keys[index] : index;
+ if (predicate(obj[currentKey], currentKey, obj)) return true;
+ }
+ return false;
+ };
+
+ // Determine if the array or object contains a given item (using `===`).
+ // Aliased as `includes` and `include`.
+ _.contains = _.includes = _.include = function(obj, item, fromIndex, guard) {
+ if (!isArrayLike(obj)) obj = _.values(obj);
+ if (typeof fromIndex != 'number' || guard) fromIndex = 0;
+ return _.indexOf(obj, item, fromIndex) >= 0;
+ };
+
+ // Invoke a method (with arguments) on every item in a collection.
+ _.invoke = function(obj, method) {
+ var args = slice.call(arguments, 2);
+ var isFunc = _.isFunction(method);
+ return _.map(obj, function(value) {
+ var func = isFunc ? method : value[method];
+ return func == null ? func : func.apply(value, args);
+ });
+ };
+
+ // Convenience version of a common use case of `map`: fetching a property.
+ _.pluck = function(obj, key) {
+ return _.map(obj, _.property(key));
+ };
+
+ // Convenience version of a common use case of `filter`: selecting only objects
+ // containing specific `key:value` pairs.
+ _.where = function(obj, attrs) {
+ return _.filter(obj, _.matcher(attrs));
+ };
+
+ // Convenience version of a common use case of `find`: getting the first object
+ // containing specific `key:value` pairs.
+ _.findWhere = function(obj, attrs) {
+ return _.find(obj, _.matcher(attrs));
+ };
+
+ // Return the maximum element (or element-based computation).
+ _.max = function(obj, iteratee, context) {
+ var result = -Infinity,
+ lastComputed = -Infinity,
+ value, computed;
+ if (iteratee == null && obj != null) {
+ obj = isArrayLike(obj) ? obj : _.values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value > result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(value, index, list) {
+ computed = iteratee(value, index, list);
+ if (computed > lastComputed || computed === -Infinity && result === -Infinity) {
+ result = value;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ };
+
+ // Return the minimum element (or element-based computation).
+ _.min = function(obj, iteratee, context) {
+ var result = Infinity,
+ lastComputed = Infinity,
+ value, computed;
+ if (iteratee == null && obj != null) {
+ obj = isArrayLike(obj) ? obj : _.values(obj);
+ for (var i = 0, length = obj.length; i < length; i++) {
+ value = obj[i];
+ if (value < result) {
+ result = value;
+ }
+ }
+ } else {
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(value, index, list) {
+ computed = iteratee(value, index, list);
+ if (computed < lastComputed || computed === Infinity && result === Infinity) {
+ result = value;
+ lastComputed = computed;
+ }
+ });
+ }
+ return result;
+ };
+
+ // Shuffle a collection, using the modern version of the
+ // [Fisher-Yates shuffle](http://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
+ _.shuffle = function(obj) {
+ var set = isArrayLike(obj) ? obj : _.values(obj);
+ var length = set.length;
+ var shuffled = Array(length);
+ for (var index = 0, rand; index < length; index++) {
+ rand = _.random(0, index);
+ if (rand !== index) shuffled[index] = shuffled[rand];
+ shuffled[rand] = set[index];
+ }
+ return shuffled;
+ };
+
+ // Sample **n** random values from a collection.
+ // If **n** is not specified, returns a single random element.
+ // The internal `guard` argument allows it to work with `map`.
+ _.sample = function(obj, n, guard) {
+ if (n == null || guard) {
+ if (!isArrayLike(obj)) obj = _.values(obj);
+ return obj[_.random(obj.length - 1)];
+ }
+ return _.shuffle(obj).slice(0, Math.max(0, n));
+ };
+
+ // Sort the object's values by a criterion produced by an iteratee.
+ _.sortBy = function(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ return _.pluck(_.map(obj, function(value, index, list) {
+ return {
+ value: value,
+ index: index,
+ criteria: iteratee(value, index, list)
+ };
+ }).sort(function(left, right) {
+ var a = left.criteria;
+ var b = right.criteria;
+ if (a !== b) {
+ if (a > b || a === void 0) return 1;
+ if (a < b || b === void 0) return -1;
+ }
+ return left.index - right.index;
+ }), 'value');
+ };
+
+ // An internal function used for aggregate "group by" operations.
+ var group = function(behavior) {
+ return function(obj, iteratee, context) {
+ var result = {};
+ iteratee = cb(iteratee, context);
+ _.each(obj, function(value, index) {
+ var key = iteratee(value, index, obj);
+ behavior(result, value, key);
+ });
+ return result;
+ };
+ };
+
+ // Groups the object's values by a criterion. Pass either a string attribute
+ // to group by, or a function that returns the criterion.
+ _.groupBy = group(function(result, value, key) {
+ if (_.has(result, key)) result[key].push(value);
+ else result[key] = [value];
+ });
+
+ // Indexes the object's values by a criterion, similar to `groupBy`, but for
+ // when you know that your index values will be unique.
+ _.indexBy = group(function(result, value, key) {
+ result[key] = value;
+ });
+
+ // Counts instances of an object that group by a certain criterion. Pass
+ // either a string attribute to count by, or a function that returns the
+ // criterion.
+ _.countBy = group(function(result, value, key) {
+ if (_.has(result, key)) result[key]++;
+ else result[key] = 1;
+ });
+
+ // Safely create a real, live array from anything iterable.
+ _.toArray = function(obj) {
+ if (!obj) return [];
+ if (_.isArray(obj)) return slice.call(obj);
+ if (isArrayLike(obj)) return _.map(obj, _.identity);
+ return _.values(obj);
+ };
+
+ // Return the number of elements in an object.
+ _.size = function(obj) {
+ if (obj == null) return 0;
+ return isArrayLike(obj) ? obj.length : _.keys(obj).length;
+ };
+
+ // Split a collection into two arrays: one whose elements all satisfy the given
+ // predicate, and one whose elements all do not satisfy the predicate.
+ _.partition = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var pass = [],
+ fail = [];
+ _.each(obj, function(value, key, obj) {
+ (predicate(value, key, obj) ? pass : fail).push(value);
+ });
+ return [pass, fail];
+ };
+
+ // Array Functions
+ // ---------------
+
+ // Get the first element of an array. Passing **n** will return the first N
+ // values in the array. Aliased as `head` and `take`. The **guard** check
+ // allows it to work with `_.map`.
+ _.first = _.head = _.take = function(array, n, guard) {
+ if (array == null) return void 0;
+ if (n == null || guard) return array[0];
+ return _.initial(array, array.length - n);
+ };
+
+ // Returns everything but the last entry of the array. Especially useful on
+ // the arguments object. Passing **n** will return all the values in
+ // the array, excluding the last N.
+ _.initial = function(array, n, guard) {
+ return slice.call(array, 0, Math.max(0, array.length - (n == null || guard ? 1 : n)));
+ };
+
+ // Get the last element of an array. Passing **n** will return the last N
+ // values in the array.
+ _.last = function(array, n, guard) {
+ if (array == null) return void 0;
+ if (n == null || guard) return array[array.length - 1];
+ return _.rest(array, Math.max(0, array.length - n));
+ };
+
+ // Returns everything but the first entry of the array. Aliased as `tail` and `drop`.
+ // Especially useful on the arguments object. Passing an **n** will return
+ // the rest N values in the array.
+ _.rest = _.tail = _.drop = function(array, n, guard) {
+ return slice.call(array, n == null || guard ? 1 : n);
+ };
+
+ // Trim out all falsy values from an array.
+ _.compact = function(array) {
+ return _.filter(array, _.identity);
+ };
+
+ // Internal implementation of a recursive `flatten` function.
+ var flatten = function(input, shallow, strict, startIndex) {
+ var output = [],
+ idx = 0;
+ for (var i = startIndex || 0, length = getLength(input); i < length; i++) {
+ var value = input[i];
+ if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
+ //flatten current level of array or arguments object
+ if (!shallow) value = flatten(value, shallow, strict);
+ var j = 0,
+ len = value.length;
+ output.length += len;
+ while (j < len) {
+ output[idx++] = value[j++];
+ }
+ } else if (!strict) {
+ output[idx++] = value;
+ }
+ }
+ return output;
+ };
+
+ // Flatten out an array, either recursively (by default), or just one level.
+ _.flatten = function(array, shallow) {
+ return flatten(array, shallow, false);
+ };
+
+ // Return a version of the array that does not contain the specified value(s).
+ _.without = function(array) {
+ return _.difference(array, slice.call(arguments, 1));
+ };
+
+ // Produce a duplicate-free version of the array. If the array has already
+ // been sorted, you have the option of using a faster algorithm.
+ // Aliased as `unique`.
+ _.uniq = _.unique = function(array, isSorted, iteratee, context) {
+ if (!_.isBoolean(isSorted)) {
+ context = iteratee;
+ iteratee = isSorted;
+ isSorted = false;
+ }
+ if (iteratee != null) iteratee = cb(iteratee, context);
+ var result = [];
+ var seen = [];
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var value = array[i],
+ computed = iteratee ? iteratee(value, i, array) : value;
+ if (isSorted) {
+ if (!i || seen !== computed) result.push(value);
+ seen = computed;
+ } else if (iteratee) {
+ if (!_.contains(seen, computed)) {
+ seen.push(computed);
+ result.push(value);
+ }
+ } else if (!_.contains(result, value)) {
+ result.push(value);
+ }
+ }
+ return result;
+ };
+
+ // Produce an array that contains the union: each distinct element from all of
+ // the passed-in arrays.
+ _.union = function() {
+ return _.uniq(flatten(arguments, true, true));
+ };
+
+ // Produce an array that contains every item shared between all the
+ // passed-in arrays.
+ _.intersection = function(array) {
+ var result = [];
+ var argsLength = arguments.length;
+ for (var i = 0, length = getLength(array); i < length; i++) {
+ var item = array[i];
+ if (_.contains(result, item)) continue;
+ for (var j = 1; j < argsLength; j++) {
+ if (!_.contains(arguments[j], item)) break;
+ }
+ if (j === argsLength) result.push(item);
+ }
+ return result;
+ };
+
+ // Take the difference between one array and a number of other arrays.
+ // Only the elements present in just the first array will remain.
+ _.difference = function(array) {
+ var rest = flatten(arguments, true, true, 1);
+ return _.filter(array, function(value) {
+ return !_.contains(rest, value);
+ });
+ };
+
+ // Zip together multiple lists into a single array -- elements that share
+ // an index go together.
+ _.zip = function() {
+ return _.unzip(arguments);
+ };
+
+ // Complement of _.zip. Unzip accepts an array of arrays and groups
+ // each array's elements on shared indices
+ _.unzip = function(array) {
+ var length = array && _.max(array, getLength).length || 0;
+ var result = Array(length);
+
+ for (var index = 0; index < length; index++) {
+ result[index] = _.pluck(array, index);
+ }
+ return result;
+ };
+
+ // Converts lists into objects. Pass either a single array of `[key, value]`
+ // pairs, or two parallel arrays of the same length -- one of keys, and one of
+ // the corresponding values.
+ _.object = function(list, values) {
+ var result = {};
+ for (var i = 0, length = getLength(list); i < length; i++) {
+ if (values) {
+ result[list[i]] = values[i];
+ } else {
+ result[list[i][0]] = list[i][1];
+ }
+ }
+ return result;
+ };
+
+ // Generator function to create the findIndex and findLastIndex functions
+ function createPredicateIndexFinder(dir) {
+ return function(array, predicate, context) {
+ predicate = cb(predicate, context);
+ var length = getLength(array);
+ var index = dir > 0 ? 0 : length - 1;
+ for (; index >= 0 && index < length; index += dir) {
+ if (predicate(array[index], index, array)) return index;
+ }
+ return -1;
+ };
+ }
+
+ // Returns the first index on an array-like that passes a predicate test
+ _.findIndex = createPredicateIndexFinder(1);
+ _.findLastIndex = createPredicateIndexFinder(-1);
+
+ // Use a comparator function to figure out the smallest index at which
+ // an object should be inserted so as to maintain order. Uses binary search.
+ _.sortedIndex = function(array, obj, iteratee, context) {
+ iteratee = cb(iteratee, context, 1);
+ var value = iteratee(obj);
+ var low = 0,
+ high = getLength(array);
+ while (low < high) {
+ var mid = Math.floor((low + high) / 2);
+ if (iteratee(array[mid]) < value) low = mid + 1;
+ else high = mid;
+ }
+ return low;
+ };
+
+ // Generator function to create the indexOf and lastIndexOf functions
+ function createIndexFinder(dir, predicateFind, sortedIndex) {
+ return function(array, item, idx) {
+ var i = 0,
+ length = getLength(array);
+ if (typeof idx == 'number') {
+ if (dir > 0) {
+ i = idx >= 0 ? idx : Math.max(idx + length, i);
+ } else {
+ length = idx >= 0 ? Math.min(idx + 1, length) : idx + length + 1;
+ }
+ } else if (sortedIndex && idx && length) {
+ idx = sortedIndex(array, item);
+ return array[idx] === item ? idx : -1;
+ }
+ if (item !== item) {
+ idx = predicateFind(slice.call(array, i, length), _.isNaN);
+ return idx >= 0 ? idx + i : -1;
+ }
+ for (idx = dir > 0 ? i : length - 1; idx >= 0 && idx < length; idx += dir) {
+ if (array[idx] === item) return idx;
+ }
+ return -1;
+ };
+ }
+
+ // Return the position of the first occurrence of an item in an array,
+ // or -1 if the item is not included in the array.
+ // If the array is large and already in sort order, pass `true`
+ // for **isSorted** to use binary search.
+ _.indexOf = createIndexFinder(1, _.findIndex, _.sortedIndex);
+ _.lastIndexOf = createIndexFinder(-1, _.findLastIndex);
+
+ // Generate an integer Array containing an arithmetic progression. A port of
+ // the native Python `range()` function. See
+ // [the Python documentation](http://docs.python.org/library/functions.html#range).
+ _.range = function(start, stop, step) {
+ if (stop == null) {
+ stop = start || 0;
+ start = 0;
+ }
+ step = step || 1;
+
+ var length = Math.max(Math.ceil((stop - start) / step), 0);
+ var range = Array(length);
+
+ for (var idx = 0; idx < length; idx++, start += step) {
+ range[idx] = start;
+ }
+
+ return range;
+ };
+
+ // Function (ahem) Functions
+ // ------------------
+
+ // Determines whether to execute a function as a constructor
+ // or a normal function with the provided arguments
+ var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
+ if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
+ var self = baseCreate(sourceFunc.prototype);
+ var result = sourceFunc.apply(self, args);
+ if (_.isObject(result)) return result;
+ return self;
+ };
+
+ // Create a function bound to a given object (assigning `this`, and arguments,
+ // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if
+ // available.
+ _.bind = function(func, context) {
+ if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
+ if (!_.isFunction(func)) throw new TypeError('Bind must be called on a function');
+ var args = slice.call(arguments, 2);
+ var bound = function() {
+ return executeBound(func, bound, context, this, args.concat(slice.call(arguments)));
+ };
+ return bound;
+ };
+
+ // Partially apply a function by creating a version that has had some of its
+ // arguments pre-filled, without changing its dynamic `this` context. _ acts
+ // as a placeholder, allowing any combination of arguments to be pre-filled.
+ _.partial = function(func) {
+ var boundArgs = slice.call(arguments, 1);
+ var bound = function() {
+ var position = 0,
+ length = boundArgs.length;
+ var args = Array(length);
+ for (var i = 0; i < length; i++) {
+ args[i] = boundArgs[i] === _ ? arguments[position++] : boundArgs[i];
+ }
+ while (position < arguments.length) args.push(arguments[position++]);
+ return executeBound(func, bound, this, this, args);
+ };
+ return bound;
+ };
+
+ // Bind a number of an object's methods to that object. Remaining arguments
+ // are the method names to be bound. Useful for ensuring that all callbacks
+ // defined on an object belong to it.
+ _.bindAll = function(obj) {
+ var i, length = arguments.length,
+ key;
+ if (length <= 1) throw new Error('bindAll must be passed function names');
+ for (i = 1; i < length; i++) {
+ key = arguments[i];
+ obj[key] = _.bind(obj[key], obj);
+ }
+ return obj;
+ };
+
+ // Memoize an expensive function by storing its results.
+ _.memoize = function(func, hasher) {
+ var memoize = function(key) {
+ var cache = memoize.cache;
+ var address = '' + (hasher ? hasher.apply(this, arguments) : key);
+ if (!_.has(cache, address)) cache[address] = func.apply(this, arguments);
+ return cache[address];
+ };
+ memoize.cache = {};
+ return memoize;
+ };
+
+ // Delays a function for the given number of milliseconds, and then calls
+ // it with the arguments supplied.
+ _.delay = function(func, wait) {
+ var args = slice.call(arguments, 2);
+ return setTimeout(function() {
+ return func.apply(null, args);
+ }, wait);
+ };
+
+ // Defers a function, scheduling it to run after the current call stack has
+ // cleared.
+ _.defer = _.partial(_.delay, _, 1);
+
+ // Returns a function, that, when invoked, will only be triggered at most once
+ // during a given window of time. Normally, the throttled function will run
+ // as much as it can, without ever going more than once per `wait` duration;
+ // but if you'd like to disable the execution on the leading edge, pass
+ // `{leading: false}`. To disable execution on the trailing edge, ditto.
+ _.throttle = function(func, wait, options) {
+ var context, args, result;
+ var timeout = null;
+ var previous = 0;
+ if (!options) options = {};
+ var later = function() {
+ previous = options.leading === false ? 0 : _.now();
+ timeout = null;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ };
+ return function() {
+ var now = _.now();
+ if (!previous && options.leading === false) previous = now;
+ var remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0 || remaining > wait) {
+ if (timeout) {
+ clearTimeout(timeout);
+ timeout = null;
+ }
+ previous = now;
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ } else if (!timeout && options.trailing !== false) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ };
+
+ // Returns a function, that, as long as it continues to be invoked, will not
+ // be triggered. The function will be called after it stops being called for
+ // N milliseconds. If `immediate` is passed, trigger the function on the
+ // leading edge, instead of the trailing.
+ _.debounce = function(func, wait, immediate) {
+ var timeout, args, context, timestamp, result;
+
+ var later = function() {
+ var last = _.now() - timestamp;
+
+ if (last < wait && last >= 0) {
+ timeout = setTimeout(later, wait - last);
+ } else {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
+ if (!timeout) context = args = null;
+ }
+ }
+ };
+
+ return function() {
+ context = this;
+ args = arguments;
+ timestamp = _.now();
+ var callNow = immediate && !timeout;
+ if (!timeout) timeout = setTimeout(later, wait);
+ if (callNow) {
+ result = func.apply(context, args);
+ context = args = null;
+ }
+
+ return result;
+ };
+ };
+
+ // Returns the first function passed as an argument to the second,
+ // allowing you to adjust arguments, run code before and after, and
+ // conditionally execute the original function.
+ _.wrap = function(func, wrapper) {
+ return _.partial(wrapper, func);
+ };
+
+ // Returns a negated version of the passed-in predicate.
+ _.negate = function(predicate) {
+ return function() {
+ return !predicate.apply(this, arguments);
+ };
+ };
+
+ // Returns a function that is the composition of a list of functions, each
+ // consuming the return value of the function that follows.
+ _.compose = function() {
+ var args = arguments;
+ var start = args.length - 1;
+ return function() {
+ var i = start;
+ var result = args[start].apply(this, arguments);
+ while (i--) result = args[i].call(this, result);
+ return result;
+ };
+ };
+
+ // Returns a function that will only be executed on and after the Nth call.
+ _.after = function(times, func) {
+ return function() {
+ if (--times < 1) {
+ return func.apply(this, arguments);
+ }
+ };
+ };
+
+ // Returns a function that will only be executed up to (but not including) the Nth call.
+ _.before = function(times, func) {
+ var memo;
+ return function() {
+ if (--times > 0) {
+ memo = func.apply(this, arguments);
+ }
+ if (times <= 1) func = null;
+ return memo;
+ };
+ };
+
+ // Returns a function that will be executed at most one time, no matter how
+ // often you call it. Useful for lazy initialization.
+ _.once = _.partial(_.before, 2);
+
+ // Object Functions
+ // ----------------
+
+ // Keys in IE < 9 that won't be iterated by `for key in ...` and thus missed.
+ var hasEnumBug = !{ toString: null }.propertyIsEnumerable('toString');
+ var nonEnumerableProps = ['valueOf', 'isPrototypeOf', 'toString',
+ 'propertyIsEnumerable', 'hasOwnProperty', 'toLocaleString'
+ ];
+
+ function collectNonEnumProps(obj, keys) {
+ var nonEnumIdx = nonEnumerableProps.length;
+ var constructor = obj.constructor;
+ var proto = (_.isFunction(constructor) && constructor.prototype) || ObjProto;
+
+ // Constructor is a special case.
+ var prop = 'constructor';
+ if (_.has(obj, prop) && !_.contains(keys, prop)) keys.push(prop);
+
+ while (nonEnumIdx--) {
+ prop = nonEnumerableProps[nonEnumIdx];
+ if (prop in obj && obj[prop] !== proto[prop] && !_.contains(keys, prop)) {
+ keys.push(prop);
+ }
+ }
+ }
+
+ // Retrieve the names of an object's own properties.
+ // Delegates to **ECMAScript 5**'s native `Object.keys`
+ _.keys = function(obj) {
+ if (!_.isObject(obj)) return [];
+ if (nativeKeys) return nativeKeys(obj);
+ var keys = [];
+ for (var key in obj)
+ if (_.has(obj, key)) keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, keys);
+ return keys;
+ };
+
+ // Retrieve all the property names of an object.
+ _.allKeys = function(obj) {
+ if (!_.isObject(obj)) return [];
+ var keys = [];
+ for (var key in obj) keys.push(key);
+ // Ahem, IE < 9.
+ if (hasEnumBug) collectNonEnumProps(obj, keys);
+ return keys;
+ };
+
+ // Retrieve the values of an object's properties.
+ _.values = function(obj) {
+ var keys = _.keys(obj);
+ var length = keys.length;
+ var values = Array(length);
+ for (var i = 0; i < length; i++) {
+ values[i] = obj[keys[i]];
+ }
+ return values;
+ };
+
+ // Returns the results of applying the iteratee to each element of the object
+ // In contrast to _.map it returns an object
+ _.mapObject = function(obj, iteratee, context) {
+ iteratee = cb(iteratee, context);
+ var keys = _.keys(obj),
+ length = keys.length,
+ results = {},
+ currentKey;
+ for (var index = 0; index < length; index++) {
+ currentKey = keys[index];
+ results[currentKey] = iteratee(obj[currentKey], currentKey, obj);
+ }
+ return results;
+ };
+
+ // Convert an object into a list of `[key, value]` pairs.
+ _.pairs = function(obj) {
+ var keys = _.keys(obj);
+ var length = keys.length;
+ var pairs = Array(length);
+ for (var i = 0; i < length; i++) {
+ pairs[i] = [keys[i], obj[keys[i]]];
+ }
+ return pairs;
+ };
+
+ // Invert the keys and values of an object. The values must be serializable.
+ _.invert = function(obj) {
+ var result = {};
+ var keys = _.keys(obj);
+ for (var i = 0, length = keys.length; i < length; i++) {
+ result[obj[keys[i]]] = keys[i];
+ }
+ return result;
+ };
+
+ // Return a sorted list of the function names available on the object.
+ // Aliased as `methods`
+ _.functions = _.methods = function(obj) {
+ var names = [];
+ for (var key in obj) {
+ if (_.isFunction(obj[key])) names.push(key);
+ }
+ return names.sort();
+ };
+
+ // Extend a given object with all the properties in passed-in object(s).
+ _.extend = createAssigner(_.allKeys);
+
+ // Assigns a given object with all the own properties in the passed-in object(s)
+ // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
+ _.extendOwn = _.assign = createAssigner(_.keys);
+
+ // Returns the first key on an object that passes a predicate test
+ _.findKey = function(obj, predicate, context) {
+ predicate = cb(predicate, context);
+ var keys = _.keys(obj),
+ key;
+ for (var i = 0, length = keys.length; i < length; i++) {
+ key = keys[i];
+ if (predicate(obj[key], key, obj)) return key;
+ }
+ };
+
+ // Return a copy of the object only containing the whitelisted properties.
+ _.pick = function(object, oiteratee, context) {
+ var result = {},
+ obj = object,
+ iteratee, keys;
+ if (obj == null) return result;
+ if (_.isFunction(oiteratee)) {
+ keys = _.allKeys(obj);
+ iteratee = optimizeCb(oiteratee, context);
+ } else {
+ keys = flatten(arguments, false, false, 1);
+ iteratee = function(value, key, obj) { return key in obj; };
+ obj = Object(obj);
+ }
+ for (var i = 0, length = keys.length; i < length; i++) {
+ var key = keys[i];
+ var value = obj[key];
+ if (iteratee(value, key, obj)) result[key] = value;
+ }
+ return result;
+ };
+
+ // Return a copy of the object without the blacklisted properties.
+ _.omit = function(obj, iteratee, context) {
+ if (_.isFunction(iteratee)) {
+ iteratee = _.negate(iteratee);
+ } else {
+ var keys = _.map(flatten(arguments, false, false, 1), String);
+ iteratee = function(value, key) {
+ return !_.contains(keys, key);
+ };
+ }
+ return _.pick(obj, iteratee, context);
+ };
+
+ // Fill in a given object with default properties.
+ _.defaults = createAssigner(_.allKeys, true);
+
+ // Creates an object that inherits from the given prototype object.
+ // If additional properties are provided then they will be added to the
+ // created object.
+ _.create = function(prototype, props) {
+ var result = baseCreate(prototype);
+ if (props) _.extendOwn(result, props);
+ return result;
+ };
+
+ // Create a (shallow-cloned) duplicate of an object.
+ _.clone = function(obj) {
+ if (!_.isObject(obj)) return obj;
+ return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+ };
+
+ // Invokes interceptor with the obj, and then returns obj.
+ // The primary purpose of this method is to "tap into" a method chain, in
+ // order to perform operations on intermediate results within the chain.
+ _.tap = function(obj, interceptor) {
+ interceptor(obj);
+ return obj;
+ };
+
+ // Returns whether an object has a given set of `key:value` pairs.
+ _.isMatch = function(object, attrs) {
+ var keys = _.keys(attrs),
+ length = keys.length;
+ if (object == null) return !length;
+ var obj = Object(object);
+ for (var i = 0; i < length; i++) {
+ var key = keys[i];
+ if (attrs[key] !== obj[key] || !(key in obj)) return false;
+ }
+ return true;
+ };
+
+
+ // Internal recursive comparison function for `isEqual`.
+ var eq = function(a, b, aStack, bStack) {
+ // Identical objects are equal. `0 === -0`, but they aren't identical.
+ // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal).
+ if (a === b) return a !== 0 || 1 / a === 1 / b;
+ // A strict comparison is necessary because `null == undefined`.
+ if (a == null || b == null) return a === b;
+ // Unwrap any wrapped objects.
+ if (a instanceof _) a = a._wrapped;
+ if (b instanceof _) b = b._wrapped;
+ // Compare `[[Class]]` names.
+ var className = toString.call(a);
+ if (className !== toString.call(b)) return false;
+ switch (className) {
+ // Strings, numbers, regular expressions, dates, and booleans are compared by value.
+ case '[object RegExp]':
+ // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i')
+ case '[object String]':
+ // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+ // equivalent to `new String("5")`.
+ return '' + a === '' + b;
+ case '[object Number]':
+ // `NaN`s are equivalent, but non-reflexive.
+ // Object(NaN) is equivalent to NaN
+ if (+a !== +a) return +b !== +b;
+ // An `egal` comparison is performed for other numeric values.
+ return +a === 0 ? 1 / +a === 1 / b : +a === +b;
+ case '[object Date]':
+ case '[object Boolean]':
+ // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+ // millisecond representations. Note that invalid dates with millisecond representations
+ // of `NaN` are not equivalent.
+ return +a === +b;
+ }
+
+ var areArrays = className === '[object Array]';
+ if (!areArrays) {
+ if (typeof a != 'object' || typeof b != 'object') return false;
+
+ // Objects with different constructors are not equivalent, but `Object`s or `Array`s
+ // from different frames are.
+ var aCtor = a.constructor,
+ bCtor = b.constructor;
+ if (aCtor !== bCtor && !(_.isFunction(aCtor) && aCtor instanceof aCtor &&
+ _.isFunction(bCtor) && bCtor instanceof bCtor) &&
+ ('constructor' in a && 'constructor' in b)) {
+ return false;
+ }
+ }
+ // Assume equality for cyclic structures. The algorithm for detecting cyclic
+ // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+
+ // Initializing stack of traversed objects.
+ // It's done here since we only need them for objects and arrays comparison.
+ aStack = aStack || [];
+ bStack = bStack || [];
+ var length = aStack.length;
+ while (length--) {
+ // Linear search. Performance is inversely proportional to the number of
+ // unique nested structures.
+ if (aStack[length] === a) return bStack[length] === b;
+ }
+
+ // Add the first object to the stack of traversed objects.
+ aStack.push(a);
+ bStack.push(b);
+
+ // Recursively compare objects and arrays.
+ if (areArrays) {
+ // Compare array lengths to determine if a deep comparison is necessary.
+ length = a.length;
+ if (length !== b.length) return false;
+ // Deep compare the contents, ignoring non-numeric properties.
+ while (length--) {
+ if (!eq(a[length], b[length], aStack, bStack)) return false;
+ }
+ } else {
+ // Deep compare objects.
+ var keys = _.keys(a),
+ key;
+ length = keys.length;
+ // Ensure that both objects contain the same number of properties before comparing deep equality.
+ if (_.keys(b).length !== length) return false;
+ while (length--) {
+ // Deep compare each member
+ key = keys[length];
+ if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) return false;
+ }
+ }
+ // Remove the first object from the stack of traversed objects.
+ aStack.pop();
+ bStack.pop();
+ return true;
+ };
+
+ // Perform a deep comparison to check if two objects are equal.
+ _.isEqual = function(a, b) {
+ return eq(a, b);
+ };
+
+ // Is a given array, string, or object empty?
+ // An "empty" object has no enumerable own-properties.
+ _.isEmpty = function(obj) {
+ if (obj == null) return true;
+ if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
+ return _.keys(obj).length === 0;
+ };
+
+ // Is a given value a DOM element?
+ _.isElement = function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ };
+
+ // Is a given value an array?
+ // Delegates to ECMA5's native Array.isArray
+ _.isArray = nativeIsArray || function(obj) {
+ return toString.call(obj) === '[object Array]';
+ };
+
+ // Is a given variable an object?
+ _.isObject = function(obj) {
+ var type = typeof obj;
+ return type === 'function' || type === 'object' && !!obj;
+ };
+
+ // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp, isError.
+ _.each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp', 'Error'], function(name) {
+ _['is' + name] = function(obj) {
+ return toString.call(obj) === '[object ' + name + ']';
+ };
+ });
+
+ // Define a fallback version of the method in browsers (ahem, IE < 9), where
+ // there isn't any inspectable "Arguments" type.
+ if (!_.isArguments(arguments)) {
+ _.isArguments = function(obj) {
+ return _.has(obj, 'callee');
+ };
+ }
+
+ // Optimize `isFunction` if appropriate. Work around some typeof bugs in old v8,
+ // IE 11 (#1621), and in Safari 8 (#1929).
+ if (typeof /./ != 'function' && typeof Int8Array != 'object') {
+ _.isFunction = function(obj) {
+ return typeof obj == 'function' || false;
+ };
+ }
+
+ // Is a given object a finite number?
+ _.isFinite = function(obj) {
+ return isFinite(obj) && !isNaN(parseFloat(obj));
+ };
+
+ // Is the given value `NaN`? (NaN is the only number which does not equal itself).
+ _.isNaN = function(obj) {
+ return _.isNumber(obj) && obj !== +obj;
+ };
+
+ // Is a given value a boolean?
+ _.isBoolean = function(obj) {
+ return obj === true || obj === false || toString.call(obj) === '[object Boolean]';
+ };
+
+ // Is a given value equal to null?
+ _.isNull = function(obj) {
+ return obj === null;
+ };
+
+ // Is a given variable undefined?
+ _.isUndefined = function(obj) {
+ return obj === void 0;
+ };
+
+ // Shortcut function for checking if an object has a given property directly
+ // on itself (in other words, not on a prototype).
+ _.has = function(obj, key) {
+ return obj != null && hasOwnProperty.call(obj, key);
+ };
+
+ // Utility Functions
+ // -----------------
+
+ // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+ // previous owner. Returns a reference to the Underscore object.
+ _.noConflict = function() {
+ root._ = previousUnderscore;
+ return this;
+ };
+
+ // Keep the identity function around for default iteratees.
+ _.identity = function(value) {
+ return value;
+ };
+
+ // Predicate-generating functions. Often useful outside of Underscore.
+ _.constant = function(value) {
+ return function() {
+ return value;
+ };
+ };
+
+ _.noop = function() {};
+
+ _.property = property;
+
+ // Generates a function for a given object that returns a given property.
+ _.propertyOf = function(obj) {
+ return obj == null ? function() {} : function(key) {
+ return obj[key];
+ };
+ };
+
+ // Returns a predicate for checking whether an object has a given set of
+ // `key:value` pairs.
+ _.matcher = _.matches = function(attrs) {
+ attrs = _.extendOwn({}, attrs);
+ return function(obj) {
+ return _.isMatch(obj, attrs);
+ };
+ };
+
+ // Run a function **n** times.
+ _.times = function(n, iteratee, context) {
+ var accum = Array(Math.max(0, n));
+ iteratee = optimizeCb(iteratee, context, 1);
+ for (var i = 0; i < n; i++) accum[i] = iteratee(i);
+ return accum;
+ };
+
+ // Return a random integer between min and max (inclusive).
+ _.random = function(min, max) {
+ if (max == null) {
+ max = min;
+ min = 0;
+ }
+ return min + Math.floor(Math.random() * (max - min + 1));
+ };
+
+ // A (possibly faster) way to get the current timestamp as an integer.
+ _.now = Date.now || function() {
+ return new Date().getTime();
+ };
+
+ // List of HTML entities for escaping.
+ var escapeMap = {
+ '&': '&',
+ '<': '<',
+ '>': '>',
+ '"': '"',
+ "'": ''',
+ '`': '`'
+ };
+ var unescapeMap = _.invert(escapeMap);
+
+ // Functions for escaping and unescaping strings to/from HTML interpolation.
+ var createEscaper = function(map) {
+ var escaper = function(match) {
+ return map[match];
+ };
+ // Regexes for identifying a key that needs to be escaped
+ var source = '(?:' + _.keys(map).join('|') + ')';
+ var testRegexp = RegExp(source);
+ var replaceRegexp = RegExp(source, 'g');
+ return function(string) {
+ string = string == null ? '' : '' + string;
+ return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;
+ };
+ };
+ _.escape = createEscaper(escapeMap);
+ _.unescape = createEscaper(unescapeMap);
+
+ // If the value of the named `property` is a function then invoke it with the
+ // `object` as context; otherwise, return it.
+ _.result = function(object, property, fallback) {
+ var value = object == null ? void 0 : object[property];
+ if (value === void 0) {
+ value = fallback;
+ }
+ return _.isFunction(value) ? value.call(object) : value;
+ };
+
+ // Generate a unique integer id (unique within the entire client session).
+ // Useful for temporary DOM ids.
+ var idCounter = 0;
+ _.uniqueId = function(prefix) {
+ var id = ++idCounter + '';
+ return prefix ? prefix + id : id;
+ };
+
+ // By default, Underscore uses ERB-style template delimiters, change the
+ // following template settings to use alternative delimiters.
+ _.templateSettings = {
+ evaluate: /<%([\s\S]+?)%>/g,
+ interpolate: /<%=([\s\S]+?)%>/g,
+ escape: /<%-([\s\S]+?)%>/g
+ };
+
+ // When customizing `templateSettings`, if you don't want to define an
+ // interpolation, evaluation or escaping regex, we need one that is
+ // guaranteed not to match.
+ var noMatch = /(.)^/;
+
+ // Certain characters need to be escaped so that they can be put into a
+ // string literal.
+ var escapes = {
+ "'": "'",
+ '\\': '\\',
+ '\r': 'r',
+ '\n': 'n',
+ '\u2028': 'u2028',
+ '\u2029': 'u2029'
+ };
+
+ var escaper = /\\|'|\r|\n|\u2028|\u2029/g;
+
+ var escapeChar = function(match) {
+ return '\\' + escapes[match];
+ };
+
+ // JavaScript micro-templating, similar to John Resig's implementation.
+ // Underscore templating handles arbitrary delimiters, preserves whitespace,
+ // and correctly escapes quotes within interpolated code.
+ // NB: `oldSettings` only exists for backwards compatibility.
+ _.template = function(text, settings, oldSettings) {
+ if (!settings && oldSettings) settings = oldSettings;
+ settings = _.defaults({}, settings, _.templateSettings);
+
+ // Combine delimiters into one regular expression via alternation.
+ var matcher = RegExp([
+ (settings.escape || noMatch).source,
+ (settings.interpolate || noMatch).source,
+ (settings.evaluate || noMatch).source
+ ].join('|') + '|$', 'g');
+
+ // Compile the template source, escaping string literals appropriately.
+ var index = 0;
+ var source = "__p+='";
+ text.replace(matcher, function(match, escape, interpolate, evaluate, offset) {
+ source += text.slice(index, offset).replace(escaper, escapeChar);
+ index = offset + match.length;
+
+ if (escape) {
+ source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'";
+ } else if (interpolate) {
+ source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'";
+ } else if (evaluate) {
+ source += "';\n" + evaluate + "\n__p+='";
+ }
+
+ // Adobe VMs need the match returned to produce the correct offest.
+ return match;
+ });
+ source += "';\n";
+
+ // If a variable is not specified, place data values in local scope.
+ if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n';
+
+ source = "var __t,__p='',__j=Array.prototype.join," +
+ "print=function(){__p+=__j.call(arguments,'');};\n" +
+ source + 'return __p;\n';
+
+ try {
+ var render = new Function(settings.variable || 'obj', '_', source);
+ } catch (e) {
+ e.source = source;
+ throw e;
+ }
+
+ var template = function(data) {
+ return render.call(this, data, _);
+ };
+
+ // Provide the compiled source as a convenience for precompilation.
+ var argument = settings.variable || 'obj';
+ template.source = 'function(' + argument + '){\n' + source + '}';
+
+ return template;
+ };
+
+ // Add a "chain" function. Start chaining a wrapped Underscore object.
+ _.chain = function(obj) {
+ var instance = _(obj);
+ instance._chain = true;
+ return instance;
+ };
+
+ // OOP
+ // ---------------
+ // If Underscore is called as a function, it returns a wrapped object that
+ // can be used OO-style. This wrapper holds altered versions of all the
+ // underscore functions. Wrapped objects may be chained.
+
+ // Helper function to continue chaining intermediate results.
+ var result = function(instance, obj) {
+ return instance._chain ? _(obj).chain() : obj;
+ };
+
+ // Add your own custom functions to the Underscore object.
+ _.mixin = function(obj) {
+ _.each(_.functions(obj), function(name) {
+ var func = _[name] = obj[name];
+ _.prototype[name] = function() {
+ var args = [this._wrapped];
+ push.apply(args, arguments);
+ return result(this, func.apply(_, args));
+ };
+ });
+ };
+
+ // Add all of the Underscore functions to the wrapper object.
+ _.mixin(_);
+
+ // Add all mutator Array functions to the wrapper.
+ _.each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ var obj = this._wrapped;
+ method.apply(obj, arguments);
+ if ((name === 'shift' || name === 'splice') && obj.length === 0) delete obj[0];
+ return result(this, obj);
+ };
+ });
+
+ // Add all accessor Array functions to the wrapper.
+ _.each(['concat', 'join', 'slice'], function(name) {
+ var method = ArrayProto[name];
+ _.prototype[name] = function() {
+ return result(this, method.apply(this._wrapped, arguments));
+ };
+ });
+
+ // Extracts the result from a wrapped and chained object.
+ _.prototype.value = function() {
+ return this._wrapped;
+ };
+
+ // Provide unwrapping proxy for some methods used in engine operations
+ // such as arithmetic and JSON stringification.
+ _.prototype.valueOf = _.prototype.toJSON = _.prototype.value;
+
+ _.prototype.toString = function() {
+ return '' + this._wrapped;
+ };
+
+ // AMD registration happens at the end for compatibility with AMD loaders
+ // that may not enforce next-turn semantics on modules. Even though general
+ // practice for AMD registration is to be anonymous, underscore registers
+ // as a named module because, like jQuery, it is a base library that is
+ // popular enough to be bundled in a third party lib, but not be part of
+ // an AMD load request. Those cases could generate an error when an
+ // anonymous define() is called outside of a loader request.
+ if (typeof define === 'function' && define.amd) {
+ define('underscore', [], function() {
+ return _;
+ });
+ }
+}.call(this));
\ No newline at end of file
diff --git a/utils/upDateShareInfoToUser_network.js b/utils/upDateShareInfoToUser_network.js
new file mode 100644
index 0000000..84beecd
--- /dev/null
+++ b/utils/upDateShareInfoToUser_network.js
@@ -0,0 +1,46 @@
+//用于转发时向用户关系表中更新一条转发记录(个人为person,群为GId)
+const qcloud = require('../vendor/wafer2-client-sdk/index')
+function upDateShareInfoToUser_network(app, page, share_res) {
+ let upDate = (content, clickId) => {
+ qcloud.request({
+ login: false,
+ data: {
+ clickId,
+ content,
+ },
+ url: app.appData.baseUrl + 'upDateShareInfoToUser_network',
+ success: (res) => { }
+ })
+ }
+ const shareTickets = share_res.shareTickets
+ if (!shareTickets) {
+ //IOS转发给个人的时候shareTickets为null
+ upDate('person', app.appData.currentClickId)
+ } else {
+ wx.getShareInfo({
+ shareTicket: shareTickets[0],
+ success: (res) => {
+ qcloud.request({
+ login: false,
+ data: {
+ appId: app.appData.appId,
+ openId: page.data.openId,
+ encryptedData: res.encryptedData,
+ iv: res.iv
+ },
+ url: app.appData.baseUrl + 'getGId',
+ success: (res) => {
+ let GId = res.data.data
+ upDate(GId, app.appData.currentClickId)
+ }
+ })
+ },
+ fail: (res) => {
+ //Android转发给个人的时候shareTickets不为null,而是判断为fail
+ upDate('person', app.appData.currentClickId)
+ }
+ })
+ }
+}
+
+module.exports = { upDateShareInfoToUser_network }
\ No newline at end of file
diff --git a/utils/upDateUser_networkFromClickId.js b/utils/upDateUser_networkFromClickId.js
new file mode 100644
index 0000000..aedd386
--- /dev/null
+++ b/utils/upDateUser_networkFromClickId.js
@@ -0,0 +1,15 @@
+//用于转发时向用户关系表中更新一条从哪个clickId打开的记录
+const qcloud = require('../vendor/wafer2-client-sdk/index')
+let upDateUser_networkFromClickId = (app,currentClickId, fromClickId) => {
+ qcloud.request({
+ login: false,
+ data: {
+ currentClickId,
+ fromClickId
+ },
+ url: app.appData.baseUrl + 'upDateUser_networkFromClickId',
+ success: (res) => { }
+ })
+}
+
+module.exports = {upDateUser_networkFromClickId}
\ No newline at end of file
diff --git a/utils/util.js b/utils/util.js
new file mode 100644
index 0000000..f24f7f7
--- /dev/null
+++ b/utils/util.js
@@ -0,0 +1,42 @@
+const formatTime = date => {
+ const year = date.getFullYear()
+ const month = date.getMonth() + 1
+ const day = date.getDate()
+ const hour = date.getHours()
+ const minute = date.getMinutes()
+ const second = date.getSeconds()
+
+ return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':')
+}
+
+const formatNumber = n => {
+ n = n.toString()
+ return n[1] ? n : '0' + n
+}
+
+
+// 显示繁忙提示
+var showBusy = text => wx.showToast({
+ title: text,
+ icon: 'loading',
+ duration: 5000
+})
+
+// 显示成功提示
+var showSuccess = text => wx.showToast({
+ title: text,
+ icon: 'success'
+})
+
+// 显示失败提示
+var showModel = (title, content) => {
+ wx.hideToast();
+
+ wx.showModal({
+ title,
+ content: JSON.stringify(content),
+ showCancel: false
+ })
+}
+
+module.exports = { formatTime, showBusy, showSuccess, showModel }
diff --git a/vendor/wafer2-client-sdk/LICENSE b/vendor/wafer2-client-sdk/LICENSE
new file mode 100644
index 0000000..7bb43b8
--- /dev/null
+++ b/vendor/wafer2-client-sdk/LICENSE
@@ -0,0 +1,24 @@
+LICENSE - "MIT License"
+
+Copyright (c) 2016 by Tencent Cloud
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/vendor/wafer2-client-sdk/README.md b/vendor/wafer2-client-sdk/README.md
new file mode 100644
index 0000000..ac48138
--- /dev/null
+++ b/vendor/wafer2-client-sdk/README.md
@@ -0,0 +1,247 @@
+# 微信小程序客户端腾讯云增强 SDK
+
+[![Build Status](https://travis-ci.org/tencentyun/wafer-client-sdk.svg?branch=master)](https://travis-ci.org/tencentyun/wafer-client-sdk)
+[![Coverage Status](https://coveralls.io/repos/github/tencentyun/wafer-client-sdk/badge.svg?branch=master)](https://coveralls.io/github/tencentyun/wafer-client-sdk?branch=master)
+[![License](https://img.shields.io/github/license/tencentyun/wafer-client-sdk.svg)](LICENSE)
+
+本 项目是 [Wafer](https://github.com/tencentyun/wafer-solution) 的组成部分,为小程序客户端开发提供 SDK 支持会话服务和信道服务。
+
+## SDK 获取与安装
+
+解决方案[客户端 Demo](https://github.com/tencentyun/wafer-client-demo) 已经集成并使用最新版的 SDK,需要快速了解的可以从 Demo 开始。
+
+如果需要单独开始,本 SDK 已经发布为 bower 模块,可以直接安装到小程序目录中。
+
+```sh
+npm install -g bower
+bower install qcloud-weapp-client-sdk
+```
+
+安装之后,就可以使用 `require` 引用 SDK 模块:
+
+```js
+var qcloud = require('./bower_components/qcloud-weapp-client-sdk/index.js');
+```
+
+## 会话服务
+
+[会话服务](https://github.com/tencentyun/wafer-solution/wiki/%E4%BC%9A%E8%AF%9D%E6%9C%8D%E5%8A%A1)让小程序拥有会话管理能力。
+
+### 登录
+
+登录可以在小程序和服务器之间建立会话,服务器由此可以获取到用户的标识和信息。
+
+```js
+var qcloud = require('./bower_components/qcloud-weapp-client-sdk/index.js');
+
+// 设置登录地址
+qcloud.setLoginUrl('https://199447.qcloud.la/login');
+qcloud.login({
+ success: function (userInfo) {
+ console.log('登录成功', userInfo);
+ },
+ fail: function (err) {
+ console.log('登录失败', err);
+ }
+});
+```
+本 SDK 需要配合云端 SDK 才能提供完整会话服务。通过 [setLoginUrl](#setLoginUrl) 设置登录地址,云服务器在该地址上使用云端 SDK 处理登录请求。
+
+> `setLoginUrl` 方法设置登录地址之后会一直有效,因此你可以在微信小程序启动时设置。
+
+登录成功后,可以获取到当前微信用户的基本信息。
+
+### 请求
+
+如果希望小程序的网络请求包含会话,登录之后使用 [request](#request) 方法进行网络请求即可。
+
+```js
+qcloud.request({
+ url: 'http://199447.qcloud.la/user',
+ success: function (response) {
+ console.log(response);
+ },
+ fail: function (err) {
+ console.log(err);
+ }
+});
+```
+
+如果调用 `request` 之前还没有登录,则请求不会带有会话。`request` 方法也支持 `login` 参数支持在请求之前自动登录。
+
+```js
+// 使用 login 参数之前,需要设置登录地址
+qcloud.setLoginUrl('https://199447.qcloud.la/login');
+qcloud.request({
+ login: true,
+ url: 'http://199447.qcloud.la/user',
+ success: function (response) {
+ console.log(response);
+ },
+ fail: function (err) {
+ console.log(err);
+ }
+});
+```
+
+关于会话服务详细技术说明,请参考 [Wiki](https://github.com/tencentyun/wafer-solution/wiki/%E4%BC%9A%E8%AF%9D%E6%9C%8D%E5%8A%A1)。
+
+## 信道服务
+
+[信道服务](https://github.com/tencentyun/wafer-solution/wiki/%E4%BF%A1%E9%81%93%E6%9C%8D%E5%8A%A1)小程序支持利用腾讯云的信道资源使用 WebSocket 服务。
+
+```js
+// 创建信道,需要给定后台服务地址
+var tunnel = this.tunnel = new qcloud.Tunnel('https://199447.qcloud.la/tunnel');
+
+// 监听信道内置消息,包括 connect/close/reconnecting/reconnect/error
+tunnel.on('connect', () => console.log('WebSocket 信道已连接'));
+tunnel.on('close', () => console.log('WebSocket 信道已断开'));
+tunnel.on('reconnecting', () => console.log('WebSocket 信道正在重连...'));
+tunnel.on('reconnect', () => console.log('WebSocket 信道重连成功'));
+tunnel.on('error', error => console.error('信道发生错误:', error));
+
+// 监听自定义消息(服务器进行推送)
+tunnel.on('speak', speak => console.log('收到 speak 消息:', speak));
+
+// 打开信道
+tunnel.open();
+// 发送消息
+tunnel.emit('speak', { word: "hello", who: { nickName: "techird" }});
+// 关闭信道
+tunnel.close();
+```
+
+信道服务同样需要业务服务器配合云端 SDK 支持,构造信道实例的时候需要提供业务服务器提供的信道服务地址。通过监听信道消息以及自定义消息来通过信道实现业务。
+
+关于信道使用的更完整实例,建议参考客户端 Demo 中的[三木聊天室应用源码](https://github.com/tencentyun/wafer-client-demo/blob/master/pages/chat/chat.js)。
+
+关于信道服务详细技术说明,请参考 [Wiki](https://github.com/tencentyun/wafer-solution/wiki/%E4%BF%A1%E9%81%93%E6%9C%8D%E5%8A%A1)。
+
+## API
+
+
+### setLoginUrl
+设置会话服务登录地址。
+
+#### 语法
+```js
+qcloud.setLoginUrl(loginUrl);
+```
+
+#### 参数
+|参数 |类型 |说明
+|-------------|---------------|--------------
+|loginUrl |string |会话服务登录地址
+
+### login
+登录,建立微信小程序会话。
+
+#### 语法
+```js
+qcloud.login(options);
+```
+
+#### 参数
+|参数 |类型 |说明
+|-------------|---------------|--------------
+|options |PlainObject |会话服务登录地址
+|options.success | () => void | 登录成功的回调
+|options.error | (error) => void | 登录失败的回调
+
+
+### request
+进行带会话的请求。
+
+#### 语法
+```js
+qcloud.request(options);
+```
+
+#### 参数
+|参数 |类型 |说明
+|-------------|---------------|--------------
+|options |PlainObject | 会话服务登录地址
+|options.login | bool | 是否自动登录以获取会话,默认为 false
+|options.url | string | 必填,要请求的地址
+|options.header | PlainObject | 请求头设置,不允许设置 Referer
+|options.method | string | 请求的方法,默认为 GET
+|options.success | (response) => void | 登录成功的回调。- `response.statusCode`:请求返回的状态码
- `response.data`:请求返回的数据
+|options.error | (error) => void | 登录失败的回调
+|options.complete | () => void | 登录完成后回调,无论成功还是失败
+
+### Tunnel
+
+表示一个信道。由于小程序的限制,同一时间只能有一个打开的信道。
+
+#### constructor
+
+##### 语法
+```js
+var tunnel = new Tunnel(tunnelUrl);
+```
+
+#### 参数
+|参数 |类型 |说明
+|-------------|---------------|--------------
+|tunnelUrl |String | 会话服务登录地址
+
+
+#### on
+监听信道上的事件。信道上事件包括系统事件和服务器推送消息。
+
+##### 语法
+```js
+tunnel.on(type, listener);
+```
+
+##### 参数
+|参数 |类型 |说明
+|-------------|---------------|--------------
+|type |string | 监听的事件类型
+|listener |(message?: any) => void | 监听器,具体类型的事件发生时调用监听器。如果是消息,则会有消息内容。
+
+##### 事件
+|事件 |说明
+|-------------|-------------------------------
+|connect |信道连接成功后回调
+|close |信道关闭后回调
+|reconnecting |信道发生重连时回调
+|reconnected |信道重连成功后回调
+|error |信道发生错误后回调
+|[message] |信道服务器推送过来的消息类型,如果消息类型和上面内置的时间类型冲突,需要在监听的时候在消息类型前加 `@`
+|\* |监听所有事件和消息,监听器第一个参数接收到时间或消息类型
+
+#### open
+打开信道,建立连接。由于小程序的限制,同一时间只能有一个打开的信道。
+
+##### 语法
+```js
+tunnel.open();
+```
+
+#### emit
+向信道推送消息。
+
+##### 语法
+```js
+tunnel.emit(type, content);
+```
+
+##### 参数
+|参数 |类型 |说明
+|-------------|---------------|--------------
+|type |string | 要推送的消息的类型
+|content |any | 要推送的消息的内容
+
+#### close
+关闭信道
+
+##### 语法
+```js
+tunnel.close();
+```
+
+## LICENSE
+
+[MIT](LICENSE)
diff --git a/vendor/wafer2-client-sdk/index.js b/vendor/wafer2-client-sdk/index.js
new file mode 100644
index 0000000..b94d6e5
--- /dev/null
+++ b/vendor/wafer2-client-sdk/index.js
@@ -0,0 +1,25 @@
+var constants = require('./lib/constants');
+var login = require('./lib/login');
+var Session = require('./lib/session');
+var request = require('./lib/request');
+var Tunnel = require('./lib/tunnel');
+
+var exports = module.exports = {
+ login: login.login,
+ setLoginUrl: login.setLoginUrl,
+ LoginError: login.LoginError,
+
+ clearSession: Session.clear,
+
+ request: request.request,
+ RequestError: request.RequestError,
+
+ Tunnel: Tunnel,
+};
+
+// 导出错误类型码
+Object.keys(constants).forEach(function (key) {
+ if (key.indexOf('ERR_') === 0) {
+ exports[key] = constants[key];
+ }
+});
\ No newline at end of file
diff --git a/vendor/wafer2-client-sdk/lib/constants.js b/vendor/wafer2-client-sdk/lib/constants.js
new file mode 100644
index 0000000..b307772
--- /dev/null
+++ b/vendor/wafer2-client-sdk/lib/constants.js
@@ -0,0 +1,20 @@
+module.exports = {
+ WX_HEADER_CODE: 'X-WX-Code',
+ WX_HEADER_ENCRYPTED_DATA: 'X-WX-Encrypted-Data',
+ WX_HEADER_IV: 'X-WX-IV',
+ WX_HEADER_ID: 'X-WX-Id',
+ WX_HEADER_SKEY: 'X-WX-Skey',
+
+ WX_SESSION_MAGIC_ID: 'F2C224D4-2BCE-4C64-AF9F-A6D872000D1A',
+
+ ERR_INVALID_PARAMS: 'ERR_INVALID_PARAMS',
+
+ ERR_WX_LOGIN_FAILED: 'ERR_WX_LOGIN_FAILED',
+ ERR_WX_GET_USER_INFO: 'ERR_WX_GET_USER_INFO',
+ ERR_LOGIN_TIMEOUT: 'ERR_LOGIN_TIMEOUT',
+ ERR_LOGIN_FAILED: 'ERR_LOGIN_FAILED',
+ ERR_LOGIN_SESSION_NOT_RECEIVED: 'ERR_LOGIN_MISSING_SESSION',
+
+ ERR_SESSION_INVALID: 'ERR_SESSION_INVALID',
+ ERR_CHECK_LOGIN_FAILED: 'ERR_CHECK_LOGIN_FAILED',
+};
\ No newline at end of file
diff --git a/vendor/wafer2-client-sdk/lib/login.js b/vendor/wafer2-client-sdk/lib/login.js
new file mode 100644
index 0000000..5de37c6
--- /dev/null
+++ b/vendor/wafer2-client-sdk/lib/login.js
@@ -0,0 +1,171 @@
+var utils = require('./utils');
+var constants = require('./constants');
+var Session = require('./session');
+
+/***
+ * @class
+ * 表示登录过程中发生的异常
+ */
+var LoginError = (function () {
+ function LoginError(type, message) {
+ Error.call(this, message);
+ this.type = type;
+ this.message = message;
+ }
+
+ LoginError.prototype = new Error();
+ LoginError.prototype.constructor = LoginError;
+
+ return LoginError;
+})();
+
+/**
+ * 微信登录,获取 code 和 encryptData
+ */
+var getWxLoginResult = function getLoginCode(callback) {
+ wx.login({
+ success: function (loginResult) {
+ wx.getUserInfo({
+ success: function (userResult) {
+ callback(null, {
+ code: loginResult.code,
+ encryptedData: userResult.encryptedData,
+ iv: userResult.iv,
+ userInfo: userResult.userInfo,
+ });
+ },
+ fail: function (userError) {
+ //jacksplwxy:用户拒绝授权后,打开设置,让用户进行授权
+ wx.showModal({
+ title: '登录失败!',
+ content: '请选择允许获取您的公开信息',
+ success: (res) => {
+ wx.openSetting({
+ success: (res) => {
+ if (res.authSetting['scope.userInfo']) {
+ wx.getUserInfo({
+ success: function (userResult) {
+ callback(null, {
+ code: loginResult.code,
+ encryptedData: userResult.encryptedData,
+ iv: userResult.iv,
+ userInfo: userResult.userInfo,
+ });
+ },
+ })
+ }
+ }
+ })
+ }
+ })
+ },
+ //源码:
+ /*fail: function (userError) {
+ var error = new LoginError(constants.ERR_WX_GET_USER_INFO, '获取微信用户信息失败,请检查网络状态');
+ error.detail = userError;
+ callback(error, null);
+ },*/
+ });
+ },
+
+ fail: function (loginError) {
+ var error = new LoginError(constants.ERR_WX_LOGIN_FAILED, '微信登录失败,请检查网络状态');
+ error.detail = loginError;
+ callback(error, null);
+ },
+ });
+};
+
+var noop = function noop() {};
+var defaultOptions = {
+ method: 'GET',
+ success: noop,
+ fail: noop,
+ loginUrl: null,
+};
+
+/**
+ * @method
+ * 进行服务器登录,以获得登录会话
+ *
+ * @param {Object} options 登录配置
+ * @param {string} options.loginUrl 登录使用的 URL,服务器应该在这个 URL 上处理登录请求
+ * @param {string} [options.method] 请求使用的 HTTP 方法,默认为 "GET"
+ * @param {Function} options.success(userInfo) 登录成功后的回调函数,参数 userInfo 微信用户信息
+ * @param {Function} options.fail(error) 登录失败后的回调函数,参数 error 错误信息
+ */
+var login = function login(options) {
+ options = utils.extend({}, defaultOptions, options);
+
+ if (!defaultOptions.loginUrl) {
+ options.fail(new LoginError(constants.ERR_INVALID_PARAMS, '登录错误:缺少登录地址,请通过 setLoginUrl() 方法设置登录地址'));
+ return;
+ }
+
+ var doLogin = () => getWxLoginResult(function (wxLoginError, wxLoginResult) {
+ if (wxLoginError) {
+ options.fail(wxLoginError);
+ return;
+ }
+
+ var userInfo = wxLoginResult.userInfo;
+
+ // 构造请求头,包含 code、encryptedData 和 iv
+ var code = wxLoginResult.code;
+ var encryptedData = wxLoginResult.encryptedData;
+ var iv = wxLoginResult.iv;
+ var header = {};
+
+ header[constants.WX_HEADER_CODE] = code;
+ header[constants.WX_HEADER_ENCRYPTED_DATA] = encryptedData;
+ header[constants.WX_HEADER_IV] = iv;
+
+ // 请求服务器登录地址,获得会话信息
+ wx.request({
+ url: options.loginUrl,
+ header: header,
+ method: options.method,
+ data: options.data,
+ success: function (result) {
+ var data = result.data;
+
+ // 成功地响应会话信息
+ if (data && data.code === 0 && data.data.skey) {
+ var res = data.data
+ if (res.userinfo) {
+ Session.set(res.skey); //jacksplwxy:将skey缓存起来
+ wx.setStorageSync('user_info_'+ constants.WX_SESSION_MAGIC_ID, res.userinfo);//jacksplwxy:将用户信息存储起来
+ options.success(userInfo);
+ } else {
+ var errorMessage = '登录失败(' + data.error + '):' + (data.message || '未知错误');
+ var noSessionError = new LoginError(constants.ERR_LOGIN_SESSION_NOT_RECEIVED, errorMessage);
+ options.fail(noSessionError);
+ }
+
+ // 没有正确响应会话信息
+ } else {
+ var noSessionError = new LoginError(constants.ERR_LOGIN_SESSION_NOT_RECEIVED, JSON.stringify(data));
+ options.fail(noSessionError);
+ }
+ },
+
+ // 响应错误
+ fail: function (loginResponseError) {
+ var error = new LoginError(constants.ERR_LOGIN_FAILED, '登录失败,可能是网络错误或者服务器发生异常');
+ options.fail(error);
+ },
+ });
+ });
+
+ doLogin();
+};
+
+var setLoginUrl = function (loginUrl) {
+ defaultOptions.loginUrl = loginUrl;
+};
+
+module.exports = {
+ LoginError: LoginError,
+ login: login,
+ setLoginUrl: setLoginUrl,
+};
diff --git a/vendor/wafer2-client-sdk/lib/request.js b/vendor/wafer2-client-sdk/lib/request.js
new file mode 100644
index 0000000..e2d5e6a
--- /dev/null
+++ b/vendor/wafer2-client-sdk/lib/request.js
@@ -0,0 +1,113 @@
+var constants = require('./constants');
+var utils = require('./utils');
+var Session = require('./session');
+var loginLib = require('./login');
+
+var noop = function noop() {};
+
+var buildAuthHeader = function buildAuthHeader(session) {
+ var header = {};
+
+ if (session) {
+ header[constants.WX_HEADER_SKEY] = session;
+ }
+
+ return header;
+};
+
+/***
+ * @class
+ * 表示请求过程中发生的异常
+ */
+var RequestError = (function () {
+ function RequestError(type, message) {
+ Error.call(this, message);
+ this.type = type;
+ this.message = message;
+ }
+
+ RequestError.prototype = new Error();
+ RequestError.prototype.constructor = RequestError;
+
+ return RequestError;
+})();
+
+function request(options) {
+ if (typeof options !== 'object') {
+ var message = '请求传参应为 object 类型,但实际传了 ' + (typeof options) + ' 类型';
+ throw new RequestError(constants.ERR_INVALID_PARAMS, message);
+ }
+
+ var requireLogin = options.login;
+ var success = options.success || noop;
+ var fail = options.fail || noop;
+ var complete = options.complete || noop;
+ var originHeader = options.header || {};
+
+ // 成功回调
+ var callSuccess = function () {
+ success.apply(null, arguments);
+ complete.apply(null, arguments);
+ };
+
+ // 失败回调
+ var callFail = function (error) {
+ fail.call(null, error);
+ complete.call(null, error);
+ };
+
+ // 是否已经进行过重试
+ var hasRetried = false;
+
+ if (requireLogin) {
+ doRequestWithLogin();
+ } else {
+ doRequest();
+ }
+
+ // 登录后再请求
+ function doRequestWithLogin() {
+ loginLib.login({ success: doRequest, fail: callFail });
+ }
+
+ // 实际进行请求的方法
+ function doRequest() {
+ var authHeader = buildAuthHeader(Session.get());
+
+ wx.request(utils.extend({}, options, {
+ header: utils.extend({}, originHeader, authHeader),
+
+ success: function (response) {
+ var data = response.data;
+
+ var error, message;
+ if (data && data.code === -1) {
+ Session.clear();
+ // 如果是登录态无效,并且还没重试过,会尝试登录后刷新凭据重新请求
+ if (!hasRetried) {
+ hasRetried = true;
+ doRequestWithLogin();
+ return;
+ }
+
+ message = '登录态已过期';
+ error = new RequestError(data.error, message);
+
+ callFail(error);
+ return;
+ } else {
+ callSuccess.apply(null, arguments);
+ }
+ },
+
+ fail: callFail,
+ complete: noop,
+ }));
+ };
+
+};
+
+module.exports = {
+ RequestError: RequestError,
+ request: request,
+};
\ No newline at end of file
diff --git a/vendor/wafer2-client-sdk/lib/session.js b/vendor/wafer2-client-sdk/lib/session.js
new file mode 100644
index 0000000..eb37d82
--- /dev/null
+++ b/vendor/wafer2-client-sdk/lib/session.js
@@ -0,0 +1,18 @@
+var constants = require('./constants');
+var SESSION_KEY = 'weapp_session_' + constants.WX_SESSION_MAGIC_ID;
+
+var Session = {
+ get: function () {
+ return wx.getStorageSync(SESSION_KEY) || null;
+ },
+
+ set: function (session) {
+ wx.setStorageSync(SESSION_KEY, session);
+ },
+
+ clear: function () {
+ wx.removeStorageSync(SESSION_KEY);
+ },
+};
+
+module.exports = Session;
\ No newline at end of file
diff --git a/vendor/wafer2-client-sdk/lib/tunnel.js b/vendor/wafer2-client-sdk/lib/tunnel.js
new file mode 100644
index 0000000..60309cd
--- /dev/null
+++ b/vendor/wafer2-client-sdk/lib/tunnel.js
@@ -0,0 +1,536 @@
+var requestLib = require('./request');
+var wxTunnel = require('./wxTunnel');
+
+/**
+ * 当前打开的信道,同一时间只能有一个信道打开
+ */
+var currentTunnel = null;
+
+// 信道状态枚举
+var STATUS_CLOSED = Tunnel.STATUS_CLOSED = 'CLOSED';
+var STATUS_CONNECTING = Tunnel.STATUS_CONNECTING = 'CONNECTING';
+var STATUS_ACTIVE = Tunnel.STATUS_ACTIVE = 'ACTIVE';
+var STATUS_RECONNECTING = Tunnel.STATUS_RECONNECTING = 'RECONNECTING';
+
+// 错误类型枚举
+var ERR_CONNECT_SERVICE = Tunnel.ERR_CONNECT_SERVICE = 1001;
+var ERR_CONNECT_SOCKET = Tunnel.ERR_CONNECT_SOCKET = 1002;
+var ERR_RECONNECT = Tunnel.ERR_RECONNECT = 2001;
+var ERR_SOCKET_ERROR = Tunnel.ERR_SOCKET_ERROR = 3001;
+
+// 包类型枚举
+var PACKET_TYPE_MESSAGE = 'message';
+var PACKET_TYPE_PING = 'ping';
+var PACKET_TYPE_PONG = 'pong';
+var PACKET_TYPE_TIMEOUT = 'timeout';
+var PACKET_TYPE_CLOSE = 'close';
+
+// 断线重连最多尝试 5 次
+var DEFAULT_MAX_RECONNECT_TRY_TIMES = 5;
+
+// 每次重连前,等待时间的增量值
+var DEFAULT_RECONNECT_TIME_INCREASE = 1000;
+
+function Tunnel(serviceUrl) {
+ if (currentTunnel && currentTunnel.status !== STATUS_CLOSED) {
+ throw new Error('当前有未关闭的信道,请先关闭之前的信道,再打开新信道');
+ }
+
+ currentTunnel = this;
+
+ // 等确认微信小程序全面支持 ES6 就不用那么麻烦了
+ var me = this;
+
+ //=========================================================================
+ // 暴露实例状态以及方法
+ //=========================================================================
+ this.serviceUrl = serviceUrl;
+ this.socketUrl = null;
+ this.status = null;
+
+ this.open = openConnect;
+ this.on = registerEventHandler;
+ this.emit = emitMessagePacket;
+ this.close = close;
+
+ this.isClosed = isClosed;
+ this.isConnecting = isConnecting;
+ this.isActive = isActive;
+ this.isReconnecting = isReconnecting;
+
+
+ //=========================================================================
+ // 信道状态处理,状态说明:
+ // closed - 已关闭
+ // connecting - 首次连接
+ // active - 当前信道已经在工作
+ // reconnecting - 断线重连中
+ //=========================================================================
+ function isClosed() { return me.status === STATUS_CLOSED; }
+ function isConnecting() { return me.status === STATUS_CONNECTING; }
+ function isActive() { return me.status === STATUS_ACTIVE; }
+ function isReconnecting() { return me.status === STATUS_RECONNECTING; }
+
+ function setStatus(status) {
+ var lastStatus = me.status;
+ if (lastStatus !== status) {
+ me.status = status;
+ }
+ }
+
+ // 初始为关闭状态
+ setStatus(STATUS_CLOSED);
+
+
+ //=========================================================================
+ // 信道事件处理机制
+ // 信道事件包括:
+ // connect - 连接已建立
+ // close - 连接被关闭(包括主动关闭和被动关闭)
+ // reconnecting - 开始重连
+ // reconnect - 重连成功
+ // error - 发生错误,其中包括连接失败、重连失败、解包失败等等
+ // [message] - 信道服务器发送过来的其它事件类型,如果事件类型和上面内置的事件类型冲突,将在事件类型前面添加前缀 `@`
+ //=========================================================================
+ var preservedEventTypes = 'connect,close,reconnecting,reconnect,error'.split(',');
+ var eventHandlers = [];
+
+ /**
+ * 注册消息处理函数
+ * @param {string} messageType 支持内置消息类型("connect"|"close"|"reconnecting"|"reconnect"|"error")以及业务消息类型
+ */
+ function registerEventHandler(eventType, eventHandler) {
+ if (typeof eventHandler === 'function') {
+ eventHandlers.push([eventType, eventHandler]);
+ }
+ }
+
+ /**
+ * 派发事件,通知所有处理函数进行处理
+ */
+ function dispatchEvent(eventType, eventPayload) {
+ eventHandlers.forEach(function (handler) {
+ var handleType = handler[0];
+ var handleFn = handler[1];
+
+ if (handleType === '*') {
+ handleFn(eventType, eventPayload);
+ } else if (handleType === eventType) {
+ handleFn(eventPayload);
+ }
+ });
+ }
+
+ /**
+ * 派发事件,事件类型和系统保留冲突的,事件名会自动加上 '@' 前缀
+ */
+ function dispatchEscapedEvent(eventType, eventPayload) {
+ if (preservedEventTypes.indexOf(eventType) > -1) {
+ eventType = '@' + eventType;
+ }
+
+ dispatchEvent(eventType, eventPayload);
+ }
+
+
+ //=========================================================================
+ // 信道连接控制
+ //=========================================================================
+ var isFirstConnection = true;
+ var isOpening = false;
+
+ /**
+ * 连接信道服务器,获取 WebSocket 连接地址,获取地址成功后,开始进行 WebSocket 连接
+ */
+ function openConnect() {
+ if (isOpening) return;
+ isOpening = true;
+
+ // 只有关闭状态才会重新进入准备中
+ setStatus(isFirstConnection ? STATUS_CONNECTING : STATUS_RECONNECTING);
+
+ requestLib.request({
+ url: serviceUrl,
+ method: 'GET',
+ success: function (response) {
+ if (+response.statusCode === 200 && response.data && response.data.data.connectUrl) {
+ console.log('通知服务端获准备开始连接,并成功取信道通讯地址', response.data.data.connectUrl)
+ openSocket(me.socketUrl = response.data.data.connectUrl);
+ } else {
+ dispatchConnectServiceError(response);
+ }
+ },
+ fail: dispatchConnectServiceError,
+ complete: () => isOpening = false,
+ });
+
+ function dispatchConnectServiceError(detail) {
+ if (isFirstConnection) {
+ setStatus(STATUS_CLOSED);
+
+ dispatchEvent('error', {
+ code: ERR_CONNECT_SERVICE,
+ message: '连接信道服务失败,网络错误或者信道服务没有正确响应',
+ detail: detail || null,
+ });
+
+ } else {
+ startReconnect(detail);
+ }
+ }
+ }
+
+ /**
+ * 打开 WebSocket 连接,打开后,注册微信的 Socket 处理方法
+ */
+ function openSocket(url) {
+ wxTunnel.listen({
+ onOpen: handleSocketOpen,
+ onMessage: handleSocketMessage,
+ onClose: handleSocketClose,
+ onError: handleSocketError,
+ });
+ //jacksplwxy:
+ //wx.connectSocket({ url: url });
+ wx.connectSocket({
+ url: url,
+ success(){
+ console.log('开始尝试信道连接')
+ }
+ });
+
+ isFirstConnection = false;
+ }
+
+
+ //=========================================================================
+ // 处理消息通讯
+ //
+ // packet - 数据包,序列化形式为 `${type}` 或者 `${type}:${content}`
+ // packet.type - 包类型,包括 message, ping, pong, close
+ // packet.content? - 当包类型为 message 的时候,会附带 message 数据
+ //
+ // message - 消息体,会使用 JSON 序列化后作为 packet.content
+ // message.type - 消息类型,表示业务消息类型
+ // message.content? - 消息实体,可以为任意类型,表示消息的附带数据,也可以为空
+ //
+ // 数据包示例:
+ // - 'ping' 表示 Ping 数据包
+ // - 'message:{"type":"speak","content":"hello"}' 表示一个打招呼的数据包
+ //=========================================================================
+
+ // 连接还没成功建立的时候,需要发送的包会先存放到队列里
+ var queuedPackets = [];
+
+ /**
+ * WebSocket 打开之后,更新状态,同时发送所有遗留的数据包
+ */
+ function handleSocketOpen() {
+ /* istanbul ignore else */
+ if (isConnecting()) {
+ dispatchEvent('connect');
+ console.log('监听到信道连接成功')
+ }
+ else if (isReconnecting()) {
+ dispatchEvent('reconnect');
+ resetReconnectionContext();
+ }
+
+ setStatus(STATUS_ACTIVE);
+ emitQueuedPackets();
+ nextPing();
+ }
+
+ /**
+ * 收到 WebSocket 数据包,交给处理函数
+ */
+ function handleSocketMessage(message) {
+ resolvePacket(message.data);
+ }
+
+ /**
+ * 发送数据包,如果信道没有激活,将先存放队列
+ */
+ function emitPacket(packet) {
+ if (isActive()) {
+ sendPacket(packet);
+ } else {
+ queuedPackets.push(packet);
+ }
+ }
+
+ /**
+ * 数据包推送到信道
+ */
+ function sendPacket(packet) {
+ var encodedPacket = [packet.type];
+
+ if (packet.content) {
+ encodedPacket.push(JSON.stringify(packet.content));
+ }
+
+ wx.sendSocketMessage({
+ data: encodedPacket.join(':'),
+ fail: handleSocketError,
+ });
+ }
+
+ function emitQueuedPackets() {
+ queuedPackets.forEach(emitPacket);
+
+ // empty queued packets
+ queuedPackets.length = 0;
+ }
+
+ /**
+ * 发送消息包
+ */
+ function emitMessagePacket(messageType, messageContent) {
+ var packet = {
+ type: PACKET_TYPE_MESSAGE,
+ content: {
+ type: messageType,
+ content: messageContent,
+ },
+ };
+
+ emitPacket(packet);
+ }
+
+ /**
+ * 发送 Ping 包
+ */
+ function emitPingPacket() {
+ emitPacket({ type: PACKET_TYPE_PING });
+ }
+
+ /**
+ * 发送关闭包
+ */
+ function emitClosePacket() {
+ emitPacket({ type: PACKET_TYPE_CLOSE });
+ }
+
+ /**
+ * 解析并处理从信道接收到的包
+ */
+ function resolvePacket(raw) {
+ var packetParts = raw.split(':');
+ var packetType = packetParts.shift();
+ var packetContent = packetParts.join(':') || null;
+ var packet = { type: packetType };
+
+ if (packetContent) {
+ try {
+ packet.content = JSON.parse(packetContent);
+ } catch (e) { }
+ }
+
+ switch (packet.type) {
+ case PACKET_TYPE_MESSAGE:
+ handleMessagePacket(packet);
+ break;
+ case PACKET_TYPE_PONG:
+ handlePongPacket(packet);
+ break;
+ case PACKET_TYPE_TIMEOUT:
+ handleTimeoutPacket(packet);
+ break;
+ case PACKET_TYPE_CLOSE:
+ handleClosePacket(packet);
+ break;
+ default:
+ handleUnknownPacket(packet);
+ break;
+ }
+ }
+
+ /**
+ * 收到消息包,直接 dispatch 给处理函数
+ */
+ function handleMessagePacket(packet) {
+ var message = packet.content;
+ dispatchEscapedEvent(message.type, message.content);
+ }
+
+
+ //=========================================================================
+ // 心跳、断开与重连处理
+ //=========================================================================
+
+ /**
+ * Ping-Pong 心跳检测超时控制,这个值有两个作用:
+ * 1. 表示收到服务器的 Pong 相应之后,过多久再发下一次 Ping
+ * 2. 如果 Ping 发送之后,超过这个时间还没收到 Pong,断开与服务器的连接
+ * 该值将在与信道服务器建立连接后被更新
+ */
+ let pingPongTimeout = 15000;
+ let pingTimer = 0;
+ let pongTimer = 0;
+
+ /**
+ * 信道服务器返回 Ping-Pong 控制超时时间
+ */
+ function handleTimeoutPacket(packet) {
+ var timeout = packet.content * 1000;
+ /* istanbul ignore else */
+ if (!isNaN(timeout)) {
+ pingPongTimeout = timeout;
+ ping();
+ }
+ }
+
+ /**
+ * 收到服务器 Pong 响应,定时发送下一个 Ping
+ */
+ function handlePongPacket(packet) {
+ nextPing();
+ }
+
+ /**
+ * 发送下一个 Ping 包
+ */
+ function nextPing() {
+ clearTimeout(pingTimer);
+ clearTimeout(pongTimer);
+ pingTimer = setTimeout(ping, pingPongTimeout);
+ }
+
+ /**
+ * 发送 Ping,等待 Pong
+ */
+ function ping() {
+ /* istanbul ignore else */
+ if (isActive()) {
+ emitPingPacket();
+
+ // 超时没有响应,关闭信道
+ pongTimer = setTimeout(handlePongTimeout, pingPongTimeout);
+ }
+ }
+
+ /**
+ * Pong 超时没有响应,信道可能已经不可用,需要断开重连
+ */
+ function handlePongTimeout() {
+ startReconnect('服务器已失去响应');
+ }
+
+ // 已经重连失败的次数
+ var reconnectTryTimes = 0;
+
+ // 最多允许失败次数
+ var maxReconnectTryTimes = Tunnel.MAX_RECONNECT_TRY_TIMES || DEFAULT_MAX_RECONNECT_TRY_TIMES;
+
+ // 重连前等待的时间
+ var waitBeforeReconnect = 0;
+
+ // 重连前等待时间增量
+ var reconnectTimeIncrease = Tunnel.RECONNECT_TIME_INCREASE || DEFAULT_RECONNECT_TIME_INCREASE;
+
+ var reconnectTimer = 0;
+
+ function startReconnect(lastError) {
+ if (reconnectTryTimes >= maxReconnectTryTimes) {
+ close();
+
+ dispatchEvent('error', {
+ code: ERR_RECONNECT,
+ message: '重连失败',
+ detail: lastError,
+ });
+ }
+ else {
+ wx.closeSocket();
+ waitBeforeReconnect += reconnectTimeIncrease;
+ setStatus(STATUS_RECONNECTING);
+ reconnectTimer = setTimeout(doReconnect, waitBeforeReconnect);
+ }
+
+ if (reconnectTryTimes === 0) {
+ dispatchEvent('reconnecting');
+ }
+
+ reconnectTryTimes += 1;
+ }
+
+ function doReconnect() {
+ openConnect();
+ }
+
+ function resetReconnectionContext() {
+ reconnectTryTimes = 0;
+ waitBeforeReconnect = 0;
+ }
+
+ /**
+ * 收到服务器的关闭请求
+ */
+ function handleClosePacket(packet) {
+ close();
+ }
+
+ function handleUnknownPacket(packet) {
+ // throw away
+ }
+
+ var isClosing = false;
+
+ /**
+ * 收到 WebSocket 断开的消息,处理断开逻辑
+ */
+ function handleSocketClose() {
+ /* istanbul ignore if */
+ if (isClosing) return;
+
+ /* istanbul ignore else */
+ if (isActive()) {
+ // 意外断开的情况,进行重连
+ startReconnect('链接已断开');
+ }
+ }
+
+ function close() {
+ isClosing = true;
+ closeSocket();
+ setStatus(STATUS_CLOSED);
+ resetReconnectionContext();
+ isFirstConnection = false;
+ clearTimeout(pingTimer);
+ clearTimeout(pongTimer);
+ clearTimeout(reconnectTimer);
+ dispatchEvent('close');
+ isClosing = false;
+ }
+
+ function closeSocket(emitClose) {
+ if (isActive() && emitClose !== false) {
+ emitClosePacket();
+ }
+
+ wx.closeSocket();
+ }
+
+
+ //=========================================================================
+ // 错误处理
+ //=========================================================================
+
+ /**
+ * 错误处理
+ */
+ function handleSocketError(detail) {
+ switch (me.status) {
+ case Tunnel.STATUS_CONNECTING:
+ dispatchEvent('error', {
+ code: ERR_SOCKET_ERROR,
+ message: '连接信道失败,网络错误或者信道服务不可用',
+ detail: detail,
+ });
+ break;
+ }
+ }
+
+}
+
+module.exports = Tunnel;
\ No newline at end of file
diff --git a/vendor/wafer2-client-sdk/lib/utils.js b/vendor/wafer2-client-sdk/lib/utils.js
new file mode 100644
index 0000000..67fdcd4
--- /dev/null
+++ b/vendor/wafer2-client-sdk/lib/utils.js
@@ -0,0 +1,18 @@
+
+/**
+ * 拓展对象
+ */
+exports.extend = function extend(target) {
+ var sources = Array.prototype.slice.call(arguments, 1);
+
+ for (var i = 0; i < sources.length; i += 1) {
+ var source = sources[i];
+ for (var key in source) {
+ if (source.hasOwnProperty(key)) {
+ target[key] = source[key];
+ }
+ }
+ }
+
+ return target;
+};
\ No newline at end of file
diff --git a/vendor/wafer2-client-sdk/lib/wxTunnel.js b/vendor/wafer2-client-sdk/lib/wxTunnel.js
new file mode 100644
index 0000000..a1d32be
--- /dev/null
+++ b/vendor/wafer2-client-sdk/lib/wxTunnel.js
@@ -0,0 +1,32 @@
+/* istanbul ignore next */
+const noop = () => void(0);
+
+let onOpen, onClose, onMessage, onError;
+
+/* istanbul ignore next */
+function listen(listener) {
+ if (listener) {
+ onOpen = listener.onOpen;
+ onClose = listener.onClose;
+ onMessage = listener.onMessage;
+ onError = listener.onError;
+ } else {
+ onOpen = noop;
+ onClose = noop;
+ onMessage = noop;
+ onError = noop;
+ }
+}
+
+/* istanbul ignore next */
+function bind() {
+ wx.onSocketOpen(result => onOpen(result));
+ wx.onSocketClose(result => onClose(result));
+ wx.onSocketMessage(result => onMessage(result));
+ wx.onSocketError(error => onError(error));
+}
+
+listen(null);
+bind();
+
+module.exports = { listen };
\ No newline at end of file
diff --git a/vendor/wafer2-client-sdk/package.json b/vendor/wafer2-client-sdk/package.json
new file mode 100644
index 0000000..9da4f68
--- /dev/null
+++ b/vendor/wafer2-client-sdk/package.json
@@ -0,0 +1,47 @@
+{
+ "_from": "wafer2-client-sdk",
+ "_id": "wafer2-client-sdk@1.0.0",
+ "_inBundle": false,
+ "_integrity": "sha1-4hExQwJ+2YIN3LOn0EtbBd8uTYg=",
+ "_location": "/wafer2-client-sdk",
+ "_phantomChildren": {},
+ "_requested": {
+ "type": "tag",
+ "registry": true,
+ "raw": "wafer2-client-sdk",
+ "name": "wafer2-client-sdk",
+ "escapedName": "wafer2-client-sdk",
+ "rawSpec": "",
+ "saveSpec": null,
+ "fetchSpec": "latest"
+ },
+ "_requiredBy": [
+ "#USER",
+ "/"
+ ],
+ "_resolved": "http://r.tnpm.oa.com/wafer2-client-sdk/download/wafer2-client-sdk-1.0.0.tgz",
+ "_shasum": "e2113143027ed9820ddcb3a7d04b5b05df2e4d88",
+ "_spec": "wafer2-client-sdk",
+ "_where": "/Users/Jason/Tencent/ide-test/wafer-client-demo",
+ "author": {
+ "name": "CFETeam"
+ },
+ "bugs": {
+ "url": "https://github.com/tencentyun/wafer2-client-sdk/issues"
+ },
+ "bundleDependencies": false,
+ "deprecated": false,
+ "description": "Wafer client SDK",
+ "directories": {
+ "lib": "lib"
+ },
+ "homepage": "https://github.com/tencentyun/wafer2-client-sdk#readme",
+ "license": "MIT",
+ "main": "index.js",
+ "name": "wafer2-client-sdk",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/tencentyun/wafer2-client-sdk.git"
+ },
+ "version": "1.0.0"
+}