[Groonga-commit] groonga/groonga at bf4ac6b [master] nginx: update nginx

Back to archive index
Kentaro Hayashi null+****@clear*****
Wed Mar 27 11:40:45 JST 2019


Kentaro Hayashi	2019-03-27 11:40:45 +0900 (Wed, 27 Mar 2019)

  Revision: bf4ac6b49647ab0281454337de9ee25cdc8504dd
  https://github.com/groonga/groonga/commit/bf4ac6b49647ab0281454337de9ee25cdc8504dd

  Message:
    nginx: update nginx
    
      % ./update_nginx.sh 1.15.10
    
    In 1.15.10, build issue (VS2015 or later) was fixed, but
    this bug is introduced in 1.15.9, so upgrading 1.15.8 -> 1.15.10
    is not affected.

  Copied files:
    vendor/nginx-1.15.10/src/event/modules/ngx_poll_module.c
      (from vendor/nginx-1.15.8/src/event/modules/ngx_poll_module.c)
  Modified files:
    nginx_version
  Renamed files:
    vendor/nginx-1.15.10/auto/cc/acc
      (from vendor/nginx-1.15.8/auto/cc/acc)
    vendor/nginx-1.15.10/auto/cc/bcc
      (from vendor/nginx-1.15.8/auto/cc/bcc)
    vendor/nginx-1.15.10/auto/cc/ccc
      (from vendor/nginx-1.15.8/auto/cc/ccc)
    vendor/nginx-1.15.10/auto/cc/clang
      (from vendor/nginx-1.15.8/auto/cc/clang)
    vendor/nginx-1.15.10/auto/cc/conf
      (from vendor/nginx-1.15.8/auto/cc/conf)
    vendor/nginx-1.15.10/auto/cc/gcc
      (from vendor/nginx-1.15.8/auto/cc/gcc)
    vendor/nginx-1.15.10/auto/cc/icc
      (from vendor/nginx-1.15.8/auto/cc/icc)
    vendor/nginx-1.15.10/auto/cc/msvc
      (from vendor/nginx-1.15.8/auto/cc/msvc)
    vendor/nginx-1.15.10/auto/cc/name
      (from vendor/nginx-1.15.8/auto/cc/name)
    vendor/nginx-1.15.10/auto/cc/owc
      (from vendor/nginx-1.15.8/auto/cc/owc)
    vendor/nginx-1.15.10/auto/cc/sunc
      (from vendor/nginx-1.15.8/auto/cc/sunc)
    vendor/nginx-1.15.10/auto/configure
      (from vendor/nginx-1.15.8/auto/configure)
    vendor/nginx-1.15.10/auto/define
      (from vendor/nginx-1.15.8/auto/define)
    vendor/nginx-1.15.10/auto/endianness
      (from vendor/nginx-1.15.8/auto/endianness)
    vendor/nginx-1.15.10/auto/feature
      (from vendor/nginx-1.15.8/auto/feature)
    vendor/nginx-1.15.10/auto/have
      (from vendor/nginx-1.15.8/auto/have)
    vendor/nginx-1.15.10/auto/have_headers
      (from vendor/nginx-1.15.8/auto/have_headers)
    vendor/nginx-1.15.10/auto/headers
      (from vendor/nginx-1.15.8/auto/headers)
    vendor/nginx-1.15.10/auto/include
      (from vendor/nginx-1.15.8/auto/include)
    vendor/nginx-1.15.10/auto/init
      (from vendor/nginx-1.15.8/auto/init)
    vendor/nginx-1.15.10/auto/install
      (from vendor/nginx-1.15.8/auto/install)
    vendor/nginx-1.15.10/auto/lib/conf
      (from vendor/nginx-1.15.8/auto/lib/conf)
    vendor/nginx-1.15.10/auto/lib/geoip/conf
      (from vendor/nginx-1.15.8/auto/lib/geoip/conf)
    vendor/nginx-1.15.10/auto/lib/google-perftools/conf
      (from vendor/nginx-1.15.8/auto/lib/google-perftools/conf)
    vendor/nginx-1.15.10/auto/lib/libatomic/conf
      (from vendor/nginx-1.15.8/auto/lib/libatomic/conf)
    vendor/nginx-1.15.10/auto/lib/libatomic/make
      (from vendor/nginx-1.15.8/auto/lib/libatomic/make)
    vendor/nginx-1.15.10/auto/lib/libgd/conf
      (from vendor/nginx-1.15.8/auto/lib/libgd/conf)
    vendor/nginx-1.15.10/auto/lib/libxslt/conf
      (from vendor/nginx-1.15.8/auto/lib/libxslt/conf)
    vendor/nginx-1.15.10/auto/lib/make
      (from vendor/nginx-1.15.8/auto/lib/make)
    vendor/nginx-1.15.10/auto/lib/openssl/conf
      (from vendor/nginx-1.15.8/auto/lib/openssl/conf)
    vendor/nginx-1.15.10/auto/lib/openssl/make
      (from vendor/nginx-1.15.8/auto/lib/openssl/make)
    vendor/nginx-1.15.10/auto/lib/openssl/makefile.bcc
      (from vendor/nginx-1.15.8/auto/lib/openssl/makefile.bcc)
    vendor/nginx-1.15.10/auto/lib/openssl/makefile.msvc
      (from vendor/nginx-1.15.8/auto/lib/openssl/makefile.msvc)
    vendor/nginx-1.15.10/auto/lib/pcre/conf
      (from vendor/nginx-1.15.8/auto/lib/pcre/conf)
    vendor/nginx-1.15.10/auto/lib/pcre/make
      (from vendor/nginx-1.15.8/auto/lib/pcre/make)
    vendor/nginx-1.15.10/auto/lib/pcre/makefile.bcc
      (from vendor/nginx-1.15.8/auto/lib/pcre/makefile.bcc)
    vendor/nginx-1.15.10/auto/lib/pcre/makefile.msvc
      (from vendor/nginx-1.15.8/auto/lib/pcre/makefile.msvc)
    vendor/nginx-1.15.10/auto/lib/pcre/makefile.owc
      (from vendor/nginx-1.15.8/auto/lib/pcre/makefile.owc)
    vendor/nginx-1.15.10/auto/lib/perl/conf
      (from vendor/nginx-1.15.8/auto/lib/perl/conf)
    vendor/nginx-1.15.10/auto/lib/perl/make
      (from vendor/nginx-1.15.8/auto/lib/perl/make)
    vendor/nginx-1.15.10/auto/lib/zlib/conf
      (from vendor/nginx-1.15.8/auto/lib/zlib/conf)
    vendor/nginx-1.15.10/auto/lib/zlib/make
      (from vendor/nginx-1.15.8/auto/lib/zlib/make)
    vendor/nginx-1.15.10/auto/lib/zlib/makefile.bcc
      (from vendor/nginx-1.15.8/auto/lib/zlib/makefile.bcc)
    vendor/nginx-1.15.10/auto/lib/zlib/makefile.msvc
      (from vendor/nginx-1.15.8/auto/lib/zlib/makefile.msvc)
    vendor/nginx-1.15.10/auto/lib/zlib/makefile.owc
      (from vendor/nginx-1.15.8/auto/lib/zlib/makefile.owc)
    vendor/nginx-1.15.10/auto/make
      (from vendor/nginx-1.15.8/auto/make)
    vendor/nginx-1.15.10/auto/module
      (from vendor/nginx-1.15.8/auto/module)
    vendor/nginx-1.15.10/auto/modules
      (from vendor/nginx-1.15.8/auto/modules)
    vendor/nginx-1.15.10/auto/nohave
      (from vendor/nginx-1.15.8/auto/nohave)
    vendor/nginx-1.15.10/auto/options
      (from vendor/nginx-1.15.8/auto/options)
    vendor/nginx-1.15.10/auto/os/conf
      (from vendor/nginx-1.15.8/auto/os/conf)
    vendor/nginx-1.15.10/auto/os/darwin
      (from vendor/nginx-1.15.8/auto/os/darwin)
    vendor/nginx-1.15.10/auto/os/freebsd
      (from vendor/nginx-1.15.8/auto/os/freebsd)
    vendor/nginx-1.15.10/auto/os/linux
      (from vendor/nginx-1.15.8/auto/os/linux)
    vendor/nginx-1.15.10/auto/os/solaris
      (from vendor/nginx-1.15.8/auto/os/solaris)
    vendor/nginx-1.15.10/auto/os/win32
      (from vendor/nginx-1.15.8/auto/os/win32)
    vendor/nginx-1.15.10/auto/sources
      (from vendor/nginx-1.15.8/auto/sources)
    vendor/nginx-1.15.10/auto/stubs
      (from vendor/nginx-1.15.8/auto/stubs)
    vendor/nginx-1.15.10/auto/summary
      (from vendor/nginx-1.15.8/auto/summary)
    vendor/nginx-1.15.10/auto/threads
      (from vendor/nginx-1.15.8/auto/threads)
    vendor/nginx-1.15.10/auto/types/sizeof
      (from vendor/nginx-1.15.8/auto/types/sizeof)
    vendor/nginx-1.15.10/auto/types/typedef
      (from vendor/nginx-1.15.8/auto/types/typedef)
    vendor/nginx-1.15.10/auto/types/uintptr_t
      (from vendor/nginx-1.15.8/auto/types/uintptr_t)
    vendor/nginx-1.15.10/auto/types/value
      (from vendor/nginx-1.15.8/auto/types/value)
    vendor/nginx-1.15.10/auto/unix
      (from vendor/nginx-1.15.8/auto/unix)
    vendor/nginx-1.15.10/conf/fastcgi.conf
      (from vendor/nginx-1.15.8/conf/fastcgi.conf)
    vendor/nginx-1.15.10/conf/fastcgi_params
      (from vendor/nginx-1.15.8/conf/fastcgi_params)
    vendor/nginx-1.15.10/conf/koi-utf
      (from vendor/nginx-1.15.8/conf/koi-utf)
    vendor/nginx-1.15.10/conf/koi-win
      (from vendor/nginx-1.15.8/conf/koi-win)
    vendor/nginx-1.15.10/conf/mime.types
      (from vendor/nginx-1.15.8/conf/mime.types)
    vendor/nginx-1.15.10/conf/nginx.conf
      (from vendor/nginx-1.15.8/conf/nginx.conf)
    vendor/nginx-1.15.10/conf/scgi_params
      (from vendor/nginx-1.15.8/conf/scgi_params)
    vendor/nginx-1.15.10/conf/uwsgi_params
      (from vendor/nginx-1.15.8/conf/uwsgi_params)
    vendor/nginx-1.15.10/conf/win-utf
      (from vendor/nginx-1.15.8/conf/win-utf)
    vendor/nginx-1.15.10/contrib/README
      (from vendor/nginx-1.15.8/contrib/README)
    vendor/nginx-1.15.10/contrib/geo2nginx.pl
      (from vendor/nginx-1.15.8/contrib/geo2nginx.pl)
    vendor/nginx-1.15.10/contrib/unicode2nginx/koi-utf
      (from vendor/nginx-1.15.8/contrib/unicode2nginx/koi-utf)
    vendor/nginx-1.15.10/contrib/unicode2nginx/unicode-to-nginx.pl
      (from vendor/nginx-1.15.8/contrib/unicode2nginx/unicode-to-nginx.pl)
    vendor/nginx-1.15.10/contrib/unicode2nginx/win-utf
      (from vendor/nginx-1.15.8/contrib/unicode2nginx/win-utf)
    vendor/nginx-1.15.10/contrib/vim/ftdetect/nginx.vim
      (from vendor/nginx-1.15.8/contrib/vim/ftdetect/nginx.vim)
    vendor/nginx-1.15.10/contrib/vim/ftplugin/nginx.vim
      (from vendor/nginx-1.15.8/contrib/vim/ftplugin/nginx.vim)
    vendor/nginx-1.15.10/contrib/vim/indent/nginx.vim
      (from vendor/nginx-1.15.8/contrib/vim/indent/nginx.vim)
    vendor/nginx-1.15.10/contrib/vim/syntax/nginx.vim
      (from vendor/nginx-1.15.8/contrib/vim/syntax/nginx.vim)
    vendor/nginx-1.15.10/docs/GNUmakefile
      (from vendor/nginx-1.15.8/docs/GNUmakefile)
    vendor/nginx-1.15.10/docs/dtd/change_log_conf.dtd
      (from vendor/nginx-1.15.8/docs/dtd/change_log_conf.dtd)
    vendor/nginx-1.15.10/docs/dtd/changes.dtd
      (from vendor/nginx-1.15.8/docs/dtd/changes.dtd)
    vendor/nginx-1.15.10/docs/html/50x.html
      (from vendor/nginx-1.15.8/docs/html/50x.html)
    vendor/nginx-1.15.10/docs/html/index.html
      (from vendor/nginx-1.15.8/docs/html/index.html)
    vendor/nginx-1.15.10/docs/man/nginx.8
      (from vendor/nginx-1.15.8/docs/man/nginx.8)
    vendor/nginx-1.15.10/docs/text/LICENSE
      (from vendor/nginx-1.15.8/docs/text/LICENSE)
    vendor/nginx-1.15.10/docs/text/README
      (from vendor/nginx-1.15.8/docs/text/README)
    vendor/nginx-1.15.10/docs/xml/change_log_conf.xml
      (from vendor/nginx-1.15.8/docs/xml/change_log_conf.xml)
    vendor/nginx-1.15.10/docs/xml/nginx/changes.xml
      (from vendor/nginx-1.15.8/docs/xml/nginx/changes.xml)
    vendor/nginx-1.15.10/docs/xsls/changes.xsls
      (from vendor/nginx-1.15.8/docs/xsls/changes.xsls)
    vendor/nginx-1.15.10/docs/xslt/changes.xslt
      (from vendor/nginx-1.15.8/docs/xslt/changes.xslt)
    vendor/nginx-1.15.10/misc/GNUmakefile
      (from vendor/nginx-1.15.8/misc/GNUmakefile)
    vendor/nginx-1.15.10/misc/README
      (from vendor/nginx-1.15.8/misc/README)
    vendor/nginx-1.15.10/src/core/nginx.c
      (from vendor/nginx-1.15.8/src/core/nginx.c)
    vendor/nginx-1.15.10/src/core/nginx.h
      (from vendor/nginx-1.15.8/src/core/nginx.h)
    vendor/nginx-1.15.10/src/core/ngx_array.c
      (from vendor/nginx-1.15.8/src/core/ngx_array.c)
    vendor/nginx-1.15.10/src/core/ngx_array.h
      (from vendor/nginx-1.15.8/src/core/ngx_array.h)
    vendor/nginx-1.15.10/src/core/ngx_buf.c
      (from vendor/nginx-1.15.8/src/core/ngx_buf.c)
    vendor/nginx-1.15.10/src/core/ngx_buf.h
      (from vendor/nginx-1.15.8/src/core/ngx_buf.h)
    vendor/nginx-1.15.10/src/core/ngx_conf_file.c
      (from vendor/nginx-1.15.8/src/core/ngx_conf_file.c)
    vendor/nginx-1.15.10/src/core/ngx_conf_file.h
      (from vendor/nginx-1.15.8/src/core/ngx_conf_file.h)
    vendor/nginx-1.15.10/src/core/ngx_config.h
      (from vendor/nginx-1.15.8/src/core/ngx_config.h)
    vendor/nginx-1.15.10/src/core/ngx_connection.c
      (from vendor/nginx-1.15.8/src/core/ngx_connection.c)
    vendor/nginx-1.15.10/src/core/ngx_connection.h
      (from vendor/nginx-1.15.8/src/core/ngx_connection.h)
    vendor/nginx-1.15.10/src/core/ngx_core.h
      (from vendor/nginx-1.15.8/src/core/ngx_core.h)
    vendor/nginx-1.15.10/src/core/ngx_cpuinfo.c
      (from vendor/nginx-1.15.8/src/core/ngx_cpuinfo.c)
    vendor/nginx-1.15.10/src/core/ngx_crc.h
      (from vendor/nginx-1.15.8/src/core/ngx_crc.h)
    vendor/nginx-1.15.10/src/core/ngx_crc32.c
      (from vendor/nginx-1.15.8/src/core/ngx_crc32.c)
    vendor/nginx-1.15.10/src/core/ngx_crc32.h
      (from vendor/nginx-1.15.8/src/core/ngx_crc32.h)
    vendor/nginx-1.15.10/src/core/ngx_crypt.c
      (from vendor/nginx-1.15.8/src/core/ngx_crypt.c)
    vendor/nginx-1.15.10/src/core/ngx_crypt.h
      (from vendor/nginx-1.15.8/src/core/ngx_crypt.h)
    vendor/nginx-1.15.10/src/core/ngx_cycle.c
      (from vendor/nginx-1.15.8/src/core/ngx_cycle.c)
    vendor/nginx-1.15.10/src/core/ngx_cycle.h
      (from vendor/nginx-1.15.8/src/core/ngx_cycle.h)
    vendor/nginx-1.15.10/src/core/ngx_file.c
      (from vendor/nginx-1.15.8/src/core/ngx_file.c)
    vendor/nginx-1.15.10/src/core/ngx_file.h
      (from vendor/nginx-1.15.8/src/core/ngx_file.h)
    vendor/nginx-1.15.10/src/core/ngx_hash.c
      (from vendor/nginx-1.15.8/src/core/ngx_hash.c)
    vendor/nginx-1.15.10/src/core/ngx_hash.h
      (from vendor/nginx-1.15.8/src/core/ngx_hash.h)
    vendor/nginx-1.15.10/src/core/ngx_inet.c
      (from vendor/nginx-1.15.8/src/core/ngx_inet.c)
    vendor/nginx-1.15.10/src/core/ngx_inet.h
      (from vendor/nginx-1.15.8/src/core/ngx_inet.h)
    vendor/nginx-1.15.10/src/core/ngx_list.c
      (from vendor/nginx-1.15.8/src/core/ngx_list.c)
    vendor/nginx-1.15.10/src/core/ngx_list.h
      (from vendor/nginx-1.15.8/src/core/ngx_list.h)
    vendor/nginx-1.15.10/src/core/ngx_log.c
      (from vendor/nginx-1.15.8/src/core/ngx_log.c)
    vendor/nginx-1.15.10/src/core/ngx_log.h
      (from vendor/nginx-1.15.8/src/core/ngx_log.h)
    vendor/nginx-1.15.10/src/core/ngx_md5.c
      (from vendor/nginx-1.15.8/src/core/ngx_md5.c)
    vendor/nginx-1.15.10/src/core/ngx_md5.h
      (from vendor/nginx-1.15.8/src/core/ngx_md5.h)
    vendor/nginx-1.15.10/src/core/ngx_module.c
      (from vendor/nginx-1.15.8/src/core/ngx_module.c)
    vendor/nginx-1.15.10/src/core/ngx_module.h
      (from vendor/nginx-1.15.8/src/core/ngx_module.h)
    vendor/nginx-1.15.10/src/core/ngx_murmurhash.c
      (from vendor/nginx-1.15.8/src/core/ngx_murmurhash.c)
    vendor/nginx-1.15.10/src/core/ngx_murmurhash.h
      (from vendor/nginx-1.15.8/src/core/ngx_murmurhash.h)
    vendor/nginx-1.15.10/src/core/ngx_open_file_cache.c
      (from vendor/nginx-1.15.8/src/core/ngx_open_file_cache.c)
    vendor/nginx-1.15.10/src/core/ngx_open_file_cache.h
      (from vendor/nginx-1.15.8/src/core/ngx_open_file_cache.h)
    vendor/nginx-1.15.10/src/core/ngx_output_chain.c
      (from vendor/nginx-1.15.8/src/core/ngx_output_chain.c)
    vendor/nginx-1.15.10/src/core/ngx_palloc.c
      (from vendor/nginx-1.15.8/src/core/ngx_palloc.c)
    vendor/nginx-1.15.10/src/core/ngx_palloc.h
      (from vendor/nginx-1.15.8/src/core/ngx_palloc.h)
    vendor/nginx-1.15.10/src/core/ngx_parse.c
      (from vendor/nginx-1.15.8/src/core/ngx_parse.c)
    vendor/nginx-1.15.10/src/core/ngx_parse.h
      (from vendor/nginx-1.15.8/src/core/ngx_parse.h)
    vendor/nginx-1.15.10/src/core/ngx_parse_time.c
      (from vendor/nginx-1.15.8/src/core/ngx_parse_time.c)
    vendor/nginx-1.15.10/src/core/ngx_parse_time.h
      (from vendor/nginx-1.15.8/src/core/ngx_parse_time.h)
    vendor/nginx-1.15.10/src/core/ngx_proxy_protocol.c
      (from vendor/nginx-1.15.8/src/core/ngx_proxy_protocol.c)
    vendor/nginx-1.15.10/src/core/ngx_proxy_protocol.h
      (from vendor/nginx-1.15.8/src/core/ngx_proxy_protocol.h)
    vendor/nginx-1.15.10/src/core/ngx_queue.c
      (from vendor/nginx-1.15.8/src/core/ngx_queue.c)
    vendor/nginx-1.15.10/src/core/ngx_queue.h
      (from vendor/nginx-1.15.8/src/core/ngx_queue.h)
    vendor/nginx-1.15.10/src/core/ngx_radix_tree.c
      (from vendor/nginx-1.15.8/src/core/ngx_radix_tree.c)
    vendor/nginx-1.15.10/src/core/ngx_radix_tree.h
      (from vendor/nginx-1.15.8/src/core/ngx_radix_tree.h)
    vendor/nginx-1.15.10/src/core/ngx_rbtree.c
      (from vendor/nginx-1.15.8/src/core/ngx_rbtree.c)
    vendor/nginx-1.15.10/src/core/ngx_rbtree.h
      (from vendor/nginx-1.15.8/src/core/ngx_rbtree.h)
    vendor/nginx-1.15.10/src/core/ngx_regex.c
      (from vendor/nginx-1.15.8/src/core/ngx_regex.c)
    vendor/nginx-1.15.10/src/core/ngx_regex.h
      (from vendor/nginx-1.15.8/src/core/ngx_regex.h)
    vendor/nginx-1.15.10/src/core/ngx_resolver.c
      (from vendor/nginx-1.15.8/src/core/ngx_resolver.c)
    vendor/nginx-1.15.10/src/core/ngx_resolver.h
      (from vendor/nginx-1.15.8/src/core/ngx_resolver.h)
    vendor/nginx-1.15.10/src/core/ngx_rwlock.c
      (from vendor/nginx-1.15.8/src/core/ngx_rwlock.c)
    vendor/nginx-1.15.10/src/core/ngx_rwlock.h
      (from vendor/nginx-1.15.8/src/core/ngx_rwlock.h)
    vendor/nginx-1.15.10/src/core/ngx_sha1.c
      (from vendor/nginx-1.15.8/src/core/ngx_sha1.c)
    vendor/nginx-1.15.10/src/core/ngx_sha1.h
      (from vendor/nginx-1.15.8/src/core/ngx_sha1.h)
    vendor/nginx-1.15.10/src/core/ngx_shmtx.c
      (from vendor/nginx-1.15.8/src/core/ngx_shmtx.c)
    vendor/nginx-1.15.10/src/core/ngx_shmtx.h
      (from vendor/nginx-1.15.8/src/core/ngx_shmtx.h)
    vendor/nginx-1.15.10/src/core/ngx_slab.c
      (from vendor/nginx-1.15.8/src/core/ngx_slab.c)
    vendor/nginx-1.15.10/src/core/ngx_slab.h
      (from vendor/nginx-1.15.8/src/core/ngx_slab.h)
    vendor/nginx-1.15.10/src/core/ngx_spinlock.c
      (from vendor/nginx-1.15.8/src/core/ngx_spinlock.c)
    vendor/nginx-1.15.10/src/core/ngx_string.c
      (from vendor/nginx-1.15.8/src/core/ngx_string.c)
    vendor/nginx-1.15.10/src/core/ngx_string.h
      (from vendor/nginx-1.15.8/src/core/ngx_string.h)
    vendor/nginx-1.15.10/src/core/ngx_syslog.c
      (from vendor/nginx-1.15.8/src/core/ngx_syslog.c)
    vendor/nginx-1.15.10/src/core/ngx_syslog.h
      (from vendor/nginx-1.15.8/src/core/ngx_syslog.h)
    vendor/nginx-1.15.10/src/core/ngx_thread_pool.c
      (from vendor/nginx-1.15.8/src/core/ngx_thread_pool.c)
    vendor/nginx-1.15.10/src/core/ngx_thread_pool.h
      (from vendor/nginx-1.15.8/src/core/ngx_thread_pool.h)
    vendor/nginx-1.15.10/src/core/ngx_times.c
      (from vendor/nginx-1.15.8/src/core/ngx_times.c)
    vendor/nginx-1.15.10/src/core/ngx_times.h
      (from vendor/nginx-1.15.8/src/core/ngx_times.h)
    vendor/nginx-1.15.10/src/event/modules/ngx_devpoll_module.c
      (from vendor/nginx-1.15.8/src/event/modules/ngx_devpoll_module.c)
    vendor/nginx-1.15.10/src/event/modules/ngx_epoll_module.c
      (from vendor/nginx-1.15.8/src/event/modules/ngx_epoll_module.c)
    vendor/nginx-1.15.10/src/event/modules/ngx_eventport_module.c
      (from vendor/nginx-1.15.8/src/event/modules/ngx_eventport_module.c)
    vendor/nginx-1.15.10/src/event/modules/ngx_iocp_module.c
      (from vendor/nginx-1.15.8/src/event/modules/ngx_iocp_module.c)
    vendor/nginx-1.15.10/src/event/modules/ngx_iocp_module.h
      (from vendor/nginx-1.15.8/src/event/modules/ngx_iocp_module.h)
    vendor/nginx-1.15.10/src/event/modules/ngx_kqueue_module.c
      (from vendor/nginx-1.15.8/src/event/modules/ngx_kqueue_module.c)
    vendor/nginx-1.15.10/src/event/modules/ngx_select_module.c
      (from vendor/nginx-1.15.8/src/event/modules/ngx_select_module.c)
    vendor/nginx-1.15.10/src/event/modules/ngx_win32_poll_module.c
      (from vendor/nginx-1.15.8/src/event/modules/ngx_poll_module.c)
    vendor/nginx-1.15.10/src/event/modules/ngx_win32_select_module.c
      (from vendor/nginx-1.15.8/src/event/modules/ngx_win32_select_module.c)
    vendor/nginx-1.15.10/src/event/ngx_event.c
      (from vendor/nginx-1.15.8/src/event/ngx_event.c)
    vendor/nginx-1.15.10/src/event/ngx_event.h
      (from vendor/nginx-1.15.8/src/event/ngx_event.h)
    vendor/nginx-1.15.10/src/event/ngx_event_accept.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_accept.c)
    vendor/nginx-1.15.10/src/event/ngx_event_acceptex.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_acceptex.c)
    vendor/nginx-1.15.10/src/event/ngx_event_connect.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_connect.c)
    vendor/nginx-1.15.10/src/event/ngx_event_connect.h
      (from vendor/nginx-1.15.8/src/event/ngx_event_connect.h)
    vendor/nginx-1.15.10/src/event/ngx_event_connectex.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_connectex.c)
    vendor/nginx-1.15.10/src/event/ngx_event_openssl.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_openssl.c)
    vendor/nginx-1.15.10/src/event/ngx_event_openssl.h
      (from vendor/nginx-1.15.8/src/event/ngx_event_openssl.h)
    vendor/nginx-1.15.10/src/event/ngx_event_openssl_stapling.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_openssl_stapling.c)
    vendor/nginx-1.15.10/src/event/ngx_event_pipe.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_pipe.c)
    vendor/nginx-1.15.10/src/event/ngx_event_pipe.h
      (from vendor/nginx-1.15.8/src/event/ngx_event_pipe.h)
    vendor/nginx-1.15.10/src/event/ngx_event_posted.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_posted.c)
    vendor/nginx-1.15.10/src/event/ngx_event_posted.h
      (from vendor/nginx-1.15.8/src/event/ngx_event_posted.h)
    vendor/nginx-1.15.10/src/event/ngx_event_timer.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_timer.c)
    vendor/nginx-1.15.10/src/event/ngx_event_timer.h
      (from vendor/nginx-1.15.8/src/event/ngx_event_timer.h)
    vendor/nginx-1.15.10/src/event/ngx_event_udp.c
      (from vendor/nginx-1.15.8/src/event/ngx_event_udp.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_access_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_access_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_addition_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_addition_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_auth_basic_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_auth_basic_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_auth_request_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_auth_request_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_autoindex_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_autoindex_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_browser_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_browser_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_charset_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_charset_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_chunked_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_chunked_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_dav_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_dav_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_degradation_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_degradation_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_empty_gif_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_empty_gif_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_fastcgi_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_fastcgi_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_flv_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_flv_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_geo_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_geo_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_geoip_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_geoip_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_grpc_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_grpc_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_gunzip_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_gunzip_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_gzip_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_gzip_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_gzip_static_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_gzip_static_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_headers_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_headers_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_image_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_image_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_index_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_index_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_limit_conn_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_limit_conn_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_limit_req_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_limit_req_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_log_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_log_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_map_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_map_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_memcached_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_memcached_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_mirror_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_mirror_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_mp4_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_mp4_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_not_modified_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_not_modified_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_proxy_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_proxy_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_random_index_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_random_index_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_range_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_range_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_realip_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_realip_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_referer_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_referer_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_rewrite_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_rewrite_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_scgi_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_scgi_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_secure_link_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_secure_link_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_slice_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_slice_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_split_clients_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_split_clients_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_ssi_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_ssi_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_ssi_filter_module.h
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_ssi_filter_module.h)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_ssl_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_ssl_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_ssl_module.h
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_ssl_module.h)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_static_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_static_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_stub_status_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_stub_status_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_sub_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_sub_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_try_files_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_try_files_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_hash_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_upstream_hash_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_ip_hash_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_upstream_ip_hash_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_keepalive_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_upstream_keepalive_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_least_conn_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_upstream_least_conn_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_random_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_upstream_random_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_zone_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_upstream_zone_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_userid_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_userid_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_uwsgi_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_uwsgi_module.c)
    vendor/nginx-1.15.10/src/http/modules/ngx_http_xslt_filter_module.c
      (from vendor/nginx-1.15.8/src/http/modules/ngx_http_xslt_filter_module.c)
    vendor/nginx-1.15.10/src/http/modules/perl/Makefile.PL
      (from vendor/nginx-1.15.8/src/http/modules/perl/Makefile.PL)
    vendor/nginx-1.15.10/src/http/modules/perl/nginx.pm
      (from vendor/nginx-1.15.8/src/http/modules/perl/nginx.pm)
    vendor/nginx-1.15.10/src/http/modules/perl/nginx.xs
      (from vendor/nginx-1.15.8/src/http/modules/perl/nginx.xs)
    vendor/nginx-1.15.10/src/http/modules/perl/ngx_http_perl_module.c
      (from vendor/nginx-1.15.8/src/http/modules/perl/ngx_http_perl_module.c)
    vendor/nginx-1.15.10/src/http/modules/perl/ngx_http_perl_module.h
      (from vendor/nginx-1.15.8/src/http/modules/perl/ngx_http_perl_module.h)
    vendor/nginx-1.15.10/src/http/modules/perl/typemap
      (from vendor/nginx-1.15.8/src/http/modules/perl/typemap)
    vendor/nginx-1.15.10/src/http/ngx_http.c
      (from vendor/nginx-1.15.8/src/http/ngx_http.c)
    vendor/nginx-1.15.10/src/http/ngx_http.h
      (from vendor/nginx-1.15.8/src/http/ngx_http.h)
    vendor/nginx-1.15.10/src/http/ngx_http_cache.h
      (from vendor/nginx-1.15.8/src/http/ngx_http_cache.h)
    vendor/nginx-1.15.10/src/http/ngx_http_config.h
      (from vendor/nginx-1.15.8/src/http/ngx_http_config.h)
    vendor/nginx-1.15.10/src/http/ngx_http_copy_filter_module.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_copy_filter_module.c)
    vendor/nginx-1.15.10/src/http/ngx_http_core_module.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_core_module.c)
    vendor/nginx-1.15.10/src/http/ngx_http_core_module.h
      (from vendor/nginx-1.15.8/src/http/ngx_http_core_module.h)
    vendor/nginx-1.15.10/src/http/ngx_http_file_cache.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_file_cache.c)
    vendor/nginx-1.15.10/src/http/ngx_http_header_filter_module.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_header_filter_module.c)
    vendor/nginx-1.15.10/src/http/ngx_http_parse.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_parse.c)
    vendor/nginx-1.15.10/src/http/ngx_http_postpone_filter_module.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_postpone_filter_module.c)
    vendor/nginx-1.15.10/src/http/ngx_http_request.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_request.c)
    vendor/nginx-1.15.10/src/http/ngx_http_request.h
      (from vendor/nginx-1.15.8/src/http/ngx_http_request.h)
    vendor/nginx-1.15.10/src/http/ngx_http_request_body.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_request_body.c)
    vendor/nginx-1.15.10/src/http/ngx_http_script.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_script.c)
    vendor/nginx-1.15.10/src/http/ngx_http_script.h
      (from vendor/nginx-1.15.8/src/http/ngx_http_script.h)
    vendor/nginx-1.15.10/src/http/ngx_http_special_response.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_special_response.c)
    vendor/nginx-1.15.10/src/http/ngx_http_upstream.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_upstream.c)
    vendor/nginx-1.15.10/src/http/ngx_http_upstream.h
      (from vendor/nginx-1.15.8/src/http/ngx_http_upstream.h)
    vendor/nginx-1.15.10/src/http/ngx_http_upstream_round_robin.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_upstream_round_robin.c)
    vendor/nginx-1.15.10/src/http/ngx_http_upstream_round_robin.h
      (from vendor/nginx-1.15.8/src/http/ngx_http_upstream_round_robin.h)
    vendor/nginx-1.15.10/src/http/ngx_http_variables.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_variables.c)
    vendor/nginx-1.15.10/src/http/ngx_http_variables.h
      (from vendor/nginx-1.15.8/src/http/ngx_http_variables.h)
    vendor/nginx-1.15.10/src/http/ngx_http_write_filter_module.c
      (from vendor/nginx-1.15.8/src/http/ngx_http_write_filter_module.c)
    vendor/nginx-1.15.10/src/http/v2/ngx_http_v2.c
      (from vendor/nginx-1.15.8/src/http/v2/ngx_http_v2.c)
    vendor/nginx-1.15.10/src/http/v2/ngx_http_v2.h
      (from vendor/nginx-1.15.8/src/http/v2/ngx_http_v2.h)
    vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_encode.c
      (from vendor/nginx-1.15.8/src/http/v2/ngx_http_v2_encode.c)
    vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_filter_module.c
      (from vendor/nginx-1.15.8/src/http/v2/ngx_http_v2_filter_module.c)
    vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_huff_decode.c
      (from vendor/nginx-1.15.8/src/http/v2/ngx_http_v2_huff_decode.c)
    vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_huff_encode.c
      (from vendor/nginx-1.15.8/src/http/v2/ngx_http_v2_huff_encode.c)
    vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_module.c
      (from vendor/nginx-1.15.8/src/http/v2/ngx_http_v2_module.c)
    vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_module.h
      (from vendor/nginx-1.15.8/src/http/v2/ngx_http_v2_module.h)
    vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_table.c
      (from vendor/nginx-1.15.8/src/http/v2/ngx_http_v2_table.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail.h
      (from vendor/nginx-1.15.8/src/mail/ngx_mail.h)
    vendor/nginx-1.15.10/src/mail/ngx_mail_auth_http_module.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_auth_http_module.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_core_module.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_core_module.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_handler.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_handler.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_imap_handler.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_imap_handler.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_imap_module.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_imap_module.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_imap_module.h
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_imap_module.h)
    vendor/nginx-1.15.10/src/mail/ngx_mail_parse.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_parse.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_pop3_handler.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_pop3_handler.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_pop3_module.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_pop3_module.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_pop3_module.h
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_pop3_module.h)
    vendor/nginx-1.15.10/src/mail/ngx_mail_proxy_module.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_proxy_module.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_smtp_handler.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_smtp_handler.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_smtp_module.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_smtp_module.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_smtp_module.h
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_smtp_module.h)
    vendor/nginx-1.15.10/src/mail/ngx_mail_ssl_module.c
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_ssl_module.c)
    vendor/nginx-1.15.10/src/mail/ngx_mail_ssl_module.h
      (from vendor/nginx-1.15.8/src/mail/ngx_mail_ssl_module.h)
    vendor/nginx-1.15.10/src/misc/ngx_cpp_test_module.cpp
      (from vendor/nginx-1.15.8/src/misc/ngx_cpp_test_module.cpp)
    vendor/nginx-1.15.10/src/misc/ngx_google_perftools_module.c
      (from vendor/nginx-1.15.8/src/misc/ngx_google_perftools_module.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_alloc.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_alloc.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_alloc.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_alloc.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_atomic.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_atomic.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_channel.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_channel.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_channel.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_channel.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_daemon.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_daemon.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_darwin.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_darwin.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_darwin_config.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_darwin_config.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_darwin_init.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_darwin_init.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_darwin_sendfile_chain.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_darwin_sendfile_chain.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_dlopen.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_dlopen.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_dlopen.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_dlopen.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_errno.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_errno.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_errno.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_errno.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_file_aio_read.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_file_aio_read.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_files.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_files.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_files.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_files.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_freebsd.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_freebsd.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_freebsd_config.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_freebsd_config.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_freebsd_init.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_freebsd_init.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_freebsd_sendfile_chain.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_freebsd_sendfile_chain.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_gcc_atomic_amd64.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_gcc_atomic_amd64.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_gcc_atomic_ppc.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_gcc_atomic_ppc.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_gcc_atomic_sparc64.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_gcc_atomic_sparc64.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_gcc_atomic_x86.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_gcc_atomic_x86.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_linux.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_linux.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_linux_aio_read.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_linux_aio_read.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_linux_config.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_linux_config.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_linux_init.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_linux_init.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_linux_sendfile_chain.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_linux_sendfile_chain.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_os.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_os.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_posix_config.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_posix_config.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_posix_init.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_posix_init.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_process.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_process.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_process.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_process.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_process_cycle.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_process_cycle.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_process_cycle.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_process_cycle.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_readv_chain.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_readv_chain.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_recv.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_recv.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_send.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_send.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_setaffinity.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_setaffinity.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_setaffinity.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_setaffinity.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_setproctitle.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_setproctitle.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_setproctitle.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_setproctitle.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_shmem.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_shmem.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_shmem.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_shmem.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_socket.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_socket.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_socket.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_socket.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_solaris.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_solaris.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_solaris_config.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_solaris_config.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_solaris_init.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_solaris_init.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_solaris_sendfilev_chain.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_solaris_sendfilev_chain.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_sunpro_amd64.il
      (from vendor/nginx-1.15.8/src/os/unix/ngx_sunpro_amd64.il)
    vendor/nginx-1.15.10/src/os/unix/ngx_sunpro_atomic_sparc64.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_sunpro_atomic_sparc64.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_sunpro_sparc64.il
      (from vendor/nginx-1.15.8/src/os/unix/ngx_sunpro_sparc64.il)
    vendor/nginx-1.15.10/src/os/unix/ngx_sunpro_x86.il
      (from vendor/nginx-1.15.8/src/os/unix/ngx_sunpro_x86.il)
    vendor/nginx-1.15.10/src/os/unix/ngx_thread.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_thread.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_thread_cond.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_thread_cond.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_thread_id.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_thread_id.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_thread_mutex.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_thread_mutex.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_time.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_time.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_time.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_time.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_udp_recv.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_udp_recv.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_udp_send.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_udp_send.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_udp_sendmsg_chain.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_udp_sendmsg_chain.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_user.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_user.c)
    vendor/nginx-1.15.10/src/os/unix/ngx_user.h
      (from vendor/nginx-1.15.8/src/os/unix/ngx_user.h)
    vendor/nginx-1.15.10/src/os/unix/ngx_writev_chain.c
      (from vendor/nginx-1.15.8/src/os/unix/ngx_writev_chain.c)
    vendor/nginx-1.15.10/src/os/win32/nginx.ico
      (from vendor/nginx-1.15.8/src/os/win32/nginx.ico)
    vendor/nginx-1.15.10/src/os/win32/nginx.rc
      (from vendor/nginx-1.15.8/src/os/win32/nginx.rc)
    vendor/nginx-1.15.10/src/os/win32/nginx_icon16.xpm
      (from vendor/nginx-1.15.8/src/os/win32/nginx_icon16.xpm)
    vendor/nginx-1.15.10/src/os/win32/nginx_icon32.xpm
      (from vendor/nginx-1.15.8/src/os/win32/nginx_icon32.xpm)
    vendor/nginx-1.15.10/src/os/win32/nginx_icon48.xpm
      (from vendor/nginx-1.15.8/src/os/win32/nginx_icon48.xpm)
    vendor/nginx-1.15.10/src/os/win32/ngx_alloc.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_alloc.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_alloc.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_alloc.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_atomic.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_atomic.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_dlopen.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_dlopen.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_dlopen.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_dlopen.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_errno.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_errno.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_errno.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_errno.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_event_log.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_event_log.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_files.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_files.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_files.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_files.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_os.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_os.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_process.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_process.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_process.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_process.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_process_cycle.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_process_cycle.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_process_cycle.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_process_cycle.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_service.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_service.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_shmem.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_shmem.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_shmem.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_shmem.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_socket.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_socket.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_socket.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_socket.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_stat.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_stat.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_thread.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_thread.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_thread.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_thread.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_time.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_time.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_time.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_time.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_udp_wsarecv.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_udp_wsarecv.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_user.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_user.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_user.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_user.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_win32_config.h
      (from vendor/nginx-1.15.8/src/os/win32/ngx_win32_config.h)
    vendor/nginx-1.15.10/src/os/win32/ngx_win32_init.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_win32_init.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_wsarecv.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_wsarecv.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_wsarecv_chain.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_wsarecv_chain.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_wsasend.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_wsasend.c)
    vendor/nginx-1.15.10/src/os/win32/ngx_wsasend_chain.c
      (from vendor/nginx-1.15.8/src/os/win32/ngx_wsasend_chain.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream.h
      (from vendor/nginx-1.15.8/src/stream/ngx_stream.h)
    vendor/nginx-1.15.10/src/stream/ngx_stream_access_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_access_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_core_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_core_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_geo_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_geo_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_geoip_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_geoip_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_handler.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_handler.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_limit_conn_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_limit_conn_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_log_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_log_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_map_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_map_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_proxy_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_proxy_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_realip_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_realip_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_return_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_return_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_script.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_script.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_script.h
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_script.h)
    vendor/nginx-1.15.10/src/stream/ngx_stream_split_clients_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_split_clients_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_ssl_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_ssl_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_ssl_module.h
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_ssl_module.h)
    vendor/nginx-1.15.10/src/stream/ngx_stream_ssl_preread_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_ssl_preread_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_upstream.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_upstream.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_upstream.h
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_upstream.h)
    vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_hash_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_upstream_hash_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_least_conn_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_upstream_least_conn_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_random_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_upstream_random_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_round_robin.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_upstream_round_robin.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_round_robin.h
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_upstream_round_robin.h)
    vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_zone_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_upstream_zone_module.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_variables.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_variables.c)
    vendor/nginx-1.15.10/src/stream/ngx_stream_variables.h
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_variables.h)
    vendor/nginx-1.15.10/src/stream/ngx_stream_write_filter_module.c
      (from vendor/nginx-1.15.8/src/stream/ngx_stream_write_filter_module.c)

  Modified: nginx_version (+1 -1)
