批处理脚本编译vs工程
感叹号的豆浆
c++batch命令
使用脚本直接编译vs工程,减少操作步骤,快速编译执行代码如下@colorb@echoenvironmentinit…@SETVARTOOL=“C:\ProgramFiles(x86)\MicrosoftVisualStudio\2017\Enterprise\Common7\Tools\vsdevcmd\ext”@SETCOMPILETOOL=“C:\ProgramFiles(x86)\Micro
[NOIP2017 提高组] 列队 题解
零衣贰
题解c++
数据结构。n=1n=1n=1的case:考虑有m+qm+qm+q个位置,每次操作队移,出队人直接插入队尾。维护位置对应的人,每次查询第kkk个人的位置ppp,输出ppp位置对应的人,并将出对者加入队尾。实现考虑维护01序列,表示位置上是/否有人,每次查前缀和为kkk的位置即可。一般情况:每次操作只会影响某一行以及最后一列。考虑将最后一列单独处理。对于查询(x,y)(x,y)(x,y):需查询第xx
工作记录 2017-01-20
月巴月巴白勺合鸟月半
医疗行业开发技术分享MicrosoftVisualStudio开发技术分享健康医疗C#
工作记录2017-01-20序号工作相关人员1修改从AmazingChart导出的数据的程序。处理AmazingChart的数据的导入,预计下周一可以提交。修改EDI837的生成。更新RD服务器。郝更新的问题1、更新了DataExport。1.1增加了BillingJobInfo\ProblemList、PatVisit\ProviderInfo\ProviderList、PatMas\Probl
ubuntu为pycharm添加系统快捷启动图标
金大大诶
Linux
一、首先,在桌面创建一个文件:pycharm.desktop二、编辑文件,添加以下内容:(Exec是sh文件位置,icon是图标文件位置)[DesktopEntry]Version=1.0Type=ApplicationName=PycharmIcon=/home/du/Documents/pycharm-community-2017.3.3/bin/pycharm.pngExec=/home/d
yolo模型coco数据集详解
工头阿乐
深度学习YOLO
深度学习文章目录深度学习前言前言instances_train2017.json和instances_val2017.json文件均分为五大部分,这五部分对应的关键字分别为info、licenses、images、annotations、categories。{"info":info,"licenses":[license1,license2,license3,...],"images":[ima
[特殊字符] Java Stream流:让集合处理变得如此优雅!
泥潭硬拔
javastreamjava集合
大家好!今天我们来聊一个超级实用的话题:JavaStream流。别被这个名字吓到,它其实就是一个让我们处理数据更轻松的"魔法工具"!什么是Stream流?简单来说,Stream流就像是一条传送带,我们可以把数据放在上面,然后对它们进行各种操作。比如筛选、排序、转换等等,就像在美食工厂的流水线上一样!为什么要用Stream流?代码更简洁(再见了,又臭又长的for循环!)可读性更强(像说人话一样写代码
二分查找 -- 分巧克力
Vaiey22
算法python蓝桥杯
P8647[蓝桥杯2017省AB]分巧克力-洛谷思路:”二分+贪心“由于目标是使每个人所分的的巧克力的边长尽可能大,(注意要保证公平,全部同一大小),设边长L*L,最小(L=1);最大min(H_i,W_i)每次检查当前K是否可行可行性检查(贪心计算):检查可行性(贪心计算):对每一块巧克力H_i*W_i,能切出的L*L巧克力数量是:count=(Hi/L)*(Wi/L)---->用整除统计所有N
CVE-2017-5645(使用 docker 搭建)
JM丫
网络安全
介绍:是一个与ApacheLog4j2相关的安全漏洞,属于远程代码执行,它可能允许攻击者通过构造恶意的日志信息在目标系统上执行任意代码Log4j2介绍Log4j2是Apache的一个日志记录工具,属于Java应用的日志框架,它是Log4j的升级版,性能更好,功能更多.它被广泛的适用于Java应用程序中,帮助开发者记录程序运行的时候的日子信息,是Java生态系统中最重要的一个日志框架之一漏洞编号:C
经济和信息化谋定研究-左晓栋:国家网络安全事件应急预案
赢在商道·中国营销企划
职能监管经济和信息化网信安全万祥军谋定研究经信研究
经济和信息化谋定研究-左晓栋:国家网络安全事件应急预案2017年6月,中央网信办公布了《国家网络安全事件应急预案》。指出,网络安全是动态的而不是静态的,是相对的而不是绝对的。维护网络安全,必须“防患于未然”。“制定《国家网络安全事件应急预案》是网络安全的一项基础性工作。”中国经济和信息化研究中心、中国经信研究国研智库中心主任万祥军在对话中国信息安全研究院副院长左晓栋时表示:也是落实国家《突发事件应
MobileNet家族:从v1到v4的架构演进与发展历程
彩旗工作室
人工智能架构人工智能机器学习cnn卷积神经网络
MobileNet是一个专为移动设备和嵌入式系统设计的轻量化卷积神经网络(CNN)家族,旨在在资源受限的环境中实现高效的图像分类、对象检测和语义分割等任务。自2017年首次推出以来,MobileNet经历了从v1到v4的多次迭代,每一代都在计算效率、模型大小和准确性上取得了显著进步。本文将详细探讨MobileNetv1、v2、v3和v4的原理、架构设计及其发展历程,并分析其关键创新和性能表现。Mo
深度好文 图解 RocketMQ 的系统架构
橘野禾
系统架构kafkajava分布式后端
今天给大家分享一篇学习RocketMQ系统架构核心知识点的梳理和总结,在讲解时力求精简、通俗易懂,通过图解来给正在学习RocketMQ的小伙伴带来帮助。RocketMQ是阿里巴巴的分布式消息中间件,在2012年开源,在2017年成为Apache顶级项目。1集群架构RocketMQ的集群架构如下图:从上图可以看到,整个集群中有四个角色:NameServer集群、Broker主从集群、Producer
HTML5前端页面设计,HTML5网页前端设计
设计师马丁
HTML5前端页面设计
HTML5网页前端设计编辑锁定讨论上传视频《HTML5网页前端设计》是2017年6月清华大学出版社出版的图书,作者是周文洁。书名HTML5网页前端设计作者周文洁ISBN9787302463597定价59.50元出版社清华大学出版社出版时间2017年6月HTML5网页前端设计内容简介编辑本书是一本从零开始学习的Web前端开发教材,无须额外的基础。全书以项目驱动为宗旨,详细介绍了HTML5、CSS3与
Weblogic XMLDecoder反序列化漏洞复现(CVE-2017-10271)
又菜又爱倒腾
漏洞复现安全漏洞
#WeblogicXMLDecoder反序列化漏洞(CVE-2017-10271)#一、漏洞简介weblogic的WLSSecurity组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML数据,在解析的过程中出现反序列化漏洞,导致可执行任意命令。二、漏洞影响影响版本10.3.6.0.0,12.1.3.0.0,12.2.1.1.0,12.2.1.2.0三、产生原
程序化广告行业(11/89):洗牌期与成熟期的变革及行业生态解析
lilye66
程序化广告kafkaflink时序数据库
程序化广告行业(11/89):洗牌期与成熟期的变革及行业生态解析大家好!一直以来,我都在钻研程序化广告行业,在学习过程中积累了不少干货,特别想和大家分享,一起学习进步。这篇文章接着上一篇,深入剖析程序化广告行业在洗牌期和成熟期的发展变化,以及整个行业生态的构成。一、洗牌期的行业变革2017-2018年,程序化广告行业进入洗牌期,这是行业发展过程中自我调整、去伪存真的关键阶段。在前期的燥热发展中,行
Python的pywt库的安装
赵孝正
Python标准库使用#python和pip安装python数据库开发语言
目录pywt库的全称是PyWavelets,https://pywavelets.readthedocs.io/en/latest/。安装pywt库:pipinstallPyWavelets而不是VS2017中默认的pipinstallpywt,真是坑啊。>>>importpywt>>>x=[3,7,1,1,-2,5,4,6]>>>cA,cD=pywt.dwt(x,‘db2′)>>>printcA
【扩散模型Diffusion Model系列】1-一篇文章带你快速入门扩散模型Diffusion Model,个人入门学习路线+优质学习博客资料
Leafing_
DiffusionModel扩散模型人工智能深度学习AIGC扩散模型AI视频生成算法人工智能深度学习
文章目录零、写在前面一、扩散理论缘起DDPM再见,马尔科夫!高视角DDIMLevelup!更高视角SDE、ScoreMatching、ODE走直线!RectifiedFlow和FlowMatching二、模型结构传统派LDMUNet:StableDiffusion维新派MMDiT:StableDiffusion3/Flux三、加速采样多走一步,再比较ConsistencyModel/LCM半白箱采
Spring Boot项目中集成阿里云短信服务
山高自有客行路
#Springbootspringboot阿里云后端
1.导入阿里云依赖首先,在你的pom.xml文件中添加阿里云短信服务的Maven依赖:com.aliyundysmsapi201705252.0.24确保你已经包含了其他必要的依赖,如MySQL驱动和MyBatis:mysqlmysql-connector-javaruntimeorg.mybatis.spring.bootmybatis-spring-boot-starter2.2.0org.p
深度学习 bert与Transformer的区别联系
Humingway
深度学习berttransformer
BERT(BidirectionalEncoderRepresentationsfromTransformers)和Transformer都是现代自然语言处理(NLP)中的重要概念,但它们代表不同的层面。理解这两者之间的区别与联系有助于更好地掌握它们在NLP任务中的应用。TransformerTransformer是一种特定的深度学习模型架构,由Vaswani等人在2017年的论文《Attenti
计算机软件著作权 (软著)申请流程
Super_jm_
软著申请经验分享恰饭程序人生面试其他
目录二、关于代理三、要省钱,自己填(自行申请流程)四、要省事、找代理(节省精力、缩短下证时间,但有费用)五、说明书模板一、关于软著(免费登记)从2017年4月1日开始,版权保护中心停止征收计算机软件著作权登记费,即当前的软著普通登记是免费。在这里对普通登记进行一下说明,普通登记是指在版权保护中心业务大厅进行软著登记,登记方式有两种:1、现场提交,需要登记申请人或代理人通过提前预约的方式去往版权局大
技术分享连接汇总[201712]
六月星空2011
Java高级交流javaredis技术
内容整理自->java高级交流群【329019348】更多Java高级交流文章2017/12/01最好用的IntelliJ插件Top10jrebeljavaee开发工具SpringCloud限流详解(附源码)免费的编程中文书籍索引ModernJavaRecipes-KenKousenWHATISDEADLOCKANDHOWTOPREVENTIT?基于Redis的限流系统的设计分布式环境下限流方案的
详细解析支持主项可编辑的列表视图控件的代码
程工助力英语中国话
windows
书籍:《VisualC++2017从入门到精通》的2.3.8Win32控件编程环境:visualstudio2022内容:【例2.28】支持主项可编辑的列表视图控件说明:以下内容大部分来自腾讯元宝。创建列表视图详细解析双击某行返回行内容的列表视图控件代码-CSDN博客https://blog.csdn.net/qq_20725221/article/details/146205016?spm=10
从Swish到SwiGLU:激活函数的进化与革命,qwen2.5应用的激活函数
KangkangLoveNLP
qwen2.5人工智能算法神经网络机器学习深度学习cnn自然语言处理
swiGLU和RMSNorm1.什么是swiGLUSwiGLU(Swish-GatedLinearUnit)是一种结合了Swish激活函数和GLU(GatedLinearUnit)门控机制的激活函数,广泛应用于现代大型语言模型中1.什么是Swish激活函数1.1Swish激活函数Swish激活函数是一种平滑的、非单调的激活函数,由GoogleBrain团队在2017年提出。它结合了ReLU的非线性
详细介绍ListView_DeleteItem
程工助力英语中国话
VisualC++2017从入门到精通windowswin32
书籍:《VisualC++2017从入门到精通》的2.3.8Win32控件编程环境:visualstudio2022内容:【例2.27】支持按Delete键删除某行的列表视图控件说明:以下内容大部分来自腾讯元宝。以下是关于**ListView_DeleteItem**函数的详细介绍,结合微软官方网页及搜索资料的核心内容:1.定义与作用ListView_DeleteItem是WindowsAPI中用
android 权限申请开源,安卓开源Android_permission访问权限
人间马戏团
android权限申请开源
满意答案suzie0126推荐于2017.11.25采纳率:51%等级:9已帮助:866人android.permission.ACCESS_NETWORK_STATE允许程序访问有关GSM网络信息636f70793231313335323631343130323136353331333335323465(Allowsapplicationstoaccessinformationaboutnetw
Adobe Firefly 技术浅析(二):Transformer生成模型
爱研究的小牛
AIGC——图像transformer深度学习人工智能AIGC机器学习
AdobeFirefly的图像生成技术不仅依赖于生成式对抗网络(GAN),还引入了基于Transformer的生成模型。Transformer模型在处理长距离依赖关系和生成复杂图像结构方面具有显著优势。1.基本原理1.1Transformer模型简介Transformer模型最初由Vaswani等人在2017年提出,用于自然语言处理(NLP)任务。其核心是自注意力机制(Self-Attention
SAX解析xml文件
小猪猪08
xml
1.创建SAXParserFactory实例
2.通过SAXParserFactory对象获取SAXParser实例
3.创建一个类SAXParserHander继续DefaultHandler,并且实例化这个类
4.SAXParser实例的parse来获取文件
public static void main(String[] args) {
//
为什么mysql里的ibdata1文件不断的增长?
brotherlamp
linuxlinux运维linux资料linux视频linux运维自学
我们在 Percona 支持栏目经常收到关于 MySQL 的 ibdata1 文件的这个问题。
当监控服务器发送一个关于 MySQL 服务器存储的报警时,恐慌就开始了 —— 就是说磁盘快要满了。
一番调查后你意识到大多数地盘空间被 InnoDB 的共享表空间 ibdata1 使用。而你已经启用了 innodbfileper_table,所以问题是:
ibdata1存了什么?
当你启用了 i
Quartz-quartz.properties配置
eksliang
quartz
其实Quartz JAR文件的org.quartz包下就包含了一个quartz.properties属性配置文件并提供了默认设置。如果需要调整默认配置,可以在类路径下建立一个新的quartz.properties,它将自动被Quartz加载并覆盖默认的设置。
下面是这些默认值的解释
#-----集群的配置
org.quartz.scheduler.instanceName =
informatica session的使用
18289753290
workflowsessionlogInformatica
如果希望workflow存储最近20次的log,在session里的Config Object设置,log options做配置,save session log :sessions run ;savesessio log for these runs:20
session下面的source 里面有个tracing 
Scrapy抓取网页时出现CRC check failed 0x471e6e9a != 0x7c07b839L的错误
酷的飞上天空
scrapy
Scrapy版本0.14.4
出现问题现象:
ERROR: Error downloading <GET http://xxxxx CRC check failed
解决方法
1.设置网络请求时的header中的属性'Accept-Encoding': '*;q=0'
明确表示不支持任何形式的压缩格式,避免程序的解压
java Swing小集锦
永夜-极光
java swing
1.关闭窗体弹出确认对话框
1.1 this.setDefaultCloseOperation (JFrame.DO_NOTHING_ON_CLOSE);
1.2
this.addWindowListener (
new WindowAdapter () {
public void windo
强制删除.svn文件夹
随便小屋
java
在windows上,从别处复制的项目中可能带有.svn文件夹,手动删除太麻烦,并且每个文件夹下都有。所以写了个程序进行删除。因为.svn文件夹在windows上是只读的,所以用File中的delete()和deleteOnExist()方法都不能将其删除,所以只能采用windows命令方式进行删除
GET和POST有什么区别?及为什么网上的多数答案都是错的。
aijuans
get post
如果有人问你,GET和POST,有什么区别?你会如何回答? 我的经历
前几天有人问我这个问题。我说GET是用于获取数据的,POST,一般用于将数据发给服务器之用。
这个答案好像并不是他想要的。于是他继续追问有没有别的区别?我说这就是个名字而已,如果服务器支持,他完全可以把G
谈谈新浪微博背后的那些算法
aoyouzi
谈谈新浪微博背后的那些算法
本文对微博中常见的问题的对应算法进行了简单的介绍,在实际应用中的算法比介绍的要复杂的多。当然,本文覆盖的主题并不全,比如好友推荐、热点跟踪等就没有涉及到。但古人云“窥一斑而见全豹”,希望本文的介绍能帮助大家更好的理解微博这样的社交网络应用。
微博是一个很多人都在用的社交应用。天天刷微博的人每天都会进行着这样几个操作:原创、转发、回复、阅读、关注、@等。其中,前四个是针对短博文,最后的关注和@则针
Connection reset 连接被重置的解决方法
百合不是茶
java字符流连接被重置
流是java的核心部分,,昨天在做android服务器连接服务器的时候出了问题,就将代码放到java中执行,结果还是一样连接被重置
被重置的代码如下;
客户端代码;
package 通信软件服务器;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.O
web.xml配置详解之filter
bijian1013
javaweb.xmlfilter
一.定义
<filter>
<filter-name>encodingfilter</filter-name>
<filter-class>com.my.app.EncodingFilter</filter-class>
<init-param>
<param-name>encoding<
Heritrix
Bill_chen
多线程xml算法制造配置管理
作为纯Java语言开发的、功能强大的网络爬虫Heritrix,其功能极其强大,且扩展性良好,深受热爱搜索技术的盆友们的喜爱,但它配置较为复杂,且源码不好理解,最近又使劲看了下,结合自己的学习和理解,跟大家分享Heritrix的点点滴滴。
Heritrix的下载(http://sourceforge.net/projects/archive-crawler/)安装、配置,就不罗嗦了,可以自己找找资
【Zookeeper】FAQ
bit1129
zookeeper
1.脱离IDE,运行简单的Java客户端程序
#ZkClient是简单的Zookeeper~$ java -cp "./:zookeeper-3.4.6.jar:./lib/*" ZKClient
1. Zookeeper是的Watcher回调是同步操作,需要添加异步处理的代码
2. 如果Zookeeper集群跨越多个机房,那么Leader/
The user specified as a definer ('aaa'@'localhost') does not exist
白糖_
localhost
今天遇到一个客户BUG,当前的jdbc连接用户是root,然后部分删除操作都会报下面这个错误:The user specified as a definer ('aaa'@'localhost') does not exist
最后找原因发现删除操作做了触发器,而触发器里面有这样一句
/*!50017 DEFINER = ''aaa@'localhost' */
原来最初
javascript中showModelDialog刷新父页面
bozch
JavaScript刷新父页面showModalDialog
在页面中使用showModalDialog打开模式子页面窗口的时候,如果想在子页面中操作父页面中的某个节点,可以通过如下的进行:
window.showModalDialog('url',self,‘status...’); // 首先中间参数使用self
在子页面使用w
编程之美-买书折扣
bylijinnan
编程之美
import java.util.Arrays;
public class BookDiscount {
/**编程之美 买书折扣
书上的贪心算法的分析很有意思,我看了半天看不懂,结果作者说,贪心算法在这个问题上是不适用的。。
下面用动态规划实现。
哈利波特这本书一共有五卷,每卷都是8欧元,如果读者一次购买不同的两卷可扣除5%的折扣,三卷10%,四卷20%,五卷
关于struts2.3.4项目跨站执行脚本以及远程执行漏洞修复概要
chenbowen00
strutsWEB安全
因为近期负责的几个银行系统软件,需要交付客户,因此客户专门请了安全公司对系统进行了安全评测,结果发现了诸如跨站执行脚本,远程执行漏洞以及弱口令等问题。
下面记录下本次解决的过程以便后续
1、首先从最简单的开始处理,服务器的弱口令问题,首先根据安全工具提供的测试描述中发现应用服务器中存在一个匿名用户,默认是不需要密码的,经过分析发现服务器使用了FTP协议,
而使用ftp协议默认会产生一个匿名用
[电力与暖气]煤炭燃烧与电力加温
comsci
在宇宙中,用贝塔射线观测地球某个部分,看上去,好像一个个马蜂窝,又像珊瑚礁一样,原来是某个国家的采煤区.....
不过,这个采煤区的煤炭看来是要用完了.....那么依赖将起燃烧并取暖的城市,在极度严寒的季节中...该怎么办呢?
&nbs
oracle O7_DICTIONARY_ACCESSIBILITY参数
daizj
oracle
O7_DICTIONARY_ACCESSIBILITY参数控制对数据字典的访问.设置为true,如果用户被授予了如select any table等any table权限,用户即使不是dba或sysdba用户也可以访问数据字典.在9i及以上版本默认为false,8i及以前版本默认为true.如果设置为true就可能会带来安全上的一些问题.这也就为什么O7_DICTIONARY_ACCESSIBIL
比较全面的MySQL优化参考
dengkane
mysql
本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了,可以参考本站的一些优化案例或者联系我,下方有我的联系方式。这是上篇。
1、硬件层相关优化
1.1、CPU相关
在服务器的BIOS设置中,可
C语言homework2,有一个逆序打印数字的小算法
dcj3sjt126com
c
#h1#
0、完成课堂例子
1、将一个四位数逆序打印
1234 ==> 4321
实现方法一:
# include <stdio.h>
int main(void)
{
int i = 1234;
int one = i%10;
int two = i / 10 % 10;
int three = i / 100 % 10;
apacheBench对网站进行压力测试
dcj3sjt126com
apachebench
ab 的全称是 ApacheBench , 是 Apache 附带的一个小工具 , 专门用于 HTTP Server 的 benchmark testing , 可以同时模拟多个并发请求。前段时间看到公司的开发人员也在用它作一些测试,看起来也不错,很简单,也很容易使用,所以今天花一点时间看了一下。
通过下面的一个简单的例子和注释,相信大家可以更容易理解这个工具的使用。
2种办法让HashMap线程安全
flyfoxs
javajdkjni
多线程之--2种办法让HashMap线程安全
多线程之--synchronized 和reentrantlock的优缺点
多线程之--2种JAVA乐观锁的比较( NonfairSync VS. FairSync)
HashMap不是线程安全的,往往在写程序时需要通过一些方法来回避.其实JDK原生的提供了2种方法让HashMap支持线程安全.
Spring Security(04)——认证简介
234390216
Spring Security认证过程
认证简介
目录
1.1 认证过程
1.2 Web应用的认证过程
1.2.1 ExceptionTranslationFilter
1.2.2 在request之间共享SecurityContext
1
Java 位运算
Javahuhui
java位运算
// 左移( << ) 低位补0
// 0000 0000 0000 0000 0000 0000 0000 0110 然后左移2位后,低位补0:
// 0000 0000 0000 0000 0000 0000 0001 1000
System.out.println(6 << 2);// 运行结果是24
// 右移( >> ) 高位补"
mysql免安装版配置
ldzyz007
mysql
1、my-small.ini是为了小型数据库而设计的。不应该把这个模型用于含有一些常用项目的数据库。
2、my-medium.ini是为中等规模的数据库而设计的。如果你正在企业中使用RHEL,可能会比这个操作系统的最小RAM需求(256MB)明显多得多的物理内存。由此可见,如果有那么多RAM内存可以使用,自然可以在同一台机器上运行其它服务。
3、my-large.ini是为专用于一个SQL数据
MFC和ado数据库使用时遇到的问题
你不认识的休道人
sqlC++mfc
===================================================================
第一个
===================================================================
try{
CString sql;
sql.Format("select * from p
表单重复提交Double Submits
rensanning
double
可能发生的场景:
*多次点击提交按钮
*刷新页面
*点击浏览器回退按钮
*直接访问收藏夹中的地址
*重复发送HTTP请求(Ajax)
(1)点击按钮后disable该按钮一会儿,这样能避免急躁的用户频繁点击按钮。
这种方法确实有些粗暴,友好一点的可以把按钮的文字变一下做个提示,比如Bootstrap的做法:
http://getbootstrap.co
Java String 十大常见问题
tomcat_oracle
java正则表达式
1.字符串比较,使用“==”还是equals()? "=="判断两个引用的是不是同一个内存地址(同一个物理对象)。 equals()判断两个字符串的值是否相等。 除非你想判断两个string引用是否同一个对象,否则应该总是使用equals()方法。 如果你了解字符串的驻留(String Interning)则会更好地理解这个问题。
SpringMVC 登陆拦截器实现登陆控制
xp9802
springMVC
思路,先登陆后,将登陆信息存储在session中,然后通过拦截器,对系统中的页面和资源进行访问拦截,同时对于登陆本身相关的页面和资源不拦截。
实现方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23