===================================================================
--- nginx_version    2019-03-25 12:44:08 +0900 (98e863cdf)
+++ nginx_version    2019-03-27 11:40:45 +0900 (fcf38d94d)
@@ -1 +1 @@
-1.15.8
+1.15.10

  Renamed: vendor/nginx-1.15.10/auto/cc/acc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/bcc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/ccc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/clang (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/gcc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/icc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/msvc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/name (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/owc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/cc/sunc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/configure (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/define (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/endianness (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/feature (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/have (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/have_headers (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/headers (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/include (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/init (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/install (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/geoip/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/google-perftools/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/libatomic/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/libatomic/make (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/libgd/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/libxslt/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/make (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/openssl/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/openssl/make (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/openssl/makefile.bcc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/openssl/makefile.msvc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/pcre/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/pcre/make (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/pcre/makefile.bcc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/pcre/makefile.msvc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/pcre/makefile.owc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/perl/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/perl/make (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/zlib/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/zlib/make (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/zlib/makefile.bcc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/zlib/makefile.msvc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/lib/zlib/makefile.owc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/make (+1 -1) 99%
===================================================================
--- vendor/nginx-1.15.8/auto/make    2019-03-25 12:44:08 +0900 (7ddd1007b)
+++ vendor/nginx-1.15.10/auto/make    2019-03-27 11:40:45 +0900 (34c40cdd5)
@@ -229,7 +229,7 @@ build:	binary modules manpage
 binary:	$NGX_OBJS${ngx_dirsep}nginx$ngx_binext
 
 $NGX_OBJS${ngx_dirsep}nginx$ngx_binext:	$ngx_deps$ngx_spacer
-	\$(LINK) $ngx_long_start$ngx_binout$NGX_OBJS${ngx_dirsep}nginx$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_main_link
+	\$(LINK) $ngx_long_start$ngx_binout$NGX_OBJS${ngx_dirsep}nginx$ngx_binext$ngx_long_cont$ngx_objs$ngx_libs$ngx_link$ngx_main_link
 	$ngx_rcc
 $ngx_long_end
 

  Renamed: vendor/nginx-1.15.10/auto/module (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/modules (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/nohave (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/options (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/os/conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/os/darwin (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/os/freebsd (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/os/linux (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/os/solaris (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/os/win32 (+2 -6) 84%
===================================================================
--- vendor/nginx-1.15.8/auto/os/win32    2019-03-25 12:44:08 +0900 (7a8277496)
+++ vendor/nginx-1.15.10/auto/os/win32    2019-03-27 11:40:45 +0900 (b821ae6d8)
@@ -11,6 +11,7 @@ CORE_SRCS="$WIN32_SRCS $IOCP_SRCS"
 OS_CONFIG="$WIN32_CONFIG"
 NGX_ICONS="$NGX_WIN32_ICONS"
 SELECT_SRCS=$WIN32_SELECT_SRCS
+POLL_SRCS=$WIN32_POLL_SRCS
 
 ngx_pic_opt=
 ngx_binext=".exe"
@@ -31,12 +32,7 @@ case "$NGX_CC_NAME" in
 esac
 
 EVENT_MODULES="$EVENT_MODULES $IOCP_MODULE"
-EVENT_FOUND=YES
-
-if [ $EVENT_SELECT = NO ]; then
-    CORE_SRCS="$CORE_SRCS $SELECT_SRCS"
-    EVENT_MODULES="$EVENT_MODULES $SELECT_MODULE"
-fi
+#EVENT_FOUND=YES
 
 have=NGX_HAVE_INET6 . auto/have
 

  Renamed: vendor/nginx-1.15.10/auto/sources (+1 -0) 99%
===================================================================
--- vendor/nginx-1.15.8/auto/sources    2019-03-25 12:44:08 +0900 (9b425063e)
+++ vendor/nginx-1.15.10/auto/sources    2019-03-27 11:40:45 +0900 (3dad11132)
@@ -106,6 +106,7 @@ WIN32_SELECT_SRCS=src/event/modules/ngx_win32_select_module.c
 
 POLL_MODULE=ngx_poll_module
 POLL_SRCS=src/event/modules/ngx_poll_module.c
+WIN32_POLL_SRCS=src/event/modules/ngx_win32_poll_module.c
 
 KQUEUE_MODULE=ngx_kqueue_module
 KQUEUE_SRCS=src/event/modules/ngx_kqueue_module.c

  Renamed: vendor/nginx-1.15.10/auto/stubs (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/summary (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/threads (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/types/sizeof (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/types/typedef (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/types/uintptr_t (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/types/value (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/auto/unix (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/conf/fastcgi.conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/conf/fastcgi_params (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/conf/koi-utf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/conf/koi-win (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/conf/mime.types (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/conf/nginx.conf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/conf/scgi_params (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/conf/uwsgi_params (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/conf/win-utf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/contrib/README (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/contrib/geo2nginx.pl (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/contrib/unicode2nginx/koi-utf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/contrib/unicode2nginx/unicode-to-nginx.pl (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/contrib/unicode2nginx/win-utf (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/contrib/vim/ftdetect/nginx.vim (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/contrib/vim/ftplugin/nginx.vim (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/contrib/vim/indent/nginx.vim (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/contrib/vim/syntax/nginx.vim (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/GNUmakefile (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/dtd/change_log_conf.dtd (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/dtd/changes.dtd (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/html/50x.html (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/html/index.html (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/man/nginx.8 (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/text/LICENSE (+2 -2) 94%
===================================================================
--- vendor/nginx-1.15.8/docs/text/LICENSE    2019-03-25 12:44:08 +0900 (9401174e1)
+++ vendor/nginx-1.15.10/docs/text/LICENSE    2019-03-27 11:40:45 +0900 (c63e0ba4e)
@@ -1,6 +1,6 @@
 /* 
- * Copyright (C) 2002-2018 Igor Sysoev
- * Copyright (C) 2011-2018 Nginx, Inc.
+ * Copyright (C) 2002-2019 Igor Sysoev
+ * Copyright (C) 2011-2019 Nginx, Inc.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without

  Renamed: vendor/nginx-1.15.10/docs/text/README (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/xml/change_log_conf.xml (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/xml/nginx/changes.xml (+113 -0) 99%
===================================================================
--- vendor/nginx-1.15.8/docs/xml/nginx/changes.xml    2019-03-25 12:44:08 +0900 (4c471d83f)
+++ vendor/nginx-1.15.10/docs/xml/nginx/changes.xml    2019-03-27 11:40:45 +0900 (de93e329b)
@@ -5,6 +5,119 @@
 <change_log title="nginx">
 
 
+<changes ver="1.15.10" date="2019-03-26">
+
+<change type="change">
+<para lang="ru">
+теперь при использовании имени хоста в директиве listen
+nginx создаёт listen-сокеты для всех адресов,
+соответствующих этому имени
+(ранее использовался только первый адрес).
+</para>
+<para lang="en">
+when using a hostname in the "listen" directive
+nginx now creates listening sockets
+for all addresses the hostname resolves to
+(previously, only the first address was used).
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+диапазоны портов в директиве listen.
+</para>
+<para lang="en">
+port ranges in the "listen" directive.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+возможность загрузки SSL-сертификатов и секретных ключей из переменных.
+</para>
+<para lang="en">
+loading of SSL certificates and secret keys from variables.
+</para>
+</change>
+
+<change type="workaround">
+<para lang="ru">
+переменная $ssl_server_name могла быть пустой
+при использовании OpenSSL 1.1.1.
+</para>
+<para lang="en">
+the $ssl_server_name variable might be empty
+when using OpenSSL 1.1.1.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+nginx/Windows не собирался с Visual Studio 2015 и новее;
+ошибка появилась в 1.15.9.
+</para>
+<para lang="en">
+nginx/Windows could not be built with Visual Studio 2015 or newer;
+the bug had appeared in 1.15.9.
+</para>
+</change>
+
+</changes>
+
+
+<changes ver="1.15.9" date="2019-02-26">
+
+<change type="feature">
+<para lang="ru">
+директивы ssl_certificate и ssl_certificate_key
+поддерживают переменные.
+</para>
+<para lang="en">
+variables support
+in the "ssl_certificate" and "ssl_certificate_key" directives.
+</para>
+</change>
+
+<change type="feature">
+<para lang="ru">
+метод poll теперь доступен на Windows
+при использовании Windows Vista и новее.
+</para>
+<para lang="en">
+the "poll" method is now available on Windows
+when using Windows Vista or newer.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+если при использовании метода select на Windows
+происходила ошибка при установлении соединения с бэкендом,
+nginx ожидал истечения таймаута на установление соединения.
+</para>
+<para lang="en">
+if the "select" method was used on Windows
+and an error occurred while establishing a backend connection,
+nginx waited for the connection establishment timeout to expire.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+директивы proxy_upload_rate и proxy_download_rate
+в модуле stream
+работали некорректно при проксировании UDP-пакетов.
+</para>
+<para lang="en">
+the "proxy_upload_rate" and "proxy_download_rate" directives
+in the stream module
+worked incorrectly when proxying UDP datagrams.
+</para>
+</change>
+
+</changes>
+
+
 <changes ver="1.15.8" date="2018-12-25">
 
 <change type="feature">

  Renamed: vendor/nginx-1.15.10/docs/xsls/changes.xsls (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/docs/xslt/changes.xslt (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/misc/GNUmakefile (+1 -2) 98%
===================================================================
--- vendor/nginx-1.15.8/misc/GNUmakefile    2019-03-25 12:44:08 +0900 (d68ceca00)
+++ vendor/nginx-1.15.10/misc/GNUmakefile    2019-03-27 11:40:45 +0900 (bf91174eb)
@@ -6,7 +6,7 @@ TEMP =		tmp
 
 CC =		cl
 OBJS =		objs.msvc8
-OPENSSL =	openssl-1.0.2q
+OPENSSL =	openssl-1.1.1b
 ZLIB =		zlib-1.2.11
 PCRE =		pcre-8.42
 
@@ -65,7 +65,6 @@ win32:
 		--with-cc-opt=-DFD_SETSIZE=1024				\
 		--with-pcre=$(OBJS)/lib/$(PCRE)				\
 		--with-zlib=$(OBJS)/lib/$(ZLIB)				\
-		--with-select_module					\
 		--with-http_v2_module					\
 		--with-http_realip_module				\
 		--with-http_addition_module				\

  Renamed: vendor/nginx-1.15.10/misc/README (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/nginx.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/nginx.h (+2 -2) 84%
===================================================================
--- vendor/nginx-1.15.8/src/core/nginx.h    2019-03-25 12:44:08 +0900 (5e2c5a88f)
+++ vendor/nginx-1.15.10/src/core/nginx.h    2019-03-27 11:40:45 +0900 (ad1a3b2b0)
@@ -9,8 +9,8 @@
 #define _NGINX_H_INCLUDED_
 
 
-#define nginx_version      1015008
-#define NGINX_VERSION      "1.15.8"
+#define nginx_version      1015010
+#define NGINX_VERSION      "1.15.10"
 #define NGINX_VER          "nginx/" NGINX_VERSION
 
 #ifdef NGX_BUILD

  Renamed: vendor/nginx-1.15.10/src/core/ngx_array.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_array.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_buf.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_buf.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_conf_file.c (+1 -1) 99%
===================================================================
--- vendor/nginx-1.15.8/src/core/ngx_conf_file.c    2019-03-25 12:44:08 +0900 (e92cd33c9)
+++ vendor/nginx-1.15.10/src/core/ngx_conf_file.c    2019-03-27 11:40:45 +0900 (6d1629e9b)
@@ -310,7 +310,7 @@ ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
                 goto failed;
             }
 
-            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, rv);
+            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, "%s", rv);
 
             goto failed;
         }

  Renamed: vendor/nginx-1.15.10/src/core/ngx_conf_file.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_config.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_connection.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_connection.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_core.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_cpuinfo.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_crc.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_crc32.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_crc32.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_crypt.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_crypt.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_cycle.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_cycle.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_file.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_file.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_hash.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_hash.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_inet.c (+218 -220) 82%
===================================================================
--- vendor/nginx-1.15.8/src/core/ngx_inet.c    2019-03-25 12:44:08 +0900 (db48b93c1)
+++ vendor/nginx-1.15.10/src/core/ngx_inet.c    2019-03-27 11:40:45 +0900 (4228504ad)
@@ -12,6 +12,8 @@
 static ngx_int_t ngx_parse_unix_domain_url(ngx_pool_t *pool, ngx_url_t *u);
 static ngx_int_t ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u);
 static ngx_int_t ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u);
+static ngx_int_t ngx_inet_add_addr(ngx_pool_t *pool, ngx_url_t *u,
+    struct sockaddr *sockaddr, socklen_t socklen, ngx_uint_t total);
 
 
 in_addr_t
@@ -780,13 +782,10 @@ ngx_parse_unix_domain_url(ngx_pool_t *pool, ngx_url_t *u)
 static ngx_int_t
 ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
 {
-    u_char               *p, *host, *port, *last, *uri, *args;
-    size_t                len;
-    ngx_int_t             n;
-    struct sockaddr_in   *sin;
-#if (NGX_HAVE_INET6)
-    struct sockaddr_in6  *sin6;
-#endif
+    u_char              *host, *port, *last, *uri, *args, *dash;
+    size_t               len;
+    ngx_int_t            n;
+    struct sockaddr_in  *sin;
 
     u->socklen = sizeof(struct sockaddr_in);
     sin = (struct sockaddr_in *) &u->sockaddr;
@@ -831,6 +830,25 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
 
         len = last - port;
 
+        if (u->listen) {
+            dash = ngx_strlchr(port, last, '-');
+
+            if (dash) {
+                dash++;
+
+                n = ngx_atoi(dash, last - dash);
+
+                if (n < 1 || n > 65535) {
+                    u->err = "invalid port";
+                    return NGX_ERROR;
+                }
+
+                u->last_port = (in_port_t) n;
+
+                len = dash - port - 1;
+            }
+        }
+
         n = ngx_atoi(port, len);
 
         if (n < 1 || n > 65535) {
@@ -838,10 +856,15 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
             return NGX_ERROR;
         }
 
+        if (u->last_port && n > u->last_port) {
+            u->err = "invalid port range";
+            return NGX_ERROR;
+        }
+
         u->port = (in_port_t) n;
         sin->sin_port = htons((in_port_t) n);
 
-        u->port_text.len = len;
+        u->port_text.len = last - port;
         u->port_text.data = port;
 
         last = port - 1;
@@ -853,31 +876,69 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
 
                 /* test value as port only */
 
-                n = ngx_atoi(host, last - host);
+                len = last - host;
+
+                dash = ngx_strlchr(host, last, '-');
+
+                if (dash) {
+                    dash++;
+
+                    n = ngx_atoi(dash, last - dash);
+
+                    if (n == NGX_ERROR) {
+                        goto no_port;
+                    }
+
+                    if (n < 1 || n > 65535) {
+                        u->err = "invalid port";
+
+                    } else {
+                        u->last_port = (in_port_t) n;
+                    }
+
+                    len = dash - host - 1;
+                }
+
+                n = ngx_atoi(host, len);
 
                 if (n != NGX_ERROR) {
 
+                    if (u->err) {
+                        return NGX_ERROR;
+                    }
+
                     if (n < 1 || n > 65535) {
                         u->err = "invalid port";
                         return NGX_ERROR;
                     }
 
+                    if (u->last_port && n > u->last_port) {
+                        u->err = "invalid port range";
+                        return NGX_ERROR;
+                    }
+
                     u->port = (in_port_t) n;
                     sin->sin_port = htons((in_port_t) n);
+                    sin->sin_addr.s_addr = INADDR_ANY;
 
                     u->port_text.len = last - host;
                     u->port_text.data = host;
 
                     u->wildcard = 1;
 
-                    return NGX_OK;
+                    return ngx_inet_add_addr(pool, u, &u->sockaddr.sockaddr,
+                                             u->socklen, 1);
                 }
             }
         }
 
+no_port:
+
+        u->err = NULL;
         u->no_port = 1;
         u->port = u->default_port;
         sin->sin_port = htons(u->default_port);
+        u->last_port = 0;
     }
 
     len = last - host;
@@ -893,7 +954,7 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
     if (u->listen && len == 1 && *host == '*') {
         sin->sin_addr.s_addr = INADDR_ANY;
         u->wildcard = 1;
-        return NGX_OK;
+        return ngx_inet_add_addr(pool, u, &u->sockaddr.sockaddr, u->socklen, 1);
     }
 
     sin->sin_addr.s_addr = ngx_inet_addr(host, len);
@@ -904,33 +965,7 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
             u->wildcard = 1;
         }
 
-        u->naddrs = 1;
-
-        u->addrs = ngx_pcalloc(pool, sizeof(ngx_addr_t));
-        if (u->addrs == NULL) {
-            return NGX_ERROR;
-        }
-
-        sin = ngx_pcalloc(pool, sizeof(struct sockaddr_in));
-        if (sin == NULL) {
-            return NGX_ERROR;
-        }
-
-        ngx_memcpy(sin, &u->sockaddr, sizeof(struct sockaddr_in));
-
-        u->addrs[0].sockaddr = (struct sockaddr *) sin;
-        u->addrs[0].socklen = sizeof(struct sockaddr_in);
-
-        p = ngx_pnalloc(pool, u->host.len + sizeof(":65535") - 1);
-        if (p == NULL) {
-            return NGX_ERROR;
-        }
-
-        u->addrs[0].name.len = ngx_sprintf(p, "%V:%d",
-                                           &u->host, u->port) - p;
-        u->addrs[0].name.data = p;
-
-        return NGX_OK;
+        return ngx_inet_add_addr(pool, u, &u->sockaddr.sockaddr, u->socklen, 1);
     }
 
     if (u->no_resolve) {
@@ -944,29 +979,7 @@ ngx_parse_inet_url(ngx_pool_t *pool, ngx_url_t *u)
     u->family = u->addrs[0].sockaddr->sa_family;
     u->socklen = u->addrs[0].socklen;
     ngx_memcpy(&u->sockaddr, u->addrs[0].sockaddr, u->addrs[0].socklen);
-
-    switch (u->family) {
-
-#if (NGX_HAVE_INET6)
-    case AF_INET6:
-        sin6 = (struct sockaddr_in6 *) &u->sockaddr;
-
-        if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
-            u->wildcard = 1;
-        }
-
-        break;
-#endif
-
-    default: /* AF_INET */
-        sin = (struct sockaddr_in *) &u->sockaddr;
-
-        if (sin->sin_addr.s_addr == INADDR_ANY) {
-            u->wildcard = 1;
-        }
-
-        break;
-    }
+    u->wildcard = ngx_inet_wildcard(&u->sockaddr.sockaddr);
 
     return NGX_OK;
 }
@@ -976,7 +989,7 @@ static ngx_int_t
 ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
 {
 #if (NGX_HAVE_INET6)
-    u_char               *p, *host, *port, *last, *uri;
+    u_char               *p, *host, *port, *last, *uri, *dash;
     size_t                len;
     ngx_int_t             n;
     struct sockaddr_in6  *sin6;
@@ -1022,6 +1035,25 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
 
         len = last - port;
 
+        if (u->listen) {
+            dash = ngx_strlchr(port, last, '-');
+
+            if (dash) {
+                dash++;
+
+                n = ngx_atoi(dash, last - dash);
+
+                if (n < 1 || n > 65535) {
+                    u->err = "invalid port";
+                    return NGX_ERROR;
+                }
+
+                u->last_port = (in_port_t) n;
+
+                len = dash - port - 1;
+            }
+        }
+
         n = ngx_atoi(port, len);
 
         if (n < 1 || n > 65535) {
@@ -1029,10 +1061,15 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
             return NGX_ERROR;
         }
 
+        if (u->last_port && n > u->last_port) {
+            u->err = "invalid port range";
+            return NGX_ERROR;
+        }
+
         u->port = (in_port_t) n;
         sin6->sin6_port = htons((in_port_t) n);
 
-        u->port_text.len = len;
+        u->port_text.len = last - port;
         u->port_text.data = port;
 
     } else {
@@ -1061,33 +1098,8 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
     }
 
     u->family = AF_INET6;
-    u->naddrs = 1;
-
-    u->addrs = ngx_pcalloc(pool, sizeof(ngx_addr_t));
-    if (u->addrs == NULL) {
-        return NGX_ERROR;
-    }
-
-    sin6 = ngx_pcalloc(pool, sizeof(struct sockaddr_in6));
-    if (sin6 == NULL) {
-        return NGX_ERROR;
-    }
-
-    ngx_memcpy(sin6, &u->sockaddr, sizeof(struct sockaddr_in6));
-
-    u->addrs[0].sockaddr = (struct sockaddr *) sin6;
-    u->addrs[0].socklen = sizeof(struct sockaddr_in6);
-
-    p = ngx_pnalloc(pool, u->host.len + sizeof(":65535") - 1);
-    if (p == NULL) {
-        return NGX_ERROR;
-    }
 
-    u->addrs[0].name.len = ngx_sprintf(p, "%V:%d",
-                                       &u->host, u->port) - p;
-    u->addrs[0].name.data = p;
-
-    return NGX_OK;
+    return ngx_inet_add_addr(pool, u, &u->sockaddr.sockaddr, u->socklen, 1);
 
 #else
 
@@ -1104,15 +1116,9 @@ ngx_parse_inet6_url(ngx_pool_t *pool, ngx_url_t *u)
 ngx_int_t
 ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u)
 {
-    u_char               *p, *host;
-    size_t                len;
-    in_port_t             port;
-    ngx_uint_t            i;
-    struct addrinfo       hints, *res, *rp;
-    struct sockaddr_in   *sin;
-    struct sockaddr_in6  *sin6;
-
-    port = htons(u->port);
+    u_char           *host;
+    ngx_uint_t        n;
+    struct addrinfo   hints, *res, *rp;
 
     host = ngx_alloc(u->host.len + 1, pool->log);
     if (host == NULL) {
@@ -1136,7 +1142,7 @@ ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u)
 
     ngx_free(host);
 
-    for (i = 0, rp = res; rp != NULL; rp = rp->ai_next) {
+    for (n = 0, rp = res; rp != NULL; rp = rp->ai_next) {
 
         switch (rp->ai_family) {
 
@@ -1148,92 +1154,33 @@ ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u)
             continue;
         }
 
-        i++;
+        n++;
     }
 
-    if (i == 0) {
+    if (n == 0) {
         u->err = "host not found";
         goto failed;
     }
 
     /* MP: ngx_shared_palloc() */
 
-    u->addrs = ngx_pcalloc(pool, i * sizeof(ngx_addr_t));
-    if (u->addrs == NULL) {
-        goto failed;
-    }
-
-    u->naddrs = i;
-
-    i = 0;
-
-    /* AF_INET addresses first */
-
     for (rp = res; rp != NULL; rp = rp->ai_next) {
 
-        if (rp->ai_family != AF_INET) {
-            continue;
-        }
-
-        sin = ngx_pcalloc(pool, rp->ai_addrlen);
-        if (sin == NULL) {
-            goto failed;
-        }
-
-        ngx_memcpy(sin, rp->ai_addr, rp->ai_addrlen);
-
-        sin->sin_port = port;
-
-        u->addrs[i].sockaddr = (struct sockaddr *) sin;
-        u->addrs[i].socklen = rp->ai_addrlen;
-
-        len = NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1;
-
-        p = ngx_pnalloc(pool, len);
-        if (p == NULL) {
-            goto failed;
-        }
-
-        len = ngx_sock_ntop((struct sockaddr *) sin, rp->ai_addrlen, p, len, 1);
-
-        u->addrs[i].name.len = len;
-        u->addrs[i].name.data = p;
-
-        i++;
-    }
+        switch (rp->ai_family) {
 
-    for (rp = res; rp != NULL; rp = rp->ai_next) {
+        case AF_INET:
+        case AF_INET6:
+            break;
 
-        if (rp->ai_family != AF_INET6) {
+        default:
             continue;
         }
 
-        sin6 = ngx_pcalloc(pool, rp->ai_addrlen);
-        if (sin6 == NULL) {
-            goto failed;
-        }
-
-        ngx_memcpy(sin6, rp->ai_addr, rp->ai_addrlen);
-
-        sin6->sin6_port = port;
-
-        u->addrs[i].sockaddr = (struct sockaddr *) sin6;
-        u->addrs[i].socklen = rp->ai_addrlen;
-
-        len = NGX_INET6_ADDRSTRLEN + sizeof("[]:65535") - 1;
-
-        p = ngx_pnalloc(pool, len);
-        if (p == NULL) {
+        if (ngx_inet_add_addr(pool, u, rp->ai_addr, rp->ai_addrlen, n)
+            != NGX_OK)
+        {
             goto failed;
         }
-
-        len = ngx_sock_ntop((struct sockaddr *) sin6, rp->ai_addrlen, p,
-                            len, 1);
-
-        u->addrs[i].name.len = len;
-        u->addrs[i].name.data = p;
-
-        i++;
     }
 
     freeaddrinfo(res);
@@ -1250,21 +1197,19 @@ failed:
 ngx_int_t
 ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u)
 {
-    u_char              *p, *host;
-    size_t               len;
-    in_port_t            port;
-    in_addr_t            in_addr;
-    ngx_uint_t           i;
+    u_char              *host;
+    ngx_uint_t           i, n;
     struct hostent      *h;
-    struct sockaddr_in  *sin;
+    struct sockaddr_in   sin;
 
     /* AF_INET only */
 
-    port = htons(u->port);
+    ngx_memzero(&sin, sizeof(struct sockaddr_in));
 
-    in_addr = ngx_inet_addr(u->host.data, u->host.len);
+    sin.sin_family = AF_INET;
+    sin.sin_addr.s_addr = ngx_inet_addr(u->host.data, u->host.len);
 
-    if (in_addr == INADDR_NONE) {
+    if (sin.sin_addr.s_addr == INADDR_NONE) {
         host = ngx_alloc(u->host.len + 1, pool->log);
         if (host == NULL) {
             return NGX_ERROR;
@@ -1281,83 +1226,99 @@ ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u)
             return NGX_ERROR;
         }
 
-        for (i = 0; h->h_addr_list[i] != NULL; i++) { /* void */ }
+        for (n = 0; h->h_addr_list[n] != NULL; n++) { /* void */ }
 
         /* MP: ngx_shared_palloc() */
 
-        u->addrs = ngx_pcalloc(pool, i * sizeof(ngx_addr_t));
-        if (u->addrs == NULL) {
-            return NGX_ERROR;
-        }
-
-        u->naddrs = i;
+        for (i = 0; i < n; i++) {
+            sin.sin_addr.s_addr = *(in_addr_t *) (h->h_addr_list[i]);
 
-        for (i = 0; i < u->naddrs; i++) {
-
-            sin = ngx_pcalloc(pool, sizeof(struct sockaddr_in));
-            if (sin == NULL) {
+            if (ngx_inet_add_addr(pool, u, (struct sockaddr *) &sin,
+                                  sizeof(struct sockaddr_in), n)
+                != NGX_OK)
+            {
                 return NGX_ERROR;
             }
+        }
 
-            sin->sin_family = AF_INET;
-            sin->sin_port = port;
-            sin->sin_addr.s_addr = *(in_addr_t *) (h->h_addr_list[i]);
+    } else {
 
-            u->addrs[i].sockaddr = (struct sockaddr *) sin;
-            u->addrs[i].socklen = sizeof(struct sockaddr_in);
+        /* MP: ngx_shared_palloc() */
 
-            len = NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1;
+        if (ngx_inet_add_addr(pool, u, (struct sockaddr *) &sin,
+                              sizeof(struct sockaddr_in), 1)
+            != NGX_OK)
+        {
+            return NGX_ERROR;
+        }
+    }
 
-            p = ngx_pnalloc(pool, len);
-            if (p == NULL) {
-                return NGX_ERROR;
-            }
+    return NGX_OK;
+}
 
-            len = ngx_sock_ntop((struct sockaddr *) sin,
-                                sizeof(struct sockaddr_in), p, len, 1);
+#endif /* NGX_HAVE_GETADDRINFO && NGX_HAVE_INET6 */
 
-            u->addrs[i].name.len = len;
-            u->addrs[i].name.data = p;
-        }
 
-    } else {
+static ngx_int_t
+ngx_inet_add_addr(ngx_pool_t *pool, ngx_url_t *u, struct sockaddr *sockaddr,
+    socklen_t socklen, ngx_uint_t total)
+{
+    u_char           *p;
+    size_t            len;
+    ngx_uint_t        i, nports;
+    ngx_addr_t       *addr;
+    struct sockaddr  *sa;
 
-        /* MP: ngx_shared_palloc() */
+    nports = u->last_port ? u->last_port - u->port + 1 : 1;
 
-        u->addrs = ngx_pcalloc(pool, sizeof(ngx_addr_t));
+    if (u->addrs == NULL) {
+        u->addrs = ngx_palloc(pool, total * nports * sizeof(ngx_addr_t));
         if (u->addrs == NULL) {
             return NGX_ERROR;
         }
+    }
 
-        sin = ngx_pcalloc(pool, sizeof(struct sockaddr_in));
-        if (sin == NULL) {
+    for (i = 0; i < nports; i++) {
+        sa = ngx_pcalloc(pool, socklen);
+        if (sa == NULL) {
             return NGX_ERROR;
         }
 
-        u->naddrs = 1;
+        ngx_memcpy(sa, sockaddr, socklen);
 
-        sin->sin_family = AF_INET;
-        sin->sin_port = port;
-        sin->sin_addr.s_addr = in_addr;
+        ngx_inet_set_port(sa, u->port + i);
 
-        u->addrs[0].sockaddr = (struct sockaddr *) sin;
-        u->addrs[0].socklen = sizeof(struct sockaddr_in);
+        switch (sa->sa_family) {
+
+#if (NGX_HAVE_INET6)
+        case AF_INET6:
+            len = NGX_INET6_ADDRSTRLEN + sizeof("[]:65536") - 1;
+            break;
+#endif
 
-        p = ngx_pnalloc(pool, u->host.len + sizeof(":65535") - 1);
+        default: /* AF_INET */
+            len = NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1;
+        }
+
+        p = ngx_pnalloc(pool, len);
         if (p == NULL) {
             return NGX_ERROR;
         }
 
-        u->addrs[0].name.len = ngx_sprintf(p, "%V:%d",
-                                           &u->host, ntohs(port)) - p;
-        u->addrs[0].name.data = p;
+        len = ngx_sock_ntop(sa, socklen, p, len, 1);
+
+        addr = &u->addrs[u->naddrs++];
+
+        addr->sockaddr = sa;
+        addr->socklen = socklen;
+
+        addr->name.len = len;
+        addr->name.data = p;
     }
 
     return NGX_OK;
 }
 
-#endif /* NGX_HAVE_GETADDRINFO && NGX_HAVE_INET6 */
-
 
 ngx_int_t
 ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1,
@@ -1495,3 +1456,40 @@ ngx_inet_set_port(struct sockaddr *sa, in_port_t port)
         break;
     }
 }
+
+
+ngx_uint_t
+ngx_inet_wildcard(struct sockaddr *sa)
+{
+    struct sockaddr_in   *sin;
+#if (NGX_HAVE_INET6)
+    struct sockaddr_in6  *sin6;
+#endif
+
+    switch (sa->sa_family) {
+
+    case AF_INET:
+        sin = (struct sockaddr_in *) sa;
+
+        if (sin->sin_addr.s_addr == INADDR_ANY) {
+            return 1;
+        }
+
+        break;
+
+#if (NGX_HAVE_INET6)
+
+    case AF_INET6:
+        sin6 = (struct sockaddr_in6 *) sa;
+
+        if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
+            return 1;
+        }
+
+        break;
+
+#endif
+    }
+
+    return 0;
+}

  Renamed: vendor/nginx-1.15.10/src/core/ngx_inet.h (+2 -0) 97%
===================================================================
--- vendor/nginx-1.15.8/src/core/ngx_inet.h    2019-03-25 12:44:08 +0900 (a3b392ee7)
+++ vendor/nginx-1.15.10/src/core/ngx_inet.h    2019-03-27 11:40:45 +0900 (19050fc75)
@@ -86,6 +86,7 @@ typedef struct {
 
     in_port_t                 port;
     in_port_t                 default_port;
+    in_port_t                 last_port;
     int                       family;
 
     unsigned                  listen:1;
@@ -125,6 +126,7 @@ ngx_int_t ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1,
     struct sockaddr *sa2, socklen_t slen2, ngx_uint_t cmp_port);
 in_port_t ngx_inet_get_port(struct sockaddr *sa);
 void ngx_inet_set_port(struct sockaddr *sa, in_port_t port);
+ngx_uint_t ngx_inet_wildcard(struct sockaddr *sa);
 
 
 #endif /* _NGX_INET_H_INCLUDED_ */

  Renamed: vendor/nginx-1.15.10/src/core/ngx_list.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_list.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_log.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_log.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_md5.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_md5.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_module.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_murmurhash.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_murmurhash.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_open_file_cache.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_open_file_cache.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_output_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_palloc.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_palloc.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_parse.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_parse.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_parse_time.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_parse_time.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_proxy_protocol.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_proxy_protocol.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_queue.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_queue.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_radix_tree.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_radix_tree.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_rbtree.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_rbtree.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_regex.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_regex.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_resolver.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_resolver.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_rwlock.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_rwlock.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_sha1.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_sha1.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_shmtx.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_shmtx.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_slab.c (+1 -2) 99%
===================================================================
--- vendor/nginx-1.15.8/src/core/ngx_slab.c    2019-03-25 12:44:08 +0900 (402387053)
+++ vendor/nginx-1.15.10/src/core/ngx_slab.c    2019-03-27 11:40:45 +0900 (b8577ce75)
@@ -635,10 +635,9 @@ ngx_slab_free_locked(ngx_slab_pool_t *pool, void *p)
             goto fail;
         }
 
-        n = ((u_char *) p - pool->start) >> ngx_pagesize_shift;
         size = slab & ~NGX_SLAB_PAGE_START;
 
-        ngx_slab_free_pages(pool, &pool->pages[n], size);
+        ngx_slab_free_pages(pool, page, size);
 
         ngx_slab_junk(p, size << ngx_pagesize_shift);
 

  Renamed: vendor/nginx-1.15.10/src/core/ngx_slab.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_spinlock.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_string.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_string.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_syslog.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_syslog.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_thread_pool.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_thread_pool.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_times.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/core/ngx_times.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/modules/ngx_devpoll_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/modules/ngx_epoll_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/modules/ngx_eventport_module.c (+0 -2) 99%
===================================================================
--- vendor/nginx-1.15.8/src/event/modules/ngx_eventport_module.c    2019-03-25 12:44:08 +0900 (01cfc97ea)
+++ vendor/nginx-1.15.10/src/event/modules/ngx_eventport_module.c    2019-03-27 11:40:45 +0900 (11ad0934e)
@@ -250,9 +250,7 @@ ngx_eventport_init(ngx_cycle_t *cycle, ngx_msec_t timer)
 
         ngx_memzero(&sev, sizeof(struct sigevent));
         sev.sigev_notify = SIGEV_PORT;
-#if !(NGX_TEST_BUILD_EVENTPORT)
         sev.sigev_value.sival_ptr = &pn;
-#endif
 
         if (timer_create(CLOCK_REALTIME, &sev, &event_timer) == -1) {
             ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,

  Renamed: vendor/nginx-1.15.10/src/event/modules/ngx_iocp_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/modules/ngx_iocp_module.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/modules/ngx_kqueue_module.c (+0 -0) 100%
===================================================================

  Copied: vendor/nginx-1.15.10/src/event/modules/ngx_poll_module.c (+1 -1) 99%
===================================================================
--- vendor/nginx-1.15.8/src/event/modules/ngx_poll_module.c    2019-03-25 12:44:08 +0900 (4e03dabf2)
+++ vendor/nginx-1.15.10/src/event/modules/ngx_poll_module.c    2019-03-27 11:40:45 +0900 (b46ab538a)
@@ -84,7 +84,7 @@ ngx_poll_init(ngx_cycle_t *cycle, ngx_msec_t timer)
         }
 
         if (event_list) {
-            ngx_memcpy(list, event_list, sizeof(ngx_event_t *) * nevents);
+            ngx_memcpy(list, event_list, sizeof(struct pollfd) * nevents);
             ngx_free(event_list);
         }
 

  Renamed: vendor/nginx-1.15.10/src/event/modules/ngx_select_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/modules/ngx_win32_poll_module.c (+48 -28) 86%
===================================================================
--- vendor/nginx-1.15.8/src/event/modules/ngx_poll_module.c    2019-03-25 12:44:08 +0900 (4e03dabf2)
+++ vendor/nginx-1.15.10/src/event/modules/ngx_win32_poll_module.c    2019-03-27 11:40:45 +0900 (9fe867f79)
@@ -1,6 +1,7 @@
 
 /*
  * Copyright (C) Igor Sysoev
+ * Copyright (C) Maxim Dounin
  * Copyright (C) Nginx, Inc.
  */
 
@@ -21,8 +22,9 @@ static ngx_int_t ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
 static char *ngx_poll_init_conf(ngx_cycle_t *cycle, void *conf);
 
 
-static struct pollfd  *event_list;
-static ngx_uint_t      nevents;
+static struct pollfd      *event_list;
+static ngx_connection_t  **event_index;
+static ngx_uint_t          nevents;
 
 
 static ngx_str_t           poll_name = ngx_string("poll");
@@ -67,7 +69,8 @@ ngx_module_t  ngx_poll_module = {
 static ngx_int_t
 ngx_poll_init(ngx_cycle_t *cycle, ngx_msec_t timer)
 {
-    struct pollfd   *list;
+    struct pollfd      *list;
+    ngx_connection_t  **index;
 
     if (event_list == NULL) {
         nevents = 0;
@@ -84,18 +87,32 @@ ngx_poll_init(ngx_cycle_t *cycle, ngx_msec_t timer)
         }
 
         if (event_list) {
-            ngx_memcpy(list, event_list, sizeof(ngx_event_t *) * nevents);
+            ngx_memcpy(list, event_list, sizeof(struct pollfd) * nevents);
             ngx_free(event_list);
         }
 
         event_list = list;
+
+        index = ngx_alloc(sizeof(ngx_connection_t *) * cycle->connection_n,
+                          cycle->log);
+        if (index == NULL) {
+            return NGX_ERROR;
+        }
+
+        if (event_index) {
+            ngx_memcpy(index, event_index,
+                       sizeof(ngx_connection_t *) * nevents);
+            ngx_free(event_index);
+        }
+
+        event_index = index;
     }
 
     ngx_io = ngx_os_io;
 
     ngx_event_actions = ngx_poll_module_ctx.actions;
 
-    ngx_event_flags = NGX_USE_LEVEL_EVENT|NGX_USE_FD_EVENT;
+    ngx_event_flags = NGX_USE_LEVEL_EVENT;
 
     return NGX_OK;
 }
@@ -105,8 +122,10 @@ static void
 ngx_poll_done(ngx_cycle_t *cycle)
 {
     ngx_free(event_list);
+    ngx_free(event_index);
 
     event_list = NULL;
+    event_index = NULL;
 }
 
 
@@ -143,10 +162,13 @@ ngx_poll_add_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
                    "poll add event: fd:%d ev:%i", c->fd, event);
 
     if (e == NULL || e->index == NGX_INVALID_INDEX) {
+
         event_list[nevents].fd = c->fd;
         event_list[nevents].events = (short) event;
         event_list[nevents].revents = 0;
 
+        event_index[nevents] = c;
+
         ev->index = nevents;
         nevents++;
 
@@ -204,10 +226,11 @@ ngx_poll_del_event(ngx_event_t *ev, ngx_int_t event, ngx_uint_t flags)
                            "index: copy event %ui to %i", nevents, ev->index);
 
             event_list[ev->index] = event_list[nevents];
+            event_index[ev->index] = event_index[nevents];
 
-            c = ngx_cycle->files[event_list[nevents].fd];
+            c = event_index[ev->index];
 
-            if (c->fd == -1) {
+            if (c->fd == (ngx_socket_t) -1) {
                 ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
                               "unexpected last event");
 
@@ -240,7 +263,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
 {
     int                 ready, revents;
     ngx_err_t           err;
-    ngx_uint_t          i, found, level;
+    ngx_uint_t          i, found;
     ngx_event_t        *ev;
     ngx_queue_t        *queue;
     ngx_connection_t   *c;
@@ -259,7 +282,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
 
     ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0, "poll timer: %M", timer);
 
-    ready = poll(event_list, (u_int) nevents, (int) timer);
+    ready = WSAPoll(event_list, (u_int) nevents, (int) timer);
 
     err = (ready == -1) ? ngx_errno : 0;
 
@@ -271,20 +294,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
                    "poll ready %d of %ui", ready, nevents);
 
     if (err) {
-        if (err == NGX_EINTR) {
-
-            if (ngx_event_timer_alarm) {
-                ngx_event_timer_alarm = 0;
-                return NGX_OK;
-            }
-
-            level = NGX_LOG_INFO;
-
-        } else {
-            level = NGX_LOG_ALERT;
-        }
-
-        ngx_log_error(level, cycle->log, err, "poll() failed");
+        ngx_log_error(NGX_LOG_ALERT, cycle->log, err, "WSAPoll() failed");
         return NGX_ERROR;
     }
 
@@ -294,7 +304,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
         }
 
         ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
-                      "poll() returned no events without timeout");
+                      "WSAPoll() returned no events without timeout");
         return NGX_ERROR;
     }
 
@@ -326,7 +336,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
                           event_list[i].fd, event_list[i].events, revents);
         }
 
-        if (event_list[i].fd == -1) {
+        if (event_list[i].fd == (ngx_socket_t) -1) {
             /*
              * the disabled event, a workaround for our possible bug,
              * see the comment below
@@ -334,9 +344,9 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
             continue;
         }
 
-        c = ngx_cycle->files[event_list[i].fd];
+        c = event_index[i];
 
-        if (c->fd == -1) {
+        if (c->fd == (ngx_socket_t) -1) {
             ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, "unexpected event");
 
             /*
@@ -347,7 +357,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
             if (i == nevents - 1) {
                 nevents--;
             } else {
-                event_list[i].fd = -1;
+                event_list[i].fd = (ngx_socket_t) -1;
             }
 
             continue;
@@ -411,5 +421,15 @@ ngx_poll_init_conf(ngx_cycle_t *cycle, void *conf)
         return NGX_CONF_OK;
     }
 
+#if (NGX_LOAD_WSAPOLL)
+
+    if (!ngx_have_wsapoll) {
+        ngx_log_error(NGX_LOG_EMERG, cycle->log, 0,
+                      "poll is not available on this platform");
+        return NGX_CONF_ERROR;
+    }
+
+#endif
+
     return NGX_CONF_OK;
 }

  Renamed: vendor/nginx-1.15.10/src/event/modules/ngx_win32_select_module.c (+13 -4) 95%
===================================================================
--- vendor/nginx-1.15.8/src/event/modules/ngx_win32_select_module.c    2019-03-25 12:44:08 +0900 (a98a83f28)
+++ vendor/nginx-1.15.10/src/event/modules/ngx_win32_select_module.c    2019-03-27 11:40:45 +0900 (8093a600b)
@@ -26,6 +26,7 @@ static fd_set         master_read_fd_set;
 static fd_set         master_write_fd_set;
 static fd_set         work_read_fd_set;
 static fd_set         work_write_fd_set;
+static fd_set         work_except_fd_set;
 
 static ngx_uint_t     max_read;
 static ngx_uint_t     max_write;
@@ -251,9 +252,11 @@ ngx_select_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
 
     work_read_fd_set = master_read_fd_set;
     work_write_fd_set = master_write_fd_set;
+    work_except_fd_set = master_write_fd_set;
 
     if (max_read || max_write) {
-        ready = select(0, &work_read_fd_set, &work_write_fd_set, NULL, tp);
+        ready = select(0, &work_read_fd_set, &work_write_fd_set,
+                       &work_except_fd_set, tp);
 
     } else {
 
@@ -306,14 +309,20 @@ ngx_select_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
 
         if (ev->write) {
             if (FD_ISSET(c->fd, &work_write_fd_set)) {
-                found = 1;
+                found++;
                 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                                "select write %d", c->fd);
             }
 
+            if (FD_ISSET(c->fd, &work_except_fd_set)) {
+                found++;
+                ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                               "select except %d", c->fd);
+            }
+
         } else {
             if (FD_ISSET(c->fd, &work_read_fd_set)) {
-                found = 1;
+                found++;
                 ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                                "select read %d", c->fd);
             }
@@ -327,7 +336,7 @@ ngx_select_process_events(ngx_cycle_t *cycle, ngx_msec_t timer,
 
             ngx_post_event(ev, queue);
 
-            nready++;
+            nready += found;
         }
     }
 

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_accept.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_acceptex.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_connect.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_connect.h (+1 -0) 97%
===================================================================
--- vendor/nginx-1.15.8/src/event/ngx_event_connect.h    2019-03-25 12:44:08 +0900 (7253ebb04)
+++ vendor/nginx-1.15.10/src/event/ngx_event_connect.h    2019-03-27 11:40:45 +0900 (d3b23782e)
@@ -63,6 +63,7 @@ struct ngx_peer_connection_s {
     unsigned                         cached:1;
     unsigned                         transparent:1;
     unsigned                         so_keepalive:1;
+    unsigned                         down:1;
 
                                      /* ngx_connection_log_error_e */
     unsigned                         log_error:2;

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_connectex.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_openssl.c (+442 -136) 90%
===================================================================
--- vendor/nginx-1.15.8/src/event/ngx_event_openssl.c    2019-03-25 12:44:08 +0900 (37a4b72b6)
+++ vendor/nginx-1.15.10/src/event/ngx_event_openssl.c    2019-03-27 11:40:45 +0900 (bee264c9f)
@@ -18,6 +18,10 @@ typedef struct {
 } ngx_openssl_conf_t;
 
 
+static X509 *ngx_ssl_load_certificate(ngx_pool_t *pool, char **err,
+    ngx_str_t *cert, STACK_OF(X509) **chain);
+static EVP_PKEY *ngx_ssl_load_certificate_key(ngx_pool_t *pool, char **err,
+    ngx_str_t *key, ngx_array_t *passwords);
 static int ngx_ssl_password_callback(char *buf, int size, int rwflag,
     void *userdata);
 static int ngx_ssl_verify_callback(int ok, X509_STORE_CTX *x509_store);
@@ -50,7 +54,7 @@ static void ngx_ssl_connection_error(ngx_connection_t *c, int sslerr,
 static void ngx_ssl_clear_error(ngx_log_t *log);
 
 static ngx_int_t ngx_ssl_session_id_context(ngx_ssl_t *ssl,
-    ngx_str_t *sess_ctx);
+    ngx_str_t *sess_ctx, ngx_array_t *certificates);
 static int ngx_ssl_new_session(ngx_ssl_conn_t *ssl_conn,
     ngx_ssl_session_t *sess);
 static ngx_ssl_session_t *ngx_ssl_get_cached_session(ngx_ssl_conn_t *ssl_conn,
@@ -68,6 +72,7 @@ static void ngx_ssl_session_rbtree_insert_value(ngx_rbtree_node_t *temp,
 static int ngx_ssl_session_ticket_key_callback(ngx_ssl_conn_t *ssl_conn,
     unsigned char *name, unsigned char *iv, EVP_CIPHER_CTX *ectx,
     HMAC_CTX *hctx, int enc);
+static void ngx_ssl_session_ticket_keys_cleanup(void *data);
 #endif
 
 #ifndef X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
@@ -363,6 +368,10 @@ ngx_ssl_create(ngx_ssl_t *ssl, ngx_uint_t protocols, void *data)
     SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_ANTI_REPLAY);
 #endif
 
+#ifdef SSL_OP_NO_CLIENT_RENEGOTIATION
+    SSL_CTX_set_options(ssl->ctx, SSL_OP_NO_CLIENT_RENEGOTIATION);
+#endif
+
 #ifdef SSL_MODE_RELEASE_BUFFERS
     SSL_CTX_set_mode(ssl->ctx, SSL_MODE_RELEASE_BUFFERS);
 #endif
@@ -406,34 +415,19 @@ ngx_int_t
 ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
     ngx_str_t *key, ngx_array_t *passwords)
 {
-    BIO         *bio;
-    X509        *x509;
-    u_long       n;
-    ngx_str_t   *pwd;
-    ngx_uint_t   tries;
-
-    if (ngx_conf_full_name(cf->cycle, cert, 1) != NGX_OK) {
-        return NGX_ERROR;
-    }
-
-    /*
-     * we can't use SSL_CTX_use_certificate_chain_file() as it doesn't
-     * allow to access certificate later from SSL_CTX, so we reimplement
-     * it here
-     */
+    char            *err;
+    X509            *x509;
+    EVP_PKEY        *pkey;
+    STACK_OF(X509)  *chain;
 
-    bio = BIO_new_file((char *) cert->data, "r");
-    if (bio == NULL) {
-        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                      "BIO_new_file(\"%s\") failed", cert->data);
-        return NGX_ERROR;
-    }
-
-    x509 = PEM_read_bio_X509_AUX(bio, NULL, NULL, NULL);
+    x509 = ngx_ssl_load_certificate(cf->pool, &err, cert, &chain);
     if (x509 == NULL) {
-        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                      "PEM_read_bio_X509_AUX(\"%s\") failed", cert->data);
-        BIO_free(bio);
+        if (err != NULL) {
+            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
+                          "cannot load certificate \"%s\": %s",
+                          cert->data, err);
+        }
+
         return NGX_ERROR;
     }
 
@@ -441,7 +435,7 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
         ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
                       "SSL_CTX_use_certificate(\"%s\") failed", cert->data);
         X509_free(x509);
-        BIO_free(bio);
+        sk_X509_pop_free(chain, X509_free);
         return NGX_ERROR;
     }
 
@@ -450,7 +444,7 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
     {
         ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, "X509_set_ex_data() failed");
         X509_free(x509);
-        BIO_free(bio);
+        sk_X509_pop_free(chain, X509_free);
         return NGX_ERROR;
     }
 
@@ -460,26 +454,211 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
     {
         ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0, "X509_set_ex_data() failed");
         X509_free(x509);
-        BIO_free(bio);
+        sk_X509_pop_free(chain, X509_free);
         return NGX_ERROR;
     }
 
-    if (SSL_CTX_set_ex_data(ssl->ctx, ngx_ssl_certificate_index, x509)
-        == 0)
-    {
+    if (SSL_CTX_set_ex_data(ssl->ctx, ngx_ssl_certificate_index, x509) == 0) {
         ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
                       "SSL_CTX_set_ex_data() failed");
         X509_free(x509);
-        BIO_free(bio);
+        sk_X509_pop_free(chain, X509_free);
         return NGX_ERROR;
     }
 
-    /* read rest of the chain */
+    /*
+     * Note that x509 is not freed here, but will be instead freed in
+     * ngx_ssl_cleanup_ctx().  This is because we need to preserve all
+     * certificates to be able to iterate all of them through exdata
+     * (ngx_ssl_certificate_index, ngx_ssl_next_certificate_index),
+     * while OpenSSL can free a certificate if it is replaced with another
+     * certificate of the same type.
+     */
+
+#ifdef SSL_CTX_set0_chain
+
+    if (SSL_CTX_set0_chain(ssl->ctx, chain) == 0) {
+        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
+                      "SSL_CTX_set0_chain(\"%s\") failed", cert->data);
+        sk_X509_pop_free(chain, X509_free);
+        return NGX_ERROR;
+    }
+
+#else
+    {
+    int  n;
+
+    /* SSL_CTX_set0_chain() is only available in OpenSSL 1.0.2+ */
+
+    n = sk_X509_num(chain);
+
+    while (n--) {
+        x509 = sk_X509_shift(chain);
+
+        if (SSL_CTX_add_extra_chain_cert(ssl->ctx, x509) == 0) {
+            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
+                          "SSL_CTX_add_extra_chain_cert(\"%s\") failed",
+                          cert->data);
+            sk_X509_pop_free(chain, X509_free);
+            return NGX_ERROR;
+        }
+    }
+
+    sk_X509_free(chain);
+    }
+#endif
+
+    pkey = ngx_ssl_load_certificate_key(cf->pool, &err, key, passwords);
+    if (pkey == NULL) {
+        if (err != NULL) {
+            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
+                          "cannot load certificate key \"%s\": %s",
+                          key->data, err);
+        }
+
+        return NGX_ERROR;
+    }
+
+    if (SSL_CTX_use_PrivateKey(ssl->ctx, pkey) == 0) {
+        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
+                      "SSL_CTX_use_PrivateKey(\"%s\") failed", key->data);
+        EVP_PKEY_free(pkey);
+        return NGX_ERROR;
+    }
+
+    EVP_PKEY_free(pkey);
+
+    return NGX_OK;
+}
+
+
+ngx_int_t
+ngx_ssl_connection_certificate(ngx_connection_t *c, ngx_pool_t *pool,
+    ngx_str_t *cert, ngx_str_t *key, ngx_array_t *passwords)
+{
+    char            *err;
+    X509            *x509;
+    EVP_PKEY        *pkey;
+    STACK_OF(X509)  *chain;
+
+    x509 = ngx_ssl_load_certificate(pool, &err, cert, &chain);
+    if (x509 == NULL) {
+        if (err != NULL) {
+            ngx_ssl_error(NGX_LOG_ERR, c->log, 0,
+                          "cannot load certificate \"%s\": %s",
+                          cert->data, err);
+        }
+
+        return NGX_ERROR;
+    }
+
+    if (SSL_use_certificate(c->ssl->connection, x509) == 0) {
+        ngx_ssl_error(NGX_LOG_ERR, c->log, 0,
+                      "SSL_use_certificate(\"%s\") failed", cert->data);
+        X509_free(x509);
+        sk_X509_pop_free(chain, X509_free);
+        return NGX_ERROR;
+    }
+
+    X509_free(x509);
+
+#ifdef SSL_set0_chain
+
+    /*
+     * SSL_set0_chain() is only available in OpenSSL 1.0.2+,
+     * but this function is only called via certificate callback,
+     * which is only available in OpenSSL 1.0.2+ as well
+     */
+
+    if (SSL_set0_chain(c->ssl->connection, chain) == 0) {
+        ngx_ssl_error(NGX_LOG_ERR, c->log, 0,
+                      "SSL_set0_chain(\"%s\") failed", cert->data);
+        sk_X509_pop_free(chain, X509_free);
+        return NGX_ERROR;
+    }
+
+#endif
+
+    pkey = ngx_ssl_load_certificate_key(pool, &err, key, passwords);
+    if (pkey == NULL) {
+        if (err != NULL) {
+            ngx_ssl_error(NGX_LOG_ERR, c->log, 0,
+                          "cannot load certificate key \"%s\": %s",
+                          key->data, err);
+        }
+
+        return NGX_ERROR;
+    }
+
+    if (SSL_use_PrivateKey(c->ssl->connection, pkey) == 0) {
+        ngx_ssl_error(NGX_LOG_ERR, c->log, 0,
+                      "SSL_use_PrivateKey(\"%s\") failed", key->data);
+        EVP_PKEY_free(pkey);
+        return NGX_ERROR;
+    }
+
+    EVP_PKEY_free(pkey);
+
+    return NGX_OK;
+}
+
+
+static X509 *
+ngx_ssl_load_certificate(ngx_pool_t *pool, char **err, ngx_str_t *cert,
+    STACK_OF(X509) **chain)
+{
+    BIO     *bio;
+    X509    *x509, *temp;
+    u_long   n;
+
+    if (ngx_strncmp(cert->data, "data:", sizeof("data:") - 1) == 0) {
+
+        bio = BIO_new_mem_buf(cert->data + sizeof("data:") - 1,
+                              cert->len - (sizeof("data:") - 1));
+        if (bio == NULL) {
+            *err = "BIO_new_mem_buf() failed";
+            return NULL;
+        }
+
+    } else {
+
+        if (ngx_get_full_name(pool, (ngx_str_t *) &ngx_cycle->conf_prefix, cert)
+            != NGX_OK)
+        {
+            *err = NULL;
+            return NULL;
+        }
+
+        bio = BIO_new_file((char *) cert->data, "r");
+        if (bio == NULL) {
+            *err = "BIO_new_file() failed";
+            return NULL;
+        }
+    }
+
+    /* certificate itself */
+
+    x509 = PEM_read_bio_X509_AUX(bio, NULL, NULL, NULL);
+    if (x509 == NULL) {
+        *err = "PEM_read_bio_X509_AUX() failed";
+        BIO_free(bio);
+        return NULL;
+    }
+
+    /* rest of the chain */
+
+    *chain = sk_X509_new_null();
+    if (*chain == NULL) {
+        *err = "sk_X509_new_null() failed";
+        BIO_free(bio);
+        X509_free(x509);
+        return NULL;
+    }
 
     for ( ;; ) {
 
-        x509 = PEM_read_bio_X509(bio, NULL, NULL, NULL);
-        if (x509 == NULL) {
+        temp = PEM_read_bio_X509(bio, NULL, NULL, NULL);
+        if (temp == NULL) {
             n = ERR_peek_last_error();
 
             if (ERR_GET_LIB(n) == ERR_LIB_PEM
@@ -492,58 +671,51 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
 
             /* some real error */
 
-            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                          "PEM_read_bio_X509(\"%s\") failed", cert->data);
+            *err = "PEM_read_bio_X509() failed";
             BIO_free(bio);
-            return NGX_ERROR;
-        }
-
-#ifdef SSL_CTRL_CHAIN_CERT
-
-        /*
-         * SSL_CTX_add0_chain_cert() is needed to add chain to
-         * a particular certificate when multiple certificates are used;
-         * only available in OpenSSL 1.0.2+
-         */
-
-        if (SSL_CTX_add0_chain_cert(ssl->ctx, x509) == 0) {
-            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                          "SSL_CTX_add0_chain_cert(\"%s\") failed",
-                          cert->data);
             X509_free(x509);
-            BIO_free(bio);
-            return NGX_ERROR;
+            sk_X509_pop_free(*chain, X509_free);
+            return NULL;
         }
 
-#else
-        if (SSL_CTX_add_extra_chain_cert(ssl->ctx, x509) == 0) {
-            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                          "SSL_CTX_add_extra_chain_cert(\"%s\") failed",
-                          cert->data);
-            X509_free(x509);
+        if (sk_X509_push(*chain, temp) == 0) {
+            *err = "sk_X509_push() failed";
             BIO_free(bio);
-            return NGX_ERROR;
+            X509_free(x509);
+            sk_X509_pop_free(*chain, X509_free);
+            return NULL;
         }
-#endif
     }
 
     BIO_free(bio);
 
+    return x509;
+}
+
+
+static EVP_PKEY *
+ngx_ssl_load_certificate_key(ngx_pool_t *pool, char **err,
+    ngx_str_t *key, ngx_array_t *passwords)
+{
+    BIO              *bio;
+    EVP_PKEY         *pkey;
+    ngx_str_t        *pwd;
+    ngx_uint_t        tries;
+    pem_password_cb  *cb;
+
     if (ngx_strncmp(key->data, "engine:", sizeof("engine:") - 1) == 0) {
 
 #ifndef OPENSSL_NO_ENGINE
 
-        u_char      *p, *last;
-        ENGINE      *engine;
-        EVP_PKEY    *pkey;
+        u_char  *p, *last;
+        ENGINE  *engine;
 
         p = key->data + sizeof("engine:") - 1;
         last = (u_char *) ngx_strchr(p, ':');
 
         if (last == NULL) {
-            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                               "invalid syntax in \"%V\"", key);
-            return NGX_ERROR;
+            *err = "invalid syntax";
+            return NULL;
         }
 
         *last = '\0';
@@ -551,9 +723,8 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
         engine = ENGINE_by_id((char *) p);
 
         if (engine == NULL) {
-            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                          "ENGINE_by_id(\"%s\") failed", p);
-            return NGX_ERROR;
+            *err = "ENGINE_by_id() failed";
+            return NULL;
         }
 
         *last++ = ':';
@@ -561,76 +732,81 @@ ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *cert,
         pkey = ENGINE_load_private_key(engine, (char *) last, 0, 0);
 
         if (pkey == NULL) {
-            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                          "ENGINE_load_private_key(\"%s\") failed", last);
+            *err = "ENGINE_load_private_key() failed";
             ENGINE_free(engine);
-            return NGX_ERROR;
+            return NULL;
         }
 
         ENGINE_free(engine);
 
-        if (SSL_CTX_use_PrivateKey(ssl->ctx, pkey) == 0) {
-            ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                          "SSL_CTX_use_PrivateKey(\"%s\") failed", last);
-            EVP_PKEY_free(pkey);
-            return NGX_ERROR;
-        }
-
-        EVP_PKEY_free(pkey);
-
-        return NGX_OK;
+        return pkey;
 
 #else
 
-        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                           "loading \"engine:...\" certificate keys "
-                           "is not supported");
-        return NGX_ERROR;
+        *err = "loading \"engine:...\" certificate keys is not supported";
+        return NULL;
 
 #endif
     }
 
-    if (ngx_conf_full_name(cf->cycle, key, 1) != NGX_OK) {
-        return NGX_ERROR;
+    if (ngx_strncmp(key->data, "data:", sizeof("data:") - 1) == 0) {
+
+        bio = BIO_new_mem_buf(key->data + sizeof("data:") - 1,
+                              key->len - (sizeof("data:") - 1));
+        if (bio == NULL) {
+            *err = "BIO_new_mem_buf() failed";
+            return NULL;
+        }
+
+    } else {
+
+        if (ngx_get_full_name(pool, (ngx_str_t *) &ngx_cycle->conf_prefix, key)
+            != NGX_OK)
+        {
+            *err = NULL;
+            return NULL;
+        }
+
+        bio = BIO_new_file((char *) key->data, "r");
+        if (bio == NULL) {
+            *err = "BIO_new_file() failed";
+            return NULL;
+        }
     }
 
     if (passwords) {
         tries = passwords->nelts;
         pwd = passwords->elts;
-
-        SSL_CTX_set_default_passwd_cb(ssl->ctx, ngx_ssl_password_callback);
-        SSL_CTX_set_default_passwd_cb_userdata(ssl->ctx, pwd);
+        cb = ngx_ssl_password_callback;
 
     } else {
         tries = 1;
-#if (NGX_SUPPRESS_WARN)
         pwd = NULL;
-#endif
+        cb = NULL;
     }
 
     for ( ;; ) {
 
-        if (SSL_CTX_use_PrivateKey_file(ssl->ctx, (char *) key->data,
-                                        SSL_FILETYPE_PEM)
-            != 0)
-        {
+        pkey = PEM_read_bio_PrivateKey(bio, NULL, cb, pwd);
+        if (pkey != NULL) {
             break;
         }
 
-        if (--tries) {
+        if (tries-- > 1) {
             ERR_clear_error();
-            SSL_CTX_set_default_passwd_cb_userdata(ssl->ctx, ++pwd);
+            (void) BIO_reset(bio);
+            pwd++;
             continue;
         }
 
-        ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                      "SSL_CTX_use_PrivateKey_file(\"%s\") failed", key->data);
-        return NGX_ERROR;
+        *err = "PEM_read_bio_PrivateKey() failed";
+        BIO_free(bio);
+        return NULL;
     }
 
-    SSL_CTX_set_default_passwd_cb(ssl->ctx, NULL);
+    BIO_free(bio);
 
-    return NGX_OK;
+    return pkey;
 }
 
 
@@ -645,6 +821,10 @@ ngx_ssl_password_callback(char *buf, int size, int rwflag, void *userdata)
         return 0;
     }
 
+    if (pwd == NULL) {
+        return 0;
+    }
+
     if (pwd->len > (size_t) size) {
         ngx_log_error(NGX_LOG_ERR, ngx_cycle->log, 0,
                       "password is truncated to %d bytes", size);
@@ -946,10 +1126,13 @@ ngx_ssl_read_password_file(ngx_conf_t *cf, ngx_str_t *file)
         return NULL;
     }
 
-    cln = ngx_pool_cleanup_add(cf->temp_pool, 0);
     passwords = ngx_array_create(cf->temp_pool, 4, sizeof(ngx_str_t));
+    if (passwords == NULL) {
+        return NULL;
+    }
 
-    if (cln == NULL || passwords == NULL) {
+    cln = ngx_pool_cleanup_add(cf->temp_pool, 0);
+    if (cln == NULL) {
         return NULL;
     }
 
@@ -1057,6 +1240,69 @@ cleanup:
 }
 
 
+ngx_array_t *
+ngx_ssl_preserve_passwords(ngx_conf_t *cf, ngx_array_t *passwords)
+{
+    ngx_str_t           *opwd, *pwd;
+    ngx_uint_t           i;
+    ngx_array_t         *pwds;
+    ngx_pool_cleanup_t  *cln;
+    static ngx_array_t   empty_passwords;
+
+    if (passwords == NULL) {
+
+        /*
+         * If there are no passwords, an empty array is used
+         * to make sure OpenSSL's default password callback
+         * won't block on reading from stdin.
+         */
+
+        return &empty_passwords;
+    }
+
+    /*
+     * Passwords are normally allocated from the temporary pool
+     * and cleared after parsing configuration.  To be used at
+     * runtime they have to be copied to the configuration pool.
+     */
+
+    pwds = ngx_array_create(cf->pool, passwords->nelts, sizeof(ngx_str_t));
+    if (pwds == NULL) {
+        return NULL;
+    }
+
+    cln = ngx_pool_cleanup_add(cf->pool, 0);
+    if (cln == NULL) {
+        return NULL;
+    }
+
+    cln->handler = ngx_ssl_passwords_cleanup;
+    cln->data = pwds;
+
+    opwd = passwords->elts;
+
+    for (i = 0; i < passwords->nelts; i++) {
+
+        pwd = ngx_array_push(pwds);
+        if (pwd == NULL) {
+            return NULL;
+        }
+
+        pwd->len = opwd[i].len;
+        pwd->data = ngx_pnalloc(cf->pool, pwd->len);
+
+        if (pwd->data == NULL) {
+            pwds->nelts--;
+            return NULL;
+        }
+
+        ngx_memcpy(pwd->data, opwd[i].data, opwd[i].len);
+    }
+
+    return pwds;
+}
+
+
 static void
 ngx_ssl_passwords_cleanup(void *data)
 {
@@ -2630,9 +2876,15 @@ ngx_ssl_connection_error(ngx_connection_t *c, int sslerr, ngx_err_t err,
             || n == SSL_R_NO_COMPRESSION_SPECIFIED                   /*  187 */
             || n == SSL_R_NO_SHARED_CIPHER                           /*  193 */
             || n == SSL_R_RECORD_LENGTH_MISMATCH                     /*  213 */
+#ifdef SSL_R_CLIENTHELLO_TLSEXT
+            || n == SSL_R_CLIENTHELLO_TLSEXT                         /*  226 */
+#endif
 #ifdef SSL_R_PARSE_TLSEXT
             || n == SSL_R_PARSE_TLSEXT                               /*  227 */
 #endif
+#ifdef SSL_R_CALLBACK_FAILED
+            || n == SSL_R_CALLBACK_FAILED                            /*  234 */
+#endif
             || n == SSL_R_UNEXPECTED_MESSAGE                         /*  244 */
             || n == SSL_R_UNEXPECTED_RECORD                          /*  245 */
             || n == SSL_R_UNKNOWN_ALERT_TYPE                         /*  246 */
@@ -2660,6 +2912,9 @@ ngx_ssl_connection_error(ngx_connection_t *c, int sslerr, ngx_err_t err,
 #ifdef SSL_R_INAPPROPRIATE_FALLBACK
             || n == SSL_R_INAPPROPRIATE_FALLBACK                     /*  373 */
 #endif
+#ifdef SSL_R_CERT_CB_ERROR
+            || n == SSL_R_CERT_CB_ERROR                              /*  377 */
+#endif
 #ifdef SSL_R_VERSION_TOO_LOW
             || n == SSL_R_VERSION_TOO_LOW                            /*  396 */
 #endif
@@ -2739,53 +2994,60 @@ ngx_ssl_error(ngx_uint_t level, ngx_log_t *log, ngx_err_t err, char *fmt, ...)
     p = ngx_vslprintf(errstr, last - 1, fmt, args);
     va_end(args);
 
-    p = ngx_cpystrn(p, (u_char *) " (SSL:", last - p);
+    if (ERR_peek_error()) {
+        p = ngx_cpystrn(p, (u_char *) " (SSL:", last - p);
 
-    for ( ;; ) {
+        for ( ;; ) {
 
-        n = ERR_peek_error_line_data(NULL, NULL, &data, &flags);
+            n = ERR_peek_error_line_data(NULL, NULL, &data, &flags);
 
-        if (n == 0) {
-            break;
-        }
+            if (n == 0) {
+                break;
+            }
 
-        /* ERR_error_string_n() requires at least one byte */
+            /* ERR_error_string_n() requires at least one byte */
 
-        if (p >= last - 1) {
-            goto next;
-        }
+            if (p >= last - 1) {
+                goto next;
+            }
 
-        *p++ = ' ';
+            *p++ = ' ';
 
-        ERR_error_string_n(n, (char *) p, last - p);
+            ERR_error_string_n(n, (char *) p, last - p);
 
-        while (p < last && *p) {
-            p++;
-        }
+            while (p < last && *p) {
+                p++;
+            }
 
-        if (p < last && *data && (flags & ERR_TXT_STRING)) {
-            *p++ = ':';
-            p = ngx_cpystrn(p, (u_char *) data, last - p);
-        }
+            if (p < last && *data && (flags & ERR_TXT_STRING)) {
+                *p++ = ':';
+                p = ngx_cpystrn(p, (u_char *) data, last - p);
+            }
 
-    next:
+        next:
+
+            (void) ERR_get_error();
+        }
 
-        (void) ERR_get_error();
+        if (p < last) {
+            *p++ = ')';
+        }
     }
 
-    ngx_log_error(level, log, err, "%*s)", p - errstr, errstr);
+    ngx_log_error(level, log, err, "%*s", p - errstr, errstr);
 }
 
 
 ngx_int_t
 ngx_ssl_session_cache(ngx_ssl_t *ssl, ngx_str_t *sess_ctx,
-    ssize_t builtin_session_cache, ngx_shm_zone_t *shm_zone, time_t timeout)
+    ngx_array_t *certificates, ssize_t builtin_session_cache,
+    ngx_shm_zone_t *shm_zone, time_t timeout)
 {
     long  cache_mode;
 
     SSL_CTX_set_timeout(ssl->ctx, (long) timeout);
 
-    if (ngx_ssl_session_id_context(ssl, sess_ctx) != NGX_OK) {
+    if (ngx_ssl_session_id_context(ssl, sess_ctx, certificates) != NGX_OK) {
         return NGX_ERROR;
     }
 
@@ -2851,11 +3113,14 @@ ngx_ssl_session_cache(ngx_ssl_t *ssl, ngx_str_t *sess_ctx,
 
 
 static ngx_int_t
-ngx_ssl_session_id_context(ngx_ssl_t *ssl, ngx_str_t *sess_ctx)
+ngx_ssl_session_id_context(ngx_ssl_t *ssl, ngx_str_t *sess_ctx,
+    ngx_array_t *certificates)
 {
     int                   n, i;
     X509                 *cert;
     X509_NAME            *name;
+    ngx_str_t            *certs;
+    ngx_uint_t            k;
     EVP_MD_CTX           *md;
     unsigned int          len;
     STACK_OF(X509_NAME)  *list;
@@ -2900,6 +3165,24 @@ ngx_ssl_session_id_context(ngx_ssl_t *ssl, ngx_str_t *sess_ctx)
         }
     }
 
+    if (SSL_CTX_get_ex_data(ssl->ctx, ngx_ssl_certificate_index) == NULL) {
+
+        /*
+         * If certificates are loaded dynamically, we use certificate
+         * names as specified in the configuration (with variables).
+         */
+
+        certs = certificates->elts;
+        for (k = 0; k < certificates->nelts; k++) {
+
+            if (EVP_DigestUpdate(md, certs[k].data, certs[k].len) == 0) {
+                ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
+                              "EVP_DigestUpdate() failed");
+                goto failed;
+            }
+        }
+    }
+
     list = SSL_CTX_get_client_CA_list(ssl->ctx);
 
     if (list != NULL) {
@@ -2924,7 +3207,7 @@ ngx_ssl_session_id_context(ngx_ssl_t *ssl, ngx_str_t *sess_ctx)
 
     if (EVP_DigestFinal_ex(md, buf, &len) == 0) {
         ngx_ssl_error(NGX_LOG_EMERG, ssl->log, 0,
-                      "EVP_DigestUpdate() failed");
+                      "EVP_DigestFinal_ex() failed");
         goto failed;
     }
 
@@ -3455,6 +3738,7 @@ ngx_ssl_session_ticket_keys(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_array_t *paths)
     ngx_uint_t                     i;
     ngx_array_t                   *keys;
     ngx_file_info_t                fi;
+    ngx_pool_cleanup_t            *cln;
     ngx_ssl_session_ticket_key_t  *key;
 
     if (paths == NULL) {
@@ -3467,6 +3751,14 @@ ngx_ssl_session_ticket_keys(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_array_t *paths)
         return NGX_ERROR;
     }
 
+    cln = ngx_pool_cleanup_add(cf->pool, 0);
+    if (cln == NULL) {
+        return NGX_ERROR;
+    }
+
+    cln->handler = ngx_ssl_session_ticket_keys_cleanup;
+    cln->data = keys;
+
     path = paths->elts;
     for (i = 0; i < paths->nelts; i++) {
 
@@ -3538,6 +3830,8 @@ ngx_ssl_session_ticket_keys(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_array_t *paths)
             ngx_log_error(NGX_LOG_ALERT, cf->log, ngx_errno,
                           ngx_close_file_n " \"%V\" failed", &file.name);
         }
+
+        ngx_explicit_memzero(&buf, 80);
     }
 
     if (SSL_CTX_set_ex_data(ssl->ctx, ngx_ssl_session_ticket_keys_index, keys)
@@ -3568,6 +3862,8 @@ failed:
                       ngx_close_file_n " \"%V\" failed", &file.name);
     }
 
+    ngx_explicit_memzero(&buf, 80);
+
     return NGX_ERROR;
 }
 
@@ -3696,6 +3992,16 @@ ngx_ssl_session_ticket_key_callback(ngx_ssl_conn_t *ssl_conn,
     }
 }
 
+
+static void
+ngx_ssl_session_ticket_keys_cleanup(void *data)
+{
+    ngx_array_t  *keys = data;
+
+    ngx_explicit_memzero(keys->elts,
+                         keys->nelts * sizeof(ngx_ssl_session_ticket_key_t));
+}
+
 #else
 
 ngx_int_t

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_openssl.h (+8 -1) 96%
===================================================================
--- vendor/nginx-1.15.8/src/event/ngx_event_openssl.h    2019-03-25 12:44:08 +0900 (9ec001d09)
+++ vendor/nginx-1.15.10/src/event/ngx_event_openssl.h    2019-03-27 11:40:45 +0900 (61da0c5db)
@@ -161,10 +161,14 @@ typedef struct {
 
 ngx_int_t ngx_ssl_init(ngx_log_t *log);
 ngx_int_t ngx_ssl_create(ngx_ssl_t *ssl, ngx_uint_t protocols, void *data);
+
 ngx_int_t ngx_ssl_certificates(ngx_conf_t *cf, ngx_ssl_t *ssl,
     ngx_array_t *certs, ngx_array_t *keys, ngx_array_t *passwords);
 ngx_int_t ngx_ssl_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl,
     ngx_str_t *cert, ngx_str_t *key, ngx_array_t *passwords);
+ngx_int_t ngx_ssl_connection_certificate(ngx_connection_t *c, ngx_pool_t *pool,
+    ngx_str_t *cert, ngx_str_t *key, ngx_array_t *passwords);
+
 ngx_int_t ngx_ssl_ciphers(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *ciphers,
     ngx_uint_t prefer_server_ciphers);
 ngx_int_t ngx_ssl_client_certificate(ngx_conf_t *cf, ngx_ssl_t *ssl,
@@ -179,6 +183,8 @@ ngx_int_t ngx_ssl_stapling_resolver(ngx_conf_t *cf, ngx_ssl_t *ssl,
 RSA *ngx_ssl_rsa512_key_callback(ngx_ssl_conn_t *ssl_conn, int is_export,
     int key_length);
 ngx_array_t *ngx_ssl_read_password_file(ngx_conf_t *cf, ngx_str_t *file);
+ngx_array_t *ngx_ssl_preserve_passwords(ngx_conf_t *cf,
+    ngx_array_t *passwords);
 ngx_int_t ngx_ssl_dhparam(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *file);
 ngx_int_t ngx_ssl_ecdh_curve(ngx_conf_t *cf, ngx_ssl_t *ssl, ngx_str_t *name);
 ngx_int_t ngx_ssl_early_data(ngx_conf_t *cf, ngx_ssl_t *ssl,
@@ -186,7 +192,8 @@ ngx_int_t ngx_ssl_early_data(ngx_conf_t *cf, ngx_ssl_t *ssl,
 ngx_int_t ngx_ssl_client_session_cache(ngx_conf_t *cf, ngx_ssl_t *ssl,
     ngx_uint_t enable);
 ngx_int_t ngx_ssl_session_cache(ngx_ssl_t *ssl, ngx_str_t *sess_ctx,
-    ssize_t builtin_session_cache, ngx_shm_zone_t *shm_zone, time_t timeout);
+    ngx_array_t *certificates, ssize_t builtin_session_cache,
+    ngx_shm_zone_t *shm_zone, time_t timeout);
 ngx_int_t ngx_ssl_session_ticket_keys(ngx_conf_t *cf, ngx_ssl_t *ssl,
     ngx_array_t *paths);
 ngx_int_t ngx_ssl_session_cache_init(ngx_shm_zone_t *shm_zone, void *data);

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_openssl_stapling.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_pipe.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_pipe.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_posted.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_posted.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_timer.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_timer.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/event/ngx_event_udp.c (+6 -0) 99%
===================================================================
--- vendor/nginx-1.15.8/src/event/ngx_event_udp.c    2019-03-25 12:44:08 +0900 (65eb22fd2)
+++ vendor/nginx-1.15.10/src/event/ngx_event_udp.c    2019-03-27 11:40:45 +0900 (557283050)
@@ -256,7 +256,9 @@ ngx_event_recvmsg(ngx_event_t *ev)
             rev = c->read;
 
             c->udp->buffer = &buf;
+
             rev->ready = 1;
+            rev->active = 0;
 
             rev->handler(rev);
 
@@ -265,6 +267,7 @@ ngx_event_recvmsg(ngx_event_t *ev)
             }
 
             rev->ready = 0;
+            rev->active = 1;
 
             goto next;
         }
@@ -343,6 +346,7 @@ ngx_event_recvmsg(ngx_event_t *ev)
         rev = c->read;
         wev = c->write;
 
+        rev->active = 1;
         wev->ready = 1;
 
         rev->log = log;
@@ -453,7 +457,9 @@ ngx_udp_shared_recv(ngx_connection_t *c, u_char *buf, size_t size)
     ngx_memcpy(buf, b->pos, n);
 
     c->udp->buffer = NULL;
+
     c->read->ready = 0;
+    c->read->active = 1;
 
     return n;
 }

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_access_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_addition_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_auth_basic_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_auth_request_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_autoindex_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_browser_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_charset_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_chunked_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_dav_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_degradation_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_empty_gif_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_fastcgi_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_flv_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_geo_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_geoip_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_grpc_module.c (+1 -0) 99%
===================================================================
--- vendor/nginx-1.15.8/src/http/modules/ngx_http_grpc_module.c    2019-03-25 12:44:08 +0900 (18478b978)
+++ vendor/nginx-1.15.10/src/http/modules/ngx_http_grpc_module.c    2019-03-27 11:40:45 +0900 (f59ecbda7)
@@ -4650,6 +4650,7 @@ ngx_http_grpc_set_ssl(ngx_conf_t *cf, ngx_http_grpc_loc_conf_t *glcf)
 
     cln = ngx_pool_cleanup_add(cf->pool, 0);
     if (cln == NULL) {
+        ngx_ssl_cleanup_ctx(glcf->upstream.ssl);
         return NGX_ERROR;
     }
 

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_gunzip_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_gzip_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_gzip_static_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_headers_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_image_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_index_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_limit_conn_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_limit_req_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_log_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_map_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_memcached_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_mirror_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_mp4_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_not_modified_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_proxy_module.c (+1 -0) 99%
===================================================================
--- vendor/nginx-1.15.8/src/http/modules/ngx_http_proxy_module.c    2019-03-25 12:44:08 +0900 (d6a892217)
+++ vendor/nginx-1.15.10/src/http/modules/ngx_http_proxy_module.c    2019-03-27 11:40:45 +0900 (3aafb9996)
@@ -4270,6 +4270,7 @@ ngx_http_proxy_set_ssl(ngx_conf_t *cf, ngx_http_proxy_loc_conf_t *plcf)
 
     cln = ngx_pool_cleanup_add(cf->pool, 0);
     if (cln == NULL) {
+        ngx_ssl_cleanup_ctx(plcf->upstream.ssl);
         return NGX_ERROR;
     }
 

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_random_index_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_range_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_realip_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_referer_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_rewrite_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_scgi_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_secure_link_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_slice_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_split_clients_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_ssi_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_ssi_filter_module.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_ssl_module.c (+123 -9) 90%
===================================================================
--- vendor/nginx-1.15.8/src/http/modules/ngx_http_ssl_module.c    2019-03-25 12:44:08 +0900 (9e243ea05)
+++ vendor/nginx-1.15.10/src/http/modules/ngx_http_ssl_module.c    2019-03-27 11:40:45 +0900 (b3f8f4795)
@@ -41,6 +41,9 @@ static void *ngx_http_ssl_create_srv_conf(ngx_conf_t *cf);
 static char *ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf,
     void *parent, void *child);
 
+static ngx_int_t ngx_http_ssl_compile_certificates(ngx_conf_t *cf,
+    ngx_http_ssl_srv_conf_t *conf);
+
 static char *ngx_http_ssl_enable(ngx_conf_t *cf, ngx_command_t *cmd,
     void *conf);
 static char *ngx_http_ssl_password_file(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -550,6 +553,7 @@ ngx_http_ssl_create_srv_conf(ngx_conf_t *cf)
      * set by ngx_pcalloc():
      *
      *     sscf->protocols = 0;
+     *     sscf->certificate_values = NULL;
      *     sscf->dhparam = { 0, NULL };
      *     sscf->ecdh_curve = { 0, NULL };
      *     sscf->client_certificate = { 0, NULL };
@@ -696,6 +700,15 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
         return NGX_CONF_ERROR;
     }
 
+    cln = ngx_pool_cleanup_add(cf->pool, 0);
+    if (cln == NULL) {
+        ngx_ssl_cleanup_ctx(&conf->ssl);
+        return NGX_CONF_ERROR;
+    }
+
+    cln->handler = ngx_ssl_cleanup_ctx;
+    cln->data = &conf->ssl;
+
 #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
 
     if (SSL_CTX_set_tlsext_servername_callback(conf->ssl.ctx,
@@ -719,19 +732,36 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
                                           ngx_http_ssl_npn_advertised, NULL);
 #endif
 
-    cln = ngx_pool_cleanup_add(cf->pool, 0);
-    if (cln == NULL) {
+    if (ngx_http_ssl_compile_certificates(cf, conf) != NGX_OK) {
         return NGX_CONF_ERROR;
     }
 
-    cln->handler = ngx_ssl_cleanup_ctx;
-    cln->data = &conf->ssl;
+    if (conf->certificate_values) {
 
-    if (ngx_ssl_certificates(cf, &conf->ssl, conf->certificates,
-                             conf->certificate_keys, conf->passwords)
-        != NGX_OK)
-    {
+#ifdef SSL_R_CERT_CB_ERROR
+
+        /* install callback to lookup certificates */
+
+        SSL_CTX_set_cert_cb(conf->ssl.ctx, ngx_http_ssl_certificate, conf);
+
+#else
+        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                      "variables in "
+                      "\"ssl_certificate\" and \"ssl_certificate_key\" "
+                      "directives are not supported on this platform");
         return NGX_CONF_ERROR;
+#endif
+
+    } else {
+
+        /* configure certificates */
+
+        if (ngx_ssl_certificates(cf, &conf->ssl, conf->certificates,
+                                 conf->certificate_keys, conf->passwords)
+            != NGX_OK)
+        {
+            return NGX_CONF_ERROR;
+        }
     }
 
     if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers,
@@ -788,7 +818,7 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
     }
 
     if (ngx_ssl_session_cache(&conf->ssl, &ngx_http_ssl_sess_id_ctx,
-                              conf->builtin_session_cache,
+                              conf->certificates, conf->builtin_session_cache,
                               conf->shm_zone, conf->session_timeout)
         != NGX_OK)
     {
@@ -831,6 +861,90 @@ ngx_http_ssl_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child)
 }
 
 
+static ngx_int_t
+ngx_http_ssl_compile_certificates(ngx_conf_t *cf,
+    ngx_http_ssl_srv_conf_t *conf)
+{
+    ngx_str_t                         *cert, *key;
+    ngx_uint_t                         i, nelts;
+    ngx_http_complex_value_t          *cv;
+    ngx_http_compile_complex_value_t   ccv;
+
+    cert = conf->certificates->elts;
+    key = conf->certificate_keys->elts;
+    nelts = conf->certificates->nelts;
+
+    for (i = 0; i < nelts; i++) {
+
+        if (ngx_http_script_variables_count(&cert[i])) {
+            goto found;
+        }
+
+        if (ngx_http_script_variables_count(&key[i])) {
+            goto found;
+        }
+    }
+
+    return NGX_OK;
+
+found:
+
+    conf->certificate_values = ngx_array_create(cf->pool, nelts,
+                                             sizeof(ngx_http_complex_value_t));
+    if (conf->certificate_values == NULL) {
+        return NGX_ERROR;
+    }
+
+    conf->certificate_key_values = ngx_array_create(cf->pool, nelts,
+                                             sizeof(ngx_http_complex_value_t));
+    if (conf->certificate_key_values == NULL) {
+        return NGX_ERROR;
+    }
+
+    for (i = 0; i < nelts; i++) {
+
+        cv = ngx_array_push(conf->certificate_values);
+        if (cv == NULL) {
+            return NGX_ERROR;
+        }
+
+        ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
+
+        ccv.cf = cf;
+        ccv.value = &cert[i];
+        ccv.complex_value = cv;
+        ccv.zero = 1;
+
+        if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
+            return NGX_ERROR;
+        }
+
+        cv = ngx_array_push(conf->certificate_key_values);
+        if (cv == NULL) {
+            return NGX_ERROR;
+        }
+
+        ngx_memzero(&ccv, sizeof(ngx_http_compile_complex_value_t));
+
+        ccv.cf = cf;
+        ccv.value = &key[i];
+        ccv.complex_value = cv;
+        ccv.zero = 1;
+
+        if (ngx_http_compile_complex_value(&ccv) != NGX_OK) {
+            return NGX_ERROR;
+        }
+    }
+
+    conf->passwords = ngx_ssl_preserve_passwords(cf, conf->passwords);
+    if (conf->passwords == NULL) {
+        return NGX_ERROR;
+    }
+
+    return NGX_OK;
+}
+
+
 static char *
 ngx_http_ssl_enable(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_ssl_module.h (+3 -0) 93%
===================================================================
--- vendor/nginx-1.15.8/src/http/modules/ngx_http_ssl_module.h    2019-03-25 12:44:08 +0900 (fb3219b63)
+++ vendor/nginx-1.15.10/src/http/modules/ngx_http_ssl_module.h    2019-03-27 11:40:45 +0900 (26fdccfe4)
@@ -36,6 +36,9 @@ typedef struct {
     ngx_array_t                    *certificates;
     ngx_array_t                    *certificate_keys;
 
+    ngx_array_t                    *certificate_values;
+    ngx_array_t                    *certificate_key_values;
+
     ngx_str_t                       dhparam;
     ngx_str_t                       ecdh_curve;
     ngx_str_t                       client_certificate;

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_static_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_stub_status_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_sub_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_try_files_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_hash_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_ip_hash_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_keepalive_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_least_conn_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_random_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_upstream_zone_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_userid_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_uwsgi_module.c (+1 -0) 99%
===================================================================
--- vendor/nginx-1.15.8/src/http/modules/ngx_http_uwsgi_module.c    2019-03-25 12:44:08 +0900 (8b091101f)
+++ vendor/nginx-1.15.10/src/http/modules/ngx_http_uwsgi_module.c    2019-03-27 11:40:45 +0900 (56dc236ef)
@@ -2359,6 +2359,7 @@ ngx_http_uwsgi_set_ssl(ngx_conf_t *cf, ngx_http_uwsgi_loc_conf_t *uwcf)
 
     cln = ngx_pool_cleanup_add(cf->pool, 0);
     if (cln == NULL) {
+        ngx_ssl_cleanup_ctx(uwcf->upstream.ssl);
         return NGX_ERROR;
     }
 

  Renamed: vendor/nginx-1.15.10/src/http/modules/ngx_http_xslt_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/perl/Makefile.PL (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/perl/nginx.pm (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/perl/nginx.xs (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/perl/ngx_http_perl_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/perl/ngx_http_perl_module.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/modules/perl/typemap (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http.c (+18 -16) 98%
===================================================================
--- vendor/nginx-1.15.8/src/http/ngx_http.c    2019-03-25 12:44:08 +0900 (5e2022690)
+++ vendor/nginx-1.15.10/src/http/ngx_http.c    2019-03-27 11:40:45 +0900 (79ef9c644)
@@ -1157,7 +1157,7 @@ ngx_http_add_listen(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
         }
     }
 
-    sa = &lsopt->sockaddr.sockaddr;
+    sa = lsopt->sockaddr;
     p = ngx_inet_get_port(sa);
 
     port = cmcf->ports->elts;
@@ -1209,8 +1209,8 @@ ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
 
     for (i = 0; i < port->addrs.nelts; i++) {
 
-        if (ngx_cmp_sockaddr(&lsopt->sockaddr.sockaddr, lsopt->socklen,
-                             &addr[i].opt.sockaddr.sockaddr,
+        if (ngx_cmp_sockaddr(lsopt->sockaddr, lsopt->socklen,
+                             addr[i].opt.sockaddr,
                              addr[i].opt.socklen, 0)
             != NGX_OK)
         {
@@ -1239,7 +1239,8 @@ ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
 
             if (addr[i].opt.set) {
                 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                        "duplicate listen options for %s", addr[i].opt.addr);
+                                   "duplicate listen options for %V",
+                                   &addr[i].opt.addr_text);
                 return NGX_ERROR;
             }
 
@@ -1252,7 +1253,8 @@ ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
 
             if (default_server) {
                 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                        "a duplicate default server for %s", addr[i].opt.addr);
+                                   "a duplicate default server for %V",
+                                   &addr[i].opt.addr_text);
                 return NGX_ERROR;
             }
 
@@ -1305,8 +1307,8 @@ ngx_http_add_address(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
     if (lsopt->http2 && lsopt->ssl) {
         ngx_conf_log_error(NGX_LOG_WARN, cf, 0,
                            "nginx was built with OpenSSL that lacks ALPN "
-                           "and NPN support, HTTP/2 is not enabled for %s",
-                           lsopt->addr);
+                           "and NPN support, HTTP/2 is not enabled for %V",
+                           &lsopt->addr_text);
     }
 
 #endif
@@ -1354,7 +1356,8 @@ ngx_http_add_server(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,
         for (i = 0; i < addr->servers.nelts; i++) {
             if (server[i] == cscf) {
                 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                                   "a duplicate listen %s", addr->opt.addr);
+                                   "a duplicate listen %V",
+                                   &addr->opt.addr_text);
                 return NGX_ERROR;
             }
         }
@@ -1471,15 +1474,15 @@ ngx_http_server_names(ngx_conf_t *cf, ngx_http_core_main_conf_t *cmcf,
 
             if (rc == NGX_DECLINED) {
                 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
-                              "invalid server name or wildcard \"%V\" on %s",
-                              &name[n].name, addr->opt.addr);
+                              "invalid server name or wildcard \"%V\" on %V",
+                              &name[n].name, &addr->opt.addr_text);
                 return NGX_ERROR;
             }
 
             if (rc == NGX_BUSY) {
                 ngx_log_error(NGX_LOG_WARN, cf->log, 0,
-                              "conflicting server name \"%V\" on %s, ignored",
-                              &name[n].name, addr->opt.addr);
+                              "conflicting server name \"%V\" on %V, ignored",
+                              &name[n].name, &addr->opt.addr_text);
             }
         }
     }
@@ -1700,8 +1703,7 @@ ngx_http_add_listening(ngx_conf_t *cf, ngx_http_conf_addr_t *addr)
     ngx_http_core_loc_conf_t  *clcf;
     ngx_http_core_srv_conf_t  *cscf;
 
-    ls = ngx_create_listening(cf, &addr->opt.sockaddr.sockaddr,
-                              addr->opt.socklen);
+    ls = ngx_create_listening(cf, addr->opt.sockaddr, addr->opt.socklen);
     if (ls == NULL) {
         return NULL;
     }
@@ -1791,7 +1793,7 @@ ngx_http_add_addrs(ngx_conf_t *cf, ngx_http_port_t *hport,
 
     for (i = 0; i < hport->naddrs; i++) {
 
-        sin = &addr[i].opt.sockaddr.sockaddr_in;
+        sin = (struct sockaddr_in *) addr[i].opt.sockaddr;
         addrs[i].addr = sin->sin_addr.s_addr;
         addrs[i].conf.default_server = addr[i].default_server;
 #if (NGX_HTTP_SSL)
@@ -1856,7 +1858,7 @@ ngx_http_add_addrs6(ngx_conf_t *cf, ngx_http_port_t *hport,
 
     for (i = 0; i < hport->naddrs; i++) {
 
-        sin6 = &addr[i].opt.sockaddr.sockaddr_in6;
+        sin6 = (struct sockaddr_in6 *) addr[i].opt.sockaddr;
         addrs6[i].addr6 = sin6->sin6_addr;
         addrs6[i].conf.default_server = addr[i].default_server;
 #if (NGX_HTTP_SSL)

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http.h (+4 -0) 97%
===================================================================
--- vendor/nginx-1.15.8/src/http/ngx_http.h    2019-03-25 12:44:08 +0900 (afab4f645)
+++ vendor/nginx-1.15.10/src/http/ngx_http.h    2019-03-27 11:40:45 +0900 (8b43857ee)
@@ -88,6 +88,10 @@ void ngx_http_close_connection(ngx_connection_t *c);
 #if (NGX_HTTP_SSL && defined SSL_CTRL_SET_TLSEXT_HOSTNAME)
 int ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg);
 #endif
+#if (NGX_HTTP_SSL && defined SSL_R_CERT_CB_ERROR)
+int ngx_http_ssl_certificate(ngx_ssl_conn_t *ssl_conn, void *arg);
+#endif
+
 
 ngx_int_t ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b);
 ngx_int_t ngx_http_parse_uri(ngx_http_request_t *r);

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_cache.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_config.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_copy_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_core_module.c (+40 -35) 98%
===================================================================
--- vendor/nginx-1.15.8/src/http/ngx_http_core_module.c    2019-03-25 12:44:08 +0900 (5e7152f0f)
+++ vendor/nginx-1.15.10/src/http/ngx_http_core_module.c    2019-03-27 11:40:45 +0900 (cb49ef74a)
@@ -2715,6 +2715,8 @@ ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
 {
     char                        *rv;
     void                        *mconf;
+    size_t                       len;
+    u_char                      *p;
     ngx_uint_t                   i;
     ngx_conf_t                   pcf;
     ngx_http_module_t           *module;
@@ -2802,7 +2804,14 @@ ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
     if (rv == NGX_CONF_OK && !cscf->listen) {
         ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t));
 
-        sin = &lsopt.sockaddr.sockaddr_in;
+        p = ngx_pcalloc(cf->pool, sizeof(struct sockaddr_in));
+        if (p == NULL) {
+            return NGX_CONF_ERROR;
+        }
+
+        lsopt.sockaddr = (struct sockaddr *) p;
+
+        sin = (struct sockaddr_in *) p;
 
         sin->sin_family = AF_INET;
 #if (NGX_WIN32)
@@ -2825,8 +2834,16 @@ ngx_http_core_server(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
 #endif
         lsopt.wildcard = 1;
 
-        (void) ngx_sock_ntop(&lsopt.sockaddr.sockaddr, lsopt.socklen,
-                             lsopt.addr, NGX_SOCKADDR_STRLEN, 1);
+        len = NGX_INET_ADDRSTRLEN + sizeof(":65535") - 1;
+
+        p = ngx_pnalloc(cf->pool, len);
+        if (p == NULL) {
+            return NGX_CONF_ERROR;
+        }
+
+        lsopt.addr_text.data = p;
+        lsopt.addr_text.len = ngx_sock_ntop(lsopt.sockaddr, lsopt.socklen, p,
+                                            len, 1);
 
         if (ngx_http_add_listen(cf, cscf, &lsopt) != NGX_OK) {
             return NGX_CONF_ERROR;
@@ -3779,9 +3796,6 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
     ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t));
 
-    ngx_memcpy(&lsopt.sockaddr.sockaddr, &u.sockaddr, u.socklen);
-
-    lsopt.socklen = u.socklen;
     lsopt.backlog = NGX_LISTEN_BACKLOG;
     lsopt.rcvbuf = -1;
     lsopt.sndbuf = -1;
@@ -3791,14 +3805,10 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 #if (NGX_HAVE_TCP_FASTOPEN)
     lsopt.fastopen = -1;
 #endif
-    lsopt.wildcard = u.wildcard;
 #if (NGX_HAVE_INET6)
     lsopt.ipv6only = 1;
 #endif
 
-    (void) ngx_sock_ntop(&lsopt.sockaddr.sockaddr, lsopt.socklen, lsopt.addr,
-                         NGX_SOCKADDR_STRLEN, 1);
-
     for (n = 2; n < cf->args->nelts; n++) {
 
         if (ngx_strcmp(value[n].data, "default_server") == 0
@@ -3923,34 +3933,22 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
         if (ngx_strncmp(value[n].data, "ipv6only=o", 10) == 0) {
 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
-            struct sockaddr  *sa;
-
-            sa = &lsopt.sockaddr.sockaddr;
-
-            if (sa->sa_family == AF_INET6) {
-
-                if (ngx_strcmp(&value[n].data[10], "n") == 0) {
-                    lsopt.ipv6only = 1;
+            if (ngx_strcmp(&value[n].data[10], "n") == 0) {
+                lsopt.ipv6only = 1;
 
-                } else if (ngx_strcmp(&value[n].data[10], "ff") == 0) {
-                    lsopt.ipv6only = 0;
-
-                } else {
-                    ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                                       "invalid ipv6only flags \"%s\"",
-                                       &value[n].data[9]);
-                    return NGX_CONF_ERROR;
-                }
-
-                lsopt.set = 1;
-                lsopt.bind = 1;
+            } else if (ngx_strcmp(&value[n].data[10], "ff") == 0) {
+                lsopt.ipv6only = 0;
 
             } else {
                 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                                   "ipv6only is not supported "
-                                   "on addr \"%s\", ignored", lsopt.addr);
+                                   "invalid ipv6only flags \"%s\"",
+                                   &value[n].data[9]);
+                return NGX_CONF_ERROR;
             }
 
+            lsopt.set = 1;
+            lsopt.bind = 1;
+
             continue;
 #else
             ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
@@ -4106,11 +4104,18 @@ ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
         return NGX_CONF_ERROR;
     }
 
-    if (ngx_http_add_listen(cf, cscf, &lsopt) == NGX_OK) {
-        return NGX_CONF_OK;
+    for (n = 0; n < u.naddrs; n++) {
+        lsopt.sockaddr = u.addrs[n].sockaddr;
+        lsopt.socklen = u.addrs[n].socklen;
+        lsopt.addr_text = u.addrs[n].name;
+        lsopt.wildcard = ngx_inet_wildcard(lsopt.sockaddr);
+
+        if (ngx_http_add_listen(cf, cscf, &lsopt) != NGX_OK) {
+            return NGX_CONF_ERROR;
+        }
     }
 
-    return NGX_CONF_ERROR;
+    return NGX_CONF_OK;
 }
 
 

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_core_module.h (+2 -3) 99%
===================================================================
--- vendor/nginx-1.15.8/src/http/ngx_http_core_module.h    2019-03-25 12:44:08 +0900 (4c6da7c0f)
+++ vendor/nginx-1.15.10/src/http/ngx_http_core_module.h    2019-03-27 11:40:45 +0900 (85f6d66dc)
@@ -65,8 +65,9 @@ typedef struct ngx_http_core_loc_conf_s  ngx_http_core_loc_conf_t;
 
 
 typedef struct {
-    ngx_sockaddr_t             sockaddr;
+    struct sockaddr           *sockaddr;
     socklen_t                  socklen;
+    ngx_str_t                  addr_text;
 
     unsigned                   set:1;
     unsigned                   default_server:1;
@@ -100,8 +101,6 @@ typedef struct {
 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
     char                      *accept_filter;
 #endif
-
-    u_char                     addr[NGX_SOCKADDR_STRLEN + 1];
 } ngx_http_listen_opt_t;
 
 

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_file_cache.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_header_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_parse.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_postpone_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_request.c (+137 -34) 97%
===================================================================
--- vendor/nginx-1.15.8/src/http/ngx_http_request.c    2019-03-25 12:44:08 +0900 (7dd28b8c2)
+++ vendor/nginx-1.15.10/src/http/ngx_http_request.c    2019-03-27 11:40:45 +0900 (80c19656f)
@@ -11,6 +11,7 @@
 
 
 static void ngx_http_wait_request_handler(ngx_event_t *ev);
+static ngx_http_request_t *ngx_http_alloc_request(ngx_connection_t *c);
 static void ngx_http_process_request_line(ngx_event_t *rev);
 static void ngx_http_process_request_headers(ngx_event_t *rev);
 static ssize_t ngx_http_read_request_header(ngx_http_request_t *r);
@@ -503,17 +504,45 @@ ngx_http_wait_request_handler(ngx_event_t *rev)
 ngx_http_request_t *
 ngx_http_create_request(ngx_connection_t *c)
 {
+    ngx_http_request_t        *r;
+    ngx_http_log_ctx_t        *ctx;
+    ngx_http_core_loc_conf_t  *clcf;
+
+    r = ngx_http_alloc_request(c);
+    if (r == NULL) {
+        return NULL;
+    }
+
+    c->requests++;
+
+    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
+
+    ngx_set_connection_log(c, clcf->error_log);
+
+    ctx = c->log->data;
+    ctx->request = r;
+    ctx->current_request = r;
+
+#if (NGX_STAT_STUB)
+    (void) ngx_atomic_fetch_add(ngx_stat_reading, 1);
+    r->stat_reading = 1;
+    (void) ngx_atomic_fetch_add(ngx_stat_requests, 1);
+#endif
+
+    return r;
+}
+
+
+static ngx_http_request_t *
+ngx_http_alloc_request(ngx_connection_t *c)
+{
     ngx_pool_t                 *pool;
     ngx_time_t                 *tp;
     ngx_http_request_t         *r;
-    ngx_http_log_ctx_t         *ctx;
     ngx_http_connection_t      *hc;
     ngx_http_core_srv_conf_t   *cscf;
-    ngx_http_core_loc_conf_t   *clcf;
     ngx_http_core_main_conf_t  *cmcf;
 
-    c->requests++;
-
     hc = c->data;
 
     cscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_core_module);
@@ -541,10 +570,6 @@ ngx_http_create_request(ngx_connection_t *c)
 
     r->read_event_handler = ngx_http_block_reading;
 
-    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
-
-    ngx_set_connection_log(r->connection, clcf->error_log);
-
     r->header_in = hc->busy ? hc->busy->buf : c->buffer;
 
     if (ngx_list_init(&r->headers_out.headers, r->pool, 20,
@@ -604,17 +629,8 @@ ngx_http_create_request(ngx_connection_t *c)
 
     r->http_state = NGX_HTTP_READING_REQUEST_STATE;
 
-    ctx = c->log->data;
-    ctx->request = r;
-    ctx->current_request = r;
     r->log_handler = ngx_http_log_error_handler;
 
-#if (NGX_STAT_STUB)
-    (void) ngx_atomic_fetch_add(ngx_stat_reading, 1);
-    r->stat_reading = 1;
-    (void) ngx_atomic_fetch_add(ngx_stat_requests, 1);
-#endif
-
     return r;
 }
 
@@ -833,11 +849,13 @@ ngx_http_ssl_handshake_handler(ngx_connection_t *c)
     ngx_http_close_connection(c);
 }
 
+
 #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
 
 int
 ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg)
 {
+    ngx_int_t                  rc;
     ngx_str_t                  host;
     const char                *servername;
     ngx_connection_t          *c;
@@ -846,16 +864,17 @@ ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg)
     ngx_http_core_loc_conf_t  *clcf;
     ngx_http_core_srv_conf_t  *cscf;
 
-    servername = SSL_get_servername(ssl_conn, TLSEXT_NAMETYPE_host_name);
+    c = ngx_ssl_get_connection(ssl_conn);
 
-    if (servername == NULL) {
-        return SSL_TLSEXT_ERR_NOACK;
+    if (c->ssl->handshaked) {
+        *ad = SSL_AD_NO_RENEGOTIATION;
+        return SSL_TLSEXT_ERR_ALERT_FATAL;
     }
 
-    c = ngx_ssl_get_connection(ssl_conn);
+    servername = SSL_get_servername(ssl_conn, TLSEXT_NAMETYPE_host_name);
 
-    if (c->ssl->handshaked) {
-        return SSL_TLSEXT_ERR_NOACK;
+    if (servername == NULL) {
+        return SSL_TLSEXT_ERR_OK;
     }
 
     ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
@@ -864,27 +883,40 @@ ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg)
     host.len = ngx_strlen(servername);
 
     if (host.len == 0) {
-        return SSL_TLSEXT_ERR_NOACK;
+        return SSL_TLSEXT_ERR_OK;
     }
 
     host.data = (u_char *) servername;
 
-    if (ngx_http_validate_host(&host, c->pool, 1) != NGX_OK) {
-        return SSL_TLSEXT_ERR_NOACK;
+    rc = ngx_http_validate_host(&host, c->pool, 1);
+
+    if (rc == NGX_ERROR) {
+        *ad = SSL_AD_INTERNAL_ERROR;
+        return SSL_TLSEXT_ERR_ALERT_FATAL;
+    }
+
+    if (rc == NGX_DECLINED) {
+        return SSL_TLSEXT_ERR_OK;
     }
 
     hc = c->data;
 
-    if (ngx_http_find_virtual_server(c, hc->addr_conf->virtual_names, &host,
-                                     NULL, &cscf)
-        != NGX_OK)
-    {
-        return SSL_TLSEXT_ERR_NOACK;
+    rc = ngx_http_find_virtual_server(c, hc->addr_conf->virtual_names, &host,
+                                      NULL, &cscf);
+
+    if (rc == NGX_ERROR) {
+        *ad = SSL_AD_INTERNAL_ERROR;
+        return SSL_TLSEXT_ERR_ALERT_FATAL;
+    }
+
+    if (rc == NGX_DECLINED) {
+        return SSL_TLSEXT_ERR_OK;
     }
 
     hc->ssl_servername = ngx_palloc(c->pool, sizeof(ngx_str_t));
     if (hc->ssl_servername == NULL) {
-        return SSL_TLSEXT_ERR_NOACK;
+        *ad = SSL_AD_INTERNAL_ERROR;
+        return SSL_TLSEXT_ERR_ALERT_FATAL;
     }
 
     *hc->ssl_servername = host;
@@ -930,6 +962,75 @@ ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg)
 
 #endif
 
+
+#ifdef SSL_R_CERT_CB_ERROR
+
+int
+ngx_http_ssl_certificate(ngx_ssl_conn_t *ssl_conn, void *arg)
+{
+    ngx_str_t                  cert, key;
+    ngx_uint_t                 i, nelts;
+    ngx_connection_t          *c;
+    ngx_http_request_t        *r;
+    ngx_http_ssl_srv_conf_t   *sscf;
+    ngx_http_complex_value_t  *certs, *keys;
+
+    c = ngx_ssl_get_connection(ssl_conn);
+
+    if (c->ssl->handshaked) {
+        return 0;
+    }
+
+    r = ngx_http_alloc_request(c);
+    if (r == NULL) {
+        return 0;
+    }
+
+    r->logged = 1;
+
+    sscf = arg;
+
+    nelts = sscf->certificate_values->nelts;
+    certs = sscf->certificate_values->elts;
+    keys = sscf->certificate_key_values->elts;
+
+    for (i = 0; i < nelts; i++) {
+
+        if (ngx_http_complex_value(r, &certs[i], &cert) != NGX_OK) {
+            goto failed;
+        }
+
+        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
+                       "ssl cert: \"%s\"", cert.data);
+
+        if (ngx_http_complex_value(r, &keys[i], &key) != NGX_OK) {
+            goto failed;
+        }
+
+        ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
+                       "ssl key: \"%s\"", key.data);
+
+        if (ngx_ssl_connection_certificate(c, r->pool, &cert, &key,
+                                           sscf->passwords)
+            != NGX_OK)
+        {
+            goto failed;
+        }
+    }
+
+    ngx_http_free_request(r, 0);
+    c->destroyed = 0;
+    return 1;
+
+failed:
+
+    ngx_http_free_request(r, 0);
+    c->destroyed = 0;
+    return 0;
+}
+
+#endif
+
 #endif
 
 
@@ -3513,9 +3614,11 @@ ngx_http_free_request(ngx_http_request_t *r, ngx_int_t rc)
         r->headers_out.status = rc;
     }
 
-    log->action = "logging request";
+    if (!r->logged) {
+        log->action = "logging request";
 
-    ngx_http_log_request(r);
+        ngx_http_log_request(r);
+    }
 
     log->action = "closing request";
 

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_request.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_request_body.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_script.c (+28 -0) 98%
===================================================================
--- vendor/nginx-1.15.8/src/http/ngx_http_script.c    2019-03-25 12:44:08 +0900 (1a8773561)
+++ vendor/nginx-1.15.10/src/http/ngx_http_script.c    2019-03-27 11:40:45 +0900 (415388904)
@@ -271,6 +271,34 @@ ngx_http_test_predicates(ngx_http_request_t *r, ngx_array_t *predicates)
 }
 
 
+ngx_int_t
+ngx_http_test_required_predicates(ngx_http_request_t *r,
+    ngx_array_t *predicates)
+{
+    ngx_str_t                  val;
+    ngx_uint_t                 i;
+    ngx_http_complex_value_t  *cv;
+
+    if (predicates == NULL) {
+        return NGX_OK;
+    }
+
+    cv = predicates->elts;
+
+    for (i = 0; i < predicates->nelts; i++) {
+        if (ngx_http_complex_value(r, &cv[i], &val) != NGX_OK) {
+            return NGX_ERROR;
+        }
+
+        if (val.len == 0 || (val.len == 1 && val.data[0] == '0')) {
+            return NGX_DECLINED;
+        }
+    }
+
+    return NGX_OK;
+}
+
+
 char *
 ngx_http_set_predicate_slot(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_script.h (+2 -0) 98%
===================================================================
--- vendor/nginx-1.15.8/src/http/ngx_http_script.h    2019-03-25 12:44:08 +0900 (a5116d747)
+++ vendor/nginx-1.15.10/src/http/ngx_http_script.h    2019-03-27 11:40:45 +0900 (25bb6d73f)
@@ -214,6 +214,8 @@ char *ngx_http_set_complex_value_slot(ngx_conf_t *cf, ngx_command_t *cmd,
 
 ngx_int_t ngx_http_test_predicates(ngx_http_request_t *r,
     ngx_array_t *predicates);
+ngx_int_t ngx_http_test_required_predicates(ngx_http_request_t *r,
+    ngx_array_t *predicates);
 char *ngx_http_set_predicate_slot(ngx_conf_t *cf, ngx_command_t *cmd,
     void *conf);
 

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_special_response.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_upstream.c (+1 -1) 99%
===================================================================
--- vendor/nginx-1.15.8/src/http/ngx_http_upstream.c    2019-03-25 12:44:08 +0900 (907105571)
+++ vendor/nginx-1.15.10/src/http/ngx_http_upstream.c    2019-03-27 11:40:45 +0900 (a7391d09a)
@@ -850,7 +850,7 @@ ngx_http_upstream_cache(ngx_http_request_t *r, ngx_http_upstream_t *u)
 
         ngx_http_file_cache_create_key(r);
 
-        if (r->cache->header_start + 256 >= u->conf->buffer_size) {
+        if (r->cache->header_start + 256 > u->conf->buffer_size) {
             ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
                           "%V_buffer_size %uz is not enough for cache key, "
                           "it should be increased to at least %uz",

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_upstream.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_upstream_round_robin.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_upstream_round_robin.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_variables.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_variables.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/ngx_http_write_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/v2/ngx_http_v2.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/v2/ngx_http_v2.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_encode.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_filter_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_huff_decode.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_huff_encode.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_module.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/http/v2/ngx_http_v2_table.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail.c (+6 -36) 91%
===================================================================
--- vendor/nginx-1.15.8/src/mail/ngx_mail.c    2019-03-25 12:44:08 +0900 (5fd5fa00c)
+++ vendor/nginx-1.15.10/src/mail/ngx_mail.c    2019-03-27 11:40:45 +0900 (f17c2ccc3)
@@ -231,7 +231,7 @@ ngx_mail_add_ports(ngx_conf_t *cf, ngx_array_t *ports,
     ngx_mail_conf_port_t  *port;
     ngx_mail_conf_addr_t  *addr;
 
-    sa = &listen->sockaddr.sockaddr;
+    sa = listen->sockaddr;
     p = ngx_inet_get_port(sa);
 
     port = ports->elts;
@@ -316,7 +316,7 @@ ngx_mail_optimize_servers(ngx_conf_t *cf, ngx_array_t *ports)
                 continue;
             }
 
-            ls = ngx_create_listening(cf, &addr[i].opt.sockaddr.sockaddr,
+            ls = ngx_create_listening(cf, addr[i].opt.sockaddr,
                                       addr[i].opt.socklen);
             if (ls == NULL) {
                 return NGX_CONF_ERROR;
@@ -384,12 +384,9 @@ static ngx_int_t
 ngx_mail_add_addrs(ngx_conf_t *cf, ngx_mail_port_t *mport,
     ngx_mail_conf_addr_t *addr)
 {
-    u_char              *p;
-    size_t               len;
     ngx_uint_t           i;
     ngx_mail_in_addr_t  *addrs;
     struct sockaddr_in  *sin;
-    u_char               buf[NGX_SOCKADDR_STRLEN];
 
     mport->addrs = ngx_pcalloc(cf->pool,
                                mport->naddrs * sizeof(ngx_mail_in_addr_t));
@@ -401,26 +398,14 @@ ngx_mail_add_addrs(ngx_conf_t *cf, ngx_mail_port_t *mport,
 
     for (i = 0; i < mport->naddrs; i++) {
 
-        sin = &addr[i].opt.sockaddr.sockaddr_in;
+        sin = (struct sockaddr_in *) addr[i].opt.sockaddr;
         addrs[i].addr = sin->sin_addr.s_addr;
 
         addrs[i].conf.ctx = addr[i].opt.ctx;
 #if (NGX_MAIL_SSL)
         addrs[i].conf.ssl = addr[i].opt.ssl;
 #endif
-
-        len = ngx_sock_ntop(&addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen,
-                            buf, NGX_SOCKADDR_STRLEN, 1);
-
-        p = ngx_pnalloc(cf->pool, len);
-        if (p == NULL) {
-            return NGX_ERROR;
-        }
-
-        ngx_memcpy(p, buf, len);
-
-        addrs[i].conf.addr_text.len = len;
-        addrs[i].conf.addr_text.data = p;
+        addrs[i].conf.addr_text = addr[i].opt.addr_text;
     }
 
     return NGX_OK;
@@ -433,12 +418,9 @@ static ngx_int_t
 ngx_mail_add_addrs6(ngx_conf_t *cf, ngx_mail_port_t *mport,
     ngx_mail_conf_addr_t *addr)
 {
-    u_char               *p;
-    size_t                len;
     ngx_uint_t            i;
     ngx_mail_in6_addr_t  *addrs6;
     struct sockaddr_in6  *sin6;
-    u_char                buf[NGX_SOCKADDR_STRLEN];
 
     mport->addrs = ngx_pcalloc(cf->pool,
                                mport->naddrs * sizeof(ngx_mail_in6_addr_t));
@@ -450,26 +432,14 @@ ngx_mail_add_addrs6(ngx_conf_t *cf, ngx_mail_port_t *mport,
 
     for (i = 0; i < mport->naddrs; i++) {
 
-        sin6 = &addr[i].opt.sockaddr.sockaddr_in6;
+        sin6 = (struct sockaddr_in6 *) addr[i].opt.sockaddr;
         addrs6[i].addr6 = sin6->sin6_addr;
 
         addrs6[i].conf.ctx = addr[i].opt.ctx;
 #if (NGX_MAIL_SSL)
         addrs6[i].conf.ssl = addr[i].opt.ssl;
 #endif
-
-        len = ngx_sock_ntop(&addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen,
-                            buf, NGX_SOCKADDR_STRLEN, 1);
-
-        p = ngx_pnalloc(cf->pool, len);
-        if (p == NULL) {
-            return NGX_ERROR;
-        }
-
-        ngx_memcpy(p, buf, len);
-
-        addrs6[i].conf.addr_text.len = len;
-        addrs6[i].conf.addr_text.data = p;
+        addrs6[i].conf.addr_text = addr[i].opt.addr_text;
     }
 
     return NGX_OK;

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail.h (+2 -1) 99%
===================================================================
--- vendor/nginx-1.15.8/src/mail/ngx_mail.h    2019-03-25 12:44:08 +0900 (6ecfefc98)
+++ vendor/nginx-1.15.10/src/mail/ngx_mail.h    2019-03-27 11:40:45 +0900 (d904f25f1)
@@ -27,8 +27,9 @@ typedef struct {
 
 
 typedef struct {
-    ngx_sockaddr_t          sockaddr;
+    struct sockaddr        *sockaddr;
     socklen_t               socklen;
+    ngx_str_t               addr_text;
 
     /* server ctx */
     ngx_mail_conf_ctx_t    *ctx;

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_auth_http_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_core_module.c (+37 -46) 91%
===================================================================
--- vendor/nginx-1.15.8/src/mail/ngx_mail_core_module.c    2019-03-25 12:44:08 +0900 (dd4e9802b)
+++ vendor/nginx-1.15.10/src/mail/ngx_mail_core_module.c    2019-03-27 11:40:45 +0900 (e16d70238)
@@ -297,8 +297,8 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
     ngx_str_t                  *value, size;
     ngx_url_t                   u;
-    ngx_uint_t                  i, m;
-    ngx_mail_listen_t          *ls;
+    ngx_uint_t                  i, n, m;
+    ngx_mail_listen_t          *ls, *als;
     ngx_mail_module_t          *module;
     ngx_mail_core_main_conf_t  *cmcf;
 
@@ -323,36 +323,16 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
     cmcf = ngx_mail_conf_get_module_main_conf(cf, ngx_mail_core_module);
 
-    ls = cmcf->listen.elts;
-
-    for (i = 0; i < cmcf->listen.nelts; i++) {
-
-        if (ngx_cmp_sockaddr(&ls[i].sockaddr.sockaddr, ls[i].socklen,
-                             (struct sockaddr *) &u.sockaddr, u.socklen, 1)
-            != NGX_OK)
-        {
-            continue;
-        }
-
-        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                           "duplicate \"%V\" address and port pair", &u.url);
-        return NGX_CONF_ERROR;
-    }
-
-    ls = ngx_array_push(&cmcf->listen);
+    ls = ngx_array_push_n(&cmcf->listen, u.naddrs);
     if (ls == NULL) {
         return NGX_CONF_ERROR;
     }
 
     ngx_memzero(ls, sizeof(ngx_mail_listen_t));
 
-    ngx_memcpy(&ls->sockaddr.sockaddr, &u.sockaddr, u.socklen);
-
-    ls->socklen = u.socklen;
     ls->backlog = NGX_LISTEN_BACKLOG;
     ls->rcvbuf = -1;
     ls->sndbuf = -1;
-    ls->wildcard = u.wildcard;
     ls->ctx = cf->ctx;
 
 #if (NGX_HAVE_INET6)
@@ -434,35 +414,20 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
         if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) {
 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
-            size_t  len;
-            u_char  buf[NGX_SOCKADDR_STRLEN];
-
-            if (ls->sockaddr.sockaddr.sa_family == AF_INET6) {
-
-                if (ngx_strcmp(&value[i].data[10], "n") == 0) {
-                    ls->ipv6only = 1;
-
-                } else if (ngx_strcmp(&value[i].data[10], "ff") == 0) {
-                    ls->ipv6only = 0;
-
-                } else {
-                    ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                                       "invalid ipv6only flags \"%s\"",
-                                       &value[i].data[9]);
-                    return NGX_CONF_ERROR;
-                }
+            if (ngx_strcmp(&value[i].data[10], "n") == 0) {
+                ls->ipv6only = 1;
 
-                ls->bind = 1;
+            } else if (ngx_strcmp(&value[i].data[10], "ff") == 0) {
+                ls->ipv6only = 0;
 
             } else {
-                len = ngx_sock_ntop(&ls->sockaddr.sockaddr, ls->socklen, buf,
-                                    NGX_SOCKADDR_STRLEN, 1);
-
                 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                                   "ipv6only is not supported "
-                                   "on addr \"%*s\", ignored", len, buf);
+                                   "invalid ipv6only flags \"%s\"",
+                                   &value[i].data[9]);
+                return NGX_CONF_ERROR;
             }
 
+            ls->bind = 1;
             continue;
 #else
             ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
@@ -588,6 +553,32 @@ ngx_mail_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
         return NGX_CONF_ERROR;
     }
 
+    als = cmcf->listen.elts;
+
+    for (n = 0; n < u.naddrs; n++) {
+        ls[n] = ls[0];
+
+        ls[n].sockaddr = u.addrs[n].sockaddr;
+        ls[n].socklen = u.addrs[n].socklen;
+        ls[n].addr_text = u.addrs[n].name;
+        ls[n].wildcard = ngx_inet_wildcard(ls[n].sockaddr);
+
+        for (i = 0; i < cmcf->listen.nelts - u.naddrs + n; i++) {
+
+            if (ngx_cmp_sockaddr(als[i].sockaddr, als[i].socklen,
+                                 ls[n].sockaddr, ls[n].socklen, 1)
+                != NGX_OK)
+            {
+                continue;
+            }
+
+            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+                               "duplicate \"%V\" address and port pair",
+                               &ls[n].addr_text);
+            return NGX_CONF_ERROR;
+        }
+    }
+
     return NGX_CONF_OK;
 }
 

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_handler.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_imap_handler.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_imap_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_imap_module.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_parse.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_pop3_handler.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_pop3_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_pop3_module.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_proxy_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_smtp_handler.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_smtp_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_smtp_module.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_ssl_module.c (+2 -1) 99%
===================================================================
--- vendor/nginx-1.15.8/src/mail/ngx_mail_ssl_module.c    2019-03-25 12:44:08 +0900 (45095979e)
+++ vendor/nginx-1.15.10/src/mail/ngx_mail_ssl_module.c    2019-03-27 11:40:45 +0900 (5544f7522)
@@ -370,6 +370,7 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child)
 
     cln = ngx_pool_cleanup_add(cf->pool, 0);
     if (cln == NULL) {
+        ngx_ssl_cleanup_ctx(&conf->ssl);
         return NGX_CONF_ERROR;
     }
 
@@ -435,7 +436,7 @@ ngx_mail_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child)
     }
 
     if (ngx_ssl_session_cache(&conf->ssl, &ngx_mail_ssl_sess_id_ctx,
-                              conf->builtin_session_cache,
+                              conf->certificates, conf->builtin_session_cache,
                               conf->shm_zone, conf->session_timeout)
         != NGX_OK)
     {

  Renamed: vendor/nginx-1.15.10/src/mail/ngx_mail_ssl_module.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/misc/ngx_cpp_test_module.cpp (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/misc/ngx_google_perftools_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_alloc.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_alloc.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_atomic.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_channel.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_channel.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_daemon.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_darwin.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_darwin_config.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_darwin_init.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_darwin_sendfile_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_dlopen.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_dlopen.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_errno.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_errno.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_file_aio_read.c (+1 -1) 98%
===================================================================
--- vendor/nginx-1.15.8/src/os/unix/ngx_file_aio_read.c    2019-03-25 12:44:08 +0900 (aedc3c90c)
+++ vendor/nginx-1.15.10/src/os/unix/ngx_file_aio_read.c    2019-03-27 11:40:45 +0900 (bb60ee824)
@@ -110,7 +110,7 @@ ngx_file_aio_read(ngx_file_t *file, u_char *buf, size_t size, off_t offset,
 #if (NGX_HAVE_KQUEUE)
     aio->aiocb.aio_sigevent.sigev_notify_kqueue = ngx_kqueue;
     aio->aiocb.aio_sigevent.sigev_notify = SIGEV_KEVENT;
-    aio->aiocb.aio_sigevent.sigev_value.sigval_ptr = ev;
+    aio->aiocb.aio_sigevent.sigev_value.sival_ptr = ev;
 #endif
     ev->handler = ngx_file_aio_event_handler;
 

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_files.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_files.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_freebsd.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_freebsd_config.h (+6 -0) 95%
===================================================================
--- vendor/nginx-1.15.8/src/os/unix/ngx_freebsd_config.h    2019-03-25 12:44:08 +0900 (b7da48cb1)
+++ vendor/nginx-1.15.10/src/os/unix/ngx_freebsd_config.h    2019-03-27 11:40:45 +0900 (c641108b7)
@@ -89,8 +89,14 @@
 
 
 #if (NGX_HAVE_FILE_AIO)
+
 #include <aio.h>
 typedef struct aiocb  ngx_aiocb_t;
+
+#if (__FreeBSD_version < 700005 && !defined __DragonFly__)
+#define sival_ptr     sigval_ptr
+#endif
+
 #endif
 
 

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_freebsd_init.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_freebsd_sendfile_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_gcc_atomic_amd64.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_gcc_atomic_ppc.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_gcc_atomic_sparc64.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_gcc_atomic_x86.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_linux.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_linux_aio_read.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_linux_config.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_linux_init.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_linux_sendfile_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_os.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_posix_config.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_posix_init.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_process.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_process.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_process_cycle.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_process_cycle.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_readv_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_recv.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_send.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_setaffinity.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_setaffinity.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_setproctitle.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_setproctitle.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_shmem.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_shmem.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_socket.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_socket.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_solaris.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_solaris_config.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_solaris_init.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_solaris_sendfilev_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_sunpro_amd64.il (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_sunpro_atomic_sparc64.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_sunpro_sparc64.il (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_sunpro_x86.il (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_thread.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_thread_cond.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_thread_id.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_thread_mutex.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_time.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_time.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_udp_recv.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_udp_send.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_udp_sendmsg_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_user.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_user.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/unix/ngx_writev_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/nginx.ico (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/nginx.rc (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/nginx_icon16.xpm (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/nginx_icon32.xpm (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/nginx_icon48.xpm (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_alloc.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_alloc.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_atomic.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_dlopen.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_dlopen.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_errno.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_errno.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_event_log.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_files.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_files.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_os.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_process.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_process.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_process_cycle.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_process_cycle.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_service.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_shmem.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_shmem.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_socket.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_socket.h (+43 -0) 85%
===================================================================
--- vendor/nginx-1.15.8/src/os/win32/ngx_socket.h    2019-03-25 12:44:08 +0900 (a9e26c295)
+++ vendor/nginx-1.15.10/src/os/win32/ngx_socket.h    2019-03-27 11:40:45 +0900 (f8a453d56)
@@ -200,6 +200,49 @@ extern LPFN_CONNECTEX             ngx_connectex;
 extern LPFN_DISCONNECTEX          ngx_disconnectex;
 
 
+#if (NGX_HAVE_POLL && !defined POLLIN)
+
+/*
+ * WSAPoll() is only available if _WIN32_WINNT >= 0x0600.
+ * If it is not available during compilation, we try to
+ * load it dynamically at runtime.
+ */
+
+#define NGX_LOAD_WSAPOLL 1
+
+#define POLLRDNORM  0x0100
+#define POLLRDBAND  0x0200
+#define POLLIN      (POLLRDNORM | POLLRDBAND)
+#define POLLPRI     0x0400
+
+#define POLLWRNORM  0x0010
+#define POLLOUT     (POLLWRNORM)
+#define POLLWRBAND  0x0020
+
+#define POLLERR     0x0001
+#define POLLHUP     0x0002
+#define POLLNVAL    0x0004
+
+typedef struct pollfd {
+
+    SOCKET  fd;
+    SHORT   events;
+    SHORT   revents;
+
+} WSAPOLLFD, *PWSAPOLLFD, FAR *LPWSAPOLLFD;
+
+typedef int (WSAAPI *ngx_wsapoll_pt)(
+    LPWSAPOLLFD fdArray,
+    ULONG fds,
+    INT timeout
+    );
+
+extern ngx_wsapoll_pt             WSAPoll;
+extern ngx_uint_t                 ngx_have_wsapoll;
+
+#endif
+
+
 int ngx_tcp_push(ngx_socket_t s);
 #define ngx_tcp_push_n            "tcp_push()"
 

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_stat.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_thread.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_thread.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_time.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_time.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_udp_wsarecv.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_user.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_user.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_win32_config.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_win32_init.c (+32 -0) 92%
===================================================================
--- vendor/nginx-1.15.8/src/os/win32/ngx_win32_init.c    2019-03-25 12:44:08 +0900 (ec9b51efa)
+++ vendor/nginx-1.15.10/src/os/win32/ngx_win32_init.c    2019-03-27 11:40:45 +0900 (70bee8ef4)
@@ -58,6 +58,12 @@ static GUID cx_guid = WSAID_CONNECTEX;
 static GUID dx_guid = WSAID_DISCONNECTEX;
 
 
+#if (NGX_LOAD_WSAPOLL)
+ngx_wsapoll_pt             WSAPoll;
+ngx_uint_t                 ngx_have_wsapoll;
+#endif
+
+
 ngx_int_t
 ngx_os_init(ngx_log_t *log)
 {
@@ -223,6 +229,32 @@ ngx_os_init(ngx_log_t *log)
                       ngx_close_socket_n " failed");
     }
 
+#if (NGX_LOAD_WSAPOLL)
+    {
+    HMODULE  hmod;
+
+    hmod = GetModuleHandle("ws2_32.dll");
+    if (hmod == NULL) {
+        ngx_log_error(NGX_LOG_NOTICE, log, ngx_errno,
+                      "GetModuleHandle(\"ws2_32.dll\") failed");
+        goto nopoll;
+    }
+
+    WSAPoll = (ngx_wsapoll_pt) GetProcAddress(hmod, "WSAPoll");
+    if (WSAPoll == NULL) {
+        ngx_log_error(NGX_LOG_NOTICE, log, ngx_errno,
+                      "GetProcAddress(\"WSAPoll\") failed");
+        goto nopoll;
+    }
+
+    ngx_have_wsapoll = 1;
+
+    }
+
+nopoll:
+
+#endif
+
     if (GetEnvironmentVariable("ngx_unique", ngx_unique, NGX_INT32_LEN + 1)
         != 0)
     {

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_wsarecv.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_wsarecv_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_wsasend.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/os/win32/ngx_wsasend_chain.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream.c (+6 -36) 93%
===================================================================
--- vendor/nginx-1.15.8/src/stream/ngx_stream.c    2019-03-25 12:44:08 +0900 (4abe387e8)
+++ vendor/nginx-1.15.10/src/stream/ngx_stream.c    2019-03-27 11:40:45 +0900 (78356754e)
@@ -387,7 +387,7 @@ ngx_stream_add_ports(ngx_conf_t *cf, ngx_array_t *ports,
     ngx_stream_conf_port_t  *port;
     ngx_stream_conf_addr_t  *addr;
 
-    sa = &listen->sockaddr.sockaddr;
+    sa = listen->sockaddr;
     p = ngx_inet_get_port(sa);
 
     port = ports->elts;
@@ -476,7 +476,7 @@ ngx_stream_optimize_servers(ngx_conf_t *cf, ngx_array_t *ports)
                 continue;
             }
 
-            ls = ngx_create_listening(cf, &addr[i].opt.sockaddr.sockaddr,
+            ls = ngx_create_listening(cf, addr[i].opt.sockaddr,
                                       addr[i].opt.socklen);
             if (ls == NULL) {
                 return NGX_CONF_ERROR;
@@ -551,12 +551,9 @@ static ngx_int_t
 ngx_stream_add_addrs(ngx_conf_t *cf, ngx_stream_port_t *stport,
     ngx_stream_conf_addr_t *addr)
 {
-    u_char                *p;
-    size_t                 len;
     ngx_uint_t             i;
     struct sockaddr_in    *sin;
     ngx_stream_in_addr_t  *addrs;
-    u_char                 buf[NGX_SOCKADDR_STRLEN];
 
     stport->addrs = ngx_pcalloc(cf->pool,
                                 stport->naddrs * sizeof(ngx_stream_in_addr_t));
@@ -568,7 +565,7 @@ ngx_stream_add_addrs(ngx_conf_t *cf, ngx_stream_port_t *stport,
 
     for (i = 0; i < stport->naddrs; i++) {
 
-        sin = &addr[i].opt.sockaddr.sockaddr_in;
+        sin = (struct sockaddr_in *) addr[i].opt.sockaddr;
         addrs[i].addr = sin->sin_addr.s_addr;
 
         addrs[i].conf.ctx = addr[i].opt.ctx;
@@ -576,19 +573,7 @@ ngx_stream_add_addrs(ngx_conf_t *cf, ngx_stream_port_t *stport,
         addrs[i].conf.ssl = addr[i].opt.ssl;
 #endif
         addrs[i].conf.proxy_protocol = addr[i].opt.proxy_protocol;
-
-        len = ngx_sock_ntop(&addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen,
-                            buf, NGX_SOCKADDR_STRLEN, 1);
-
-        p = ngx_pnalloc(cf->pool, len);
-        if (p == NULL) {
-            return NGX_ERROR;
-        }
-
-        ngx_memcpy(p, buf, len);
-
-        addrs[i].conf.addr_text.len = len;
-        addrs[i].conf.addr_text.data = p;
+        addrs[i].conf.addr_text = addr[i].opt.addr_text;
     }
 
     return NGX_OK;
@@ -601,12 +586,9 @@ static ngx_int_t
 ngx_stream_add_addrs6(ngx_conf_t *cf, ngx_stream_port_t *stport,
     ngx_stream_conf_addr_t *addr)
 {
-    u_char                 *p;
-    size_t                  len;
     ngx_uint_t              i;
     struct sockaddr_in6    *sin6;
     ngx_stream_in6_addr_t  *addrs6;
-    u_char                  buf[NGX_SOCKADDR_STRLEN];
 
     stport->addrs = ngx_pcalloc(cf->pool,
                                 stport->naddrs * sizeof(ngx_stream_in6_addr_t));
@@ -618,7 +600,7 @@ ngx_stream_add_addrs6(ngx_conf_t *cf, ngx_stream_port_t *stport,
 
     for (i = 0; i < stport->naddrs; i++) {
 
-        sin6 = &addr[i].opt.sockaddr.sockaddr_in6;
+        sin6 = (struct sockaddr_in6 *) addr[i].opt.sockaddr;
         addrs6[i].addr6 = sin6->sin6_addr;
 
         addrs6[i].conf.ctx = addr[i].opt.ctx;
@@ -626,19 +608,7 @@ ngx_stream_add_addrs6(ngx_conf_t *cf, ngx_stream_port_t *stport,
         addrs6[i].conf.ssl = addr[i].opt.ssl;
 #endif
         addrs6[i].conf.proxy_protocol = addr[i].opt.proxy_protocol;
-
-        len = ngx_sock_ntop(&addr[i].opt.sockaddr.sockaddr, addr[i].opt.socklen,
-                            buf, NGX_SOCKADDR_STRLEN, 1);
-
-        p = ngx_pnalloc(cf->pool, len);
-        if (p == NULL) {
-            return NGX_ERROR;
-        }
-
-        ngx_memcpy(p, buf, len);
-
-        addrs6[i].conf.addr_text.len = len;
-        addrs6[i].conf.addr_text.data = p;
+        addrs6[i].conf.addr_text = addr[i].opt.addr_text;
     }
 
     return NGX_OK;

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream.h (+2 -1) 99%
===================================================================
--- vendor/nginx-1.15.8/src/stream/ngx_stream.h    2019-03-25 12:44:08 +0900 (09d245939)
+++ vendor/nginx-1.15.10/src/stream/ngx_stream.h    2019-03-27 11:40:45 +0900 (57e73e046)
@@ -41,8 +41,9 @@ typedef struct {
 
 
 typedef struct {
-    ngx_sockaddr_t                 sockaddr;
+    struct sockaddr               *sockaddr;
     socklen_t                      socklen;
+    ngx_str_t                      addr_text;
 
     /* server ctx */
     ngx_stream_conf_ctx_t         *ctx;

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_access_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_core_module.c (+33 -42) 93%
===================================================================
--- vendor/nginx-1.15.8/src/stream/ngx_stream_core_module.c    2019-03-25 12:44:08 +0900 (3c4027b77)
+++ vendor/nginx-1.15.10/src/stream/ngx_stream_core_module.c    2019-03-27 11:40:45 +0900 (9b6afe974)
@@ -577,7 +577,7 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
     ngx_str_t                    *value, size;
     ngx_url_t                     u;
-    ngx_uint_t                    i, backlog;
+    ngx_uint_t                    i, n, backlog;
     ngx_stream_listen_t          *ls, *als;
     ngx_stream_core_main_conf_t  *cmcf;
 
@@ -602,21 +602,17 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
     cmcf = ngx_stream_conf_get_module_main_conf(cf, ngx_stream_core_module);
 
-    ls = ngx_array_push(&cmcf->listen);
+    ls = ngx_array_push_n(&cmcf->listen, u.naddrs);
     if (ls == NULL) {
         return NGX_CONF_ERROR;
     }
 
     ngx_memzero(ls, sizeof(ngx_stream_listen_t));
 
-    ngx_memcpy(&ls->sockaddr.sockaddr, &u.sockaddr, u.socklen);
-
-    ls->socklen = u.socklen;
     ls->backlog = NGX_LISTEN_BACKLOG;
     ls->rcvbuf = -1;
     ls->sndbuf = -1;
     ls->type = SOCK_STREAM;
-    ls->wildcard = u.wildcard;
     ls->ctx = cf->ctx;
 
 #if (NGX_HAVE_INET6)
@@ -688,35 +684,20 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
         if (ngx_strncmp(value[i].data, "ipv6only=o", 10) == 0) {
 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY)
-            size_t  len;
-            u_char  buf[NGX_SOCKADDR_STRLEN];
-
-            if (ls->sockaddr.sockaddr.sa_family == AF_INET6) {
-
-                if (ngx_strcmp(&value[i].data[10], "n") == 0) {
-                    ls->ipv6only = 1;
-
-                } else if (ngx_strcmp(&value[i].data[10], "ff") == 0) {
-                    ls->ipv6only = 0;
-
-                } else {
-                    ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                                       "invalid ipv6only flags \"%s\"",
-                                       &value[i].data[9]);
-                    return NGX_CONF_ERROR;
-                }
+            if (ngx_strcmp(&value[i].data[10], "n") == 0) {
+                ls->ipv6only = 1;
 
-                ls->bind = 1;
+            } else if (ngx_strcmp(&value[i].data[10], "ff") == 0) {
+                ls->ipv6only = 0;
 
             } else {
-                len = ngx_sock_ntop(&ls->sockaddr.sockaddr, ls->socklen, buf,
-                                    NGX_SOCKADDR_STRLEN, 1);
-
                 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                                   "ipv6only is not supported "
-                                   "on addr \"%*s\", ignored", len, buf);
+                                   "invalid ipv6only flags \"%s\"",
+                                   &value[i].data[9]);
+                return NGX_CONF_ERROR;
             }
 
+            ls->bind = 1;
             continue;
 #else
             ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
@@ -882,21 +863,31 @@ ngx_stream_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 
     als = cmcf->listen.elts;
 
-    for (i = 0; i < cmcf->listen.nelts - 1; i++) {
-        if (ls->type != als[i].type) {
-            continue;
-        }
+    for (n = 0; n < u.naddrs; n++) {
+        ls[n] = ls[0];
 
-        if (ngx_cmp_sockaddr(&als[i].sockaddr.sockaddr, als[i].socklen,
-                             &ls->sockaddr.sockaddr, ls->socklen, 1)
-            != NGX_OK)
-        {
-            continue;
-        }
+        ls[n].sockaddr = u.addrs[n].sockaddr;
+        ls[n].socklen = u.addrs[n].socklen;
+        ls[n].addr_text = u.addrs[n].name;
+        ls[n].wildcard = ngx_inet_wildcard(ls[n].sockaddr);
 
-        ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
-                           "duplicate \"%V\" address and port pair", &u.url);
-        return NGX_CONF_ERROR;
+        for (i = 0; i < cmcf->listen.nelts - u.naddrs + n; i++) {
+            if (ls[n].type != als[i].type) {
+                continue;
+            }
+
+            if (ngx_cmp_sockaddr(als[i].sockaddr, als[i].socklen,
+                                 ls[n].sockaddr, ls[n].socklen, 1)
+                != NGX_OK)
+            {
+                continue;
+            }
+
+            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
+                               "duplicate \"%V\" address and port pair",
+                               &ls[n].addr_text);
+            return NGX_CONF_ERROR;
+        }
     }
 
     return NGX_CONF_OK;

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_geo_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_geoip_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_handler.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_limit_conn_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_log_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_map_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_proxy_module.c (+4 -3) 99%
===================================================================
--- vendor/nginx-1.15.8/src/stream/ngx_stream_proxy_module.c    2019-03-25 12:44:08 +0900 (094931355)
+++ vendor/nginx-1.15.10/src/stream/ngx_stream_proxy_module.c    2019-03-27 11:40:45 +0900 (127c8a4a4)
@@ -1593,7 +1593,7 @@ ngx_stream_proxy_process(ngx_stream_session_t *s, ngx_uint_t from_upstream,
                     break;
                 }
 
-                if ((off_t) size > limit) {
+                if (c->type == SOCK_STREAM && (off_t) size > limit) {
                     size = (size_t) limit;
                 }
             }
@@ -1667,13 +1667,13 @@ ngx_stream_proxy_process(ngx_stream_session_t *s, ngx_uint_t from_upstream,
 
     flags = src->read->eof ? NGX_CLOSE_EVENT : 0;
 
-    if (!src->shared && ngx_handle_read_event(src->read, flags) != NGX_OK) {
+    if (ngx_handle_read_event(src->read, flags) != NGX_OK) {
         ngx_stream_proxy_finalize(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
         return;
     }
 
     if (dst) {
-        if (!dst->shared && ngx_handle_write_event(dst->write, 0) != NGX_OK) {
+        if (ngx_handle_write_event(dst->write, 0) != NGX_OK) {
             ngx_stream_proxy_finalize(s, NGX_STREAM_INTERNAL_SERVER_ERROR);
             return;
         }
@@ -2096,6 +2096,7 @@ ngx_stream_proxy_set_ssl(ngx_conf_t *cf, ngx_stream_proxy_srv_conf_t *pscf)
 
     cln = ngx_pool_cleanup_add(cf->pool, 0);
     if (cln == NULL) {
+        ngx_ssl_cleanup_ctx(pscf->ssl);
         return NGX_ERROR;
     }
 

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_realip_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_return_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_script.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_script.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_split_clients_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_ssl_module.c (+197 -5) 83%
===================================================================
--- vendor/nginx-1.15.8/src/stream/ngx_stream_ssl_module.c    2019-03-25 12:44:08 +0900 (dcc33e1ce)
+++ vendor/nginx-1.15.10/src/stream/ngx_stream_ssl_module.c    2019-03-27 11:40:45 +0900 (ec9524e07)
@@ -22,6 +22,12 @@ static ngx_int_t ngx_stream_ssl_handler(ngx_stream_session_t *s);
 static ngx_int_t ngx_stream_ssl_init_connection(ngx_ssl_t *ssl,
     ngx_connection_t *c);
 static void ngx_stream_ssl_handshake_handler(ngx_connection_t *c);
+#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
+int ngx_stream_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg);
+#endif
+#ifdef SSL_R_CERT_CB_ERROR
+static int ngx_stream_ssl_certificate(ngx_ssl_conn_t *ssl_conn, void *arg);
+#endif
 static ngx_int_t ngx_stream_ssl_static_variable(ngx_stream_session_t *s,
     ngx_stream_variable_value_t *v, uintptr_t data);
 static ngx_int_t ngx_stream_ssl_variable(ngx_stream_session_t *s,
@@ -32,6 +38,9 @@ static void *ngx_stream_ssl_create_conf(ngx_conf_t *cf);
 static char *ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent,
     void *child);
 
+static ngx_int_t ngx_stream_ssl_compile_certificates(ngx_conf_t *cf,
+    ngx_stream_ssl_conf_t *conf);
+
 static char *ngx_stream_ssl_password_file(ngx_conf_t *cf, ngx_command_t *cmd,
     void *conf);
 static char *ngx_stream_ssl_session_cache(ngx_conf_t *cf, ngx_command_t *cmd,
@@ -408,6 +417,73 @@ ngx_stream_ssl_handshake_handler(ngx_connection_t *c)
 }
 
 
+#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
+
+int
+ngx_stream_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg)
+{
+    return SSL_TLSEXT_ERR_OK;
+}
+
+#endif
+
+
+#ifdef SSL_R_CERT_CB_ERROR
+
+int
+ngx_stream_ssl_certificate(ngx_ssl_conn_t *ssl_conn, void *arg)
+{
+    ngx_str_t                    cert, key;
+    ngx_uint_t                   i, nelts;
+    ngx_connection_t            *c;
+    ngx_stream_session_t        *s;
+    ngx_stream_ssl_conf_t       *sslcf;
+    ngx_stream_complex_value_t  *certs, *keys;
+
+    c = ngx_ssl_get_connection(ssl_conn);
+
+    if (c->ssl->handshaked) {
+        return 0;
+    }
+
+    s = c->data;
+
+    sslcf = arg;
+
+    nelts = sslcf->certificate_values->nelts;
+    certs = sslcf->certificate_values->elts;
+    keys = sslcf->certificate_key_values->elts;
+
+    for (i = 0; i < nelts; i++) {
+
+        if (ngx_stream_complex_value(s, &certs[i], &cert) != NGX_OK) {
+            return 0;
+        }
+
+        ngx_log_debug1(NGX_LOG_DEBUG_STREAM, c->log, 0,
+                       "ssl cert: \"%s\"", cert.data);
+
+        if (ngx_stream_complex_value(s, &keys[i], &key) != NGX_OK) {
+            return 0;
+        }
+
+        ngx_log_debug1(NGX_LOG_DEBUG_STREAM, c->log, 0,
+                       "ssl key: \"%s\"", key.data);
+
+        if (ngx_ssl_connection_certificate(c, c->pool, &cert, &key,
+                                           sslcf->passwords)
+            != NGX_OK)
+        {
+            return 0;
+        }
+    }
+
+    return 1;
+}
+
+#endif
+
+
 static ngx_int_t
 ngx_stream_ssl_static_variable(ngx_stream_session_t *s,
     ngx_stream_variable_value_t *v, uintptr_t data)
@@ -505,6 +581,7 @@ ngx_stream_ssl_create_conf(ngx_conf_t *cf)
      *
      *     scf->listen = 0;
      *     scf->protocols = 0;
+     *     scf->certificate_values = NULL;
      *     scf->dhparam = { 0, NULL };
      *     scf->ecdh_curve = { 0, NULL };
      *     scf->client_certificate = { 0, NULL };
@@ -613,19 +690,50 @@ ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child)
 
     cln = ngx_pool_cleanup_add(cf->pool, 0);
     if (cln == NULL) {
+        ngx_ssl_cleanup_ctx(&conf->ssl);
         return NGX_CONF_ERROR;
     }
 
     cln->handler = ngx_ssl_cleanup_ctx;
     cln->data = &conf->ssl;
 
-    if (ngx_ssl_certificates(cf, &conf->ssl, conf->certificates,
-                             conf->certificate_keys, conf->passwords)
-        != NGX_OK)
-    {
+#ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
+    SSL_CTX_set_tlsext_servername_callback(conf->ssl.ctx,
+                                           ngx_stream_ssl_servername);
+#endif
+
+    if (ngx_stream_ssl_compile_certificates(cf, conf) != NGX_OK) {
         return NGX_CONF_ERROR;
     }
 
+    if (conf->certificate_values) {
+
+#ifdef SSL_R_CERT_CB_ERROR
+
+        /* install callback to lookup certificates */
+
+        SSL_CTX_set_cert_cb(conf->ssl.ctx, ngx_stream_ssl_certificate, conf);
+
+#else
+        ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                      "variables in "
+                      "\"ssl_certificate\" and \"ssl_certificate_key\" "
+                      "directives are not supported on this platform");
+        return NGX_CONF_ERROR;
+#endif
+
+    } else {
+
+        /* configure certificates */
+
+        if (ngx_ssl_certificates(cf, &conf->ssl, conf->certificates,
+                                 conf->certificate_keys, conf->passwords)
+            != NGX_OK)
+        {
+            return NGX_CONF_ERROR;
+        }
+    }
+
     if (ngx_ssl_ciphers(cf, &conf->ssl, &conf->ciphers,
                         conf->prefer_server_ciphers)
         != NGX_OK)
@@ -678,7 +786,7 @@ ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child)
     }
 
     if (ngx_ssl_session_cache(&conf->ssl, &ngx_stream_ssl_sess_id_ctx,
-                              conf->builtin_session_cache,
+                              conf->certificates, conf->builtin_session_cache,
                               conf->shm_zone, conf->session_timeout)
         != NGX_OK)
     {
@@ -707,6 +815,90 @@ ngx_stream_ssl_merge_conf(ngx_conf_t *cf, void *parent, void *child)
 }
 
 
+static ngx_int_t
+ngx_stream_ssl_compile_certificates(ngx_conf_t *cf,
+    ngx_stream_ssl_conf_t *conf)
+{
+    ngx_str_t                           *cert, *key;
+    ngx_uint_t                           i, nelts;
+    ngx_stream_complex_value_t          *cv;
+    ngx_stream_compile_complex_value_t   ccv;
+
+    cert = conf->certificates->elts;
+    key = conf->certificate_keys->elts;
+    nelts = conf->certificates->nelts;
+
+    for (i = 0; i < nelts; i++) {
+
+        if (ngx_stream_script_variables_count(&cert[i])) {
+            goto found;
+        }
+
+        if (ngx_stream_script_variables_count(&key[i])) {
+            goto found;
+        }
+    }
+
+    return NGX_OK;
+
+found:
+
+    conf->certificate_values = ngx_array_create(cf->pool, nelts,
+                                           sizeof(ngx_stream_complex_value_t));
+    if (conf->certificate_values == NULL) {
+        return NGX_ERROR;
+    }
+
+    conf->certificate_key_values = ngx_array_create(cf->pool, nelts,
+                                           sizeof(ngx_stream_complex_value_t));
+    if (conf->certificate_key_values == NULL) {
+        return NGX_ERROR;
+    }
+
+    for (i = 0; i < nelts; i++) {
+
+        cv = ngx_array_push(conf->certificate_values);
+        if (cv == NULL) {
+            return NGX_ERROR;
+        }
+
+        ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t));
+
+        ccv.cf = cf;
+        ccv.value = &cert[i];
+        ccv.complex_value = cv;
+        ccv.zero = 1;
+
+        if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) {
+            return NGX_ERROR;
+        }
+
+        cv = ngx_array_push(conf->certificate_key_values);
+        if (cv == NULL) {
+            return NGX_ERROR;
+        }
+
+        ngx_memzero(&ccv, sizeof(ngx_stream_compile_complex_value_t));
+
+        ccv.cf = cf;
+        ccv.value = &key[i];
+        ccv.complex_value = cv;
+        ccv.zero = 1;
+
+        if (ngx_stream_compile_complex_value(&ccv) != NGX_OK) {
+            return NGX_ERROR;
+        }
+    }
+
+    conf->passwords = ngx_ssl_preserve_passwords(cf, conf->passwords);
+    if (conf->passwords == NULL) {
+        return NGX_ERROR;
+    }
+
+    return NGX_OK;
+}
+
+
 static char *
 ngx_stream_ssl_password_file(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
 {

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_ssl_module.h (+3 -0) 92%
===================================================================
--- vendor/nginx-1.15.8/src/stream/ngx_stream_ssl_module.h    2019-03-25 12:44:08 +0900 (9f8f01cf1)
+++ vendor/nginx-1.15.10/src/stream/ngx_stream_ssl_module.h    2019-03-27 11:40:45 +0900 (6cb4140a8)
@@ -34,6 +34,9 @@ typedef struct {
     ngx_array_t     *certificates;
     ngx_array_t     *certificate_keys;
 
+    ngx_array_t     *certificate_values;
+    ngx_array_t     *certificate_key_values;
+
     ngx_str_t        dhparam;
     ngx_str_t        ecdh_curve;
     ngx_str_t        client_certificate;

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_ssl_preread_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_upstream.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_upstream.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_hash_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_least_conn_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_random_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_round_robin.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_round_robin.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_upstream_zone_module.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_variables.c (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_variables.h (+0 -0) 100%
===================================================================

  Renamed: vendor/nginx-1.15.10/src/stream/ngx_stream_write_filter_module.c (+0 -0) 100%
===================================================================



More information about the Groonga-commit mailing list
Back to archive index