# HG changeset patch # User duke # Date 1499272054 -7200 # Node ID 1c3fdd0c426861d4da52cd1b9bf235a9363cc12b # Parent 540a11e15fbbf5999e002e0afd715aa7dcf36b6e# Parent 46a129d8f29be3549c57703a0cfedfbb42bde3f1 Merge diff -r 540a11e15fbb -r 1c3fdd0c4268 .hgtags-top-repo --- a/.hgtags-top-repo Wed Oct 31 18:35:56 2012 -0700 +++ b/.hgtags-top-repo Wed Jul 05 18:27:34 2017 +0200 @@ -183,3 +183,4 @@ dae9821589ccd2611bdf7084269b98e819091770 jdk8-b59 e07f499b9dccb529ecf74172cf6ac11a195ec57a jdk8-b60 20ff117b509075c3aec4ee3a57990ecd5db5df9c jdk8-b61 +8a3fe0ae06a8cc21347da5a18384b0aa6c2349f5 jdk8-b62 diff -r 540a11e15fbb -r 1c3fdd0c4268 NewMakefile.gmk --- a/NewMakefile.gmk Wed Oct 31 18:35:56 2012 -0700 +++ b/NewMakefile.gmk Wed Jul 05 18:27:34 2017 +0200 @@ -31,8 +31,9 @@ CP=cp ECHO=echo MKDIR=mkdir +PRINTF=printf PWD=pwd -SH=sh +TAR=tar ifeq ($(PLATFORM),windows) ZIP=zip else @@ -63,9 +64,47 @@ $(ECHO) "ERROR: No configurations to build"; exit 1; \ fi @for bdir in $(dir $(ALL_MAKEFILES)) ; do \ - $(ECHO) "$(CD) $${bdir} && $(MAKE) $(EXTRA_MAKE_ARGS) $@" ; \ - $(CD) $${bdir} && $(MAKE) $(EXTRA_MAKE_ARGS) $@ ; \ + $(ECHO) "$(CD) $${bdir} && $(MAKE) $@" ; \ + $(CD) $${bdir} && $(MAKE) $@ ; \ + done + +# TBD: Deploy input +$(BUILD_DIR_ROOT)/.deploy_input: + @if [ "$(ALL_MAKEFILES)" = "" ] ; then \ + $(ECHO) "ERROR: No configurations to build"; exit 1; \ + fi + @for bdir in $(dir $(ALL_MAKEFILES)) ; do \ + if [ deploy/make/Makefile ] ; then \ + echo "Attempting deploy build." ; \ + ( \ + $(RM) -r $${bdir}/deploy_input ; \ + $(MKDIR) -p $${bdir}/deploy_input ; \ + ( $(CD) $${bdir}/images && $(TAR) -cf - j2sdk-image j2re-image ) \ + | ( $(CD) $${bdir}/deploy_input && $(TAR) -xf - ) ; \ + ) ; \ + fi; \ done + touch $@ + +# TBD: Deploy images +deploy: $(BUILD_DIR_ROOT)/.deploy_input + @if [ "$(ALL_MAKEFILES)" = "" ] ; then \ + $(ECHO) "ERROR: No configurations to build"; exit 1; \ + fi + @for bdir in $(dir $(ALL_MAKEFILES)) ; do \ + if [ deploy/make/Makefile ] ; then \ + echo "Attempting deploy build." ; \ + ( \ + $(CD) deploy/make && \ + $(MAKE) \ + ABS_OUTPUTDIR=$${bdir}/deploy_input \ + OUTPUTDIR=$${bdir}/deploy_input \ + ) ; \ + fi; \ + done + +# TBD: Install bundles +install: # Bundle creation bundles: @@ -91,8 +130,8 @@ checks: @$(ECHO) "No checks yet" -# Keep track of phony targets -PHONY_LIST += all images clean clobber checks +# Keep track of user targets +USER_TARGETS += all deploy install images clean clobber checks ########################################################################### # To help in adoption of the new configure&&make build process, a bridge @@ -102,32 +141,18 @@ bridgeBuild: bridge2configure images # Bridge from old Makefile ALT settings to configure options -bridge2configure: .bridge2configureOpts - $(CD) common/makefiles && sh ../autoconf/configure $(strip $(shell $(CAT) $<)) +bridge2configure: $(BUILD_DIR_ROOT)/.bridge2configureOpts + bash ./configure $(strip $(shell $(CAT) $<)) # Create a file with configure options created from old Makefile mechanisms. -.bridge2configureOpts: .bridge2configureOptsLatest +$(BUILD_DIR_ROOT)/.bridge2configureOpts: $(BUILD_DIR_ROOT)/.bridge2configureOptsLatest $(RM) $@ $(CP) $< $@ -# In case make was invoked from a specific path -_MAKE_COMMAND_PATH:=$(firstword $(MAKE)) -ifneq ($(dir $(_MAKE_COMMAND_PATH)),./) - # This could be removed someday if JPRT was fixed and we could assume that - # the path to make was always in PATH. - MAKE_BINDIR:=$(call UnixPath,$(dir $(_MAKE_COMMAND_PATH))) - NEWPATH:=$(MAKE_BINDIR):${PATH} - PATH:=$(NEWPATH) - export PATH - MAKE_COMMAND=$(MAKE_BINDIR)/$(notdir $(_MAKE_COMMAND_PATH)) -else - MAKE_COMMAND=$(_MAKE_COMMAND_PATH) -endif - # Use this file to only change when obvious things have changed -.bridge2configureOptsLatest: FRC +$(BUILD_DIR_ROOT)/.bridge2configureOptsLatest: FRC $(RM) $@.tmp - @$(ECHO) " MAKE=$(MAKE_COMMAND) " >> $@.tmp + $(MKDIR) -p $(BUILD_DIR_ROOT) @$(ECHO) " --with-debug-level=$(if $(DEBUG_LEVEL),$(DEBUG_LEVEL),release) " >> $@.tmp ifdef ARCH_DATA_MODEL @$(ECHO) " --with-target-bits=$(ARCH_DATA_MODEL) " >> $@.tmp @@ -156,20 +181,30 @@ # Clobber all the built files clobber:: bridge2clobber bridge2clobber:: - $(RM) .bridge2* + $(RM) $(BUILD_DIR_ROOT)/.bridge2* + $(RM) $(BUILD_DIR_ROOT)/.deploy_input # Keep track of phony targets PHONY_LIST += bridge2configure bridgeBuild bridge2clobber ########################################################################### +# Sanity checks (history target) +# + +sanity: checks + +# Keep track of user targets +USER_TARGETS += sanity + +########################################################################### # Javadocs # javadocs: cd common/makefiles && $(MAKE) -f MakefileJavadoc.gmk -# Keep track of phony targets -PHONY_LIST += javadocs +# Keep track of user targets +USER_TARGETS += javadocs ########################################################################### # JPRT targets @@ -190,7 +225,6 @@ jprt_build_debug: BUILD_DIRNAME=*-debug jprt_build_debug: jprt_build_generic -jprt_build_generic: EXTRA_MAKE_ARGS=LOG=nofile,info jprt_build_generic: $(JPRT_ARCHIVE_BUNDLE) $(JPRT_ARCHIVE_BUNDLE): bridgeBuild bundles @@ -203,9 +237,59 @@ jprt_build_generic ########################################################################### +# Help target + +HELP_FORMAT=%12s%s\n + +help: + @$(PRINTF) "# JDK Makefile\n" + @$(PRINTF) "#\n" + @$(PRINTF) "# Usage: make [Target]\n" + @$(PRINTF) "#\n" + @$(PRINTF) "# $(HELP_FORMAT)" "Target " "Description" + @$(PRINTF) "# $(HELP_FORMAT)" "------ " "-----------" + @for i in $(USER_TARGETS) ; do \ + $(MAKE) help_$${i} ; \ + done + @$(PRINTF) "#\n" + +help_all: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Build the entire jdk but not the images" +help_images: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Create the jdk images for the builds" +help_deploy: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Create the jdk deploy images from the jdk images" +help_install: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Create the jdk install bundles from the deploy images" +help_clean: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Clean and prepare for a fresh build from scratch" +help_clobber: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Clean and also purge any hidden derived data" +help_checks: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Perform various checks to make sure we can build" +help_sanity: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Same as 'make checks'" +help_javadocs: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Build the javadocs" +help_help: + @$(PRINTF) "# $(HELP_FORMAT)" "$(subst help_,,$@) - " \ + "Print out the help messages" + +# Keep track of user targets +USER_TARGETS += help + +########################################################################### # Phony targets -.PHONY: $(PHONY_LIST) +.PHONY: $(PHONY_LIST) $(USER_TARGETS) # Force target FRC: - diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/Makefile.in --- a/common/autoconf/Makefile.in Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/Makefile.in Wed Jul 05 18:27:34 2017 +0200 @@ -21,6 +21,7 @@ # questions. # -# Generated Makefile @DATE_WHEN_CONFIGURED@ +# This Makefile was generated by configure @DATE_WHEN_CONFIGURED@ +# GENERATED FILE, DO NOT EDIT SPEC:=@OUTPUT_ROOT@/spec.gmk include @SRC_ROOT@/common/makefiles/Makefile diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/autogen.sh --- a/common/autoconf/autogen.sh Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/autogen.sh Wed Jul 05 18:27:34 2017 +0200 @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -29,14 +29,11 @@ # date +%s is not available on Solaris, use this workaround # from http://solarisjedi.blogspot.co.uk/2006/06/solaris-date-command-and-epoch-time.html TIMESTAMP=`/usr/bin/truss /usr/bin/date 2>&1 | nawk -F= '/^time\(\)/ {gsub(/ /,"",$2);print $2}'` - # On Solaris /bin/sh doesn't support test -e but /usr/bin/test does. - TEST=`which test` else TIMESTAMP=`date +%s` - TEST="test" fi -if $TEST "$CUSTOM_CONFIG_DIR" = ""; then +if test "x$CUSTOM_CONFIG_DIR" = "x"; then custom_script_dir="$script_dir/../../jdk/make/closed/autoconf" else custom_script_dir=$CUSTOM_CONFIG_DIR @@ -44,16 +41,22 @@ custom_hook=$custom_script_dir/custom-hook.m4 +if test "x`which autoconf 2> /dev/null`" = x; then + echo You need autoconf installed to be able to regenerate the configure script + echo Error: Cannot find autoconf 1>&2 + exit 1 +fi + echo Generating generated-configure.sh cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | autoconf -W all -I$script_dir - > $script_dir/generated-configure.sh rm -rf autom4te.cache -if $TEST -e $custom_hook; then +if test -e $custom_hook; then echo Generating custom generated-configure.sh # We have custom sources available; also generate configure script # with custom hooks compiled in. cat $script_dir/configure.ac | sed -e "s|@DATE_WHEN_GENERATED@|$TIMESTAMP|" | \ - sed -e "s|AC_DEFUN_ONCE(\[CUSTOM_HOOK\])|m4_include([$custom_hook])|" | autoconf -W all -I$script_dir - > $custom_script_dir/generated-configure.sh + sed -e "s|#CUSTOM_AUTOCONF_INCLUDE|m4_include([$custom_hook])|" | autoconf -W all -I$script_dir - > $custom_script_dir/generated-configure.sh rm -rf autom4te.cache else echo No custom hook found: $custom_hook diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/basics.m4 --- a/common/autoconf/basics.m4 Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/basics.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -34,84 +34,102 @@ fi ]) -AC_DEFUN([SET_FULL_PATH], +# This will make sure the given variable points to a full and proper +# path. This means: +# 1) There will be no spaces in the path. On posix platforms, +# spaces in the path will result in an error. On Windows, +# the path will be rewritten using short-style to be space-free. +# 2) The path will be absolute, and it will be in unix-style (on +# cygwin). +# $1: The name of the variable to fix +AC_DEFUN([BASIC_FIXUP_PATH], [ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="[$]$1" - car="${tmp%% *}" - tmp="[$]$1 EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - SET_FULL_PATH_SPACESAFE(car) - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + BASIC_FIXUP_PATH_CYGWIN($1) + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + BASIC_FIXUP_PATH_MSYS($1) + else + # We're on a posix platform. Hooray! :) + path="[$]$1" + + if test ! -f "$path" && test ! -d "$path"; then + AC_MSG_ERROR([The path of $1, which resolves as "$path", is not found.]) fi - if test "x$cdr" != xEOL; then - $1="$car ${cdr% *}" - else - $1="$car" + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.]) + AC_MSG_ERROR([Spaces are not allowed in this path.]) fi + fi ]) -AC_DEFUN([SPACESAFE], +# This will make sure the given variable points to a executable +# with a full and proper path. This means: +# 1) There will be no spaces in the path. On posix platforms, +# spaces in the path will result in an error. On Windows, +# the path will be rewritten using short-style to be space-free. +# 2) The path will be absolute, and it will be in unix-style (on +# cygwin). +# Any arguments given to the executable is preserved. +# If the input variable does not have a directory specification, then +# it need to be in the PATH. +# $1: The name of the variable to fix +AC_DEFUN([BASIC_FIXUP_EXECUTABLE], [ - # Fail with message $2 if var $1 contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "[$]$1" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - $1=`$CYGPATH -s -m -a "[$]$1"` - # Now it's case insensitive; let's make it lowercase to improve readability - $1=`$ECHO "[$]$1" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - $1=`$CYGPATH -u "[$]$1"` - else - AC_MSG_ERROR([You cannot have spaces in $2! "[$]$1"]) + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + BASIC_FIXUP_EXECUTABLE_CYGWIN($1) + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + BASIC_FIXUP_EXECUTABLE_MSYS($1) + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="[$]$1" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + AC_MSG_NOTICE([Resolving $1 (as $path) with 'which' failed, using $path directly.]) + new_path="$path" + else + AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.]) + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + AC_MSG_NOTICE([This might be caused by spaces in the path, which is not allowed.]) fi + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + $1="$new_complete" + AC_MSG_NOTICE([Rewriting $1 to "$new_complete"]) + fi ]) -AC_DEFUN([SET_FULL_PATH_SPACESAFE], -[ - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="[$]$1" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "[$]$1"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - $1="$tmp" -]) - -AC_DEFUN([REMOVE_SYMBOLIC_LINKS], +AC_DEFUN([BASIC_REMOVE_SYMBOLIC_LINKS], [ if test "x$OPENJDK_BUILD_OS" != xwindows; then # Follow a chain of symbolic links. Use readlink # where it exists, else fall back to horribly # complicated shell code. - AC_PATH_PROG(READLINK, readlink) if test "x$READLINK_TESTED" != yes; then # On MacOSX there is a readlink tool with a different # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` if test "x$ISGNU" = x; then # A readlink that we do not know how to use. # Are there other non-GNU readlinks out there? @@ -125,23 +143,25 @@ else STARTDIR=$PWD COUNTER=0 - DIR=`dirname [$]$1` - FIL=`basename [$]$1` + sym_link_dir=`$DIRNAME [$]$1` + sym_link_file=`$BASENAME [$]$1` while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` if test "x$ISLINK" == x; then # This is not a symbolic link! We are done! break fi # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` let COUNTER=COUNTER+1 done cd $STARTDIR - $1=$DIR/$FIL + $1=$sym_link_dir/$sym_link_file fi fi ]) @@ -152,6 +172,107 @@ AC_SUBST(CONFIGURE_COMMAND_LINE) DATE_WHEN_CONFIGURED=`LANG=C date` AC_SUBST(DATE_WHEN_CONFIGURED) +AC_MSG_NOTICE([Configuration created at $DATE_WHEN_CONFIGURED.]) +AC_MSG_NOTICE([configure script generated at timestamp $DATE_WHEN_GENERATED.]) +]) + +# Test that variable $1 denoting a program is not empty. If empty, exit with an error. +# $1: variable to check +# $2: executable name to print in warning (optional) +AC_DEFUN([BASIC_CHECK_NONEMPTY], +[ + if test "x[$]$1" = x; then + if test "x$2" = x; then + PROG_NAME=translit($1,A-Z,a-z) + else + PROG_NAME=$2 + fi + AC_MSG_NOTICE([Could not find $PROG_NAME!]) + AC_MSG_ERROR([Cannot continue]) + fi +]) + +# Does AC_PATH_PROG followed by BASIC_CHECK_NONEMPTY. +# Arguments as AC_PATH_PROG: +# $1: variable to set +# $2: executable name to look for +AC_DEFUN([BASIC_REQUIRE_PROG], +[ + AC_PATH_PROGS($1, $2) + BASIC_CHECK_NONEMPTY($1, $2) +]) + +# Setup the most fundamental tools that relies on not much else to set up, +# but is used by much of the early bootstrap code. +AC_DEFUN_ONCE([BASIC_SETUP_FUNDAMENTAL_TOOLS], +[ + +# Start with tools that do not need have cross compilation support +# and can be expected to be found in the default PATH. These tools are +# used by configure. Nor are these tools expected to be found in the +# devkit from the builddeps server either, since they are +# needed to download the devkit. + +# First are all the simple required tools. +BASIC_REQUIRE_PROG(BASENAME, basename) +BASIC_REQUIRE_PROG(BASH, bash) +BASIC_REQUIRE_PROG(CAT, cat) +BASIC_REQUIRE_PROG(CHMOD, chmod) +BASIC_REQUIRE_PROG(CMP, cmp) +BASIC_REQUIRE_PROG(CP, cp) +BASIC_REQUIRE_PROG(CUT, cut) +BASIC_REQUIRE_PROG(DATE, date) +BASIC_REQUIRE_PROG(DIFF, [gdiff diff]) +BASIC_REQUIRE_PROG(DIRNAME, dirname) +BASIC_REQUIRE_PROG(ECHO, echo) +BASIC_REQUIRE_PROG(EXPR, expr) +BASIC_REQUIRE_PROG(FILE, file) +BASIC_REQUIRE_PROG(FIND, find) +BASIC_REQUIRE_PROG(HEAD, head) +BASIC_REQUIRE_PROG(LN, ln) +BASIC_REQUIRE_PROG(LS, ls) +BASIC_REQUIRE_PROG(MKDIR, mkdir) +BASIC_REQUIRE_PROG(MKTEMP, mktemp) +BASIC_REQUIRE_PROG(MV, mv) +BASIC_REQUIRE_PROG(PRINTF, printf) +BASIC_REQUIRE_PROG(THEPWDCMD, pwd) +BASIC_REQUIRE_PROG(RM, rm) +BASIC_REQUIRE_PROG(SH, sh) +BASIC_REQUIRE_PROG(SORT, sort) +BASIC_REQUIRE_PROG(TAIL, tail) +BASIC_REQUIRE_PROG(TAR, tar) +BASIC_REQUIRE_PROG(TEE, tee) +BASIC_REQUIRE_PROG(TOUCH, touch) +BASIC_REQUIRE_PROG(TR, tr) +BASIC_REQUIRE_PROG(UNAME, uname) +BASIC_REQUIRE_PROG(UNIQ, uniq) +BASIC_REQUIRE_PROG(WC, wc) +BASIC_REQUIRE_PROG(WHICH, which) +BASIC_REQUIRE_PROG(XARGS, xargs) + +# Then required tools that require some special treatment. +AC_PROG_AWK +BASIC_CHECK_NONEMPTY(AWK) +AC_PROG_GREP +BASIC_CHECK_NONEMPTY(GREP) +AC_PROG_EGREP +BASIC_CHECK_NONEMPTY(EGREP) +AC_PROG_FGREP +BASIC_CHECK_NONEMPTY(FGREP) +AC_PROG_SED +BASIC_CHECK_NONEMPTY(SED) + +AC_PATH_PROGS(NAWK, [nawk gawk awk]) +BASIC_CHECK_NONEMPTY(NAWK) + +# Always force rm. +RM="$RM -f" + +# These are not required on all platforms +AC_PATH_PROG(CYGPATH, cygpath) +AC_PATH_PROG(READLINK, readlink) +AC_PATH_PROG(DF, df) +AC_PATH_PROG(SETFILE, SetFile) ]) # Setup basic configuration paths, and platform-specific stuff related to PATHs. @@ -159,46 +280,37 @@ [ # Locate the directory of this script. SCRIPT="[$]0" -REMOVE_SYMBOLIC_LINKS(SCRIPT) -AUTOCONF_DIR=`dirname [$]0` +BASIC_REMOVE_SYMBOLIC_LINKS(SCRIPT) +AUTOCONF_DIR=`cd \`$DIRNAME $SCRIPT\`; $THEPWDCMD` # Where is the source? It is located two levels above the configure script. CURDIR="$PWD" cd "$AUTOCONF_DIR/../.." SRC_ROOT="`pwd`" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - SRC_ROOT_LENGTH=`pwd|wc -m` - if test $SRC_ROOT_LENGTH -gt 100; then - AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported]) - fi + +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + PATH_SEP=";" + BASIC_CHECK_PATHS_WINDOWS +else + PATH_SEP=":" fi + AC_SUBST(SRC_ROOT) +AC_SUBST(PATH_SEP) cd "$CURDIR" -SPACESAFE(SRC_ROOT,[the path to the source root]) -SPACESAFE(CURDIR,[the path to the current directory]) +BASIC_FIXUP_PATH(SRC_ROOT) +BASIC_FIXUP_PATH(CURDIR) if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then # Add extra search paths on solaris for utilities like ar and as etc... PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" fi -# For cygwin we need cygpath first, since it is used everywhere. -AC_PATH_PROG(CYGPATH, cygpath) -PATH_SEP=":" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) - fi - PATH_SEP=";" -fi -AC_SUBST(PATH_SEP) - # You can force the sys-root if the sys-root encoded into the cross compiler tools # is not correct. AC_ARG_WITH(sys-root, [AS_HELP_STRING([--with-sys-root], - [pass this sys-root to the compilers and linker (useful if the sys-root encoded in - the cross compiler tools is incorrect)])]) + [pass this sys-root to the compilers and tools (for cross-compiling)])]) if test "x$with_sys_root" != x; then SYS_ROOT=$with_sys_root @@ -208,7 +320,7 @@ AC_SUBST(SYS_ROOT) AC_ARG_WITH([tools-dir], [AS_HELP_STRING([--with-tools-dir], - [search this directory for (cross-compiling) compilers and tools])], [TOOLS_DIR=$with_tools_dir]) + [search this directory for compilers and tools (for cross-compiling)])], [TOOLS_DIR=$with_tools_dir]) AC_ARG_WITH([devkit], [AS_HELP_STRING([--with-devkit], [use this directory as base for tools-dir and sys-root (for cross-compiling)])], @@ -229,7 +341,7 @@ [ AC_ARG_WITH(conf-name, [AS_HELP_STRING([--with-conf-name], - [use this as the name of the configuration, overriding the generated default])], + [use this as the name of the configuration @<:@generated from important configuration options@:>@])], [ CONF_NAME=${with_conf_name} ]) # Test from where we are running configure, in or outside of src root. @@ -240,7 +352,7 @@ CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" fi OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" - mkdir -p "$OUTPUT_ROOT" + $MKDIR -p "$OUTPUT_ROOT" if test ! -d "$OUTPUT_ROOT"; then AC_MSG_ERROR([Could not create build directory $OUTPUT_ROOT]) fi @@ -253,9 +365,30 @@ CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` fi OUTPUT_ROOT="$CURDIR" -fi + + # WARNING: This might be a bad thing to do. You need to be sure you want to + # have a configuration in this directory. Do some sanity checks! -SPACESAFE(OUTPUT_ROOT,[the path to the output root]) + if test ! -e "$OUTPUT_ROOT/spec.gmk"; then + # If we have a spec.gmk, we have run here before and we are OK. Otherwise, check for + # other files + files_present=`$LS $OUTPUT_ROOT` + if test "x$files_present" != x; then + AC_MSG_NOTICE([Current directory is $CURDIR.]) + AC_MSG_NOTICE([Since this is not the source root, configure will output the configuration here]) + AC_MSG_NOTICE([(as opposed to creating a configuration in /build/).]) + AC_MSG_NOTICE([However, this directory is not empty. This is not allowed, since it could]) + AC_MSG_NOTICE([seriously mess up just about everything.]) + AC_MSG_NOTICE([Try 'cd $SRC_ROOT' and restart configure]) + AC_MSG_NOTICE([(or create a new empty directory and cd to it).]) + AC_MSG_ERROR([Will not continue creating configuration in $CURDIR]) + fi + fi +fi +AC_MSG_CHECKING([what configuration name to use]) +AC_MSG_RESULT([$CONF_NAME]) + +BASIC_FIXUP_PATH(OUTPUT_ROOT) AC_SUBST(SPEC, $OUTPUT_ROOT/spec.gmk) AC_SUBST(CONF_NAME, $CONF_NAME) @@ -287,7 +420,7 @@ # Setup default logging of stdout and stderr to build.log in the output root. BUILD_LOG='$(OUTPUT_ROOT)/build.log' BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' +BUILD_LOG_WRAPPER='$(BASH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' AC_SUBST(BUILD_LOG) AC_SUBST(BUILD_LOG_PREVIOUS) AC_SUBST(BUILD_LOG_WRAPPER) @@ -305,7 +438,6 @@ DESCRIPTION="$2" if test "x$MAKE_CANDIDATE" != x; then AC_MSG_NOTICE([Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION]) - SET_FULL_PATH(MAKE_CANDIDATE) MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` if test "x$IS_GNU_MAKE" = x; then @@ -314,8 +446,27 @@ IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[[12346789]]'` if test "x$IS_MODERN_MAKE" = x; then AC_MSG_NOTICE([Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring.]) - else - FOUND_MAKE=$MAKE_CANDIDATE + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + AC_MSG_ERROR([Unknown Windows environment]) + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + AC_MSG_NOTICE([Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring.]) + else + FOUND_MAKE=$MAKE_CANDIDATE + BASIC_FIXUP_EXECUTABLE(FOUND_MAKE) + fi fi fi fi @@ -330,7 +481,7 @@ if test ! -f "$MAKE"; then AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not found.]) fi - BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=]) + BASIC_CHECK_MAKE_VERSION("$MAKE", [user supplied MAKE=$MAKE]) if test "x$FOUND_MAKE" = x; then AC_MSG_ERROR([The specified make (by MAKE=$MAKE) is not GNU make 3.81 or newer.]) fi @@ -375,7 +526,7 @@ AC_MSG_CHECKING([if find supports -delete]) FIND_DELETE="-delete" - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + DELETEDIR=`$MKTEMP -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete @@ -389,102 +540,22 @@ AC_MSG_RESULT([yes]) fi rmdir $DELETEDIR -]) - -# Test that variable $1 denoting a program is not empty. If empty, exit with an error. -# $1: variable to check -# $2: executable name to print in warning (optional) -AC_DEFUN([CHECK_NONEMPTY], -[ - if test "x[$]$1" = x; then - if test "x$2" = x; then - PROG_NAME=translit($1,A-Z,a-z) - else - PROG_NAME=$2 - fi - AC_MSG_NOTICE([Could not find $PROG_NAME!]) - AC_MSG_ERROR([Cannot continue]) - fi -]) - -# Does AC_PATH_PROG followed by CHECK_NONEMPTY. -# Arguments as AC_PATH_PROG: -# $1: variable to set -# $2: executable name to look for -AC_DEFUN([BASIC_REQUIRE_PROG], -[ - AC_PATH_PROGS($1, $2) - CHECK_NONEMPTY($1, $2) + AC_SUBST(FIND_DELETE) ]) -AC_DEFUN_ONCE([BASIC_SETUP_TOOLS], +AC_DEFUN_ONCE([BASIC_SETUP_COMPLEX_TOOLS], [ -# Start with tools that do not need have cross compilation support -# and can be expected to be found in the default PATH. These tools are -# used by configure. Nor are these tools expected to be found in the -# devkit from the builddeps server either, since they are -# needed to download the devkit. - -# First are all the simple required tools. -BASIC_REQUIRE_PROG(BASENAME, basename) -BASIC_REQUIRE_PROG(CAT, cat) -BASIC_REQUIRE_PROG(CHMOD, chmod) -BASIC_REQUIRE_PROG(CMP, cmp) -BASIC_REQUIRE_PROG(CP, cp) -BASIC_REQUIRE_PROG(CPIO, cpio) -BASIC_REQUIRE_PROG(CUT, cut) -BASIC_REQUIRE_PROG(DATE, date) -BASIC_REQUIRE_PROG(DF, df) -BASIC_REQUIRE_PROG(DIFF, [gdiff diff]) -BASIC_REQUIRE_PROG(ECHO, echo) -BASIC_REQUIRE_PROG(EXPR, expr) -BASIC_REQUIRE_PROG(FILE, file) -BASIC_REQUIRE_PROG(FIND, find) -BASIC_REQUIRE_PROG(HEAD, head) -BASIC_REQUIRE_PROG(LN, ln) -BASIC_REQUIRE_PROG(LS, ls) -BASIC_REQUIRE_PROG(MKDIR, mkdir) -BASIC_REQUIRE_PROG(MV, mv) -BASIC_REQUIRE_PROG(PRINTF, printf) -BASIC_REQUIRE_PROG(SH, sh) -BASIC_REQUIRE_PROG(SORT, sort) -BASIC_REQUIRE_PROG(TAIL, tail) -BASIC_REQUIRE_PROG(TAR, tar) -BASIC_REQUIRE_PROG(TEE, tee) -BASIC_REQUIRE_PROG(TOUCH, touch) -BASIC_REQUIRE_PROG(TR, tr) -BASIC_REQUIRE_PROG(UNIQ, uniq) -BASIC_REQUIRE_PROG(UNZIP, unzip) -BASIC_REQUIRE_PROG(WC, wc) -BASIC_REQUIRE_PROG(XARGS, xargs) -BASIC_REQUIRE_PROG(ZIP, zip) - -# Then required tools that require some special treatment. -AC_PROG_AWK -CHECK_NONEMPTY(AWK) -AC_PROG_GREP -CHECK_NONEMPTY(GREP) -AC_PROG_EGREP -CHECK_NONEMPTY(EGREP) -AC_PROG_FGREP -CHECK_NONEMPTY(FGREP) -AC_PROG_SED -CHECK_NONEMPTY(SED) - -AC_PATH_PROGS(NAWK, [nawk gawk awk]) -CHECK_NONEMPTY(NAWK) - BASIC_CHECK_GNU_MAKE -BASIC_REQUIRE_PROG(RM, rm) -RM="$RM -f" +BASIC_CHECK_FIND_DELETE -BASIC_CHECK_FIND_DELETE -AC_SUBST(FIND_DELETE) +# These tools might not be installed by default, +# need hint on how to install them. +BASIC_REQUIRE_PROG(UNZIP, unzip) +BASIC_REQUIRE_PROG(ZIP, zip) # Non-required basic tools -AC_PATH_PROG(THEPWDCMD, pwd) AC_PATH_PROG(LDD, ldd) if test "x$LDD" = "x"; then # List shared lib dependencies is used for @@ -497,52 +568,17 @@ OTOOL="true" fi AC_PATH_PROGS(READELF, [readelf greadelf]) -AC_PATH_PROGS(OBJDUMP, [objdump gobjdump]) AC_PATH_PROG(HG, hg) +AC_PATH_PROG(STAT, stat) +AC_PATH_PROG(TIME, time) + +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + BASIC_REQUIRE_PROG(COMM, comm) +fi ]) -AC_DEFUN_ONCE([BASIC_COMPILE_UNCYGDRIVE], -[ -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$OPENJDK_BUILD_OS" = xwindows; then - AC_MSG_CHECKING([if uncygdrive can be created]) - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive1.log - AC_MSG_ERROR([Could not create $OUTPUT_ROOT/uncygdrive.exe]) - fi - AC_MSG_RESULT([$UNCYGDRIVE]) - AC_MSG_CHECKING([if uncygdrive.exe works]) - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - AC_MSG_RESULT([no]) - cat $OUTPUT_ROOT/uncygdrive2.log - AC_MSG_ERROR([Uncygdrive did not work!]) - fi - AC_MSG_RESULT([yes]) - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj - # The path to uncygdrive to use should be Unix-style - UNCYGDRIVE="$OUTPUT_ROOT/uncygdrive.exe" -fi - -AC_SUBST(UNCYGDRIVE) -]) - - -# Check if build directory is on local disk. +# Check if build directory is on local disk. If not possible to determine, +# we prefer to claim it's local. # Argument 1: directory to test # Argument 2: what to do if it is on local disk # Argument 3: what to do otherwise (remote disk or failure) @@ -550,11 +586,26 @@ [ # df -l lists only local disks; if the given directory is not found then # a non-zero exit code is given - if $DF -l $1 > /dev/null 2>&1; then - $2 - else - $3 - fi + if test "x$DF" = x; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + # msys does not have df; use Windows "net use" instead. + IS_NETWORK_DISK=`net use | grep \`pwd -W | cut -d ":" -f 1 | tr a-z A-Z\`:` + if test "x$IS_NETWORK_DISK" = x; then + $2 + else + $3 + fi + else + # No df here, say it's local + $2 + fi + else + if $DF -l $1 > /dev/null 2>&1; then + $2 + else + $3 + fi + fi ]) AC_DEFUN_ONCE([BASIC_TEST_USABILITY_ISSUES], diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/basics_windows.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/autoconf/basics_windows.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,406 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_UNIX_PATH], +[ + windows_path="[$]$1" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + $1="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + $1="$unix_path" + fi +]) + +AC_DEFUN([BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH], +[ + unix_path="[$]$1" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + $1="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + $1="$windows_path" + fi +]) + +# Helper function which possibly converts a path using DOS-style short mode. +# If so, the updated path is stored in $new_path. +# $1: The path to check +AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN], +[ + input_path="$1" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP @<:@^-._/a-zA-Z0-9@:>@` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $1 | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi +]) + +# Helper function which possibly converts a path using DOS-style short mode. +# If so, the updated path is stored in $new_path. +# $1: The path to check +AC_DEFUN([BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS], +[ + input_path="$1" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use @<:@ and @:>@ instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP @<:@^-_/:a-zA-Z0-9@:>@` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi +]) + +# FIXME: The BASIC_FIXUP_*_CYGWIN/MSYS is most likely too convoluted +# and could probably be heavily simplified. However, all changes in this +# area tend to need lot of testing in different scenarios, and in lack of +# proper unit testing, cleaning this up has not been deemed worth the effort +# at the moment. + +AC_DEFUN([BASIC_FIXUP_PATH_CYGWIN], +[ + # Input might be given as Windows format, start by converting to + # unix format. + path="[$]$1" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + AC_MSG_NOTICE([The path of $1, which resolves as "$path", is invalid.]) + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$new_path]) + + if test "x$path" != "x$new_path"; then + $1="$new_path" + AC_MSG_NOTICE([Rewriting $1 to "$new_path"]) + fi +]) + +AC_DEFUN([BASIC_FIXUP_PATH_MSYS], +[ + path="[$]$1" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path]) + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path) + if test "x$path" != "x$new_path"; then + $1="$new_path" + AC_MSG_NOTICE([Rewriting $1 to "$new_path"]) + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes@<:@@@:>@}" "${new_path:0:10}") +]) + +AC_DEFUN([BASIC_FIXUP_EXECUTABLE_CYGWIN], +[ + # First separate the path from the arguments. This will split at the first + # space. + complete="[$]$1" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.]) + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.]) + fi + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + AC_MSG_NOTICE([The path of $1, which resolves as "$new_path", is invalid.]) + AC_MSG_NOTICE([Neither "$new_path" nor "$new_path.exe/cmd" can be found]) + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + BASIC_MAKE_WINDOWS_SPACE_SAFE_CYGWIN([$input_to_shortpath]) + # remove trailing .exe if any + new_path="${new_path/%.exe/}" +]) + +AC_DEFUN([BASIC_FIXUP_EXECUTABLE_MSYS], +[ + # First separate the path from the arguments. This will split at the first + # space. + complete="[$]$1" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path) + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path) + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + AC_MSG_NOTICE([The path of $1, which resolves as "$complete", is not found.]) + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + AC_MSG_NOTICE([You might be mixing spaces in the path and extra arguments, which is not allowed.]) + fi + AC_MSG_ERROR([Cannot locate the the path of $1]) + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + BASIC_MAKE_WINDOWS_SPACE_SAFE_MSYS([$new_path]) + # Output is in $new_path + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(new_path) + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes@<:@@@:>@}" "${new_path:0:10}") + fi +]) + +# Setup basic configuration paths, and platform-specific stuff related to PATHs. +AC_DEFUN([BASIC_CHECK_PATHS_WINDOWS], +[ + SRC_ROOT_LENGTH=`$THEPWDCMD|$WC -m` + if test $SRC_ROOT_LENGTH -gt 100; then + AC_MSG_ERROR([Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported]) + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + AC_MSG_CHECKING([cygwin release]) + CYGWIN_VERSION=`$UNAME -r` + AC_MSG_RESULT([$CYGWIN_VERSION]) + WINDOWS_ENV_VENDOR='cygwin' + WINDOWS_ENV_VERSION="$CYGWIN_VERSION" + + CYGWIN_VERSION_OK=`$ECHO $CYGWIN_VERSION | $GREP ^1.7.` + if test "x$CYGWIN_VERSION_OK" = x; then + AC_MSG_NOTICE([Your cygwin is too old. You are running $CYGWIN_VERSION, but at least cygwin 1.7 is required. Please upgrade.]) + AC_MSG_ERROR([Cannot continue]) + fi + if test "x$CYGPATH" = x; then + AC_MSG_ERROR([Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path]) + fi + AC_MSG_CHECKING([cygwin root directory as unix-style path]) + # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away + cygwin_winpath_root=`cd / ; cmd /c cd | grep ".*"` + # Force cygpath to report the proper root by including a trailing space, and then stripping it off again. + CYGWIN_ROOT_PATH=`$CYGPATH -u "$cygwin_winpath_root " | $CUT -f 1 -d " "` + AC_MSG_RESULT([$CYGWIN_ROOT_PATH]) + WINDOWS_ENV_ROOT_PATH="$CYGWIN_ROOT_PATH" + test_cygdrive_prefix=`$ECHO $CYGWIN_ROOT_PATH | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + AC_MSG_ERROR([Your cygdrive prefix is not /cygdrive. This is currently not supported. Change with mount -c.]) + fi + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + AC_MSG_CHECKING([msys release]) + MSYS_VERSION=`$UNAME -r` + AC_MSG_RESULT([$MSYS_VERSION]) + + WINDOWS_ENV_VENDOR='msys' + WINDOWS_ENV_VERSION="$MSYS_VERSION" + + AC_MSG_CHECKING([msys root directory as unix-style path]) + # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away + MSYS_ROOT_PATH=`cd / ; cmd /c cd | grep ".*"` + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(MSYS_ROOT_PATH) + AC_MSG_RESULT([$MSYS_ROOT_PATH]) + WINDOWS_ENV_ROOT_PATH="$MSYS_ROOT_PATH" + else + AC_MSG_ERROR([Unknown Windows environment. Neither cygwin nor msys was detected.]) + fi + + # Test if windows or unix (cygwin/msys) find is first in path. + AC_MSG_CHECKING([what kind of 'find' is first on the PATH]) + FIND_BINARY_OUTPUT=`find --version 2>&1` + if test "x`echo $FIND_BINARY_OUTPUT | $GREP GNU`" != x; then + AC_MSG_RESULT([unix style]) + elif test "x`echo $FIND_BINARY_OUTPUT | $GREP FIND`" != x; then + AC_MSG_RESULT([Windows]) + AC_MSG_NOTICE([Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools.]) + AC_MSG_NOTICE([This will not work. Please correct and make sure /usr/bin (or similar) is first in path.]) + AC_MSG_ERROR([Cannot continue]) + else + AC_MSG_RESULT([unknown]) + AC_MSG_WARN([It seems that your find utility is non-standard.]) + fi +]) + +AC_DEFUN_ONCE([BASIC_COMPILE_FIXPATH], +[ +# When using cygwin or msys, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called fixpath. +FIXPATH= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + AC_MSG_CHECKING([if fixpath can be created]) + FIXPATH_SRC="$SRC_ROOT/common/src/fixpath.c" + FIXPATH_BIN="$OUTPUT_ROOT/fixpath.exe" + if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then + FIXPATH_SRC=`$CYGPATH -m $FIXPATH_SRC` + FIXPATH_BIN=`$CYGPATH -m $FIXPATH_BIN` + # Important to keep the .exe suffix on Cygwin for Hotspot makefiles + FIXPATH="$OUTPUT_ROOT/fixpath.exe -c" + elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.msys; then + FIXPATH_SRC=`cmd //c echo $FIXPATH_SRC` + FIXPATH_BIN=`cmd //c echo $FIXPATH_BIN` + + # Take all collected prefixes and turn them into a -m/c/foo@/c/bar@... command line + # @ was chosen as separator to minimize risk of other tools messing around with it + all_unique_prefixes=`echo "${all_fixpath_prefixes@<:@@@:>@}" | tr ' ' '\n' | grep '^/./' | sort | uniq` + fixpath_argument_list=`echo $all_unique_prefixes | tr ' ' '@'` + + FIXPATH="$OUTPUT_ROOT/fixpath -m$fixpath_argument_list" + fi + rm -f $OUTPUT_ROOT/fixpath* + cd $OUTPUT_ROOT + $CC $FIXPATH_SRC -Fe$FIXPATH_BIN > $OUTPUT_ROOT/fixpath1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/fixpath.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/fixpath1.log + AC_MSG_ERROR([Could not create $OUTPUT_ROOT/fixpath.exe]) + fi + AC_MSG_RESULT([yes]) + AC_MSG_CHECKING([if fixpath.exe works]) + cd $OUTPUT_ROOT + $FIXPATH $CC $SRC_ROOT/common/src/fixpath.c -Fe$OUTPUT_ROOT/fixpath2.exe > $OUTPUT_ROOT/fixpath2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/fixpath2.exe; then + AC_MSG_RESULT([no]) + cat $OUTPUT_ROOT/fixpath2.log + AC_MSG_ERROR([fixpath did not work!]) + fi + AC_MSG_RESULT([yes]) + rm -f $OUTPUT_ROOT/fixpath?.??? $OUTPUT_ROOT/fixpath.obj +fi + +AC_SUBST(FIXPATH) +]) diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/boot-jdk.m4 --- a/common/autoconf/boot-jdk.m4 Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/boot-jdk.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -62,9 +62,12 @@ else # We're done! :-) BOOT_JDK_FOUND=yes - SPACESAFE(BOOT_JDK,[the path to the Boot JDK]) + BASIC_FIXUP_PATH(BOOT_JDK) AC_MSG_CHECKING([for Boot JDK]) - AC_MSG_RESULT([$BOOT_JDK ($BOOT_JDK_VERSION)]) + AC_MSG_RESULT([$BOOT_JDK]) + AC_MSG_CHECKING([Boot JDK version]) + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + AC_MSG_RESULT([$BOOT_JDK_VERSION]) fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -93,12 +96,8 @@ AC_DEFUN([BOOTJDK_CHECK_JAVA_HOME], [ if test "x$JAVA_HOME" != x; then - if test "x$OPENJDK_TARGET_OS" = xwindows; then - # On Windows, JAVA_HOME is likely in DOS-style - JAVA_HOME_PROCESSED="`$CYGPATH -u "$JAVA_HOME"`" - else - JAVA_HOME_PROCESSED="$JAVA_HOME" - fi + JAVA_HOME_PROCESSED="$JAVA_HOME" + BASIC_FIXUP_PATH(JAVA_HOME_PROCESSED) if test ! -d "$JAVA_HOME_PROCESSED"; then AC_MSG_NOTICE([Your JAVA_HOME points to a non-existing directory!]) else @@ -125,8 +124,7 @@ # Lets find the JDK/JRE directory by following symbolic links. # Linux/GNU systems often have links from /usr/bin/java to # /etc/alternatives/java to the real JDK binary. - SET_FULL_PATH_SPACESAFE(BINARY) - REMOVE_SYMBOLIC_LINKS(BINARY) + BASIC_REMOVE_SYMBOLIC_LINKS(BINARY) BOOT_JDK=`dirname "$BINARY"` BOOT_JDK=`cd "$BOOT_JDK/.."; pwd` if test -x "$BOOT_JDK/bin/javac" && test -x "$BOOT_JDK/bin/java"; then @@ -155,13 +153,17 @@ [ BOOT_JDK_PREFIX="$1" BOOT_JDK_SUFFIX="$2" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - AC_MSG_NOTICE([Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)]) - fi + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + BOOTJDK_DO_CHECK([ + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + AC_MSG_NOTICE([Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)]) + fi + ]) + done fi ]) @@ -171,7 +173,9 @@ AC_DEFUN([BOOTJDK_FIND_BEST_JDK_IN_WINDOWS_VIRTUAL_DIRECTORY], [ if test "x[$]$1" != x; then - BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([`$CYGPATH -u "[$]$1"`/Java]) + VIRTUAL_DIR="[$]$1/Java" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VIRTUAL_DIR) + BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY($VIRTUAL_DIR) fi ]) @@ -187,6 +191,8 @@ elif test "x$OPENJDK_TARGET_OS" = xmacosx; then BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([/Library/Java/JavaVirtualMachines],[/Contents/Home])]) BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([/System/Library/Java/JavaVirtualMachines],[/Contents/Home])]) + elif test "x$OPENJDK_TARGET_OS" = xlinux; then + BOOTJDK_DO_CHECK([BOOTJDK_FIND_BEST_JDK_IN_DIRECTORY([/usr/lib/jvm])]) fi ]) diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/build-aux/config.guess --- a/common/autoconf/build-aux/config.guess Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/build-aux/config.guess Wed Jul 05 18:27:34 2017 +0200 @@ -48,6 +48,9 @@ # Test and fix cygwin on x86_64 echo $OUT | grep 86-pc-cygwin > /dev/null 2> /dev/null +if test $? != 0; then + echo $OUT | grep 86-pc-mingw > /dev/null 2> /dev/null +fi if test $? = 0; then case `echo $PROCESSOR_IDENTIFIER | cut -f1 -d' '` in intel64|Intel64|INTEL64|em64t|EM64T|amd64|AMD64|8664|x86_64) diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/build-performance.m4 --- a/common/autoconf/build-performance.m4 Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/build-performance.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -41,6 +41,10 @@ # Looks like a MacOSX system NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print [$]5}'` FOUND_CORES=yes + elif test -n "$NUMBER_OF_PROCESSORS"; then + # On windows, look in the env + NUM_CORES=$NUMBER_OF_PROCESSORS + FOUND_CORES=yes fi # For c/c++ code we run twice as many concurrent build @@ -50,7 +54,8 @@ if test "x$FOUND_CORES" = xyes; then AC_MSG_RESULT([$NUM_CORES]) else - AC_MSG_RESULT([could not detect number of cores, defaulting to 1!]) + AC_MSG_RESULT([could not detect number of cores, defaulting to 1]) + AC_MSG_WARN([This will disable all parallelism from build!]) fi ]) @@ -76,16 +81,18 @@ MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print [$]2}'` MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` FOUND_MEM=yes - elif test "x$build_os" = xwindows; then + elif test "x$OPENJDK_BUILD_OS" = xwindows; then # Windows, but without cygwin - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print [$]4 }' | sed 's/,//'` + MEMORY_SIZE=`wmic computersystem get totalphysicalmemory -value | grep = | cut -d "=" -f 2-` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024 / 1024` FOUND_MEM=yes fi if test "x$FOUND_MEM" = xyes; then AC_MSG_RESULT([$MEMORY_SIZE MB]) else - AC_MSG_RESULT([could not detect memory size defaulting to 1024 MB!]) + AC_MSG_RESULT([could not detect memory size, defaulting to 1024 MB]) + AC_MSG_WARN([This might seriously impact build performance!]) fi ]) @@ -123,7 +130,7 @@ [ AC_ARG_ENABLE([ccache], [AS_HELP_STRING([--disable-ccache], - [use ccache to speed up recompilations @<:@enabled@:>@])], + [disable using ccache to speed up recompilations @<:@enabled@:>@])], [ENABLE_CCACHE=${enable_ccache}], [ENABLE_CCACHE=yes]) if test "x$ENABLE_CCACHE" = xyes; then AC_PATH_PROG(CCACHE, ccache) @@ -196,7 +203,7 @@ # Can the C/C++ compiler use precompiled headers? # AC_ARG_ENABLE([precompiled-headers], [AS_HELP_STRING([--disable-precompiled-headers], - [use precompiled headers when compiling C++ @<:@enabled@:>@])], + [disable using precompiled headers when compiling C++ @<:@enabled@:>@])], [ENABLE_PRECOMPH=${enable_precompiled-headers}], [ENABLE_PRECOMPH=yes]) USE_PRECOMPILED_HEADER=1 @@ -228,8 +235,7 @@ AC_DEFUN_ONCE([BPERF_SETUP_SMART_JAVAC], [ AC_ARG_WITH(sjavac-server-java, [AS_HELP_STRING([--with-sjavac-server-java], - [use this java binary for running the sjavac background server and other long running java tasks in the build process, - e.g. ---with-sjavac-server-java="/opt/jrockit/bin/java -server"])]) + [use this java binary for running the sjavac background server @<:@Boot JDK java@:>@])]) if test "x$with_sjavac_server_java" != x; then SJAVAC_SERVER_JAVA="$with_sjavac_server_java" diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/builddeps.m4 --- a/common/autoconf/builddeps.m4 Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/builddeps.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -235,26 +235,13 @@ [use this configuration file for the builddeps])]) AC_ARG_WITH(builddeps-server, [AS_HELP_STRING([--with-builddeps-server], - [download and use build dependencies from this server url, e.g. --with-builddeps-server=ftp://example.com/dir])]) + [download and use build dependencies from this server url])]) AC_ARG_WITH(builddeps-dir, [AS_HELP_STRING([--with-builddeps-dir], - [store downloaded build dependencies here @<:@d/localhome/builddeps@:>@])], + [store downloaded build dependencies here @<:@/localhome/builddeps@:>@])], [], [with_builddeps_dir=/localhome/builddeps]) AC_ARG_WITH(builddeps-group, [AS_HELP_STRING([--with-builddeps-group], [chgrp the downloaded build dependencies to this group])]) - -AC_ARG_ENABLE([list-builddeps], [AS_HELP_STRING([--enable-list-builddeps], - [list all build dependencies known to the configure script])], - [LIST_BUILDDEPS="${enableval}"], [LIST_BUILDDEPS='no']) - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODUL[E]\( | cut -f 2 -d ',' | tr -d ' ' | sort - echo - exit 1 -fi ]) diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/closed.version.numbers --- a/common/autoconf/closed.version.numbers Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/closed.version.numbers Wed Jul 05 18:27:34 2017 +0200 @@ -26,3 +26,7 @@ PRODUCT_SUFFIX="SE Runtime Environment" JDK_RC_PLATFORM_NAME="Platform SE" COMPANY_NAME="Oracle Corporation" + +# Might need better names for these +MACOSX_BUNDLE_NAME_BASE="Java SE" +MACOSX_BUNDLE_ID_BASE="com.oracle.java" diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/compare.sh.in --- a/common/autoconf/compare.sh.in Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/compare.sh.in Wed Jul 05 18:27:34 2017 +0200 @@ -40,12 +40,12 @@ CP="@CP@" CUT="@CUT@" DIFF="@DIFF@" -DUMPBIN="@UNCYGDRIVE@ @DUMPBIN@" +DUMPBIN="@FIXPATH@ @DUMPBIN@" EXPR="@EXPR@" FILE="@FILE@" FIND="@FIND@" GREP="@GREP@" -JAVAP="@UNCYGDRIVE@ @BOOT_JDK@/bin/javap" +JAVAP="@FIXPATH@ @BOOT_JDK@/bin/javap" LDD="@LDD@" MKDIR="@MKDIR@" NM="@NM@" @@ -56,6 +56,7 @@ RM="@RM@" SED="@SED@" SORT="@SORT@" +STAT="@STAT@" STRIP="@POST_STRIP_CMD@" TEE="@TEE@" UNIQ="@UNIQ@" @@ -63,1607 +64,15 @@ SRC_ROOT="@SRC_ROOT@" -if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then - READELF_CMD="otool -v -V -h -X -t -d" -elif [ -n "$READELF" ] && [ "$OPENJDK_TARGET_OS" != "windows" ]; then - READELF_CMD="$READELF -a" -fi - -if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then - LDD_CMD="$OTOOL -L" -elif [ -n "$LDD" ]; then - LDD_CMD="$LDD" -fi - -########################################################################################## -# Diff exceptions - -if [ "$OPENJDK_TARGET_OS" = "linux" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then -STRIP_BEFORE_COMPARE=" -./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/libgctest.so -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/heapViewer/lib/libheapViewer.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/minst/lib/libminst.so -./demo/jvmti/mtrace/lib/libmtrace.so -./demo/jvmti/versionCheck/lib/libversionCheck.so -./demo/jvmti/waiters/lib/libwaiters.so -" - -KNOWN_BIN_DIFF=" -" - -ACCEPTED_BIN_DIFF=" -./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/libgctest.so -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/heapViewer/lib/libheapViewer.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/minst/lib/libminst.so -./demo/jvmti/mtrace/lib/libmtrace.so -./demo/jvmti/versionCheck/lib/libversionCheck.so -./demo/jvmti/waiters/lib/libwaiters.so -./jre/lib/amd64/libattach.so -./jre/lib/amd64/libdt_socket.so -./jre/lib/amd64/libhprof.so -./jre/lib/amd64/libinstrument.so -./jre/lib/amd64/libjava_crw_demo.so -./jre/lib/amd64/libjsdt.so -./jre/lib/amd64/libjsig.so -./jre/lib/amd64/libmanagement.so -./jre/lib/amd64/libnpt.so -./jre/lib/amd64/libsaproc.so -./jre/lib/amd64/libverify.so -./jre/lib/amd64/server/libjsig.so -./jre/lib/amd64/server/libjvm.so -./bin/appletviewer -./bin/extcheck -./bin/idlj -./bin/jar -./bin/jarsigner -./bin/java -./bin/javac -./bin/javadoc -./bin/javah -./bin/javap -./bin/jcmd -./bin/jconsole -./bin/jdb -./bin/jhat -./bin/jinfo -./bin/jmap -./bin/jps -./bin/jrunscript -./bin/jsadebugd -./bin/jstack -./bin/jstat -./bin/jstatd -./bin/keytool -./bin/native2ascii -./bin/orbd -./bin/pack200 -./bin/policytool -./bin/rmic -./bin/rmid -./bin/rmiregistry -./bin/schemagen -./bin/serialver -./bin/servertool -./bin/tnameserv -./bin/wsgen -./bin/wsimport -./bin/xjc -./jre/bin/java -./jre/bin/keytool -./jre/bin/orbd -./jre/bin/pack200 -./jre/bin/policytool -./jre/bin/rmid -./jre/bin/rmiregistry -./jre/bin/servertool -./jre/bin/tnameserv -" - -KNOWN_SIZE_DIFF=" -" - -KNOWN_SYM_DIFF=" -" - -KNOWN_ELF_DIFF=" -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/waiters/lib/libwaiters.so -" -fi - -if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86" ]; then - -STRIP_BEFORE_COMPARE=" -./demo/jni/Poller/lib/libPoller.so -./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/libgctest.so -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/heapViewer/lib/libheapViewer.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/minst/lib/libminst.so -./demo/jvmti/mtrace/lib/libmtrace.so -./demo/jvmti/versionCheck/lib/libversionCheck.so -./demo/jvmti/waiters/lib/libwaiters.so -./jre/lib/i386/jexec -" - -SORT_SYMBOLS=" -./jre/lib/i386/client/libjvm.so -./jre/lib/i386/server/libjvm.so -" - -SKIP_BIN_DIFF="true" - -ACCEPTED_SMALL_SIZE_DIFF=" -./demo/jni/Poller/lib/libPoller.so -./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/libgctest.so -./demo/jvmti/heapTracker/lib/libheapTracker.so -./demo/jvmti/heapViewer/lib/libheapViewer.so -./demo/jvmti/hprof/lib/libhprof.so -./demo/jvmti/minst/lib/libminst.so -./demo/jvmti/mtrace/lib/libmtrace.so -./demo/jvmti/versionCheck/lib/libversionCheck.so -./demo/jvmti/waiters/lib/libwaiters.so -./jre/lib/i386/client/libjvm.so -./jre/lib/i386/jli/libjli.so -./jre/lib/i386/libJdbcOdbc.so -./jre/lib/i386/libattach.so -./jre/lib/i386/libawt.so -./jre/lib/i386/libawt_headless.so -./jre/lib/i386/libawt_xawt.so -./jre/lib/i386/libdcpr.so -./jre/lib/i386/libdt_socket.so -./jre/lib/i386/libfontmanager.so -./jre/lib/i386/libhprof.so -./jre/lib/i386/libinstrument.so -./jre/lib/i386/libj2gss.so -./jre/lib/i386/libj2pcsc.so -./jre/lib/i386/libj2pkcs11.so -./jre/lib/i386/libj2ucrypto.so -./jre/lib/i386/libjaas_unix.so -./jre/lib/i386/libjava.so -./jre/lib/i386/libjava_crw_demo.so -./jre/lib/i386/libjawt.so -./jre/lib/i386/libjdwp.so -./jre/lib/i386/libjfr.so -./jre/lib/i386/libjpeg.so -./jre/lib/i386/libjsdt.so -./jre/lib/i386/libjsound.so -./jre/lib/i386/libkcms.so -./jre/lib/i386/libmanagement.so -./jre/lib/i386/libmlib_image.so -./jre/lib/i386/libnet.so -./jre/lib/i386/libnio.so -./jre/lib/i386/libnpt.so -./jre/lib/i386/libsctp.so -./jre/lib/i386/libsplashscreen.so -./jre/lib/i386/libsunec.so -./jre/lib/i386/libsunwjdga.so -./jre/lib/i386/libt2k.so -./jre/lib/i386/libunpack.so -./jre/lib/i386/libverify.so -./jre/lib/i386/libzip.so -./jre/lib/i386/server/libjvm.so -./bin/appletviewer -./bin/extcheck -./bin/idlj -./bin/jar -./bin/jarsigner -./bin/java -./bin/javac -./bin/javadoc -./bin/javah -./bin/javap -./bin/jcmd -./bin/jconsole -./bin/jdb -./bin/jhat -./bin/jinfo -./bin/jmap -./bin/jps -./bin/jrunscript -./bin/jsadebugd -./bin/jstack -./bin/jstat -./bin/jstatd -./bin/keytool -./bin/native2ascii -./bin/orbd -./bin/pack200 -./bin/policytool -./bin/rmic -./bin/rmid -./bin/rmiregistry -./bin/schemagen -./bin/serialver -./bin/servertool -./bin/tnameserv -./bin/unpack200 -./bin/wsgen -./bin/wsimport -./bin/xjc -./jre/bin/java -./jre/bin/keytool -./jre/bin/orbd -./jre/bin/pack200 -./jre/bin/policytool -./jre/bin/rmid -./jre/bin/rmiregistry -./jre/bin/servertool -./jre/bin/tnameserv -./jre/bin/unpack200 -./jre/lib/i386/jexec -" - -SKIP_ELF_DIFF="true" - -# libjvm.so differs in the random 15 char prefix on some symbols. -ACCEPTED_DIS_DIFF=" -./jre/lib/i386/client/libjvm.so -./jre/lib/i386/server/libjvm.so -" - -fi - -if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then - -STRIP_BEFORE_COMPARE=" -./demo/jni/Poller/lib/amd64/libPoller.so -./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/amd64/libgctest.so -./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so -./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so -./demo/jvmti/hprof/lib/amd64/libhprof.so -./demo/jvmti/minst/lib/amd64/libminst.so -./demo/jvmti/mtrace/lib/amd64/libmtrace.so -./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so -./demo/jvmti/waiters/lib/amd64/libwaiters.so -" - -SORT_SYMBOLS=" -./jre/lib/amd64/server/libjvm.so -" - -SKIP_BIN_DIFF="true" - -ACCEPTED_SMALL_SIZE_DIFF=" -./demo/jni/Poller/lib/amd64/libPoller.so -./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so -./demo/jvmti/gctest/lib/amd64/libgctest.so -./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so -./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so -./demo/jvmti/hprof/lib/amd64/libhprof.so -./demo/jvmti/minst/lib/amd64/libminst.so -./demo/jvmti/mtrace/lib/amd64/libmtrace.so -./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so -./demo/jvmti/waiters/lib/amd64/libwaiters.so -./jre/lib/amd64/jli/libjli.so -./jre/lib/amd64/libJdbcOdbc.so -./jre/lib/amd64/libattach.so -./jre/lib/amd64/libawt.so -./jre/lib/amd64/libawt_headless.so -./jre/lib/amd64/libawt_xawt.so -./jre/lib/amd64/libdcpr.so -./jre/lib/amd64/libdt_socket.so -./jre/lib/amd64/libfontmanager.so -./jre/lib/amd64/libhprof.so -./jre/lib/amd64/libinstrument.so -./jre/lib/amd64/libj2gss.so -./jre/lib/amd64/libj2pcsc.so -./jre/lib/amd64/libj2pkcs11.so -./jre/lib/amd64/libj2ucrypto.so -./jre/lib/amd64/libjaas_unix.so -./jre/lib/amd64/libjava.so -./jre/lib/amd64/libjava_crw_demo.so -./jre/lib/amd64/libjawt.so -./jre/lib/amd64/libjdwp.so -./jre/lib/amd64/libjfr.so -./jre/lib/amd64/libjpeg.so -./jre/lib/amd64/libjsdt.so -./jre/lib/amd64/libjsound.so -./jre/lib/amd64/libkcms.so -./jre/lib/amd64/libmanagement.so -./jre/lib/amd64/libmlib_image.so -./jre/lib/amd64/libnet.so -./jre/lib/amd64/libnio.so -./jre/lib/amd64/libnpt.so -./jre/lib/amd64/libsctp.so -./jre/lib/amd64/libsplashscreen.so -./jre/lib/amd64/libsunec.so -./jre/lib/amd64/libsunwjdga.so -./jre/lib/amd64/libt2k.so -./jre/lib/amd64/libunpack.so -./jre/lib/amd64/libverify.so -./jre/lib/amd64/libzip.so -./jre/lib/amd64/server/64/libjvm_db.so -./jre/lib/amd64/server/64/libjvm_dtrace.so -./bin/amd64/appletviewer -./bin/amd64/extcheck -./bin/amd64/idlj -./bin/amd64/jar -./bin/amd64/jarsigner -./bin/amd64/java -./bin/amd64/javac -./bin/amd64/javadoc -./bin/amd64/javah -./bin/amd64/javap -./bin/amd64/jcmd -./bin/amd64/jconsole -./bin/amd64/jdb -./bin/amd64/jhat -./bin/amd64/jinfo -./bin/amd64/jmap -./bin/amd64/jps -./bin/amd64/jrunscript -./bin/amd64/jsadebugd -./bin/amd64/jstack -./bin/amd64/jstat -./bin/amd64/jstatd -./bin/amd64/keytool -./bin/amd64/native2ascii -./bin/amd64/orbd -./bin/amd64/pack200 -./bin/amd64/policytool -./bin/amd64/rmic -./bin/amd64/rmid -./bin/amd64/rmiregistry -./bin/amd64/schemagen -./bin/amd64/serialver -./bin/amd64/servertool -./bin/amd64/tnameserv -./bin/amd64/unpack200 -./bin/amd64/wsgen -./bin/amd64/wsimport -./bin/amd64/xjc -./jre/bin/amd64/java -./jre/bin/amd64/keytool -./jre/bin/amd64/orbd -./jre/bin/amd64/pack200 -./jre/bin/amd64/policytool -./jre/bin/amd64/rmid -./jre/bin/amd64/rmiregistry -./jre/bin/amd64/servertool -./jre/bin/amd64/tnameserv -./jre/bin/amd64/unpack200 -./jre/lib/amd64/jexec -" - -SKIP_ELF_DIFF="true" - -# Can't find an explaination for the diff in libmlib_image.so. -KNOWN_DIS_DIFF=" -./jre/lib/amd64/libmlib_image.so -" -# libjvm.so differs in the random 15 char prefix on some symbols. -ACCEPTED_DIS_DIFF=" -./jre/lib/amd64/server/libjvm.so -" - -fi - -if [ "$OPENJDK_TARGET_OS" = "windows" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then - -ACCEPTED_BIN_DIFF=" -./bin/jli.dll -./demo/jvmti/compiledMethodLoad/lib/compiledMethodLoad.dll -./demo/jvmti/gctest/lib/gctest.dll -./demo/jvmti/heapTracker/lib/heapTracker.dll -./demo/jvmti/heapViewer/lib/heapViewer.dll -./demo/jvmti/hprof/lib/hprof.dll -./demo/jvmti/minst/lib/minst.dll -./demo/jvmti/mtrace/lib/mtrace.dll -./demo/jvmti/versionCheck/lib/versionCheck.dll -./demo/jvmti/waiters/lib/waiters.dll -./jre/bin/attach.dll -./jre/bin/awt.dll -./jre/bin/dcpr.dll -./jre/bin/dt_shmem.dll -./jre/bin/dt_socket.dll -./jre/bin/fontmanager.dll -./jre/bin/hprof.dll -./jre/bin/instrument.dll -./jre/bin/j2pcsc.dll -./jre/bin/j2pkcs11.dll -./jre/bin/jaas_nt.dll -./jre/bin/java.dll -./jre/bin/java_crw_demo.dll -./jre/bin/jawt.dll -./jre/bin/JdbcOdbc.dll -./jre/bin/jdwp.dll -./jre/bin/jfr.dll -./jre/bin/jli.dll -./jre/bin/jpeg.dll -./jre/bin/jsdt.dll -./jre/bin/jsound.dll -./jre/bin/jsoundds.dll -./jre/bin/kcms.dll -./jre/bin/management.dll -./jre/bin/mlib_image.dll -./jre/bin/net.dll -./jre/bin/nio.dll -./jre/bin/npt.dll -./jre/bin/sawindbg.dll -./jre/bin/server/jvm.dll -./jre/bin/splashscreen.dll -./jre/bin/sunec.dll -./jre/bin/sunmscapi.dll -./jre/bin/t2k.dll -./jre/bin/unpack.dll -./jre/bin/verify.dll -./jre/bin/w2k_lsa_auth.dll -./jre/bin/zip.dll -./bin/appletviewer.exe -./bin/extcheck.exe -./bin/idlj.exe -./bin/jar.exe -./bin/jarsigner.exe -./bin/java.exe -./bin/javac.exe -./bin/javadoc.exe -./bin/javah.exe -./bin/javap.exe -./bin/java-rmi.exe -./bin/javaw.exe -./bin/jcmd.exe -./bin/jconsole.exe -./bin/jdb.exe -./bin/jhat.exe -./bin/jinfo.exe -./bin/jmap.exe -./bin/jps.exe -./bin/jrunscript.exe -./bin/jsadebugd.exe -./bin/jstack.exe -./bin/jstat.exe -./bin/jstatd.exe -./bin/keytool.exe -./bin/kinit.exe -./bin/klist.exe -./bin/ktab.exe -./bin/native2ascii.exe -./bin/orbd.exe -./bin/pack200.exe -./bin/policytool.exe -./bin/rmic.exe -./bin/rmid.exe -./bin/rmiregistry.exe -./bin/schemagen.exe -./bin/serialver.exe -./bin/servertool.exe -./bin/tnameserv.exe -./bin/unpack200.exe -./bin/wsgen.exe -./bin/wsimport.exe -./bin/xjc.exe -./jre/bin/java.exe -./jre/bin/java-rmi.exe -./jre/bin/javaw.exe -./jre/bin/keytool.exe -./jre/bin/kinit.exe -./jre/bin/klist.exe -./jre/bin/ktab.exe -./jre/bin/orbd.exe -./jre/bin/pack200.exe -./jre/bin/policytool.exe -./jre/bin/rmid.exe -./jre/bin/rmiregistry.exe -./jre/bin/servertool.exe -./jre/bin/tnameserv.exe -./jre/bin/unpack200.exe -" - -KNOWN_SIZE_DIFF=" -./demo/jvmti/heapTracker/lib/heapTracker.dll -./demo/jvmti/minst/lib/minst.dll -./jre/bin/awt.dll -./jre/bin/java_crw_demo.dll -./bin/java.exe -./bin/javaw.exe -./bin/unpack200.exe -./jre/bin/java.exe -./jre/bin/javaw.exe -./jre/bin/unpack200.exe -" - -KNOWN_SYM_DIFF=" -./jre/bin/awt.dll -./jre/bin/java_crw_demo.dll -" -fi - - - -if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then -ACCEPTED_JARZIP_CONTENTS=" -/META-INF/INDEX.LIST -" - -KNOWN_BIN_DIFF=" -./jre/lib/libJObjC.dylib -./jre/lib/libsaproc.dylib -./jre/lib/server/libjvm.dylib -" - -ACCEPTED_BIN_DIFF=" -./bin/appletviewer -./bin/extcheck -./bin/idlj -./bin/jar -./bin/jarsigner -./bin/java -./bin/javac -./bin/javadoc -./bin/javah -./bin/javap -./bin/jcmd -./bin/jconsole -./bin/jdb -./bin/jhat -./bin/jinfo -./bin/jmap -./bin/jps -./bin/jrunscript -./bin/jsadebugd -./bin/jstack -./bin/jstat -./bin/jstatd -./bin/keytool -./bin/native2ascii -./bin/orbd -./bin/pack200 -./bin/policytool -./bin/rmic -./bin/rmid -./bin/rmiregistry -./bin/schemagen -./bin/serialver -./bin/servertool -./bin/tnameserv -./bin/wsgen -./bin/wsimport -./bin/xjc -./jre/bin/java -./jre/bin/keytool -./jre/bin/orbd -./jre/bin/pack200 -./jre/bin/policytool -./jre/bin/rmid -./jre/bin/rmiregistry -./jre/bin/servertool -./jre/bin/tnameserv -" - -KNOWN_SIZE_DIFF=" -./jre/lib/libJObjC.dylib -./jre/lib/server/libjvm.dylib -" - -KNOWN_SYM_DIFF=" -./jre/lib/libJObjC.dylib -./jre/lib/server/libjvm.dylib -" - -KNOWN_ELF_DIFF=" -./jre/lib/libJObjC.dylib -./jre/lib/server/libjvm.dylib -" - -SKIP_DIS_DIFF="true" - +if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + PATH="@VS_PATH@" fi -########################################################################################## -# Compare text files and ignore specific differences: -# -# * Timestamps in Java sources generated by idl2java -# * Sorting order and cleanup style in .properties files - -diff_text() { - OTHER_FILE=$1 - THIS_FILE=$2 - - SUFFIX="${THIS_FILE##*.}" - - TMP=1 - - if [[ "$THIS_FILE" = *"META-INF/MANIFEST.MF" ]]; then - TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ - $GREP '^[<>]' | \ - $SED -e '/[<>] Ant-Version: Apache Ant .*/d' \ - -e '/[<>] Created-By: .* (Oracle Corporation).*/d') - fi - if test "x$SUFFIX" = "xjava"; then - TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ - $GREP '^[<>]' | \ - $SED -e '/[<>] \* from.*\.idl/d' \ - -e '/[<>] \*.*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ - -e '/[<>] \*.*[0-9]\{4\} [0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \ - -e '/\/\/ Generated from input file.*/d' \ - -e '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' \ - -e '/\/\/ java GenerateCharacter.*/d') - fi - # Ignore date strings in class files. - # On Macosx the system sources for generated java classes produce different output on - # consequtive invokations seemingly randomly. - # For example a method parameter randomly named "thePoint" or "aPoint". Ignore this. - if test "x$SUFFIX" = "xclass"; then - $JAVAP -c -constants -l -p ${OTHER_FILE} > ${OTHER_FILE}.javap - $JAVAP -c -constants -l -p ${THIS_FILE} > ${THIS_FILE}.javap - TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap | \ - $GREP '^[<>]' | \ - $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ - -e '/[<>].*Point Lcom\/apple\/jobjc\/foundation\/NSPoint;/d' \ - -e '/[<>].*public com\.apple\.jobjc\.Pointer].*public void setItemsPtr(com\.apple\.jobjc\.Pointer $OTHER_FILE.cleaned - TMP=$(LANG=C $DIFF $OTHER_FILE.cleaned $THIS_FILE) - fi - if test -n "$TMP"; then - echo Files $OTHER_FILE and $THIS_FILE differ - return 1 - fi - - return 0 -} - -########################################################################################## -# Compare directory structure - -compare_dirs() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - mkdir -p $WORK_DIR - - (cd $OTHER_DIR && $FIND . -type d | $SORT > $WORK_DIR/other_dirs) - (cd $THIS_DIR && $FIND . -type d | $SORT > $WORK_DIR/this_dirs) - - echo -n Directory structure... - if $DIFF $WORK_DIR/other_dirs $WORK_DIR/this_dirs > /dev/null; then - echo Identical! - else - echo Differences found. - REGRESSIONS=true - # Differences in directories found. - ONLY_OTHER=$($DIFF $WORK_DIR/other_dirs $WORK_DIR/this_dirs | $GREP '<') - if [ "$ONLY_OTHER" ]; then - echo Only in $OTHER - echo $ONLY_OTHER | $SED 's|< ./|\t|g' | $SED 's/ /\n/g' - fi - # Differences in directories found. - ONLY_THIS=$($DIFF $WORK_DIR/other_dirs $WORK_DIR/this_dirs | $GREP '>') - if [ "$ONLY_THIS" ]; then - echo Only in $THIS - echo $ONLY_THIS | $SED 's|> ./|\t|g' | $SED 's/ /\n/g' - fi - fi -} - - -########################################################################################## -# Compare file structure - -compare_files() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - mkdir -p $WORK_DIR - - (cd $OTHER_DIR && $FIND . -type f | $SORT > $WORK_DIR/other_files) - (cd $THIS_DIR && $FIND . -type f | $SORT > $WORK_DIR/this_files) - - echo -n File names... - if diff $WORK_DIR/other_files $WORK_DIR/this_files > /dev/null; then - echo Identical! - else - echo Differences found. - REGRESSIONS=true - # Differences in directories found. - ONLY_OTHER=$(diff $WORK_DIR/other_files $WORK_DIR/this_files | $GREP '<') - if [ "$ONLY_OTHER" ]; then - echo Only in $OTHER - echo "$ONLY_OTHER" | sed 's|< ./| |g' - fi - # Differences in directories found. - ONLY_THIS=$(diff $WORK_DIR/other_files $WORK_DIR/this_files | $GREP '>') - if [ "$ONLY_THIS" ]; then - echo Only in $THIS - echo "$ONLY_THIS" | sed 's|> ./| |g' - fi - fi -} - - -########################################################################################## -# Compare permissions - -compare_permissions() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - mkdir -p $WORK_DIR - - echo -n Permissions... - found="" - for f in `cd $OTHER_DIR && $FIND . -type f` - do - if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi - if [ ! -f ${THIS_DIR}/$f ]; then continue; fi - OP=`ls -l ${OTHER_DIR}/$f | awk '{printf("%.10s\n", $1);}'` - TP=`ls -l ${THIS_DIR}/$f | awk '{printf("%.10s\n", $1);}'` - if [ "$OP" != "$TP" ] - then - if [ -z "$found" ]; then echo ; found="yes"; fi - $PRINTF "\told: ${OP} new: ${TP}\t$f\n" - fi - done - if [ -z "$found" ]; then - echo "Identical!" - else - REGRESSIONS=true - fi -} - -########################################################################################## -# Compare file command output - -compare_file_types() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - $MKDIR -p $WORK_DIR - - echo -n File types... - found="" - for f in `cd $OTHER_DIR && $FIND . -type f` - do - if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi - if [ ! -f ${THIS_DIR}/$f ]; then continue; fi - OF=`cd ${OTHER_DIR} && $FILE $f` - TF=`cd ${THIS_DIR} && $FILE $f` - if [ "$f" = "./src.zip" ] || [ "$f" = "./jre/lib/JObjC.jar" ] || [ "$f" = "./lib/JObjC.jar" ] - then - if [ "`echo $OF | $GREP -ic zip`" -gt 0 -a "`echo $TF | $GREP -ic zip`" -gt 0 ] - then - # the way we produces zip-files make it so that directories are stored in old file - # but not in new (only files with full-path) - # this makes file-5.09 report them as different - continue; - fi - fi - - if [ "$OF" != "$TF" ] - then - if [ -z "$found" ]; then echo ; found="yes"; fi - $PRINTF "\tother: ${OF}\n\tthis : ${TF}\n" - fi - done - if [ -z "$found" ]; then - echo "Identical!" - else - REGRESSIONS=true - fi -} - -########################################################################################## -# Compare the rest of the files - -compare_general_files() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - GENERAL_FILES=$(cd $THIS_DIR && $FIND . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ - ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ - ! -name "ct.sym" ! -name "*.diz" ! -name "*.dll" \ - ! -name "*.pdb" ! -name "*.exp" ! -name "*.ilk" \ - ! -name "*.lib" \ - | $GREP -v "./bin/" | $SORT | $FILTER) - - echo General files... - for f in $GENERAL_FILES - do - if [ -e $OTHER_DIR/$f ]; then - DIFF_OUT=$($DIFF $OTHER_DIR/$f $THIS_DIR/$f 2>&1) - if [ -n "$DIFF_OUT" ]; then - echo $f - REGRESSIONS=true - if [ "$SHOW_DIFFS" = "true" ]; then - echo "$DIFF_OUT" - fi - fi - fi - done - - -} - -########################################################################################## -# Compare zip file - -compare_zip_file() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - ZIP_FILE=$4 - - THIS_ZIP=$THIS_DIR/$ZIP_FILE - OTHER_ZIP=$OTHER_DIR/$ZIP_FILE - - THIS_SUFFIX="${THIS_ZIP##*.}" - OTHER_SUFFIX="${OTHER_ZIP##*.}" - if [ "$THIS_SUFFIX" != "$OTHER_SUFFIX" ]; then - echo The files do not have the same suffix type! - return 2 - fi - - UNARCHIVE="$UNZIP -q" - - TYPE="$THIS_SUFFIX" - - if $CMP $OTHER_ZIP $THIS_ZIP > /dev/null - then - return 0 - fi - # Not quite identical, the might still contain the same data. - # Unpack the jar/zip files in temp dirs - - THIS_UNZIPDIR=$WORK_DIR/$ZIP_FILE.this - OTHER_UNZIPDIR=$WORK_DIR/$ZIP_FILE.other - $RM -rf $THIS_UNZIPDIR $OTHER_UNZIPDIR - $MKDIR -p $THIS_UNZIPDIR - $MKDIR -p $OTHER_UNZIPDIR - (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP) - (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP) - - CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff - LANG=C $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE - - ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE) - ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE) - - return_value=0 - - if [ -n "$ONLY_OTHER" ]; then - echo " Only OTHER $ZIP_FILE contains:" - echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR| |"g | sed 's|: |/|g' - return_value=1 - fi - - if [ -n "$ONLY_THIS" ]; then - echo " Only THIS $ZIP_FILE contains:" - echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR| |"g | sed 's|: |/|g' - return_value=1 - fi - - DIFFING_FILES=$($GREP differ $CONTENTS_DIFF_FILE | $CUT -f 2 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g") - - $RM -f $WORK_DIR/$ZIP_FILE.diffs - for file in $DIFFING_FILES; do - if [[ "$ACCEPTED_JARZIP_CONTENTS" != *"$file"* ]]; then - diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs - fi - done - - if [ -s "$WORK_DIR/$ZIP_FILE.diffs" ]; then - return_value=1 - echo " Differing files in $ZIP_FILE" - $CAT $WORK_DIR/$ZIP_FILE.diffs | $GREP differ | cut -f 2 -d ' ' | \ - $SED "s|$OTHER_UNZIPDIR| |g" > $WORK_DIR/$ZIP_FILE.difflist - $CAT $WORK_DIR/$ZIP_FILE.difflist - - if [ -n "$SHOW_DIFFS" ]; then - for i in $(cat $WORK_DIR/$ZIP_FILE.difflist) ; do - if [ -f "${OTHER_UNZIPDIR}/$i.javap" ]; then - LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap - elif [ -f "${OTHER_UNZIPDIR}/$i.cleaned" ]; then - LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i - else - LANG=C $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i - fi - done - fi - fi - - return $return_value -} - - -########################################################################################## -# Compare all zip files - -compare_all_zip_files() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.zip" | $SORT | $FILTER ) - - if [ -n "$ZIPS" ]; then - echo Zip files... - - return_value=0 - for f in $ZIPS; do - if [ -f "$OTHER_DIR/$f" ]; then - compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f - if [ "$?" != "0" ]; then - return_value=1 - REGRESSIONS=true - fi - fi - done - fi - - return $return_value -} - -########################################################################################## -# Compare all jar files - -compare_all_jar_files() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - # TODO filter? - ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.jar" | $SORT | $FILTER) - - if [ -n "$ZIPS" ]; then - echo Jar files... - - return_value=0 - for f in $ZIPS; do - if [ -f "$OTHER_DIR/$f" ]; then - compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f - if [ "$?" != "0" ]; then - return_value=1 - REGRESSIONS=true - fi - fi - done - fi - - return $return_value -} - -########################################################################################## -# Compare binary (executable/library) file - -compare_bin_file() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - BIN_FILE=$4 - - THIS_FILE=$THIS_DIR/$BIN_FILE - OTHER_FILE=$OTHER_DIR/$BIN_FILE - NAME=$(basename $BIN_FILE) - WORK_FILE_BASE=$WORK_DIR/$BIN_FILE - FILE_WORK_DIR=$(dirname $WORK_FILE_BASE) - - $MKDIR -p $FILE_WORK_DIR - - ORIG_THIS_FILE="$THIS_FILE" - ORIG_OTHER_FILE="$OTHER_FILE" - - if [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then - THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME - OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME - $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other - $CP $THIS_FILE $THIS_STRIPPED_FILE - $CP $OTHER_FILE $OTHER_STRIPPED_FILE - $STRIP $THIS_STRIPPED_FILE - $STRIP $OTHER_STRIPPED_FILE - THIS_FILE="$THIS_STRIPPED_FILE" - OTHER_FILE="$OTHER_STRIPPED_FILE" - fi - - if [ -z "$SKIP_BIN_DIFF" ]; then - if cmp $OTHER_FILE $THIS_FILE > /dev/null; then - # The files were bytewise identical. - if [ -n "$VERBOSE" ]; then - echo " : : : : : $BIN_FILE" - fi - return 0 - fi - BIN_MSG=" diff " - if [[ "$ACCEPTED_BIN_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_BIN=true - if [[ "$KNOWN_BIN_DIFF" != *"$BIN_FILE"* ]]; then - BIN_MSG="*$BIN_MSG*" - REGRESSIONS=true - else - BIN_MSG=" $BIN_MSG " - fi - else - BIN_MSG="($BIN_MSG)" - DIFF_BIN= - fi - fi - - THIS_SIZE=$(ls -l "$THIS_FILE" | awk '{ print $5 }') - OTHER_SIZE=$(ls -l "$OTHER_FILE" | awk '{ print $5 }') - if [ $THIS_SIZE -ne $OTHER_SIZE ]; then - DIFF_SIZE_NUM=$($EXPR $THIS_SIZE - $OTHER_SIZE) - DIFF_SIZE_REL=$($EXPR $THIS_SIZE \* 100 / $OTHER_SIZE) - SIZE_MSG=$($PRINTF "%3d%% %4d" $DIFF_SIZE_REL $DIFF_SIZE_NUM) - if [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* ]] && [ "$DIFF_SIZE_REL" -gt 98 ] && [ "$DIFF_SIZE_REL" -lt 102 ]; then - SIZE_MSG="($SIZE_MSG)" - DIFF_SIZE= - else - if [[ "$ACCEPTED_SIZE_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_SIZE=true - if [[ "$KNOWN_SIZE_DIFF" != *"$BIN_FILE"* ]]; then - SIZE_MSG="*$SIZE_MSG*" - REGRESSIONS=true - else - SIZE_MSG=" $SIZE_MSG " - fi - else - SIZE_MSG="($SIZE_MSG)" - DIFF_SIZE= - fi - fi - else - SIZE_MSG=" " - DIFF_SIZE= - if [[ "$KNOWN_SIZE_DIFF $ACCEPTED_SIZE_DIFF" = *"$BIN_FILE"* ]]; then - SIZE_MSG=" ! " - fi - fi - - if [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then - SYM_SORT_CMD="sort" - else - SYM_SORT_CMD="cat" - fi - - # Check symbols - if [ "$OPENJDK_TARGET_OS" = "windows" ]; then - $DUMPBIN -exports $OTHER_FILE | $GREP " = " | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other - $DUMPBIN -exports $THIS_FILE | $GREP " = " | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this - elif [ "$OPENJDK_TARGET_OS" = "solaris" ]; then - # Some symbols get seemingly random 15 character prefixes. Filter them out. - $NM -a $ORIG_OTHER_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] \.\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other - $NM -a $ORIG_THIS_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] \.\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this - else - $NM -a $ORIG_OTHER_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other - $NM -a $ORIG_THIS_FILE | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this - fi - - LANG=C $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff - if [ -s $WORK_FILE_BASE.symbols.diff ]; then - SYM_MSG=" diff " - if [[ "$ACCEPTED_SYM_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_SYM=true - if [[ "$KNOWN_SYM_DIFF" != *"$BIN_FILE"* ]]; then - SYM_MSG="*$SYM_MSG*" - REGRESSIONS=true - else - SYM_MSG=" $SYM_MSG " - fi - else - SYM_MSG="($SYM_MSG)" - DIFF_SYM= - fi - else - SYM_MSG=" " - DIFF_SYM= - if [[ "$KNOWN_SYM_DIFF $ACCEPTED_SYM_DIFF" = *"$BIN_FILE"* ]]; then - SYM_MSG=" ! " - fi - fi - - # Check dependencies - if [ -n "$LDD_CMD" ];then - (cd $FILE_WORK_DIR && $CP $OTHER_FILE . && $LDD_CMD $NAME | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.other | $UNIQ > $WORK_FILE_BASE.deps.other.uniq) - (cd $FILE_WORK_DIR && $CP $THIS_FILE . && $LDD_CMD $NAME | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.this | $UNIQ > $WORK_FILE_BASE.deps.this.uniq) - (cd $FILE_WORK_DIR && $RM -f $NAME) - - LANG=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this > $WORK_FILE_BASE.deps.diff - LANG=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq > $WORK_FILE_BASE.deps.diff.uniq - - if [ -s $WORK_FILE_BASE.deps.diff ]; then - if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then - DEP_MSG=" diff " - else - DEP_MSG=" redun " - fi - if [[ "$ACCEPTED_DEP_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_DEP=true - if [[ "$KNOWN_DEP_DIFF" != *"$BIN_FILE"* ]]; then - DEP_MSG="*$DEP_MSG*" - REGRESSIONS=true - else - DEP_MSG=" $DEP_MSG " - fi - else - DEP_MSG="($DEP_MSG)" - DIFF_DEP= - fi - else - DEP_MSG=" " - DIFF_DEP= - if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then - DEP_MSG=" ! " - fi - fi - fi - - # Compare readelf output - if [ -n "$READELF_CMD" ] && [ -z "$SKIP_ELF_DIFF" ]; then - $READELF_CMD $OTHER_FILE > $WORK_FILE_BASE.readelf.other 2>&1 - $READELF_CMD $THIS_FILE > $WORK_FILE_BASE.readelf.this 2>&1 - - LANG=C $DIFF $WORK_FILE_BASE.readelf.other $WORK_FILE_BASE.readelf.this > $WORK_FILE_BASE.readelf.diff - - if [ -s $WORK_FILE_BASE.readelf.diff ]; then - ELF_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.readelf.diff | awk '{print $5}') - ELF_MSG=$($PRINTF "%8d" $ELF_DIFF_SIZE) - if [[ "$ACCEPTED_ELF_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_ELF=true - if [[ "$KNOWN_ELF_DIFF" != *"$BIN_FILE"* ]]; then - ELF_MSG="*$ELF_MSG*" - REGRESSIONS=true - else - ELF_MSG=" $ELF_MSG " - fi - else - ELF_MSG="($ELF_MSG)" - DIFF_ELF= - fi - else - ELF_MSG=" " - DIFF_ELF= - if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then - ELF_MSG=" ! " - fi - fi - fi - - # Compare disassemble output - if [ -f "$OBJDUMP" ] && [ -z "$SKIP_DIS_DIFF" ]; then - $OBJDUMP -d $OTHER_FILE | $GREP -v $NAME > $WORK_FILE_BASE.dis.other 2>&1 - $OBJDUMP -d $THIS_FILE | $GREP -v $NAME > $WORK_FILE_BASE.dis.this 2>&1 - - LANG=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff - - if [ -s $WORK_FILE_BASE.dis.diff ]; then - DIS_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.dis.diff | awk '{print $5}') - DIS_MSG=$($PRINTF "%8d" $DIS_DIFF_SIZE) - if [[ "$ACCEPTED_DIS_DIFF" != *"$BIN_FILE"* ]]; then - DIFF_DIS=true - if [[ "$KNOWN_DIS_DIFF" != *"$BIN_FILE"* ]]; then - DIS_MSG="*$DIS_MSG*" - REGRESSIONS=true - else - DIS_MSG=" $DIS_MSG " - fi - else - DIS_MSG="($DIS_MSG)" - DIFF_DIS= - fi - else - DIS_MSG=" " - DIFF_DIS= - if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then - DIS_MSG=" ! " - fi - fi - fi - - - if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_ELF$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then - if [ -n "$BIN_MSG" ]; then echo -n "$BIN_MSG:"; fi - if [ -n "$SIZE_MSG" ]; then echo -n "$SIZE_MSG:"; fi - if [ -n "$SYM_MSG" ]; then echo -n "$SYM_MSG:"; fi - if [ -n "$DEP_MSG" ]; then echo -n "$DEP_MSG:"; fi - if [ -n "$ELF_MSG" ]; then echo -n "$ELF_MSG:"; fi - if [ -n "$DIS_MSG" ]; then echo -n "$DIS_MSG:"; fi - echo " $BIN_FILE" - if [ "$SHOW_DIFFS" = "true" ]; then - if [ -s "$WORK_FILE_BASE.symbols.diff" ]; then - echo "Symbols diff:" - $CAT $WORK_FILE_BASE.symbols.diff - fi - if [ -s "$WORK_FILE_BASE.deps.diff" ]; then - echo "Deps diff:" - $CAT $WORK_FILE_BASE.deps.diff - fi - if [ -s "$WORK_FILE_BASE.readelf.diff" ]; then - echo "Readelf diff:" - $CAT $WORK_FILE_BASE.readelf.diff - fi - if [ -s "$WORK_FILE_BASE.dis.diff" ]; then - echo "Disassembly diff:" - $CAT $WORK_FILE_BASE.dis.diff - fi - fi - return 1 - fi - return 0 -} - -########################################################################################## -# Print binary diff header - -print_binary_diff_header() { - if [ -z "$SKIP_BIN_DIFF" ]; then echo -n " Binary :"; fi - if [ -z "$SKIP_SIZE_DIFF" ]; then echo -n " Size :"; fi - if [ -z "$SKIP_SYM_DIFF" ]; then echo -n " Symbols :"; fi - if [ -z "$SKIP_DEP_DIFF" ]; then echo -n " Deps :"; fi - if [ -z "$SKIP_ELF_DIFF" ]; then echo -n " Readelf :"; fi - if [ -z "$SKIP_DIS_DIFF" ]; then echo -n " Disass :"; fi - echo -} - -########################################################################################## -# Compare all libraries - -compare_all_libs() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - LIBS=$(cd $THIS_DIR && $FIND . -name 'lib*.so' -o -name '*.dylib' -o -name '*.dll' | $SORT | $FILTER) - - if [ -n "$LIBS" ]; then - echo Libraries... - print_binary_diff_header - for l in $LIBS; do - if [ -f "$OTHER_DIR/$l" ]; then - compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $l - if [ "$?" != "0" ]; then - return_value=1 - fi - fi - done - fi - - return $return_value -} - -########################################################################################## -# Compare all executables - -compare_all_execs() { - THIS_DIR=$1 - OTHER_DIR=$2 - WORK_DIR=$3 - - if [ "$OPENJDK_TARGET_OS" = "windows" ]; then - EXECS=$(cd $THIS_DIR && $FIND . -type f -name '*.exe' | $SORT | $FILTER) - else - EXECS=$(cd $THIS_DIR && $FIND . -name db -prune -o -type f -perm -100 \! \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' -o -name '*.cgi' \) | $SORT | $FILTER) - fi - - if [ -n "$EXECS" ]; then - echo Executables... - print_binary_diff_header - for e in $EXECS; do - if [ -f "$OTHER_DIR/$e" ]; then - compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $e - if [ "$?" != "0" ]; then - return_value=1 - fi - fi - done - fi - - return $return_value -} - -########################################################################################## -# Initiate configuration - -COMPARE_ROOT=/tmp/cimages.$USER -$MKDIR -p $COMPARE_ROOT -if [ "$OPENJDK_TARGET_OS" = "windows" ]; then - if [ "$(uname -o)" = "Cygwin" ]; then - COMPARE_ROOT=$(cygpath -msa $COMPARE_ROOT) - fi -fi - -THIS="$( cd "$( dirname "$0" )" && pwd )" -echo "$THIS" -THIS_SCRIPT="$0" - -if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "-?" ] || [ "$1" = "/h" ] || [ "$1" = "/?" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ]; then - echo "bash ./compare.sh [OPTIONS] [FILTER]" - echo "" - echo "-all Compare all files in all known ways" - echo "-names Compare the file names and directory structure" - echo "-perms Compare the permission bits on all files and directories" - echo "-types Compare the output of the file command on all files" - echo "-general Compare the files not convered by the specialized comparisons" - echo "-zips Compare the contents of all zip files" - echo "-jars Compare the contents of all jar files" - echo "-libs Compare all native libraries" - echo "-execs Compare all executables" - echo "-v Verbose output, does not hide known differences" - echo "-vv More verbose output, shows diff output of all comparisons" - echo "-o [OTHER] Compare with build in other directory. Will default to the old build directory" - echo "" - echo "[FILTER] List filenames in the image to compare, works for jars, zips, libs and execs" - echo "Example:" - echo "bash ./common/bin/compareimages.sh CodePointIM.jar" - exit 10 -fi - -CMP_NAMES=false -CMP_PERMS=false -CMP_TYPES=false -CMP_GENERAL=false -CMP_ZIPS=false -CMP_JARS=false -CMP_LIBS=false -CMP_EXECS=false - -while [ -n "$1" ]; do - case "$1" in - -v) - VERBOSE=true - ;; - -vv) - VERBOSE=true - SHOW_DIFFS=true - ;; - -o) - OTHER=$2 - shift - ;; - -all) - CMP_NAMES=true - if [ "$OPENJDK_TARGET_OS" != "windows" ]; then - CMP_PERMS=true - fi - CMP_TYPES=true - CMP_GENERAL=true - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true - ;; - -names) - CMP_NAMES=true - ;; - -perms) - CMP_PERMS=true - ;; - -types) - CMP_TYPES=true - ;; - -general) - CMP_GENERAL=true - ;; - -zips) - CMP_ZIPS=true - ;; - -jars) - CMP_JARS=true - ;; - -libs) - CMP_LIBS=true - ;; - -execs) - CMP_EXECS=true - ;; - *) - CMP_NAMES=false - CMP_PERMS=false - CMP_TYPES=false - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true - - if [ -z "$FILTER" ]; then - FILTER="$GREP" - fi - FILTER="$FILTER -e $1" - ;; - esac - shift -done - -if [ "$CMP_NAMES" = "false" ] && [ "$CMP_TYPES" = "false" ] && [ "$CMP_PERMS" = "false" ] && [ "$CMP_GENERAL" = "false" ] && [ "$CMP_ZIPS" = "false" ] && [ "$CMP_JARS" = "false" ] && [ "$CMP_LIBS" = "false" ] && [ "$CMP_EXECS" = "false" ]; then - CMP_NAMES=true - CMP_PERMS=true - CMP_TYPES=true - CMP_GENERAL=true - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true -fi - -if [ -z "$FILTER" ]; then - FILTER="$CAT" -fi - -if [ -z "$OTHER" ]; then - OTHER="$THIS/../$LEGACY_BUILD_DIR" - if [ -d "$OTHER" ]; then - OTHER="$( cd "$OTHER" && pwd )" - else - echo "Default old build directory does not exist:" - echo "$OTHER" - fi - echo "Comparing to default old build:" - echo "$OTHER" - echo -else - echo "Comparing to:" - echo "$OTHER" - echo -fi - -if [ ! -d "$OTHER" ]; then - echo "Other build directory does not exist:" - echo "$OTHER" - exit 1; -fi - -# Figure out the layout of the new build. Which kinds of images have been produced -if [ -d "$THIS/images/j2sdk-image" ]; then - THIS_J2SDK="$THIS/images/j2sdk-image" - THIS_J2RE="$THIS/images/j2re-image" -fi -if [ -d "$THIS/images/j2sdk-overlay-image" ]; then - THIS_J2SDK_OVERLAY="$THIS/images/j2sdk-overlay-image" - THIS_J2RE_OVERLAY="$THIS/images/j2re-overlay-image" -fi - -# Figure out the layout of the other build (old or new, normal or overlay image) -if [ -d "$OTHER/j2sdk-image" ]; then - if [ -f "$OTHER/j2sdk-image/LICENSE" ]; then - OTHER_J2SDK="$OTHER/j2sdk-image" - OTHER_J2RE="$OTHER/j2re-image" - else - OTHER_J2SDK_OVERLAY="$OTHER/j2sdk-image" - OTHER_J2RE_OVERLAY="$OTHER/j2re-image" - fi - -fi - -if [ -z "$OTHER_J2SDK" ] && [ -n "$OTHER_J2SDK_OVERLAY" ] && [ -z "$THIS_J2SDK_OVERLAY" ]; then - echo "OTHER build only has an overlay image while this build does not. Nothing to compare!" +# Now locate the main script and run it. +REAL_COMPARE_SCRIPT="$SRC_ROOT/common/bin/compare.sh" +if [ ! -e "$REAL_COMPARE_SCRIPT" ]; then + echo "Error: Cannot locate compare script, it should have been in $REAL_COMPARE_SCRIPT" exit 1 fi - -########################################################################################## -# Do the work - -if [ "$CMP_NAMES" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - echo -n "J2SDK " - compare_dirs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_dirs $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - - echo -n "J2SDK " - compare_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "J2SDK Overlay " - compare_dirs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_dirs $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - - echo -n "J2SDK Overlay " - compare_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - fi -fi - -if [ "$CMP_PERMS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - echo -n "J2SDK " - compare_permissions $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_permissions $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "J2SDK Overlay " - compare_permissions $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_permissions $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - fi -fi - -if [ "$CMP_TYPES" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - echo -n "J2SDK " - compare_file_types $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_file_types $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "J2SDK Overlay " - compare_file_types $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_file_types $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - fi -fi - -if [ "$CMP_GENERAL" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - echo -n "J2SDK " - compare_general_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - echo -n "J2RE " - compare_general_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "J2SDK Overlay " - compare_general_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - echo -n "J2RE Overlay " - compare_general_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay - fi -fi - -if [ "$CMP_ZIPS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - compare_all_zip_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - fi -fi - -if [ "$CMP_JARS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - compare_all_jar_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - fi -fi - -if [ "$CMP_LIBS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - compare_all_libs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "Overlay " - compare_all_libs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - fi -fi - -if [ "$CMP_EXECS" = "true" ]; then - if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then - compare_all_execs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk - fi - if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then - echo -n "Overlay " - compare_all_execs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay - fi -fi - -echo - -if [ -n "$REGRESSIONS" ]; then - echo "REGRESSIONS FOUND!" - echo - exit 1 -else - echo "No regressions found" - echo - exit 0 -fi +. "$REAL_COMPARE_SCRIPT" "$@" diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/configure --- a/common/autoconf/configure Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/configure Wed Jul 05 18:27:34 2017 +0200 @@ -1,4 +1,32 @@ -#!/bin/sh +#!/bin/bash +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +if test "x$BASH_VERSION" = x; then + echo This script needs bash to run. + echo It is recommended to use the configure script in the source tree root instead. + exit 1 +fi CONFIGURE_COMMAND_LINE="$@" conf_script_dir=`dirname $0` @@ -13,58 +41,81 @@ ### Test that the generated configure is up-to-date ### -# On Solaris /bin/sh doesn't support test -nt but /usr/bin/test does. -TEST=`which test` - -print_error_not_up_to_date() { - echo "Error: The configure source files is newer than the generated files." - echo "Please run 'sh autogen.sh' to update the generated files." - echo "Note that this test might trigger incorrectly sometimes due to hg timestamps". +run_autogen_or_fail() { + if test "x`which autoconf 2> /dev/null`" = x; then + echo "Cannot locate autoconf, unable to correct situation." + echo "Please install autoconf and run 'bash autogen.sh' to update the generated files." + echo "Error: Cannot continue" 1>&2 + exit 1 + else + echo "Running autogen.sh to correct the situation" + bash $conf_script_dir/autogen.sh + fi } -# NOTE: This test can occasionally go wrong due to the way mercurial handles -# timestamps. It it supposed to aid during development of build-infra, but should -# go away before making this the default build system. -for file in configure.ac *.m4 ; do - if $TEST $file -nt generated-configure.sh; then - print_error_not_up_to_date - exit 1 - fi -done - -if $TEST -e $conf_custom_script_dir/generated-configure.sh; then - # If custom source configure is available, make sure it is up-to-date as well. - for file in configure.ac *.m4 $conf_custom_script_dir/*.m4; do - if $TEST $file -nt $conf_custom_script_dir/generated-configure.sh; then - print_error_not_up_to_date - exit 1 +check_autoconf_timestamps() { + for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 ; do + if test $file -nt $conf_script_dir/generated-configure.sh; then + echo "Warning: The configure source files is newer than the generated files." + run_autogen_or_fail fi done + if test -e $conf_custom_script_dir/generated-configure.sh; then + # If custom source configure is available, make sure it is up-to-date as well. + for file in $conf_script_dir/configure.ac $conf_script_dir/*.m4 $conf_custom_script_dir/*.m4; do + if test $file -nt $conf_custom_script_dir/generated-configure.sh; then + echo "Warning: The configure source files is newer than the custom generated files." + run_autogen_or_fail + fi + done + fi +} + +check_hg_updates() { + if test "x`which hg 2> /dev/null`" != x; then + conf_updated_autoconf_files=`cd $conf_script_dir && hg status -mard 2> /dev/null | grep autoconf` + if test "x$conf_updated_autoconf_files" != x; then + echo "Configure source code has been updated, checking time stamps" + check_autoconf_timestamps + fi + + if test -e $conf_custom_script_dir; then + # If custom source configure is available, make sure it is up-to-date as well. + conf_custom_updated_autoconf_files=`cd $conf_custom_script_dir && hg status -mard 2> /dev/null | grep autoconf` + if test "x$conf_custom_updated_autoconf_files" != x; then + echo "Configure custom source code has been updated, checking time stamps" + check_autoconf_timestamps + fi + fi + + fi +} + +# Check for local changes +check_hg_updates + +if test -e $conf_custom_script_dir/generated-configure.sh; then # Test if open configure is newer than custom configure, if so, custom needs to # be regenerated. This test is required to ensure consistency with custom source. - conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_script_dir/generated-configure.sh | cut -d" " -f 3` - conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED: $conf_custom_script_dir/generated-configure.sh | cut -d" " -f 3` - if $TEST $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then - echo "Error: The generated configure file contains changes not present in the custom generated file." - echo "Please run 'sh autogen.sh' to update the generated files." - exit 1 + conf_open_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_script_dir/generated-configure.sh | cut -d"=" -f 2` + conf_custom_configure_timestamp=`grep DATE_WHEN_GENERATED= $conf_custom_script_dir/generated-configure.sh | cut -d"=" -f 2` + if test $conf_open_configure_timestamp -gt $conf_custom_configure_timestamp; then + echo "Warning: The generated configure file contains changes not present in the custom generated file." + run_autogen_or_fail fi - fi # Autoconf calls the configure script recursively sometimes. # Don't start logging twice in that case -if $TEST "x$conf_debug_configure" = xtrue; then +if test "x$conf_debug_configure" = xtrue; then conf_debug_configure=recursive fi ### ### Process command-line arguments ### -conf_processed_arguments= +conf_processed_arguments=() conf_openjdk_target= -conf_extra_cflags= -conf_extra_cxxflags= for conf_option do @@ -72,20 +123,14 @@ --openjdk-target=*) conf_openjdk_target=`expr "X$conf_option" : '[^=]*=\(.*\)'` continue ;; - --with-extra-cflags=*) - conf_extra_cflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` - continue ;; - --with-extra-cxxflags=*) - conf_extra_cxxflags=`expr "X$conf_option" : '[^=]*=\(.*\)'` - continue ;; --debug-configure) - if $TEST "x$conf_debug_configure" != xrecursive; then + if test "x$conf_debug_configure" != xrecursive; then conf_debug_configure=true export conf_debug_configure fi continue ;; *) - conf_processed_arguments="$conf_processed_arguments $conf_option" ;; + conf_processed_arguments=("${conf_processed_arguments[@]}" "$conf_option") ;; esac case $conf_option in @@ -95,11 +140,13 @@ conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; -host | --host | --hos | --ho | -host=* | --host=* | --hos=* | --ho=*) conf_legacy_crosscompile="$conf_legacy_crosscompile $conf_option" ;; + -help | --help | --hel | --he | -h) + conf_print_help=true ;; esac done -if $TEST "x$conf_legacy_crosscompile" != "x"; then - if $TEST "x$conf_openjdk_target" != "x"; then +if test "x$conf_legacy_crosscompile" != "x"; then + if test "x$conf_openjdk_target" != "x"; then echo "Error: Specifying --openjdk-target together with autoconf" echo "legacy cross-compilation flags is not supported." echo "You specified: --openjdk-target=$conf_openjdk_target and $conf_legacy_crosscompile." @@ -112,20 +159,20 @@ fi fi -if $TEST "x$conf_openjdk_target" != "x"; then +if test "x$conf_openjdk_target" != "x"; then conf_build_platform=`sh $conf_script_dir/build-aux/config.guess` - conf_processed_arguments="--build=$conf_build_platform --host=$conf_openjdk_target --target=$conf_openjdk_target $conf_processed_arguments" + conf_processed_arguments=("--build=$conf_build_platform" "--host=$conf_openjdk_target" "--target=$conf_openjdk_target" "${conf_processed_arguments[@]}") fi # Make configure exit with error on invalid options as default. # Can be overridden by --disable-option-checking, since we prepend our argument # and later options override earlier. -conf_processed_arguments="--enable-option-checking=fatal $conf_processed_arguments" +conf_processed_arguments=("--enable-option-checking=fatal" "${conf_processed_arguments[@]}") ### ### Call the configure script ### -if $TEST -e $conf_custom_script_dir/generated-configure.sh; then +if test -e $conf_custom_script_dir/generated-configure.sh; then # Custom source configure available; run that instead echo Running custom generated-configure.sh conf_script_to_run=$conf_custom_script_dir/generated-configure.sh @@ -134,17 +181,17 @@ conf_script_to_run=$conf_script_dir/generated-configure.sh fi -if $TEST "x$conf_debug_configure" != x; then +if test "x$conf_debug_configure" != x; then # Turn on shell debug output if requested (initial or recursive) set -x fi -if $TEST "x$conf_debug_configure" = xtrue; then +if test "x$conf_debug_configure" = xtrue; then # Turn on logging, but don't turn on twice when called recursive conf_debug_logfile=./debug-configure.log - (exec 3>&1 ; (. $conf_script_to_run $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" 2>&1 1>&3 ) | tee -a $conf_debug_logfile 1>&2 ; exec 3>&-) | tee -a $conf_debug_logfile + (exec 3>&1 ; (. $conf_script_to_run "${conf_processed_arguments[@]}" 2>&1 1>&3 ) | tee -a $conf_debug_logfile 1>&2 ; exec 3>&-) | tee -a $conf_debug_logfile else - . $conf_script_to_run $conf_processed_arguments --with-extra-cflags="$conf_extra_cflags" --with-extra-cxxflags="$conf_extra_cxxflags" + ( . $conf_script_to_run "${conf_processed_arguments[@]}" ) fi conf_result_code=$? @@ -152,8 +199,28 @@ ### Post-processing ### +if test $conf_result_code -eq 0; then + if test "x$conf_print_help" = xtrue; then + cat < + --debug-configure Run the configure script with additional debug + logging enabled. + +Please be aware that, when cross-compiling, the OpenJDK configure script will +generally use 'target' where autoconf traditionally uses 'host'. +EOT + fi +else + echo configure exiting with result code $conf_result_code +fi + # Move the log file to the output root, if this was successfully created -if $TEST -d "$OUTPUT_ROOT"; then +if test -d "$OUTPUT_ROOT"; then mv -f config.log "$OUTPUT_ROOT" 2> /dev/null fi diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/configure.ac --- a/common/autoconf/configure.ac Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/configure.ac Wed Jul 05 18:27:34 2017 +0200 @@ -31,16 +31,14 @@ AC_PREREQ([2.61]) -AC_INIT(openjdk, jdk8, build-dev@openjdk.java.net) - -# Do not change or remove the following line, it is needed for consistency checks: -# DATE_WHEN_GENERATED: @DATE_WHEN_GENERATED@ +AC_INIT(OpenJDK, jdk8, build-dev@openjdk.java.net,,http://openjdk.java.net) AC_CONFIG_AUX_DIR([build-aux]) m4_include([build-aux/pkg.m4]) # Include these first... m4_include([basics.m4]) +m4_include([basics_windows.m4]) m4_include([builddeps.m4]) # ... then the rest m4_include([boot-jdk.m4]) @@ -51,35 +49,57 @@ m4_include([platform.m4]) m4_include([source-dirs.m4]) m4_include([toolchain.m4]) +m4_include([toolchain_windows.m4]) -# This line needs to be here, verbatim, after all includes. -# It is replaced with custom functionality when building +AC_DEFUN_ONCE([CUSTOM_EARLY_HOOK]) +AC_DEFUN_ONCE([CUSTOM_LATE_HOOK]) + +# This line needs to be here, verbatim, after all includes and the dummy hook +# definitions. It is replaced with custom functionality when building # custom sources. -AC_DEFUN_ONCE([CUSTOM_HOOK]) +#CUSTOM_AUTOCONF_INCLUDE + +# Do not change or remove the following line, it is needed for consistency checks: +DATE_WHEN_GENERATED=@DATE_WHEN_GENERATED@ ############################################################################### # -# Initialization +# Initialization / Boot-strapping +# +# The bootstrapping process needs to solve the "chicken or the egg" problem, +# thus it jumps back and forth, each time gaining something needed later on. # ############################################################################### # Basic initialization that must happen first of all BASIC_INIT +BASIC_SETUP_FUNDAMENTAL_TOOLS # Now we can determine OpenJDK build and target platforms. This is required to # have early on. PLATFORM_SETUP_OPENJDK_BUILD_AND_TARGET -# Continue setting up basic stuff. +# Continue setting up basic stuff. Most remaining code require fundamental tools. BASIC_SETUP_PATHS BASIC_SETUP_LOGGING +# These are needed to be able to create a configuration name (and thus the output directory) +JDKOPT_SETUP_JDK_VARIANT +JDKOPT_SETUP_JVM_VARIANTS +JDKOPT_SETUP_DEBUG_LEVEL + +# With basic setup done, call the custom early hook. +CUSTOM_EARLY_HOOK + +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. +BASIC_SETUP_OUTPUT_DIR + # Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. HELP_SETUP_DEPENDENCY_HELP -# Setup simple tools, that do not need have cross compilation support. -# Without these, we can't properly run the rest of the configure script. -BASIC_SETUP_TOOLS +# Setup tools that requires more complex handling, or that is not needed by the configure script. +BASIC_SETUP_COMPLEX_TOOLS # Check if pkg-config is available. PKG_PROG_PKG_CONFIG @@ -100,16 +120,9 @@ ############################################################################### # We need build & target for this. -JDKOPT_SETUP_JDK_VARIANT -JDKOPT_SETUP_JVM_VARIANTS -JDKOPT_SETUP_DEBUG_LEVEL JDKOPT_SETUP_JDK_OPTIONS JDKOPT_SETUP_JDK_VERSION_NUMBERS -# To properly create a configuration name, we need to have the OpenJDK target -# and options (variants and debug level) parsed. -BASIC_SETUP_OUTPUT_DIR - ############################################################################### # # Setup BootJDK, used to bootstrap the build. @@ -137,7 +150,6 @@ ############################################################################### TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS -TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV # Locate the actual tools TOOLCHAIN_SETUP_PATHS @@ -152,10 +164,6 @@ TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_OPTIMIZATION TOOLCHAIN_SETUP_COMPILER_FLAGS_FOR_JDK -# After we have toolchain, we can compile the uncygdrive helper -BASIC_COMPILE_UNCYGDRIVE - - # Setup debug symbols (need objcopy from the toolchain for that) JDKOPT_SETUP_DEBUG_SYMBOLS @@ -173,6 +181,9 @@ LIB_SETUP_MISC_LIBS LIB_SETUP_STATIC_LINK_LIBSTDCPP +# After we have toolchain and the paths to all libraries (needed by msys), we can compile the fixpath helper +BASIC_COMPILE_FIXPATH + ############################################################################### # # We need to do some final tweaking, when everything else is done. @@ -210,7 +221,7 @@ BASIC_TEST_USABILITY_ISSUES # At the end, call the custom hook. (Dummy macro if no custom sources available) -CUSTOM_HOOK +CUSTOM_LATE_HOOK # We're messing a bit with internal autoconf variables to put the config.status # in the output directory instead of the current directory. diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/generated-configure.sh --- a/common/autoconf/generated-configure.sh Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/generated-configure.sh Wed Jul 05 18:27:34 2017 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.67 for openjdk jdk8. +# Generated by GNU Autoconf 2.67 for OpenJDK jdk8. # # Report bugs to . # @@ -550,12 +550,12 @@ MAKEFLAGS= # Identity of this package. -PACKAGE_NAME='openjdk' +PACKAGE_NAME='OpenJDK' PACKAGE_TARNAME='openjdk' PACKAGE_VERSION='jdk8' -PACKAGE_STRING='openjdk jdk8' +PACKAGE_STRING='OpenJDK jdk8' PACKAGE_BUGREPORT='build-dev@openjdk.java.net' -PACKAGE_URL='' +PACKAGE_URL='http://openjdk.java.net' # Factoring default headers for most tests. ac_includes_default="\ @@ -606,7 +606,9 @@ NUM_CORES SALIB_NAME HOTSPOT_MAKE_ARGS +FIXPATH LIBCXX +STATIC_CXX_SETTING LIBDL LIBM LIBZIP_CAN_USE_MMAP @@ -619,7 +621,6 @@ USING_SYSTEM_FT_LIB FREETYPE2_LIBS FREETYPE2_CFLAGS -CUPS_LIBS CUPS_CFLAGS OPENWIN_HOME X_EXTRA_LIBS @@ -631,7 +632,6 @@ CFLAGS_DEBUG_SYMBOLS ZIP_DEBUGINFO_FILES ENABLE_DEBUG_SYMBOLS -UNCYGDRIVE LDFLAGS_CXX_JDK LDFLAGS_JDKEXE_SUFFIX LDFLAGS_JDKLIB_SUFFIX @@ -672,6 +672,9 @@ SHARED_LIBRARY OBJ_SUFFIX LIPO +ac_ct_OBJDUMP +OBJDUMP +ac_ct_OBJCOPY OBJCOPY MCS STRIP @@ -683,9 +686,13 @@ RC_FLAGS DUMPBIN WINAR +HOTSPOT_RC +HOTSPOT_MT RC MT WINLD +HOTSPOT_LD +HOTSPOT_CXX ARFLAGS AR LDEXECXX @@ -698,6 +705,9 @@ ac_ct_CXX CXXFLAGS CXX +ac_ct_PROPER_COMPILER_CXX +PROPER_COMPILER_CXX +POTENTIAL_CXX OBJEXT EXEEXT ac_ct_CC @@ -705,12 +715,16 @@ LDFLAGS CFLAGS CC +ac_ct_PROPER_COMPILER_CC +PROPER_COMPILER_CC +POTENTIAL_CC BUILD_LD BUILD_CXX BUILD_CC -MSVCR100DLL -CHECK_FOR_VCINSTALLDIR -SETUPDEVENV +MSVCR_DLL +VS_PATH +VS_LIB +VS_INCLUDE CYGWIN_LINK AR_OUT_OPTION LD_OUT_OPTION @@ -733,15 +747,14 @@ BOOT_RTJAR JAVA_CHECK JAVAC_CHECK -OUTPUT_ROOT -CONF_NAME -SPEC COOKED_BUILD_NUMBER FULL_VERSION RELEASE JDK_VERSION RUNTIME_NAME COPYRIGHT_YEAR +MACOSX_BUNDLE_ID_BASE +MACOSX_BUNDLE_NAME_BASE COMPANY_NAME JDK_RC_PLATFORM_NAME PRODUCT_SUFFIX @@ -753,16 +766,39 @@ JDK_MICRO_VERSION JDK_MINOR_VERSION JDK_MAJOR_VERSION -ENABLE_JFR COMPRESS_JARS +UNLIMITED_CRYPTO CACERTS_FILE TEST_IN_BUILD -DISABLE_NIMBUS BUILD_HEADLESS SUPPORT_HEADFUL SUPPORT_HEADLESS -JIGSAW SET_OPENJDK +BDEPS_FTP +BDEPS_UNZIP +OS_VERSION_MICRO +OS_VERSION_MINOR +OS_VERSION_MAJOR +PKG_CONFIG +COMM +TIME +STAT +HG +READELF +OTOOL +LDD +ZIP +UNZIP +FIND_DELETE +MAKE +CHECK_TOOLSDIR_MAKE +CHECK_TOOLSDIR_GMAKE +CHECK_MAKE +CHECK_GMAKE +PKGHANDLER +OUTPUT_ROOT +CONF_NAME +SPEC BUILD_VARIANT_RELEASE DEBUG_CLASSFILES FASTDEBUG @@ -776,72 +812,12 @@ JVM_VARIANT_SERVER JVM_VARIANTS JDK_VARIANT -BDEPS_FTP -BDEPS_UNZIP -OS_VERSION_MICRO -OS_VERSION_MINOR -OS_VERSION_MAJOR -PKG_CONFIG -HG -OBJDUMP -READELF -OTOOL -LDD -THEPWDCMD -FIND_DELETE -RM -MAKE -CHECK_TOOLSDIR_MAKE -CHECK_TOOLSDIR_GMAKE -CHECK_MAKE -CHECK_GMAKE -NAWK -SED -FGREP -EGREP -GREP -AWK -ZIP -XARGS -WC -UNZIP -UNIQ -TR -TOUCH -TEE -TAR -TAIL -SORT -SH -PRINTF -MV -MKDIR -LS -LN -HEAD -FIND -FILE -EXPR -ECHO -DIFF -DF -DATE -CUT -CPIO -CP -CMP -CHMOD -CAT -BASENAME -PKGHANDLER BUILD_LOG_WRAPPER BUILD_LOG_PREVIOUS BUILD_LOG SYS_ROOT PATH_SEP -CYGPATH SRC_ROOT -READLINK DEFINE_CROSS_COMPILE_ARCH LP64 OPENJDK_TARGET_OS_API_DIR @@ -854,18 +830,18 @@ REQUIRED_OS_VERSION REQUIRED_OS_NAME COMPILE_TYPE +OPENJDK_TARGET_CPU_ENDIAN +OPENJDK_TARGET_CPU_BITS +OPENJDK_TARGET_CPU_ARCH +OPENJDK_TARGET_CPU +OPENJDK_TARGET_OS_API +OPENJDK_TARGET_OS OPENJDK_BUILD_CPU_ENDIAN OPENJDK_BUILD_CPU_BITS OPENJDK_BUILD_CPU_ARCH OPENJDK_BUILD_CPU OPENJDK_BUILD_OS_API OPENJDK_BUILD_OS -OPENJDK_TARGET_CPU_ENDIAN -OPENJDK_TARGET_CPU_BITS -OPENJDK_TARGET_CPU_ARCH -OPENJDK_TARGET_CPU -OPENJDK_TARGET_OS_API -OPENJDK_TARGET_OS OPENJDK_BUILD_AUTOCONF_NAME OPENJDK_TARGET_AUTOCONF_NAME target_os @@ -880,6 +856,51 @@ build_vendor build_cpu build +SETFILE +DF +READLINK +CYGPATH +NAWK +SED +FGREP +EGREP +GREP +AWK +XARGS +WHICH +WC +UNIQ +UNAME +TR +TOUCH +TEE +TAR +TAIL +SORT +SH +RM +THEPWDCMD +PRINTF +MV +MKTEMP +MKDIR +LS +LN +HEAD +FIND +FILE +EXPR +ECHO +DIRNAME +DIFF +DATE +CUT +CP +CMP +CHMOD +CAT +BASH +BASENAME DATE_WHEN_CONFIGURED CONFIGURE_COMMAND_LINE CUSTOM_MAKE_DIR @@ -929,23 +950,20 @@ with_sys_root with_tools_dir with_devkit -with_builddeps_conf -with_builddeps_server -with_builddeps_dir -with_builddeps_group -enable_list_builddeps with_jdk_variant with_jvm_variants enable_debug with_debug_level +with_conf_name +with_builddeps_conf +with_builddeps_server +with_builddeps_dir +with_builddeps_group enable_openjdk_only -enable_jigsaw enable_headful -enable_nimbus enable_hotspot_test_in_build with_cacerts_file -enable_jfr -with_conf_name +enable_unlimited_crypto with_boot_jdk with_boot_jdk_jvmargs with_add_source_root @@ -957,7 +975,7 @@ with_override_jaxws with_override_hotspot with_override_jdk -with_msvcr100dll +with_msvcr_dll with_extra_cflags with_extra_cxxflags with_extra_ldflags @@ -967,7 +985,6 @@ with_x with_cups with_cups_include -with_cups_lib with_freetype with_alsa with_alsa_include @@ -1546,7 +1563,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures openjdk jdk8 to adapt to many kinds of systems. +\`configure' configures OpenJDK jdk8 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1616,7 +1633,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of openjdk jdk8:";; + short | recursive ) echo "Configuration of OpenJDK jdk8:";; esac cat <<\_ACEOF @@ -1624,24 +1641,19 @@ --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-list-builddeps list all build dependencies known to the configure - script --enable-debug set the debug level to fastdebug (shorthand for --with-debug-level=fastdebug) [disabled] - --enable-openjdk-only build OpenJDK regardless of the presence of closed - repositories [disabled] - --enable-jigsaw build Jigsaw images (not yet available) [disabled] - --disable-headful build headful support (graphical UI support) - [enabled] - --disable-nimbus disable Nimbus L&F [enabled] + --enable-openjdk-only supress building closed source even if present + [disabled] + --disable-headful disable building headful support (graphical UI + support) [enabled] --enable-hotspot-test-in-build - enable running of Queens test after Hotspot build - (not yet available) [disabled] - --enable-jfr enable jfr (default is no) - ENABLE_JFR="${enableval}" - --disable-debug-symbols disable generation of debug symbols ([enabled]) + run the Queens test after Hotspot build [disabled] + --enable-unlimited-crypto + Enable unlimited crypto policy [disabled] + --disable-debug-symbols disable generation of debug symbols [enabled] --disable-zip-debug-info - don't zip debug-info files ([enabled@:@) + disable zipping of debug-info files [enabled] --disable-macosx-runtime-support disable the use of MacOSX Java runtime support framework [enabled] @@ -1651,38 +1663,38 @@ --enable-sjavac use sjavac to do fast incremental compiles [disabled] --disable-precompiled-headers - use precompiled headers when compiling C++ [enabled] - --disable-ccache use ccache to speed up recompilations [enabled] + disable using precompiled headers when compiling C++ + [enabled] + --disable-ccache disable using ccache to speed up recompilations + [enabled] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-custom-make-dir directory containing custom build/make files + --with-custom-make-dir use this directory for custom build/make files --with-target-bits build 32-bit or 64-bit binaries (for platforms that support it), e.g. --with-target-bits=32 [guessed] - --with-sys-root pass this sys-root to the compilers and linker - (useful if the sys-root encoded in the cross - compiler tools is incorrect) - --with-tools-dir search this directory for (cross-compiling) - compilers and tools + --with-sys-root pass this sys-root to the compilers and tools (for + cross-compiling) + --with-tools-dir search this directory for compilers and tools (for + cross-compiling) --with-devkit use this directory as base for tools-dir and sys-root (for cross-compiling) - --with-builddeps-conf use this configuration file for the builddeps - --with-builddeps-server download and use build dependencies from this server - url, e.g. - --with-builddeps-server=ftp://example.com/dir - --with-builddeps-dir store downloaded build dependencies here - [d/localhome/builddeps] - --with-builddeps-group chgrp the downloaded build dependencies to this - group --with-jdk-variant JDK variant to build (normal) [normal] --with-jvm-variants JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) [server] --with-debug-level set the debug level (release, fastdebug, slowdebug) [release] + --with-conf-name use this as the name of the configuration [generated + from important configuration options] + --with-builddeps-conf use this configuration file for the builddeps + --with-builddeps-server download and use build dependencies from this server + url + --with-builddeps-dir store downloaded build dependencies here + [/localhome/builddeps] + --with-builddeps-group chgrp the downloaded build dependencies to this + group --with-cacerts-file specify alternative cacerts file - --with-conf-name use this as the name of the configuration, - overriding the generated default --with-boot-jdk path to Boot JDK (used to bootstrap build) [probed] --with-boot-jdk-jvmargs specify JVM arguments to be passed to all invocations of the Boot JDK, overriding the default @@ -1707,16 +1719,15 @@ --with-override-jaxws use this jaxws dir for the build --with-override-hotspot use this hotspot dir for the build --with-override-jdk use this jdk dir for the build - --with-msvcr100dll copy this msvcr100.dll into the built JDK + --with-msvcr-dll copy this msvcr100.dll into the built JDK (Windows + only) [probed] --with-extra-cflags extra flags to be used when compiling jdk c-files --with-extra-cxxflags extra flags to be used when compiling jdk c++-files --with-extra-ldflags extra flags to be used when linking jdk --with-x use the X Window System --with-cups specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the - headers under PATH/include) + (expecting the headers under PATH/include) --with-cups-include specify directory for the cups include files - --with-cups-lib specify directory for the cups library --with-freetype specify prefix directory for the freetype2 package (expecting the libraries under PATH/lib and the headers under PATH/include) @@ -1733,10 +1744,7 @@ --with-memory-size=1024 [probed] --with-sjavac-server-java use this java binary for running the sjavac - background server and other long running java tasks - in the build process, e.g. - ---with-sjavac-server-java="/opt/jrockit/bin/java - -server" + background server [Boot JDK java] --with-sjavac-server-cores use at most this number of concurrent threads on the sjavac server [probed] @@ -1769,6 +1777,7 @@ it to find libraries and programs with nonstandard names/locations. Report bugs to . +OpenJDK home page: . _ACEOF ac_status=$? fi @@ -1831,7 +1840,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -openjdk configure jdk8 +OpenJDK configure jdk8 generated by GNU Autoconf 2.67 Copyright (C) 2010 Free Software Foundation, Inc. @@ -2488,101 +2497,41 @@ } # ac_fn_cxx_check_func -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no + eval "$3=yes" +else + eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no -fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( $as_echo "## ----------------------------------------- ## -## Report this to build-dev@openjdk.java.net ## -## ----------------------------------------- ##" - ) | sed "s/^/$as_me: WARNING: /" >&2 - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval "test \"\${$3+set}\"" = set; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} -} # ac_fn_c_check_header_mongrel +} # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by openjdk $as_me jdk8, which was +It was created by OpenJDK $as_me jdk8, which was generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ @@ -2931,9 +2880,6 @@ -# Do not change or remove the following line, it is needed for consistency checks: -# DATE_WHEN_GENERATED: 1347963060 - ac_aux_dir= for ac_dir in build-aux "$srcdir"/build-aux; do if test -f "$ac_dir/install-sh"; then @@ -3053,14 +2999,46 @@ - - - - - - - - +# This will make sure the given variable points to a full and proper +# path. This means: +# 1) There will be no spaces in the path. On posix platforms, +# spaces in the path will result in an error. On Windows, +# the path will be rewritten using short-style to be space-free. +# 2) The path will be absolute, and it will be in unix-style (on +# cygwin). +# $1: The name of the variable to fix + + +# This will make sure the given variable points to a executable +# with a full and proper path. This means: +# 1) There will be no spaces in the path. On posix platforms, +# spaces in the path will result in an error. On Windows, +# the path will be rewritten using short-style to be space-free. +# 2) The path will be absolute, and it will be in unix-style (on +# cygwin). +# Any arguments given to the executable is preserved. +# If the input variable does not have a directory specification, then +# it need to be in the PATH. +# $1: The name of the variable to fix + + + + + + +# Test that variable $1 denoting a program is not empty. If empty, exit with an error. +# $1: variable to check +# $2: executable name to print in warning (optional) + + +# Does AC_PATH_PROG followed by BASIC_CHECK_NONEMPTY. +# Arguments as AC_PATH_PROG: +# $1: variable to set +# $2: executable name to look for + + +# Setup the most fundamental tools that relies on not much else to set up, +# but is used by much of the early bootstrap code. # Setup basic configuration paths, and platform-specific stuff related to PATHs. @@ -3083,23 +3061,10 @@ -# Test that variable $1 denoting a program is not empty. If empty, exit with an error. -# $1: variable to check -# $2: executable name to print in warning (optional) - - -# Does AC_PATH_PROG followed by CHECK_NONEMPTY. -# Arguments as AC_PATH_PROG: -# $1: variable to set -# $2: executable name to look for - - - - - - - -# Check if build directory is on local disk. + + +# Check if build directory is on local disk. If not possible to determine, +# we prefer to claim it's local. # Argument 1: directory to test # Argument 2: what to do if it is on local disk # Argument 3: what to do otherwise (remote disk or failure) @@ -3136,6 +3101,64 @@ +# Helper function which possibly converts a path using DOS-style short mode. +# If so, the updated path is stored in $new_path. +# $1: The path to check + + +# Helper function which possibly converts a path using DOS-style short mode. +# If so, the updated path is stored in $new_path. +# $1: The path to check + + +# FIXME: The BASIC_FIXUP_*_CYGWIN/MSYS is most likely too convoluted +# and could probably be heavily simplified. However, all changes in this +# area tend to need lot of testing in different scenarios, and in lack of +# proper unit testing, cleaning this up has not been deemed worth the effort +# at the moment. + + + + + + + + + +# Setup basic configuration paths, and platform-specific stuff related to PATHs. + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + @@ -3287,6 +3310,19 @@ +cygwin_help() { + case $1 in + unzip) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P unzip" ;; + zip) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P zip" ;; + make) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P make" ;; + * ) + break ;; + esac +} + apt_help() { case $1 in devkit) @@ -3561,28 +3597,82 @@ # questions. # - - - - - - - - - - - - - - -# This line needs to be here, verbatim, after all includes. -# It is replaced with custom functionality when building +# $1 = compiler to test (CC or CXX) +# $2 = human readable name of compiler (C or C++) + + + + + +# $1 = compiler to test (CC or CXX) +# $2 = human readable name of compiler (C or C++) +# $3 = list of compiler names to search for + + + + + + + + + + + + +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + + + + + + + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. + + + + + + +# This line needs to be here, verbatim, after all includes and the dummy hook +# definitions. It is replaced with custom functionality when building # custom sources. - - -############################################################################### -# -# Initialization +#CUSTOM_AUTOCONF_INCLUDE + +# Do not change or remove the following line, it is needed for consistency checks: +DATE_WHEN_GENERATED=1351539315 + +############################################################################### +# +# Initialization / Boot-strapping +# +# The bootstrapping process needs to solve the "chicken or the egg" problem, +# thus it jumps back and forth, each time gaining something needed later on. # ############################################################################### @@ -3592,789 +3682,12 @@ DATE_WHEN_CONFIGURED=`LANG=C date` - - -# Now we can determine OpenJDK build and target platforms. This is required to -# have early on. -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if test "${ac_cv_build+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if test "${ac_cv_host+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if test "${ac_cv_target+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" -# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the -# product you're building. The target of this build is called "host". Since this is confusing to most people, we -# have not adopted that system, but use "target" as the platform we are building for. In some places though we need -# to use the configure naming style. - - - - - - # Copy the autoconf trip/quadruplet verbatim to OPENJDK_TARGET_AUTOCONF_NAME - # (from the autoconf "host") and OPENJDK_BUILD_AUTOCONF_NAME - # Note that we might later on rewrite e.g. OPENJDK_TARGET_CPU due to reduced build, - # but this will not change the value of OPENJDK_TARGET_AUTOCONF_NAME. - OPENJDK_TARGET_AUTOCONF_NAME="$host" - OPENJDK_BUILD_AUTOCONF_NAME="$build" - - - - # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. - - case "$host_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - ;; - *) - as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 - ;; - esac - - - # First argument is the cpu name from the trip/quad - case "$host_cpu" in - x86_64) - VAR_CPU=x86_64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - ;; - i?86) - VAR_CPU=x86 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - ;; - sparcv9) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - ;; - *) - as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 - ;; - esac - - # ... and setup our own variables. (Do this explicitely to facilitate searching) - OPENJDK_TARGET_OS="$VAR_OS" - OPENJDK_TARGET_OS_API="$VAR_OS_API" - OPENJDK_TARGET_CPU="$VAR_CPU" - OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" - OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" - OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - - # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. - - case "$build_os" in - *linux*) - VAR_OS=linux - VAR_OS_API=posix - ;; - *solaris*) - VAR_OS=solaris - VAR_OS_API=posix - ;; - *darwin*) - VAR_OS=macosx - VAR_OS_API=posix - ;; - *bsd*) - VAR_OS=bsd - VAR_OS_API=posix - ;; - *cygwin*|*windows*) - VAR_OS=windows - VAR_OS_API=winapi - ;; - *) - as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 - ;; - esac - - - # First argument is the cpu name from the trip/quad - case "$build_cpu" in - x86_64) - VAR_CPU=x86_64 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=little - ;; - i?86) - VAR_CPU=x86 - VAR_CPU_ARCH=x86 - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - ;; - arm*) - VAR_CPU=arm - VAR_CPU_ARCH=arm - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=little - ;; - powerpc) - VAR_CPU=ppc - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - ;; - powerpc64) - VAR_CPU=ppc64 - VAR_CPU_ARCH=ppc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - ;; - sparc) - VAR_CPU=sparc - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=32 - VAR_CPU_ENDIAN=big - ;; - sparcv9) - VAR_CPU=sparcv9 - VAR_CPU_ARCH=sparc - VAR_CPU_BITS=64 - VAR_CPU_ENDIAN=big - ;; - *) - as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 - ;; - esac - - # ..and setup our own variables. (Do this explicitely to facilitate searching) - OPENJDK_BUILD_OS="$VAR_OS" - OPENJDK_BUILD_OS_API="$VAR_OS_API" - OPENJDK_BUILD_CPU="$VAR_CPU" - OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" - OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" - OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" - - - - - - - - - -# Check whether --with-target-bits was given. -if test "${with_target_bits+set}" = set; then : - withval=$with_target_bits; -fi - - - # We have three types of compiles: - # native == normal compilation, target system == build system - # cross == traditional cross compilation, target system != build system; special toolchain needed - # reduced == using native compilers, but with special flags (e.g. -m32) to produce 32-bit builds on 64-bit machines - # - if test "x$OPENJDK_BUILD_AUTOCONF_NAME" != "x$OPENJDK_TARGET_AUTOCONF_NAME"; then - # We're doing a proper cross-compilation - COMPILE_TYPE="cross" - else - COMPILE_TYPE="native" - fi - - if test "x$with_target_bits" != x; then - if test "x$COMPILE_TYPE" = "xcross"; then - as_fn_error $? "It is not possible to combine --with-target-bits=X and proper cross-compilation. Choose either." "$LINENO" 5 - fi - - if test "x$with_target_bits" = x32 && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then - # A reduced build is requested - COMPILE_TYPE="reduced" - OPENJDK_TARGET_CPU_BITS=32 - if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then - OPENJDK_TARGET_CPU=x86 - elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then - OPENJDK_TARGET_CPU=sparc - else - as_fn_error $? "Reduced build (--with-target-bits=32) is only supported on x86_64 and sparcv9" "$LINENO" 5 - fi - elif test "x$with_target_bits" = x64 && test "x$OPENJDK_TARGET_CPU_BITS" = x32; then - as_fn_error $? "It is not possible to use --with-target-bits=64 on a 32 bit system. Use proper cross-compilation instead." "$LINENO" 5 - elif test "x$with_target_bits" = "x$OPENJDK_TARGET_CPU_BITS"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: --with-target-bits are set to build platform address size; argument has no meaning" >&5 -$as_echo "$as_me: --with-target-bits are set to build platform address size; argument has no meaning" >&6;} - else - as_fn_error $? "--with-target-bits can only be 32 or 64, you specified $with_target_bits!" "$LINENO" 5 - fi - fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for compilation type" >&5 -$as_echo_n "checking for compilation type... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMPILE_TYPE" >&5 -$as_echo "$COMPILE_TYPE" >&6; } - - - if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then - REQUIRED_OS_NAME=SunOS - REQUIRED_OS_VERSION=5.10 - fi - if test "x$OPENJDK_TARGET_OS" = "xlinux"; then - REQUIRED_OS_NAME=Linux - REQUIRED_OS_VERSION=2.6 - fi - if test "x$OPENJDK_TARGET_OS" = "xwindows"; then - REQUIRED_OS_NAME=Windows - if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then - REQUIRED_OS_VERSION=5.2 - else - REQUIRED_OS_VERSION=5.1 - fi - fi - if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then - REQUIRED_OS_NAME=Darwin - REQUIRED_OS_VERSION=11.2 - fi - - - - - - # Also store the legacy naming of the cpu. - # Ie i586 and amd64 instead of x86 and x86_64 - OPENJDK_TARGET_CPU_LEGACY="$OPENJDK_TARGET_CPU" - if test "x$OPENJDK_TARGET_CPU" = xx86; then - OPENJDK_TARGET_CPU_LEGACY="i586" - elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then - # On all platforms except MacOSX replace x86_64 with amd64. - OPENJDK_TARGET_CPU_LEGACY="amd64" - fi - - - # And the second legacy naming of the cpu. - # Ie i386 and amd64 instead of x86 and x86_64. - OPENJDK_TARGET_CPU_LEGACY_LIB="$OPENJDK_TARGET_CPU" - if test "x$OPENJDK_TARGET_CPU" = xx86; then - OPENJDK_TARGET_CPU_LEGACY_LIB="i386" - elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then - OPENJDK_TARGET_CPU_LEGACY_LIB="amd64" - fi - - - # This is the name of the cpu (but using i386 and amd64 instead of - # x86 and x86_64, respectively), preceeded by a /, to be used when - # locating libraries. On macosx, it's empty, though. - OPENJDK_TARGET_CPU_LIBDIR="/$OPENJDK_TARGET_CPU_LEGACY_LIB" - if test "x$OPENJDK_TARGET_OS" = xmacosx; then - OPENJDK_TARGET_CPU_LIBDIR="" - fi - - - # OPENJDK_TARGET_CPU_ISADIR is normally empty. On 64-bit Solaris systems, it is set to - # /amd64 or /sparcv9. This string is appended to some library paths, like this: - # /usr/lib${OPENJDK_TARGET_CPU_ISADIR}/libexample.so - OPENJDK_TARGET_CPU_ISADIR="" - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - if test "x$OPENJDK_TARGET_CPU" = xx86_64; then - OPENJDK_TARGET_CPU_ISADIR="/amd64" - elif test "x$OPENJDK_TARGET_CPU" = xsparcv9; then - OPENJDK_TARGET_CPU_ISADIR="/sparcv9" - fi - fi - - - # Setup OPENJDK_TARGET_CPU_OSARCH, which is used to set the os.arch Java system property - OPENJDK_TARGET_CPU_OSARCH="$OPENJDK_TARGET_CPU" - if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$OPENJDK_TARGET_CPU" = xx86; then - # On linux only, we replace x86 with i386. - OPENJDK_TARGET_CPU_OSARCH="i386" - elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then - # On all platforms except macosx, we replace x86_64 with amd64. - OPENJDK_TARGET_CPU_OSARCH="amd64" - fi - - - OPENJDK_TARGET_CPU_JLI="$OPENJDK_TARGET_CPU" - if test "x$OPENJDK_TARGET_CPU" = xx86; then - OPENJDK_TARGET_CPU_JLI="i386" - elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then - # On all platforms except macosx, we replace x86_64 with amd64. - OPENJDK_TARGET_CPU_JLI="amd64" - fi - # Now setup the -D flags for building libjli. - OPENJDK_TARGET_CPU_JLI_CFLAGS="-DLIBARCHNAME='\"$OPENJDK_TARGET_CPU_JLI\"'" - if test "x$OPENJDK_TARGET_OS" = xsolaris; then - if test "x$OPENJDK_TARGET_CPU_ARCH" = xsparc; then - OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"sparc\"' -DLIBARCH64NAME='\"sparcv9\"'" - elif test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then - OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"i386\"' -DLIBARCH64NAME='\"amd64\"'" - fi - fi - - - # Setup OPENJDK_TARGET_OS_API_DIR, used in source paths. - if test "x$OPENJDK_TARGET_OS_API" = xposix; then - OPENJDK_TARGET_OS_API_DIR="solaris" - fi - if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then - OPENJDK_TARGET_OS_API_DIR="windows" - fi - - - if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then - A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" - fi - LP64=$A_LP64 - - - if test "x$COMPILE_TYPE" = "xcross"; then - # FIXME: ... or should this include reduced builds..? - DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$OPENJDK_TARGET_CPU_LEGACY" - else - DEFINE_CROSS_COMPILE_ARCH="" - fi - - - - -# Continue setting up basic stuff. - -# Locate the directory of this script. -SCRIPT="$0" - - if test "x$OPENJDK_BUILD_OS" != xwindows; then - # Follow a chain of symbolic links. Use readlink - # where it exists, else fall back to horribly - # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - if test "x$READLINK_TESTED" != yes; then - # On MacOSX there is a readlink tool with a different - # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` - if test "x$ISGNU" = x; then - # A readlink that we do not know how to use. - # Are there other non-GNU readlinks out there? - READLINK_TESTED=yes - READLINK= - fi - fi - - if test "x$READLINK" != x; then - SCRIPT=`$READLINK -f $SCRIPT` - else - STARTDIR=$PWD - COUNTER=0 - DIR=`dirname $SCRIPT` - FIL=`basename $SCRIPT` - while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` - if test "x$ISLINK" == x; then - # This is not a symbolic link! We are done! - break - fi - # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` - let COUNTER=COUNTER+1 - done - cd $STARTDIR - SCRIPT=$DIR/$FIL - fi - fi - -AUTOCONF_DIR=`dirname $0` - -# Where is the source? It is located two levels above the configure script. -CURDIR="$PWD" -cd "$AUTOCONF_DIR/../.." -SRC_ROOT="`pwd`" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - SRC_ROOT_LENGTH=`pwd|wc -m` - if test $SRC_ROOT_LENGTH -gt 100; then - as_fn_error $? "Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported" "$LINENO" 5 - fi -fi - -cd "$CURDIR" - - - # Fail with message the path to the source root if var SRC_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$SRC_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - SRC_ROOT=`$CYGPATH -s -m -a "$SRC_ROOT"` - # Now it's case insensitive; let's make it lowercase to improve readability - SRC_ROOT=`$ECHO "$SRC_ROOT" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - SRC_ROOT=`$CYGPATH -u "$SRC_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the source root! \"$SRC_ROOT\"" "$LINENO" 5 - fi - fi - - - # Fail with message the path to the current directory if var CURDIR contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$CURDIR" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - CURDIR=`$CYGPATH -s -m -a "$CURDIR"` - # Now it's case insensitive; let's make it lowercase to improve readability - CURDIR=`$ECHO "$CURDIR" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - CURDIR=`$CYGPATH -u "$CURDIR"` - else - as_fn_error $? "You cannot have spaces in the path to the current directory! \"$CURDIR\"" "$LINENO" 5 - fi - fi - - -if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then - # Add extra search paths on solaris for utilities like ar and as etc... - PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" -fi - -# For cygwin we need cygpath first, since it is used everywhere. -# Extract the first word of "cygpath", so it can be a program name with args. -set dummy cygpath; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CYGPATH+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CYGPATH in - [\\/]* | ?:[\\/]*) - ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CYGPATH=$ac_cv_path_CYGPATH -if test -n "$CYGPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 -$as_echo "$CYGPATH" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -PATH_SEP=":" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - if test "x$CYGPATH" = x; then - as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 - fi - PATH_SEP=";" -fi - - -# You can force the sys-root if the sys-root encoded into the cross compiler tools -# is not correct. - -# Check whether --with-sys-root was given. -if test "${with_sys_root+set}" = set; then : - withval=$with_sys_root; -fi - - -if test "x$with_sys_root" != x; then - SYS_ROOT=$with_sys_root -else - SYS_ROOT=/ -fi - - - -# Check whether --with-tools-dir was given. -if test "${with_tools_dir+set}" = set; then : - withval=$with_tools_dir; TOOLS_DIR=$with_tools_dir -fi - - - -# Check whether --with-devkit was given. -if test "${with_devkit+set}" = set; then : - withval=$with_devkit; - if test "x$with_sys_root" != x; then - as_fn_error $? "Cannot specify both --with-devkit and --with-sys-root at the same time" "$LINENO" 5 - fi - if test "x$with_tools_dir" != x; then - as_fn_error $? "Cannot specify both --with-devkit and --with-tools-dir at the same time" "$LINENO" 5 - fi - TOOLS_DIR=$with_devkit/bin - SYS_ROOT=$with_devkit/$host_alias/libc - -fi - - - - -# Setup default logging of stdout and stderr to build.log in the output root. -BUILD_LOG='$(OUTPUT_ROOT)/build.log' -BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' -BUILD_LOG_WRAPPER='$(SH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' - - - - - -# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. - - for ac_prog in apt-get yum port pkgutil pkgadd -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$PKGHANDLER"; then - ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_PKGHANDLER="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -PKGHANDLER=$ac_cv_prog_PKGHANDLER -if test -n "$PKGHANDLER"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 -$as_echo "$PKGHANDLER" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$PKGHANDLER" && break -done - - - -# Setup simple tools, that do not need have cross compilation support. -# Without these, we can't properly run the rest of the configure script. +{ $as_echo "$as_me:${as_lineno-$LINENO}: Configuration created at $DATE_WHEN_CONFIGURED." >&5 +$as_echo "$as_me: Configuration created at $DATE_WHEN_CONFIGURED." >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: configure script generated at timestamp $DATE_WHEN_GENERATED." >&5 +$as_echo "$as_me: configure script generated at timestamp $DATE_WHEN_GENERATED." >&6;} + + # Start with tools that do not need have cross compilation support # and can be expected to be found in the default PATH. These tools are @@ -4443,6 +3756,65 @@ + for ac_prog in bash +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_BASH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $BASH in + [\\/]* | ?:[\\/]*) + ac_cv_path_BASH="$BASH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_BASH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BASH=$ac_cv_path_BASH +if test -n "$BASH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH" >&5 +$as_echo "$BASH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BASH" && break +done + + + if test "x$BASH" = x; then + if test "xbash" = x; then + PROG_NAME=bash + else + PROG_NAME=bash + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in cat do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -4679,65 +4051,6 @@ - for ac_prog in cpio -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CPIO+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CPIO in - [\\/]* | ?:[\\/]*) - ac_cv_path_CPIO="$CPIO" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CPIO="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CPIO=$ac_cv_path_CPIO -if test -n "$CPIO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPIO" >&5 -$as_echo "$CPIO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CPIO" && break -done - - - if test "x$CPIO" = x; then - if test "xcpio" = x; then - PROG_NAME=cpio - else - PROG_NAME=cpio - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - for ac_prog in cut do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -4856,65 +4169,6 @@ - for ac_prog in df -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_DF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $DF in - [\\/]* | ?:[\\/]*) - ac_cv_path_DF="$DF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -DF=$ac_cv_path_DF -if test -n "$DF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 -$as_echo "$DF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DF" && break -done - - - if test "x$DF" = x; then - if test "xdf" = x; then - PROG_NAME=df - else - PROG_NAME=df - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - for ac_prog in gdiff diff do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -4974,6 +4228,65 @@ + for ac_prog in dirname +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DIRNAME+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DIRNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_DIRNAME="$DIRNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DIRNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DIRNAME=$ac_cv_path_DIRNAME +if test -n "$DIRNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DIRNAME" >&5 +$as_echo "$DIRNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DIRNAME" && break +done + + + if test "x$DIRNAME" = x; then + if test "xdirname" = x; then + PROG_NAME=dirname + else + PROG_NAME=dirname + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in echo do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -5446,6 +4759,65 @@ + for ac_prog in mktemp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MKTEMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MKTEMP in + [\\/]* | ?:[\\/]*) + ac_cv_path_MKTEMP="$MKTEMP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MKTEMP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MKTEMP=$ac_cv_path_MKTEMP +if test -n "$MKTEMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKTEMP" >&5 +$as_echo "$MKTEMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MKTEMP" && break +done + + + if test "x$MKTEMP" = x; then + if test "xmktemp" = x; then + PROG_NAME=mktemp + else + PROG_NAME=mktemp + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in mv do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -5564,6 +4936,124 @@ + for ac_prog in pwd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_THEPWDCMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $THEPWDCMD in + [\\/]* | ?:[\\/]*) + ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +THEPWDCMD=$ac_cv_path_THEPWDCMD +if test -n "$THEPWDCMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 +$as_echo "$THEPWDCMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$THEPWDCMD" && break +done + + + if test "x$THEPWDCMD" = x; then + if test "xpwd" = x; then + PROG_NAME=thepwdcmd + else + PROG_NAME=pwd + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + + for ac_prog in rm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$RM" && break +done + + + if test "x$RM" = x; then + if test "xrm" = x; then + PROG_NAME=rm + else + PROG_NAME=rm + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in sh do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -5977,6 +5467,65 @@ + for ac_prog in uname +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UNAME+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UNAME in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNAME="$UNAME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UNAME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNAME=$ac_cv_path_UNAME +if test -n "$UNAME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNAME" >&5 +$as_echo "$UNAME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNAME" && break +done + + + if test "x$UNAME" = x; then + if test "xuname" = x; then + PROG_NAME=uname + else + PROG_NAME=uname + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in uniq do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -6036,65 +5585,6 @@ - for ac_prog in unzip -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $UNZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -UNZIP=$ac_cv_path_UNZIP -if test -n "$UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 -$as_echo "$UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$UNZIP" && break -done - - - if test "x$UNZIP" = x; then - if test "xunzip" = x; then - PROG_NAME=unzip - else - PROG_NAME=unzip - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - for ac_prog in wc do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -6154,6 +5644,65 @@ + for ac_prog in which +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_WHICH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $WHICH in + [\\/]* | ?:[\\/]*) + ac_cv_path_WHICH="$WHICH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_WHICH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +WHICH=$ac_cv_path_WHICH +if test -n "$WHICH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WHICH" >&5 +$as_echo "$WHICH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$WHICH" && break +done + + + if test "x$WHICH" = x; then + if test "xwhich" = x; then + PROG_NAME=which + else + PROG_NAME=which + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + for ac_prog in xargs do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -6213,65 +5762,6 @@ - for ac_prog in zip -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ZIP in - [\\/]* | ?:[\\/]*) - ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ZIP=$ac_cv_path_ZIP -if test -n "$ZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 -$as_echo "$ZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ZIP" && break -done - - - if test "x$ZIP" = x; then - if test "xzip" = x; then - PROG_NAME=zip - else - PROG_NAME=zip - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - - # Then required tools that require some special treatment. for ac_prog in gawk mawk nawk awk do @@ -6700,1231 +6190,1150 @@ fi - - # We need to find a recent version of GNU make. Especially on Solaris, this can be tricky. - if test "x$MAKE" != x; then - # User has supplied a make, test it. - if test ! -f "$MAKE"; then - as_fn_error $? "The specified make (by MAKE=$MAKE) is not found." "$LINENO" 5 - fi - - MAKE_CANDIDATE=""$MAKE"" - DESCRIPTION="user supplied MAKE=" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - if test "x$FOUND_MAKE" = x; then - as_fn_error $? "The specified make (by MAKE=$MAKE) is not GNU make 3.81 or newer." "$LINENO" 5 - fi - else - # Try our hardest to locate a correct version of GNU make - for ac_prog in gmake -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHECK_GMAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHECK_GMAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHECK_GMAKE="$CHECK_GMAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHECK_GMAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHECK_GMAKE=$ac_cv_path_CHECK_GMAKE -if test -n "$CHECK_GMAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_GMAKE" >&5 -$as_echo "$CHECK_GMAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CHECK_GMAKE" && break -done - - - MAKE_CANDIDATE=""$CHECK_GMAKE"" - DESCRIPTION="gmake in PATH" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - - if test "x$FOUND_MAKE" = x; then - for ac_prog in make -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHECK_MAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHECK_MAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHECK_MAKE="$CHECK_MAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHECK_MAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHECK_MAKE=$ac_cv_path_CHECK_MAKE -if test -n "$CHECK_MAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_MAKE" >&5 -$as_echo "$CHECK_MAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CHECK_MAKE" && break -done - - - MAKE_CANDIDATE=""$CHECK_MAKE"" - DESCRIPTION="make in PATH" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - fi - - if test "x$FOUND_MAKE" = x; then - if test "x$TOOLS_DIR" != x; then - # We have a tools-dir, check that as well before giving up. - OLD_PATH=$PATH - PATH=$TOOLS_DIR:$PATH - for ac_prog in gmake -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHECK_TOOLSDIR_GMAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHECK_TOOLSDIR_GMAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHECK_TOOLSDIR_GMAKE="$CHECK_TOOLSDIR_GMAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHECK_TOOLSDIR_GMAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHECK_TOOLSDIR_GMAKE=$ac_cv_path_CHECK_TOOLSDIR_GMAKE -if test -n "$CHECK_TOOLSDIR_GMAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_TOOLSDIR_GMAKE" >&5 -$as_echo "$CHECK_TOOLSDIR_GMAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CHECK_TOOLSDIR_GMAKE" && break -done - - - MAKE_CANDIDATE=""$CHECK_TOOLSDIR_GMAKE"" - DESCRIPTION="gmake in tools-dir" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - if test "x$FOUND_MAKE" = x; then - for ac_prog in make -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_CHECK_TOOLSDIR_MAKE+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $CHECK_TOOLSDIR_MAKE in - [\\/]* | ?:[\\/]*) - ac_cv_path_CHECK_TOOLSDIR_MAKE="$CHECK_TOOLSDIR_MAKE" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_CHECK_TOOLSDIR_MAKE="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -CHECK_TOOLSDIR_MAKE=$ac_cv_path_CHECK_TOOLSDIR_MAKE -if test -n "$CHECK_TOOLSDIR_MAKE"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_TOOLSDIR_MAKE" >&5 -$as_echo "$CHECK_TOOLSDIR_MAKE" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CHECK_TOOLSDIR_MAKE" && break -done - - - MAKE_CANDIDATE=""$CHECK_TOOLSDIR_MAKE"" - DESCRIPTION="make in tools-dir" - if test "x$MAKE_CANDIDATE" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 -$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MAKE_CANDIDATE" - car="${tmp%% *}" - tmp="$MAKE_CANDIDATE EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MAKE_CANDIDATE="$car ${cdr% *}" - else - MAKE_CANDIDATE="$car" - fi - - MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` - IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` - if test "x$IS_GNU_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 -$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} - else - IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` - if test "x$IS_MODERN_MAKE" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 -$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} - else - FOUND_MAKE=$MAKE_CANDIDATE - fi - fi - fi - - fi - PATH=$OLD_PATH - fi - fi - - if test "x$FOUND_MAKE" = x; then - as_fn_error $? "Cannot find GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure." "$LINENO" 5 - fi - fi - - MAKE=$FOUND_MAKE - - { $as_echo "$as_me:${as_lineno-$LINENO}: Using GNU make 3.81 (or later) at $FOUND_MAKE (version: $MAKE_VERSION_STRING)" >&5 -$as_echo "$as_me: Using GNU make 3.81 (or later) at $FOUND_MAKE (version: $MAKE_VERSION_STRING)" >&6;} - - - - for ac_prog in rm -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_RM+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $RM in - [\\/]* | ?:[\\/]*) - ac_cv_path_RM="$RM" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -RM=$ac_cv_path_RM -if test -n "$RM"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 -$as_echo "$RM" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$RM" && break -done - - - if test "x$RM" = x; then - if test "xrm" = x; then - PROG_NAME=rm - else - PROG_NAME=rm - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 -$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} - as_fn_error $? "Cannot continue" "$LINENO" 5 - fi - - +# Always force rm. RM="$RM -f" - - # Test if find supports -delete - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 -$as_echo_n "checking if find supports -delete... " >&6; } - FIND_DELETE="-delete" - - DELETEDIR=`mktemp -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) - - echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete - - TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` - if test -f $DELETEDIR/TestIfFindSupportsDelete; then - # No, it does not. - rm $DELETEDIR/TestIfFindSupportsDelete - FIND_DELETE="-exec rm \{\} \+" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - fi - rmdir $DELETEDIR - - - -# Non-required basic tools - -# Extract the first word of "pwd", so it can be a program name with args. -set dummy pwd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_THEPWDCMD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $THEPWDCMD in - [\\/]* | ?:[\\/]*) - ac_cv_path_THEPWDCMD="$THEPWDCMD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_THEPWDCMD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -THEPWDCMD=$ac_cv_path_THEPWDCMD -if test -n "$THEPWDCMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $THEPWDCMD" >&5 -$as_echo "$THEPWDCMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -# Extract the first word of "ldd", so it can be a program name with args. -set dummy ldd; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_LDD+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $LDD in - [\\/]* | ?:[\\/]*) - ac_cv_path_LDD="$LDD" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -LDD=$ac_cv_path_LDD -if test -n "$LDD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 -$as_echo "$LDD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$LDD" = "x"; then - # List shared lib dependencies is used for - # debug output and checking for forbidden dependencies. - # We can build without it. - LDD="true" -fi -# Extract the first word of "otool", so it can be a program name with args. -set dummy otool; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OTOOL+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $OTOOL in - [\\/]* | ?:[\\/]*) - ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -OTOOL=$ac_cv_path_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -if test "x$OTOOL" = "x"; then - OTOOL="true" -fi -for ac_prog in readelf greadelf -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READELF+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READELF in - [\\/]* | ?:[\\/]*) - ac_cv_path_READELF="$READELF" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READELF=$ac_cv_path_READELF -if test -n "$READELF"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 -$as_echo "$READELF" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$READELF" && break -done - -for ac_prog in objdump gobjdump -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OBJDUMP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $OBJDUMP in - [\\/]* | ?:[\\/]*) - ac_cv_path_OBJDUMP="$OBJDUMP" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OBJDUMP="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -OBJDUMP=$ac_cv_path_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$OBJDUMP" && break -done - -# Extract the first word of "hg", so it can be a program name with args. -set dummy hg; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_HG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $HG in - [\\/]* | ?:[\\/]*) - ac_cv_path_HG="$HG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -HG=$ac_cv_path_HG -if test -n "$HG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 -$as_echo "$HG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - -# Check if pkg-config is available. - - -if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - -fi -if test -n "$PKG_CONFIG"; then - _pkg_min_version=0.9.0 - { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 -$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } - if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - PKG_CONFIG="" - fi - -fi - -# After basic tools have been setup, we can check build os specific details. - -############################################################################### - -# Note that this is the build platform OS version! - -OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" -OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" -OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" -OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" - - - - - -# Setup builddeps, for automatic downloading of tools we need. -# This is needed before we can call BDEPS_CHECK_MODULE, which is done in -# boot-jdk setup, but we need to have basic tools setup first. - - -# Check whether --with-builddeps-conf was given. -if test "${with_builddeps_conf+set}" = set; then : - withval=$with_builddeps_conf; -fi - - - -# Check whether --with-builddeps-server was given. -if test "${with_builddeps_server+set}" = set; then : - withval=$with_builddeps_server; -fi - - - -# Check whether --with-builddeps-dir was given. -if test "${with_builddeps_dir+set}" = set; then : - withval=$with_builddeps_dir; -else - with_builddeps_dir=/localhome/builddeps -fi - - - -# Check whether --with-builddeps-group was given. -if test "${with_builddeps_group+set}" = set; then : - withval=$with_builddeps_group; -fi - - -# Check whether --enable-list-builddeps was given. -if test "${enable_list_builddeps+set}" = set; then : - enableval=$enable_list_builddeps; LIST_BUILDDEPS="${enableval}" -else - LIST_BUILDDEPS='no' -fi - - -if test "x$LIST_BUILDDEPS" = xyes; then - echo - echo List of build dependencies known to the configure script, - echo that can be used in builddeps.conf files: - cat $AUTOCONF_DIR/*.ac $AUTOCONF_DIR/*.m4 | grep BDEPS_CHECK_MODULE\( | cut -f 2 -d ',' | tr -d ' ' | sort - echo - exit 1 -fi - - - - if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then - if test "x$with_builddeps_conf" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 -$as_echo_n "checking for supplied builddeps configuration file... " >&6; } - builddepsfile=$with_builddeps_conf - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 -$as_echo "loaded!" >&6; } - else - as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 -$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } - builddepsfile=`mktemp` - touch $builddepsfile - # Put all found confs into a single file. - find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile - # Source the file to acquire the variables - if test -s $builddepsfile; then - . $builddepsfile - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 -$as_echo "found at least one!" >&6; } - else - as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 - fi - fi - # Create build and target names that use _ instead of "-" and ".". - # This is necessary to use them in variable names. - build_var=`echo ${OPENJDK_BUILD_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'` - target_var=`echo ${OPENJDK_TARGET_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'` - # Extract rewrite information for build and target - eval rewritten_build=\${REWRITE_${build_var}} - if test "x$rewritten_build" = x; then - rewritten_build=${OPENJDK_BUILD_AUTOCONF_NAME} - echo Build stays the same $rewritten_build - else - echo Rewriting build for builddeps into $rewritten_build - fi - eval rewritten_target=\${REWRITE_${target_var}} - if test "x$rewritten_target" = x; then - rewritten_target=${OPENJDK_TARGET_AUTOCONF_NAME} - echo Target stays the same $rewritten_target - else - echo Rewriting target for builddeps into $rewritten_target - fi - rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` - rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` - fi - for ac_prog in 7z unzip -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_UNZIP"; then - ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_UNZIP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP -if test -n "$BDEPS_UNZIP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 -$as_echo "$BDEPS_UNZIP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$BDEPS_UNZIP" && break -done - - if test "x$BDEPS_UNZIP" = x7z; then - BDEPS_UNZIP="7z x" - fi - - for ac_prog in wget lftp ftp -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$BDEPS_FTP"; then - ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_prog_BDEPS_FTP="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -BDEPS_FTP=$ac_cv_prog_BDEPS_FTP -if test -n "$BDEPS_FTP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 -$as_echo "$BDEPS_FTP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$BDEPS_FTP" && break -done - - - -############################################################################### -# -# Determine OpenJDK variants, options and version numbers. -# -############################################################################### - -# We need build & target for this. +# These are not required on all platforms +# Extract the first word of "cygpath", so it can be a program name with args. +set dummy cygpath; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CYGPATH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CYGPATH in + [\\/]* | ?:[\\/]*) + ac_cv_path_CYGPATH="$CYGPATH" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CYGPATH="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CYGPATH=$ac_cv_path_CYGPATH +if test -n "$CYGPATH"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGPATH" >&5 +$as_echo "$CYGPATH" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "readlink", so it can be a program name with args. +set dummy readlink; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READLINK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READLINK in + [\\/]* | ?:[\\/]*) + ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READLINK=$ac_cv_path_READLINK +if test -n "$READLINK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 +$as_echo "$READLINK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "df", so it can be a program name with args. +set dummy df; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_DF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $DF in + [\\/]* | ?:[\\/]*) + ac_cv_path_DF="$DF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_DF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +DF=$ac_cv_path_DF +if test -n "$DF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DF" >&5 +$as_echo "$DF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "SetFile", so it can be a program name with args. +set dummy SetFile; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_SETFILE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $SETFILE in + [\\/]* | ?:[\\/]*) + ac_cv_path_SETFILE="$SETFILE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_SETFILE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +SETFILE=$ac_cv_path_SETFILE +if test -n "$SETFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SETFILE" >&5 +$as_echo "$SETFILE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + +# Now we can determine OpenJDK build and target platforms. This is required to +# have early on. +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 +$as_echo_n "checking target system type... " >&6; } +if test "${ac_cv_target+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$target_alias" = x; then + ac_cv_target=$ac_cv_host +else + ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 +$as_echo "$ac_cv_target" >&6; } +case $ac_cv_target in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 ;; +esac +target=$ac_cv_target +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_target +shift +target_cpu=$1 +target_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +target_os=$* +IFS=$ac_save_IFS +case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac + + +# The aliases save the names the user supplied, while $host etc. +# will get canonicalized. +test -n "$target_alias" && + test "$program_prefix$program_suffix$program_transform_name" = \ + NONENONEs,x,x, && + program_prefix=${target_alias}- + +# Figure out the build and target systems. # Note that in autoconf terminology, "build" is obvious, but "target" +# is confusing; it assumes you are cross-compiling a cross-compiler (!) and "target" is thus the target of the +# product you're building. The target of this build is called "host". Since this is confusing to most people, we +# have not adopted that system, but use "target" as the platform we are building for. In some places though we need +# to use the configure naming style. + + + + + + # Copy the autoconf trip/quadruplet verbatim to OPENJDK_TARGET_AUTOCONF_NAME + # (from the autoconf "host") and OPENJDK_BUILD_AUTOCONF_NAME + # Note that we might later on rewrite e.g. OPENJDK_TARGET_CPU due to reduced build, + # but this will not change the value of OPENJDK_TARGET_AUTOCONF_NAME. + OPENJDK_TARGET_AUTOCONF_NAME="$host" + OPENJDK_BUILD_AUTOCONF_NAME="$build" + + + + # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. + + case "$build_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_ENV=linux + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_ENV=solaris + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_ENV=macosx + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_ENV=bsd + ;; + *cygwin*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.cygwin + ;; + *mingw*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.msys + ;; + *) + as_fn_error $? "unsupported operating system $build_os" "$LINENO" 5 + ;; + esac + + + # First argument is the cpu name from the trip/quad + case "$build_cpu" in + x86_64) + VAR_CPU=x86_64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + ;; + i?86) + VAR_CPU=x86 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + ;; + sparcv9) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + ;; + *) + as_fn_error $? "unsupported cpu $build_cpu" "$LINENO" 5 + ;; + esac + + # ..and setup our own variables. (Do this explicitely to facilitate searching) + OPENJDK_BUILD_OS="$VAR_OS" + OPENJDK_BUILD_OS_API="$VAR_OS_API" + OPENJDK_BUILD_OS_ENV="$VAR_OS_ENV" + OPENJDK_BUILD_CPU="$VAR_CPU" + OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking openjdk-build os-cpu" >&5 +$as_echo_n "checking openjdk-build os-cpu... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPENJDK_BUILD_OS-$OPENJDK_BUILD_CPU" >&5 +$as_echo "$OPENJDK_BUILD_OS-$OPENJDK_BUILD_CPU" >&6; } + + # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. + + case "$host_os" in + *linux*) + VAR_OS=linux + VAR_OS_API=posix + VAR_OS_ENV=linux + ;; + *solaris*) + VAR_OS=solaris + VAR_OS_API=posix + VAR_OS_ENV=solaris + ;; + *darwin*) + VAR_OS=macosx + VAR_OS_API=posix + VAR_OS_ENV=macosx + ;; + *bsd*) + VAR_OS=bsd + VAR_OS_API=posix + VAR_OS_ENV=bsd + ;; + *cygwin*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.cygwin + ;; + *mingw*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.msys + ;; + *) + as_fn_error $? "unsupported operating system $host_os" "$LINENO" 5 + ;; + esac + + + # First argument is the cpu name from the trip/quad + case "$host_cpu" in + x86_64) + VAR_CPU=x86_64 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=little + ;; + i?86) + VAR_CPU=x86 + VAR_CPU_ARCH=x86 + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + ;; + arm*) + VAR_CPU=arm + VAR_CPU_ARCH=arm + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=little + ;; + powerpc) + VAR_CPU=ppc + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + ;; + powerpc64) + VAR_CPU=ppc64 + VAR_CPU_ARCH=ppc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + ;; + sparc) + VAR_CPU=sparc + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=32 + VAR_CPU_ENDIAN=big + ;; + sparcv9) + VAR_CPU=sparcv9 + VAR_CPU_ARCH=sparc + VAR_CPU_BITS=64 + VAR_CPU_ENDIAN=big + ;; + *) + as_fn_error $? "unsupported cpu $host_cpu" "$LINENO" 5 + ;; + esac + + # ... and setup our own variables. (Do this explicitely to facilitate searching) + OPENJDK_TARGET_OS="$VAR_OS" + OPENJDK_TARGET_OS_API="$VAR_OS_API" + OPENJDK_TARGET_OS_ENV="$VAR_OS_ENV" + OPENJDK_TARGET_CPU="$VAR_CPU" + OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_TARGET_CPU_ENDIAN="$VAR_CPU_ENDIAN" + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking openjdk-target os-cpu" >&5 +$as_echo_n "checking openjdk-target os-cpu... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" >&5 +$as_echo "$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU" >&6; } + + + +# Check whether --with-target-bits was given. +if test "${with_target_bits+set}" = set; then : + withval=$with_target_bits; +fi + + + # We have three types of compiles: + # native == normal compilation, target system == build system + # cross == traditional cross compilation, target system != build system; special toolchain needed + # reduced == using native compilers, but with special flags (e.g. -m32) to produce 32-bit builds on 64-bit machines + # + if test "x$OPENJDK_BUILD_AUTOCONF_NAME" != "x$OPENJDK_TARGET_AUTOCONF_NAME"; then + # We're doing a proper cross-compilation + COMPILE_TYPE="cross" + else + COMPILE_TYPE="native" + fi + + if test "x$with_target_bits" != x; then + if test "x$COMPILE_TYPE" = "xcross"; then + as_fn_error $? "It is not possible to combine --with-target-bits=X and proper cross-compilation. Choose either." "$LINENO" 5 + fi + + if test "x$with_target_bits" = x32 && test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + # A reduced build is requested + COMPILE_TYPE="reduced" + OPENJDK_TARGET_CPU_BITS=32 + if test "x$OPENJDK_TARGET_CPU_ARCH" = "xx86"; then + OPENJDK_TARGET_CPU=x86 + elif test "x$OPENJDK_TARGET_CPU_ARCH" = "xsparc"; then + OPENJDK_TARGET_CPU=sparc + else + as_fn_error $? "Reduced build (--with-target-bits=32) is only supported on x86_64 and sparcv9" "$LINENO" 5 + fi + elif test "x$with_target_bits" = x64 && test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + as_fn_error $? "It is not possible to use --with-target-bits=64 on a 32 bit system. Use proper cross-compilation instead." "$LINENO" 5 + elif test "x$with_target_bits" = "x$OPENJDK_TARGET_CPU_BITS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: --with-target-bits are set to build platform address size; argument has no meaning" >&5 +$as_echo "$as_me: --with-target-bits are set to build platform address size; argument has no meaning" >&6;} + else + as_fn_error $? "--with-target-bits can only be 32 or 64, you specified $with_target_bits!" "$LINENO" 5 + fi + fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking compilation type" >&5 +$as_echo_n "checking compilation type... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMPILE_TYPE" >&5 +$as_echo "$COMPILE_TYPE" >&6; } + + + if test "x$OPENJDK_TARGET_OS" = "xsolaris"; then + REQUIRED_OS_NAME=SunOS + REQUIRED_OS_VERSION=5.10 + fi + if test "x$OPENJDK_TARGET_OS" = "xlinux"; then + REQUIRED_OS_NAME=Linux + REQUIRED_OS_VERSION=2.6 + fi + if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + REQUIRED_OS_NAME=Windows + if test "x$OPENJDK_TARGET_CPU_BITS" = "x64"; then + REQUIRED_OS_VERSION=5.2 + else + REQUIRED_OS_VERSION=5.1 + fi + fi + if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then + REQUIRED_OS_NAME=Darwin + REQUIRED_OS_VERSION=11.2 + fi + + + + + + # Also store the legacy naming of the cpu. + # Ie i586 and amd64 instead of x86 and x86_64 + OPENJDK_TARGET_CPU_LEGACY="$OPENJDK_TARGET_CPU" + if test "x$OPENJDK_TARGET_CPU" = xx86; then + OPENJDK_TARGET_CPU_LEGACY="i586" + elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + # On all platforms except MacOSX replace x86_64 with amd64. + OPENJDK_TARGET_CPU_LEGACY="amd64" + fi + + + # And the second legacy naming of the cpu. + # Ie i386 and amd64 instead of x86 and x86_64. + OPENJDK_TARGET_CPU_LEGACY_LIB="$OPENJDK_TARGET_CPU" + if test "x$OPENJDK_TARGET_CPU" = xx86; then + OPENJDK_TARGET_CPU_LEGACY_LIB="i386" + elif test "x$OPENJDK_TARGET_CPU" = xx86_64; then + OPENJDK_TARGET_CPU_LEGACY_LIB="amd64" + fi + + + # This is the name of the cpu (but using i386 and amd64 instead of + # x86 and x86_64, respectively), preceeded by a /, to be used when + # locating libraries. On macosx, it's empty, though. + OPENJDK_TARGET_CPU_LIBDIR="/$OPENJDK_TARGET_CPU_LEGACY_LIB" + if test "x$OPENJDK_TARGET_OS" = xmacosx; then + OPENJDK_TARGET_CPU_LIBDIR="" + fi + + + # OPENJDK_TARGET_CPU_ISADIR is normally empty. On 64-bit Solaris systems, it is set to + # /amd64 or /sparcv9. This string is appended to some library paths, like this: + # /usr/lib${OPENJDK_TARGET_CPU_ISADIR}/libexample.so + OPENJDK_TARGET_CPU_ISADIR="" + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + if test "x$OPENJDK_TARGET_CPU" = xx86_64; then + OPENJDK_TARGET_CPU_ISADIR="/amd64" + elif test "x$OPENJDK_TARGET_CPU" = xsparcv9; then + OPENJDK_TARGET_CPU_ISADIR="/sparcv9" + fi + fi + + + # Setup OPENJDK_TARGET_CPU_OSARCH, which is used to set the os.arch Java system property + OPENJDK_TARGET_CPU_OSARCH="$OPENJDK_TARGET_CPU" + if test "x$OPENJDK_TARGET_OS" = xlinux && test "x$OPENJDK_TARGET_CPU" = xx86; then + # On linux only, we replace x86 with i386. + OPENJDK_TARGET_CPU_OSARCH="i386" + elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + # On all platforms except macosx, we replace x86_64 with amd64. + OPENJDK_TARGET_CPU_OSARCH="amd64" + fi + + + OPENJDK_TARGET_CPU_JLI="$OPENJDK_TARGET_CPU" + if test "x$OPENJDK_TARGET_CPU" = xx86; then + OPENJDK_TARGET_CPU_JLI="i386" + elif test "x$OPENJDK_TARGET_OS" != xmacosx && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + # On all platforms except macosx, we replace x86_64 with amd64. + OPENJDK_TARGET_CPU_JLI="amd64" + fi + # Now setup the -D flags for building libjli. + OPENJDK_TARGET_CPU_JLI_CFLAGS="-DLIBARCHNAME='\"$OPENJDK_TARGET_CPU_JLI\"'" + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + if test "x$OPENJDK_TARGET_CPU_ARCH" = xsparc; then + OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"sparc\"' -DLIBARCH64NAME='\"sparcv9\"'" + elif test "x$OPENJDK_TARGET_CPU_ARCH" = xx86; then + OPENJDK_TARGET_CPU_JLI_CFLAGS="$OPENJDK_TARGET_CPU_JLI_CFLAGS -DLIBARCH32NAME='\"i386\"' -DLIBARCH64NAME='\"amd64\"'" + fi + fi + + + # Setup OPENJDK_TARGET_OS_API_DIR, used in source paths. + if test "x$OPENJDK_TARGET_OS_API" = xposix; then + OPENJDK_TARGET_OS_API_DIR="solaris" + fi + if test "x$OPENJDK_TARGET_OS_API" = xwinapi; then + OPENJDK_TARGET_OS_API_DIR="windows" + fi + + + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + A_LP64="LP64:=" + # -D_LP64=1 is only set on linux and mac. Setting on windows causes diff in + # unpack200.exe + if test "x$OPENJDK_TARGET_OS" = xlinux || test "x$OPENJDK_TARGET_OS" = xmacosx; then + ADD_LP64="-D_LP64=1" + fi + fi + LP64=$A_LP64 + + + if test "x$COMPILE_TYPE" = "xcross"; then + # FIXME: ... or should this include reduced builds..? + DEFINE_CROSS_COMPILE_ARCH="CROSS_COMPILE_ARCH:=$OPENJDK_TARGET_CPU_LEGACY" + else + DEFINE_CROSS_COMPILE_ARCH="" + fi + + + + +# Continue setting up basic stuff. Most remaining code require fundamental tools. + +# Locate the directory of this script. +SCRIPT="$0" + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + SCRIPT=`$READLINK -f $SCRIPT` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $SCRIPT` + sym_link_file=`$BASENAME $SCRIPT` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + SCRIPT=$sym_link_dir/$sym_link_file + fi + fi + +AUTOCONF_DIR=`cd \`$DIRNAME $SCRIPT\`; $THEPWDCMD` + +# Where is the source? It is located two levels above the configure script. +CURDIR="$PWD" +cd "$AUTOCONF_DIR/../.." +SRC_ROOT="`pwd`" + +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + PATH_SEP=";" + + SRC_ROOT_LENGTH=`$THEPWDCMD|$WC -m` + if test $SRC_ROOT_LENGTH -gt 100; then + as_fn_error $? "Your base path is too long. It is $SRC_ROOT_LENGTH characters long, but only 100 is supported" "$LINENO" 5 + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking cygwin release" >&5 +$as_echo_n "checking cygwin release... " >&6; } + CYGWIN_VERSION=`$UNAME -r` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGWIN_VERSION" >&5 +$as_echo "$CYGWIN_VERSION" >&6; } + WINDOWS_ENV_VENDOR='cygwin' + WINDOWS_ENV_VERSION="$CYGWIN_VERSION" + + CYGWIN_VERSION_OK=`$ECHO $CYGWIN_VERSION | $GREP ^1.7.` + if test "x$CYGWIN_VERSION_OK" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Your cygwin is too old. You are running $CYGWIN_VERSION, but at least cygwin 1.7 is required. Please upgrade." >&5 +$as_echo "$as_me: Your cygwin is too old. You are running $CYGWIN_VERSION, but at least cygwin 1.7 is required. Please upgrade." >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + if test "x$CYGPATH" = x; then + as_fn_error $? "Something is wrong with your cygwin installation since I cannot find cygpath.exe in your path" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking cygwin root directory as unix-style path" >&5 +$as_echo_n "checking cygwin root directory as unix-style path... " >&6; } + # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away + cygwin_winpath_root=`cd / ; cmd /c cd | grep ".*"` + # Force cygpath to report the proper root by including a trailing space, and then stripping it off again. + CYGWIN_ROOT_PATH=`$CYGPATH -u "$cygwin_winpath_root " | $CUT -f 1 -d " "` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CYGWIN_ROOT_PATH" >&5 +$as_echo "$CYGWIN_ROOT_PATH" >&6; } + WINDOWS_ENV_ROOT_PATH="$CYGWIN_ROOT_PATH" + test_cygdrive_prefix=`$ECHO $CYGWIN_ROOT_PATH | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + as_fn_error $? "Your cygdrive prefix is not /cygdrive. This is currently not supported. Change with mount -c." "$LINENO" 5 + fi + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking msys release" >&5 +$as_echo_n "checking msys release... " >&6; } + MSYS_VERSION=`$UNAME -r` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSYS_VERSION" >&5 +$as_echo "$MSYS_VERSION" >&6; } + + WINDOWS_ENV_VENDOR='msys' + WINDOWS_ENV_VERSION="$MSYS_VERSION" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking msys root directory as unix-style path" >&5 +$as_echo_n "checking msys root directory as unix-style path... " >&6; } + # The cmd output ends with Windows line endings (CR/LF), the grep command will strip that away + MSYS_ROOT_PATH=`cd / ; cmd /c cd | grep ".*"` + + windows_path="$MSYS_ROOT_PATH" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + MSYS_ROOT_PATH="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + MSYS_ROOT_PATH="$unix_path" + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSYS_ROOT_PATH" >&5 +$as_echo "$MSYS_ROOT_PATH" >&6; } + WINDOWS_ENV_ROOT_PATH="$MSYS_ROOT_PATH" + else + as_fn_error $? "Unknown Windows environment. Neither cygwin nor msys was detected." "$LINENO" 5 + fi + + # Test if windows or unix (cygwin/msys) find is first in path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking what kind of 'find' is first on the PATH" >&5 +$as_echo_n "checking what kind of 'find' is first on the PATH... " >&6; } + FIND_BINARY_OUTPUT=`find --version 2>&1` + if test "x`echo $FIND_BINARY_OUTPUT | $GREP GNU`" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unix style" >&5 +$as_echo "unix style" >&6; } + elif test "x`echo $FIND_BINARY_OUTPUT | $GREP FIND`" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Windows" >&5 +$as_echo "Windows" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools." >&5 +$as_echo "$as_me: Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: This will not work. Please correct and make sure /usr/bin (or similar) is first in path." >&5 +$as_echo "$as_me: This will not work. Please correct and make sure /usr/bin (or similar) is first in path." >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unknown" >&5 +$as_echo "unknown" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: It seems that your find utility is non-standard." >&5 +$as_echo "$as_me: WARNING: It seems that your find utility is non-standard." >&2;} + fi + +else + PATH_SEP=":" +fi + + + +cd "$CURDIR" + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$SRC_ROOT" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of SRC_ROOT, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of SRC_ROOT, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of SRC_ROOT" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + SRC_ROOT="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting SRC_ROOT to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting SRC_ROOT to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$SRC_ROOT" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + SRC_ROOT="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting SRC_ROOT to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting SRC_ROOT to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$SRC_ROOT" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of SRC_ROOT, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of SRC_ROOT, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of SRC_ROOT, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$CURDIR" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CURDIR, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of CURDIR, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of CURDIR" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + CURDIR="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CURDIR to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting CURDIR to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$CURDIR" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + CURDIR="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CURDIR to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting CURDIR to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$CURDIR" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of CURDIR, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CURDIR, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of CURDIR, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + +if test "x$OPENJDK_BUILD_OS" = "xsolaris"; then + # Add extra search paths on solaris for utilities like ar and as etc... + PATH="$PATH:/usr/ccs/bin:/usr/sfw/bin:/opt/csw/bin" +fi + +# You can force the sys-root if the sys-root encoded into the cross compiler tools +# is not correct. + +# Check whether --with-sys-root was given. +if test "${with_sys_root+set}" = set; then : + withval=$with_sys_root; +fi + + +if test "x$with_sys_root" != x; then + SYS_ROOT=$with_sys_root +else + SYS_ROOT=/ +fi + + + +# Check whether --with-tools-dir was given. +if test "${with_tools_dir+set}" = set; then : + withval=$with_tools_dir; TOOLS_DIR=$with_tools_dir +fi + + + +# Check whether --with-devkit was given. +if test "${with_devkit+set}" = set; then : + withval=$with_devkit; + if test "x$with_sys_root" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-sys-root at the same time" "$LINENO" 5 + fi + if test "x$with_tools_dir" != x; then + as_fn_error $? "Cannot specify both --with-devkit and --with-tools-dir at the same time" "$LINENO" 5 + fi + TOOLS_DIR=$with_devkit/bin + SYS_ROOT=$with_devkit/$host_alias/libc + +fi + + + + +# Setup default logging of stdout and stderr to build.log in the output root. +BUILD_LOG='$(OUTPUT_ROOT)/build.log' +BUILD_LOG_PREVIOUS='$(OUTPUT_ROOT)/build.log.old' +BUILD_LOG_WRAPPER='$(BASH) $(SRC_ROOT)/common/bin/logger.sh $(BUILD_LOG)' + + + + + +# These are needed to be able to create a configuration name (and thus the output directory) ############################################################################### # @@ -7969,8 +7378,8 @@ # ie normal interpreter and C1, only the serial GC, kernel jvmti etc # zero: no machine code interpreter, no compiler # zeroshark: zero interpreter and shark/llvm compiler backend -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM that should be built" >&5 -$as_echo_n "checking which variants of the JVM that should be built... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which variants of the JVM to build" >&5 +$as_echo_n "checking which variants of the JVM to build... " >&6; } # Check whether --with-jvm-variants was given. if test "${with_jvm_variants+set}" = set; then : @@ -8151,6 +7560,2687 @@ +# With basic setup done, call the custom early hook. + + +# To properly create a configuration name, we need to have the OpenJDK target +# and options (variants and debug level) parsed. + + + +# Check whether --with-conf-name was given. +if test "${with_conf_name+set}" = set; then : + withval=$with_conf_name; CONF_NAME=${with_conf_name} +fi + + +# Test from where we are running configure, in or outside of src root. +if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then + # We are running configure from the src root. + # Create a default ./build/target-variant-debuglevel output root. + if test "x${CONF_NAME}" = x; then + CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" + fi + OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" + $MKDIR -p "$OUTPUT_ROOT" + if test ! -d "$OUTPUT_ROOT"; then + as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 + fi +else + # We are running configure from outside of the src dir. + # Then use the current directory as output dir! + # If configuration is situated in normal build directory, just use the build + # directory name as configuration name, otherwise use the complete path. + if test "x${CONF_NAME}" = x; then + CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` + fi + OUTPUT_ROOT="$CURDIR" + + # WARNING: This might be a bad thing to do. You need to be sure you want to + # have a configuration in this directory. Do some sanity checks! + + if test ! -e "$OUTPUT_ROOT/spec.gmk"; then + # If we have a spec.gmk, we have run here before and we are OK. Otherwise, check for + # other files + files_present=`$LS $OUTPUT_ROOT` + if test "x$files_present" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Current directory is $CURDIR." >&5 +$as_echo "$as_me: Current directory is $CURDIR." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Since this is not the source root, configure will output the configuration here" >&5 +$as_echo "$as_me: Since this is not the source root, configure will output the configuration here" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (as opposed to creating a configuration in /build/)." >&5 +$as_echo "$as_me: (as opposed to creating a configuration in /build/)." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: However, this directory is not empty. This is not allowed, since it could" >&5 +$as_echo "$as_me: However, this directory is not empty. This is not allowed, since it could" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: seriously mess up just about everything." >&5 +$as_echo "$as_me: seriously mess up just about everything." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Try 'cd $SRC_ROOT' and restart configure" >&5 +$as_echo "$as_me: Try 'cd $SRC_ROOT' and restart configure" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (or create a new empty directory and cd to it)." >&5 +$as_echo "$as_me: (or create a new empty directory and cd to it)." >&6;} + as_fn_error $? "Will not continue creating configuration in $CURDIR" "$LINENO" 5 + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking what configuration name to use" >&5 +$as_echo_n "checking what configuration name to use... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CONF_NAME" >&5 +$as_echo "$CONF_NAME" >&6; } + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$OUTPUT_ROOT" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OUTPUT_ROOT, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of OUTPUT_ROOT, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of OUTPUT_ROOT" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + OUTPUT_ROOT="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OUTPUT_ROOT to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting OUTPUT_ROOT to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$OUTPUT_ROOT" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + OUTPUT_ROOT="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OUTPUT_ROOT to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting OUTPUT_ROOT to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$OUTPUT_ROOT" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of OUTPUT_ROOT, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OUTPUT_ROOT, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of OUTPUT_ROOT, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + +SPEC=$OUTPUT_ROOT/spec.gmk + +CONF_NAME=$CONF_NAME + +OUTPUT_ROOT=$OUTPUT_ROOT + + +# Most of the probed defines are put into config.h +ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" + +# The spec.gmk file contains all variables for the make system. +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" + +# The hotspot-spec.gmk file contains legacy variables for the hotspot make system. +ac_config_files="$ac_config_files $OUTPUT_ROOT/hotspot-spec.gmk:$AUTOCONF_DIR/hotspot-spec.gmk.in" + +# The bootcycle-spec.gmk file contains support for boot cycle builds. +ac_config_files="$ac_config_files $OUTPUT_ROOT/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in" + +# The compare.sh is used to compare the build output to other builds. +ac_config_files="$ac_config_files $OUTPUT_ROOT/compare.sh:$AUTOCONF_DIR/compare.sh.in" + +# Spec.sh is currently used by compare-objects.sh +ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" + +# The generated Makefile knows where the spec.gmk is and where the source is. +# You can run make from the OUTPUT_ROOT, or from the top-level Makefile +# which will look for generated configurations +ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" + + +# Save the arguments given to us +echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments + + +# Must be done before we can call HELP_MSG_MISSING_DEPENDENCY. + + for ac_prog in apt-get yum port pkgutil pkgadd +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PKGHANDLER+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PKGHANDLER"; then + ac_cv_prog_PKGHANDLER="$PKGHANDLER" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PKGHANDLER="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PKGHANDLER=$ac_cv_prog_PKGHANDLER +if test -n "$PKGHANDLER"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGHANDLER" >&5 +$as_echo "$PKGHANDLER" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PKGHANDLER" && break +done + + + +# Setup tools that requires more complex handling, or that is not needed by the configure script. + + + # We need to find a recent version of GNU make. Especially on Solaris, this can be tricky. + if test "x$MAKE" != x; then + # User has supplied a make, test it. + if test ! -f "$MAKE"; then + as_fn_error $? "The specified make (by MAKE=$MAKE) is not found." "$LINENO" 5 + fi + + MAKE_CANDIDATE=""$MAKE"" + DESCRIPTION="user supplied MAKE=$MAKE" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + if test "x$FOUND_MAKE" = x; then + as_fn_error $? "The specified make (by MAKE=$MAKE) is not GNU make 3.81 or newer." "$LINENO" 5 + fi + else + # Try our hardest to locate a correct version of GNU make + for ac_prog in gmake +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHECK_GMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHECK_GMAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHECK_GMAKE="$CHECK_GMAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHECK_GMAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHECK_GMAKE=$ac_cv_path_CHECK_GMAKE +if test -n "$CHECK_GMAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_GMAKE" >&5 +$as_echo "$CHECK_GMAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHECK_GMAKE" && break +done + + + MAKE_CANDIDATE=""$CHECK_GMAKE"" + DESCRIPTION="gmake in PATH" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + + if test "x$FOUND_MAKE" = x; then + for ac_prog in make +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHECK_MAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHECK_MAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHECK_MAKE="$CHECK_MAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHECK_MAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHECK_MAKE=$ac_cv_path_CHECK_MAKE +if test -n "$CHECK_MAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_MAKE" >&5 +$as_echo "$CHECK_MAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHECK_MAKE" && break +done + + + MAKE_CANDIDATE=""$CHECK_MAKE"" + DESCRIPTION="make in PATH" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + fi + + if test "x$FOUND_MAKE" = x; then + if test "x$TOOLS_DIR" != x; then + # We have a tools-dir, check that as well before giving up. + OLD_PATH=$PATH + PATH=$TOOLS_DIR:$PATH + for ac_prog in gmake +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHECK_TOOLSDIR_GMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHECK_TOOLSDIR_GMAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHECK_TOOLSDIR_GMAKE="$CHECK_TOOLSDIR_GMAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHECK_TOOLSDIR_GMAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHECK_TOOLSDIR_GMAKE=$ac_cv_path_CHECK_TOOLSDIR_GMAKE +if test -n "$CHECK_TOOLSDIR_GMAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_TOOLSDIR_GMAKE" >&5 +$as_echo "$CHECK_TOOLSDIR_GMAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHECK_TOOLSDIR_GMAKE" && break +done + + + MAKE_CANDIDATE=""$CHECK_TOOLSDIR_GMAKE"" + DESCRIPTION="gmake in tools-dir" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + if test "x$FOUND_MAKE" = x; then + for ac_prog in make +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_CHECK_TOOLSDIR_MAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $CHECK_TOOLSDIR_MAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHECK_TOOLSDIR_MAKE="$CHECK_TOOLSDIR_MAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_CHECK_TOOLSDIR_MAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +CHECK_TOOLSDIR_MAKE=$ac_cv_path_CHECK_TOOLSDIR_MAKE +if test -n "$CHECK_TOOLSDIR_MAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_TOOLSDIR_MAKE" >&5 +$as_echo "$CHECK_TOOLSDIR_MAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CHECK_TOOLSDIR_MAKE" && break +done + + + MAKE_CANDIDATE=""$CHECK_TOOLSDIR_MAKE"" + DESCRIPTION="make in tools-dir" + if test "x$MAKE_CANDIDATE" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&5 +$as_echo "$as_me: Testing potential make at $MAKE_CANDIDATE, found using $DESCRIPTION" >&6;} + MAKE_VERSION_STRING=`$MAKE_CANDIDATE --version | $HEAD -n 1` + IS_GNU_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP 'GNU Make'` + if test "x$IS_GNU_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&5 +$as_echo "$as_me: Found potential make at $MAKE_CANDIDATE, however, this is not GNU Make. Ignoring." >&6;} + else + IS_MODERN_MAKE=`$ECHO $MAKE_VERSION_STRING | $GREP '3.8[12346789]'` + if test "x$IS_MODERN_MAKE" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&5 +$as_echo "$as_me: Found GNU make at $MAKE_CANDIDATE, however this is not version 3.81 or later. (it is: $MAKE_VERSION_STRING). Ignoring." >&6;} + else + if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + MAKE_EXPECTED_ENV='cygwin' + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + MAKE_EXPECTED_ENV='msys' + else + as_fn_error $? "Unknown Windows environment" "$LINENO" 5 + fi + MAKE_BUILT_FOR=`$MAKE_CANDIDATE --version | $GREP -i 'built for'` + IS_MAKE_CORRECT_ENV=`$ECHO $MAKE_BUILT_FOR | $GREP $MAKE_EXPECTED_ENV` + else + # Not relevant for non-Windows + IS_MAKE_CORRECT_ENV=true + fi + if test "x$IS_MAKE_CORRECT_ENV" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&5 +$as_echo "$as_me: Found GNU make version $MAKE_VERSION_STRING at $MAKE_CANDIDATE, but it is not for $MAKE_EXPECTED_ENV (it says: $MAKE_BUILT_FOR). Ignoring." >&6;} + else + FOUND_MAKE=$MAKE_CANDIDATE + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$FOUND_MAKE" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving FOUND_MAKE (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of FOUND_MAKE, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of FOUND_MAKE" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + FOUND_MAKE="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FOUND_MAKE to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting FOUND_MAKE to \"$new_complete\"" >&6;} + fi + + fi + fi + fi + fi + + fi + PATH=$OLD_PATH + fi + fi + + if test "x$FOUND_MAKE" = x; then + as_fn_error $? "Cannot find GNU make 3.81 or newer! Please put it in the path, or add e.g. MAKE=/opt/gmake3.81/make as argument to configure." "$LINENO" 5 + fi + fi + + MAKE=$FOUND_MAKE + + { $as_echo "$as_me:${as_lineno-$LINENO}: Using GNU make 3.81 (or later) at $FOUND_MAKE (version: $MAKE_VERSION_STRING)" >&5 +$as_echo "$as_me: Using GNU make 3.81 (or later) at $FOUND_MAKE (version: $MAKE_VERSION_STRING)" >&6;} + + + + # Test if find supports -delete + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if find supports -delete" >&5 +$as_echo_n "checking if find supports -delete... " >&6; } + FIND_DELETE="-delete" + + DELETEDIR=`$MKTEMP -d tmp.XXXXXXXXXX` || (echo Could not create temporary directory!; exit $?) + + echo Hejsan > $DELETEDIR/TestIfFindSupportsDelete + + TEST_DELETE=`$FIND "$DELETEDIR" -name TestIfFindSupportsDelete $FIND_DELETE 2>&1` + if test -f $DELETEDIR/TestIfFindSupportsDelete; then + # No, it does not. + rm $DELETEDIR/TestIfFindSupportsDelete + FIND_DELETE="-exec rm \{\} \+" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + fi + rmdir $DELETEDIR + + + +# These tools might not be installed by default, +# need hint on how to install them. + + for ac_prog in unzip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UNZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UNZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UNZIP=$ac_cv_path_UNZIP +if test -n "$UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNZIP" >&5 +$as_echo "$UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UNZIP" && break +done + + + if test "x$UNZIP" = x; then + if test "xunzip" = x; then + PROG_NAME=unzip + else + PROG_NAME=unzip + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + + for ac_prog in zip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ZIP in + [\\/]* | ?:[\\/]*) + ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ZIP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ZIP=$ac_cv_path_ZIP +if test -n "$ZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ZIP" >&5 +$as_echo "$ZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ZIP" && break +done + + + if test "x$ZIP" = x; then + if test "xzip" = x; then + PROG_NAME=zip + else + PROG_NAME=zip + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + + +# Non-required basic tools + +# Extract the first word of "ldd", so it can be a program name with args. +set dummy ldd; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_LDD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $LDD in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDD="$LDD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_LDD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +LDD=$ac_cv_path_LDD +if test -n "$LDD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDD" >&5 +$as_echo "$LDD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$LDD" = "x"; then + # List shared lib dependencies is used for + # debug output and checking for forbidden dependencies. + # We can build without it. + LDD="true" +fi +# Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $OTOOL in + [\\/]* | ?:[\\/]*) + ac_cv_path_OTOOL="$OTOOL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_OTOOL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +OTOOL=$ac_cv_path_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "x$OTOOL" = "x"; then + OTOOL="true" +fi +for ac_prog in readelf greadelf +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_READELF+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $READELF in + [\\/]* | ?:[\\/]*) + ac_cv_path_READELF="$READELF" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_READELF="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +READELF=$ac_cv_path_READELF +if test -n "$READELF"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READELF" >&5 +$as_echo "$READELF" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$READELF" && break +done + +# Extract the first word of "hg", so it can be a program name with args. +set dummy hg; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_HG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $HG in + [\\/]* | ?:[\\/]*) + ac_cv_path_HG="$HG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_HG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +HG=$ac_cv_path_HG +if test -n "$HG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HG" >&5 +$as_echo "$HG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "stat", so it can be a program name with args. +set dummy stat; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_STAT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $STAT in + [\\/]* | ?:[\\/]*) + ac_cv_path_STAT="$STAT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_STAT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +STAT=$ac_cv_path_STAT +if test -n "$STAT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STAT" >&5 +$as_echo "$STAT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "time", so it can be a program name with args. +set dummy time; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_TIME+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $TIME in + [\\/]* | ?:[\\/]*) + ac_cv_path_TIME="$TIME" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_TIME="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +TIME=$ac_cv_path_TIME +if test -n "$TIME"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TIME" >&5 +$as_echo "$TIME" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + + for ac_prog in comm +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_COMM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $COMM in + [\\/]* | ?:[\\/]*) + ac_cv_path_COMM="$COMM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_COMM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +COMM=$ac_cv_path_COMM +if test -n "$COMM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMM" >&5 +$as_echo "$COMM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$COMM" && break +done + + + if test "x$COMM" = x; then + if test "xcomm" = x; then + PROG_NAME=comm + else + PROG_NAME=comm + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not find $PROG_NAME!" >&5 +$as_echo "$as_me: Could not find $PROG_NAME!" >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + +fi + + +# Check if pkg-config is available. + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi + +fi + +# After basic tools have been setup, we can check build os specific details. + +############################################################################### + +# Note that this is the build platform OS version! + +OS_VERSION="`uname -r | ${SED} 's!\.! !g' | ${SED} 's!-! !g'`" +OS_VERSION_MAJOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 1 -d ' '`" +OS_VERSION_MINOR="`${ECHO} ${OS_VERSION} | ${CUT} -f 2 -d ' '`" +OS_VERSION_MICRO="`${ECHO} ${OS_VERSION} | ${CUT} -f 3 -d ' '`" + + + + + +# Setup builddeps, for automatic downloading of tools we need. +# This is needed before we can call BDEPS_CHECK_MODULE, which is done in +# boot-jdk setup, but we need to have basic tools setup first. + + +# Check whether --with-builddeps-conf was given. +if test "${with_builddeps_conf+set}" = set; then : + withval=$with_builddeps_conf; +fi + + + +# Check whether --with-builddeps-server was given. +if test "${with_builddeps_server+set}" = set; then : + withval=$with_builddeps_server; +fi + + + +# Check whether --with-builddeps-dir was given. +if test "${with_builddeps_dir+set}" = set; then : + withval=$with_builddeps_dir; +else + with_builddeps_dir=/localhome/builddeps +fi + + + +# Check whether --with-builddeps-group was given. +if test "${with_builddeps_group+set}" = set; then : + withval=$with_builddeps_group; +fi + + + + + if test "x$with_builddeps_server" != x || test "x$with_builddeps_conf" != x; then + if test "x$with_builddeps_conf" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supplied builddeps configuration file" >&5 +$as_echo_n "checking for supplied builddeps configuration file... " >&6; } + builddepsfile=$with_builddeps_conf + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: loaded!" >&5 +$as_echo "loaded!" >&6; } + else + as_fn_error $? "The given builddeps conf file $with_builddeps_conf could not be loaded!" "$LINENO" 5 + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for builddeps.conf files in sources..." >&5 +$as_echo_n "checking for builddeps.conf files in sources...... " >&6; } + builddepsfile=`mktemp` + touch $builddepsfile + # Put all found confs into a single file. + find ${SRC_ROOT} -name builddeps.conf -exec cat \{\} \; >> $builddepsfile + # Source the file to acquire the variables + if test -s $builddepsfile; then + . $builddepsfile + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found at least one!" >&5 +$as_echo "found at least one!" >&6; } + else + as_fn_error $? "Could not find any builddeps.conf at all!" "$LINENO" 5 + fi + fi + # Create build and target names that use _ instead of "-" and ".". + # This is necessary to use them in variable names. + build_var=`echo ${OPENJDK_BUILD_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'` + target_var=`echo ${OPENJDK_TARGET_AUTOCONF_NAME} | tr '-' '_' | tr '.' '_'` + # Extract rewrite information for build and target + eval rewritten_build=\${REWRITE_${build_var}} + if test "x$rewritten_build" = x; then + rewritten_build=${OPENJDK_BUILD_AUTOCONF_NAME} + echo Build stays the same $rewritten_build + else + echo Rewriting build for builddeps into $rewritten_build + fi + eval rewritten_target=\${REWRITE_${target_var}} + if test "x$rewritten_target" = x; then + rewritten_target=${OPENJDK_TARGET_AUTOCONF_NAME} + echo Target stays the same $rewritten_target + else + echo Rewriting target for builddeps into $rewritten_target + fi + rewritten_build_var=`echo ${rewritten_build} | tr '-' '_' | tr '.' '_'` + rewritten_target_var=`echo ${rewritten_target} | tr '-' '_' | tr '.' '_'` + fi + for ac_prog in 7z unzip +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_UNZIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_UNZIP"; then + ac_cv_prog_BDEPS_UNZIP="$BDEPS_UNZIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_UNZIP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_UNZIP=$ac_cv_prog_BDEPS_UNZIP +if test -n "$BDEPS_UNZIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_UNZIP" >&5 +$as_echo "$BDEPS_UNZIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_UNZIP" && break +done + + if test "x$BDEPS_UNZIP" = x7z; then + BDEPS_UNZIP="7z x" + fi + + for ac_prog in wget lftp ftp +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_BDEPS_FTP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BDEPS_FTP"; then + ac_cv_prog_BDEPS_FTP="$BDEPS_FTP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_BDEPS_FTP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BDEPS_FTP=$ac_cv_prog_BDEPS_FTP +if test -n "$BDEPS_FTP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BDEPS_FTP" >&5 +$as_echo "$BDEPS_FTP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BDEPS_FTP" && break +done + + + +############################################################################### +# +# Determine OpenJDK variants, options and version numbers. +# +############################################################################### + +# We need build & target for this. + ############################################################################### # @@ -8159,42 +10249,45 @@ # Check whether --enable-openjdk-only was given. if test "${enable_openjdk_only+set}" = set; then : enableval=$enable_openjdk_only; -fi - - -if test "x$enable_openjdk_only" = "xyes"; then +else + enable_openjdk_only="no" +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of closed sources" >&5 +$as_echo_n "checking for presence of closed sources... " >&6; } +if test -d "$SRC_ROOT/jdk/src/closed"; then + CLOSED_SOURCE_PRESENT=yes +else + CLOSED_SOURCE_PRESENT=no +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CLOSED_SOURCE_PRESENT" >&5 +$as_echo "$CLOSED_SOURCE_PRESENT" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if closed source is supressed (openjdk-only)" >&5 +$as_echo_n "checking if closed source is supressed (openjdk-only)... " >&6; } +SUPRESS_CLOSED_SOURCE="$enable_openjdk_only" +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $SUPRESS_CLOSED_SOURCE" >&5 +$as_echo "$SUPRESS_CLOSED_SOURCE" >&6; } + +if test "x$CLOSED_SOURCE_PRESENT" = xno; then + OPENJDK=true + if test "x$SUPRESS_CLOSED_SOURCE" = "xyes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No closed source present, --enable-openjdk-only makes no sense" >&5 +$as_echo "$as_me: WARNING: No closed source present, --enable-openjdk-only makes no sense" >&2;} + fi +else + if test "x$SUPRESS_CLOSED_SOURCE" = "xyes"; then OPENJDK=true -elif test "x$enable_openjdk_only" = "xno"; then + else OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false -else - OPENJDK=true + fi fi if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true -fi - - - -############################################################################### -# -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -# Check whether --enable-jigsaw was given. -if test "${enable_jigsaw+set}" = set; then : - enableval=$enable_jigsaw; -fi - - -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi + SET_OPENJDK="OPENJDK=true" +fi + ############################################################################### @@ -8233,28 +10326,6 @@ -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build nimbus L&F" >&5 -$as_echo_n "checking whether to build nimbus L&F... " >&6; } -# Check whether --enable-nimbus was given. -if test "${enable_nimbus+set}" = set; then : - enableval=$enable_nimbus; ENABLE_NIMBUS="${enableval}" -else - ENABLE_NIMBUS='yes' -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ENABLE_NIMBUS" >&5 -$as_echo "$ENABLE_NIMBUS" >&6; } -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi - - # Control wether Hotspot runs Queens test after build. # Check whether --enable-hotspot-test-in-build was given. if test "${enable_hotspot_test_in_build+set}" = set; then : @@ -8293,48 +10364,30 @@ ############################################################################### # +# Enable or disable unlimited crypto +# +# Check whether --enable-unlimited-crypto was given. +if test "${enable_unlimited_crypto+set}" = set; then : + enableval=$enable_unlimited_crypto; +else + enable_unlimited_crypto=no +fi + +if test "x$enable_unlimited_crypto" = "xyes"; then + UNLIMITED_CRYPTO=true +else + UNLIMITED_CRYPTO=false +fi + + +############################################################################### +# # Compress jars # COMPRESS_JARS=false -############################################################################### -# -# Should we compile JFR -# default no, except for on closed-jdk -# -ENABLE_JFR=no - -# Is the JFR source present - -# -# For closed default is yes -# -if test "x${OPENJDK}" != "xtrue"; then - ENABLE_JFR=yes -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build jfr" >&5 -$as_echo_n "checking whether to build jfr... " >&6; } -# Check whether --enable-jfr was given. -if test "${enable_jfr+set}" = set; then : - enableval=$enable_jfr; -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ENABLE_JFR}" >&5 -$as_echo "${ENABLE_JFR}" >&6; } - -if test "x$ENABLE_JFR" = "xyes"; then - ENABLE_JFR=true -elif test "x$ENABLE_JFR" = "xno"; then - ENABLE_JFR=false -else - as_fn_error $? "Invalid argument to --enable-jfr" "$LINENO" 5 -fi - - - # Source the version numbers . $AUTOCONF_DIR/version.numbers @@ -8354,6 +10407,8 @@ + + COPYRIGHT_YEAR=`date +'%Y'` @@ -8381,7 +10436,7 @@ BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` # Avoid [:alnum:] since it depends on the locale. CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" fi @@ -8389,93 +10444,6 @@ -# To properly create a configuration name, we need to have the OpenJDK target -# and options (variants and debug level) parsed. - - - -# Check whether --with-conf-name was given. -if test "${with_conf_name+set}" = set; then : - withval=$with_conf_name; CONF_NAME=${with_conf_name} -fi - - -# Test from where we are running configure, in or outside of src root. -if test "x$CURDIR" = "x$SRC_ROOT" || test "x$CURDIR" = "x$SRC_ROOT/common" || test "x$CURDIR" = "x$SRC_ROOT/common/autoconf" || test "x$CURDIR" = "x$SRC_ROOT/common/makefiles" ; then - # We are running configure from the src root. - # Create a default ./build/target-variant-debuglevel output root. - if test "x${CONF_NAME}" = x; then - CONF_NAME="${OPENJDK_TARGET_OS}-${OPENJDK_TARGET_CPU}-${JDK_VARIANT}-${ANDED_JVM_VARIANTS}-${DEBUG_LEVEL}" - fi - OUTPUT_ROOT="$SRC_ROOT/build/${CONF_NAME}" - mkdir -p "$OUTPUT_ROOT" - if test ! -d "$OUTPUT_ROOT"; then - as_fn_error $? "Could not create build directory $OUTPUT_ROOT" "$LINENO" 5 - fi -else - # We are running configure from outside of the src dir. - # Then use the current directory as output dir! - # If configuration is situated in normal build directory, just use the build - # directory name as configuration name, otherwise use the complete path. - if test "x${CONF_NAME}" = x; then - CONF_NAME=`$ECHO $CURDIR | $SED -e "s!^${SRC_ROOT}/build/!!"` - fi - OUTPUT_ROOT="$CURDIR" -fi - - - # Fail with message the path to the output root if var OUTPUT_ROOT contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$OUTPUT_ROOT" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - OUTPUT_ROOT=`$CYGPATH -s -m -a "$OUTPUT_ROOT"` - # Now it's case insensitive; let's make it lowercase to improve readability - OUTPUT_ROOT=`$ECHO "$OUTPUT_ROOT" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - OUTPUT_ROOT=`$CYGPATH -u "$OUTPUT_ROOT"` - else - as_fn_error $? "You cannot have spaces in the path to the output root! \"$OUTPUT_ROOT\"" "$LINENO" 5 - fi - fi - - -SPEC=$OUTPUT_ROOT/spec.gmk - -CONF_NAME=$CONF_NAME - -OUTPUT_ROOT=$OUTPUT_ROOT - - -# Most of the probed defines are put into config.h -ac_config_headers="$ac_config_headers $OUTPUT_ROOT/config.h:$AUTOCONF_DIR/config.h.in" - -# The spec.gmk file contains all variables for the make system. -ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.gmk:$AUTOCONF_DIR/spec.gmk.in" - -# The hotspot-spec.gmk file contains legacy variables for the hotspot make system. -ac_config_files="$ac_config_files $OUTPUT_ROOT/hotspot-spec.gmk:$AUTOCONF_DIR/hotspot-spec.gmk.in" - -# The bootcycle-spec.gmk file contains support for boot cycle builds. -ac_config_files="$ac_config_files $OUTPUT_ROOT/bootcycle-spec.gmk:$AUTOCONF_DIR/bootcycle-spec.gmk.in" - -# The compare.sh is used to compare the build output to other builds. -ac_config_files="$ac_config_files $OUTPUT_ROOT/compare.sh:$AUTOCONF_DIR/compare.sh.in" - -# Spec.sh is currently used by compare-objects.sh -ac_config_files="$ac_config_files $OUTPUT_ROOT/spec.sh:$AUTOCONF_DIR/spec.sh.in" - -# The generated Makefile knows where the spec.gmk is and where the source is. -# You can run make from the OUTPUT_ROOT, or from the top-level Makefile -# which will look for generated configurations -ac_config_files="$ac_config_files $OUTPUT_ROOT/Makefile:$AUTOCONF_DIR/Makefile.in" - - -# Save the arguments given to us -echo "$CONFIGURE_COMMAND_LINE" > $OUTPUT_ROOT/configure-arguments - - ############################################################################### # # Setup BootJDK, used to bootstrap the build. @@ -8546,26 +10514,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -8768,26 +10843,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -8802,12 +10984,126 @@ # Now execute the test if test "x$JAVA_HOME" != x; then - if test "x$OPENJDK_TARGET_OS" = xwindows; then - # On Windows, JAVA_HOME is likely in DOS-style - JAVA_HOME_PROCESSED="`$CYGPATH -u "$JAVA_HOME"`" - else - JAVA_HOME_PROCESSED="$JAVA_HOME" - fi + JAVA_HOME_PROCESSED="$JAVA_HOME" + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$JAVA_HOME_PROCESSED" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of JAVA_HOME_PROCESSED" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + JAVA_HOME_PROCESSED="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JAVA_HOME_PROCESSED to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting JAVA_HOME_PROCESSED to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$JAVA_HOME_PROCESSED" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + JAVA_HOME_PROCESSED="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting JAVA_HOME_PROCESSED to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting JAVA_HOME_PROCESSED to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$JAVA_HOME_PROCESSED" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of JAVA_HOME_PROCESSED, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + if test ! -d "$JAVA_HOME_PROCESSED"; then { $as_echo "$as_me:${as_lineno-$LINENO}: Your JAVA_HOME points to a non-existing directory!" >&5 $as_echo "$as_me: Your JAVA_HOME points to a non-existing directory!" >&6;} @@ -8859,26 +11155,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -8937,26 +11340,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9060,75 +11570,14 @@ # Linux/GNU systems often have links from /usr/bin/java to # /etc/alternatives/java to the real JDK binary. - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$BINARY" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$BINARY"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - BINARY="$tmp" - - if test "x$OPENJDK_BUILD_OS" != xwindows; then # Follow a chain of symbolic links. Use readlink # where it exists, else fall back to horribly # complicated shell code. - # Extract the first word of "readlink", so it can be a program name with args. -set dummy readlink; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_READLINK+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $READLINK in - [\\/]* | ?:[\\/]*) - ac_cv_path_READLINK="$READLINK" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_READLINK="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -READLINK=$ac_cv_path_READLINK -if test -n "$READLINK"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $READLINK" >&5 -$as_echo "$READLINK" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$READLINK_TESTED" != yes; then # On MacOSX there is a readlink tool with a different # purpose than the GNU readlink tool. Check the found readlink. - ISGNU=`$READLINK --help 2>&1 | grep GNU` + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` if test "x$ISGNU" = x; then # A readlink that we do not know how to use. # Are there other non-GNU readlinks out there? @@ -9142,23 +11591,25 @@ else STARTDIR=$PWD COUNTER=0 - DIR=`dirname $BINARY` - FIL=`basename $BINARY` + sym_link_dir=`$DIRNAME $BINARY` + sym_link_file=`$BASENAME $BINARY` while test $COUNTER -lt 20; do - ISLINK=`ls -l $DIR/$FIL | grep '\->' | sed -e 's/.*-> \(.*\)/\1/'` + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` if test "x$ISLINK" == x; then # This is not a symbolic link! We are done! break fi # The link might be relative! We have to use cd to travel safely. - cd $DIR - cd `dirname $ISLINK` - DIR=`pwd` - FIL=`basename $ISLINK` + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` let COUNTER=COUNTER+1 done cd $STARTDIR - BINARY=$DIR/$FIL + BINARY=$sym_link_dir/$sym_link_file fi fi @@ -9210,26 +11661,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9249,17 +11807,207 @@ # Now execute the test if test "x$ProgramW6432" != x; then - - BOOT_JDK_PREFIX="`$CYGPATH -u "$ProgramW6432"`/Java" + VIRTUAL_DIR="$ProgramW6432/Java" + + windows_path="$VIRTUAL_DIR" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VIRTUAL_DIR="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VIRTUAL_DIR="$unix_path" + fi + + + BOOT_JDK_PREFIX="$VIRTUAL_DIR" BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} - fi + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done fi fi @@ -9302,26 +12050,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9334,17 +12189,207 @@ # Now execute the test if test "x$PROGRAMW6432" != x; then - - BOOT_JDK_PREFIX="`$CYGPATH -u "$PROGRAMW6432"`/Java" + VIRTUAL_DIR="$PROGRAMW6432/Java" + + windows_path="$VIRTUAL_DIR" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VIRTUAL_DIR="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VIRTUAL_DIR="$unix_path" + fi + + + BOOT_JDK_PREFIX="$VIRTUAL_DIR" BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} - fi + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done fi fi @@ -9387,26 +12432,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9419,17 +12571,589 @@ # Now execute the test if test "x$PROGRAMFILES" != x; then - - BOOT_JDK_PREFIX="`$CYGPATH -u "$PROGRAMFILES"`/Java" + VIRTUAL_DIR="$PROGRAMFILES/Java" + + windows_path="$VIRTUAL_DIR" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VIRTUAL_DIR="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VIRTUAL_DIR="$unix_path" + fi + + + BOOT_JDK_PREFIX="$VIRTUAL_DIR" BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} - fi + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done + fi + + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + if test "x$ProgramFiles" != x; then + VIRTUAL_DIR="$ProgramFiles/Java" + + windows_path="$VIRTUAL_DIR" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VIRTUAL_DIR="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VIRTUAL_DIR="$unix_path" + fi + + + BOOT_JDK_PREFIX="$VIRTUAL_DIR" + BOOT_JDK_SUFFIX="" + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done fi fi @@ -9472,26 +13196,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9503,20 +13334,195 @@ if test "x$BOOT_JDK_FOUND" = xno; then # Now execute the test - if test "x$ProgramFiles" != x; then - - BOOT_JDK_PREFIX="`$CYGPATH -u "$ProgramFiles"`/Java" + BOOT_JDK_PREFIX="/cygdrive/c/Program Files/Java" BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} - fi - fi - + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done fi @@ -9557,26 +13563,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9584,20 +13697,200 @@ fi # end check boot jdk found fi + elif test "x$OPENJDK_TARGET_OS" = xmacosx; then + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK_PREFIX="/Library/Java/JavaVirtualMachines" + BOOT_JDK_SUFFIX="/Contents/Home" + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do if test "x$BOOT_JDK_FOUND" = xno; then # Now execute the test - BOOT_JDK_PREFIX="/cygdrive/c/Program Files/Java" - BOOT_JDK_SUFFIX="" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} - fi + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done fi @@ -9638,26 +13931,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9665,21 +14065,199 @@ fi # end check boot jdk found fi - elif test "x$OPENJDK_TARGET_OS" = xmacosx; then + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK_PREFIX="/System/Library/Java/JavaVirtualMachines" + BOOT_JDK_SUFFIX="/Contents/Home" + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do if test "x$BOOT_JDK_FOUND" = xno; then # Now execute the test - BOOT_JDK_PREFIX="/Library/Java/JavaVirtualMachines" - BOOT_JDK_SUFFIX="/Contents/Home" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} - fi + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done fi @@ -9720,26 +14298,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9747,20 +14432,200 @@ fi # end check boot jdk found fi + elif test "x$OPENJDK_TARGET_OS" = xlinux; then + + if test "x$BOOT_JDK_FOUND" = xno; then + # Now execute the test + + BOOT_JDK_PREFIX="/usr/lib/jvm" + BOOT_JDK_SUFFIX="" + ALL_JDKS_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $SORT -r` + if test "x$ALL_JDKS_FOUND" != x; then + for JDK_TO_TRY in $ALL_JDKS_FOUND ; do if test "x$BOOT_JDK_FOUND" = xno; then # Now execute the test - BOOT_JDK_PREFIX="/System/Library/Java/JavaVirtualMachines" - BOOT_JDK_SUFFIX="/Contents/Home" - BEST_JDK_FOUND=`$LS "$BOOT_JDK_PREFIX" 2> /dev/null | $GREP jdk | $SORT -r | $HEAD -n 1 ` - if test "x$BEST_JDK_FOUND" != x; then - BOOT_JDK="${BOOT_JDK_PREFIX}/${BEST_JDK_FOUND}${BOOT_JDK_SUFFIX}" - if test -d "$BOOT_JDK"; then - BOOT_JDK_FOUND=maybe - { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&5 -$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX)" >&6;} - fi + BOOT_JDK="${BOOT_JDK_PREFIX}/${JDK_TO_TRY}${BOOT_JDK_SUFFIX}" + if test -d "$BOOT_JDK"; then + BOOT_JDK_FOUND=maybe + { $as_echo "$as_me:${as_lineno-$LINENO}: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&5 +$as_echo "$as_me: Found potential Boot JDK using well-known locations (in $BOOT_JDK_PREFIX/$JDK_TO_TRY)" >&6;} + fi + + + # If previous step claimed to have found a JDK, check it to see if it seems to be valid. + if test "x$BOOT_JDK_FOUND" = xmaybe; then + # Do we have a bin/java? + if test ! -x "$BOOT_JDK/bin/java"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/java; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have a bin/javac? + if test ! -x "$BOOT_JDK/bin/javac"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain bin/javac; ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (This might be an JRE instead of an JDK)" >&5 +$as_echo "$as_me: (This might be an JRE instead of an JDK)" >&6;} + BOOT_JDK_FOUND=no + else + # Do we have an rt.jar? (On MacOSX it is called classes.jar) + if test ! -f "$BOOT_JDK/jre/lib/rt.jar" && test ! -f "$BOOT_JDK/../Classes/classes.jar"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK did not contain an rt.jar; ignoring" >&6;} + BOOT_JDK_FOUND=no + else + # Oh, this is looking good! We probably have found a proper JDK. Is it the correct version? + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | head -n 1` + + # Extra M4 quote needed to protect [] in grep expression. + FOUND_VERSION_78=`echo $BOOT_JDK_VERSION | grep '\"1\.[78]\.'` + if test "x$FOUND_VERSION_78" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&5 +$as_echo "$as_me: Potential Boot JDK found at $BOOT_JDK is incorrect JDK version ($BOOT_JDK_VERSION); ignoring" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: (Your Boot JDK must be version 7 or 8)" >&5 +$as_echo "$as_me: (Your Boot JDK must be version 7 or 8)" >&6;} + BOOT_JDK_FOUND=no + else + # We're done! :-) + BOOT_JDK_FOUND=yes + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 +$as_echo_n "checking for Boot JDK... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } + fi # end check jdk version + fi # end check rt.jar + fi # end check javac + fi # end check java + fi # end check boot jdk found + fi + + done fi @@ -9801,26 +14666,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -9868,26 +14840,133 @@ # We're done! :-) BOOT_JDK_FOUND=yes - # Fail with message the path to the Boot JDK if var BOOT_JDK contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$BOOT_JDK" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - BOOT_JDK=`$CYGPATH -s -m -a "$BOOT_JDK"` - # Now it's case insensitive; let's make it lowercase to improve readability - BOOT_JDK=`$ECHO "$BOOT_JDK" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - BOOT_JDK=`$CYGPATH -u "$BOOT_JDK"` - else - as_fn_error $? "You cannot have spaces in the path to the Boot JDK! \"$BOOT_JDK\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$BOOT_JDK" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of BOOT_JDK" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$BOOT_JDK" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + BOOT_JDK="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BOOT_JDK to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting BOOT_JDK to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$BOOT_JDK" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of BOOT_JDK, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of BOOT_JDK, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Boot JDK" >&5 $as_echo_n "checking for Boot JDK... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK ($BOOT_JDK_VERSION)" >&5 -$as_echo "$BOOT_JDK ($BOOT_JDK_VERSION)" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK" >&5 +$as_echo "$BOOT_JDK" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking Boot JDK version" >&5 +$as_echo_n "checking Boot JDK version... " >&6; } + BOOT_JDK_VERSION=`"$BOOT_JDK/bin/java" -version 2>&1 | $TR '\n\r' ' '` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BOOT_JDK_VERSION" >&5 +$as_echo "$BOOT_JDK_VERSION" >&6; } fi # end check jdk version fi # end check rt.jar fi # end check javac @@ -10465,16 +15544,13 @@ - - -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # Store path to cygwin link.exe to help excluding it when searching for - # VS linker. - # Extract the first word of "link", so it can be a program name with args. +# Locate the actual tools + +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + + # Store path to cygwin link.exe to help excluding it when searching for + # VS linker. This must be done before changing the PATH when looking for VS. + # Extract the first word of "link", so it can be a program name with args. set dummy link; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } @@ -10514,6 +15590,7 @@ fi + if test "x$CYGWIN_LINK" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the first found link.exe is actually the Cygwin link tool" >&5 $as_echo_n "checking if the first found link.exe is actually the Cygwin link tool... " >&6; } "$CYGWIN_LINK" --version > /dev/null @@ -10526,123 +15603,861 @@ # This might be the VS linker. Don't exclude it later on. CYGWIN_LINK="" fi - - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. + fi + + # First-hand choice is to locate and run the vsvars bat file. + + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VCVARSFILE="vc/bin/vcvars32.bat" + else + VCVARSFILE="vc/bin/amd64/vcvars64.bat" + fi + + VS_ENV_CMD="" + VS_ENV_ARGS="" + if test "x$with_toolsdir" != x; then + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="$with_toolsdir/../.." + METHOD="--with-tools-dir" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + fi + + if test "x$with_toolsdir" != x && test "x$VS_ENV_CMD" = x; then + # Having specified an argument which is incorrect will produce an instant failure; + # we should not go on looking + { $as_echo "$as_me:${as_lineno-$LINENO}: The path given by --with-tools-dir does not contain a valid Visual Studio installation" >&5 +$as_echo "$as_me: The path given by --with-tools-dir does not contain a valid Visual Studio installation" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Please point to the VC/bin directory within the Visual Studio installation" >&5 +$as_echo "$as_me: Please point to the VC/bin directory within the Visual Studio installation" >&6;} + as_fn_error $? "Cannot locate a valid Visual Studio installation" "$LINENO" 5 + fi + + if test "x$ProgramW6432" != x; then + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="$ProgramW6432/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + fi + if test "x$PROGRAMW6432" != x; then + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="$PROGRAMW6432/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + fi + if test "x$PROGRAMFILES" != x; then + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="$PROGRAMFILES/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + fi + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="C:/Program Files/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1/Bin" + METHOD="well-known name" + + windows_path="$WIN_SDK_BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + WIN_SDK_BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + WIN_SDK_BASE="$unix_path" + fi + + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&5 +$as_echo "$as_me: Found Windows SDK installation at $WIN_SDK_BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&5 +$as_echo "$as_me: Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring" >&6;} + fi + fi + fi + + + if test "x$VS100COMNTOOLS" != x; then + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="$VS100COMNTOOLS/../.." + METHOD="VS100COMNTOOLS variable" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + fi + if test "x$PROGRAMFILES" != x; then + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="$PROGRAMFILES/Microsoft Visual Studio 10.0" + METHOD="well-known name" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + fi + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="C:/Program Files/Microsoft Visual Studio 10.0" + METHOD="well-known name" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + + if test "x$VS_ENV_CMD" = x; then + VS100BASE="C:/Program Files (x86)/Microsoft Visual Studio 10.0" + METHOD="well-known name" + + windows_path="$VS100BASE" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + VS100BASE="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + VS100BASE="$unix_path" + fi + + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Found Visual Studio installation at $VS100BASE using $METHOD" >&5 +$as_echo "$as_me: Found Visual Studio installation at $VS100BASE using $METHOD" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&5 +$as_echo "$as_me: Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring" >&6;} + fi + fi + fi + + + if test "x$VS_ENV_CMD" != x; then + # We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file. + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$VS_ENV_CMD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of VS_ENV_CMD" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of VS_ENV_CMD, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of VS_ENV_CMD, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of VS_ENV_CMD" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$VS_ENV_CMD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of VS_ENV_CMD" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$VS_ENV_CMD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving VS_ENV_CMD (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving VS_ENV_CMD (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of VS_ENV_CMD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of VS_ENV_CMD" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + VS_ENV_CMD="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting VS_ENV_CMD to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting VS_ENV_CMD to \"$new_complete\"" >&6;} + fi + + + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + { $as_echo "$as_me:${as_lineno-$LINENO}: Trying to extract Visual Studio environment variables" >&5 +$as_echo "$as_me: Trying to extract Visual Studio environment variables" >&6;} + cd $OUTPUT_ROOT + # FIXME: The code betweeen ---- was inlined from a separate script and is not properly adapted + # to autoconf standards. + + #---- + + # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment) + # but calculate the difference in Cygwin environment before/after running it and then + # apply the diff. + + if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then + _vs10varsall=`cygpath -a -m -s "$VS_ENV_CMD"` + _dosvs10varsall=`cygpath -a -w -s $_vs10varsall` + _dosbash=`cygpath -a -w -s \`which bash\`.*` + else + _dosvs10varsall=`cmd //c echo $VS_ENV_CMD` + _dosbash=`cmd //c echo \`which bash\`` + fi + + # generate the set of exported vars before/after the vs10 setup + $ECHO "@echo off" > localdevenvtmp.bat + $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export0" >> localdevenvtmp.bat + $ECHO "call $_dosvs10varsall $VS_ENV_ARGS" >> localdevenvtmp.bat + $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export1" >> localdevenvtmp.bat + + # Now execute the newly created bat file. + # The | cat is to stop SetEnv.Cmd to mess with system colors on msys + cmd /c localdevenvtmp.bat | cat + + # apply the diff (less some non-vs10 vars named by "!") + $SORT localdevenvtmp.export0 | $GREP -v "!" > localdevenvtmp.export0.sort + $SORT localdevenvtmp.export1 | $GREP -v "!" > localdevenvtmp.export1.sort + $COMM -1 -3 localdevenvtmp.export0.sort localdevenvtmp.export1.sort > localdevenv.sh + + # cleanup + $RM localdevenvtmp* + #---- + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: Could not succesfully extract the envionment variables needed for the VS setup." >&5 +$as_echo "$as_me: Could not succesfully extract the envionment variables needed for the VS setup." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Try setting --with-tools-dir to the VC/bin directory within the VS installation" >&5 +$as_echo "$as_me: Try setting --with-tools-dir to the VC/bin directory within the VS installation" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: or run \"bash.exe -l\" from a VS command prompt and then run configure from there." >&5 +$as_echo "$as_me: or run \"bash.exe -l\" from a VS command prompt and then run configure from there." >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + { $as_echo "$as_me:${as_lineno-$LINENO}: Setting extracted environment variables" >&5 +$as_echo "$as_me: Setting extracted environment variables" >&6;} + . $OUTPUT_ROOT/localdevenv.sh + else + # We did not find a vsvars bat file, let's hope we are run from a VS command prompt. + { $as_echo "$as_me:${as_lineno-$LINENO}: Cannot locate a valid Visual Studio installation, checking current environment" >&5 +$as_echo "$as_me: Cannot locate a valid Visual Studio installation, checking current environment" >&6;} + fi + + # At this point, we should have corrent variables in the environment, or we can't continue. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Visual Studio variables" >&5 +$as_echo_n "checking for Visual Studio variables... " >&6; } + + if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x || test "x$WINDOWSSDKDIR" != x; then + if test "x$INCLUDE" = x || test "x$LIB" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: present but broken" >&5 +$as_echo "present but broken" >&6; } + as_fn_error $? "Your VC command prompt seems broken, INCLUDE and/or LIB is missing." "$LINENO" 5 + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } + VS_INCLUDE="$INCLUDE" + VS_LIB="$LIB" + VS_PATH="$PATH" + + + + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } + + if test "x$VS_ENV_CMD" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Cannot locate a valid Visual Studio or Windows SDK installation on disk," >&5 +$as_echo "$as_me: Cannot locate a valid Visual Studio or Windows SDK installation on disk," >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: nor is this script run from a Visual Studio command prompt." >&5 +$as_echo "$as_me: nor is this script run from a Visual Studio command prompt." >&6;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Running the extraction script failed." >&5 +$as_echo "$as_me: Running the extraction script failed." >&6;} + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: Try setting --with-tools-dir to the VC/bin directory within the VS installation" >&5 +$as_echo "$as_me: Try setting --with-tools-dir to the VC/bin directory within the VS installation" >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: or run \"bash.exe -l\" from a VS command prompt and then run configure from there." >&5 +$as_echo "$as_me: or run \"bash.exe -l\" from a VS command prompt and then run configure from there." >&6;} + as_fn_error $? "Cannot continue" "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 +$as_echo_n "checking for msvcr100.dll... " >&6; } + +# Check whether --with-msvcr-dll was given. +if test "${with_msvcr_dll+set}" = set; then : + withval=$with_msvcr_dll; +fi + + if test "x$with_msvcr_dll" != x; then + MSVCR_DLL="$with_msvcr_dll" + else if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if you are running from within a VS command prompt" >&5 -$as_echo_n "checking if you are running from within a VS command prompt... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - case "$OPENJDK_TARGET_CPU" in - x86) - VARSBAT_ARCH=x86 - ;; - x86_64) - VARSBAT_ARCH=amd64 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can extract the needed env variables" >&5 -$as_echo_n "checking if we can extract the needed env variables... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not succesfully extract the env variables needed for the VS setup. Please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can find the VS installation" >&5 -$as_echo_n "checking if we can find the VS installation... " >&6; } - if test "x$VCINSTALLDIR" != x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $VCINSTALLDIR" >&5 -$as_echo "$VCINSTALLDIR" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not find VS installation. Please install. If you are sure you have installed VS, then please run \"c:\\cygwin\\bin\\bash.exe -l\" from a VS command prompt and then run configure/make from there." "$LINENO" 5 - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for msvcr100.dll" >&5 -$as_echo_n "checking for msvcr100.dll... " >&6; } - -# Check whether --with-msvcr100dll was given. -if test "${with_msvcr100dll+set}" = set; then : - withval=$with_msvcr100dll; -fi - - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi - fi - if test "x$MSVCR100DLL" = x; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR100DLL" >&5 -$as_echo "$MSVCR100DLL" >&6; } - - # Fail with message the path to msvcr100.dll if var MSVCR100DLL contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$MSVCR100DLL" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - MSVCR100DLL=`$CYGPATH -s -m -a "$MSVCR100DLL"` - # Now it's case insensitive; let's make it lowercase to improve readability - MSVCR100DLL=`$ECHO "$MSVCR100DLL" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - MSVCR100DLL=`$CYGPATH -u "$MSVCR100DLL"` - else - as_fn_error $? "You cannot have spaces in the path to msvcr100.dll! \"$MSVCR100DLL\"" "$LINENO" 5 - fi - fi - - fi -fi - - - - -# Locate the actual tools + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR_DLL" = x; then + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | head --lines 1` + fi + fi + if test "x$MSVCR_DLL" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: msvcr100.dll found in VCINSTALLDIR: $VCINSTALLDIR" >&5 +$as_echo "$as_me: msvcr100.dll found in VCINSTALLDIR: $VCINSTALLDIR" >&6;} + else + { $as_echo "$as_me:${as_lineno-$LINENO}: Warning: msvcr100.dll not found in VCINSTALLDIR: $VCINSTALLDIR" >&5 +$as_echo "$as_me: Warning: msvcr100.dll not found in VCINSTALLDIR: $VCINSTALLDIR" >&6;} + fi + fi + if test "x$MSVCR_DLL" = x; then + if test -f "$SYSTEMROOT/system32/msvcr100.dll"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: msvcr100.dll found in $SYSTEMROOT/system32" >&5 +$as_echo "$as_me: msvcr100.dll found in $SYSTEMROOT/system32" >&6;} + MSVCR_DLL="$SYSTEMROOT/system32/msvcr100.dll" + fi + fi + fi + if test "x$MSVCR_DLL" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + as_fn_error $? "Could not find msvcr100.dll !" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSVCR_DLL" >&5 +$as_echo "$MSVCR_DLL" >&6; } + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$MSVCR_DLL" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MSVCR_DLL, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of MSVCR_DLL, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of MSVCR_DLL" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + MSVCR_DLL="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting MSVCR_DLL to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting MSVCR_DLL to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$MSVCR_DLL" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + MSVCR_DLL="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting MSVCR_DLL to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting MSVCR_DLL to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$MSVCR_DLL" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of MSVCR_DLL, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MSVCR_DLL, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of MSVCR_DLL, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + +fi + + # If --build AND --host is set, then the configure script will find any # cross compilation tools in the PATH. Cross compilation tools @@ -10707,47 +16522,245 @@ done - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$BUILD_CC" - car="${tmp%% *}" - tmp="$BUILD_CC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - BUILD_CC="$car ${cdr% *}" - else - BUILD_CC="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of BUILD_CC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of BUILD_CC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving BUILD_CC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving BUILD_CC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CC" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + BUILD_CC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BUILD_CC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting BUILD_CC to \"$new_complete\"" >&6;} + fi for ac_prog in cl CC g++ do @@ -10795,47 +16808,245 @@ done - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$BUILD_CXX" - car="${tmp%% *}" - tmp="$BUILD_CXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - BUILD_CXX="$car ${cdr% *}" - else - BUILD_CXX="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CXX" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CXX, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of BUILD_CXX, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of BUILD_CXX" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CXX" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving BUILD_CXX (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving BUILD_CXX (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_CXX" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + BUILD_CXX="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BUILD_CXX to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting BUILD_CXX to \"$new_complete\"" >&6;} + fi # Extract the first word of "ld", so it can be a program name with args. set dummy ld; ac_word=$2 @@ -10878,47 +17089,245 @@ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$BUILD_LD" - car="${tmp%% *}" - tmp="$BUILD_LD EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - BUILD_LD="$car ${cdr% *}" - else - BUILD_LD="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_LD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_LD" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_LD, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of BUILD_LD, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of BUILD_LD" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_LD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_LD" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$BUILD_LD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving BUILD_LD (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving BUILD_LD (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of BUILD_LD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of BUILD_LD" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + BUILD_LD="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting BUILD_LD to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting BUILD_LD to \"$new_complete\"" >&6;} + fi fi @@ -11102,16 +17511,874 @@ PATH=$TOOLS_DIR:$PATH fi + +### Locate C compiler (CC) + # gcc is almost always present, but on Windows we # prefer cl.exe and on Solaris we prefer CC. # Thus test for them in this order. +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Do not probe for cc on MacOSX. + COMPILER_CHECK_LIST="cl gcc" +else + COMPILER_CHECK_LIST="cl cc gcc" +fi + + + COMPILER_NAME=C + + # Do a first initial attempt at searching the list of compiler names. + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + for ac_prog in $COMPILER_CHECK_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_POTENTIAL_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $POTENTIAL_CC in + [\\/]* | ?:[\\/]*) + ac_cv_path_POTENTIAL_CC="$POTENTIAL_CC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_POTENTIAL_CC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POTENTIAL_CC=$ac_cv_path_POTENTIAL_CC +if test -n "$POTENTIAL_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POTENTIAL_CC" >&5 +$as_echo "$POTENTIAL_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$POTENTIAL_CC" && break +done + + CC=$POTENTIAL_CC + + if test "x$$CC" = x; then + + # Print a helpful message on how to acquire the necessary build dependency. + # devkit is the help tag: freetyp2, cups, pulse, alsa etc + MISSING_DEPENDENCY=devkit + PKGHANDLER_COMMAND= + + case $PKGHANDLER in + apt-get) + apt_help $MISSING_DEPENDENCY ;; + yum) + yum_help $MISSING_DEPENDENCY ;; + port) + port_help $MISSING_DEPENDENCY ;; + pkgutil) + pkgutil_help $MISSING_DEPENDENCY ;; + pkgadd) + pkgadd_help $MISSING_DEPENDENCY ;; + * ) + break ;; + esac + + if test "x$PKGHANDLER_COMMAND" != x; then + HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." + fi + + as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of CC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of CC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving CC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving CC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CC" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + CC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting CC to \"$new_complete\"" >&6;} + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CC" >&5 +$as_echo_n "checking resolved symbolic links for CC... " >&6; } + TEST_COMPILER="$CC" + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + TEST_COMPILER=`$READLINK -f $TEST_COMPILER` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $TEST_COMPILER` + sym_link_file=`$BASENAME $TEST_COMPILER` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + TEST_COMPILER=$sym_link_dir/$sym_link_file + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 +$as_echo "$TEST_COMPILER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CC is disguised ccache" >&5 +$as_echo_n "checking if CC is disguised ccache... " >&6; } + + COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"` + if test "x$COMPILER_BASENAME" = "xccache"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, trying to find proper $COMPILER_NAME compiler" >&5 +$as_echo "yes, trying to find proper $COMPILER_NAME compiler" >&6; } + # We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache. + # We want to control ccache invocation ourselves, so ignore this cc and try + # searching again. + + # Remove the path to the fake ccache cc from the PATH + RETRY_COMPILER_SAVED_PATH="$PATH" + COMPILER_DIRNAME=`$DIRNAME $CC` + PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`" + + # Try again looking for our compiler + if test -n "$ac_tool_prefix"; then + for ac_prog in $COMPILER_CHECK_LIST + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PROPER_COMPILER_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PROPER_COMPILER_CC"; then + ac_cv_prog_PROPER_COMPILER_CC="$PROPER_COMPILER_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PROPER_COMPILER_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PROPER_COMPILER_CC=$ac_cv_prog_PROPER_COMPILER_CC +if test -n "$PROPER_COMPILER_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROPER_COMPILER_CC" >&5 +$as_echo "$PROPER_COMPILER_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PROPER_COMPILER_CC" && break + done +fi +if test -z "$PROPER_COMPILER_CC"; then + ac_ct_PROPER_COMPILER_CC=$PROPER_COMPILER_CC + for ac_prog in $COMPILER_CHECK_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_PROPER_COMPILER_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_PROPER_COMPILER_CC"; then + ac_cv_prog_ac_ct_PROPER_COMPILER_CC="$ac_ct_PROPER_COMPILER_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_PROPER_COMPILER_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_PROPER_COMPILER_CC=$ac_cv_prog_ac_ct_PROPER_COMPILER_CC +if test -n "$ac_ct_PROPER_COMPILER_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PROPER_COMPILER_CC" >&5 +$as_echo "$ac_ct_PROPER_COMPILER_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_PROPER_COMPILER_CC" && break +done + + if test "x$ac_ct_PROPER_COMPILER_CC" = x; then + PROPER_COMPILER_CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PROPER_COMPILER_CC=$ac_ct_PROPER_COMPILER_CC + fi +fi + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving PROPER_COMPILER_CC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving PROPER_COMPILER_CC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CC" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + PROPER_COMPILER_CC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting PROPER_COMPILER_CC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting PROPER_COMPILER_CC to \"$new_complete\"" >&6;} + fi + + PATH="$RETRY_COMPILER_SAVED_PATH" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for resolved symbolic links for CC" >&5 +$as_echo_n "checking for resolved symbolic links for CC... " >&6; } + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + PROPER_COMPILER_CC=`$READLINK -f $PROPER_COMPILER_CC` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $PROPER_COMPILER_CC` + sym_link_file=`$BASENAME $PROPER_COMPILER_CC` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + PROPER_COMPILER_CC=$sym_link_dir/$sym_link_file + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROPER_COMPILER_CC" >&5 +$as_echo "$PROPER_COMPILER_CC" >&6; } + CC="$PROPER_COMPILER_CC" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, keeping CC" >&5 +$as_echo "no, keeping CC" >&6; } + CC="$TEST_COMPILER" + fi + + COMPILER=$CC + COMPILER_NAME=$COMPILER_NAME + + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + # Make sure we use the Sun Studio compiler and not gcc on Solaris, which won't work + COMPILER_VERSION_TEST=`$COMPILER -V 2>&1 | $HEAD -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + if test $? -ne 0; then + GCC_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + + { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler." >&5 +$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with -V was: \"$COMPILER_VERSION_TEST\" and with --version: \"$GCC_VERSION_TEST\"" >&5 +$as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_TEST\" and with --version: \"$GCC_VERSION_TEST\"" >&6;} + as_fn_error $? "Sun Studio compiler is required. Try setting --with-tools-dir." "$LINENO" 5 + else + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/p"` + COMPILER_VENDOR="Sun Studio" + fi + elif test "x$OPENJDK_TARGET_OS" = xwindows; then + # First line typically looks something like: + # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 + COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1` + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \([1-9][0-9.]*\) .*/\1/p"` + COMPILER_VENDOR="Microsoft CL.EXE" + COMPILER_CPU_TEST=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* for \(.*\)$/\1/p"` + if test "x$OPENJDK_TARGET_CPU" = "xx86"; then + if test "x$COMPILER_CPU_TEST" != "x80x86"; then + as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"80x86\"." "$LINENO" 5 + fi + elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then + if test "x$COMPILER_CPU_TEST" != "xx64"; then + as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"x64\"." "$LINENO" 5 + fi + fi + else + COMPILER_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + # Check that this is likely to be GCC. + $COMPILER --version 2>&1 | $GREP "Free Software Foundation" > /dev/null + if test $? -ne 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler." >&5 +$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$COMPILER_VERSION_TEST\"" >&5 +$as_echo "$as_me: The result from running with --version was: \"$COMPILER_VERSION_TEST\"" >&6;} + as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5 + fi + + # First line typically looks something like: + # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \([1-9][0-9.]*\)/\1/p"` + COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) [1-9][0-9.]*/\1/p"` + fi + # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) + CC_VERSION="$COMPILER_VERSION" + # This sets CC_VENDOR or CXX_VENDOR. (This comment is a grep marker) + CC_VENDOR="$COMPILER_VENDOR" + + { $as_echo "$as_me:${as_lineno-$LINENO}: Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)" >&5 +$as_echo "$as_me: Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)" >&6;} + + +# Now that we have resolved CC ourself, let autoconf have it's go at it ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then - for ac_prog in cl cc gcc + for ac_prog in $CC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 @@ -11155,7 +18422,7 @@ fi if test -z "$CC"; then ac_ct_CC=$CC - for ac_prog in cl cc gcc + for ac_prog in $CC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -11703,7 +18970,69 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test "x$CC" = x; then + +### Locate C++ compiler (CXX) + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Do not probe for CC on MacOSX. + COMPILER_CHECK_LIST="cl g++" +else + COMPILER_CHECK_LIST="cl CC g++" +fi + + COMPILER_NAME=C++ + + # Do a first initial attempt at searching the list of compiler names. + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + for ac_prog in $COMPILER_CHECK_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_POTENTIAL_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $POTENTIAL_CXX in + [\\/]* | ?:[\\/]*) + ac_cv_path_POTENTIAL_CXX="$POTENTIAL_CXX" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_POTENTIAL_CXX="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +POTENTIAL_CXX=$ac_cv_path_POTENTIAL_CXX +if test -n "$POTENTIAL_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $POTENTIAL_CXX" >&5 +$as_echo "$POTENTIAL_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$POTENTIAL_CXX" && break +done + + CXX=$POTENTIAL_CXX + + if test "x$$CXX" = x; then # Print a helpful message on how to acquire the necessary build dependency. # devkit is the help tag: freetyp2, cups, pulse, alsa etc @@ -11729,56 +19058,775 @@ HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." fi - as_fn_error $? "Could not find a compiler. $HELP_MSG" "$LINENO" 5 -fi -if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CC" - car="${tmp%% *}" - tmp="$CC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CC="$car ${cdr% *}" - else - CC="$car" - fi - - + as_fn_error $? "Could not find a $COMPILER_NAME compiler. $HELP_MSG" "$LINENO" 5 + fi + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXX" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXX, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of CXX, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of CXX" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXX" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving CXX (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving CXX (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXX" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + CXX="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CXX to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting CXX to \"$new_complete\"" >&6;} + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking resolved symbolic links for CXX" >&5 +$as_echo_n "checking resolved symbolic links for CXX... " >&6; } + TEST_COMPILER="$CXX" + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + TEST_COMPILER=`$READLINK -f $TEST_COMPILER` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $TEST_COMPILER` + sym_link_file=`$BASENAME $TEST_COMPILER` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + TEST_COMPILER=$sym_link_dir/$sym_link_file + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TEST_COMPILER" >&5 +$as_echo "$TEST_COMPILER" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if CXX is disguised ccache" >&5 +$as_echo_n "checking if CXX is disguised ccache... " >&6; } + + COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"` + if test "x$COMPILER_BASENAME" = "xccache"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, trying to find proper $COMPILER_NAME compiler" >&5 +$as_echo "yes, trying to find proper $COMPILER_NAME compiler" >&6; } + # We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache. + # We want to control ccache invocation ourselves, so ignore this cc and try + # searching again. + + # Remove the path to the fake ccache cc from the PATH + RETRY_COMPILER_SAVED_PATH="$PATH" + COMPILER_DIRNAME=`$DIRNAME $CXX` + PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`" + + # Try again looking for our compiler + if test -n "$ac_tool_prefix"; then + for ac_prog in $COMPILER_CHECK_LIST + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PROPER_COMPILER_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PROPER_COMPILER_CXX"; then + ac_cv_prog_PROPER_COMPILER_CXX="$PROPER_COMPILER_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PROPER_COMPILER_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PROPER_COMPILER_CXX=$ac_cv_prog_PROPER_COMPILER_CXX +if test -n "$PROPER_COMPILER_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROPER_COMPILER_CXX" >&5 +$as_echo "$PROPER_COMPILER_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PROPER_COMPILER_CXX" && break + done +fi +if test -z "$PROPER_COMPILER_CXX"; then + ac_ct_PROPER_COMPILER_CXX=$PROPER_COMPILER_CXX + for ac_prog in $COMPILER_CHECK_LIST +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_PROPER_COMPILER_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_PROPER_COMPILER_CXX"; then + ac_cv_prog_ac_ct_PROPER_COMPILER_CXX="$ac_ct_PROPER_COMPILER_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_PROPER_COMPILER_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_PROPER_COMPILER_CXX=$ac_cv_prog_ac_ct_PROPER_COMPILER_CXX +if test -n "$ac_ct_PROPER_COMPILER_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_PROPER_COMPILER_CXX" >&5 +$as_echo "$ac_ct_PROPER_COMPILER_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_PROPER_COMPILER_CXX" && break +done + + if test "x$ac_ct_PROPER_COMPILER_CXX" = x; then + PROPER_COMPILER_CXX="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PROPER_COMPILER_CXX=$ac_ct_PROPER_COMPILER_CXX + fi +fi + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CXX" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CXX, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CXX, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CXX" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CXX" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$PROPER_COMPILER_CXX" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving PROPER_COMPILER_CXX (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving PROPER_COMPILER_CXX (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of PROPER_COMPILER_CXX, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of PROPER_COMPILER_CXX" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + PROPER_COMPILER_CXX="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting PROPER_COMPILER_CXX to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting PROPER_COMPILER_CXX to \"$new_complete\"" >&6;} + fi + + PATH="$RETRY_COMPILER_SAVED_PATH" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for resolved symbolic links for CXX" >&5 +$as_echo_n "checking for resolved symbolic links for CXX... " >&6; } + + if test "x$OPENJDK_BUILD_OS" != xwindows; then + # Follow a chain of symbolic links. Use readlink + # where it exists, else fall back to horribly + # complicated shell code. + if test "x$READLINK_TESTED" != yes; then + # On MacOSX there is a readlink tool with a different + # purpose than the GNU readlink tool. Check the found readlink. + ISGNU=`$READLINK --help 2>&1 | $GREP GNU` + if test "x$ISGNU" = x; then + # A readlink that we do not know how to use. + # Are there other non-GNU readlinks out there? + READLINK_TESTED=yes + READLINK= + fi + fi + + if test "x$READLINK" != x; then + PROPER_COMPILER_CXX=`$READLINK -f $PROPER_COMPILER_CXX` + else + STARTDIR=$PWD + COUNTER=0 + sym_link_dir=`$DIRNAME $PROPER_COMPILER_CXX` + sym_link_file=`$BASENAME $PROPER_COMPILER_CXX` + while test $COUNTER -lt 20; do + ISLINK=`$LS -l $sym_link_dir/$sym_link_file | $GREP '\->' | $SED -e 's/.*-> \(.*\)/\1/'` + if test "x$ISLINK" == x; then + # This is not a symbolic link! We are done! + break + fi + # The link might be relative! We have to use cd to travel safely. + cd $sym_link_dir + # ... and we must get the to the absolute path, not one using symbolic links. + cd `pwd -P` + cd `$DIRNAME $ISLINK` + sym_link_dir=`$THEPWDCMD` + sym_link_file=`$BASENAME $ISLINK` + let COUNTER=COUNTER+1 + done + cd $STARTDIR + PROPER_COMPILER_CXX=$sym_link_dir/$sym_link_file + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROPER_COMPILER_CXX" >&5 +$as_echo "$PROPER_COMPILER_CXX" >&6; } + CXX="$PROPER_COMPILER_CXX" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, keeping CXX" >&5 +$as_echo "no, keeping CXX" >&6; } + CXX="$TEST_COMPILER" + fi + + COMPILER=$CXX + COMPILER_NAME=$COMPILER_NAME + + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + # Make sure we use the Sun Studio compiler and not gcc on Solaris, which won't work + COMPILER_VERSION_TEST=`$COMPILER -V 2>&1 | $HEAD -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + if test $? -ne 0; then + GCC_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + + { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler." >&5 +$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with -V was: \"$COMPILER_VERSION_TEST\" and with --version: \"$GCC_VERSION_TEST\"" >&5 +$as_echo "$as_me: The result from running with -V was: \"$COMPILER_VERSION_TEST\" and with --version: \"$GCC_VERSION_TEST\"" >&6;} + as_fn_error $? "Sun Studio compiler is required. Try setting --with-tools-dir." "$LINENO" 5 + else + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*[ ,\t]$COMPILER_NAME[ ,\t]\([1-9]\.[0-9][0-9]*\).*/\1/p"` + COMPILER_VENDOR="Sun Studio" + fi + elif test "x$OPENJDK_TARGET_OS" = xwindows; then + # First line typically looks something like: + # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 + COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1` + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \([1-9][0-9.]*\) .*/\1/p"` + COMPILER_VENDOR="Microsoft CL.EXE" + COMPILER_CPU_TEST=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* for \(.*\)$/\1/p"` + if test "x$OPENJDK_TARGET_CPU" = "xx86"; then + if test "x$COMPILER_CPU_TEST" != "x80x86"; then + as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"80x86\"." "$LINENO" 5 + fi + elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then + if test "x$COMPILER_CPU_TEST" != "xx64"; then + as_fn_error $? "Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for \"$COMPILER_CPU_TEST\"; expected \"x64\"." "$LINENO" 5 + fi + fi + else + COMPILER_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + # Check that this is likely to be GCC. + $COMPILER --version 2>&1 | $GREP "Free Software Foundation" > /dev/null + if test $? -ne 0; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler." >&5 +$as_echo "$as_me: The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: The result from running with --version was: \"$COMPILER_VERSION_TEST\"" >&5 +$as_echo "$as_me: The result from running with --version was: \"$COMPILER_VERSION_TEST\"" >&6;} + as_fn_error $? "GCC compiler is required. Try setting --with-tools-dir." "$LINENO" 5 + fi + + # First line typically looks something like: + # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \([1-9][0-9.]*\)/\1/p"` + COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) [1-9][0-9.]*/\1/p"` + fi + # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) + CXX_VERSION="$COMPILER_VERSION" + # This sets CC_VENDOR or CXX_VENDOR. (This comment is a grep marker) + CXX_VENDOR="$COMPILER_VENDOR" + + { $as_echo "$as_me:${as_lineno-$LINENO}: Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)" >&5 +$as_echo "$as_me: Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)" >&6;} + + +# Now that we have resolved CXX ourself, let autoconf have it's go at it ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -11789,7 +19837,7 @@ CXX=$CCC else if test -n "$ac_tool_prefix"; then - for ac_prog in cl CC g++ + for ac_prog in $CXX do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 @@ -11833,7 +19881,7 @@ fi if test -z "$CXX"; then ac_ct_CXX=$CXX - for ac_prog in cl CC g++ + for ac_prog in $CXX do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -12036,85 +20084,10 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu -if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi - - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXX" - car="${tmp%% *}" - tmp="$CXX EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXX="$car ${cdr% *}" - else - CXX="$car" - fi - - -if test "x$CXX" = x || test "x$CC" = x; then - - # Print a helpful message on how to acquire the necessary build dependency. - # devkit is the help tag: freetyp2, cups, pulse, alsa etc - MISSING_DEPENDENCY=devkit - PKGHANDLER_COMMAND= - - case $PKGHANDLER in - apt-get) - apt_help $MISSING_DEPENDENCY ;; - yum) - yum_help $MISSING_DEPENDENCY ;; - port) - port_help $MISSING_DEPENDENCY ;; - pkgutil) - pkgutil_help $MISSING_DEPENDENCY ;; - pkgadd) - pkgadd_help $MISSING_DEPENDENCY ;; - * ) - break ;; - esac - - if test "x$PKGHANDLER_COMMAND" != x; then - HELP_MSG="You might be able to fix this by running '$PKGHANDLER_COMMAND'." - fi - - as_fn_error $? "Could not find the needed compilers! $HELP_MSG " "$LINENO" 5 -fi - -if test "x$OPENJDK_BUILD_OS" != xwindows; then + +### Locate other tools + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then ac_ext=m ac_cpp='$OBJCPP $CPPFLAGS' ac_compile='$OBJC -c $OBJCFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -12367,47 +20340,245 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$OBJC" - car="${tmp%% *}" - tmp="$OBJC EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - OBJC="$car ${cdr% *}" - else - OBJC="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of OBJC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of OBJC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving OBJC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving OBJC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJC" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + OBJC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OBJC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting OBJC to \"$new_complete\"" >&6;} + fi else OBJC= @@ -12431,7 +20602,7 @@ # Linking C++ executables. -if test "x$OPENJDK_BUILD_OS" != xwindows; then +if test "x$OPENJDK_TARGET_OS" != xwindows; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 @@ -12525,59 +20696,263 @@ fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AR" - car="${tmp%% *}" - tmp="$AR EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AR="$car ${cdr% *}" - else - AR="$car" - fi - -fi -if test "x$OPENJDK_BUILD_OS" = xmacosx; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$AR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AR" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AR, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of AR, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of AR" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$AR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AR" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$AR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving AR (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving AR (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AR" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + AR="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting AR to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting AR to \"$new_complete\"" >&6;} + fi + +fi +if test "x$OPENJDK_TARGET_OS" = xmacosx; then ARFLAGS="-r" else ARFLAGS="" fi +# For hotspot, we need these in Windows mixed path; other platforms keep them the same +HOTSPOT_CXX="$CXX" +HOTSPOT_LD="$LD" + + + COMPILER_NAME=gcc COMPILER_TYPE=CC -if test "x$OPENJDK_BUILD_OS" = xwindows; then : +if test "x$OPENJDK_TARGET_OS" = xwindows; then : # For now, assume that we are always compiling using cl.exe. CC_OUT_OPTION=-Fo @@ -12643,25 +21018,245 @@ # Since we must ignore the first found link, WINLD will contain # the full path to the link.exe program. - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINLD" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINLD"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - WINLD="$tmp" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINLD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINLD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINLD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINLD" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINLD, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of WINLD, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of WINLD" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINLD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINLD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINLD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINLD" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINLD" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving WINLD (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving WINLD (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINLD, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINLD, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINLD" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + WINLD="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting WINLD to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting WINLD to \"$new_complete\"" >&6;} + fi printf "Windows linker was found at $WINLD\n" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the found link.exe is actually the Visual Studio linker" >&5 @@ -12735,25 +21330,245 @@ - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$MT" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$MT"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - MT="$tmp" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$MT" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MT, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MT, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MT" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MT, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of MT, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of MT" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$MT" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MT, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MT, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MT" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$MT" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving MT (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving MT (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MT, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MT, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MT" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + MT="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting MT to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting MT to \"$new_complete\"" >&6;} + fi # The resource compiler # Extract the first word of "rc", so it can be a program name with args. @@ -12811,28 +21626,297 @@ - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$RC" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$RC"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - RC="$tmp" - - - RC_FLAGS="-nologo /l 0x409 /r" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$RC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of RC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of RC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of RC" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of RC, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of RC, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of RC" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$RC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of RC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of RC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of RC" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$RC" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving RC (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving RC (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of RC, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of RC, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of RC" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + RC="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting RC to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting RC to \"$new_complete\"" >&6;} + fi + + + # For hotspot, we need these in Windows mixed path, + # so rewrite them all. Need added .exe suffix. + HOTSPOT_CXX="$CXX.exe" + HOTSPOT_LD="$LD.exe" + HOTSPOT_MT="$MT.exe" + HOTSPOT_RC="$RC.exe" + + unix_path="$HOTSPOT_CXX" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + HOTSPOT_CXX="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + HOTSPOT_CXX="$windows_path" + fi + + + unix_path="$HOTSPOT_LD" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + HOTSPOT_LD="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + HOTSPOT_LD="$windows_path" + fi + + + unix_path="$HOTSPOT_MT" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + HOTSPOT_MT="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + HOTSPOT_MT="$windows_path" + fi + + + unix_path="$HOTSPOT_RC" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + windows_path=`$CYGPATH -m "$unix_path"` + HOTSPOT_RC="$windows_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + windows_path=`cmd //c echo $unix_path` + HOTSPOT_RC="$windows_path" + fi + + + + + RC_FLAGS="-nologo -l 0x409 -r" if test "x$VARIANT" = xOPT; then : RC_FLAGS="$RC_FLAGS -d NDEBUG" @@ -12891,25 +21975,245 @@ - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$WINAR" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$WINAR"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - WINAR="$tmp" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINAR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINAR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINAR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINAR" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINAR, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of WINAR, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of WINAR" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINAR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINAR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINAR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINAR" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$WINAR" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving WINAR (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving WINAR (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of WINAR, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of WINAR, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of WINAR" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + WINAR="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting WINAR to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting WINAR to \"$new_complete\"" >&6;} + fi AR="$WINAR" ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" @@ -12952,25 +22256,245 @@ - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$DUMPBIN" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$DUMPBIN"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - DUMPBIN="$tmp" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$DUMPBIN" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of DUMPBIN" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DUMPBIN, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of DUMPBIN, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of DUMPBIN" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$DUMPBIN" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of DUMPBIN" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$DUMPBIN" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving DUMPBIN (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving DUMPBIN (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of DUMPBIN, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of DUMPBIN" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + DUMPBIN="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting DUMPBIN to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting DUMPBIN to \"$new_complete\"" >&6;} + fi COMPILER_TYPE=CL @@ -13118,47 +22642,245 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CPP" - car="${tmp%% *}" - tmp="$CPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CPP="$car ${cdr% *}" - else - CPP="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CPP" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CPP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of CPP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of CPP" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CPP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$CPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving CPP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving CPP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CPP" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + CPP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CPP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting CPP to \"$new_complete\"" >&6;} + fi ac_ext=cpp @@ -13295,47 +23017,245 @@ ac_compiler_gnu=$ac_cv_cxx_compiler_gnu - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$CXXCPP" - car="${tmp%% *}" - tmp="$CXXCPP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - CXXCPP="$car ${cdr% *}" - else - CXXCPP="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXXCPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXXCPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXXCPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXXCPP" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXXCPP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of CXXCPP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of CXXCPP" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXXCPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXXCPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXXCPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXXCPP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$CXXCPP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving CXXCPP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving CXXCPP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of CXXCPP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of CXXCPP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of CXXCPP" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + CXXCPP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting CXXCPP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting CXXCPP to \"$new_complete\"" >&6;} + fi if test "x$COMPILE_TYPE" != "xcross"; then @@ -13359,7 +23279,7 @@ fi # Find the right assembler. -if test "x$OPENJDK_BUILD_OS" = xsolaris; then +if test "x$OPENJDK_TARGET_OS" = xsolaris; then # Extract the first word of "as", so it can be a program name with args. set dummy as; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 @@ -13401,54 +23321,252 @@ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$AS" - car="${tmp%% *}" - tmp="$AS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - AS="$car ${cdr% *}" - else - AS="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$AS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AS" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AS, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of AS, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of AS" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$AS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AS" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$AS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving AS (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving AS (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of AS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of AS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of AS" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + AS="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting AS to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting AS to \"$new_complete\"" >&6;} + fi else AS="$CC -c" fi -if test "x$OPENJDK_BUILD_OS" = xsolaris; then +if test "x$OPENJDK_TARGET_OS" = xsolaris; then for ac_prog in gnm nm do # Extract the first word of "$ac_prog", so it can be a program name with args. @@ -13495,47 +23613,245 @@ done - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving NM (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving NM (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + NM="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting NM to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting NM to \"$new_complete\"" >&6;} + fi # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 @@ -13578,47 +23894,245 @@ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving STRIP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving STRIP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + STRIP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting STRIP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting STRIP to \"$new_complete\"" >&6;} + fi # Extract the first word of "mcs", so it can be a program name with args. set dummy mcs; ac_word=$2 @@ -13661,49 +24175,247 @@ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$MCS" - car="${tmp%% *}" - tmp="$MCS EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - MCS="$car ${cdr% *}" - else - MCS="$car" - fi - -elif test "x$OPENJDK_BUILD_OS" != xwindows; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$MCS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MCS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MCS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MCS" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MCS, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of MCS, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of MCS" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$MCS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MCS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MCS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MCS" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$MCS" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving MCS (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving MCS (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of MCS, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of MCS, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of MCS" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + MCS="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting MCS to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting MCS to \"$new_complete\"" >&6;} + fi + +elif test "x$OPENJDK_TARGET_OS" != xwindows; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nm", so it can be a program name with args. set dummy ${ac_tool_prefix}nm; ac_word=$2 @@ -13797,47 +24509,245 @@ fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$NM" - car="${tmp%% *}" - tmp="$NM EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - NM="$car ${cdr% *}" - else - NM="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$NM" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving NM (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving NM (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of NM, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of NM, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of NM" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + NM="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting NM to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting NM to \"$new_complete\"" >&6;} + fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. @@ -13932,89 +24842,282 @@ fi - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$STRIP" - car="${tmp%% *}" - tmp="$STRIP EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - STRIP="$car ${cdr% *}" - else - STRIP="$car" - fi - -fi - -### -# -# Check for objcopy -# -# but search for gobjcopy first... -# since I on solaris found a broken objcopy...buhh -# -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gobjcopy", so it can be a program name with args. -set dummy ${ac_tool_prefix}gobjcopy; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OBJCOPY+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $OBJCOPY in - [\\/]* | ?:[\\/]*) - ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -OBJCOPY=$ac_cv_path_OBJCOPY + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$STRIP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving STRIP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving STRIP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of STRIP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of STRIP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of STRIP" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + STRIP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting STRIP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting STRIP to \"$new_complete\"" >&6;} + fi + +fi + +# objcopy is used for moving debug symbols to separate files when +# full debug symbols are enabled. +if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then + if test -n "$ac_tool_prefix"; then + for ac_prog in gobjcopy objcopy + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJCOPY"; then + ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJCOPY="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJCOPY=$ac_cv_prog_OBJCOPY if test -n "$OBJCOPY"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 $as_echo "$OBJCOPY" >&6; } @@ -14024,49 +25127,54 @@ fi -fi -if test -z "$ac_cv_path_OBJCOPY"; then - ac_pt_OBJCOPY=$OBJCOPY - # Extract the first word of "gobjcopy", so it can be a program name with args. -set dummy gobjcopy; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_OBJCOPY in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY -if test -n "$ac_pt_OBJCOPY"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 -$as_echo "$ac_pt_OBJCOPY" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_OBJCOPY" = x; then + test -n "$OBJCOPY" && break + done +fi +if test -z "$OBJCOPY"; then + ac_ct_OBJCOPY=$OBJCOPY + for ac_prog in gobjcopy objcopy +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJCOPY"; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY +if test -n "$ac_ct_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5 +$as_echo "$ac_ct_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJCOPY" && break +done + + if test "x$ac_ct_OBJCOPY" = x; then OBJCOPY="" else case $cross_compiling:$ac_tool_warned in @@ -14075,98 +25183,342 @@ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - OBJCOPY=$ac_pt_OBJCOPY - fi -else - OBJCOPY="$ac_cv_path_OBJCOPY" -fi - -if test "x$OBJCOPY" = x; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. -set dummy ${ac_tool_prefix}objcopy; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_OBJCOPY+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $OBJCOPY in - [\\/]* | ?:[\\/]*) - ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -OBJCOPY=$ac_cv_path_OBJCOPY -if test -n "$OBJCOPY"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 -$as_echo "$OBJCOPY" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_OBJCOPY"; then - ac_pt_OBJCOPY=$OBJCOPY - # Extract the first word of "objcopy", so it can be a program name with args. -set dummy objcopy; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if test "${ac_cv_path_ac_pt_OBJCOPY+set}" = set; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_OBJCOPY in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_OBJCOPY="$ac_pt_OBJCOPY" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then - ac_cv_path_ac_pt_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_OBJCOPY=$ac_cv_path_ac_pt_OBJCOPY -if test -n "$ac_pt_OBJCOPY"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_OBJCOPY" >&5 -$as_echo "$ac_pt_OBJCOPY" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_OBJCOPY" = x; then - OBJCOPY="" + OBJCOPY=$ac_ct_OBJCOPY + fi +fi + + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJCOPY" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJCOPY" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJCOPY, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of OBJCOPY, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of OBJCOPY" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJCOPY" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJCOPY" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJCOPY" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving OBJCOPY (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving OBJCOPY (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJCOPY, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJCOPY" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + OBJCOPY="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OBJCOPY to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting OBJCOPY to \"$new_complete\"" >&6;} + fi + +fi + +if test -n "$ac_tool_prefix"; then + for ac_prog in gobjdump objdump + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$OBJDUMP" && break + done +fi +if test -z "$OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + for ac_prog in gobjdump objdump +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_OBJDUMP" && break +done + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="" else case $cross_compiling:$ac_tool_warned in yes:) @@ -14174,11 +25526,252 @@ $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac - OBJCOPY=$ac_pt_OBJCOPY - fi -else - OBJCOPY="$ac_cv_path_OBJCOPY" -fi + OBJDUMP=$ac_ct_OBJDUMP + fi +fi + +if test "x$OBJDUMP" != x; then + # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE bails if argument is missing. + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJDUMP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJDUMP" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJDUMP, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of OBJDUMP, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of OBJDUMP" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJDUMP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJDUMP" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$OBJDUMP" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving OBJDUMP (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving OBJDUMP (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of OBJDUMP, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of OBJDUMP" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + OBJDUMP="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting OBJDUMP to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting OBJDUMP to \"$new_complete\"" >&6;} + fi fi @@ -14224,47 +25817,245 @@ - # Translate "gcc -E" into "`which gcc` -E" ie - # extract the full path to the binary and at the - # same time maintain any arguments passed to it. - # The command MUST exist in the path, or else! - tmp="$LIPO" - car="${tmp%% *}" - tmp="$LIPO EOL" - cdr="${tmp#* }" - # On windows we want paths without spaces. - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - - # Translate long cygdrive or C:\sdfsf path - # into a short mixed mode path that has no - # spaces in it. - tmp="$car" - - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - tmp=`$CYGPATH -u "$car"` - tmp=`which "$tmp"` - # If file exists with .exe appended, that's the real filename - # and cygpath needs that to convert to short style path. - if test -f "${tmp}.exe"; then - tmp="${tmp}.exe" - elif test -f "${tmp}.cmd"; then - tmp="${tmp}.cmd" - fi - # Convert to C:/ mixed style path without spaces. - tmp=`$CYGPATH -s -m "$tmp"` - fi - car="$tmp" - - else - # "which" is not portable, but is used here - # because we know that the command exists! - car=`which $car` - fi - if test "x$cdr" != xEOL; then - LIPO="$car ${cdr% *}" - else - LIPO="$car" - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$LIPO" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path=`$CYGPATH -u "$path"` + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path=`$CYGPATH -u "$path"` + new_path=`$WHICH "$new_path" 2> /dev/null` + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of LIPO, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of LIPO, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of LIPO" "$LINENO" 5 + fi + fi + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + # Short path failed, file does not exist as specified. + # Try adding .exe or .cmd + if test -f "${new_path}.exe"; then + input_to_shortpath="${new_path}.exe" + elif test -f "${new_path}.cmd"; then + input_to_shortpath="${new_path}.cmd" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of LIPO, which resolves as \"$new_path\", is invalid." >&5 +$as_echo "$as_me: The path of LIPO, which resolves as \"$new_path\", is invalid." >&6;} + { $as_echo "$as_me:${as_lineno-$LINENO}: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&5 +$as_echo "$as_me: Neither \"$new_path\" nor \"$new_path.exe/cmd\" can be found" >&6;} + as_fn_error $? "Cannot locate the the path of LIPO" "$LINENO" 5 + fi + else + input_to_shortpath="$new_path" + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + new_path="$input_to_shortpath" + + input_path="$input_to_shortpath" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $input_to_shortpath | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + # First separate the path from the arguments. This will split at the first + # space. + complete="$LIPO" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + # Input might be given as Windows format, start by converting to + # unix format. + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + # Now try to locate executable using which + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # Oops. Which didn't find the executable. + # The splitting of arguments from the executable at a space might have been incorrect, + # since paths with space are more likely in Windows. Give it another try with the whole + # argument. + path="$complete" + arguments="EOL" + new_path="$path" + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + + new_path=`$WHICH "$new_path" 2> /dev/null` + + if test "x$new_path" = x; then + # It's still not found. Now this is an unrecoverable error. + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of LIPO, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of LIPO, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: You might be mixing spaces in the path and extra arguments, which is not allowed." >&5 +$as_echo "$as_me: You might be mixing spaces in the path and extra arguments, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of LIPO" "$LINENO" 5 + fi + fi + + # Now new_path has a complete unix path to the binary + if test "x`$ECHO $new_path | $GREP ^/bin/`" != x; then + # Keep paths in /bin as-is, but remove trailing .exe if any + new_path="${new_path/%.exe/}" + # Do not save /bin paths to all_fixpath_prefixes! + else + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $new_path` + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + # Output is in $new_path + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + # remove trailing .exe if any + new_path="${new_path/%.exe/}" + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + fi + + else + # We're on a posix platform. Hooray! :) + # First separate the path from the arguments. This will split at the first + # space. + complete="$LIPO" + path="${complete%% *}" + tmp="$complete EOL" + arguments="${tmp#* }" + + new_path=`$WHICH $path 2> /dev/null` + if test "x$new_path" = x; then + is_absolute_path=`$ECHO "$path" | $GREP ^/` + if test "x$is_absolute_path" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: Resolving LIPO (as $path) with 'which' failed, using $path directly." >&5 +$as_echo "$as_me: Resolving LIPO (as $path) with 'which' failed, using $path directly." >&6;} + new_path="$path" + else + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of LIPO, which resolves as \"$complete\", is not found." >&5 +$as_echo "$as_me: The path of LIPO, which resolves as \"$complete\", is not found." >&6;} + has_space=`$ECHO "$complete" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: This might be caused by spaces in the path, which is not allowed." >&5 +$as_echo "$as_me: This might be caused by spaces in the path, which is not allowed." >&6;} + fi + as_fn_error $? "Cannot locate the the path of LIPO" "$LINENO" 5 + fi + fi + fi + + # Now join together the path and the arguments once again + if test "x$arguments" != xEOL; then + new_complete="$new_path ${arguments% *}" + else + new_complete="$new_path" + fi + + if test "x$complete" != "x$new_complete"; then + LIPO="$new_complete" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting LIPO to \"$new_complete\"" >&5 +$as_echo "$as_me: Rewriting LIPO to \"$new_complete\"" >&6;} + fi fi @@ -14800,7 +26591,7 @@ POST_STRIP_CMD="$STRIP -g" # Linking is different on MacOSX - if test "x$OPENJDK_BUILD_OS" = xmacosx; then + if test "x$OPENJDK_TARGET_OS" = xmacosx; then # Might change in the future to clang. COMPILER_NAME=gcc SHARED_LIBRARY='lib$1.dylib' @@ -14814,7 +26605,7 @@ POST_STRIP_CMD="$STRIP -S" fi else - if test "x$OPENJDK_BUILD_OS" = xsolaris; then + if test "x$OPENJDK_TARGET_OS" = xsolaris; then # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler COMPILER_NAME=ossc PICFLAG="-KPIC" @@ -14838,7 +26629,7 @@ POST_STRIP_CMD="$STRIP -x" POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi - if test "x$OPENJDK_BUILD_OS" = xwindows; then + if test "x$OPENJDK_TARGET_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler COMPILER_NAME=cl PICFLAG="" @@ -14986,6 +26777,11 @@ # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now #CC_HIGHEST="$CC_HIGHEST -xlibmopt" + if test "x$OPENJDK_TARGET_CPU" = xsparc; then + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + fi + case $OPENJDK_TARGET_CPU_ARCH in x86) C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xregs=no%frameptr" @@ -15002,8 +26798,6 @@ fi ;; sparc) - CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" - CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" @@ -15132,7 +26926,7 @@ CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" case $OPENJDK_TARGET_CPU_ARCH in x86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -Di386" + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" ;; esac @@ -15232,7 +27026,7 @@ # libraries will link to whatever is in memory. Yuck. # # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then +if test "x$COMPILER_NAME" = xcl; then LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" if test "x$OPENJDK_TARGET_CPU" = xx86; then LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" @@ -15248,19 +27042,23 @@ fi LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" - fi - fi - + if test "x$COMPILER_NAME" = xgcc; then + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both " + fi + if test "x$OPENJDK_TARGET_OS" = xlinux; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" = "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi + fi + fi LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server \ -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client \ @@ -15307,53 +27105,6 @@ -# After we have toolchain, we can compile the uncygdrive helper - -# When using cygwin, we need a wrapper binary that renames -# /cygdrive/c/ arguments into c:/ arguments and peeks into -# @files and rewrites these too! This wrapper binary is -# called uncygdrive.exe. -UNCYGDRIVE= -if test "x$OPENJDK_BUILD_OS" = xwindows; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive can be created" >&5 -$as_echo_n "checking if uncygdrive can be created... " >&6; } - UNCYGDRIVE_SRC=`$CYGPATH -m $SRC_ROOT/common/src/uncygdrive.c` - rm -f $OUTPUT_ROOT/uncygdrive* - UNCYGDRIVE=`$CYGPATH -m $OUTPUT_ROOT/uncygdrive.exe` - cd $OUTPUT_ROOT - $CC $UNCYGDRIVE_SRC /Fe$UNCYGDRIVE > $OUTPUT_ROOT/uncygdrive1.log 2>&1 - cd $CURDIR - - if test ! -x $OUTPUT_ROOT/uncygdrive.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive1.log - as_fn_error $? "Could not create $OUTPUT_ROOT/uncygdrive.exe" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNCYGDRIVE" >&5 -$as_echo "$UNCYGDRIVE" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if uncygdrive.exe works" >&5 -$as_echo_n "checking if uncygdrive.exe works... " >&6; } - cd $OUTPUT_ROOT - $UNCYGDRIVE $CC $SRC_ROOT/common/src/uncygdrive.c /Fe$OUTPUT_ROOT/uncygdrive2.exe > $OUTPUT_ROOT/uncygdrive2.log 2>&1 - cd $CURDIR - if test ! -x $OUTPUT_ROOT/uncygdrive2.exe; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - cat $OUTPUT_ROOT/uncygdrive2.log - as_fn_error $? "Uncygdrive did not work!" "$LINENO" 5 - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - rm -f $OUTPUT_ROOT/uncygdrive?.??? $OUTPUT_ROOT/uncygdrive.obj - # The path to uncygdrive to use should be Unix-style - UNCYGDRIVE="$OUTPUT_ROOT/uncygdrive.exe" -fi - - - - - # Setup debug symbols (need objcopy from the toolchain for that) # @@ -15384,7 +27135,7 @@ if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then # Default is on if objcopy is found, otherwise off - if test "x$OBJCOPY" != x; then + if test "x$OBJCOPY" != x || test "x$OPENJDK_TARGET_OS" = xwindows; then ENABLE_DEBUG_SYMBOLS=yes else ENABLE_DEBUG_SYMBOLS=no @@ -15536,7 +27287,6 @@ - ############################################################################### # # Check for X Windows @@ -16308,10 +28058,15 @@ OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" + +# Need to include Xlib.h and Xutil.h to avoid "present but cannot be compiled" warnings on Solaris 10 for ac_header in X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" " # include + # include + +" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 @@ -16323,6 +28078,7 @@ done + CFLAGS="$OLD_CFLAGS" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' @@ -16382,28 +28138,20 @@ fi -# Check whether --with-cups-lib was given. -if test "${with_cups_lib+set}" = set; then : - withval=$with_cups_lib; -fi - - if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cups not used, so --with-cups is ignored" >&5 $as_echo "$as_me: WARNING: cups not used, so --with-cups is ignored" >&2;} fi CUPS_CFLAGS= - CUPS_LIBS= else CUPS_FOUND=no - if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno; then as_fn_error $? "It is not possible to disable the use of cups. Remove the --without-cups option." "$LINENO" 5 fi if test "x${with_cups}" != x; then - CUPS_LIBS="-L${with_cups}/lib -lcups" CUPS_CFLAGS="-I${with_cups}/include" CUPS_FOUND=yes fi @@ -16411,10 +28159,6 @@ CUPS_CFLAGS="-I${with_cups_include}" CUPS_FOUND=yes fi - if test "x${with_cups_lib}" != x; then - CUPS_LIBS="-L${with_cups_lib} -lcups" - CUPS_FOUND=yes - fi if test "x$CUPS_FOUND" = xno; then @@ -16572,7 +28316,6 @@ _ACEOF CUPS_FOUND=yes CUPS_CFLAGS= - CUPS_LIBS="-lcups" DEFAULT_CUPS=yes fi @@ -16582,18 +28325,16 @@ if test "x$CUPS_FOUND" = xno; then # Getting nervous now? Lets poke around for standard Solaris third-party # package installation locations. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers and libs" >&5 -$as_echo_n "checking for cups headers and libs... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cups headers" >&5 +$as_echo_n "checking for cups headers... " >&6; } if test -s /opt/sfw/cups/include/cups/cups.h; then # An SFW package seems to be installed! CUPS_FOUND=yes CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" elif test -s /opt/csw/include/cups/cups.h; then # A CSW package seems to be installed! CUPS_FOUND=yes CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CUPS_FOUND" >&5 $as_echo "$CUPS_FOUND" >&6; } @@ -16633,7 +28374,6 @@ - ############################################################################### # # The ubiquitous freetype2 library is used to render fonts. @@ -16661,32 +28401,138 @@ if test "x$with_freetype" != x; then - # Fail with message the path to freetype if var with_freetype contains a path with no spaces in it. - # Unless on Windows, where we can rewrite the path. - HAS_SPACE=`echo "$with_freetype" | grep " "` - if test "x$HAS_SPACE" != x; then - if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # First convert it to DOS-style, short mode (no spaces) - with_freetype=`$CYGPATH -s -m -a "$with_freetype"` - # Now it's case insensitive; let's make it lowercase to improve readability - with_freetype=`$ECHO "$with_freetype" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` - # Now convert it back to Unix-stile (cygpath) - with_freetype=`$CYGPATH -u "$with_freetype"` - else - as_fn_error $? "You cannot have spaces in the path to freetype! \"$with_freetype\"" "$LINENO" 5 - fi - fi + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$with_freetype" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of with_freetype, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of with_freetype, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of with_freetype" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + with_freetype="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting with_freetype to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting with_freetype to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$with_freetype" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + with_freetype="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting with_freetype to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting with_freetype to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$with_freetype" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of with_freetype, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of with_freetype, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of with_freetype, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + FREETYPE2_LIB_PATH="$with_freetype/lib" + if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64 && test -d "$with_freetype/lib/amd64"; then + FREETYPE2_LIBS="-L$with_freetype/lib/amd64 -lfreetype" + FREETYPE2_LIB_PATH="$with_freetype/lib/amd64" + fi if test "x$OPENJDK_TARGET_OS" = xwindows; then FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" fi - FREETYPE2_LIB_PATH="$with_freetype/lib" FREETYPE2_CFLAGS="-I$with_freetype/include" if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" fi - FREETYPE2_FOUND=yes + FREETYPE2_FOUND=yes if test "x$FREETYPE2_FOUND" = xyes; then # Verify that the directories exist if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then @@ -16695,7 +28541,7 @@ # List the contents of the lib. FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` if test "x$FREETYPELIB" = x; then - as_fn_error $? "Could not find libfreetype.se nor freetype.dll in $with_freetype/lib" "$LINENO" 5 + as_fn_error $? "Could not find libfreetype.so nor freetype.dll in $with_freetype/lib" "$LINENO" 5 fi # Check one h-file if ! test -s "$with_freetype/include/ft2build.h"; then @@ -16851,6 +28697,145 @@ USING_SYSTEM_FT_LIB=true fi + if test "x$FREETYPE2_FOUND" = xno && test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPELOCATION="$PROGRAMFILES/GnuWin32" + + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + + # Input might be given as Windows format, start by converting to + # unix format. + path="$FREETYPELOCATION" + new_path=`$CYGPATH -u "$path"` + + # Cygwin tries to hide some aspects of the Windows file system, such that binaries are + # named .exe but called without that suffix. Therefore, "foo" and "foo.exe" are considered + # the same file, most of the time (as in "test -f"). But not when running cygpath -s, then + # "foo.exe" is OK but "foo" is an error. + # + # This test is therefore slightly more accurate than "test -f" to check for file precense. + # It is also a way to make sure we got the proper file name for the real test later on. + test_shortpath=`$CYGPATH -s -m "$new_path" 2> /dev/null` + if test "x$test_shortpath" = x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FREETYPELOCATION, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of FREETYPELOCATION, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Cannot locate the the path of FREETYPELOCATION" "$LINENO" 5 + fi + + # Call helper function which possibly converts this using DOS-style short mode. + # If so, the updated path is stored in $new_path. + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-._/a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + shortmode_path=`$CYGPATH -s -m -a "$input_path"` + path_after_shortmode=`$CYGPATH -u "$shortmode_path"` + if test "x$path_after_shortmode" != "x$input_to_shortpath"; then + # Going to short mode and back again did indeed matter. Since short mode is + # case insensitive, let's make it lowercase to improve readability. + shortmode_path=`$ECHO "$shortmode_path" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + # Now convert it back to Unix-stile (cygpath) + input_path=`$CYGPATH -u "$shortmode_path"` + new_path="$input_path" + fi + fi + + test_cygdrive_prefix=`$ECHO $input_path | $GREP ^/cygdrive/` + if test "x$test_cygdrive_prefix" = x; then + # As a simple fix, exclude /usr/bin since it's not a real path. + if test "x`$ECHO $new_path | $GREP ^/usr/bin/`" = x; then + # The path is in a Cygwin special directory (e.g. /home). We need this converted to + # a path prefixed by /cygdrive for fixpath to work. + new_path="$CYGWIN_ROOT_PATH$input_path" + fi + fi + + + if test "x$path" != "x$new_path"; then + FREETYPELOCATION="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FREETYPELOCATION to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting FREETYPELOCATION to \"$new_path\"" >&6;} + fi + + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + + path="$FREETYPELOCATION" + has_colon=`$ECHO $path | $GREP ^.:` + new_path="$path" + if test "x$has_colon" = x; then + # Not in mixed or Windows style, start by that. + new_path=`cmd //c echo $path` + fi + + + input_path="$new_path" + # Check if we need to convert this using DOS-style short mode. If the path + # contains just simple characters, use it. Otherwise (spaces, weird characters), + # take no chances and rewrite it. + # Note: m4 eats our [], so we need to use [ and ] instead. + has_forbidden_chars=`$ECHO "$input_path" | $GREP [^-_/:a-zA-Z0-9]` + if test "x$has_forbidden_chars" != x; then + # Now convert it to mixed DOS-style, short mode (no spaces, and / instead of \) + new_path=`cmd /c "for %A in (\"$input_path\") do @echo %~sA"|$TR \\\\\\\\ / | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + fi + + + windows_path="$new_path" + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.cygwin"; then + unix_path=`$CYGPATH -u "$windows_path"` + new_path="$unix_path" + elif test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + unix_path=`$ECHO "$windows_path" | $SED -e 's,^\\(.\\):,/\\1,g' -e 's,\\\\,/,g'` + new_path="$unix_path" + fi + + if test "x$path" != "x$new_path"; then + FREETYPELOCATION="$new_path" + { $as_echo "$as_me:${as_lineno-$LINENO}: Rewriting FREETYPELOCATION to \"$new_path\"" >&5 +$as_echo "$as_me: Rewriting FREETYPELOCATION to \"$new_path\"" >&6;} + fi + + # Save the first 10 bytes of this path to the storage, so fixpath can work. + all_fixpath_prefixes=("${all_fixpath_prefixes[@]}" "${new_path:0:10}") + + else + # We're on a posix platform. Hooray! :) + path="$FREETYPELOCATION" + + if test ! -f "$path" && test ! -d "$path"; then + as_fn_error $? "The path of FREETYPELOCATION, which resolves as \"$path\", is not found." "$LINENO" 5 + fi + + has_space=`$ECHO "$path" | $GREP " "` + if test "x$has_space" != x; then + { $as_echo "$as_me:${as_lineno-$LINENO}: The path of FREETYPELOCATION, which resolves as \"$path\", is invalid." >&5 +$as_echo "$as_me: The path of FREETYPELOCATION, which resolves as \"$path\", is invalid." >&6;} + as_fn_error $? "Spaces are not allowed in this path." "$LINENO" 5 + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard windows locations" >&5 +$as_echo_n "checking for freetype in some standard windows locations... " >&6; } + if test -s "$FREETYPELOCATION/include/ft2build.h" && test -d "$FREETYPELOCATION/include/freetype2/freetype"; then + FREETYPE2_CFLAGS="-I$FREETYPELOCATION/include/freetype2 -I$FREETYPELOCATION/include" + FREETYPE2_LIBS="$FREETYPELOCATION/lib/freetype.lib" + FREETYPE2_LIB_PATH="$FREETYPELOCATION/lib" + if ! test -s "$FREETYPE2_LIBS"; then + as_fn_error $? "Could not find $FREETYPE2_LIBS" "$LINENO" 5 + fi + if ! test -s "$FREETYPE2_LIB_PATH/freetype.dll"; then + as_fn_error $? "Could not find $FREETYPE2_LIB_PATH/freetype.dll" "$LINENO" 5 + fi + USING_SYSTEM_FT_LIB=true + FREETYPE2_FOUND=yes + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FREETYPE2_FOUND" >&5 +$as_echo "$FREETYPE2_FOUND" >&6; } + fi if test "x$FREETYPE2_FOUND" = xno; then pkg_failed=no @@ -16919,7 +28904,13 @@ $as_echo "yes" >&6; } FREETYPE2_FOUND=yes fi + # On solaris, pkg_check adds -lz to freetype libs, which isn't necessary for us. + FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's/-lz//g'` USING_SYSTEM_FT_LIB=true + # 64-bit libs for Solaris x86 are installed in the amd64 subdirectory, change lib to lib/amd64 + if test "x$FREETYPE2_FOUND" = xyes && test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's?/lib?/lib/amd64?g'` + fi fi if test "x$FREETYPE2_FOUND" = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype in some standard locations" >&5 @@ -16993,6 +28984,60 @@ as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 fi + + if test "x$OPENJDK_TARGET_OS" != xwindows; then + # AC_CHECK_LIB does not support use of cl.exe + PREV_LDFLAGS="$LDFLAGS" + LDFLAGS="$FREETYPE2_LIBS" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FT_Init_FreeType in -lfreetype" >&5 +$as_echo_n "checking for FT_Init_FreeType in -lfreetype... " >&6; } +if test "${ac_cv_lib_freetype_FT_Init_FreeType+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfreetype $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char FT_Init_FreeType (); +int +main () +{ +return FT_Init_FreeType (); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + ac_cv_lib_freetype_FT_Init_FreeType=yes +else + ac_cv_lib_freetype_FT_Init_FreeType=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_freetype_FT_Init_FreeType" >&5 +$as_echo "$ac_cv_lib_freetype_FT_Init_FreeType" >&6; } +if test "x$ac_cv_lib_freetype_FT_Init_FreeType" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBFREETYPE 1 +_ACEOF + + LIBS="-lfreetype $LIBS" + +else + as_fn_error $? "Could not find freetype2! $HELP_MSG " "$LINENO" 5 +fi + + LDFLAGS="$PREV_LDFLAGS" + fi fi @@ -17795,16 +29840,19 @@ if test "x$enable_static_link_stdc__" = xyes; then LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" LDCXX="$CC" + STATIC_CXX_SETTING="STATIC_CXX=true" { $as_echo "$as_me:${as_lineno-$LINENO}: result: static" >&5 $as_echo "static" >&6; } else LIBCXX="$LIBCXX -lstdc++" LDCXX="$CXX" + STATIC_CXX_SETTING="STATIC_CXX=false" { $as_echo "$as_me:${as_lineno-$LINENO}: result: dynamic" >&5 $as_echo "dynamic" >&6; } fi fi + # libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then LIBCXX="/usr/lib${OPENJDK_TARGET_CPU_ISADIR}/libCrun.so.1" @@ -17819,6 +29867,66 @@ +# After we have toolchain and the paths to all libraries (needed by msys), we can compile the fixpath helper + +# When using cygwin or msys, we need a wrapper binary that renames +# /cygdrive/c/ arguments into c:/ arguments and peeks into +# @files and rewrites these too! This wrapper binary is +# called fixpath. +FIXPATH= +if test "x$OPENJDK_BUILD_OS" = xwindows; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fixpath can be created" >&5 +$as_echo_n "checking if fixpath can be created... " >&6; } + FIXPATH_SRC="$SRC_ROOT/common/src/fixpath.c" + FIXPATH_BIN="$OUTPUT_ROOT/fixpath.exe" + if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then + FIXPATH_SRC=`$CYGPATH -m $FIXPATH_SRC` + FIXPATH_BIN=`$CYGPATH -m $FIXPATH_BIN` + # Important to keep the .exe suffix on Cygwin for Hotspot makefiles + FIXPATH="$OUTPUT_ROOT/fixpath.exe -c" + elif test "x$OPENJDK_BUILD_OS_ENV" = xwindows.msys; then + FIXPATH_SRC=`cmd //c echo $FIXPATH_SRC` + FIXPATH_BIN=`cmd //c echo $FIXPATH_BIN` + + # Take all collected prefixes and turn them into a -m/c/foo@/c/bar@... command line + # @ was chosen as separator to minimize risk of other tools messing around with it + all_unique_prefixes=`echo "${all_fixpath_prefixes[@]}" | tr ' ' '\n' | grep '^/./' | sort | uniq` + fixpath_argument_list=`echo $all_unique_prefixes | tr ' ' '@'` + + FIXPATH="$OUTPUT_ROOT/fixpath -m$fixpath_argument_list" + fi + rm -f $OUTPUT_ROOT/fixpath* + cd $OUTPUT_ROOT + $CC $FIXPATH_SRC -Fe$FIXPATH_BIN > $OUTPUT_ROOT/fixpath1.log 2>&1 + cd $CURDIR + + if test ! -x $OUTPUT_ROOT/fixpath.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/fixpath1.log + as_fn_error $? "Could not create $OUTPUT_ROOT/fixpath.exe" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if fixpath.exe works" >&5 +$as_echo_n "checking if fixpath.exe works... " >&6; } + cd $OUTPUT_ROOT + $FIXPATH $CC $SRC_ROOT/common/src/fixpath.c -Fe$OUTPUT_ROOT/fixpath2.exe > $OUTPUT_ROOT/fixpath2.log 2>&1 + cd $CURDIR + if test ! -x $OUTPUT_ROOT/fixpath2.exe; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + cat $OUTPUT_ROOT/fixpath2.log + as_fn_error $? "fixpath did not work!" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + rm -f $OUTPUT_ROOT/fixpath?.??? $OUTPUT_ROOT/fixpath.obj +fi + + + + ############################################################################### # # We need to do some final tweaking, when everything else is done. @@ -17873,6 +29981,10 @@ # Looks like a MacOSX system NUM_CORES=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Cores' | awk '{print $5}'` FOUND_CORES=yes + elif test -n "$NUMBER_OF_PROCESSORS"; then + # On windows, look in the env + NUM_CORES=$NUMBER_OF_PROCESSORS + FOUND_CORES=yes fi # For c/c++ code we run twice as many concurrent build @@ -17883,8 +29995,10 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NUM_CORES" >&5 $as_echo "$NUM_CORES" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1!" >&5 -$as_echo "could not detect number of cores, defaulting to 1!" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect number of cores, defaulting to 1" >&5 +$as_echo "could not detect number of cores, defaulting to 1" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This will disable all parallelism from build!" >&5 +$as_echo "$as_me: WARNING: This will disable all parallelism from build!" >&2;} fi @@ -17926,9 +30040,10 @@ MEMORY_SIZE=`/usr/sbin/system_profiler -detailLevel full SPHardwareDataType | grep 'Memory' | awk '{print $2}'` MEMORY_SIZE=`expr $MEMORY_SIZE \* 1024` FOUND_MEM=yes - elif test "x$build_os" = xwindows; then + elif test "x$OPENJDK_BUILD_OS" = xwindows; then # Windows, but without cygwin - MEMORY_SIZE=`systeminfo | grep 'Total Physical Memory:' | awk '{ print $4 }' | sed 's/,//'` + MEMORY_SIZE=`wmic computersystem get totalphysicalmemory -value | grep = | cut -d "=" -f 2-` + MEMORY_SIZE=`expr $MEMORY_SIZE / 1024 / 1024` FOUND_MEM=yes fi @@ -17936,8 +30051,10 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MEMORY_SIZE MB" >&5 $as_echo "$MEMORY_SIZE MB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size defaulting to 1024 MB!" >&5 -$as_echo "could not detect memory size defaulting to 1024 MB!" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: could not detect memory size, defaulting to 1024 MB" >&5 +$as_echo "could not detect memory size, defaulting to 1024 MB" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: This might seriously impact build performance!" >&5 +$as_echo "$as_me: WARNING: This might seriously impact build performance!" >&2;} fi else @@ -18366,11 +30483,26 @@ # df -l lists only local disks; if the given directory is not found then # a non-zero exit code is given - if $DF -l $OUTPUT_ROOT > /dev/null 2>&1; then - OUTPUT_DIR_IS_LOCAL="yes" - else - OUTPUT_DIR_IS_LOCAL="no" - fi + if test "x$DF" = x; then + if test "x$OPENJDK_BUILD_OS_ENV" = "xwindows.msys"; then + # msys does not have df; use Windows "net use" instead. + IS_NETWORK_DISK=`net use | grep \`pwd -W | cut -d ":" -f 1 | tr a-z A-Z\`:` + if test "x$IS_NETWORK_DISK" = x; then + OUTPUT_DIR_IS_LOCAL="yes" + else + OUTPUT_DIR_IS_LOCAL="no" + fi + else + # No df here, say it's local + OUTPUT_DIR_IS_LOCAL="yes" + fi + else + if $DF -l $OUTPUT_ROOT > /dev/null 2>&1; then + OUTPUT_DIR_IS_LOCAL="yes" + else + OUTPUT_DIR_IS_LOCAL="no" + fi + fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OUTPUT_DIR_IS_LOCAL" >&5 $as_echo "$OUTPUT_DIR_IS_LOCAL" >&6; } @@ -18909,7 +31041,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by openjdk $as_me jdk8, which was +This file was extended by OpenJDK $as_me jdk8, which was generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18965,13 +31097,14 @@ Configuration headers: $config_headers -Report bugs to ." +Report bugs to . +OpenJDK home page: ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -openjdk config.status jdk8 +OpenJDK config.status jdk8 configured by $0, generated by GNU Autoconf 2.67, with options \\"\$ac_cs_config\\" @@ -19718,7 +31851,15 @@ printf "* JDK variant: $JDK_VARIANT\n" printf "* JVM variants: $with_jvm_variants\n" printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" -printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Tools summary:\n" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + printf "* Environment: $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root at $WINDOWS_ENV_ROOT_PATH)\n" +fi +printf "* Boot JDK: $BOOT_JDK_VERSION (at $BOOT_JDK)\n" +printf "* C Compiler: $CC_VENDOR version $CC_VERSION (at $CC)\n" +printf "* C++ Compiler: $CXX_VENDOR version $CXX_VERSION (at $CXX)\n" printf "\n" printf "Build performance summary:\n" diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/help.m4 --- a/common/autoconf/help.m4 Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/help.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -55,6 +55,19 @@ fi ]) +cygwin_help() { + case $1 in + unzip) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P unzip" ;; + zip) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P zip" ;; + make) + PKGHANDLER_COMMAND="cd && cmd /c setup -q -P make" ;; + * ) + break ;; + esac +} + apt_help() { case $1 in devkit) @@ -149,7 +162,15 @@ printf "* JDK variant: $JDK_VARIANT\n" printf "* JVM variants: $with_jvm_variants\n" printf "* OpenJDK target: OS: $OPENJDK_TARGET_OS, CPU architecture: $OPENJDK_TARGET_CPU_ARCH, address length: $OPENJDK_TARGET_CPU_BITS\n" -printf "* Boot JDK: $BOOT_JDK\n" + +printf "\n" +printf "Tools summary:\n" +if test "x$OPENJDK_BUILD_OS" = "xwindows"; then + printf "* Environment: $WINDOWS_ENV_VENDOR version $WINDOWS_ENV_VERSION (root at $WINDOWS_ENV_ROOT_PATH)\n" +fi +printf "* Boot JDK: $BOOT_JDK_VERSION (at $BOOT_JDK)\n" +printf "* C Compiler: $CC_VENDOR version $CC_VERSION (at $CC)\n" +printf "* C++ Compiler: $CXX_VENDOR version $CXX_VERSION (at $CXX)\n" printf "\n" printf "Build performance summary:\n" diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/hotspot-spec.gmk.in --- a/common/autoconf/hotspot-spec.gmk.in Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/hotspot-spec.gmk.in Wed Jul 05 18:27:34 2017 +0200 @@ -48,8 +48,8 @@ # The HOSTCC/HOSTCXX is Hotspot terminology for the BUILD_CC/BUILD_CXX, i.e. the # compiler that produces code that can be run on the build platform. -HOSTCC:=@UNCYGDRIVE@ @BUILD_CC@ -HOSTCXX:=@UNCYGDRIVE@ @BUILD_CXX@ +HOSTCC:=@FIXPATH@ @BUILD_CC@ +HOSTCXX:=@FIXPATH@ @BUILD_CXX@ #################################################### # @@ -78,13 +78,23 @@ ALT_OUTPUTDIR=$(HOTSPOT_OUTPUTDIR) ALT_EXPORT_PATH=$(HOTSPOT_DIST) -HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ +HOTSPOT_MAKE_ARGS:=@HOTSPOT_MAKE_ARGS@ @STATIC_CXX_SETTING@ # This is used from the libjvm build for C/C++ code. HOTSPOT_BUILD_JOBS:=@CONCURRENT_BUILD_JOBS@ # Control wether Hotspot runs Queens test after building TEST_IN_BUILD=@TEST_IN_BUILD@ +# For hotspot, override compiler/tools definition to not include FIXPATH prefix. +# Hotspot has its own handling on the Windows path situation. +CXX:=@CCACHE@ @HOTSPOT_CXX@ +LD:=@HOTSPOT_LD@ +MT:=@HOTSPOT_MT@ +RC:=@HOTSPOT_RC@ EXTRA_CFLAGS=@LEGACY_EXTRA_CFLAGS@ EXTRA_CXXFLAGS=@LEGACY_EXTRA_CXXFLAGS@ EXTRA_LDFLAGS=@LEGACY_EXTRA_LDFLAGS@ + +# Sneak this in via the spec.gmk file, since we don't want to mess around too much with the Hotspot make files. +# This is needed to get the LOG setting to work properly. +include $(SRC_ROOT)/common/makefiles/MakeBase.gmk diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/jdk-options.m4 --- a/common/autoconf/jdk-options.m4 Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/jdk-options.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -64,7 +64,7 @@ # ie normal interpreter and C1, only the serial GC, kernel jvmti etc # zero: no machine code interpreter, no compiler # zeroshark: zero interpreter and shark/llvm compiler backend -AC_MSG_CHECKING([which variants of the JVM that should be built]) +AC_MSG_CHECKING([which variants of the JVM to build]) AC_ARG_WITH([jvm-variants], [AS_HELP_STRING([--with-jvm-variants], [JVM variants (separated by commas) to build (server, client, kernel, zero, zeroshark) @<:@server@:>@])]) @@ -241,48 +241,47 @@ # Should we build only OpenJDK even if closed sources are present? # AC_ARG_ENABLE([openjdk-only], [AS_HELP_STRING([--enable-openjdk-only], - [build OpenJDK regardless of the presence of closed repositories @<:@disabled@:>@])],,) + [supress building closed source even if present @<:@disabled@:>@])],,[enable_openjdk_only="no"]) + +AC_MSG_CHECKING([for presence of closed sources]) +if test -d "$SRC_ROOT/jdk/src/closed"; then + CLOSED_SOURCE_PRESENT=yes +else + CLOSED_SOURCE_PRESENT=no +fi +AC_MSG_RESULT([$CLOSED_SOURCE_PRESENT]) -if test "x$enable_openjdk_only" = "xyes"; then +AC_MSG_CHECKING([if closed source is supressed (openjdk-only)]) +SUPRESS_CLOSED_SOURCE="$enable_openjdk_only" +AC_MSG_RESULT([$SUPRESS_CLOSED_SOURCE]) + +if test "x$CLOSED_SOURCE_PRESENT" = xno; then + OPENJDK=true + if test "x$SUPRESS_CLOSED_SOURCE" = "xyes"; then + AC_MSG_WARN([No closed source present, --enable-openjdk-only makes no sense]) + fi +else + if test "x$SUPRESS_CLOSED_SOURCE" = "xyes"; then OPENJDK=true -elif test "x$enable_openjdk_only" = "xno"; then + else OPENJDK=false -elif test -d "$SRC_ROOT/jdk/src/closed"; then - OPENJDK=false -else - OPENJDK=true + fi fi if test "x$OPENJDK" = "xtrue"; then - SET_OPENJDK=OPENJDK=true + SET_OPENJDK="OPENJDK=true" fi AC_SUBST(SET_OPENJDK) ############################################################################### # -# JIGSAW or not. The JIGSAW variable is used during the intermediate -# stage when we are building both the old style JDK and the new style modularized JDK. -# When the modularized JDK is finalized, this option will go away. -# -AC_ARG_ENABLE([jigsaw], [AS_HELP_STRING([--enable-jigsaw], - [build Jigsaw images (not yet available) @<:@disabled@:>@])],,) - -if test "x$enable_jigsaw" = "xyes"; then - JIGSAW=true -else - JIGSAW=false -fi -AC_SUBST(JIGSAW) - -############################################################################### -# # Should we build a JDK/JVM with headful support (ie a graphical ui)? # We always build headless support. # AC_MSG_CHECKING([headful support]) AC_ARG_ENABLE([headful], [AS_HELP_STRING([--disable-headful], - [build headful support (graphical UI support) @<:@enabled@:>@])], + [disable building headful support (graphical UI support) @<:@enabled@:>@])], [SUPPORT_HEADFUL=${enable_headful}], [SUPPORT_HEADFUL=yes]) SUPPORT_HEADLESS=yes @@ -305,25 +304,9 @@ AC_SUBST(SUPPORT_HEADFUL) AC_SUBST(BUILD_HEADLESS) -############################################################################### -# -# Should we compile nimbus swing L&F? We can probably remove this option -# since nimbus is officially part of javax now. -# -AC_MSG_CHECKING([whether to build nimbus L&F]) -AC_ARG_ENABLE([nimbus], [AS_HELP_STRING([--disable-nimbus], - [disable Nimbus L&F @<:@enabled@:>@])], - [ENABLE_NIMBUS="${enableval}"], [ENABLE_NIMBUS='yes']) -AC_MSG_RESULT([$ENABLE_NIMBUS]) -DISABLE_NIMBUS= -if test "x$ENABLE_NIMBUS" = xno; then - DISABLE_NIMBUS=true -fi -AC_SUBST(DISABLE_NIMBUS) - # Control wether Hotspot runs Queens test after build. AC_ARG_ENABLE([hotspot-test-in-build], [AS_HELP_STRING([--enable-hotspot-test-in-build], - [enable running of Queens test after Hotspot build (not yet available) @<:@disabled@:>@])],, + [run the Queens test after Hotspot build @<:@disabled@:>@])],, [enable_hotspot_test_in_build=no]) if test "x$enable_hotspot_test_in_build" = "xyes"; then TEST_IN_BUILD=true @@ -351,43 +334,25 @@ ############################################################################### # +# Enable or disable unlimited crypto +# +AC_ARG_ENABLE(unlimited-crypto, [AS_HELP_STRING([--enable-unlimited-crypto], + [Enable unlimited crypto policy @<:@disabled@:>@])],, + [enable_unlimited_crypto=no]) +if test "x$enable_unlimited_crypto" = "xyes"; then + UNLIMITED_CRYPTO=true +else + UNLIMITED_CRYPTO=false +fi +AC_SUBST(UNLIMITED_CRYPTO) + +############################################################################### +# # Compress jars # COMPRESS_JARS=false AC_SUBST(COMPRESS_JARS) - -############################################################################### -# -# Should we compile JFR -# default no, except for on closed-jdk -# -ENABLE_JFR=no - -# Is the JFR source present - -# -# For closed default is yes -# -if test "x${OPENJDK}" != "xtrue"; then - ENABLE_JFR=yes -fi - -AC_MSG_CHECKING([whether to build jfr]) -AC_ARG_ENABLE([jfr], [AS_HELP_STRING([--enable-jfr], - [enable jfr (default is no)])] - [ENABLE_JFR="${enableval}"]) -AC_MSG_RESULT([${ENABLE_JFR}]) - -if test "x$ENABLE_JFR" = "xyes"; then - ENABLE_JFR=true -elif test "x$ENABLE_JFR" = "xno"; then - ENABLE_JFR=false -else - AC_MSG_ERROR([Invalid argument to --enable-jfr]) -fi - -AC_SUBST(ENABLE_JFR) ]) AC_DEFUN_ONCE([JDKOPT_SETUP_JDK_VERSION_NUMBERS], @@ -409,6 +374,8 @@ AC_SUBST(PRODUCT_SUFFIX) AC_SUBST(JDK_RC_PLATFORM_NAME) AC_SUBST(COMPANY_NAME) +AC_SUBST(MACOSX_BUNDLE_NAME_BASE) +AC_SUBST(MACOSX_BUNDLE_ID_BASE) COPYRIGHT_YEAR=`date +'%Y'` AC_SUBST(COPYRIGHT_YEAR) @@ -437,7 +404,7 @@ BUILD_DATE=`date '+%Y_%m_%d_%H_%M'` # Avoid [:alnum:] since it depends on the locale. CLEAN_USERNAME=`echo "$USER" | $TR -d -c 'abcdefghijklmnopqrstuvqxyz0123456789'` - USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvqxyz'` + USER_RELEASE_SUFFIX=`echo "${CLEAN_USERNAME}_${BUILD_DATE}" | $TR 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FULL_VERSION="${RELEASE}-${USER_RELEASE_SUFFIX}-${JDK_BUILD_NUMBER}" fi AC_SUBST(FULL_VERSION) @@ -473,7 +440,7 @@ fi AC_ARG_ENABLE([debug-symbols], - [AS_HELP_STRING([--disable-debug-symbols],[disable generation of debug symbols (@<:@enabled@:>@)])], + [AS_HELP_STRING([--disable-debug-symbols],[disable generation of debug symbols @<:@enabled@:>@])], [ENABLE_DEBUG_SYMBOLS=${enable_debug_symbols}], ) @@ -487,7 +454,7 @@ if test "x$ENABLE_DEBUG_SYMBOLS" = "xdefault"; then # Default is on if objcopy is found, otherwise off - if test "x$OBJCOPY" != x; then + if test "x$OBJCOPY" != x || test "x$OPENJDK_TARGET_OS" = xwindows; then ENABLE_DEBUG_SYMBOLS=yes else ENABLE_DEBUG_SYMBOLS=no @@ -502,7 +469,7 @@ ZIP_DEBUGINFO_FILES=yes AC_ARG_ENABLE([zip-debug-info], - [AS_HELP_STRING([--disable-zip-debug-info],[don't zip debug-info files (@<:@enabled@:@)])], + [AS_HELP_STRING([--disable-zip-debug-info],[disable zipping of debug-info files @<:@enabled@:>@])], [ZIP_DEBUGINFO_FILES=${enable_zip_debug_info}], ) @@ -528,5 +495,5 @@ # for a degree of customization of the build targets and the rules/recipes # to create them AC_ARG_WITH([custom-make-dir], [AS_HELP_STRING([--with-custom-make-dir], - [directory containing custom build/make files])], [CUSTOM_MAKE_DIR=$with_custom_make_dir]) + [use this directory for custom build/make files])], [CUSTOM_MAKE_DIR=$with_custom_make_dir]) AC_SUBST(CUSTOM_MAKE_DIR) diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/libraries.m4 --- a/common/autoconf/libraries.m4 Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/libraries.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -172,9 +172,15 @@ AC_LANG_PUSH(C) OLD_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS $X_CFLAGS" + +# Need to include Xlib.h and Xutil.h to avoid "present but cannot be compiled" warnings on Solaris 10 AC_CHECK_HEADERS([X11/extensions/shape.h X11/extensions/Xrender.h X11/extensions/XTest.h], - [X11_A_OK=yes], - [X11_A_OK=no]) + [X11_A_OK=yes], + [X11_A_OK=no], + [ # include + # include + ]) + CFLAGS="$OLD_CFLAGS" AC_LANG_POP(C) @@ -196,27 +202,23 @@ # AC_ARG_WITH(cups, [AS_HELP_STRING([--with-cups], [specify prefix directory for the cups package - (expecting the libraries under PATH/lib and the headers under PATH/include)])]) + (expecting the headers under PATH/include)])]) AC_ARG_WITH(cups-include, [AS_HELP_STRING([--with-cups-include], [specify directory for the cups include files])]) -AC_ARG_WITH(cups-lib, [AS_HELP_STRING([--with-cups-lib], - [specify directory for the cups library])]) if test "x$CUPS_NOT_NEEDED" = xyes; then - if test "x${with_cups}" != x || test "x${with_cups_include}" != x || test "x${with_cups_lib}" != x; then + if test "x${with_cups}" != x || test "x${with_cups_include}" != x; then AC_MSG_WARN([cups not used, so --with-cups is ignored]) fi CUPS_CFLAGS= - CUPS_LIBS= else CUPS_FOUND=no - if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno || test "x${with_cups_lib}" = xno; then + if test "x${with_cups}" = xno || test "x${with_cups_include}" = xno; then AC_MSG_ERROR([It is not possible to disable the use of cups. Remove the --without-cups option.]) fi if test "x${with_cups}" != x; then - CUPS_LIBS="-L${with_cups}/lib -lcups" CUPS_CFLAGS="-I${with_cups}/include" CUPS_FOUND=yes fi @@ -224,10 +226,6 @@ CUPS_CFLAGS="-I${with_cups_include}" CUPS_FOUND=yes fi - if test "x${with_cups_lib}" != x; then - CUPS_LIBS="-L${with_cups_lib} -lcups" - CUPS_FOUND=yes - fi if test "x$CUPS_FOUND" = xno; then BDEPS_CHECK_MODULE(CUPS, cups, xxx, [CUPS_FOUND=yes]) fi @@ -236,23 +234,20 @@ AC_CHECK_HEADERS([cups/cups.h cups/ppd.h], [CUPS_FOUND=yes CUPS_CFLAGS= - CUPS_LIBS="-lcups" DEFAULT_CUPS=yes]) fi if test "x$CUPS_FOUND" = xno; then # Getting nervous now? Lets poke around for standard Solaris third-party # package installation locations. - AC_MSG_CHECKING([for cups headers and libs]) + AC_MSG_CHECKING([for cups headers]) if test -s /opt/sfw/cups/include/cups/cups.h; then # An SFW package seems to be installed! CUPS_FOUND=yes CUPS_CFLAGS="-I/opt/sfw/cups/include" - CUPS_LIBS="-L/opt/sfw/cups/lib -lcups" elif test -s /opt/csw/include/cups/cups.h; then # A CSW package seems to be installed! CUPS_FOUND=yes CUPS_CFLAGS="-I/opt/csw/include" - CUPS_LIBS="-L/opt/csw/lib -lcups" fi AC_MSG_RESULT([$CUPS_FOUND]) fi @@ -263,7 +258,6 @@ fi AC_SUBST(CUPS_CFLAGS) -AC_SUBST(CUPS_LIBS) ]) @@ -292,17 +286,21 @@ FREETYPE2_FOUND=no if test "x$with_freetype" != x; then - SPACESAFE(with_freetype,[the path to freetype]) + BASIC_FIXUP_PATH(with_freetype) FREETYPE2_LIBS="-L$with_freetype/lib -lfreetype" + FREETYPE2_LIB_PATH="$with_freetype/lib" + if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64 && test -d "$with_freetype/lib/amd64"; then + FREETYPE2_LIBS="-L$with_freetype/lib/amd64 -lfreetype" + FREETYPE2_LIB_PATH="$with_freetype/lib/amd64" + fi if test "x$OPENJDK_TARGET_OS" = xwindows; then FREETYPE2_LIBS="$with_freetype/lib/freetype.lib" fi - FREETYPE2_LIB_PATH="$with_freetype/lib" FREETYPE2_CFLAGS="-I$with_freetype/include" if test -s $with_freetype/include/ft2build.h && test -d $with_freetype/include/freetype2/freetype; then FREETYPE2_CFLAGS="-I$with_freetype/include/freetype2 -I$with_freetype/include" fi - FREETYPE2_FOUND=yes + FREETYPE2_FOUND=yes if test "x$FREETYPE2_FOUND" = xyes; then # Verify that the directories exist if ! test -d "$with_freetype/lib" || ! test -d "$with_freetype/include"; then @@ -311,7 +309,7 @@ # List the contents of the lib. FREETYPELIB=`ls $with_freetype/lib/libfreetype.so $with_freetype/lib/freetype.dll 2> /dev/null` if test "x$FREETYPELIB" = x; then - AC_MSG_ERROR([Could not find libfreetype.se nor freetype.dll in $with_freetype/lib]) + AC_MSG_ERROR([Could not find libfreetype.so nor freetype.dll in $with_freetype/lib]) fi # Check one h-file if ! test -s "$with_freetype/include/ft2build.h"; then @@ -323,9 +321,34 @@ BDEPS_CHECK_MODULE(FREETYPE2, freetype2, xxx, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) USING_SYSTEM_FT_LIB=true fi + if test "x$FREETYPE2_FOUND" = xno && test "x$OPENJDK_TARGET_OS" = xwindows; then + FREETYPELOCATION="$PROGRAMFILES/GnuWin32" + BASIC_FIXUP_PATH(FREETYPELOCATION) + AC_MSG_CHECKING([for freetype in some standard windows locations]) + if test -s "$FREETYPELOCATION/include/ft2build.h" && test -d "$FREETYPELOCATION/include/freetype2/freetype"; then + FREETYPE2_CFLAGS="-I$FREETYPELOCATION/include/freetype2 -I$FREETYPELOCATION/include" + FREETYPE2_LIBS="$FREETYPELOCATION/lib/freetype.lib" + FREETYPE2_LIB_PATH="$FREETYPELOCATION/lib" + if ! test -s "$FREETYPE2_LIBS"; then + AC_MSG_ERROR([Could not find $FREETYPE2_LIBS]) + fi + if ! test -s "$FREETYPE2_LIB_PATH/freetype.dll"; then + AC_MSG_ERROR([Could not find $FREETYPE2_LIB_PATH/freetype.dll]) + fi + USING_SYSTEM_FT_LIB=true + FREETYPE2_FOUND=yes + fi + AC_MSG_RESULT([$FREETYPE2_FOUND]) + fi if test "x$FREETYPE2_FOUND" = xno; then PKG_CHECK_MODULES(FREETYPE2, freetype2, [FREETYPE2_FOUND=yes], [FREETYPE2_FOUND=no]) + # On solaris, pkg_check adds -lz to freetype libs, which isn't necessary for us. + FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's/-lz//g'` USING_SYSTEM_FT_LIB=true + # 64-bit libs for Solaris x86 are installed in the amd64 subdirectory, change lib to lib/amd64 + if test "x$FREETYPE2_FOUND" = xyes && test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$OPENJDK_TARGET_CPU" = xx86_64; then + FREETYPE2_LIBS=`$ECHO $FREETYPE2_LIBS | $SED 's?/lib?/lib/amd64?g'` + fi fi if test "x$FREETYPE2_FOUND" = xno; then AC_MSG_CHECKING([for freetype in some standard locations]) @@ -364,7 +387,15 @@ if test "x$FREETYPE2_FOUND" = xno; then HELP_MSG_MISSING_DEPENDENCY([freetype2]) AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ]) - fi + fi + + if test "x$OPENJDK_TARGET_OS" != xwindows; then + # AC_CHECK_LIB does not support use of cl.exe + PREV_LDFLAGS="$LDFLAGS" + LDFLAGS="$FREETYPE2_LIBS" + AC_CHECK_LIB(freetype, FT_Init_FreeType, [], AC_MSG_ERROR([Could not find freetype2! $HELP_MSG ])) + LDFLAGS="$PREV_LDFLAGS" + fi fi AC_SUBST(USING_SYSTEM_FT_LIB) @@ -621,13 +652,16 @@ if test "x$enable_static_link_stdc__" = xyes; then LIBCXX="$LIBCXX $STATIC_STDCXX_FLAGS" LDCXX="$CC" + STATIC_CXX_SETTING="STATIC_CXX=true" AC_MSG_RESULT([static]) else LIBCXX="$LIBCXX -lstdc++" LDCXX="$CXX" + STATIC_CXX_SETTING="STATIC_CXX=false" AC_MSG_RESULT([dynamic]) fi fi +AC_SUBST(STATIC_CXX_SETTING) # libCrun is the c++ runtime-library with SunStudio (roughly the equivalent of gcc's libstdc++.so) if test "x$OPENJDK_TARGET_OS" = xsolaris && test "x$LIBCXX" = x; then diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/platform.m4 --- a/common/autoconf/platform.m4 Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/platform.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -87,22 +87,32 @@ *linux*) VAR_OS=linux VAR_OS_API=posix + VAR_OS_ENV=linux ;; *solaris*) VAR_OS=solaris VAR_OS_API=posix + VAR_OS_ENV=solaris ;; *darwin*) VAR_OS=macosx VAR_OS_API=posix + VAR_OS_ENV=macosx ;; *bsd*) VAR_OS=bsd VAR_OS_API=posix + VAR_OS_ENV=bsd ;; - *cygwin*|*windows*) + *cygwin*) VAR_OS=windows VAR_OS_API=winapi + VAR_OS_ENV=windows.cygwin + ;; + *mingw*) + VAR_OS=windows + VAR_OS_API=winapi + VAR_OS_ENV=windows.msys ;; *) AC_MSG_ERROR([unsupported operating system $1]) @@ -128,11 +138,33 @@ AC_SUBST(OPENJDK_BUILD_AUTOCONF_NAME) # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. + PLATFORM_EXTRACT_VARS_FROM_OS($build_os) + PLATFORM_EXTRACT_VARS_FROM_CPU($build_cpu) + # ..and setup our own variables. (Do this explicitely to facilitate searching) + OPENJDK_BUILD_OS="$VAR_OS" + OPENJDK_BUILD_OS_API="$VAR_OS_API" + OPENJDK_BUILD_OS_ENV="$VAR_OS_ENV" + OPENJDK_BUILD_CPU="$VAR_CPU" + OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" + OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" + OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" + AC_SUBST(OPENJDK_BUILD_OS) + AC_SUBST(OPENJDK_BUILD_OS_API) + AC_SUBST(OPENJDK_BUILD_CPU) + AC_SUBST(OPENJDK_BUILD_CPU_ARCH) + AC_SUBST(OPENJDK_BUILD_CPU_BITS) + AC_SUBST(OPENJDK_BUILD_CPU_ENDIAN) + + AC_MSG_CHECKING([openjdk-build os-cpu]) + AC_MSG_RESULT([$OPENJDK_BUILD_OS-$OPENJDK_BUILD_CPU]) + + # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. PLATFORM_EXTRACT_VARS_FROM_OS($host_os) PLATFORM_EXTRACT_VARS_FROM_CPU($host_cpu) # ... and setup our own variables. (Do this explicitely to facilitate searching) OPENJDK_TARGET_OS="$VAR_OS" OPENJDK_TARGET_OS_API="$VAR_OS_API" + OPENJDK_TARGET_OS_ENV="$VAR_OS_ENV" OPENJDK_TARGET_CPU="$VAR_CPU" OPENJDK_TARGET_CPU_ARCH="$VAR_CPU_ARCH" OPENJDK_TARGET_CPU_BITS="$VAR_CPU_BITS" @@ -144,22 +176,8 @@ AC_SUBST(OPENJDK_TARGET_CPU_BITS) AC_SUBST(OPENJDK_TARGET_CPU_ENDIAN) - # Convert the autoconf OS/CPU value to our own data, into the VAR_OS/CPU variables. - PLATFORM_EXTRACT_VARS_FROM_OS($build_os) - PLATFORM_EXTRACT_VARS_FROM_CPU($build_cpu) - # ..and setup our own variables. (Do this explicitely to facilitate searching) - OPENJDK_BUILD_OS="$VAR_OS" - OPENJDK_BUILD_OS_API="$VAR_OS_API" - OPENJDK_BUILD_CPU="$VAR_CPU" - OPENJDK_BUILD_CPU_ARCH="$VAR_CPU_ARCH" - OPENJDK_BUILD_CPU_BITS="$VAR_CPU_BITS" - OPENJDK_BUILD_CPU_ENDIAN="$VAR_CPU_ENDIAN" - AC_SUBST(OPENJDK_BUILD_OS) - AC_SUBST(OPENJDK_BUILD_OS_API) - AC_SUBST(OPENJDK_BUILD_CPU) - AC_SUBST(OPENJDK_BUILD_CPU_ARCH) - AC_SUBST(OPENJDK_BUILD_CPU_BITS) - AC_SUBST(OPENJDK_BUILD_CPU_ENDIAN) + AC_MSG_CHECKING([openjdk-target os-cpu]) + AC_MSG_RESULT([$OPENJDK_TARGET_OS-$OPENJDK_TARGET_CPU]) ]) # Check if a reduced build (32-bit on 64-bit platforms) is requested, and modify behaviour @@ -208,7 +226,7 @@ fi AC_SUBST(COMPILE_TYPE) -AC_MSG_CHECKING([for compilation type]) +AC_MSG_CHECKING([compilation type]) AC_MSG_RESULT([$COMPILE_TYPE]) ]) @@ -299,7 +317,11 @@ if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then A_LP64="LP64:=" - ADD_LP64="-D_LP64=1" + # -D_LP64=1 is only set on linux and mac. Setting on windows causes diff in + # unpack200.exe + if test "x$OPENJDK_TARGET_OS" = xlinux || test "x$OPENJDK_TARGET_OS" = xmacosx; then + ADD_LP64="-D_LP64=1" + fi fi AC_SUBST(LP64,$A_LP64) diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/spec.gmk.in --- a/common/autoconf/spec.gmk.in Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/spec.gmk.in Wed Jul 05 18:27:34 2017 +0200 @@ -41,7 +41,9 @@ #' DQUOTE:=" #" -define NEWLINE:= +define NEWLINE + + endef # A self-referential reference to this file. @@ -50,11 +52,7 @@ # Specify where the spec file is. MAKE_ARGS="SPEC=$(SPEC)" -# TODO The logic for finding and setting MAKE is currently not working -# well on windows. Disable it TEMPORARILY there for now. -ifneq (@OPENJDK_TARGET_OS@,windows) - MAKE:=@MAKE@ -endif +MAKE:=@MAKE@ # Pass along the verbosity setting. ifeq (,$(findstring VERBOSE=,$(MAKE))) @@ -77,6 +75,7 @@ # The built jdk will run in this target system. OPENJDK_TARGET_OS:=@OPENJDK_TARGET_OS@ OPENJDK_TARGET_OS_API:=@OPENJDK_TARGET_OS_API@ +OPENJDK_TARGET_OS_ENV:=@OPENJDK_TARGET_OS_ENV@ OPENJDK_TARGET_CPU:=@OPENJDK_TARGET_CPU@ OPENJDK_TARGET_CPU_ARCH:=@OPENJDK_TARGET_CPU_ARCH@ @@ -109,16 +108,21 @@ REQUIRED_OS_VERSION:=@REQUIRED_OS_VERSION@ @SET_OPENJDK@ -JIGSAW:=@JIGSAW@ LIBM:=-lm LIBDL:=@LIBDL@ # colon or semicolon PATH_SEP:=@PATH_SEP@ -# Set special env variables, to be passed to external tools. -# Used for cygwin setups. -@SETUPDEVENV@ +ifeq ($(OPENJDK_TARGET_OS), windows) + # On Windows, the Visual Studio toolchain needs the LIB and INCLUDE + # environment variables (in Windows path style), and the PATH needs to + # be adjusted to include Visual Studio tools (but this needs to be in + # cygwin/msys style). + export PATH:=@VS_PATH@ + export INCLUDE:=@VS_INCLUDE@ + export LIB:=@VS_LIB@ +endif # The sys root where standard headers and libraries are found. # Usually not needed since the configure script should have @@ -131,7 +135,6 @@ OVERRIDE_SRC_ROOT:=@OVERRIDE_SRC_ROOT@ TOPDIR:=@SRC_ROOT@ OUTPUT_ROOT:=@OUTPUT_ROOT@ -JDK_MAKE_SHARED_DIR:=@JDK_TOPDIR@/makefiles/common/shared JDK_TOPDIR:=@JDK_TOPDIR@ LANGTOOLS_TOPDIR:=@LANGTOOLS_TOPDIR@ CORBA_TOPDIR:=@CORBA_TOPDIR@ @@ -155,6 +158,8 @@ PRODUCT_SUFFIX:=@PRODUCT_SUFFIX@ JDK_RC_PLATFORM_NAME:=@JDK_RC_PLATFORM_NAME@ COMPANY_NAME:=@COMPANY_NAME@ +MACOSX_BUNDLE_NAME_BASE=@MACOSX_BUNDLE_NAME_BASE@ +MACOSX_BUNDLE_ID_BASE=@MACOSX_BUNDLE_ID_BASE@ # Different version strings generated from the above information. JDK_VERSION:=@JDK_VERSION@ @@ -260,6 +265,9 @@ # Source file for cacerts CACERTS_FILE=@CACERTS_FILE@ +# Enable unlimited crypto policy +UNLIMITED_CRYPTO=@UNLIMITED_CRYPTO@ + # Necessary additional compiler flags to compile X11 X_CFLAGS:=@X_CFLAGS@ X_LIBS:=@X_LIBS@ @@ -289,7 +297,7 @@ CXX_FLAG_DEPS:=@CXX_FLAG_DEPS@ # Tools that potentially need to be cross compilation aware. -CC:=@UNCYGDRIVE@ @CCACHE@ @CC@ +CC:=@FIXPATH@ @CCACHE@ @CC@ # CFLAGS used to compile the jdk native libraries (C-code) CFLAGS_JDKLIB:=@CFLAGS_JDKLIB@ @@ -299,17 +307,17 @@ CFLAGS_JDKEXE:=@CFLAGS_JDKEXE@ CXXFLAGS_JDKEXE:=@CXXFLAGS_JDKEXE@ -CXX:=@UNCYGDRIVE@ @CCACHE@ @CXX@ +CXX:=@FIXPATH@ @CCACHE@ @CXX@ #CXXFLAGS:=@CXXFLAGS@ OBJC:=@CCACHE@ @OBJC@ #OBJCFLAGS:=@OBJCFLAGS@ -CPP:=@UNCYGDRIVE@ @CPP@ +CPP:=@FIXPATH@ @CPP@ #CPPFLAGS:=@CPPFLAGS@ # The linker can be gcc or ld on posix systems, or link.exe on windows systems. -LD:=@UNCYGDRIVE@ @LD@ +LD:=@FIXPATH@ @LD@ # LDFLAGS used to link the jdk native libraries (C-code) LDFLAGS_JDKLIB:=@LDFLAGS_JDKLIB@ @@ -317,7 +325,7 @@ # On some platforms the linker cannot be used to create executables, thus # the need for a separate LDEXE command. -LDEXE:=@UNCYGDRIVE@ @LDEXE@ +LDEXE:=@FIXPATH@ @LDEXE@ # LDFLAGS used to link the jdk native launchers (C-code) LDFLAGS_JDKEXE:=@LDFLAGS_JDKEXE@ @@ -327,22 +335,22 @@ LDFLAGS_CXX_JDK:=@LDFLAGS_CXX_JDK@ # Sometimes a different linker is needed for c++ libs -LDCXX:=@UNCYGDRIVE@ @LDCXX@ +LDCXX:=@FIXPATH@ @LDCXX@ # The flags for linking libstdc++ linker. LIBCXX:=@LIBCXX@ # Sometimes a different linker is needed for c++ executables -LDEXECXX:=@UNCYGDRIVE@ @LDEXECXX@ +LDEXECXX:=@FIXPATH@ @LDEXECXX@ # BUILD_CC/BUILD_LD is a compiler/linker that generates code that is runnable on the # build platform. -BUILD_CC:=@UNCYGDRIVE@ @BUILD_CC@ -BUILD_LD:=@UNCYGDRIVE@ @BUILD_LD@ +BUILD_CC:=@FIXPATH@ @BUILD_CC@ +BUILD_LD:=@FIXPATH@ @BUILD_LD@ -AS:=@UNCYGDRIVE@ @AS@ +AS:=@FIXPATH@ @AS@ # AR is used to create a static library (is ar in posix, lib.exe in windows) -AR:=@UNCYGDRIVE@ @AR@ +AR:=@FIXPATH@ @AR@ ARFLAGS:=@ARFLAGS@ NM:=@NM@ @@ -400,20 +408,20 @@ JAVA_FLAGS:=@BOOT_JDK_JVMARGS@ -JAVA=@UNCYGDRIVE@ $(BOOT_JDK)/bin/java $(JAVA_FLAGS) +JAVA=@FIXPATH@ $(BOOT_JDK)/bin/java $(JAVA_FLAGS) -JAVAC=@UNCYGDRIVE@ $(BOOT_JDK)/bin/javac +JAVAC=@FIXPATH@ $(BOOT_JDK)/bin/javac # Hotspot sets this variable before reading the SPEC when compiling sa-jdi.jar. Avoid # overriding that value by using ?=. JAVAC_FLAGS?=@JAVAC_FLAGS@ -JAVAH=@UNCYGDRIVE@ $(BOOT_JDK)/bin/javah +JAVAH=@FIXPATH@ $(BOOT_JDK)/bin/javah -JAR=@UNCYGDRIVE@ $(BOOT_JDK)/bin/jar +JAR=@FIXPATH@ $(BOOT_JDK)/bin/jar -RMIC=@UNCYGDRIVE@ $(BOOT_JDK)/bin/rmic +RMIC=@FIXPATH@ $(BOOT_JDK)/bin/rmic -NATIVE2ASCII=@UNCYGDRIVE@ $(BOOT_JDK)/bin/native2ascii +NATIVE2ASCII=@FIXPATH@ $(BOOT_JDK)/bin/native2ascii # Base flags for RC # Guarding this against resetting value. Legacy make files include spec multiple @@ -424,21 +432,20 @@ # A specific java binary with specific options can be used to run # the long running background sjavac servers and other long running tasks. -SJAVAC_SERVER_JAVA:=@UNCYGDRIVE@ @SJAVAC_SERVER_JAVA@ +SJAVAC_SERVER_JAVA:=@FIXPATH@ @SJAVAC_SERVER_JAVA@ # Tools adhering to a minimal and common standard of posix compliance. AWK:=@AWK@ BASENAME:=@BASENAME@ +BASH:=@BASH@ CAT:=@CAT@ CCACHE:=@CCACHE@ # CD is going away, but remains to cater for legacy makefiles. CD:=cd CHMOD:=@CHMOD@ CP:=@CP@ -CPIO:=@CPIO@ CUT:=@CUT@ DATE:=@DATE@ -DF:=@DF@ DIFF:=@DIFF@ FIND:=@FIND@ FIND_DELETE:=@FIND_DELETE@ @@ -461,6 +468,7 @@ TAR:=@TAR@ TAIL:=@TAIL@ TEE:=@TEE@ +TIME:=@TIME@ TR:=@TR@ TOUCH:=@TOUCH@ WC:=@WC@ @@ -468,9 +476,9 @@ ZIPEXE:=@ZIP@ ZIP:=@ZIP@ UNZIP:=@UNZIP@ -MT:=@UNCYGDRIVE@ @MT@ -RC:=@UNCYGDRIVE@ @RC@ -DUMPBIN:=@UNCYGDRIVE@ @DUMPBIN@ +MT:=@FIXPATH@ @MT@ +RC:=@FIXPATH@ @RC@ +DUMPBIN:=@FIXPATH@ @DUMPBIN@ CYGPATH:=@CYGPATH@ LDD:=@LDD@ OTOOL:=@OTOOL@ @@ -479,8 +487,9 @@ FILE:=@FILE@ HG:=@HG@ OBJCOPY:=@OBJCOPY@ +SETFILE:=@SETFILE@ -UNCYGDRIVE:=@UNCYGDRIVE@ +FIXPATH:=@FIXPATH@ # Where the build output is stored for your convenience. BUILD_LOG:=@BUILD_LOG@ @@ -488,14 +497,12 @@ BUILD_LOG_WRAPPER:=@BUILD_LOG_WRAPPER@ # Build setup -DISABLE_NIMBUS:=@DISABLE_NIMBUS@ ENABLE_JFR=@ENABLE_JFR@ USE_EXTERNAL_LIBJPEG:=@USE_EXTERNAL_LIBJPEG@ USE_EXTERNAL_LIBGIF:=@USE_EXTERNAL_LIBGIF@ USE_EXTERNAL_LIBZ:=@USE_EXTERNAL_LIBZ@ LIBZIP_CAN_USE_MMAP:=@LIBZIP_CAN_USE_MMAP@ -CHECK_FOR_VCINSTALLDIR=@CHECK_FOR_VCINSTALLDIR@ -MSVCRNN_DLL:=@MSVCR100DLL@ +MSVCR_DLL:=@MSVCR_DLL@ # ADD_SRCS takes a single argument with source roots diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/toolchain.m4 --- a/common/autoconf/toolchain.m4 Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/toolchain.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -23,111 +23,67 @@ # questions. # -AC_DEFUN_ONCE([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV], +# $1 = compiler to test (CC or CXX) +# $2 = human readable name of compiler (C or C++) +AC_DEFUN([TOOLCHAIN_CHECK_COMPILER_VERSION], [ + COMPILER=[$]$1 + COMPILER_NAME=$2 -# Check if the VS env variables were setup prior to running configure. -# If not, then find vcvarsall.bat and run it automatically, and integrate -# the set env variables into the spec file. -SETUPDEVENV="# No special vars" -if test "x$OPENJDK_BUILD_OS" = "xwindows"; then - # Store path to cygwin link.exe to help excluding it when searching for - # VS linker. - AC_PATH_PROG(CYGWIN_LINK, link) - AC_MSG_CHECKING([if the first found link.exe is actually the Cygwin link tool]) - "$CYGWIN_LINK" --version > /dev/null - if test $? -eq 0 ; then - AC_MSG_RESULT([yes]) + if test "x$OPENJDK_TARGET_OS" = xsolaris; then + # Make sure we use the Sun Studio compiler and not gcc on Solaris, which won't work + COMPILER_VERSION_TEST=`$COMPILER -V 2>&1 | $HEAD -n 1` + $ECHO $COMPILER_VERSION_TEST | $GREP "^.*: Sun $COMPILER_NAME" > /dev/null + if test $? -ne 0; then + GCC_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + + AC_MSG_NOTICE([The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required Sun Studio compiler.]) + AC_MSG_NOTICE([The result from running with -V was: "$COMPILER_VERSION_TEST" and with --version: "$GCC_VERSION_TEST"]) + AC_MSG_ERROR([Sun Studio compiler is required. Try setting --with-tools-dir.]) else - AC_MSG_RESULT([no]) - # This might be the VS linker. Don't exclude it later on. - CYGWIN_LINK="" + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*@<:@ ,\t@:>@$COMPILER_NAME@<:@ ,\t@:>@\(@<:@1-9@:>@\.@<:@0-9@:>@@<:@0-9@:>@*\).*/\1/p"` + COMPILER_VENDOR="Sun Studio" + fi + elif test "x$OPENJDK_TARGET_OS" = xwindows; then + # First line typically looks something like: + # Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 + COMPILER_VERSION_TEST=`$COMPILER 2>&1 | $HEAD -n 1` + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.*Version \(@<:@1-9@:>@@<:@0-9.@:>@*\) .*/\1/p"` + COMPILER_VENDOR="Microsoft CL.EXE" + COMPILER_CPU_TEST=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* for \(.*\)$/\1/p"` + if test "x$OPENJDK_TARGET_CPU" = "xx86"; then + if test "x$COMPILER_CPU_TEST" != "x80x86"; then + AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "80x86".]) + fi + elif test "x$OPENJDK_TARGET_CPU" = "xx86_64"; then + if test "x$COMPILER_CPU_TEST" != "xx64"; then + AC_MSG_ERROR([Target CPU mismatch. We are building for $OPENJDK_TARGET_CPU but CL is for "$COMPILER_CPU_TEST"; expected "x64".]) + fi + fi + else + COMPILER_VERSION_TEST=`$COMPILER --version 2>&1 | $HEAD -n 1` + # Check that this is likely to be GCC. + $COMPILER --version 2>&1 | $GREP "Free Software Foundation" > /dev/null + if test $? -ne 0; then + AC_MSG_NOTICE([The $COMPILER_NAME compiler (located as $COMPILER) does not seem to be the required GCC compiler.]) + AC_MSG_NOTICE([The result from running with --version was: "$COMPILER_VERSION_TEST"]) + AC_MSG_ERROR([GCC compiler is required. Try setting --with-tools-dir.]) fi - # If vcvarsall.bat has been run, then VCINSTALLDIR is set. - if test "x$VCINSTALLDIR" != x; then - # No further setup is needed. The build will happen from this kind - # of shell. - SETUPDEVENV="# This spec file expects that you are running bash from within a VS command prompt." - # Make sure to remind you, if you forget to run make from a cygwin bash shell - # that is spawned "bash -l" from a VS command prompt. - CHECK_FOR_VCINSTALLDIR=yes - AC_MSG_CHECKING([if you are running from within a VS command prompt]) - AC_MSG_RESULT([yes]) - else - # Ah, we have not yet run vcvarsall.bat/vsvars32.bat/vsvars64.bat. Lets do that. First find it. - if test "x$VS100COMNTOOLS" != x; then - VARSBAT=`find "$VS100COMNTOOLS/../.." -name vcvarsall.bat` - SEARCH_ROOT="$VS100COMNTOOLS" - else - VARSBAT=`find "$PROGRAMFILES" -name vcvarsall.bat` - SEARCH_ROOT="$PROGRAMFILES" - fi - VCPATH=`dirname "$VARSBAT"` - VCPATH=`cygpath -w "$VCPATH"` - if test "x$VARSBAT" = x || test ! -d "$VCPATH"; then - AC_MSG_CHECKING([if we can find the VS installation]) - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Tried to find a VS installation using both $SEARCH_ROOT but failed. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - case "$OPENJDK_TARGET_CPU" in - x86) - VARSBAT_ARCH=x86 - ;; - x86_64) - VARSBAT_ARCH=amd64 - ;; - esac - # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat - cd $OUTPUT_ROOT - bash $SRC_ROOT/common/bin/extractvcvars.sh "$VARSBAT" "$VARSBAT_ARCH" - cd $CURDIR - if test ! -s $OUTPUT_ROOT/localdevenv.sh || test ! -s $OUTPUT_ROOT/localdevenv.gmk; then - AC_MSG_CHECKING([if we can extract the needed env variables]) - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not succesfully extract the env variables needed for the VS setup. Please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - # Now set all paths and other env variables. This will allow the rest of - # the configure script to find and run the compiler in the proper way. - . $OUTPUT_ROOT/localdevenv.sh - AC_MSG_CHECKING([if we can find the VS installation]) - if test "x$VCINSTALLDIR" != x; then - AC_MSG_RESULT([$VCINSTALLDIR]) - else - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not find VS installation. Please install. If you are sure you have installed VS, then please run "c:\\cygwin\\bin\\bash.exe -l" from a VS command prompt and then run configure/make from there.]) - fi - CHECK_FOR_VCINSTALLDIR=no - SETUPDEVENV="include $OUTPUT_ROOT/localdevenv.gmk" + # First line typically looks something like: + # gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2 + COMPILER_VERSION=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^.* \(@<:@1-9@:>@@<:@0-9.@:>@*\)/\1/p"` + COMPILER_VENDOR=`$ECHO $COMPILER_VERSION_TEST | $SED -n "s/^\(.*\) @<:@1-9@:>@@<:@0-9.@:>@*/\1/p"` + fi + # This sets CC_VERSION or CXX_VERSION. (This comment is a grep marker) + $1_VERSION="$COMPILER_VERSION" + # This sets CC_VENDOR or CXX_VENDOR. (This comment is a grep marker) + $1_VENDOR="$COMPILER_VENDOR" - AC_MSG_CHECKING([for msvcr100.dll]) - AC_ARG_WITH(msvcr100dll, [AS_HELP_STRING([--with-msvcr100dll], - [copy this msvcr100.dll into the built JDK])]) - if test "x$with_msvcr100dll" != x; then - MSVCR100DLL="$with_msvcr100dll" - else - if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x64 | head --lines 1` - else - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` - if test "x$MSVCR100DLL" = x; then - MSVCR100DLL=`find "$VCINSTALLDIR/.." -name msvcr100.dll | head --lines 1` - fi - fi - fi - if test "x$MSVCR100DLL" = x; then - AC_MSG_RESULT([no]) - AC_MSG_ERROR([Could not find msvcr100.dll !]) - fi - AC_MSG_RESULT([$MSVCR100DLL]) - SPACESAFE(MSVCR100DLL,[the path to msvcr100.dll]) - fi -fi -AC_SUBST(SETUPDEVENV) -AC_SUBST(CHECK_FOR_VCINSTALLDIR) -AC_SUBST(MSVCR100DLL) + AC_MSG_NOTICE([Using $COMPILER_VENDOR $COMPILER_NAME compiler version $COMPILER_VERSION (located at $COMPILER)]) ]) + AC_DEFUN_ONCE([TOOLCHAIN_SETUP_SYSROOT_AND_OUT_OPTIONS], [ ############################################################################### @@ -151,8 +107,67 @@ AC_SUBST(AR_OUT_OPTION) ]) -AC_DEFUN_ONCE([TOOLCHAIN_SETUP_PATHS], +# $1 = compiler to test (CC or CXX) +# $2 = human readable name of compiler (C or C++) +# $3 = list of compiler names to search for +AC_DEFUN([TOOLCHAIN_FIND_COMPILER], [ + COMPILER_NAME=$2 + + # Do a first initial attempt at searching the list of compiler names. + # AC_PATH_PROGS can't be run multiple times with the same variable, + # so create a new name for this run. + AC_PATH_PROGS(POTENTIAL_$1, $3) + $1=$POTENTIAL_$1 + + if test "x$[$]$1" = x; then + HELP_MSG_MISSING_DEPENDENCY([devkit]) + AC_MSG_ERROR([Could not find a $COMPILER_NAME compiler. $HELP_MSG]) + fi + BASIC_FIXUP_EXECUTABLE($1) + AC_MSG_CHECKING([resolved symbolic links for $1]) + TEST_COMPILER="[$]$1" + BASIC_REMOVE_SYMBOLIC_LINKS(TEST_COMPILER) + AC_MSG_RESULT([$TEST_COMPILER]) + AC_MSG_CHECKING([if $1 is disguised ccache]) + + COMPILER_BASENAME=`$BASENAME "$TEST_COMPILER"` + if test "x$COMPILER_BASENAME" = "xccache"; then + AC_MSG_RESULT([yes, trying to find proper $COMPILER_NAME compiler]) + # We /usr/lib/ccache in the path, so cc is a symlink to /usr/bin/ccache. + # We want to control ccache invocation ourselves, so ignore this cc and try + # searching again. + + # Remove the path to the fake ccache cc from the PATH + RETRY_COMPILER_SAVED_PATH="$PATH" + COMPILER_DIRNAME=`$DIRNAME [$]$1` + PATH="`$ECHO $PATH | $SED -e "s,$COMPILER_DIRNAME,,g" -e "s,::,:,g" -e "s,^:,,g"`" + + # Try again looking for our compiler + AC_CHECK_TOOLS(PROPER_COMPILER_$1, $3) + BASIC_FIXUP_EXECUTABLE(PROPER_COMPILER_$1) + PATH="$RETRY_COMPILER_SAVED_PATH" + + AC_MSG_CHECKING([for resolved symbolic links for $1]) + BASIC_REMOVE_SYMBOLIC_LINKS(PROPER_COMPILER_$1) + AC_MSG_RESULT([$PROPER_COMPILER_$1]) + $1="$PROPER_COMPILER_$1" + else + AC_MSG_RESULT([no, keeping $1]) + $1="$TEST_COMPILER" + fi + TOOLCHAIN_CHECK_COMPILER_VERSION([$1], [$COMPILER_NAME]) +]) + + +AC_DEFUN([TOOLCHAIN_SETUP_PATHS], +[ +if test "x$OPENJDK_TARGET_OS" = "xwindows"; then + TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV +fi + +AC_SUBST(MSVCR_DLL) + # If --build AND --host is set, then the configure script will find any # cross compilation tools in the PATH. Cross compilation tools # follows the cross compilation standard where they are prefixed with ${host}. @@ -171,11 +186,11 @@ # Otherwise, we'll set the BUILD_tools to the native tools, but that'll have # to wait until they are properly discovered. AC_PATH_PROGS(BUILD_CC, [cl cc gcc]) - SET_FULL_PATH(BUILD_CC) + BASIC_FIXUP_EXECUTABLE(BUILD_CC) AC_PATH_PROGS(BUILD_CXX, [cl CC g++]) - SET_FULL_PATH(BUILD_CXX) + BASIC_FIXUP_EXECUTABLE(BUILD_CXX) AC_PATH_PROG(BUILD_LD, ld) - SET_FULL_PATH(BUILD_LD) + BASIC_FIXUP_EXECUTABLE(BUILD_LD) fi AC_SUBST(BUILD_CC) AC_SUBST(BUILD_CXX) @@ -218,36 +233,40 @@ PATH=$TOOLS_DIR:$PATH fi + +### Locate C compiler (CC) + # gcc is almost always present, but on Windows we # prefer cl.exe and on Solaris we prefer CC. # Thus test for them in this order. -AC_PROG_CC([cl cc gcc]) -if test "x$CC" = x; then - HELP_MSG_MISSING_DEPENDENCY([devkit]) - AC_MSG_ERROR([Could not find a compiler. $HELP_MSG]) -fi -if test "x$CC" = xcc && test "x$OPENJDK_BUILD_OS" = xmacosx; then - # Do not use cc on MacOSX use gcc instead. - CC="gcc" -fi -SET_FULL_PATH(CC) - -AC_PROG_CXX([cl CC g++]) -if test "x$CXX" = xCC && test "x$OPENJDK_BUILD_OS" = xmacosx; then - # The found CC, even though it seems to be a g++ derivate, cannot compile - # c++ code. Override. - CXX="g++" -fi -SET_FULL_PATH(CXX) - -if test "x$CXX" = x || test "x$CC" = x; then - HELP_MSG_MISSING_DEPENDENCY([devkit]) - AC_MSG_ERROR([Could not find the needed compilers! $HELP_MSG ]) +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Do not probe for cc on MacOSX. + COMPILER_CHECK_LIST="cl gcc" +else + COMPILER_CHECK_LIST="cl cc gcc" fi -if test "x$OPENJDK_BUILD_OS" != xwindows; then +TOOLCHAIN_FIND_COMPILER([CC],[C],[$COMPILER_CHECK_LIST]) +# Now that we have resolved CC ourself, let autoconf have it's go at it +AC_PROG_CC([$CC]) + +### Locate C++ compiler (CXX) + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then + # Do not probe for CC on MacOSX. + COMPILER_CHECK_LIST="cl g++" +else + COMPILER_CHECK_LIST="cl CC g++" +fi +TOOLCHAIN_FIND_COMPILER([CXX],[C++],[$COMPILER_CHECK_LIST]) +# Now that we have resolved CXX ourself, let autoconf have it's go at it +AC_PROG_CXX([$CXX]) + +### Locate other tools + +if test "x$OPENJDK_TARGET_OS" = xmacosx; then AC_PROG_OBJC - SET_FULL_PATH(OBJC) + BASIC_FIXUP_EXECUTABLE(OBJC) else OBJC= fi @@ -270,20 +289,26 @@ # Linking C++ executables. AC_SUBST(LDEXECXX) -if test "x$OPENJDK_BUILD_OS" != xwindows; then +if test "x$OPENJDK_TARGET_OS" != xwindows; then AC_CHECK_TOOL(AR, ar) - SET_FULL_PATH(AR) + BASIC_FIXUP_EXECUTABLE(AR) fi -if test "x$OPENJDK_BUILD_OS" = xmacosx; then +if test "x$OPENJDK_TARGET_OS" = xmacosx; then ARFLAGS="-r" else ARFLAGS="" fi AC_SUBST(ARFLAGS) +# For hotspot, we need these in Windows mixed path; other platforms keep them the same +HOTSPOT_CXX="$CXX" +HOTSPOT_LD="$LD" +AC_SUBST(HOTSPOT_CXX) +AC_SUBST(HOTSPOT_LD) + COMPILER_NAME=gcc COMPILER_TYPE=CC -AS_IF([test "x$OPENJDK_BUILD_OS" = xwindows], [ +AS_IF([test "x$OPENJDK_TARGET_OS" = xwindows], [ # For now, assume that we are always compiling using cl.exe. CC_OUT_OPTION=-Fo EXE_OUT_OPTION=-out: @@ -294,7 +319,7 @@ AC_CHECK_PROG([WINLD], [link],[link],,, [$CYGWIN_LINK]) # Since we must ignore the first found link, WINLD will contain # the full path to the link.exe program. - SET_FULL_PATH_SPACESAFE([WINLD]) + BASIC_FIXUP_EXECUTABLE(WINLD) printf "Windows linker was found at $WINLD\n" AC_MSG_CHECKING([if the found link.exe is actually the Visual Studio linker]) "$WINLD" --version > /dev/null @@ -310,12 +335,25 @@ LDEXECXX="$WINLD" AC_CHECK_PROG([MT], [mt], [mt],,, [/usr/bin/mt]) - SET_FULL_PATH_SPACESAFE([MT]) + BASIC_FIXUP_EXECUTABLE(MT) # The resource compiler AC_CHECK_PROG([RC], [rc], [rc],,, [/usr/bin/rc]) - SET_FULL_PATH_SPACESAFE([RC]) + BASIC_FIXUP_EXECUTABLE(RC) - RC_FLAGS="-nologo /l 0x409 /r" + # For hotspot, we need these in Windows mixed path, + # so rewrite them all. Need added .exe suffix. + HOTSPOT_CXX="$CXX.exe" + HOTSPOT_LD="$LD.exe" + HOTSPOT_MT="$MT.exe" + HOTSPOT_RC="$RC.exe" + BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_CXX) + BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_LD) + BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_MT) + BASIC_WINDOWS_REWRITE_AS_WINDOWS_MIXED_PATH(HOTSPOT_RC) + AC_SUBST(HOTSPOT_MT) + AC_SUBST(HOTSPOT_RC) + + RC_FLAGS="-nologo -l 0x409 -r" AS_IF([test "x$VARIANT" = xOPT], [ RC_FLAGS="$RC_FLAGS -d NDEBUG" ]) @@ -333,12 +371,12 @@ # lib.exe is used to create static libraries. AC_CHECK_PROG([WINAR], [lib],[lib],,,) - SET_FULL_PATH_SPACESAFE([WINAR]) + BASIC_FIXUP_EXECUTABLE(WINAR) AR="$WINAR" ARFLAGS="-nologo -NODEFAULTLIB:MSVCRT" AC_CHECK_PROG([DUMPBIN], [dumpbin], [dumpbin],,,) - SET_FULL_PATH_SPACESAFE([DUMPBIN]) + BASIC_FIXUP_EXECUTABLE(DUMPBIN) COMPILER_TYPE=CL CCXXFLAGS="$CCXXFLAGS -nologo" @@ -347,10 +385,10 @@ AC_SUBST(COMPILER_TYPE) AC_PROG_CPP -SET_FULL_PATH(CPP) +BASIC_FIXUP_EXECUTABLE(CPP) AC_PROG_CXXCPP -SET_FULL_PATH(CXXCPP) +BASIC_FIXUP_EXECUTABLE(CXXCPP) if test "x$COMPILE_TYPE" != "xcross"; then # If we are not cross compiling, use the same compilers for @@ -373,43 +411,44 @@ fi # Find the right assembler. -if test "x$OPENJDK_BUILD_OS" = xsolaris; then +if test "x$OPENJDK_TARGET_OS" = xsolaris; then AC_PATH_PROG(AS, as) - SET_FULL_PATH(AS) + BASIC_FIXUP_EXECUTABLE(AS) else AS="$CC -c" fi AC_SUBST(AS) -if test "x$OPENJDK_BUILD_OS" = xsolaris; then +if test "x$OPENJDK_TARGET_OS" = xsolaris; then AC_PATH_PROGS(NM, [gnm nm]) - SET_FULL_PATH(NM) + BASIC_FIXUP_EXECUTABLE(NM) AC_PATH_PROG(STRIP, strip) - SET_FULL_PATH(STRIP) + BASIC_FIXUP_EXECUTABLE(STRIP) AC_PATH_PROG(MCS, mcs) - SET_FULL_PATH(MCS) -elif test "x$OPENJDK_BUILD_OS" != xwindows; then + BASIC_FIXUP_EXECUTABLE(MCS) +elif test "x$OPENJDK_TARGET_OS" != xwindows; then AC_CHECK_TOOL(NM, nm) - SET_FULL_PATH(NM) + BASIC_FIXUP_EXECUTABLE(NM) AC_CHECK_TOOL(STRIP, strip) - SET_FULL_PATH(STRIP) + BASIC_FIXUP_EXECUTABLE(STRIP) fi -### -# -# Check for objcopy -# -# but search for gobjcopy first... -# since I on solaris found a broken objcopy...buhh -# -AC_PATH_TOOL(OBJCOPY, gobjcopy) -if test "x$OBJCOPY" = x; then - AC_PATH_TOOL(OBJCOPY, objcopy) +# objcopy is used for moving debug symbols to separate files when +# full debug symbols are enabled. +if test "x$OPENJDK_TARGET_OS" = xsolaris || test "x$OPENJDK_TARGET_OS" = xlinux; then + AC_CHECK_TOOLS(OBJCOPY, [gobjcopy objcopy]) + BASIC_FIXUP_EXECUTABLE(OBJCOPY) +fi + +AC_CHECK_TOOLS(OBJDUMP, [gobjdump objdump]) +if test "x$OBJDUMP" != x; then + # Only used for compare.sh; we can live without it. BASIC_FIXUP_EXECUTABLE bails if argument is missing. + BASIC_FIXUP_EXECUTABLE(OBJDUMP) fi if test "x$OPENJDK_TARGET_OS" = "xmacosx"; then AC_PATH_PROG(LIPO, lipo) - SET_FULL_PATH(LIPO) + BASIC_FIXUP_EXECUTABLE(LIPO) fi # Restore old path without tools dir @@ -449,7 +488,7 @@ POST_STRIP_CMD="$STRIP -g" # Linking is different on MacOSX - if test "x$OPENJDK_BUILD_OS" = xmacosx; then + if test "x$OPENJDK_TARGET_OS" = xmacosx; then # Might change in the future to clang. COMPILER_NAME=gcc SHARED_LIBRARY='lib[$]1.dylib' @@ -463,7 +502,7 @@ POST_STRIP_CMD="$STRIP -S" fi else - if test "x$OPENJDK_BUILD_OS" = xsolaris; then + if test "x$OPENJDK_TARGET_OS" = xsolaris; then # If it is not gcc, then assume it is the Oracle Solaris Studio Compiler COMPILER_NAME=ossc PICFLAG="-KPIC" @@ -487,7 +526,7 @@ POST_STRIP_CMD="$STRIP -x" POST_MCS_CMD="$MCS -d -a \"JDK $FULL_VERSION\"" fi - if test "x$OPENJDK_BUILD_OS" = xwindows; then + if test "x$OPENJDK_TARGET_OS" = xwindows; then # If it is not gcc, then assume it is the MS Visual Studio compiler COMPILER_NAME=cl PICFLAG="" @@ -626,6 +665,11 @@ # Can cause undefined external on Solaris 8 X86 on __sincos, removing for now #CC_HIGHEST="$CC_HIGHEST -xlibmopt" + if test "x$OPENJDK_TARGET_CPU" = xsparc; then + CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" + CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" + fi + case $OPENJDK_TARGET_CPU_ARCH in x86) C_O_FLAG_HIGHEST="-xO4 -Wu,-O4~yz $CC_HIGHEST -xregs=no%frameptr" @@ -642,8 +686,6 @@ fi ;; sparc) - CFLAGS_JDK="${CFLAGS_JDK} -xmemalign=4s" - CXXFLAGS_JDK="${CXXFLAGS_JDK} -xmemalign=4s" CFLAGS_JDKLIB_EXTRA="${CFLAGS_JDKLIB_EXTRA} -xregs=no%appl" CXXFLAGS_JDKLIB_EXTRA="${CXXFLAGS_JDKLIB_EXTRA} -xregs=no%appl" C_O_FLAG_HIGHEST="-xO4 -Wc,-Qrm-s -Wc,-Qiselect-T0 $CC_HIGHEST -xprefetch=auto,explicit -xchip=ultra" @@ -759,7 +801,7 @@ CCXXFLAGS_JDK="$CCXXFLAGS $CCXXFLAGS_JDK -DTRACING -DMACRO_MEMSYS_OPS -DBREAKPTS" case $OPENJDK_TARGET_CPU_ARCH in x86 ) - CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -Di386" + CCXXFLAGS_JDK="$CCXXFLAGS_JDK -DcpuIntel -Di586 -D$OPENJDK_TARGET_CPU_LEGACY_LIB" CFLAGS_JDK="$CFLAGS_JDK -erroff=E_BAD_PRAGMA_PACK_VALUE" ;; esac @@ -859,7 +901,7 @@ # libraries will link to whatever is in memory. Yuck. # # Thus we offer the compiler to find libjvm.so first in server then in client. It works. Ugh. -if test "x$COMPILER_TYPE" = xCL; then +if test "x$COMPILER_NAME" = xcl; then LDFLAGS_JDK="$LDFLAGS_JDK -nologo -opt:ref -incremental:no" if test "x$OPENJDK_TARGET_CPU" = xx86; then LDFLAGS_JDK="$LDFLAGS_JDK -safeseh" @@ -875,19 +917,23 @@ fi LDFLAGS_JDKEXE="${LDFLAGS_JDK} /STACK:$LDFLAGS_STACK_SIZE" else - # If this is a --hash-style=gnu system, use --hash-style=both, why? - HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` - if test -n "$HAS_GNU_HASH"; then - # And since we now know that the linker is gnu, then add -z defs, to forbid - # undefined symbols in object files. - LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both -Xlinker -z -Xlinker defs" - if test "x$DEBUG_LEVEL" == "xrelease"; then - # When building release libraries, tell the linker optimize them. - # Should this be supplied to the OSS linker as well? - LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + if test "x$COMPILER_NAME" = xgcc; then + # If this is a --hash-style=gnu system, use --hash-style=both, why? + HAS_GNU_HASH=`$CC -dumpspecs 2>/dev/null | $GREP 'hash-style=gnu'` + if test -n "$HAS_GNU_HASH"; then + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker --hash-style=both " + fi + if test "x$OPENJDK_TARGET_OS" = xlinux; then + # And since we now know that the linker is gnu, then add -z defs, to forbid + # undefined symbols in object files. + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -z -Xlinker defs" + if test "x$DEBUG_LEVEL" = "xrelease"; then + # When building release libraries, tell the linker optimize them. + # Should this be supplied to the OSS linker as well? + LDFLAGS_JDK="${LDFLAGS_JDK} -Xlinker -O1" + fi fi fi - LDFLAGS_JDKLIB="${LDFLAGS_JDK} $SHARED_LIBRARY_FLAGS \ -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/server \ -L${JDK_OUTPUTDIR}/lib${OPENJDK_TARGET_CPU_LIBDIR}/client \ diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/toolchain_windows.m4 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/autoconf/toolchain_windows.m4 Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,258 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT], +[ + if test "x$VS_ENV_CMD" = x; then + VS100BASE="$1" + METHOD="$2" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(VS100BASE) + if test -d "$VS100BASE"; then + if test -f "$VS100BASE/$VCVARSFILE"; then + AC_MSG_NOTICE([Found Visual Studio installation at $VS100BASE using $METHOD]) + VS_ENV_CMD="$VS100BASE/$VCVARSFILE" + else + AC_MSG_NOTICE([Found Visual Studio installation at $VS100BASE using $METHOD]) + AC_MSG_NOTICE([Warning: $VCVARSFILE is missing, this is probably Visual Studio Express. Ignoring]) + fi + fi + fi +]) + +AC_DEFUN([TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT], +[ + if test "x$VS_ENV_CMD" = x; then + WIN_SDK_BASE="$1" + METHOD="$2" + BASIC_WINDOWS_REWRITE_AS_UNIX_PATH(WIN_SDK_BASE) + if test -d "$WIN_SDK_BASE"; then + if test -f "$WIN_SDK_BASE/SetEnv.Cmd"; then + AC_MSG_NOTICE([Found Windows SDK installation at $WIN_SDK_BASE using $METHOD]) + VS_ENV_CMD="$WIN_SDK_BASE/SetEnv.Cmd" + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VS_ENV_ARGS="/x86" + else + VS_ENV_ARGS="/x64" + fi + else + AC_MSG_NOTICE([Found Windows SDK installation at $WIN_SDK_BASE using $METHOD]) + AC_MSG_NOTICE([Warning: Installation is broken, SetEnv.Cmd is missing. Ignoring]) + fi + fi + fi +]) + +AC_DEFUN([TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE], +[ + if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then + VCVARSFILE="vc/bin/vcvars32.bat" + else + VCVARSFILE="vc/bin/amd64/vcvars64.bat" + fi + + VS_ENV_CMD="" + VS_ENV_ARGS="" + if test "x$with_toolsdir" != x; then + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$with_toolsdir/../..], [--with-tools-dir]) + fi + + if test "x$with_toolsdir" != x && test "x$VS_ENV_CMD" = x; then + # Having specified an argument which is incorrect will produce an instant failure; + # we should not go on looking + AC_MSG_NOTICE([The path given by --with-tools-dir does not contain a valid Visual Studio installation]) + AC_MSG_NOTICE([Please point to the VC/bin directory within the Visual Studio installation]) + AC_MSG_ERROR([Cannot locate a valid Visual Studio installation]) + fi + + if test "x$ProgramW6432" != x; then + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$ProgramW6432/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + fi + if test "x$PROGRAMW6432" != x; then + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$PROGRAMW6432/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + fi + if test "x$PROGRAMFILES" != x; then + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([$PROGRAMFILES/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + fi + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([C:/Program Files/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + TOOLCHAIN_CHECK_POSSIBLE_WIN_SDK_ROOT([C:/Program Files (x86)/Microsoft SDKs/Windows/v7.1/Bin], [well-known name]) + + if test "x$VS100COMNTOOLS" != x; then + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$VS100COMNTOOLS/../..], [VS100COMNTOOLS variable]) + fi + if test "x$PROGRAMFILES" != x; then + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([$PROGRAMFILES/Microsoft Visual Studio 10.0], [well-known name]) + fi + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([C:/Program Files/Microsoft Visual Studio 10.0], [well-known name]) + TOOLCHAIN_CHECK_POSSIBLE_VISUAL_STUDIO_ROOT([C:/Program Files (x86)/Microsoft Visual Studio 10.0], [well-known name]) +]) + +# Check if the VS env variables were setup prior to running configure. +# If not, then find vcvarsall.bat and run it automatically, and integrate +# the set env variables into the spec file. +AC_DEFUN([TOOLCHAIN_SETUP_VISUAL_STUDIO_ENV], +[ + # Store path to cygwin link.exe to help excluding it when searching for + # VS linker. This must be done before changing the PATH when looking for VS. + AC_PATH_PROG(CYGWIN_LINK, link) + if test "x$CYGWIN_LINK" != x; then + AC_MSG_CHECKING([if the first found link.exe is actually the Cygwin link tool]) + "$CYGWIN_LINK" --version > /dev/null + if test $? -eq 0 ; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + # This might be the VS linker. Don't exclude it later on. + CYGWIN_LINK="" + fi + fi + + # First-hand choice is to locate and run the vsvars bat file. + TOOLCHAIN_FIND_VISUAL_STUDIO_BAT_FILE + if test "x$VS_ENV_CMD" != x; then + # We have found a Visual Studio environment on disk, let's extract variables from the vsvars bat file. + BASIC_FIXUP_EXECUTABLE(VS_ENV_CMD) + + # Lets extract the variables that are set by vcvarsall.bat/vsvars32.bat/vsvars64.bat + AC_MSG_NOTICE([Trying to extract Visual Studio environment variables]) + cd $OUTPUT_ROOT + # FIXME: The code betweeen ---- was inlined from a separate script and is not properly adapted + # to autoconf standards. + + #---- + + # Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment) + # but calculate the difference in Cygwin environment before/after running it and then + # apply the diff. + + if test "x$OPENJDK_BUILD_OS_ENV" = xwindows.cygwin; then + _vs10varsall=`cygpath -a -m -s "$VS_ENV_CMD"` + _dosvs10varsall=`cygpath -a -w -s $_vs10varsall` + _dosbash=`cygpath -a -w -s \`which bash\`.*` + else + _dosvs10varsall=`cmd //c echo $VS_ENV_CMD` + _dosbash=`cmd //c echo \`which bash\`` + fi + + # generate the set of exported vars before/after the vs10 setup + $ECHO "@echo off" > localdevenvtmp.bat + $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export0" >> localdevenvtmp.bat + $ECHO "call $_dosvs10varsall $VS_ENV_ARGS" >> localdevenvtmp.bat + $ECHO "$_dosbash -c \"export -p\" > localdevenvtmp.export1" >> localdevenvtmp.bat + + # Now execute the newly created bat file. + # The | cat is to stop SetEnv.Cmd to mess with system colors on msys + cmd /c localdevenvtmp.bat | cat + + # apply the diff (less some non-vs10 vars named by "!") + $SORT localdevenvtmp.export0 | $GREP -v "!" > localdevenvtmp.export0.sort + $SORT localdevenvtmp.export1 | $GREP -v "!" > localdevenvtmp.export1.sort + $COMM -1 -3 localdevenvtmp.export0.sort localdevenvtmp.export1.sort > localdevenv.sh + + # cleanup + $RM localdevenvtmp* + #---- + cd $CURDIR + if test ! -s $OUTPUT_ROOT/localdevenv.sh; then + AC_MSG_RESULT([no]) + AC_MSG_NOTICE([Could not succesfully extract the envionment variables needed for the VS setup.]) + AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation]) + AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.]) + AC_MSG_ERROR([Cannot continue]) + fi + + # Now set all paths and other env variables. This will allow the rest of + # the configure script to find and run the compiler in the proper way. + AC_MSG_NOTICE([Setting extracted environment variables]) + . $OUTPUT_ROOT/localdevenv.sh + else + # We did not find a vsvars bat file, let's hope we are run from a VS command prompt. + AC_MSG_NOTICE([Cannot locate a valid Visual Studio installation, checking current environment]) + fi + + # At this point, we should have corrent variables in the environment, or we can't continue. + AC_MSG_CHECKING([for Visual Studio variables]) + + if test "x$VCINSTALLDIR" != x || test "x$WindowsSDKDir" != x || test "x$WINDOWSSDKDIR" != x; then + if test "x$INCLUDE" = x || test "x$LIB" = x; then + AC_MSG_RESULT([present but broken]) + AC_MSG_ERROR([Your VC command prompt seems broken, INCLUDE and/or LIB is missing.]) + else + AC_MSG_RESULT([ok]) + VS_INCLUDE="$INCLUDE" + VS_LIB="$LIB" + VS_PATH="$PATH" + AC_SUBST(VS_INCLUDE) + AC_SUBST(VS_LIB) + AC_SUBST(VS_PATH) + fi + else + AC_MSG_RESULT([not found]) + + if test "x$VS_ENV_CMD" = x; then + AC_MSG_NOTICE([Cannot locate a valid Visual Studio or Windows SDK installation on disk,]) + AC_MSG_NOTICE([nor is this script run from a Visual Studio command prompt.]) + else + AC_MSG_NOTICE([Running the extraction script failed.]) + fi + AC_MSG_NOTICE([Try setting --with-tools-dir to the VC/bin directory within the VS installation]) + AC_MSG_NOTICE([or run "bash.exe -l" from a VS command prompt and then run configure from there.]) + AC_MSG_ERROR([Cannot continue]) + fi + + AC_MSG_CHECKING([for msvcr100.dll]) + AC_ARG_WITH(msvcr-dll, [AS_HELP_STRING([--with-msvcr-dll], + [copy this msvcr100.dll into the built JDK (Windows only) @<:@probed@:>@])]) + if test "x$with_msvcr_dll" != x; then + MSVCR_DLL="$with_msvcr_dll" + else + if test "x$VCINSTALLDIR" != x; then + if test "x$OPENJDK_TARGET_CPU_BITS" = x64; then + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x64 | head --lines 1` + else + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | grep x86 | grep -v ia64 | grep -v x64 | head --lines 1` + if test "x$MSVCR_DLL" = x; then + MSVCR_DLL=`find "$VCINSTALLDIR" -name msvcr100.dll | head --lines 1` + fi + fi + if test "x$MSVCR_DLL" != x; then + AC_MSG_NOTICE([msvcr100.dll found in VCINSTALLDIR: $VCINSTALLDIR]) + else + AC_MSG_NOTICE([Warning: msvcr100.dll not found in VCINSTALLDIR: $VCINSTALLDIR]) + fi + fi + if test "x$MSVCR_DLL" = x; then + if test -f "$SYSTEMROOT/system32/msvcr100.dll"; then + AC_MSG_NOTICE([msvcr100.dll found in $SYSTEMROOT/system32]) + MSVCR_DLL="$SYSTEMROOT/system32/msvcr100.dll" + fi + fi + fi + if test "x$MSVCR_DLL" = x; then + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find msvcr100.dll !]) + fi + AC_MSG_RESULT([$MSVCR_DLL]) + BASIC_FIXUP_PATH(MSVCR_DLL) +]) diff -r 540a11e15fbb -r 1c3fdd0c4268 common/autoconf/version.numbers --- a/common/autoconf/version.numbers Wed Oct 31 18:35:56 2012 -0700 +++ b/common/autoconf/version.numbers Wed Jul 05 18:27:34 2017 +0200 @@ -34,3 +34,7 @@ PRODUCT_SUFFIX="Runtime Environment" JDK_RC_PLATFORM_NAME=Platform COMPANY_NAME=N/A + +# Might need better names for these +MACOSX_BUNDLE_NAME_BASE="OpenJDK" +MACOSX_BUNDLE_ID_BASE="net.java.openjdk" diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/compare.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/bin/compare.sh Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,1220 @@ +#!/bin/bash +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# This script is processed by configure before it's usable. It is run from +# the root of the build directory. + + +########################################################################################## + +# Check that we are run via the wrapper generated by configure +if [ -z "$SRC_ROOT" ]; then + echo "Error: You must run this script using build/[conf]/compare.sh" + exit 1 +fi + +if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then + FULLDUMP_CMD="$OTOOL -v -V -h -X -t -d" + LDD_CMD="$OTOOL -L" + DIS_CMD="$OTOOL -v -t" + STAT_PRINT_SIZE="-f %z" +elif [ "$OPENJDK_TARGET_OS" = "windows" ]; then + FULLDUMP_CMD="$DUMPBIN -all" + LDD_CMD="$DUMPBIN -dependants | $GREP .dll" + DIS_CMD="$DUMPBIN -disasm:nobytes" + STAT_PRINT_SIZE="-c %s" +else + FULLDUMP_CMD="$READELF -a" + LDD_CMD="$LDD" + DIS_CMD="$OBJDUMP -d" + STAT_PRINT_SIZE="-c %s" +fi + +UNARCHIVE="$UNZIP -q" + +COMPARE_EXCEPTIONS_INCLUDE="$SRC_ROOT/common/bin/compare_exceptions.sh.incl" +if [ ! -e "$COMPARE_EXCEPTIONS_INCLUDE" ]; then + echo "Error: Cannot locate the exceptions file, it should have been here: $COMPARE_EXCEPTIONS_INCLUDE" + exit 1 +fi +# Include exception definitions +. "$COMPARE_EXCEPTIONS_INCLUDE" + +########################################################################################## +# Compare text files and ignore specific differences: +# +# * Timestamps in Java sources generated by idl2java +# * Sorting order and cleanup style in .properties files + +diff_text() { + OTHER_FILE=$1 + THIS_FILE=$2 + + SUFFIX="${THIS_FILE##*.}" + + TMP=1 + + if [[ "$THIS_FILE" = *"META-INF/MANIFEST.MF" ]]; then + TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ + $GREP '^[<>]' | \ + $SED -e '/[<>] Ant-Version: Apache Ant .*/d' \ + -e '/[<>] Created-By: .* (Oracle Corporation).*/d') + fi + if test "x$SUFFIX" = "xjava"; then + TMP=$(LANG=C $DIFF $OTHER_FILE $THIS_FILE | \ + $GREP '^[<>]' | \ + $SED -e '/[<>] \* from.*\.idl/d' \ + -e '/[<>] \*.*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ + -e '/[<>] \*.*[0-9]\{4\} [0-9][0-9]*:[0-9]\{2\}:[0-9]\{2\}.*/d' \ + -e '/\/\/ Generated from input file.*/d' \ + -e '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' \ + -e '/\/\/ java GenerateCharacter.*/d') + fi + # Ignore date strings in class files. + # On Macosx the system sources for generated java classes produce different output on + # consequtive invokations seemingly randomly. + # For example a method parameter randomly named "thePoint" or "aPoint". Ignore this. + if test "x$SUFFIX" = "xclass"; then + # To improve performance when large diffs are found, do a rough filtering of classes + # elibeble for these exceptions + if $GREP -R -e '[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}' -e thePoint -e aPoint -e setItemsPtr ${THIS_FILE} > /dev/null; then + $JAVAP -c -constants -l -p ${OTHER_FILE} > ${OTHER_FILE}.javap + $JAVAP -c -constants -l -p ${THIS_FILE} > ${THIS_FILE}.javap + TMP=$($DIFF ${OTHER_FILE}.javap ${THIS_FILE}.javap | \ + $GREP '^[<>]' | \ + $SED -e '/[<>].*[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}_[0-9]\{2\}-b[0-9]\{2\}.*/d' \ + -e '/[<>].*Point Lcom\/apple\/jobjc\/foundation\/NSPoint;/d' \ + -e '/[<>].*public com\.apple\.jobjc\.Pointer].*public void setItemsPtr(com\.apple\.jobjc\.Pointer $OTHER_FILE.cleaned + TMP=$(LANG=C $DIFF $OTHER_FILE.cleaned $THIS_FILE) + fi + if test -n "$TMP"; then + echo Files $OTHER_FILE and $THIS_FILE differ + return 1 + fi + + return 0 +} + +########################################################################################## +# Compare directory structure + +compare_dirs() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + mkdir -p $WORK_DIR + + (cd $OTHER_DIR && $FIND . -type d | $SORT > $WORK_DIR/dirs_other) + (cd $THIS_DIR && $FIND . -type d | $SORT > $WORK_DIR/dirs_this) + + $DIFF $WORK_DIR/dirs_other $WORK_DIR/dirs_other > $WORK_DIR/dirs_diff + + echo -n Directory structure... + if [ -s $WORK_DIR/dirs_diff ]; then + echo Differences found. + REGRESSIONS=true + # Differences in directories found. + ONLY_OTHER=$($GREP '<' $WORK_DIR/dirs_diff) + if [ "$ONLY_OTHER" ]; then + echo Only in $OTHER + $GREP '<' $WORK_DIR/dirs_diff | $SED 's|< ./| |g' + fi + ONLY_THIS=$($GREP '>' $WORK_DIR/dirs_diff) + if [ "$ONLY_THIS" ]; then + echo Only in $THIS + $GREP '>' $WORK_DIR/dirs_diff | $SED 's|> ./| |g' + fi + else + echo Identical! + fi +} + + +########################################################################################## +# Compare file structure + +compare_files() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + $MKDIR -p $WORK_DIR + + (cd $OTHER_DIR && $FIND . ! -type d | $SORT > $WORK_DIR/files_other) + (cd $THIS_DIR && $FIND . ! -type d | $SORT > $WORK_DIR/files_this) + + $DIFF $WORK_DIR/files_other $WORK_DIR/files_this > $WORK_DIR/files_diff + + echo -n File names... + if [ -s $WORK_DIR/files_diff ]; then + echo Differences found. + REGRESSIONS=true + # Differences in files found. + ONLY_OTHER=$($GREP '<' $WORK_DIR/files_diff) + if [ "$ONLY_OTHER" ]; then + echo Only in $OTHER + $GREP '<' $WORK_DIR/files_diff | $SED 's|< ./| |g' + fi + ONLY_THIS=$($GREP '>' $WORK_DIR/files_diff) + if [ "$ONLY_THIS" ]; then + echo Only in $THIS + $GREP '>' $WORK_DIR/files_diff | $SED 's|> ./| |g' + fi + else + echo Identical! + fi +} + + +########################################################################################## +# Compare permissions + +compare_permissions() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + mkdir -p $WORK_DIR + + echo -n Permissions... + found="" + for f in `cd $OTHER_DIR && $FIND . -type f` + do + if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi + if [ ! -f ${THIS_DIR}/$f ]; then continue; fi + OP=`ls -l ${OTHER_DIR}/$f | awk '{printf("%.10s\n", $1);}'` + TP=`ls -l ${THIS_DIR}/$f | awk '{printf("%.10s\n", $1);}'` + if [ "$OP" != "$TP" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + $PRINTF "\told: ${OP} new: ${TP}\t$f\n" + fi + done + if [ -z "$found" ]; then + echo "Identical!" + else + REGRESSIONS=true + fi +} + +########################################################################################## +# Compare file command output + +compare_file_types() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + $MKDIR -p $WORK_DIR + + echo -n File types... + found="" + for f in `cd $OTHER_DIR && $FIND . ! -type d` + do + if [ ! -f ${OTHER_DIR}/$f ]; then continue; fi + if [ ! -f ${THIS_DIR}/$f ]; then continue; fi + OF=`cd ${OTHER_DIR} && $FILE -h $f` + TF=`cd ${THIS_DIR} && $FILE -h $f` + if [ "$f" = "./src.zip" ] || [[ "$f" = *"/Home/src.zip" ]] || [[ "$f" = *"/lib/JObjC.jar" ]] + then + if [ "`echo $OF | $GREP -ic zip`" -gt 0 -a "`echo $TF | $GREP -ic zip`" -gt 0 ] + then + # the way we produces zip-files make it so that directories are stored in old file + # but not in new (only files with full-path) + # this makes file-5.09 report them as different + continue; + fi + fi + + if [ "$OF" != "$TF" ] + then + if [ -z "$found" ]; then echo ; found="yes"; fi + $PRINTF "\tother: ${OF}\n\tthis : ${TF}\n" + fi + done + if [ -z "$found" ]; then + echo "Identical!" + else + REGRESSIONS=true + fi +} + +########################################################################################## +# Compare the rest of the files + +compare_general_files() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + GENERAL_FILES=$(cd $THIS_DIR && $FIND . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ + ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ + ! -name "ct.sym" ! -name "*.diz" ! -name "*.dll" \ + ! -name "*.pdb" ! -name "*.exp" ! -name "*.ilk" \ + ! -name "*.lib" ! -name "*.war" \ + | $GREP -v "./bin/" | $SORT | $FILTER) + + echo General files... + for f in $GENERAL_FILES + do + if [ -e $OTHER_DIR/$f ]; then + if [ "$(basename $f)" = "release" ]; then + # Ignore differences in change numbers in release file. + OTHER_FILE=$WORK_DIR/$f.other + THIS_FILE=$WORK_DIR/$f.this + $MKDIR -p $(dirname $OTHER_FILE) + $MKDIR -p $(dirname $THIS_FILE) + $CAT $OTHER_DIR/$f | $SED 's/\:[0-9a-f]\{12,12\}/:CHANGE/g' > $OTHER_FILE + $CAT $THIS_DIR/$f | $SED 's/\:[0-9a-f]\{12,12\}/:CHANGE/g' > $THIS_FILE + else + OTHER_FILE=$OTHER_DIR/$f + THIS_FILE=$THIS_DIR/$f + fi + DIFF_OUT=$($DIFF $OTHER_FILE $THIS_FILE 2>&1) + if [ -n "$DIFF_OUT" ]; then + echo $f + REGRESSIONS=true + if [ "$SHOW_DIFFS" = "true" ]; then + echo "$DIFF_OUT" + fi + fi + fi + done + + +} + +########################################################################################## +# Compare zip file + +compare_zip_file() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + ZIP_FILE=$4 + + THIS_ZIP=$THIS_DIR/$ZIP_FILE + OTHER_ZIP=$OTHER_DIR/$ZIP_FILE + + THIS_SUFFIX="${THIS_ZIP##*.}" + OTHER_SUFFIX="${OTHER_ZIP##*.}" + if [ "$THIS_SUFFIX" != "$OTHER_SUFFIX" ]; then + echo The files do not have the same suffix type! + return 2 + fi + + TYPE="$THIS_SUFFIX" + + if $CMP $OTHER_ZIP $THIS_ZIP > /dev/null + then + return 0 + fi + # Not quite identical, the might still contain the same data. + # Unpack the jar/zip files in temp dirs + + THIS_UNZIPDIR=$WORK_DIR/$ZIP_FILE.this + OTHER_UNZIPDIR=$WORK_DIR/$ZIP_FILE.other + $RM -rf $THIS_UNZIPDIR $OTHER_UNZIPDIR + $MKDIR -p $THIS_UNZIPDIR + $MKDIR -p $OTHER_UNZIPDIR + (cd $THIS_UNZIPDIR && $UNARCHIVE $THIS_ZIP) + (cd $OTHER_UNZIPDIR && $UNARCHIVE $OTHER_ZIP) + + CONTENTS_DIFF_FILE=$WORK_DIR/$ZIP_FILE.diff + # On solaris, there is no -q option. + if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then + LANG=C $DIFF -r $OTHER_UNZIPDIR $THIS_UNZIPDIR \ + | $GREP -v -e "^<" -e "^>" -e "^Common subdirectories:" \ + > $CONTENTS_DIFF_FILE + else + LANG=C $DIFF -rq $OTHER_UNZIPDIR $THIS_UNZIPDIR > $CONTENTS_DIFF_FILE + fi + + ONLY_OTHER=$($GREP "^Only in $OTHER_UNZIPDIR" $CONTENTS_DIFF_FILE) + ONLY_THIS=$($GREP "^Only in $THIS_UNZIPDIR" $CONTENTS_DIFF_FILE) + + return_value=0 + + if [ -n "$ONLY_OTHER" ]; then + echo " Only OTHER $ZIP_FILE contains:" + echo "$ONLY_OTHER" | sed "s|Only in $OTHER_UNZIPDIR| |"g | sed 's|: |/|g' + return_value=1 + fi + + if [ -n "$ONLY_THIS" ]; then + echo " Only THIS $ZIP_FILE contains:" + echo "$ONLY_THIS" | sed "s|Only in $THIS_UNZIPDIR| |"g | sed 's|: |/|g' + return_value=1 + fi + + if [ "$OPENJDK_TARGET_OS" = "solaris" ]; then + DIFFING_FILES=$($GREP -e "differ$" -e "^diff " $CONTENTS_DIFF_FILE \ + | $CUT -f 3 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g") + else + DIFFING_FILES=$($GREP -e "differ$" $CONTENTS_DIFF_FILE \ + | $CUT -f 2 -d ' ' | $SED "s|$OTHER_UNZIPDIR/||g") + fi + + $RM -f $WORK_DIR/$ZIP_FILE.diffs + for file in $DIFFING_FILES; do + if [[ "$ACCEPTED_JARZIP_CONTENTS" != *"$file"* ]]; then + diff_text $OTHER_UNZIPDIR/$file $THIS_UNZIPDIR/$file >> $WORK_DIR/$ZIP_FILE.diffs + fi + done + + if [ -s "$WORK_DIR/$ZIP_FILE.diffs" ]; then + return_value=1 + echo " Differing files in $ZIP_FILE" + $CAT $WORK_DIR/$ZIP_FILE.diffs | $GREP differ | cut -f 2 -d ' ' | \ + $SED "s|$OTHER_UNZIPDIR| |g" > $WORK_DIR/$ZIP_FILE.difflist + $CAT $WORK_DIR/$ZIP_FILE.difflist + + if [ -n "$SHOW_DIFFS" ]; then + for i in $(cat $WORK_DIR/$ZIP_FILE.difflist) ; do + if [ -f "${OTHER_UNZIPDIR}/$i.javap" ]; then + LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.javap ${THIS_UNZIPDIR}/$i.javap + elif [ -f "${OTHER_UNZIPDIR}/$i.cleaned" ]; then + LANG=C $DIFF ${OTHER_UNZIPDIR}/$i.cleaned ${THIS_UNZIPDIR}/$i + else + LANG=C $DIFF ${OTHER_UNZIPDIR}/$i ${THIS_UNZIPDIR}/$i + fi + done + fi + fi + + return $return_value +} + + +########################################################################################## +# Compare all zip files + +compare_all_zip_files() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.zip" | $SORT | $FILTER ) + + if [ -n "$ZIPS" ]; then + echo Zip files... + + return_value=0 + for f in $ZIPS; do + if [ -f "$OTHER_DIR/$f" ]; then + compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f + if [ "$?" != "0" ]; then + return_value=1 + REGRESSIONS=true + fi + fi + done + fi + + return $return_value +} + +########################################################################################## +# Compare all jar files + +compare_all_jar_files() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + # TODO filter? + ZIPS=$(cd $THIS_DIR && $FIND . -type f -name "*.jar" -o -name "*.war" | $SORT | $FILTER) + + if [ -n "$ZIPS" ]; then + echo Jar files... + + return_value=0 + for f in $ZIPS; do + if [ -f "$OTHER_DIR/$f" ]; then + compare_zip_file $THIS_DIR $OTHER_DIR $WORK_DIR $f + if [ "$?" != "0" ]; then + return_value=1 + REGRESSIONS=true + fi + fi + done + fi + + return $return_value +} + +########################################################################################## +# Compare binary (executable/library) file + +compare_bin_file() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + BIN_FILE=$4 + + THIS_FILE=$THIS_DIR/$BIN_FILE + OTHER_FILE=$OTHER_DIR/$BIN_FILE + NAME=$(basename $BIN_FILE) + WORK_FILE_BASE=$WORK_DIR/$BIN_FILE + FILE_WORK_DIR=$(dirname $WORK_FILE_BASE) + + $MKDIR -p $FILE_WORK_DIR + + ORIG_THIS_FILE="$THIS_FILE" + ORIG_OTHER_FILE="$OTHER_FILE" + + if [[ "$STRIP_BEFORE_COMPARE" = *"$BIN_FILE"* ]]; then + THIS_STRIPPED_FILE=$FILE_WORK_DIR/this/$NAME + OTHER_STRIPPED_FILE=$FILE_WORK_DIR/other/$NAME + $MKDIR -p $FILE_WORK_DIR/this $FILE_WORK_DIR/other + $CP $THIS_FILE $THIS_STRIPPED_FILE + $CP $OTHER_FILE $OTHER_STRIPPED_FILE + $STRIP $THIS_STRIPPED_FILE + $STRIP $OTHER_STRIPPED_FILE + THIS_FILE="$THIS_STRIPPED_FILE" + OTHER_FILE="$OTHER_STRIPPED_FILE" + fi + + if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + unset _NT_SYMBOL_PATH + # On windows we need to unzip the debug symbols, if present + OTHER_FILE_BASE=${OTHER_FILE/.dll/} + OTHER_FILE_BASE=${OTHER_FILE_BASE/.exe/} + DIZ_NAME=$(basename $OTHER_FILE_BASE).diz + # java.exe and java.dll diz files will have the same name. Have to + # make sure java.exe gets the right one. This is only needed for + # OTHER since in the new build, all pdb files are left around. + if [ "$NAME" = "java.exe" ] && [ -f "$OTHER/tmp/java/java/obj64/java.diz" ]; then + OTHER_DIZ_FILE="$OTHER/tmp/java/java/obj64/java.diz" + elif [ -f "${OTHER_FILE_BASE}.diz" ]; then + OTHER_DIZ_FILE=${OTHER_FILE_BASE}.diz + else + # Some files, jli.dll, appears twice in the image but only one of + # thme has a diz file next to it. + OTHER_DIZ_FILE="$($FIND $OTHER_DIR -name $DIZ_NAME | $SED 1q)" + if [ ! -f "$OTHER_DIZ_FILE" ]; then + # As a last resort, look for diz file in the whole build output + # dir. + OTHER_DIZ_FILE="$($FIND $OTHER -name $DIZ_NAME | $SED 1q)" + fi + fi + if [ -n "$OTHER_DIZ_FILE" ]; then + $MKDIR -p $FILE_WORK_DIR/other + (cd $FILE_WORK_DIR/other ; $UNARCHIVE -o $OTHER_DIZ_FILE) + export _NT_SYMBOL_PATH="$FILE_WORK_DIR/other" + fi + THIS_FILE_BASE=${THIS_FILE/.dll/} + THIS_FILE_BASE=${THIS_FILE_BASE/.exe/} + if [ -f "${THIS_FILE/.dll/}.diz" ]; then + THIS_DIZ_FILE=${THIS_FILE/.dll/}.diz + else + THIS_DIZ_FILE="$($FIND $THIS_DIR -name $DIZ_NAME | $SED 1q)" + if [ ! -f "$THIS_DIZ_FILE" ]; then + # As a last resort, look for diz file in the whole build output + # dir. + THIS_DIZ_FILE="$($FIND $THIS -name $DIZ_NAME | $SED 1q)" + fi + fi + if [ -n "$THIS_DIZ_FILE" ]; then + $MKDIR -p $FILE_WORK_DIR/this + (cd $FILE_WORK_DIR/this ; $UNARCHIVE -o $THIS_DIZ_FILE) + export _NT_SYMBOL_PATH="$_NT_SYMBOL_PATH;$FILE_WORK_DIR/this" + fi + fi + + if [ -z "$SKIP_BIN_DIFF" ]; then + if cmp $OTHER_FILE $THIS_FILE > /dev/null; then + # The files were bytewise identical. + if [ -n "$VERBOSE" ]; then + echo " : : : : : $BIN_FILE" + fi + return 0 + fi + BIN_MSG=" diff " + if [[ "$ACCEPTED_BIN_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_BIN=true + if [[ "$KNOWN_BIN_DIFF" != *"$BIN_FILE"* ]]; then + BIN_MSG="*$BIN_MSG*" + REGRESSIONS=true + else + BIN_MSG=" $BIN_MSG " + fi + else + BIN_MSG="($BIN_MSG)" + DIFF_BIN= + fi + fi + + if [ -n "$STAT" ]; then + THIS_SIZE=$($STAT $STAT_PRINT_SIZE "$THIS_FILE") + OTHER_SIZE=$($STAT $STAT_PRINT_SIZE "$OTHER_FILE") + else + THIS_SIZE=$(ls -l "$THIS_FILE" | awk '{ print $5 }') + OTHER_SIZE=$(ls -l "$OTHER_FILE" | awk '{ print $5 }') + fi + if [ $THIS_SIZE -ne $OTHER_SIZE ]; then + DIFF_SIZE_NUM=$($EXPR $THIS_SIZE - $OTHER_SIZE) + DIFF_SIZE_REL=$($EXPR $THIS_SIZE \* 100 / $OTHER_SIZE) + SIZE_MSG=$($PRINTF "%3d%% %4d" $DIFF_SIZE_REL $DIFF_SIZE_NUM) + if [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* ]] && [ "$DIFF_SIZE_REL" -gt 98 ] && [ "$DIFF_SIZE_REL" -lt 102 ]; then + SIZE_MSG="($SIZE_MSG)" + DIFF_SIZE= + elif [[ "$ACCEPTED_SMALL_SIZE_DIFF" = *"$BIN_FILE"* ]] && [ "$DIFF_SIZE_NUM" = 512 ]; then + # On windows, size of binaries increase in 512 increments. + SIZE_MSG="($SIZE_MSG)" + DIFF_SIZE= + else + if [[ "$ACCEPTED_SIZE_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_SIZE=true + if [[ "$KNOWN_SIZE_DIFF" != *"$BIN_FILE"* ]]; then + SIZE_MSG="*$SIZE_MSG*" + REGRESSIONS=true + else + SIZE_MSG=" $SIZE_MSG " + fi + else + SIZE_MSG="($SIZE_MSG)" + DIFF_SIZE= + fi + fi + else + SIZE_MSG=" " + DIFF_SIZE= + if [[ "$KNOWN_SIZE_DIFF $ACCEPTED_SIZE_DIFF" = *"$BIN_FILE"* ]]; then + SIZE_MSG=" ! " + fi + fi + + if [[ "$SORT_SYMBOLS" = *"$BIN_FILE"* ]]; then + SYM_SORT_CMD="sort" + else + SYM_SORT_CMD="cat" + fi + + # Check symbols + if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + # The output from dumpbin on windows differs depending on if the debug symbol + # files are still around at the location the binary is pointing too. Need + # to filter out that extra information. + $DUMPBIN -exports $OTHER_FILE | $GREP -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other + $DUMPBIN -exports $THIS_FILE | $GREP -E '^ +[0-9A-F]+ +[0-9A-F]+ [0-9A-F]+' | sed 's/ = .*//g' | cut -c27- | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this + elif [ "$OPENJDK_TARGET_OS" = "solaris" ]; then + # Some symbols get seemingly random 15 character prefixes. Filter them out. + $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] [\.\$]\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other + $NM -a $ORIG_THIS_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SED 's/^\([a-zA-Z] [\.\$]\)[a-zA-Z0-9_\$]\{15,15\}\./\1./g' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this + else + $NM -a $ORIG_OTHER_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.other + $NM -a $ORIG_THIS_FILE 2> /dev/null | $GREP -v $NAME | $AWK '{print $2, $3, $4, $5}' | $SYM_SORT_CMD > $WORK_FILE_BASE.symbols.this + fi + + LANG=C $DIFF $WORK_FILE_BASE.symbols.other $WORK_FILE_BASE.symbols.this > $WORK_FILE_BASE.symbols.diff + if [ -s $WORK_FILE_BASE.symbols.diff ]; then + SYM_MSG=" diff " + if [[ "$ACCEPTED_SYM_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_SYM=true + if [[ "$KNOWN_SYM_DIFF" != *"$BIN_FILE"* ]]; then + SYM_MSG="*$SYM_MSG*" + REGRESSIONS=true + else + SYM_MSG=" $SYM_MSG " + fi + else + SYM_MSG="($SYM_MSG)" + DIFF_SYM= + fi + else + SYM_MSG=" " + DIFF_SYM= + if [[ "$KNOWN_SYM_DIFF $ACCEPTED_SYM_DIFF" = *"$BIN_FILE"* ]]; then + SYM_MSG=" ! " + fi + fi + + # Check dependencies + if [ -n "$LDD_CMD" ]; then + (cd $FILE_WORK_DIR && $CP $OTHER_FILE . && $LDD_CMD $NAME | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.other | $UNIQ > $WORK_FILE_BASE.deps.other.uniq) + (cd $FILE_WORK_DIR && $CP $THIS_FILE . && $LDD_CMD $NAME | $AWK '{ print $1;}' | $SORT | $TEE $WORK_FILE_BASE.deps.this | $UNIQ > $WORK_FILE_BASE.deps.this.uniq) + (cd $FILE_WORK_DIR && $RM -f $NAME) + + LANG=C $DIFF $WORK_FILE_BASE.deps.other $WORK_FILE_BASE.deps.this > $WORK_FILE_BASE.deps.diff + LANG=C $DIFF $WORK_FILE_BASE.deps.other.uniq $WORK_FILE_BASE.deps.this.uniq > $WORK_FILE_BASE.deps.diff.uniq + + if [ -s $WORK_FILE_BASE.deps.diff ]; then + if [ -s $WORK_FILE_BASE.deps.diff.uniq ]; then + DEP_MSG=" diff " + else + DEP_MSG=" redun " + fi + if [[ "$ACCEPTED_DEP_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_DEP=true + if [[ "$KNOWN_DEP_DIFF" != *"$BIN_FILE"* ]]; then + DEP_MSG="*$DEP_MSG*" + REGRESSIONS=true + else + DEP_MSG=" $DEP_MSG " + fi + else + DEP_MSG="($DEP_MSG)" + DIFF_DEP= + fi + else + DEP_MSG=" " + DIFF_DEP= + if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then + DEP_MSG=" ! " + fi + fi + else + DEP_MSG=" - " + fi + + # Compare fulldump output + if [ -n "$FULLDUMP_CMD" ] && [ -z "$SKIP_FULLDUMP_DIFF" ]; then + $FULLDUMP_CMD $OTHER_FILE > $WORK_FILE_BASE.fulldump.other 2>&1 + $FULLDUMP_CMD $THIS_FILE > $WORK_FILE_BASE.fulldump.this 2>&1 + LANG=C $DIFF $WORK_FILE_BASE.fulldump.other $WORK_FILE_BASE.fulldump.this > $WORK_FILE_BASE.fulldump.diff + + if [ -s $WORK_FILE_BASE.fulldump.diff ]; then + ELF_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.fulldump.diff | awk '{print $5}') + ELF_MSG=$($PRINTF "%8d" $ELF_DIFF_SIZE) + if [[ "$ACCEPTED_ELF_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_ELF=true + if [[ "$KNOWN_ELF_DIFF" != *"$BIN_FILE"* ]]; then + ELF_MSG="*$ELF_MSG*" + REGRESSIONS=true + else + ELF_MSG=" $ELF_MSG " + fi + else + ELF_MSG="($ELF_MSG)" + DIFF_ELF= + fi + else + ELF_MSG=" " + DIFF_ELF= + if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then + ELF_MSG=" ! " + fi + fi + fi + + # Compare disassemble output + if [ -n "$DIS_CMD" ] && [ -z "$SKIP_DIS_DIFF" ]; then + if [ -z "$DIS_DIFF_FILTER" ]; then + DIS_DIFF_FILTER="$CAT" + fi + $DIS_CMD $OTHER_FILE | $GREP -v $NAME | $DIS_DIFF_FILTER > $WORK_FILE_BASE.dis.other 2>&1 + $DIS_CMD $THIS_FILE | $GREP -v $NAME | $DIS_DIFF_FILTER > $WORK_FILE_BASE.dis.this 2>&1 + + LANG=C $DIFF $WORK_FILE_BASE.dis.other $WORK_FILE_BASE.dis.this > $WORK_FILE_BASE.dis.diff + + if [ -s $WORK_FILE_BASE.dis.diff ]; then + DIS_DIFF_SIZE=$(ls -n $WORK_FILE_BASE.dis.diff | awk '{print $5}') + DIS_MSG=$($PRINTF "%8d" $DIS_DIFF_SIZE) + if [[ "$ACCEPTED_DIS_DIFF" != *"$BIN_FILE"* ]]; then + DIFF_DIS=true + if [[ "$KNOWN_DIS_DIFF" != *"$BIN_FILE"* ]]; then + DIS_MSG="*$DIS_MSG*" + REGRESSIONS=true + else + DIS_MSG=" $DIS_MSG " + fi + else + DIS_MSG="($DIS_MSG)" + DIFF_DIS= + fi + else + DIS_MSG=" " + DIFF_DIS= + if [[ "$KNOWN_DEP_DIFF $ACCEPTED_DEP_DIFF" = *"$BIN_FILE"* ]]; then + DIS_MSG=" ! " + fi + fi + fi + + + if [ -n "$DIFF_BIN$DIFF_SIZE$DIFF_SYM$DIFF_DEP$DIFF_ELF$DIFF_DIS" ] || [ -n "$VERBOSE" ]; then + if [ -n "$BIN_MSG" ]; then echo -n "$BIN_MSG:"; fi + if [ -n "$SIZE_MSG" ]; then echo -n "$SIZE_MSG:"; fi + if [ -n "$SYM_MSG" ]; then echo -n "$SYM_MSG:"; fi + if [ -n "$DEP_MSG" ]; then echo -n "$DEP_MSG:"; fi + if [ -n "$ELF_MSG" ]; then echo -n "$ELF_MSG:"; fi + if [ -n "$DIS_MSG" ]; then echo -n "$DIS_MSG:"; fi + echo " $BIN_FILE" + if [ "$SHOW_DIFFS" = "true" ]; then + if [ -s "$WORK_FILE_BASE.symbols.diff" ]; then + echo "Symbols diff:" + $CAT $WORK_FILE_BASE.symbols.diff + fi + if [ -s "$WORK_FILE_BASE.deps.diff" ]; then + echo "Deps diff:" + $CAT $WORK_FILE_BASE.deps.diff + fi + if [ -s "$WORK_FILE_BASE.fulldump.diff" ]; then + echo "Fulldump diff:" + $CAT $WORK_FILE_BASE.fulldump.diff + fi + if [ -s "$WORK_FILE_BASE.dis.diff" ]; then + echo "Disassembly diff:" + $CAT $WORK_FILE_BASE.dis.diff + fi + fi + return 1 + fi + return 0 +} + +########################################################################################## +# Print binary diff header + +print_binary_diff_header() { + if [ -z "$SKIP_BIN_DIFF" ]; then echo -n " Binary :"; fi + if [ -z "$SKIP_SIZE_DIFF" ]; then echo -n " Size :"; fi + if [ -z "$SKIP_SYM_DIFF" ]; then echo -n " Symbols :"; fi + if [ -z "$SKIP_DEP_DIFF" ]; then echo -n " Deps :"; fi + if [ -z "$SKIP_FULLDUMP_DIFF" ]; then echo -n " Fulldump :"; fi + if [ -z "$SKIP_DIS_DIFF" ]; then echo -n " Disass :"; fi + echo +} + +########################################################################################## +# Compare all libraries + +compare_all_libs() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + LIBS=$(cd $THIS_DIR && $FIND . -type f \( -name 'lib*.so' -o -name '*.dylib' -o -name '*.dll' \) | $SORT | $FILTER) + + if [ -n "$LIBS" ]; then + echo Libraries... + print_binary_diff_header + for l in $LIBS; do + if [ -f "$OTHER_DIR/$l" ]; then + compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $l + if [ "$?" != "0" ]; then + return_value=1 + fi + fi + done + fi + + return $return_value +} + +########################################################################################## +# Compare all executables + +compare_all_execs() { + THIS_DIR=$1 + OTHER_DIR=$2 + WORK_DIR=$3 + + if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + EXECS=$(cd $THIS_DIR && $FIND . -type f -name '*.exe' | $SORT | $FILTER) + else + EXECS=$(cd $THIS_DIR && $FIND . -name db -prune -o -type f -perm -100 \! \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' -o -name '*.cgi' -o -name '*.jar' -o -name '*.diz' \) | $SORT | $FILTER) + fi + + if [ -n "$EXECS" ]; then + echo Executables... + print_binary_diff_header + for e in $EXECS; do + if [ -f "$OTHER_DIR/$e" ]; then + compare_bin_file $THIS_DIR $OTHER_DIR $WORK_DIR $e + if [ "$?" != "0" ]; then + return_value=1 + fi + fi + done + fi + + return $return_value +} + +########################################################################################## +# Initiate configuration + +COMPARE_ROOT=/tmp/cimages.$USER +$MKDIR -p $COMPARE_ROOT +if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + if [ "$(uname -o)" = "Cygwin" ]; then + COMPARE_ROOT=$(cygpath -msa $COMPARE_ROOT) + fi +fi + +THIS="$( cd "$( dirname "$0" )" && pwd )" +echo "$THIS" +THIS_SCRIPT="$0" + +if [ -z "$1" ] || [ "$1" = "-h" ] || [ "$1" = "-?" ] || [ "$1" = "/h" ] || [ "$1" = "/?" ] || [ "$1" = "-help" ] || [ "$1" = "--help" ]; then + echo "bash ./compare.sh [OPTIONS] [FILTER]" + echo "" + echo "-all Compare all files in all known ways" + echo "-names Compare the file names and directory structure" + echo "-perms Compare the permission bits on all files and directories" + echo "-types Compare the output of the file command on all files" + echo "-general Compare the files not convered by the specialized comparisons" + echo "-zips Compare the contents of all zip files" + echo "-jars Compare the contents of all jar files" + echo "-libs Compare all native libraries" + echo "-execs Compare all executables" + echo "-v Verbose output, does not hide known differences" + echo "-vv More verbose output, shows diff output of all comparisons" + echo "-o [OTHER] Compare with build in other directory. Will default to the old build directory" + echo "" + echo "[FILTER] List filenames in the image to compare, works for jars, zips, libs and execs" + echo "Example:" + echo "bash ./common/bin/compareimages.sh CodePointIM.jar" + exit 10 +fi + +CMP_NAMES=false +CMP_PERMS=false +CMP_TYPES=false +CMP_GENERAL=false +CMP_ZIPS=false +CMP_JARS=false +CMP_LIBS=false +CMP_EXECS=false + +while [ -n "$1" ]; do + case "$1" in + -v) + VERBOSE=true + ;; + -vv) + VERBOSE=true + SHOW_DIFFS=true + ;; + -o) + OTHER="$2" + shift + ;; + -all) + CMP_NAMES=true + if [ "$OPENJDK_TARGET_OS" != "windows" ]; then + CMP_PERMS=true + fi + CMP_TYPES=true + CMP_GENERAL=true + CMP_ZIPS=true + CMP_JARS=true + CMP_LIBS=true + CMP_EXECS=true + ;; + -names) + CMP_NAMES=true + ;; + -perms) + CMP_PERMS=true + ;; + -types) + CMP_TYPES=true + ;; + -general) + CMP_GENERAL=true + ;; + -zips) + CMP_ZIPS=true + ;; + -jars) + CMP_JARS=true + ;; + -libs) + CMP_LIBS=true + ;; + -execs) + CMP_EXECS=true + ;; + *) + CMP_NAMES=false + CMP_PERMS=false + CMP_TYPES=false + CMP_ZIPS=true + CMP_JARS=true + CMP_LIBS=true + CMP_EXECS=true + + if [ -z "$FILTER" ]; then + FILTER="$GREP" + fi + FILTER="$FILTER -e $1" + ;; + esac + shift +done + +if [ "$CMP_NAMES" = "false" ] && [ "$CMP_TYPES" = "false" ] && [ "$CMP_PERMS" = "false" ] && [ "$CMP_GENERAL" = "false" ] && [ "$CMP_ZIPS" = "false" ] && [ "$CMP_JARS" = "false" ] && [ "$CMP_LIBS" = "false" ] && [ "$CMP_EXECS" = "false" ]; then + CMP_NAMES=true + CMP_PERMS=true + CMP_TYPES=true + CMP_GENERAL=true + CMP_ZIPS=true + CMP_JARS=true + CMP_LIBS=true + CMP_EXECS=true +fi + +if [ -z "$FILTER" ]; then + FILTER="$CAT" +fi + +if [ -z "$OTHER" ]; then + OTHER="$THIS/../$LEGACY_BUILD_DIR" + if [ -d "$OTHER" ]; then + OTHER="$( cd "$OTHER" && pwd )" + else + echo "Default old build directory does not exist:" + echo "$OTHER" + exit 1 + fi + echo "Comparing to default old build:" + echo "$OTHER" + echo +else + if [ ! -d "$OTHER" ]; then + echo "Other build directory does not exist:" + echo "$OTHER" + exit 1 + fi + OTHER="$( cd "$OTHER" && pwd )" + echo "Comparing to:" + echo "$OTHER" + echo +fi + + +# Figure out the layout of the this build. Which kinds of images have been produced +if [ -d "$THIS/deploy/j2sdk-image" ]; then + THIS_J2SDK="$THIS/deploy/j2sdk-image" + THIS_J2RE="$THIS/deploy/j2re-image" +elif [ -d "$THIS/images/j2sdk-image" ]; then + THIS_J2SDK="$THIS/images/j2sdk-image" + THIS_J2RE="$THIS/images/j2re-image" +fi +if [ -d "$THIS/images/j2sdk-overlay-image" ]; then + THIS_J2SDK_OVERLAY="$THIS/images/j2sdk-overlay-image" + THIS_J2RE_OVERLAY="$THIS/images/j2re-overlay-image" +fi + +if [ -d "$THIS/images/j2sdk-bundle" ]; then + THIS_J2SDK_BUNDLE="$THIS/images/j2sdk-bundle" + THIS_J2RE_BUNDLE="$THIS/images/j2re-bundle" +fi + +# Figure out the layout of the other build (old or new, normal or overlay image) +if [ -d "$OTHER/j2sdk-image" ]; then + if [ -f "$OTHER/j2sdk-image/LICENSE" ]; then + OTHER_J2SDK="$OTHER/j2sdk-image" + OTHER_J2RE="$OTHER/j2re-image" + else + OTHER_J2SDK_OVERLAY="$OTHER/j2sdk-image" + OTHER_J2RE_OVERLAY="$OTHER/j2re-image" + fi + +fi + +if [ -d "$OTHER/j2sdk-bundle" ]; then + OTHER_J2SDK_BUNDLE="$OTHER/j2sdk-bundle" + OTHER_J2RE_BUNDLE="$OTHER/j2re-bundle" +elif [ -d "$OTHER/images/j2sdk-bundle" ]; then + OTHER_J2SDK_BUNDLE="$OTHER/images/j2sdk-bundle" + OTHER_J2RE_BUNDLE="$OTHER/images/j2re-bundle" +fi + +if [ -z "$THIS_J2SDK" ] || [ -z "$THIS_J2RE" ]; then + if [ -z "$THIS_J2SDK_OVERLAY" ]; then + echo "Cannot locate images for this build. Are you sure you have run 'make images'?" + exit 1 + fi +fi + +if [ -z "$OTHER_J2SDK" ] && [ -n "$OTHER_J2SDK_OVERLAY" ] && [ -z "$THIS_J2SDK_OVERLAY" ]; then + echo "OTHER build only has an overlay image while this build does not. Nothing to compare!" + exit 1 +fi + +if [ -z "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo "WARNING! OTHER build has bundles built while this build does not." + echo "Skipping bundle compare!" +fi + +########################################################################################## +# Do the work + +if [ "$CMP_NAMES" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + echo -n "J2SDK " + compare_dirs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_dirs $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + + echo -n "J2SDK " + compare_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "J2SDK Overlay " + compare_dirs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_dirs $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + + echo -n "J2SDK Overlay " + compare_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + fi + if [ -n "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo -n "J2SDK Bundle " + compare_dirs $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_dirs $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + + echo -n "J2SDK Bundle " + compare_files $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_files $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + fi +fi + +if [ "$CMP_PERMS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + echo -n "J2SDK " + compare_permissions $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_permissions $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "J2SDK Overlay " + compare_permissions $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_permissions $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + fi + if [ -n "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo -n "J2SDK Bundle " + compare_permissions $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_permissions $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + fi +fi + +if [ "$CMP_TYPES" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + echo -n "J2SDK " + compare_file_types $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_file_types $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "J2SDK Overlay " + compare_file_types $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_file_types $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + fi + if [ -n "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo -n "J2SDK Bundle " + compare_file_types $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_file_types $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + fi +fi + +if [ "$CMP_GENERAL" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + echo -n "J2SDK " + compare_general_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + echo -n "J2RE " + compare_general_files $THIS_J2RE $OTHER_J2RE $COMPARE_ROOT/j2re + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "J2SDK Overlay " + compare_general_files $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + echo -n "J2RE Overlay " + compare_general_files $THIS_J2RE_OVERLAY $OTHER_J2RE_OVERLAY $COMPARE_ROOT/j2re-overlay + fi + if [ -n "$THIS_J2SDK_BUNDLE" ] && [ -n "$OTHER_J2SDK_BUNDLE" ]; then + echo -n "J2SDK Bundle " + compare_general_files $THIS_J2SDK_BUNDLE $OTHER_J2SDK_BUNDLE $COMPARE_ROOT/j2sdk-bundle + echo -n "J2RE Bundle " + compare_general_files $THIS_J2RE_BUNDLE $OTHER_J2RE_BUNDLE $COMPARE_ROOT/j2re-bundle + fi +fi + +if [ "$CMP_ZIPS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + compare_all_zip_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + fi +fi + +if [ "$CMP_JARS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + compare_all_jar_files $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + fi +fi + +if [ "$CMP_LIBS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + compare_all_libs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "Bundle " + compare_all_libs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + fi +fi + +if [ "$CMP_EXECS" = "true" ]; then + if [ -n "$THIS_J2SDK" ] && [ -n "$OTHER_J2SDK" ]; then + compare_all_execs $THIS_J2SDK $OTHER_J2SDK $COMPARE_ROOT/j2sdk + fi + if [ -n "$THIS_J2SDK_OVERLAY" ] && [ -n "$OTHER_J2SDK_OVERLAY" ]; then + echo -n "Overlay " + compare_all_execs $THIS_J2SDK_OVERLAY $OTHER_J2SDK_OVERLAY $COMPARE_ROOT/j2sdk-overlay + fi +fi + +echo + +if [ -n "$REGRESSIONS" ]; then + echo "REGRESSIONS FOUND!" + echo + exit 1 +else + echo "No regressions found" + echo + exit 0 +fi diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/compare_exceptions.sh.incl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/bin/compare_exceptions.sh.incl Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,935 @@ +#!/bin/bash +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# This script is not to be run as stand-alone, it should be included from +# compare.sh. + +########################################################################################## +# Check that we are run via inclusion from compare.sh and not as stand-alone. +if [ -z "$COMPARE_EXCEPTIONS_INCLUDE" ]; then + echo "Error: This script should not be run as stand-alone. It is included by compare.sh" + exit 1 +fi + +########################################################################################## +# Diff exceptions + +if [ "$OPENJDK_TARGET_OS" = "linux" ] && [ "$OPENJDK_TARGET_CPU" = "x86" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +" + +ACCEPTED_BIN_DIFF=" +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/i386/client/libjvm.so +./jre/lib/i386/libattach.so +./jre/lib/i386/libdt_socket.so +./jre/lib/i386/libhprof.so +./jre/lib/i386/libinstrument.so +./jre/lib/i386/libjava_crw_demo.so +./jre/lib/i386/libjsdt.so +./jre/lib/i386/libmanagement.so +./jre/lib/i386/libnpt.so +./jre/lib/i386/libverify.so +./jre/lib/i386/server/libjvm.so +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +" + +fi + +if [ "$OPENJDK_TARGET_OS" = "linux" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +" + +ACCEPTED_BIN_DIFF=" +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/amd64/libattach.so +./jre/lib/amd64/libdt_socket.so +./jre/lib/amd64/libhprof.so +./jre/lib/amd64/libinstrument.so +./jre/lib/amd64/libjava_crw_demo.so +./jre/lib/amd64/libjsdt.so +./jre/lib/amd64/libjsig.so +./jre/lib/amd64/libmanagement.so +./jre/lib/amd64/libnpt.so +./jre/lib/amd64/libsaproc.so +./jre/lib/amd64/libverify.so +./jre/lib/amd64/server/libjsig.so +./jre/lib/amd64/server/libjvm.so +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +" + +fi + +if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jni/Poller/lib/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/i386/jexec +" + +SORT_SYMBOLS=" +./jre/lib/i386/client/libjvm.so +./jre/lib/i386/libsaproc.so +./jre/lib/i386/server/libjvm.so +" + +SKIP_BIN_DIFF="true" + +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jni/Poller/lib/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/i386/client/libjvm.so +./jre/lib/i386/jli/libjli.so +./jre/lib/i386/libJdbcOdbc.so +./jre/lib/i386/libattach.so +./jre/lib/i386/libawt.so +./jre/lib/i386/libawt_headless.so +./jre/lib/i386/libawt_xawt.so +./jre/lib/i386/libdcpr.so +./jre/lib/i386/libdt_socket.so +./jre/lib/i386/libfontmanager.so +./jre/lib/i386/libhprof.so +./jre/lib/i386/libinstrument.so +./jre/lib/i386/libj2gss.so +./jre/lib/i386/libj2pcsc.so +./jre/lib/i386/libj2pkcs11.so +./jre/lib/i386/libj2ucrypto.so +./jre/lib/i386/libjaas_unix.so +./jre/lib/i386/libjava.so +./jre/lib/i386/libjava_crw_demo.so +./jre/lib/i386/libjawt.so +./jre/lib/i386/libjdwp.so +./jre/lib/i386/libjfr.so +./jre/lib/i386/libjpeg.so +./jre/lib/i386/libjsdt.so +./jre/lib/i386/libjsound.so +./jre/lib/i386/libkcms.so +./jre/lib/i386/liblcms.so +./jre/lib/i386/libmanagement.so +./jre/lib/i386/libmlib_image.so +./jre/lib/i386/libnet.so +./jre/lib/i386/libnio.so +./jre/lib/i386/libnpt.so +./jre/lib/i386/libsctp.so +./jre/lib/i386/libsplashscreen.so +./jre/lib/i386/libsunec.so +./jre/lib/i386/libsunwjdga.so +./jre/lib/i386/libt2k.so +./jre/lib/i386/libunpack.so +./jre/lib/i386/libverify.so +./jre/lib/i386/libzip.so +./jre/lib/i386/server/libjvm.so +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/unpack200 +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +./jre/bin/unpack200 +./jre/lib/i386/jexec +" + +SKIP_FULLDUMP_DIFF="true" + +# Filter random C++ symbol strings. +DIS_DIFF_FILTER="$SED -e s/\.[a-zA-Z0-9_\$]\{15,15\}//g" + +fi + +if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "x86_64" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jni/Poller/lib/amd64/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/amd64/libgctest.so +./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so +./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so +./demo/jvmti/hprof/lib/amd64/libhprof.so +./demo/jvmti/minst/lib/amd64/libminst.so +./demo/jvmti/mtrace/lib/amd64/libmtrace.so +./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so +./demo/jvmti/waiters/lib/amd64/libwaiters.so +" + +SORT_SYMBOLS=" +./jre/lib/amd64/server/libjvm.so +./jre/lib/amd64/libsaproc.so +" + +SKIP_BIN_DIFF="true" + +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jni/Poller/lib/amd64/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/amd64/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/amd64/libgctest.so +./demo/jvmti/heapTracker/lib/amd64/libheapTracker.so +./demo/jvmti/heapViewer/lib/amd64/libheapViewer.so +./demo/jvmti/hprof/lib/amd64/libhprof.so +./demo/jvmti/minst/lib/amd64/libminst.so +./demo/jvmti/mtrace/lib/amd64/libmtrace.so +./demo/jvmti/versionCheck/lib/amd64/libversionCheck.so +./demo/jvmti/waiters/lib/amd64/libwaiters.so +./jre/lib/amd64/jli/libjli.so +./jre/lib/amd64/libJdbcOdbc.so +./jre/lib/amd64/libattach.so +./jre/lib/amd64/libawt.so +./jre/lib/amd64/libawt_headless.so +./jre/lib/amd64/libawt_xawt.so +./jre/lib/amd64/libdcpr.so +./jre/lib/amd64/libdt_socket.so +./jre/lib/amd64/libfontmanager.so +./jre/lib/amd64/libhprof.so +./jre/lib/amd64/libinstrument.so +./jre/lib/amd64/libj2gss.so +./jre/lib/amd64/libj2pcsc.so +./jre/lib/amd64/libj2pkcs11.so +./jre/lib/amd64/libj2ucrypto.so +./jre/lib/amd64/libjaas_unix.so +./jre/lib/amd64/libjava.so +./jre/lib/amd64/libjava_crw_demo.so +./jre/lib/amd64/libjawt.so +./jre/lib/amd64/libjdwp.so +./jre/lib/amd64/libjfr.so +./jre/lib/amd64/libjpeg.so +./jre/lib/amd64/libjsdt.so +./jre/lib/amd64/libjsound.so +./jre/lib/amd64/libkcms.so +./jre/lib/amd64/liblcms.so +./jre/lib/amd64/libmanagement.so +./jre/lib/amd64/libmlib_image.so +./jre/lib/amd64/libnet.so +./jre/lib/amd64/libnio.so +./jre/lib/amd64/libnpt.so +./jre/lib/amd64/libsctp.so +./jre/lib/amd64/libsplashscreen.so +./jre/lib/amd64/libsunec.so +./jre/lib/amd64/libsunwjdga.so +./jre/lib/amd64/libt2k.so +./jre/lib/amd64/libunpack.so +./jre/lib/amd64/libverify.so +./jre/lib/amd64/libzip.so +./jre/lib/amd64/server/64/libjvm_db.so +./jre/lib/amd64/server/64/libjvm_dtrace.so +./bin/amd64/appletviewer +./bin/amd64/extcheck +./bin/amd64/idlj +./bin/amd64/jar +./bin/amd64/jarsigner +./bin/amd64/java +./bin/amd64/javac +./bin/amd64/javadoc +./bin/amd64/javah +./bin/amd64/javap +./bin/amd64/jcmd +./bin/amd64/jconsole +./bin/amd64/jdb +./bin/amd64/jhat +./bin/amd64/jinfo +./bin/amd64/jmap +./bin/amd64/jps +./bin/amd64/jrunscript +./bin/amd64/jsadebugd +./bin/amd64/jstack +./bin/amd64/jstat +./bin/amd64/jstatd +./bin/amd64/keytool +./bin/amd64/native2ascii +./bin/amd64/orbd +./bin/amd64/pack200 +./bin/amd64/policytool +./bin/amd64/rmic +./bin/amd64/rmid +./bin/amd64/rmiregistry +./bin/amd64/schemagen +./bin/amd64/serialver +./bin/amd64/servertool +./bin/amd64/tnameserv +./bin/amd64/unpack200 +./bin/amd64/wsgen +./bin/amd64/wsimport +./bin/amd64/xjc +./jre/bin/amd64/java +./jre/bin/amd64/keytool +./jre/bin/amd64/orbd +./jre/bin/amd64/pack200 +./jre/bin/amd64/policytool +./jre/bin/amd64/rmid +./jre/bin/amd64/rmiregistry +./jre/bin/amd64/servertool +./jre/bin/amd64/tnameserv +./jre/bin/amd64/unpack200 +./jre/lib/amd64/jexec +" + +SKIP_FULLDUMP_DIFF="true" + +# Filter random C++ symbol strings. +DIS_DIFF_FILTER="$SED -e s/\.[a-zA-Z0-9_\$]\{15,15\}//g" + +fi + +if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "sparc" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jni/Poller/lib/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/sparc/jexec +" + +SORT_SYMBOLS=" +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/sparc/client/64/libjvm_db.so +./jre/lib/sparc/client/64/libjvm_dtrace.so +./jre/lib/sparc/client/libjsig.so +./jre/lib/sparc/client/libjvm.so +./jre/lib/sparc/client/libjvm_db.so +./jre/lib/sparc/client/libjvm_dtrace.so +./jre/lib/sparc/libjsig.so +./jre/lib/sparc/libsaproc.so +./jre/lib/sparc/server/64/libjvm_db.so +./jre/lib/sparc/server/64/libjvm_dtrace.so +./jre/lib/sparc/server/libjsig.so +./jre/lib/sparc/server/libjvm.so +./jre/lib/sparc/server/libjvm_db.so +./jre/lib/sparc/server/libjvm_dtrace.so +" + +SKIP_BIN_DIFF="true" + +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jni/Poller/lib/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/libgctest.so +./demo/jvmti/heapTracker/lib/libheapTracker.so +./demo/jvmti/heapViewer/lib/libheapViewer.so +./demo/jvmti/hprof/lib/libhprof.so +./demo/jvmti/minst/lib/libminst.so +./demo/jvmti/mtrace/lib/libmtrace.so +./demo/jvmti/versionCheck/lib/libversionCheck.so +./demo/jvmti/waiters/lib/libwaiters.so +./jre/lib/sparc/client/libjvm.so +./jre/lib/sparc/jli/libjli.so +./jre/lib/sparc/libJdbcOdbc.so +./jre/lib/sparc/libattach.so +./jre/lib/sparc/libawt.so +./jre/lib/sparc/libawt_headless.so +./jre/lib/sparc/libawt_xawt.so +./jre/lib/sparc/libdcpr.so +./jre/lib/sparc/libdt_socket.so +./jre/lib/sparc/libfontmanager.so +./jre/lib/sparc/libhprof.so +./jre/lib/sparc/libinstrument.so +./jre/lib/sparc/libj2gss.so +./jre/lib/sparc/libj2pcsc.so +./jre/lib/sparc/libj2pkcs11.so +./jre/lib/sparc/libj2ucrypto.so +./jre/lib/sparc/libjaas_unix.so +./jre/lib/sparc/libjava.so +./jre/lib/sparc/libjava_crw_demo.so +./jre/lib/sparc/libjawt.so +./jre/lib/sparc/libjdwp.so +./jre/lib/sparc/libjfr.so +./jre/lib/sparc/libjpeg.so +./jre/lib/sparc/libjsdt.so +./jre/lib/sparc/libjsound.so +./jre/lib/sparc/libkcms.so +./jre/lib/sparc/liblcms.so +./jre/lib/sparc/libmanagement.so +./jre/lib/sparc/libmlib_image.so +./jre/lib/sparc/libmlib_image_v.so +./jre/lib/sparc/libnet.so +./jre/lib/sparc/libnio.so +./jre/lib/sparc/libnpt.so +./jre/lib/sparc/libsctp.so +./jre/lib/sparc/libsplashscreen.so +./jre/lib/sparc/libsunec.so +./jre/lib/sparc/libsunwjdga.so +./jre/lib/sparc/libt2k.so +./jre/lib/sparc/libunpack.so +./jre/lib/sparc/libverify.so +./jre/lib/sparc/libzip.so +./jre/lib/sparc/server/libjvm.so +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/unpack200 +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +./jre/bin/unpack200 +./jre/lib/sparc/jexec +" + +# Filter random C++ symbol strings. +# Some numbers differ randomly. +DIS_DIFF_FILTER="$SED -e s/\$[a-zA-Z0-9_\$]\{15,15\}//g -e s/\([0-9a-f][0-9a-f].[0-9a-f][0-9a-f].[0-9a-f][0-9a-f].\)[0-9a-f][0-9a-f]/\1/g -e s/\(%g1,.0x\)[0-9a-f]*\(,.%g1\)/\1\2/g -e s/\(!.\)[0-9a-f]*\(.\2/g" + +# Some xor instructions end up with different args in the lib but not in the object files. +ACCEPTED_DIS_DIFF=" +./demo/jvmti/waiters/lib/libwaiters.so +" + +SKIP_FULLDUMP_DIFF="true" + +fi + +if [ "$OPENJDK_TARGET_OS" = "solaris" ] && [ "$OPENJDK_TARGET_CPU" = "sparcv9" ]; then + +STRIP_BEFORE_COMPARE=" +./demo/jni/Poller/lib/sparcv9/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/sparcv9/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/sparcv9/libgctest.so +./demo/jvmti/heapTracker/lib/sparcv9/libheapTracker.so +./demo/jvmti/heapViewer/lib/sparcv9/libheapViewer.so +./demo/jvmti/hprof/lib/sparcv9/libhprof.so +./demo/jvmti/minst/lib/sparcv9/libminst.so +./demo/jvmti/mtrace/lib/sparcv9/libmtrace.so +./demo/jvmti/versionCheck/lib/sparcv9/libversionCheck.so +./demo/jvmti/waiters/lib/sparcv9/libwaiters.so +" + +SORT_SYMBOLS=" +./demo/jvmti/waiters/lib/sparcv9/libwaiters.so +./jre/lib/sparcv9/libjsig.so +./jre/lib/sparcv9/libsaproc.so +./jre/lib/sparcv9/server/libjvm.so +./jre/lib/sparcv9/server/libjvm_dtrace.so +" + +SKIP_BIN_DIFF="true" + +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jni/Poller/lib/sparcv9/libPoller.so +./demo/jvmti/compiledMethodLoad/lib/sparcv9/libcompiledMethodLoad.so +./demo/jvmti/gctest/lib/sparcv9/libgctest.so +./demo/jvmti/heapTracker/lib/sparcv9/libheapTracker.so +./demo/jvmti/heapViewer/lib/sparcv9/libheapViewer.so +./demo/jvmti/hprof/lib/sparcv9/libhprof.so +./demo/jvmti/minst/lib/sparcv9/libminst.so +./demo/jvmti/mtrace/lib/sparcv9/libmtrace.so +./demo/jvmti/versionCheck/lib/sparcv9/libversionCheck.so +./demo/jvmti/waiters/lib/sparcv9/libwaiters.so +./jre/lib/sparcv9/client/libjvm.so +./jre/lib/sparcv9/jli/libjli.so +./jre/lib/sparcv9/libJdbcOdbc.so +./jre/lib/sparcv9/libattach.so +./jre/lib/sparcv9/libawt.so +./jre/lib/sparcv9/libawt_headless.so +./jre/lib/sparcv9/libawt_xawt.so +./jre/lib/sparcv9/libdcpr.so +./jre/lib/sparcv9/libdt_socket.so +./jre/lib/sparcv9/libfontmanager.so +./jre/lib/sparcv9/libhprof.so +./jre/lib/sparcv9/libinstrument.so +./jre/lib/sparcv9/libj2gss.so +./jre/lib/sparcv9/libj2pcsc.so +./jre/lib/sparcv9/libj2pkcs11.so +./jre/lib/sparcv9/libj2ucrypto.so +./jre/lib/sparcv9/libjaas_unix.so +./jre/lib/sparcv9/libjava.so +./jre/lib/sparcv9/libjava_crw_demo.so +./jre/lib/sparcv9/libjawt.so +./jre/lib/sparcv9/libjdwp.so +./jre/lib/sparcv9/libjfr.so +./jre/lib/sparcv9/libjpeg.so +./jre/lib/sparcv9/libjsdt.so +./jre/lib/sparcv9/libjsound.so +./jre/lib/sparcv9/libkcms.so +./jre/lib/sparcv9/liblcms.so +./jre/lib/sparcv9/libmanagement.so +./jre/lib/sparcv9/libmlib_image.so +./jre/lib/sparcv9/libmlib_image_v.so +./jre/lib/sparcv9/libnet.so +./jre/lib/sparcv9/libnio.so +./jre/lib/sparcv9/libnpt.so +./jre/lib/sparcv9/libsctp.so +./jre/lib/sparcv9/libsplashscreen.so +./jre/lib/sparcv9/libsunec.so +./jre/lib/sparcv9/libsunwjdga.so +./jre/lib/sparcv9/libt2k.so +./jre/lib/sparcv9/libunpack.so +./jre/lib/sparcv9/libverify.so +./jre/lib/sparcv9/libzip.so +./jre/lib/sparcv9/server/libjvm.so +./bin/sparcv9/appletviewer +./bin/sparcv9/extcheck +./bin/sparcv9/idlj +./bin/sparcv9/jar +./bin/sparcv9/jarsigner +./bin/sparcv9/java +./bin/sparcv9/javac +./bin/sparcv9/javadoc +./bin/sparcv9/javah +./bin/sparcv9/javap +./bin/sparcv9/jcmd +./bin/sparcv9/jconsole +./bin/sparcv9/jdb +./bin/sparcv9/jhat +./bin/sparcv9/jinfo +./bin/sparcv9/jmap +./bin/sparcv9/jps +./bin/sparcv9/jrunscript +./bin/sparcv9/jsadebugd +./bin/sparcv9/jstack +./bin/sparcv9/jstat +./bin/sparcv9/jstatd +./bin/sparcv9/keytool +./bin/sparcv9/native2ascii +./bin/sparcv9/orbd +./bin/sparcv9/pack200 +./bin/sparcv9/policytool +./bin/sparcv9/rmic +./bin/sparcv9/rmid +./bin/sparcv9/rmiregistry +./bin/sparcv9/schemagen +./bin/sparcv9/serialver +./bin/sparcv9/servertool +./bin/sparcv9/tnameserv +./bin/sparcv9/unpack200 +./bin/sparcv9/wsgen +./bin/sparcv9/wsimport +./bin/sparcv9/xjc +./jre/bin/sparcv9/java +./jre/bin/sparcv9/keytool +./jre/bin/sparcv9/orbd +./jre/bin/sparcv9/pack200 +./jre/bin/sparcv9/policytool +./jre/bin/sparcv9/rmid +./jre/bin/sparcv9/rmiregistry +./jre/bin/sparcv9/servertool +./jre/bin/sparcv9/tnameserv +./jre/bin/sparcv9/unpack200 +" + +# Filter random C++ symbol strings. +# Some numbers differ randomly. +DIS_DIFF_FILTER="$SED -e s/\$[a-zA-Z0-9_\$]\{15,15\}//g -e s/[0-9a-f][0-9a-f].[0-9a-f][0-9a-f].[0-9a-f][0-9a-f].[0-9a-f][0-9a-f]//g -e s/\(%g1,.0x\)[0-9a-f]*\(,.%g1\)/\1\2/g -e s/\(!.\)[0-9a-f]*\(.\2/g" + +# Some xor instructions end up with different args in the lib but not in the object files. +ACCEPTED_DIS_DIFF=" +./demo/jvmti/waiters/lib/sparcv9/libwaiters.so +" + +SKIP_FULLDUMP_DIFF="true" + +fi + + +if [ "$OPENJDK_TARGET_OS" = "windows" ]; then + +# Probably should add all libs here +ACCEPTED_SMALL_SIZE_DIFF=" +./demo/jvmti/gctest/lib/gctest.dll +./demo/jvmti/heapTracker/lib/heapTracker.dll +./demo/jvmti/minst/lib/minst.dll +./jre/bin/attach.dll +./jre/bin/java_crw_demo.dll +./jre/bin/jsoundds.dll +./bin/appletviewer.exe +./bin/extcheck.exe +./bin/idlj.exe +./bin/jar.exe +./bin/jarsigner.exe +./bin/java-rmi.exe +./bin/java.exe +./bin/javac.exe +./bin/javadoc.exe +./bin/javah.exe +./bin/javap.exe +./bin/javaw.exe +./bin/jcmd.exe +./bin/jconsole.exe +./bin/jdb.exe +./bin/jhat.exe +./bin/jinfo.exe +./bin/jmap.exe +./bin/jps.exe +./bin/jrunscript.exe +./bin/jsadebugd.exe +./bin/jstack.exe +./bin/jstat.exe +./bin/jstatd.exe +./bin/keytool.exe +./bin/kinit.exe +./bin/klist.exe +./bin/ktab.exe +./bin/native2ascii.exe +./bin/orbd.exe +./bin/pack200.exe +./bin/policytool.exe +./bin/rmic.exe +./bin/rmid.exe +./bin/rmiregistry.exe +./bin/schemagen.exe +./bin/serialver.exe +./bin/servertool.exe +./bin/tnameserv.exe +./bin/unpack200.exe +./bin/wsgen.exe +./bin/wsimport.exe +./bin/xjc.exe +./jre/bin/java-rmi.exe +./jre/bin/java.exe +./jre/bin/javaw.exe +./jre/bin/keytool.exe +./jre/bin/kinit.exe +./jre/bin/klist.exe +./jre/bin/ktab.exe +./jre/bin/orbd.exe +./jre/bin/pack200.exe +./jre/bin/policytool.exe +./jre/bin/rmid.exe +./jre/bin/rmiregistry.exe +./jre/bin/servertool.exe +./jre/bin/tnameserv.exe +./jre/bin/unpack200.exe +" + +# On windows, there are unavoidable allignment issues making +# a perfect disasm diff impossible. Filter out the following: +# * Random parts of C++ symbols (this is a bit greedy, but does the trick) +# @XXXXX +# * Hexadecimal addresses that are sometimes alligned differently. +# * Dates in version strings XXXX_XX_XX. +DIS_DIFF_FILTER="$SED -e s/[@?][A-Z0-9_]\{1,25\}//g -e s/^.\{2,2\}[0-9A-F]\{16,16\}.\{2,2\}//g -e s/[0-9A-F]\{4,16\}h//g -e s/_[0-9]\{4,4\}_[0-9][0-9]_[0-9][0-9]//g" + +SKIP_BIN_DIFF="true" +SKIP_FULLDUMP_DIFF="true" + +fi + + +if [ "$OPENJDK_TARGET_OS" = "macosx" ]; then +ACCEPTED_JARZIP_CONTENTS=" +/META-INF/INDEX.LIST +" + +KNOWN_BIN_DIFF=" +./jre/lib/libJObjC.dylib +" + +ACCEPTED_BIN_DIFF=" +./bin/appletviewer +./bin/extcheck +./bin/idlj +./bin/jar +./bin/jarsigner +./bin/java +./bin/javac +./bin/javadoc +./bin/javah +./bin/javap +./bin/jcmd +./bin/jconsole +./bin/jdb +./bin/jhat +./bin/jinfo +./bin/jmap +./bin/jps +./bin/jrunscript +./bin/jsadebugd +./bin/jstack +./bin/jstat +./bin/jstatd +./bin/keytool +./bin/native2ascii +./bin/orbd +./bin/pack200 +./bin/policytool +./bin/rmic +./bin/rmid +./bin/rmiregistry +./bin/schemagen +./bin/serialver +./bin/servertool +./bin/tnameserv +./bin/wsgen +./bin/wsimport +./bin/xjc +./jre/bin/java +./jre/bin/keytool +./jre/bin/orbd +./jre/bin/pack200 +./jre/bin/policytool +./jre/bin/rmid +./jre/bin/rmiregistry +./jre/bin/servertool +./jre/bin/tnameserv +./jre/lib/libsaproc.dylib +./jre/lib/server/libjvm.dylib +" + +KNOWN_SIZE_DIFF=" +./jre/lib/libJObjC.dylib +" + +SORT_SYMBOLS=" +./jre/lib/libJObjC.dylib +" + +KNOWN_SYM_DIFF=" +./jre/lib/libJObjC.dylib +" + +KNOWN_ELF_DIFF=" +./jre/lib/libJObjC.dylib +" + +KNOWN_DIS_DIFF=" +./jre/lib/libJObjC.dylib +" + +fi diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/compareimage.sh --- a/common/bin/compareimage.sh Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,335 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# MANUAL -# -# ./common/bin/compareimages.sh old_jdk_image new_jdk_image -# -# Compare the directory structure. -# Compare the filenames in the directories. -# Compare the contents of the zip archives -# Compare the contents of the jar archives -# Compare the native libraries -# Compare the native executables -# Compare the remaining files -# -# ./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other] -# -# Compare only the selected subset of the images. -# -# ./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar -# -# Compare only the CodePointIM.jar file -# Can be used to compare zips, libraries and executables. -# - -if [ "x$1" = "x-h" ] || [ "x$1" = "x--help" ] || [ "x$1" == "x" ]; then - echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image" - echo "" - echo "Compare the directory structure." - echo "Compare the filenames in the directories." - echo "Compare the contents of the zip archives" - echo "Compare the contents of the jar archives" - echo "Compare the native libraries" - echo "Compare the native executables" - echo "Compare the remaining files" - echo "" - echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image [zips jars libs execs other]" - echo "" - echo "Compare only the selected subset of the images." - echo "" - echo "bash ./common/bin/compareimages.sh old_jdk_image new_jdk_image CodePointIM.jar" - echo "" - echo "Compare only the CodePointIM.jar file" - echo "Can be used to compare zips, libraries and executables." - exit 10 -fi - -OLD="$1" -NEW="$2" -CMD="$3" - -DIFF_RESULT=0 - -CMP_ZIPS=false -CMP_JARS=false -CMP_LIBS=false -CMP_EXECS=false -CMP_OTHER=false - -FILTER="cat" - -if [ -n "$CMD" ]; then - case "$CMD" in - zips) - CMP_ZIPS=true - ;; - jars) - CMP_JARS=true - ;; - libs) - CMP_LIBS=true - ;; - execs) - CMP_EXECS=true - ;; - other) - CMP_OTHER=true - ;; - *) - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true - CMP_OTHER=true - FILTER="grep $3" - ;; - esac -else - CMP_ZIPS=true - CMP_JARS=true - CMP_LIBS=true - CMP_EXECS=true - CMP_OTHER=true -fi - -DIFFJARZIP="/bin/bash `dirname $0`/diffjarzip.sh" -DIFFLIB="/bin/bash `dirname $0`/difflib.sh" -DIFFEXEC="/bin/bash `dirname $0`/diffexec.sh" -export COMPARE_ROOT=/tmp/cimages.$USER -mkdir -p $COMPARE_ROOT - -# Load the correct exception list. -case "`uname -s`" in - Linux) - . `dirname $0`/exception_list_linux - ;; -esac - -echo -echo Comparing $OLD to $NEW -echo - -(cd $OLD && find . -type d | sort > $COMPARE_ROOT/from_dirs) -(cd $NEW && find . -type d | sort > $COMPARE_ROOT/to_dirs) - -echo -n Directory structure... -if diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs > /dev/null; then - echo Identical! -else - echo Differences found. - DIFF_RESULT=1 - # Differences in directories found. - ONLY_OLD=$(diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs | grep '<') - if [ "$ONLY_OLD" ]; then - echo Only in $OLD - echo $ONLY_OLD | sed 's|< ./|\t|g' | sed 's/ /\n/g' - fi - # Differences in directories found. - ONLY_NEW=$(diff $COMPARE_ROOT/from_dirs $COMPARE_ROOT/to_dirs | grep '>') - if [ "$ONLY_NEW" ]; then - echo Only in $NEW - echo $ONLY_NEW | sed 's|> ./|\t|g' | sed 's/ /\n/g' - fi -fi - -(cd $OLD && find . -type f | sort > $COMPARE_ROOT/from_files) -(cd $NEW && find . -type f | sort > $COMPARE_ROOT/to_files) - -echo -n File names... -if diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files > /dev/null; then - echo Identical! -else - echo Differences found. - DIFF_RESULT=1 - # Differences in directories found. - ONLY_OLD=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '<') - if [ "$ONLY_OLD" ]; then - echo Only in $OLD - echo "$ONLY_OLD" | sed 's|< ./| |g' - fi - # Differences in directories found. - ONLY_NEW=$(diff $COMPARE_ROOT/from_files $COMPARE_ROOT/to_files | grep '>') - if [ "$ONLY_NEW" ]; then - echo Only in $NEW - echo "$ONLY_NEW" | sed 's|> ./| |g' - fi -fi - -echo -n Permissions... -found="" -for f in `cd $OLD && find . -type f` -do - if [ ! -f ${OLD}/$f ]; then continue; fi - if [ ! -f ${NEW}/$f ]; then continue; fi - OP=`ls -l ${OLD}/$f | awk '{printf("%.10s\n", $1);}'` - NP=`ls -l ${NEW}/$f | awk '{printf("%.10s\n", $1);}'` - if [ "$OP" != "$NP" ] - then - if [ -z "$found" ]; then echo ; found="yes"; fi - printf "\told: ${OP} new: ${NP}\t$f\n" - fi - - OF=`cd ${OLD} && file $f` - NF=`cd ${NEW} && file $f` - if [ "$f" = "./src.zip" ] - then - if [ "`echo $OF | grep -ic zip`" -gt 0 -a "`echo $NF | grep -ic zip`" -gt 0 ] - then - # the way we produces zip-files make it so that directories are stored in old file - # but not in new (only files with full-path) - # this makes file-5.09 report them as different - continue; - fi - fi - - if [ "$OF" != "$NF" ] - then - if [ -z "$found" ]; then echo ; found="yes"; fi - printf "\tFILE: old: ${OF} new: ${NF}\t$f\n" - fi -done -if [ -z "$found" ]; then echo ; found="yes"; fi - -GENERAL_FILES=$(cd $OLD && find . -type f ! -name "*.so" ! -name "*.jar" ! -name "*.zip" \ - ! -name "*.debuginfo" ! -name "*.dylib" ! -name "jexec" \ - ! -name "ct.sym" ! -name "*.diz" \ - | grep -v "./bin/" | sort | $FILTER) -echo General files... -for f in $GENERAL_FILES -do - if [ -e $NEW/$f ]; then - DIFF_OUT=$(diff $OLD/$f $NEW/$f 2>&1) - if [ -n "$DIFF_OUT" ]; then - echo $f - echo "$DIFF_OUT" - fi - fi -done - - -if [ "x$CMP_ZIPS" == "xtrue" ]; then - ZIPS=$(cd $OLD && find . -type f -name "*.zip" | sort | $FILTER) - - if [ -n "$ZIPS" ]; then - echo Zip files... - - for f in $ZIPS - do - $DIFFJARZIP $OLD/$f $NEW/$f $OLD $NEW - if [ "$?" != "0" ]; then - DIFF_RESULT=1 - fi - done - fi -fi - -if [ "x$CMP_JARS" == "xtrue" ]; then - JARS=$(cd $OLD && find . -type f -name "*.jar" -o -name "ct.sym" | sort | $FILTER) - - if [ -n "$JARS" ]; then - echo Jar files... - - for f in $JARS - do - DIFFJAR_OUTPUT=`$DIFFJARZIP $OLD/$f $NEW/$f $OLD $NEW` - DIFFJAR_RESULT=$? - if [ "$DIFFJAR_RESULT" != "0" ]; then - for diff in $LIST_DIFF_JAR; do - DIFFJAR_OUTPUT=`echo "$DIFFJAR_OUTPUT" | grep -v "$diff"` - done - if [ "`echo "$DIFFJAR_OUTPUT" | grep -v "Differing files in"`" != "" ]; then - DIFF_RESULT=1 - echo "$DIFFJAR_OUTPUT" - fi - fi - done - fi -fi - -if [ "x$FILTER" != "xcat" ]; then - VIEW=view -else - VIEW= -fi - -if [ "x$CMP_LIBS" == "xtrue" ]; then - LIBS=$(cd $OLD && find . -name 'lib*.so' -o -name '*.dylib' -o -name '*.dll' | sort | $FILTER) - - if [ -n "$LIBS" ]; then - echo Libraries... - for f in $LIBS - do - DIFFLIB_OUTPUT=`$DIFFLIB $OLD/$f $NEW/$f $OLD $NEW $VIEW` - DIFFLIB_RESULT=$? - if [ "$DIFFLIB_RESULT" = "0" ]; then - : - #echo "OK: $DIFFLIB_OUTPUT" - elif [ "$DIFFLIB_RESULT" = "2" ] && [[ "$LIST_DIFF_SIZE $LIST_DIFF_BYTE" == *"${f:2}"* ]]; then - : - #echo "OK: $DIFFLIB_OUTPUT" - elif [ "$DIFFLIB_RESULT" = "1" ] && [[ "$LIST_DIFF_BYTE" == *"${f:2}"* ]]; then - : - #echo "OK: $DIFFLIB_OUTPUT" - else - echo "$DIFFLIB_OUTPUT" - DIFF_RESULT=1 - fi - done - fi -fi - -if [ "x$CMP_EXECS" == "xtrue" ]; then - if [ $OSTYPE == "cygwin" ]; then - EXECS=$(cd $OLD && find . -type f -name '*.exe' | sort | $FILTER) - else - EXECS=$(cd $OLD && find . -type f -perm -100 \! \( -name '*.so' -o -name '*.dylib' -o -name '*.dll' \) | sort | $FILTER) - fi - - - if [ -n "$EXECS" ]; then - echo Executables... - - for f in $EXECS - do - DIFFEXEC_OUTPUT=`$DIFFEXEC $OLD/$f $NEW/$f $OLD $NEW $VIEW` - DIFFEXEC_RESULT=$? - if [ "$DIFFEXEC_RESULT" = "0" ]; then - : - #echo "OK: $DIFFEXEC_OUTPUT" - elif [ "$DIFFEXEC_RESULT" = "2" ] && [[ "$LIST_DIFF_SIZE $LIST_DIFF_BYTE" == *"${f:2}"* ]]; then - : - #echo "OK: $DIFFEXEC_OUTPUT" - elif [ "$DIFFEXEC_RESULT" = "1" ] && [[ "$LIST_DIFF_BYTE" == *"${f:2}"* ]]; then - : - #echo "OK: $DIFFEXEC_OUTPUT" - else - echo "$DIFFEXEC_OUTPUT" - DIFF_RESULT=1 - fi - done - fi -fi - -exit $DIFF_RESULT diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/diffexec.sh --- a/common/bin/diffexec.sh Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,186 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -if [ $# -lt 2 ] -then - echo "Diff two executables. Return codes:" - echo "0 - no diff" - echo "1 - Identical symbols AND size, BUT not bytewise identical" - echo "2 - Identical symbols BUT NEW size" - echo "3 - Differences, content BUT SAME size" - echo "4 - Differences, content AND size" - echo "10 - Could not perform diff" - echo "Use 'quiet' to disable any output." - echo "Syntax: $0 file1 file2 [quiet]" - exit 10 -fi - -if [ ! -f $1 ] -then - echo $1 does not exist - exit 10 -fi - -if [ ! -f $2 ] -then - echo $2 does not exist - exit 10 -fi - -if [ "`uname`" == "SunOS" ]; then - if [ -f "`which nm`" ]; then - NM=nm - elif [ -f "`which gnm`" ]; then - NM=gnm - else - echo "No nm command found" - exit 10 - fi - LDD=ldd -elif [ $OSTYPE == "cygwin" ]; then - NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" - NM_ARGS=/exports - LDD= -elif [ "`uname`" == "Darwin" ]; then - NM=nm - LDD="otool -L" -else - NM=nm - LDD=ldd -fi - -# Should the differences be viewed? -VIEW= -# You can do export DIFF=meld to view -# any differences using meld instead. -if [ -n "$DIFF" ]; then - DIFF="$DIFF" -else - DIFF=diff -fi -OLD=$(cd $(dirname $1) && pwd)/$(basename $1) -NEW=$(cd $(dirname $2) && pwd)/$(basename $2) - -OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') -NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') - -if [ $# -gt 3 ] -then - ROOT1=$(cd $3 && pwd) - ROOT2=$(cd $4 && pwd) - OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||") - NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||") - if [ "x$5" == "xview" ]; then VIEW=view; fi -else - ROOT1=$(dirname $OLD)/ - ROOT2=$(dirname $NEW)/ - OLD_NAME=$OLD - NEW_NAME=$NEW - if [ "x$3" == "xview" ]; then VIEW=view; fi -fi - -if cmp $OLD $NEW > /dev/null -then - # The files were bytewise identical. - echo Identical: $OLD_NAME - exit 0 -fi - -OLD_SYMBOLS=$COMPARE_ROOT/$OLD_NAME.old -NEW_SYMBOLS=$COMPARE_ROOT/$NEW_NAME.new - -mkdir -p $(dirname $OLD_SYMBOLS) -mkdir -p $(dirname $NEW_SYMBOLS) - -if [ $OSTYPE == "cygwin" ]; then - "$NM" $NM_ARGS $OLD | grep " = " > $OLD_SYMBOLS - "$NM" $NM_ARGS $NEW | grep " = " > $NEW_SYMBOLS - "$NM" $NM_ARGS $OLD > $OLD_SYMBOLS.full - "$NM" $NM_ARGS $NEW > $NEW_SYMBOLS.full -else - # Strip the addresses, just compare the ordering of the symbols. - $NM $OLD | cut -f 2- -d ' ' > $OLD_SYMBOLS - $NM $NEW | cut -f 2- -d ' ' > $NEW_SYMBOLS - # But store the full information for easy diff access. - $NM $OLD > $OLD_SYMBOLS.full - $NM $NEW > $NEW_SYMBOLS.full -fi - -DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS) - -if [ "${LDD}" ] -then - NAME=`basename $OLD` - TMP=$COMPARE_ROOT/ldd/ldd.${NAME} - rm -rf "${TMP}" - mkdir -p "${TMP}" - - (cd "${TMP}" && cp $OLD . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.old | uniq > dep.uniq.old) - (cd "${TMP}" && cp $NEW . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.new | uniq > dep.uniq.new) - (cd "${TMP}" && rm -f ${NAME}) - - DIFFS_DEP=$(LANG=C diff "${TMP}/dep.old" "${TMP}/dep.new") - DIFFS_UNIQ_DEP=$(LANG=C diff "${TMP}/dep.uniq.old" "${TMP}/dep.uniq.new") - - DEP_MSG= - if [ -z "${DIFFS_UNIQ_DEP}" -a -z "${DIFFS_DEP}" ]; then - DEP_MSG="Identical dependencies" - elif [ -z "${DIFFS_UNIQ_DEP}" ]; then - DEP_MSG="Redundant duplicate dependencies added" - RES=1 - else - DEP_MSG="DIFFERENT dependencies" - RES=1 - fi -fi - -RESULT=0 - -if [ -n "$DIFFS" ]; then - if [ $OLD_SIZE -ne $NEW_SIZE ] - then - echo Differences, content AND size : $DEP_MSG : $OLD_NAME - RESULT=4 - else - echo Differences, content BUT SAME size: $DEP_MSG : $OLD_NAME - RESULT=3 - fi - if [ "x$VIEW" == "xview" ]; then - LANG=C $DIFF $OLD_SYMBOLS $NEW_SYMBOLS - fi -else - if [ $OLD_SIZE -ne $NEW_SIZE ] - then - echo Identical symbols BUT NEW size : $DEP_MSG : $OLD_NAME - RESULT=2 - else - echo Identical symbols AND size, BUT not bytewise identical: $DEP_MSG : $OLD_NAME - RESULT=1 - fi -fi - -exit $RESULT - - - diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/diffjarzip.sh --- a/common/bin/diffjarzip.sh Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Simple tool to diff two jar or zip files. It unpacks the jar/zip files and -# reports if files differs and if files are new or missing. -# Assumes gnu diff. - -# There are a few source files that have DOS line endings in the -# jaxp/jaxws source drops, when the sources were added to the repository -# the source files were converted to UNIX line endings. -# For now we ignore these differences. -DIFF_FLAGS="--strip-trailing-cr" -#set -x - -if [ $# -lt 2 ] -then - echo "Diff two jar/zip files. Return codes: 0 - no diff, 1 - diff, 2 - couldn't perform diff" - echo "Syntax: $0 old_archive new_archive [old_root new_root]" - exit 2 -fi - -if [ ! -f $1 ] -then - echo $1 does not exist - exit 2 -fi - -if [ ! -f $2 ] -then - echo $2 does not exist - exit 2 -fi - -IGNORES="cat" -OLD=$(cd $(dirname $1) && pwd)/$(basename $1) -NEW=$(cd $(dirname $2) && pwd)/$(basename $2) - -if [ $# -gt 3 ] -then - ROOT1=$(cd $3 && pwd) - ROOT2=$(cd $4 && pwd) - OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||") - NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||") - if [ $# == 5 ]; then IGNORES="$5"; fi -else - ROOT1=$(dirname $OLD)/ - ROOT2=$(dirname $NEW)/ - OLD_NAME=$OLD - NEW_NAME=$NEW - if [ $# == 3 ]; then IGNORES="$3"; fi -fi - -if [ "`uname`" == "SunOS" ]; then - if [ -f "`which gdiff`" ]; then - DIFF=gdiff - else - DIFF=diff - fi -else - DIFF=diff -fi - -OLD_SUFFIX="${OLD##*.}" -NEW_SUFFIX="${NEW##*.}" -if [ "$OLD_SUFFIX" != "$NEW_SUFFIX" ]; then - echo The files do not have the same suffix type! - exit 2 -fi - -if [ "$OLD_SUFFIX" != "zip" ] && [ "$OLD_SUFFIX" != "jar" ] && [ "$OLD_SUFFIX" != "sym" ]; then - echo The files have to be zip, jar or sym! They are $OLD_SUFFIX - exit 2 -fi - -UNARCHIVE="unzip -q" - -TYPE="$OLD_SUFFIX" - -if cmp $OLD $NEW > /dev/null -then - # The files were bytewise identical. - exit 0 -fi - -# Not quite identical, the might still contain the same data. -# Unpack the jar/zip files in temp dirs -if test "x$COMPARE_ROOT" == "x"; then - COMPARE_ROOT=/tmp/compare_root.$$ - REMOVE_COMPARE_ROOT=true -fi -OLD_TEMPDIR=$COMPARE_ROOT/$OLD_NAME.old -NEW_TEMPDIR=$COMPARE_ROOT/$NEW_NAME.new -mkdir -p $OLD_TEMPDIR -mkdir -p $NEW_TEMPDIR -(cd $OLD_TEMPDIR && rm -rf * ; $UNARCHIVE $OLD) -(cd $NEW_TEMPDIR && rm -rf * ; $UNARCHIVE $NEW) - -ONLY1=$(LANG=C $DIFF -rq $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $OLD_TEMPDIR") - -if [ -n "$ONLY1" ]; then - echo " Only the OLD $OLD_NAME contains:" - LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $OLD_TEMPDIR" \ - | sed "s|Only in $OLD_TEMPDIR| |"g | sed 's|: |/|g' -fi - -ONLY2=$(LANG=C $DIFF -rq $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $NEW_TEMPDIR") - -if [ -n "$ONLY2" ]; then - echo " Only the NEW $NEW_NAME contains:" - LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep "^Only in $NEW_TEMPDIR" \ - | sed "s|Only in $NEW_TEMPDIR| |"g | sed 's|: |/|g' -fi - -DIFFTEXT="/bin/bash `dirname $0`/difftext.sh" - -LANG=C $DIFF -rq $DIFF_FLAGS $OLD_TEMPDIR $NEW_TEMPDIR | grep differ | cut -f 2,4 -d ' ' | \ - awk "{ print \"$DIFFTEXT \"\$1\" \"\$2 }" > $COMPARE_ROOT/diffing - -/bin/bash $COMPARE_ROOT/diffing > $COMPARE_ROOT/diffs - -if [ -s "$COMPARE_ROOT/diffs" ]; then - echo " Differing files in $OLD_NAME" - cat $COMPARE_ROOT/diffs | grep differ | $IGNORES | cut -f 2 -d ' ' | \ - sed "s|$OLD_TEMPDIR| |g" -fi - -# Clean up - -if [ "x$REMOVE_COMPARE_ROOT" == xtrue ]; then - rm -rf $REMOVE_COMPARE_ROOT -fi - -exit 1 - diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/difflib.sh --- a/common/bin/difflib.sh Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Simple tool to diff two shared libraries. -# Criterias: two shared libraries are considered equal if: -# the file sizes are the same AND the symbols outputs from the nm command are equal - -if [ $# -lt 2 ] -then - echo "Diff two shared libs. Return codes:" - echo "0 - no diff" - echo "1 - Identical symbols AND size, BUT not bytewise identical" - echo "2 - Identical symbols BUT NEW size" - echo "3 - Differences, content BUT SAME size" - echo "4 - Differences, content AND size" - echo "10 - Could not perform diff" - echo "Use 'quiet' to disable any output." - echo "Syntax: $0 file1 file2 [quiet]" - exit 10 -fi - -if [ ! -f $1 ] -then - echo $1 does not exist - exit 10 -fi - -if [ ! -f $2 ] -then - echo $2 does not exist - exit 10 -fi - -if [ "`uname`" == "SunOS" ]; then - if [ -f "`which gnm`" ]; then - NM=gnm -# Jonas 2012-05-29: solaris native nm produces radically different output than gnm -# so if using that...we need different filter than "cut -f 2-" -# - elif [ -f "`which nm`" ]; then - NM=nm - else - echo "No nm command found" - exit 10 - fi - LDD=ldd -elif [ $OSTYPE == "cygwin" ]; then - NM="$VS100COMNTOOLS/../../VC/bin/amd64/dumpbin.exe" - NM_ARGS=/exports - LDD= -elif [ "`uname`" == "Darwin" ]; then - NM=nm - LDD="otool -L" -else - NM=nm - LDD=ldd -fi - -# Should the differences be viewed? -VIEW= -# You can do export DIFF=meld to view -# any differences using meld instead. -if [ -n "$DIFF" ]; then - DIFF="$DIFF" -else - DIFF=diff -fi -OLD=$(cd $(dirname $1) && pwd)/$(basename $1) -NEW=$(cd $(dirname $2) && pwd)/$(basename $2) - -OLD_SIZE=$(ls -l "$OLD" | awk '{ print $5 }') -NEW_SIZE=$(ls -l "$NEW" | awk '{ print $5 }') - -if [ $# -gt 3 ] -then - ROOT1=$(cd $3 && pwd) - ROOT2=$(cd $4 && pwd) - OLD_NAME=$(echo $OLD | sed "s|$ROOT1/||") - NEW_NAME=$(echo $NEW | sed "s|$ROOT2/||") - if [ "x$5" == "xview" ]; then VIEW=view; fi -else - ROOT1=$(dirname $OLD)/ - ROOT2=$(dirname $NEW)/ - OLD_NAME=$OLD - NEW_NAME=$NEW - if [ "x$3" == "xview" ]; then VIEW=view; fi -fi - -OLD_SUFFIX="${OLD##*.}" -NEW_SUFFIX="${NEW##*.}" -if [ "$OLD_SUFFIX" != "$NEW_SUFFIX" ]; then - echo The files do not have the same suffix type! - exit 10 -fi - -if [ "$OLD_SUFFIX" != "so" ] && [ "$OLD_SUFFIX" != "dylib" ] && [ "$OLD_SUFFIX" != "dll" ]; then - echo The files have to be .so, .dylib or .dll! They are $OLD_SUFFIX - exit 10 -fi - -TYPE="$OLD_SUFFIX" - -if cmp $OLD $NEW > /dev/null -then - # The files were bytewise identical. - echo Identical: $OLD_NAME - exit 0 -fi - -OLD_SYMBOLS=$COMPARE_ROOT/nm.$OLD_NAME.old -NEW_SYMBOLS=$COMPARE_ROOT/nm.$NEW_NAME.new - -mkdir -p $(dirname $OLD_SYMBOLS) -mkdir -p $(dirname $NEW_SYMBOLS) - -if [ $OSTYPE == "cygwin" ]; then - "$NM" $NM_ARGS $OLD | grep " = " > $OLD_SYMBOLS - "$NM" $NM_ARGS $NEW | grep " = " > $NEW_SYMBOLS - "$NM" $NM_ARGS $OLD > $OLD_SYMBOLS.full - "$NM" $NM_ARGS $NEW > $NEW_SYMBOLS.full -else - # Strip the addresses, just compare the ordering of the symbols. - $NM $OLD | cut -f 2- -d ' ' > $OLD_SYMBOLS - $NM $NEW | cut -f 2- -d ' ' > $NEW_SYMBOLS - # But store the full information for easy diff access. - $NM $OLD > $OLD_SYMBOLS.full - $NM $NEW > $NEW_SYMBOLS.full -fi - -DIFFS=$(LANG=C diff $OLD_SYMBOLS $NEW_SYMBOLS) - -RESULT=0 - -if [ "${LDD}" ] -then - NAME=`basename $OLD` - TMP=$COMPARE_ROOT/ldd/ldd.${NAME} - rm -rf "${TMP}" - mkdir -p "${TMP}" - - (cd "${TMP}" && cp $OLD . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.old | uniq > dep.uniq.old) - (cd "${TMP}" && cp $NEW . && ${LDD} ${NAME} | awk '{ print $1;}' | sort | tee dep.new | uniq > dep.uniq.new) - (cd "${TMP}" && rm -f ${NAME}) - - DIFFS_DEP=$(LANG=C diff "${TMP}/dep.old" "${TMP}/dep.new") - DIFFS_UNIQ_DEP=$(LANG=C diff "${TMP}/dep.uniq.old" "${TMP}/dep.uniq.new") - - DEP_MSG= - if [ -z "${DIFFS_UNIQ_DEP}" -a -z "${DIFFS_DEP}" ]; then - DEP_MSG="Identical dependencies" - elif [ -z "${DIFFS_UNIQ_DEP}" ]; then - DEP_MSG="Redundant duplicate dependencies added" - RES=1 - else - DEP_MSG="DIFFERENT dependencies" - RES=1 - fi -fi - -if [ -n "$DIFFS" ]; then - if [ $OLD_SIZE -ne $NEW_SIZE ] - then - echo Differences, content AND size : $DEP_MSG : $OLD_NAME - RESULT=4 - else - echo Differences, content BUT SAME size: $DEP_MSG : $OLD_NAME - RESULT=3 - fi - if [ "x$VIEW" == "xview" ]; then - LANG=C $DIFF $OLD_SYMBOLS $NEW_SYMBOLS - fi -else - if [ $OLD_SIZE -ne $NEW_SIZE ] - then - echo Identical symbols BUT NEW size : $DEP_MSG : $OLD_NAME - RESULT=2 - else - echo Identical symbols AND size, BUT not bytewise identical: $DEP_MSG : $OLD_NAME - RESULT=1 - fi -fi - -exit $RESULT - - - diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/difftext.sh --- a/common/bin/difftext.sh Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# The difftext.sh knows how to compare text files and -# ignore some specific differences. -# When difftext.sh is called, we already know that the -# files differ. But if the tests below trigger, then -# we ignore differences caused by: -# -# Timestamps in Java sources generated by idl2java -# Sorting order and cleanup style in .properties files. - -OLD="$1" -NEW="$2" -SUF="${OLD##*.}" -TMP=1 -if test "x$SUF" == "xjava"; then - TMP=$(LANG=C diff $OLD $NEW | \ - grep '^[<>]' | \ - sed '/[<>] \* from.*\.idl/d' | \ - sed '/[<>] \*.*201[12].*/d' | \ - sed '/\/\/ Generated from input file.*/d' | \ - sed '/\/\/ This file was generated AUTOMATICALLY from a template file.*/d' | \ - sed '/\/\/ java GenerateCharacter.*/d') -fi -if test "x$SUF" == "xproperties"; then - cat $OLD | sed -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \ --e 's/\\u0020/\x20/g' \ --e 's/\\u003A/\x3A/g' \ --e 's/\\u006B/\x6B/g' \ --e 's/\\u0075/\x75/g' \ --e 's/\\u00A0/\xA0/g' \ --e 's/\\u00A3/\xA3/g' \ --e 's/\\u00B0/\xB0/g' \ --e 's/\\u00B7/\xB7/g' \ --e 's/\\u00BA/\xBA/g' \ --e 's/\\u00BF/\xBF/g' \ --e 's/\\u00C0/\xC0/g' \ --e 's/\\u00C1/\xC1/g' \ --e 's/\\u00C2/\xC2/g' \ --e 's/\\u00C4/\xC4/g' \ --e 's/\\u00C5/\xC5/g' \ --e 's/\\u00C8/\xC8/g' \ --e 's/\\u00C9/\xC9/g' \ --e 's/\\u00CA/\xCA/g' \ --e 's/\\u00CD/\xCD/g' \ --e 's/\\u00CE/\xCE/g' \ --e 's/\\u00D3/\xD3/g' \ --e 's/\\u00D4/\xD4/g' \ --e 's/\\u00D6/\xD6/g' \ --e 's/\\u00DA/\xDA/g' \ --e 's/\\u00DC/\xDC/g' \ --e 's/\\u00DD/\xDD/g' \ --e 's/\\u00DF/\xDF/g' \ --e 's/\\u00E0/\xE0/g' \ --e 's/\\u00E1/\xE1/g' \ --e 's/\\u00E2/\xE2/g' \ --e 's/\\u00E3/\xE3/g' \ --e 's/\\u00E4/\xE4/g' \ --e 's/\\u00E5/\xE5/g' \ --e 's/\\u00E6/\xE6/g' \ --e 's/\\u00E7/\xE7/g' \ --e 's/\\u00E8/\xE8/g' \ --e 's/\\u00E9/\xE9/g' \ --e 's/\\u00EA/\xEA/g' \ --e 's/\\u00EB/\xEB/g' \ --e 's/\\u00EC/\xEC/g' \ --e 's/\\u00ED/\xED/g' \ --e 's/\\u00EE/\xEE/g' \ --e 's/\\u00EF/\xEF/g' \ --e 's/\\u00F1/\xF1/g' \ --e 's/\\u00F2/\xF2/g' \ --e 's/\\u00F3/\xF3/g' \ --e 's/\\u00F4/\xF4/g' \ --e 's/\\u00F5/\xF5/g' \ --e 's/\\u00F6/\xF6/g' \ --e 's/\\u00F9/\xF9/g' \ --e 's/\\u00FA/\xFA/g' \ --e 's/\\u00FC/\xFC/g' \ --e 's/\\u0020/\x20/g' \ --e 's/\\u003f/\x3f/g' \ --e 's/\\u006f/\x6f/g' \ --e 's/\\u0075/\x75/g' \ --e 's/\\u00a0/\xa0/g' \ --e 's/\\u00a3/\xa3/g' \ --e 's/\\u00b0/\xb0/g' \ --e 's/\\u00ba/\xba/g' \ --e 's/\\u00bf/\xbf/g' \ --e 's/\\u00c1/\xc1/g' \ --e 's/\\u00c4/\xc4/g' \ --e 's/\\u00c5/\xc5/g' \ --e 's/\\u00c8/\xc8/g' \ --e 's/\\u00c9/\xc9/g' \ --e 's/\\u00ca/\xca/g' \ --e 's/\\u00cd/\xcd/g' \ --e 's/\\u00d6/\xd6/g' \ --e 's/\\u00dc/\xdc/g' \ --e 's/\\u00dd/\xdd/g' \ --e 's/\\u00df/\xdf/g' \ --e 's/\\u00e0/\xe0/g' \ --e 's/\\u00e1/\xe1/g' \ --e 's/\\u00e2/\xe2/g' \ --e 's/\\u00e3/\xe3/g' \ --e 's/\\u00e4/\xe4/g' \ --e 's/\\u00e5/\xe5/g' \ --e 's/\\u00e7/\xe7/g' \ --e 's/\\u00e8/\xe8/g' \ --e 's/\\u00e9/\xe9/g' \ --e 's/\\u00ea/\xea/g' \ --e 's/\\u00eb/\xeb/g' \ --e 's/\\u00ec/\xec/g' \ --e 's/\\u00ed/\xed/g' \ --e 's/\\u00ee/\xee/g' \ --e 's/\\u00ef/\xef/g' \ --e 's/\\u00f0/\xf0/g' \ --e 's/\\u00f1/\xf1/g' \ --e 's/\\u00f2/\xf2/g' \ --e 's/\\u00f3/\xf3/g' \ --e 's/\\u00f4/\xf4/g' \ --e 's/\\u00f5/\xf5/g' \ --e 's/\\u00f6/\xf6/g' \ --e 's/\\u00f7/\xf7/g' \ --e 's/\\u00f8/\xf8/g' \ --e 's/\\u00f9/\xf9/g' \ --e 's/\\u00fa/\xfa/g' \ --e 's/\\u00fc/\xfc/g' \ --e 's/\\u00ff/\xff/g' \ - | sed -e '/^#/d' -e '/^$/d' \ - -e :a -e '/\\$/N; s/\\\n//; ta' \ - -e 's/^[ \t]*//;s/[ \t]*$//' \ - -e 's/\\=/=/' | LANG=C sort > $OLD.cleaned - TMP=$(LANG=C diff $OLD.cleaned $NEW) -fi -if test -n "$TMP"; then - echo Files $OLD and $NEW differ -fi diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/exception_list_linux --- a/common/bin/exception_list_linux Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,114 +0,0 @@ -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# List of files inside jar archives that are ok if they differ. -LIST_DIFF_JAR=" -/sun/misc/Version.class -/sun/tools/jconsole/Version.class -/com/sun/tools/javac/resources/version.class -/com/sun/tools/javah/resources/version.class -/com/sun/tools/javap/resources/version.class -" - -# List of binaries that only need to match symbols -LIST_DIFF_SIZE=" -jre/lib/amd64/libfontmanager.so -jre/lib/amd64/libjdwp.so -jre/lib/amd64/libt2k.so -bin/unpack200 -jre/bin/unpack200 -jre/lib/amd64/libjsig.debuginfo -jre/lib/amd64/libsaproc.debuginfo -jre/lib/amd64/server/libjvm.debuginfo -" - -# List of binares that need to match both symbols and size -LIST_DIFF_BYTE=" -jre/lib/amd64/libdt_socket.so -jre/lib/amd64/libattach.so -jre/lib/amd64/libjaas_unix.so -jre/lib/amd64/libjawt.so -jre/lib/amd64/libjpeg.so -jre/lib/amd64/libjsdt.so -jre/lib/amd64/libjsig.so -jre/lib/amd64/libsaproc.so -jre/lib/amd64/libsctp.so -jre/lib/amd64/libsunec.so -jre/lib/amd64/libunpack.so -jre/lib/amd64/libverify.so -jre/lib/amd64/libzip.so -jre/lib/amd64/server/libjsig.so -jre/lib/amd64/server/libjvm.so -jre/lib/amd64/liblcms.so -demo/jvmti/heapTracker/lib/libheapTracker.so -demo/jvmti/hprof/lib/libhprof.so -demo/jvmti/minst/lib/libminst.so -demo/jvmti/mtrace/lib/libmtrace.so -demo/jvmti/waiters/lib/libwaiters.so -bin/appletviewer -bin/extcheck -bin/idlj -bin/jar -bin/jarsigner -bin/java -bin/javac -bin/javadoc -bin/javah -bin/javap -bin/jcmd -bin/jconsole -bin/jdb -bin/jhat -bin/jinfo -bin/jmap -bin/jps -bin/jrunscript -bin/jsadebugd -bin/jstack -bin/jstat -bin/jstatd -bin/keytool -bin/native2ascii -bin/orbd -bin/pack200 -bin/policytool -bin/rmic -bin/rmid -bin/rmiregistry -bin/schemagen -bin/serialver -bin/servertool -bin/tnameserv -bin/wsgen -bin/wsimport -bin/xjc -jre/bin/java -jre/bin/keytool -jre/bin/orbd -jre/bin/pack200 -jre/bin/policytool -jre/bin/rmid -jre/bin/rmiregistry -jre/bin/servertool -jre/bin/tnameserv -" diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/extractvcvars.sh --- a/common/bin/extractvcvars.sh Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -#!/bin/bash -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# - -# Must be bash, but that is ok since we are running from cygwin. -# The first argument is the vcvarsall.bat file to run. -# The second argument is the arch arg to give to vcvars. -VCVARSALL="$1" -ARCH_ARG="$2" - -# Cannot use the VS10 setup script directly (since it only updates the DOS subshell environment) -# but calculate the difference in Cygwin environment before/after running it and then -# apply the diff. -_vs10varsall=`cygpath -a -m -s "$VCVARSALL"` -_dosvs10varsall=`cygpath -a -w -s $_vs10varsall` -_dosbash=`cygpath -a -w -s \`which bash\`.*` - -# generate the set of exported vars before/after the vs10 setup -echo "@echo off" > localdevenvtmp.bat -echo "$_dosbash -c \"export -p\" > localdevenvtmp.export0" >> localdevenvtmp.bat -echo "call $_dosvs10varsall $ARCH_ARG" >> localdevenvtmp.bat -echo "$_dosbash -c \"export -p\" > localdevenvtmp.export1" >> localdevenvtmp.bat -cmd /c localdevenvtmp.bat - -# apply the diff (less some non-vs10 vars named by "!") -sort localdevenvtmp.export0 |grep -v "!" > localdevenvtmp.export0.sort -sort localdevenvtmp.export1 |grep -v "!" > localdevenvtmp.export1.sort -comm -1 -3 localdevenvtmp.export0.sort localdevenvtmp.export1.sort > localdevenv.sh -cat localdevenv.sh | sed 's/declare -x /export /g' | sed 's/="/:="/g' | sed 's/\\\\/\\/g' | sed 's/"//g' | \ - sed 's/#/\$\(HASH\)/g' > localdevenv.gmk - -# cleanup -rm -f localdevenvtmp* diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/hide_important_warnings_from_javac.sh --- a/common/bin/hide_important_warnings_from_javac.sh Wed Oct 31 18:35:56 2012 -0700 +++ b/common/bin/hide_important_warnings_from_javac.sh Wed Jul 05 18:27:34 2017 +0200 @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/logger.sh --- a/common/bin/logger.sh Wed Oct 31 18:35:56 2012 -0700 +++ b/common/bin/logger.sh Wed Jul 05 18:27:34 2017 +0200 @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # # Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/shell-tracer.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/bin/shell-tracer.sh Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,47 @@ +#!/bin/bash +# +# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +# Usage: sh shell-tracer.sh +# +# This shell script is supposed to be set as a replacement for SHELL in make, +# causing it to be called whenever make wants to execute shell commands. +# The is suitable for passing on to the old shell, +# typically beginning with -c. +# +# This script will make sure the shell command line is executed with +# OLD_SHELL -x, and it will also store a simple log of the the time it takes to +# execute the command in the OUTPUT_FILE, using the "time" utility as pointed +# to by TIME_CMD. If TIME_CMD is "-", no timestamp will be stored. + +TIME_CMD="$1" +OUTPUT_FILE="$2" +OLD_SHELL="$3" +shift +shift +shift +if [ "$TIME_CMD" != "-" ]; then +"$TIME_CMD" -f "[TIME:%E] $*" -a -o "$OUTPUT_FILE" "$OLD_SHELL" -x "$@" +else +"$OLD_SHELL" -x "$@" +fi diff -r 540a11e15fbb -r 1c3fdd0c4268 common/bin/unicode2x.sed --- a/common/bin/unicode2x.sed Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -s/\\u0020/\x20/g -s/\\u003A/\x3A/g -s/\\u006B/\x6B/g -s/\\u0075/\x75/g -s/\\u00A0/\xA0/g -s/\\u00A3/\xA3/g -s/\\u00B0/\xB0/g -s/\\u00B7/\xB7/g -s/\\u00BA/\xBA/g -s/\\u00BF/\xBF/g -s/\\u00C0/\xC0/g -s/\\u00C1/\xC1/g -s/\\u00C2/\xC2/g -s/\\u00C4/\xC4/g -s/\\u00C5/\xC5/g -s/\\u00C8/\xC8/g -s/\\u00C9/\xC9/g -s/\\u00CA/\xCA/g -s/\\u00CD/\xCD/g -s/\\u00CE/\xCE/g -s/\\u00D3/\xD3/g -s/\\u00D4/\xD4/g -s/\\u00D6/\xD6/g -s/\\u00DA/\xDA/g -s/\\u00DC/\xDC/g -s/\\u00DD/\xDD/g -s/\\u00DF/\xDF/g -s/\\u00E0/\xE0/g -s/\\u00E1/\xE1/g -s/\\u00E2/\xE2/g -s/\\u00E3/\xE3/g -s/\\u00E4/\xE4/g -s/\\u00E5/\xE5/g -s/\\u00E6/\xE6/g -s/\\u00E7/\xE7/g -s/\\u00E8/\xE8/g -s/\\u00E9/\xE9/g -s/\\u00EA/\xEA/g -s/\\u00EB/\xEB/g -s/\\u00EC/\xEC/g -s/\\u00ED/\xED/g -s/\\u00EE/\xEE/g -s/\\u00EF/\xEF/g -s/\\u00F1/\xF1/g -s/\\u00F2/\xF2/g -s/\\u00F3/\xF3/g -s/\\u00F4/\xF4/g -s/\\u00F5/\xF5/g -s/\\u00F6/\xF6/g -s/\\u00F9/\xF9/g -s/\\u00FA/\xFA/g -s/\\u00FC/\xFC/g -s/\\u0020/\x20/g -s/\\u003f/\x3f/g -s/\\u006f/\x6f/g -s/\\u0075/\x75/g -s/\\u00a0/\xa0/g -s/\\u00a3/\xa3/g -s/\\u00b0/\xb0/g -s/\\u00ba/\xba/g -s/\\u00bf/\xbf/g -s/\\u00c1/\xc1/g -s/\\u00c4/\xc4/g -s/\\u00c5/\xc5/g -s/\\u00c8/\xc8/g -s/\\u00c9/\xc9/g -s/\\u00ca/\xca/g -s/\\u00cd/\xcd/g -s/\\u00d6/\xd6/g -s/\\u00dc/\xdc/g -s/\\u00dd/\xdd/g -s/\\u00df/\xdf/g -s/\\u00e0/\xe0/g -s/\\u00e1/\xe1/g -s/\\u00e2/\xe2/g -s/\\u00e3/\xe3/g -s/\\u00e4/\xe4/g -s/\\u00e5/\xe5/g -s/\\u00e7/\xe7/g -s/\\u00e8/\xe8/g -s/\\u00e9/\xe9/g -s/\\u00ea/\xea/g -s/\\u00eb/\xeb/g -s/\\u00ec/\xec/g -s/\\u00ed/\xed/g -s/\\u00ee/\xee/g -s/\\u00ef/\xef/g -s/\\u00f0/\xf0/g -s/\\u00f1/\xf1/g -s/\\u00f2/\xf2/g -s/\\u00f3/\xf3/g -s/\\u00f4/\xf4/g -s/\\u00f5/\xf5/g -s/\\u00f6/\xf6/g -s/\\u00f7/\xf7/g -s/\\u00f8/\xf8/g -s/\\u00f9/\xf9/g -s/\\u00fa/\xfa/g -s/\\u00fc/\xfc/g -s/\\u00ff/\xff/g diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/HotspotWrapper.gmk --- a/common/makefiles/HotspotWrapper.gmk Wed Oct 31 18:35:56 2012 -0700 +++ b/common/makefiles/HotspotWrapper.gmk Wed Jul 05 18:27:34 2017 +0200 @@ -36,9 +36,12 @@ default: all # Get all files except .hg in the hotspot directory. -HOTSPOT_FILES := $(shell $(FIND) $(HOTSPOT_TOPDIR) -name ".hg" -prune -o -print) +HOTSPOT_FILES := $(shell $(FIND) -L $(HOTSPOT_TOPDIR) -name ".hg" -prune -o -print) +# The old build creates hotspot output dir before calling hotspot and +# not doing it breaks builds on msys. $(HOTSPOT_OUTPUTDIR)/_hotspot.timestamp: $(HOTSPOT_FILES) + @$(MKDIR) -p $(HOTSPOT_OUTPUTDIR) @($(CD) $(HOTSPOT_TOPDIR)/make && $(MAKE) -j1 $(HOTSPOT_MAKE_ARGS) SPEC=$(HOTSPOT_SPEC) BASE_SPEC=$(BASE_SPEC)) $(TOUCH) $@ diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/IdlCompilation.gmk --- a/common/makefiles/IdlCompilation.gmk Wed Oct 31 18:35:56 2012 -0700 +++ b/common/makefiles/IdlCompilation.gmk Wed Jul 05 18:27:34 2017 +0200 @@ -59,7 +59,7 @@ $(MKDIR) -p $3/$$($4_TMPDIR) $(RM) -rf $3/$$($4_TMPDIR) $(MKDIR) -p $(dir $5) - $(ECHO) Compiling IDL $(patsubst $2/%,%,$4) + $(ECHO) $(LOG_INFO) Compiling IDL $(patsubst $2/%,%,$4) $8 -td $3/$$($4_TMPDIR) \ -i $2/org/omg/CORBA \ -i $2/org/omg/PortableInterceptor \ @@ -79,15 +79,9 @@ # param 1 is for example BUILD_IDLS # param 2,3,4,5,6,7,8 are named args. # IDLJ,SRC,BIN,INCLUDES,EXCLUDES,OLDIMPLBASES,DELETES -$(if $2,$1_$(strip $2)) -$(if $3,$1_$(strip $3)) -$(if $4,$1_$(strip $4)) -$(if $5,$1_$(strip $5)) -$(if $6,$1_$(strip $6)) -$(if $7,$1_$(strip $7)) -$(if $8,$1_$(strip $8)) -$(if $9,$1_$(strip $9)) -$(if $(10),$(error Internal makefile error: Too many arguments to SetupIdlCompilation, please update IdlCompilation.gmk)) +$(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) +$(call LogSetupMacroEntry,SetupIdlCompilation($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) +$(if $(16),$(error Internal makefile error: Too many arguments to SetupIdlCompilation, please update IdlCompilation.gmk)) # Remove any relative addressing in the paths. $1_SRC := $$(abspath $$($1_SRC)) diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/JavaCompilation.gmk --- a/common/makefiles/JavaCompilation.gmk Wed Oct 31 18:35:56 2012 -0700 +++ b/common/makefiles/JavaCompilation.gmk Wed Jul 05 18:27:34 2017 +0200 @@ -50,27 +50,17 @@ # FLAGS:=Flags to be supplied to javac # SERVER_DIR:=Use a javac server (-XDserver) and store the server related files here # SERVER_JVM:=Use this JVM for the server. Defaults to the JVM above. - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$(error Internal makefile error: Too many arguments to SetupJavaCompiler, please update JavaCompilation.gmk)) + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupJavaCompiler($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupJavaCompiler, please update JavaCompilation.gmk)) - ifeq ($$(ENABLE_SJAVAC),yes) - # The port file contains the tcp/ip on which the server listens - # and the cookie necessary to talk to the server. - $1_JAVAC_PORTFILE:=$$($1_SERVER_DIR)/server.port - # You can use a different JVM to run the background javac server. - ifeq ($$($1_SERVER_JVM),) - # It defaults to the same JVM that is used to start the javac command. - $1_SERVER_JVM:=$$($1_JVM) - endif - # Set the $1_REMOTE to spawn a background javac server. - $1_REMOTE:=-XDserver:portfile=$$($1_JAVAC_PORTFILE),poolsize=$(SJAVAC_SERVER_CORES),id=$1,javac=$$(subst $$(SPACE),%20,$$(subst $$(COMMA),%2C,$$(strip $$($1_SERVER_JVM) $$($1_JAVAC)))) + # The port file contains the tcp/ip on which the server listens + # and the cookie necessary to talk to the server. + $1_SJAVAC_PORTFILE:=$$($1_SERVER_DIR)/server.port + # You can use a different JVM to run the background javac server. + ifeq ($$($1_SERVER_JVM),) + # It defaults to the same JVM that is used to start the javac command. + $1_SERVER_JVM:=$$($1_JVM) endif endef @@ -92,19 +82,11 @@ # added to the archive. # EXTRA_MANIFEST_ATTR:=Extra attribute to add to manifest. # CHECK_COMPRESS_JAR Check the COMPRESS_JAR variable - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$1_$(strip $(10))) - $(if $(11),$1_$(strip $(11))) - $(if $(12),$1_$(strip $(12))) - $(if $(13),$1_$(strip $(13))) - $(if $(14),$1_$(strip $(14))) - $(if $(15),$1_$(strip $(15))) + + # NOTE: $2 is dependencies, not a named argument! + $(foreach i,3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupArchive($1),,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(findstring $(LOG),debug trace), $(info *[2] = $(strip $2))) $(if $(16),$(error Internal makefile error: Too many arguments to SetupArchive, please update JavaCompilation.gmk)) $1_JARMAIN:=$(strip $$($1_JARMAIN)) @@ -125,16 +107,28 @@ ifneq (,$$($1_INCLUDES)) $1_GREP_INCLUDE_PATTERNS:=$$(foreach src,$$($1_SRCS),\ $$(addprefix $$(src)/,$$($1_INCLUDES))) - $$(eval $$(call ListPathsSafelyNow,$1_GREP_INCLUDE_PATTERNS,\n, \ + # If there are a lot of include patterns, output to file to shorten command lines + ifeq ($$(word 20,$$($1_GREP_INCLUDE_PATTERNS)),) + $1_GREP_INCLUDES:=| $(GREP) $$(patsubst %,$(SPACE)-e$(SPACE)$(DQUOTE)%$(DQUOTE),$$($1_GREP_INCLUDE_PATTERNS)) + else + $$(shell $(RM) $$($1_BIN)/_the.$$($1_JARNAME)_include) + $$(eval $$(call ListPathsSafelyNow,$1_GREP_INCLUDE_PATTERNS,\n, \ >> $$($1_BIN)/_the.$$($1_JARNAME)_include)) - $1_GREP_INCLUDES:=| $(GREP) -f $$($1_BIN)/_the.$$($1_JARNAME)_include + $1_GREP_INCLUDES:=| $(GREP) -f $$($1_BIN)/_the.$$($1_JARNAME)_include + endif endif ifneq (,$$($1_EXCLUDES)$$($1_EXCLUDE_FILES)) $1_GREP_EXCLUDE_PATTERNS:=$$(foreach src,$$($1_SRCS),$$(addprefix $$(src)/,\ $$($1_EXCLUDES) $$($1_EXCLUDE_FILES))) - $$(eval $$(call ListPathsSafelyNow,$1_GREP_EXCLUDE_PATTERNS,\n, \ + # If there are a lot of include patterns, output to file to shorten command lines + ifeq ($$(word 20,$$($1_GREP_EXCLUDE_PATTERNS)),) + $1_GREP_EXCLUDES:=| $(GREP) -v $$(patsubst %,$(SPACE)-e$(SPACE)$(DQUOTE)%$(DQUOTE),$$($1_GREP_EXCLUDE_PATTERNS)) + else + $$(shell $(RM) $$($1_BIN)/_the.$$($1_JARNAME)_exclude) + $$(eval $$(call ListPathsSafelyNow,$1_GREP_EXCLUDE_PATTERNS,\n, \ >> $$($1_BIN)/_the.$$($1_JARNAME)_exclude)) - $1_GREP_EXCLUDES:=| $(GREP) -v -f $$($1_BIN)/_the.$$($1_JARNAME)_exclude + $1_GREP_EXCLUDES:=| $(GREP) -v -f $$($1_BIN)/_the.$$($1_JARNAME)_exclude + endif endif # Check if this jar needs to have its index generated. @@ -149,11 +143,13 @@ ifneq (,$2) $1_DEPS:=$2 else - $1_DEPS:=$$(foreach src,$$($1_SRCS),$$(shell ($(FIND) $$(src) -type f \ - -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ - $$($1_GREP_EXCLUDES) && $(ECHO) $$(addprefix $$(src)/,$$($1_EXTRA_FILES))))) + # The subst of \ is needed because $ has to be escaped with \ in EXTRA_FILES for the command + # lines, but not here for use in make dependencies. + $1_DEPS:=$$(shell $(FIND) $$($1_SRCS) -type f -a \( $$($1_FIND_PATTERNS) \) \ + $$($1_GREP_INCLUDES) $$($1_GREP_EXCLUDES)) \ + $$(subst \,,$$(foreach src,$$($1_SRCS),$$(addprefix $$(src)/,$$($1_EXTRA_FILES)))) ifeq (,$$($1_SKIP_METAINF)) - $1_DEPS+=$$(foreach src,$$($1_SRCS),$$(shell $(FIND) $$(src)/META-INF -type f 2> /dev/null)) + $1_DEPS+=$$(shell $(FIND) $$(addsuffix /META-INF,$$($1_SRCS)) -type f 2> /dev/null)) endif endif @@ -161,34 +157,39 @@ # The capture contents macro finds all files (matching the patterns, typically # .class and .prp) that are newer than the jar-file, ie the new content to be put into the jar. - $1_CAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),(($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) -a -newer $$@ $$($1_GREP_INCLUDES) $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > $$(src)/_the.$$($1_JARNAME)_contents) && ) + $1_CAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),\ + (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) -a -newer $$@ $$($1_GREP_INCLUDES) \ + $$($1_GREP_EXCLUDES) | $(SED) 's|$$(src)/||g' &&\ + $(ECHO) $$(subst $$(src)/,,$$($1_EXTRA_FILES))) > \ + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) # The capture metainf macro finds all files below the META-INF directory that are newer than the jar-file. ifeq (,$$($1_SKIP_METAINF)) - $1_CAPTURE_METAINF =$$(foreach src,$$($1_SRCS),($(FIND) $$(src)/META-INF -type f -a -newer $$@ 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents ) && ) + $1_CAPTURE_METAINF =$$(foreach src,$$($1_SRCS),($(FIND) $$(src)/META-INF -type f -a -newer $$@ 2> /dev/null | $(SED) 's|$$(src)/||g' >> $$(src)/_the.$$($1_JARNAME)_contents ) $$(NEWLINE)) endif # The capture deletes macro finds all deleted files and concatenates them. The resulting file # tells us what to remove from the jar-file. - $1_CAPTURE_DELETES=$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.deleted -newer $$@ -exec $(SED) 's|$$(src)||g' \{\} >> $$($1_DELETES_FILE) \;) &&) + $1_CAPTURE_DELETES=$$(foreach src,$$($1_SRCS),($(FIND) $$(src) -name _the.package.deleted -newer $$@ -exec $(SED) 's|$$(src)||g' \{\} >> $$($1_DELETES_FILE) \;) $$(NEWLINE)) # The update contents macro updates the jar file with the previously capture contents. $1_UPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\ (cd $$(src) && \ if [ -s _the.$$($1_JARNAME)_contents ]; then \ $(ECHO) " updating" `$(WC) -l _the.$$($1_JARNAME)_contents | $(AWK) '{ print $$$$1 }'` files && \ $(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @_the.$$($1_JARNAME)_contents; \ - fi) &&) + fi) $$(NEWLINE)) # The s-variants of the above macros are used when the jar is created from scratch. $1_SCAPTURE_CONTENTS=$$(foreach src,$$($1_SRCS),\ (($(FIND) $$(src) -type f -a \( $$($1_FIND_PATTERNS) \) $$($1_GREP_INCLUDES) \ - $$($1_GREP_EXCLUDES) && $(ECHO) $$($1_EXTRA_FILES)) | $(SED) 's|$$(src)/||g' > \ - $$(src)/_the.$$($1_JARNAME)_contents) && ) + $$($1_GREP_EXCLUDES) | $(SED) 's|$$(src)/||g' &&\ + $$(subst $$(src)/,,$(ECHO) $$($1_EXTRA_FILES))) > \ + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) ifeq (,$$($1_SKIP_METAINF)) $1_SCAPTURE_METAINF=$$(foreach src,$$($1_SRCS),\ ($(FIND) $$(src)/META-INF -type f 2> /dev/null | $(SED) 's|$$(src)/||g' >> \ - $$(src)/_the.$$($1_JARNAME)_contents) && ) + $$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) endif $1_SUPDATE_CONTENTS=$$(foreach src,$$($1_SRCS),\ - (cd $$(src) && $(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @$$(src)/_the.$$($1_JARNAME)_contents) &&) + (cd $$(src) && $(JAR) $$($1_JAR_UPDATE_OPTIONS) $$@ @$$(src)/_the.$$($1_JARNAME)_contents) $$(NEWLINE)) # Use a slightly shorter name for logging, but with enough path to identify this jar. $1_NAME:=$$(subst $$(OUTPUT_ROOT)/,,$$($1_JAR)) @@ -208,38 +209,32 @@ # Here is the rule that creates/updates the jar file. $$($1_JAR) : $$($1_DEPS) $(MKDIR) -p $$($1_BIN) - if [ -n "$$($1_MANIFEST)" ]; then \ + $$(if $$($1_MANIFEST),\ $(SED) -e "s#@@RELEASE@@#$(RELEASE)#" \ - -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" $$($1_MANIFEST) > $$($1_MANIFEST_FILE); \ - else \ - $(RM) $$($1_MANIFEST_FILE) && $(TOUCH) $$($1_MANIFEST_FILE); \ - fi - if [ -n "$$(strip $$($1_JARMAIN))" ]; then \ - $(ECHO) "Main-Class: $$(strip $$($1_JARMAIN))" >> $$($1_MANIFEST_FILE); \ - fi - if [ -n "$$($1_EXTRA_MANIFEST_ATTR)" ]; then \ - $(PRINTF) "$$($1_EXTRA_MANIFEST_ATTR)\n" >> $$($1_MANIFEST_FILE); \ - fi - +if [ -s $$@ ]; then \ - $(ECHO) Modifying $$($1_NAME) && \ + -e "s#@@COMPANY_NAME@@#$(COMPANY_NAME)#" $$($1_MANIFEST) > $$($1_MANIFEST_FILE) \ + ,\ + $(RM) $$($1_MANIFEST_FILE) && $(TOUCH) $$($1_MANIFEST_FILE)) + $$(if $$($1_JARMAIN),$(ECHO) "Main-Class: $$(strip $$($1_JARMAIN))" >> $$($1_MANIFEST_FILE)) + $$(if $$($1_EXTRA_MANIFEST_ATTR),$(PRINTF) "$$($1_EXTRA_MANIFEST_ATTR)\n" >> $$($1_MANIFEST_FILE)) + $$(if $$(wildcard $$@),\ + $(ECHO) Modifying $$($1_NAME) $$(NEWLINE)\ $$($1_CAPTURE_CONTENTS) \ $$($1_CAPTURE_METAINF) \ - $(RM) $$($1_DELETES_FILE) && \ + $(RM) $$($1_DELETES_FILE) $$(NEWLINE)\ $$($1_CAPTURE_DELETES) \ - $(CAT) $$($1_DELETES_FILE) > $$($1_DELETESS_FILE) && \ + $(CAT) $$($1_DELETES_FILE) > $$($1_DELETESS_FILE) $$(NEWLINE)\ if [ -s $$($1_DELETESS_FILE) ]; then \ $(ECHO) " deleting" `$(WC) -l $$($1_DELETESS_FILE) | $(AWK) '{ print $$$$1 }'` files && \ $(ZIP) -q -d $$@ `$(CAT) $$($1_DELETESS_FILE)` ; \ - fi && \ - $$($1_UPDATE_CONTENTS) true && \ - $$($1_JARINDEX) && true ; \ - else \ - $(ECHO) Creating $$($1_NAME) && $(JAR) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) && \ + fi $$(NEWLINE) \ + $$($1_UPDATE_CONTENTS) true $$(NEWLINE) \ + $$($1_JARINDEX) && true \ + ,\ + $(ECHO) Creating $$($1_NAME) && $(JAR) $$($1_JAR_CREATE_OPTIONS) $$@ $$($1_MANIFEST_FILE) $$(NEWLINE) \ $$($1_SCAPTURE_CONTENTS) \ $$($1_SCAPTURE_METAINF) \ $$($1_SUPDATE_CONTENTS) \ - $$($1_JARINDEX) && true ; \ - fi; + $$($1_JARINDEX) && true ) endef @@ -247,15 +242,9 @@ # param 1 is for example ZIP_MYSOURCE # param 2,3,4,5,6,7,8,9 are named args. # SRC,ZIP,INCLUDES,EXCLUDES,EXCLUDE_FILES,SUFFIXES,EXTRA_DEPS - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$(error Internal makefile error: Too many arguments to SetupZipArchive, please update JavaCompilation.gmk)) + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupZipArchive($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupZipArchive, please update JavaCompilation.gmk)) # Find all files in the source tree. $1_SUFFIX_FILTER := $$(patsubst %,-o -name $(DQUOTE)*%$(DQUOTE),$$($1_SUFFIXES)) @@ -274,7 +263,7 @@ ifneq ($$($1_EXCLUDES),) $1_SRC_EXCLUDES := $$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$(addsuffix /%,$$($1_EXCLUDES)))) $1_ZIP_EXCLUDES := $$(addprefix -x$(SPACE)$(DQUOTE),$$(addsuffix /*$(DQUOTE),$$($1_EXCLUDES))) - $1_ALL_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_SRC)) + $1_ALL_SRCS := $$(filter-out $$($1_SRC_EXCLUDES),$$($1_ALL_SRCS)) endif # Use a slightly shorter name for logging, but with enough path to identify this zip. @@ -288,7 +277,7 @@ $$($1_ZIP) : $$($1_ALL_SRCS) $$($1_EXTRA_DEPS) $(MKDIR) -p $$(@D) $(ECHO) Updating $$($1_NAME) - $$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$@ . $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* $$(addprefix -x$(SPACE),$$(patsubst $$i/%,%,$$($1_EXCLUDE_FILES)))) ;) true + $$(foreach i,$$($1_SRC),(cd $$i && $(ZIP) -qru $$@ . $$($1_ZIP_INCLUDES) $$($1_ZIP_EXCLUDES) -x \*_the.\* $$(addprefix -x$(SPACE),$$(patsubst $$i/%,%,$$($1_EXCLUDE_FILES))))$$(NEWLINE)) true $(TOUCH) $$@ endef @@ -324,7 +313,7 @@ $$($1_BIN)$$($2_TARGET) : $2 $(MKDIR) -p $$(@D) $(CAT) $$< | $(SED) -e 's/\([^\\]\):/\1\\:/g' -e 's/\([^\\]\)=/\1\\=/g' -e 's/#.*/#/g' \ - | $(SED) -f "$(SRC_ROOT)/common/bin/unicode2x.sed" \ + | $(SED) -f "$(SRC_ROOT)/common/makefiles/support/unicode2x.sed" \ | $(SED) -e '/^#/d' -e '/^$$$$/d' \ -e :a -e '/\\$$$$/N; s/\\\n//; ta' \ -e 's/^[ \t]*//;s/[ \t]*$$$$//' \ @@ -364,36 +353,27 @@ # Its only here until we cleanup some nasty source code pasta in the jdk. # HEADERS:=path to directory where all generated c-headers are written. # DEPENDS:=Extra dependecy - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$1_$(strip $(10))) - $(if $(11),$1_$(strip $(11))) - $(if $(12),$1_$(strip $(12))) - $(if $(13),$1_$(strip $(13))) - $(if $(14),$1_$(strip $(14))) - $(if $(15),$(error Internal makefile error: Too many arguments to SetupJavaCompilation, please update JavaCompilation.gmk)) + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupJavaCompilation($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupJavaCompilation, please update JavaCompilation.gmk)) # Extract the info from the java compiler setup. - $1_REMOTE := $$($$($1_SETUP)_REMOTE) $1_JVM := $$($$($1_SETUP)_JVM) $1_JAVAC := $$($$($1_SETUP)_JAVAC) $1_FLAGS := $$($$($1_SETUP)_FLAGS) $(JAVAC_FLAGS) $$($1_ADD_JAVAC_FLAGS) ifeq ($$($1_JAVAC),) $$(error The Java compilation $1 refers to a non-existant java compiler setup $$($1_SETUP)) endif + $1_SJAVAC_PORTFILE := $$($$($1_SETUP)_SJAVAC_PORTFILE) + $1_SERVER_JVM := $$($$($1_SETUP)_SERVER_JVM) # Handle addons and overrides. $1_SRC:=$$(call ADD_SRCS,$$($1_SRC)) # Make sure the dirs exist. - $$(shell $(MKDIR) -p $$($1_SRC) $$($1_BIN)) + $$(foreach d,$$($1_SRC), $$(if $$(wildcard $$d),,$$(error SRC specified to SetupJavaCompilation $1 contains missing directory $$d))) + $$(eval $$(call MakeDir,$$($1_BIN))) # Find all files in the source trees. - $1_ALL_SRCS := $$(filter-out $(OVR_SRCS),$$(foreach i,$$($1_SRC),$$(shell $(FIND) $$i -type f))) + $1_ALL_SRCS := $$(filter-out $(OVR_SRCS),$$(shell $(FIND) $$($1_SRC) -type f)) # Extract the java files. ifneq ($$($1_EXCLUDE_FILES),) $1_EXCLUDE_FILES_PATTERN:=$$(addprefix %,$$($1_EXCLUDE_FILES)) @@ -428,7 +408,7 @@ # Rewrite list of patterns into a find statement. $1_COPY_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_COPY)) # Search for all files to be copied. - $1_ALL_COPIES := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_COPY_PATTERN) \) -a -type f)) + $1_ALL_COPIES := $$(filter $$(addprefix %,$$($1_COPY)),$$($1_ALL_SRCS)) # Copy these explicitly $1_ALL_COPIES += $$($1_COPY_FILES) # Copy must also respect filters. @@ -442,7 +422,7 @@ $1_ALL_COPIES := $$(filter-out $$($1_EXCLUDE_FILES_PATTERN),$$($1_ALL_COPIES)) endif # All files below META-INF are always copied. - $1_ALL_COPIES += $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i/META-INF -type f 2> /dev/null)) + $1_ALL_COPIES += $$(filter $$(addsuffix /META-INF%,$$($1_SRC)),$$($1_ALL_SRCS)) ifneq (,$$($1_ALL_COPIES)) # Yep, there are files to be copied! $1_ALL_COPY_TARGETS:= @@ -456,7 +436,7 @@ # Rewrite list of patterns into a find statement. $1_CLEAN_PATTERN:=$(FALSE_FIND_PATTERN) $$(patsubst %,$(SPACE)-o$(SPACE)-name$(SPACE)$(DQUOTE)*%$(DQUOTE),$$($1_CLEAN)) # Search for all files to be copied. - $1_ALL_CLEANS := $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i \( $$($1_CLEAN_PATTERN) \) -a -type f)) + $1_ALL_CLEANS := $$(filter $$(addprefix %,$$($1_CLEAN)),$$($1_ALL_SRCS)) # Copy and clean must also respect filters. ifneq (,$$($1_INCLUDES)) $1_ALL_CLEANS := $$(filter $$($1_SRC_INCLUDES),$$($1_ALL_CLEANS)) @@ -482,30 +462,59 @@ $$(eval $$(call replace_space_with_pathsep,$1_SRCROOTSC,$$($1_SRC))) endif - ifneq (,$$($1_HEADERS)) - $1_HEADERS_ARG := -h $$($1_HEADERS) - endif - # Create a sed expression to remove the source roots and to replace / with . # and remove .java at the end. $1_REWRITE_INTO_CLASSES:=$$(foreach i,$$($1_SRC),-e 's|$$i/||g') -e 's|/|.|g' -e 's|.java$$$$||g' ifeq ($$($1_DISABLE_SJAVAC)x$$(ENABLE_SJAVAC),xyes) + ifneq (,$$($1_HEADERS)) + $1_HEADERS_ARG := -h $$($1_HEADERS) + endif + # Using sjavac to compile. $1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1_BIN)/javac_state + # Create SJAVAC variable, + # expects $1_JAVAC to be "bootclasspathprepend -jar ...javac.jar" + # and it is rewritten into "bootclasspathprepend com.sun.tools.sjavac.Main" + $1_SJAVAC:=$$(word 1,$$($1_JAVAC)) -cp $$(word 3,$$($1_JAVAC)) com.sun.tools.sjavac.Main + + # Set the $1_REMOTE to spawn a background javac server. + $1_REMOTE:=--server:portfile=$$($1_SJAVAC_PORTFILE),poolsize=$(SJAVAC_SERVER_CORES),id=$1,sjavac=$$(subst $$(SPACE),%20,$$(subst $$(COMMA),%2C,$$(strip $$($1_SERVER_JVM) $$($1_SJAVAC)))) + $$($1_BIN)/javac_state: $$($1_SRCS) $$($1_DEPENDS) $(MKDIR) -p $$(@D) $$(call ListPathsSafely,$1_SRCS,\n, >> $$($1_BIN)/_the.batch.tmp) $(ECHO) Compiling $1 - $$($1_JVM) $$(word 1,$$($1_JAVAC)) com.sun.tools.sjavac.Main \ - $$($1_REMOTE) $$($1_SJAVAC_ARGS) --permit-unidentified-artifacts -mfl $$($1_BIN)/_the.batch.tmp \ + $$($1_JVM) $$($1_SJAVAC) \ + $$($1_REMOTE) $$($1_SJAVAC_ARGS) \ + --permit-unidentified-artifacts \ + --permit-sources-without-package \ + --compare-found-sources $$($1_BIN)/_the.batch.tmp \ $$($1_FLAGS) \ -implicit:none -d $$($1_BIN) $$($1_HEADERS_ARG) else # Using plain javac to batch compile everything. $1 := $$($1_ALL_COPY_TARGETS) $$($1_ALL_COPY_CLEAN_TARGETS) $$($1_BIN)/_the.batch + # When buliding in batch, put headers in a temp dir to filter out those that actually + # changed before copying them to the real header dir. + ifneq (,$$($1_HEADERS)) + $1_HEADERS_ARG := -h $$($1_HEADERS).tmp + + $$($1_HEADERS)/_the.headers: $$($1_BIN)/_the.batch + $(MKDIR) -p $$(@D) + for f in `ls $$($1_HEADERS).tmp`; do \ + if [ ! -f "$$($1_HEADERS)/$$$$f" ] || [ "`$(DIFF) $$($1_HEADERS)/$$$$f $$($1_HEADERS).tmp/$$$$f`" != "" ]; then \ + $(CP) -f $$($1_HEADERS).tmp/$$$$f $$($1_HEADERS)/$$$$f; \ + fi; \ + done + $(RM) -r $$($1_HEADERS).tmp + $(TOUCH) $$@ + + $1 += $$($1_HEADERS)/_the.headers + endif + # When not using sjavac, pass along all sources to javac using an @file. $$($1_BIN)/_the.batch: $$($1_SRCS) $$($1_DEPENDS) $(MKDIR) -p $$(@D) @@ -516,6 +525,7 @@ -implicit:none -sourcepath "$$($1_SRCROOTSC)" \ -d $$($1_BIN) $$($1_HEADERS_ARG) @$$($1_BIN)/_the.batch.tmp && \ $(MV) $$($1_BIN)/_the.batch.tmp $$($1_BIN)/_the.batch) + endif # Check if a jar file was specified, then setup the rules for the jar. diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/Main.gmk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/makefiles/Main.gmk Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,208 @@ +# +# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# +# This code is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License version 2 only, as +# published by the Free Software Foundation. Oracle designates this +# particular file as subject to the "Classpath" exception as provided +# by Oracle in the LICENSE file that accompanied this code. +# +# This code is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +# version 2 for more details (a copy is included in the LICENSE file that +# accompanied this code). +# +# You should have received a copy of the GNU General Public License version +# 2 along with this work; if not, write to the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +# +# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +# or visit www.oracle.com if you need additional information or have any +# questions. +# + +### This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. + +# Now load the spec +include $(SPEC) + +# Load the vital tools for all the makefiles. +include $(SRC_ROOT)/common/makefiles/MakeBase.gmk + +# Include the corresponding custom file, if present. +-include $(CUSTOM_MAKE_DIR)/Main.gmk + +### Clean up from previous run + +# Remove any build.log from a previous run, if they exist +ifneq (,$(BUILD_LOG)) + ifneq (,$(BUILD_LOG_PREVIOUS)) + # Rotate old log + $(shell $(RM) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + $(shell $(MV) $(BUILD_LOG) $(BUILD_LOG_PREVIOUS) 2> /dev/null) + else + $(shell $(RM) $(BUILD_LOG) 2> /dev/null) + endif + $(shell $(RM) $(OUTPUT_ROOT)/build-trace-time.log 2> /dev/null) +endif +# Remove any javac server logs and port files. This +# prevents a new make run to reuse the previous servers. +ifneq (,$(SJAVAC_SERVER_DIR)) + $(shell $(MKDIR) -p $(SJAVAC_SERVER_DIR) && $(RM) -rf $(SJAVAC_SERVER_DIR)/*) +endif + +# Reset the build timers. +$(eval $(call ResetAllTimers)) + +# Setup number of jobs to use. -jN is unfortunately not available for us to parse from the command line, +# hence this workaround. +ifeq ($(JOBS),) + JOBS=$(NUM_CORES) +endif +MAKE_ARGS:=$(MAKE_ARGS) -j$(JOBS) + +### Main targets + +all: jdk + +start-make: + @$(call AtMakeStart) + +langtools: langtools-only +langtools-only: start-make + @$(call TargetEnter) + @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildLangtools.gmk) + @$(call TargetExit) + +corba: langtools corba-only +corba-only: start-make + @$(call TargetEnter) + @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildCorba.gmk) + @$(call TargetExit) + +jaxp: langtools jaxp-only +jaxp-only: start-make + @$(call TargetEnter) + @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJaxp.gmk) + @$(call TargetExit) + +jaxws: langtools jaxp jaxws-only +jaxws-only: start-make + @$(call TargetEnter) + @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJaxws.gmk) + @$(call TargetExit) + +hotspot: hotspot-only +hotspot-only: start-make + @$(call TargetEnter) + @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f HotspotWrapper.gmk) + @$(call TargetExit) + +jdk: langtools hotspot corba jaxp jaxws jdk-only +jdk-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk $(JDK_TARGET)) + @$(call TargetExit) + +demos: jdk demos-only +demos-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk demos) + @$(call TargetExit) + +images: source-tips demos images-only +images-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk images) + @$(call TargetExit) + +overlay-images: source-tips demos overlay-images-only +overlay-images-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk overlay-images) + @$(call TargetExit) + +bundles: images bundles-only +bundles-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk bundles) + @$(call TargetExit) + +install: images install-only +install-only: start-make + @$(call TargetEnter) + @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f BuildJdk.gmk install) + @$(call TargetExit) + +docs: jdk docs-only +docs-only: start-make + @$(call TargetEnter) + @($(CD) $(SRC_ROOT)/common/makefiles/javadoc && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk docs) + @$(call TargetExit) + +bootcycle-images: + @$(ECHO) Boot cycle build step 1: Building the JDK image normally + @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(SPEC) images) + @$(ECHO) Boot cycle build step 2: Building a new JDK image using previously built image + @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(dir $(SPEC))bootcycle-spec.gmk images) + +test: start-make + @$(call TargetEnter) + @($(CD) $(SRC_ROOT)/test && $(BUILD_LOG_WRAPPER) $(MAKE) MAKEFLAGS= -j1 PRODUCT_HOME=$(OUTPUT_ROOT)/jdk JPRT_JAVA_HOME=$(OUTPUT_ROOT)/jdk ALT_OUTPUTDIR=$(OUTPUT_ROOT) $(TEST)) || true + @$(call TargetExit) + +# Stores the tips for each repository. This file is be used when constructing the jdk image and can be +# used to track the exact sources used to build that image. +source-tips: $(OUTPUT_ROOT)/source_tips +$(OUTPUT_ROOT)/source_tips: FRC + @$(MKDIR) -p $(@D) + @$(RM) $@ + @$(if $(HG),$(call GetSourceTips),$(ECHO) "hg not installed" > $@) + + +# Remove everything, except the output from configure. +clean: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images clean-overlay-images clean-bootcycle-build + @($(CD) $(OUTPUT_ROOT) && $(RM) -r tmp source_tips build.log* build-trace*.log*) + @$(ECHO) Cleaned all build artifacts. + +# Remove everything, including configure configuration. +# If the output directory was created by configure and now becomes empty, remove it as well. +# FIXME: tmp should not be here, fix ResetTimers instead. And remove spec.sh! +dist-clean: clean + @($(CD) $(OUTPUT_ROOT) && $(RM) -r *spec.gmk config.* configure-arguments Makefile compare.sh spec.sh tmp) + @$(if $(filter $(CONF_NAME),$(notdir $(OUTPUT_ROOT))), \ + if test "x`$(LS) $(OUTPUT_ROOT)`" != x; then \ + $(ECHO) "Warning: Not removing non-empty configuration directory for '$(CONF_NAME)'" ;\ + else \ + ($(CD) $(SRC_ROOT) && $(ECHO) "Removing configuration directory for '$(CONF_NAME)'" && $(RM) -r $(OUTPUT_ROOT)) \ + fi \ + ) + @$(ECHO) Cleaned everything, you will have to re-run configure. + +clean-langtools: + $(call CleanComponent,langtools) +clean-corba: + $(call CleanComponent,corba) +clean-jaxp: + $(call CleanComponent,jaxp) +clean-jaxws: + $(call CleanComponent,jaxws) +clean-hotspot: + $(call CleanComponent,hotspot) +clean-jdk: + $(call CleanComponent,jdk) +clean-images: + $(call CleanComponent,images) +clean-overlay-images: + $(call CleanComponent,overlay-images) +clean-bootcycle-build: + $(call CleanComponent,bootcycle-build) + +.PHONY: langtools corba jaxp jaxws hotspot jdk images overlay-images install +.PHONY: langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only overlay-images-only install-only +.PHONY: all test clean dist-clean bootcycle-images start-make +.PHONY: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images clean-overlay-images clean-bootcycle-build + +FRC: # Force target diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/MakeBase.gmk --- a/common/makefiles/MakeBase.gmk Wed Oct 31 18:35:56 2012 -0700 +++ b/common/makefiles/MakeBase.gmk Wed Jul 05 18:27:34 2017 +0200 @@ -33,129 +33,13 @@ ifndef _MAKEBASE_GMK _MAKEBASE_GMK := 1 -ifeq (,$(findstring 3.81,$(MAKE_VERSION))) - ifeq (,$(findstring 3.82,$(MAKE_VERSION))) - $(error This version of GNU Make is too low ($(MAKE_VERSION)). Please upgrade to 3.81 or newer.) - endif -endif - -ifneq (,$(CYGPATH)) - # Cygwin styff, if needed but most is going to be - # done in configure! - ifeq (yes,$(CHECK_FOR_VCINSTALLDIR)) - ifeq (,$(VCINSTALLDIR)) - $(info Could not find compiler paths!) - $(info You probably configured the build from within a) - $(info VS command prompt, but you are not using such a) - $(info prompt right now.) - $(info If you instead run configure from a plain cygwin shell, it) - $(info will attempt to setup VS for you! Please try that.) - $(error Giving up for now.) - endif - endif -endif - -# The build times report is turned off by setting REPORT_BUILD_TIMES to nothing. -# This is necessary for the target clean which will erase the -# directories where the buildtimes are stored. -REPORT_BUILD_TIMES=1 -# Store the build times in this directory. -BUILDTIMESDIR=$(OUTPUT_ROOT)/tmp/buildtimes - -# Record starting time for build of a sub repository. -define RecordStartTime -$(MKDIR) -p $(BUILDTIMESDIR) -$(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_start_$1 -$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_start_$1_human_readable -endef - -# Indicate that we started to build a sub repository and record starting time. -define MakeStart -$(call RecordStartTime,$1) -$(BUILD_LOG_WRAPPER) $(PRINTF) "\n\n%s\n%s\n##### %-60.60s #####\n%s\n\n" \ -"########################################################################" \ -"########################################################################" \ -"Entering $1 for target(s) $2" \ -"########################################################################" -endef - -# Record ending time and calculate the difference and store it in a -# easy to read format. Handles builds that cross midnight. Expects -# that a build will never take 24 hours or more. -define RecordEndTime -$(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_end_$1 -$(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_end_$1_human_readable -$(ECHO) `$(CAT) $(BUILDTIMESDIR)/build_time_start_$1` `$(CAT) $(BUILDTIMESDIR)/build_time_end_$1` $1 | \ - $(NAWK) '{ F=$$7; T=$$14; if (F > T) { T+=3600*24 }; D=T-F; H=int(D/3600); \ - M=int((D-H*3600)/60); S=D-H*3600-M*60; printf("%02d:%02d:%02d %s\n",H,M,S,$$15); }' \ - > $(BUILDTIMESDIR)/build_time_diff_$1 -endef - -# Check if the current target is the final target, as specified by -# the user on the command line. If so, call PrintEndMessage. -define CheckIfFinished -$(if $(filter $@,$(MAKECMDGOALS)),$(call PrintEndMessage)) -# If no taget is given, "all" is default. Check for that, too. -# At most one of the tests can be true. -$(if $(MAKECMDGOALS),,$(if $(filter $@,all),$(call PrintEndMessage))) -endef - -# Indicate that we are done. -# Record ending time and print out the total time it took to build. -define MakeFinish -$(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,$1),) -$(BUILD_LOG_WRAPPER) $(PRINTF) "%s\n##### %-60.60s #####\n%s\n##### %-60.60s #####\n%s\n\n" \ -"########################################################################" \ -"Leaving $1 for target(s) $2" \ -"########################################################################" \ -$(if $(REPORT_BUILD_TIMES),"Build time `$(CAT) $(BUILDTIMESDIR)/build_time_diff_$1` for target(s) $2","") \ -"########################################################################" -$(call CheckIfFinished) -endef - -# Find all build_time_* files and print their contents in a list sorted -# on the name of the sub repository. -define ReportBuildTimes -$(BUILD_LOG_WRAPPER) $(PRINTF) -- "-- Build times ----------\nTarget %s\nStart %s\nEnd %s\n%s\n%s\n-------------------------\n" \ -"$1" \ -"`$(CAT) $(BUILDTIMESDIR)/build_time_start_TOTAL_human_readable`" \ -"`$(CAT) $(BUILDTIMESDIR)/build_time_end_TOTAL_human_readable`" \ -"`$(LS) $(BUILDTIMESDIR)/build_time_diff_* | $(GREP) -v _TOTAL | $(XARGS) $(CAT) | $(SORT) -k 2`" \ -"`$(CAT) $(BUILDTIMESDIR)/build_time_diff_TOTAL`" -endef - -define ResetTimers -$$(shell $(MKDIR) -p $(BUILDTIMESDIR) && $(RM) $(BUILDTIMESDIR)/build_time_*) -endef - -define StartTimer - $(call RecordStartTime,TOTAL) -endef - -define StopTimer - $(if $(REPORT_BUILD_TIMES),$(call RecordEndTime,TOTAL) && $(call ReportBuildTimes,$1),) -endef - -# Hook to be called as the very first thing when running a normal build -define AtRootMakeStart - $(if $(findstring --jobserver,$(MAKEFLAGS)), $(error make -j is not supported, use make JOBS=n)) - $(call PrintStartMessage) - $(call StartTimer) -endef - -# Hook to be called as the very last thing for targets that are "top level" targets -define AtRootMakeEnd - $(call StopTimer) - $(call CheckIfFinished) -endef - # If the variable that you want to send to stdout for piping into a file or otherwise, # is potentially long, for example the a list of file paths, eg a list of all package directories. # Then you need to use ListPathsSafely, which optimistically splits the output into several shell # calls as well as use compression on recurrent file paths segments, to get around the potential # command line length problem that exists in cygwin and other shells. -compress_pre:=$(strip $(shell cat $(SRC_ROOT)/common/makefiles/compress.pre)) -compress_post:=$(strip $(shell cat $(SRC_ROOT)/common/makefiles/compress.post)) +compress_pre:=$(strip $(shell $(CAT) $(SRC_ROOT)/common/makefiles/support/ListPathsSafely-pre-compress.incl)) +compress_post:=$(strip $(shell $(CAT) $(SRC_ROOT)/common/makefiles/support/ListPathsSafely-post-compress.incl)) compress_paths=$(compress_pre)\ $(subst $(SRC_ROOT),X97,\ $(subst $(OUTPUT_ROOT),X98,\ @@ -163,7 +47,7 @@ $(subst $(SPACE),\n,$(strip $1)))))\ $(compress_post) -decompress_paths=sed -f $(SRC_ROOT)/common/makefiles/uncompress.sed -e 's|X99|\\n|g' \ +decompress_paths=$(SED) -f $(SRC_ROOT)/common/makefiles/support/ListPathsSafely-uncompress.sed -e 's|X99|\\n|g' \ -e 's|X98|$(OUTPUT_ROOT)|g' -e 's|X97|$(SRC_ROOT)|g' \ -e 's|X00|X|g' | tr '\n' '$2' @@ -384,14 +268,67 @@ endef define SetupLogging - ifneq ($(findstring $(LOG),debug trace),) + ifeq ($$(LOG), trace) # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make + # For each target executed, will print + # Building (from ) ( newer) + # but with a limit of 20 on , to avoid cluttering logs too much (and causing a crash on Cygwin). OLD_SHELL:=$$(SHELL) - SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x + WRAPPER_SHELL:=$$(OLD_SHELL) $$(SRC_ROOT)/common/bin/shell-tracer.sh $$(if $$(TIME),$$(TIME),-) $$(OUTPUT_ROOT)/build-trace-time.log $$(OLD_SHELL) + SHELL=$$(warning $$(if $$@,Building $$@,Running shell command) $$(if $$<, (from $$<))$$(if $$?, ($$(wordlist 1, 20, $$?) $$(if $$(wordlist 21, 22, $$?), ... [in total $$(words $$?) files]) newer)))$$(WRAPPER_SHELL) + endif + # Never remove warning messages; this is just for completeness + LOG_WARN= + ifneq ($$(findstring $$(LOG),info debug trace),) + LOG_INFO= + else + LOG_INFO=> /dev/null + endif + ifneq ($$(findstring $$(LOG),debug trace),) + LOG_DEBUG= + else + LOG_DEBUG=> /dev/null + endif + ifneq ($$(findstring $$(LOG),trace),) + LOG_TRACE= + else + LOG_TRACE=> /dev/null endif endef # Make sure logging is setup for everyone that includes MakeBase.gmk. $(eval $(call SetupLogging)) +# This is to be called by all SetupFoo macros +define LogSetupMacroEntry + $(if $(26),$(error Internal makefile error: Too many arguments to LogSetupMacroEntry, please update MakeBase.gmk)) + $(if $(findstring $(LOG),debug trace), $(info $1 $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25,$(if $($i),$(NEWLINE) $(strip [$i] $($i)))))) +endef + +# Make directory without forking mkdir if not needed +define MakeDir + ifneq ($$(wildcard $1 $2 $3 $4 $5 $6 $7 $8 $9),$$(strip $1 $2 $3 $4 $5 $6 $7 $8 $9)) + $$(shell $(MKDIR) -p $1 $2 $3 $4 $5 $6 $7 $8 $9) + endif +endef + +ifeq ($(OPENJDK_TARGET_OS),solaris) +# On Solaris, if the target is a symlink and exists, cp won't overwrite. +define install-file + $(MKDIR) -p $(@D) + $(RM) '$@' + $(CP) -f -r -P '$<' '$(@D)' +endef +else ifeq ($(OPENJDK_TARGET_OS),macosx) +define install-file + $(MKDIR) -p $(@D) + $(CP) -fpRP '$<' '$@' +endef +else +define install-file + $(MKDIR) -p $(@D) + $(CP) -fP '$<' '$@' +endef +endif + endif # _MAKEBASE_GMK diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/MakeHelpers.gmk --- a/common/makefiles/MakeHelpers.gmk Wed Oct 31 18:35:56 2012 -0700 +++ b/common/makefiles/MakeHelpers.gmk Wed Jul 05 18:27:34 2017 +0200 @@ -45,13 +45,130 @@ list_alt_overrides_with_origins=$(filter ALT_%=environment ALT_%=command,$(foreach var,$(.VARIABLES),$(var)=$(firstword $(origin $(var))))) list_alt_overrides=$(subst =command,,$(subst =environment,,$(list_alt_overrides_with_origins))) +# Store the build times in this directory. +BUILDTIMESDIR=$(OUTPUT_ROOT)/tmp/buildtimes + +# Global targets are possible to run either with or without a SPEC. The prototypical +# global target is "help". +global_targets=help configure + ############################## # Functions ############################## -define fatal-error +define CheckEnvironment + # Find all environment or command line variables that begin with ALT. + $(if $(list_alt_overrides), + @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" + @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" + @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n\n" + ) +endef + +### Functions for timers + +# Record starting time for build of a sub repository. +define RecordStartTime + $(MKDIR) -p $(BUILDTIMESDIR) + $(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_start_$1 + $(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_start_$1_human_readable +endef + +# Record ending time and calculate the difference and store it in a +# easy to read format. Handles builds that cross midnight. Expects +# that a build will never take 24 hours or more. +define RecordEndTime + $(DATE) '+%Y %m %d %H %M %S' | $(NAWK) '{ print $$1,$$2,$$3,$$4,$$5,$$6,($$4*3600+$$5*60+$$6) }' > $(BUILDTIMESDIR)/build_time_end_$1 + $(DATE) '+%Y-%m-%d %H:%M:%S' > $(BUILDTIMESDIR)/build_time_end_$1_human_readable + $(ECHO) `$(CAT) $(BUILDTIMESDIR)/build_time_start_$1` `$(CAT) $(BUILDTIMESDIR)/build_time_end_$1` $1 | \ + $(NAWK) '{ F=$$7; T=$$14; if (F > T) { T+=3600*24 }; D=T-F; H=int(D/3600); \ + M=int((D-H*3600)/60); S=D-H*3600-M*60; printf("%02d:%02d:%02d %s\n",H,M,S,$$15); }' \ + > $(BUILDTIMESDIR)/build_time_diff_$1 +endef + +# Find all build_time_* files and print their contents in a list sorted +# on the name of the sub repository. +define ReportBuildTimes + $(BUILD_LOG_WRAPPER) $(PRINTF) -- "----- Build times -------\nStart %s\nEnd %s\n%s\n%s\n-------------------------\n" \ + "`$(CAT) $(BUILDTIMESDIR)/build_time_start_TOTAL_human_readable`" \ + "`$(CAT) $(BUILDTIMESDIR)/build_time_end_TOTAL_human_readable`" \ + "`$(LS) $(BUILDTIMESDIR)/build_time_diff_* | $(GREP) -v _TOTAL | $(XARGS) $(CAT) | $(SORT) -k 2`" \ + "`$(CAT) $(BUILDTIMESDIR)/build_time_diff_TOTAL`" +endef + +define ResetAllTimers + $$(shell $(MKDIR) -p $(BUILDTIMESDIR) && $(RM) $(BUILDTIMESDIR)/build_time_*) +endef + +define StartGlobalTimer + $(call RecordStartTime,TOTAL) +endef + +define StopGlobalTimer + $(call RecordEndTime,TOTAL) +endef + +### Functions for managing makefile structure (start/end of makefile and individual targets) + +# Do not indent this function, this will add whitespace at the start which the caller won't handle +define GetRealTarget +$(strip $(if $(MAKECMDGOALS),$(MAKECMDGOALS),all)) +endef + +# Do not indent this function, this will add whitespace at the start which the caller won't handle +define LastGoal +$(strip $(lastword $(call GetRealTarget))) +endef + +# Check if the current target is the final target, as specified by +# the user on the command line. If so, call AtRootMakeEnd. +define CheckIfMakeAtEnd + # Check if the current target is the last goal + $(if $(filter $@,$(call LastGoal)),$(call AtMakeEnd)) + # If the target is 'foo-only', check if our goal was stated as 'foo' + $(if $(filter $(patsubst %-only,%,$@),$(call LastGoal)),$(call AtMakeEnd)) + # If no goal is given, 'all' is default, but the last target executed for all is 'jdk-only'. Check for that, too. + # At most one of the tests can be true. + $(if $(subst all,,$(call LastGoal)),,$(if $(filter $@,jdk-only),$(call AtMakeEnd))) +endef + +# Hook to be called when starting to execute a top-level target +define TargetEnter + $(BUILD_LOG_WRAPPER) $(PRINTF) "## Starting $(patsubst %-only,%,$@)\n" + $(call RecordStartTime,$(patsubst %-only,%,$@)) +endef + +# Hook to be called when finish executing a top-level target +define TargetExit + $(call RecordEndTime,$(patsubst %-only,%,$@)) + $(BUILD_LOG_WRAPPER) $(PRINTF) "## Finished $(patsubst %-only,%,$@) (build time %s)\n\n" \ + "`$(CAT) $(BUILDTIMESDIR)/build_time_diff_$(patsubst %-only,%,$@) | $(CUT) -f 1 -d " "`" + $(call CheckIfMakeAtEnd) +endef + +# Hook to be called as the very first thing when running a normal build +define AtMakeStart + $(if $(findstring --jobserver,$(MAKEFLAGS)),$(error make -j is not supported, use make JOBS=n)) + $(call CheckEnvironment) + @$(PRINTF) $(LOG_INFO) "Running make as '$(MAKE) $(MFLAGS) $(MAKE_ARGS)'\n" + @$(PRINTF) "Building $(PRODUCT_NAME) for target '$(call GetRealTarget)' in configuration '$(CONF_NAME)'\n\n" + $(call StartGlobalTimer) +endef + +# Hook to be called as the very last thing for targets that are "top level" targets +define AtMakeEnd + $(if $(SJAVAC_SERVER_DIR),@$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) + $(call StopGlobalTimer) + $(call ReportBuildTimes) + @$(PRINTF) "Finished building $(PRODUCT_NAME) for target '$(call GetRealTarget)'\n" + $(call CheckEnvironment) +endef + +### Functions for parsing and setting up make options from command-line + +define FatalError # If the user specificed a "global" target (e.g. 'help'), do not exit but continue running - $$(if $$(findstring help,$$(MAKECMDGOALS)),,$$(error Cannot continue)) + $$(if $$(filter-out $(global_targets),$$(call GetRealTarget)),$$(error Cannot continue)) endef define ParseLogLevel @@ -80,14 +197,14 @@ ifeq ($$(LOG),warn) VERBOSE=-s else ifeq ($$(LOG),info) - VERBOSE= + VERBOSE=-s else ifeq ($$(LOG),debug) VERBOSE= else ifeq ($$(LOG),trace) - VERBOSE=-d -p + VERBOSE= else $$(info Error: LOG must be one of: warn, info, debug or trace.) - $$(eval $$(call fatal-error)) + $$(eval $$(call FatalError)) endif else ifneq ($$(LOG),) @@ -95,108 +212,84 @@ # but complain if this is the top-level make call. ifeq ($$(MAKELEVEL),0) $$(info Cannot use LOG=$$(LOG) and VERBOSE=$$(VERBOSE) at the same time. Choose one.) - $$(eval $$(call fatal-error)) + $$(eval $$(call FatalError)) endif endif endif endef -# TODO: Fix duplication in MakeBase.gmk -define SetupLogging - ifneq ($(findstring $(LOG),debug trace),) - # Shell redefinition trick inspired by http://www.cmcrossroads.com/ask-mr-make/6535-tracing-rule-execution-in-gnu-make - OLD_SHELL:=$$(SHELL) - SHELL = $$(warning Building $$@$$(if $$<, (from $$<))$(if $$?, ($$? newer)))$$(OLD_SHELL) -x - endif -endef - define ParseConfAndSpec - ifneq ($$(origin SPEC),undefined) - # We have been given a SPEC, check that it works out properly - ifeq ($$(wildcard $$(SPEC)),) - $$(info Cannot locate spec.gmk, given by SPEC=$$(SPEC)) - $$(eval $$(call fatal-error)) - endif - ifneq ($$(origin CONF),undefined) - # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, - # but complain if this is the top-level make call. - ifeq ($$(MAKELEVEL),0) - $$(info Cannot use CONF=$$(CONF) and SPEC=$$(SPEC) at the same time. Choose one.) - $$(eval $$(call fatal-error)) + ifneq ($$(filter-out $(global_targets),$$(call GetRealTarget)),) + # If we only have global targets, no need to bother with SPEC or CONF + ifneq ($$(origin SPEC),undefined) + # We have been given a SPEC, check that it works out properly + ifeq ($$(wildcard $$(SPEC)),) + $$(info Cannot locate spec.gmk, given by SPEC=$$(SPEC)) + $$(eval $$(call FatalError)) endif - endif - # ... OK, we're satisfied, we'll use this SPEC later on - else - # Find all spec.gmk files in the build output directory - output_dir=$$(root_dir)/build - all_spec_files=$$(wildcard $$(output_dir)/*/spec.gmk) - ifeq ($$(all_spec_files),) - $$(info No configurations found for $$(root_dir)! Please run configure to create a configuration.) - $$(eval $$(call fatal-error)) - endif - # Extract the configuration names from the path - all_confs=$$(patsubst %/spec.gmk,%,$$(patsubst $$(output_dir)/%,%,$$(all_spec_files))) - - ifneq ($$(origin CONF),undefined) - # User have given a CONF= argument. - ifeq ($$(CONF),) - # If given CONF=, match all configurations - matching_confs=$$(strip $$(all_confs)) - else - # Otherwise select those that contain the given CONF string - matching_confs=$$(strip $$(foreach var,$$(all_confs),$$(if $$(findstring $$(CONF),$$(var)),$$(var)))) - endif - ifeq ($$(matching_confs),) - $$(info No configurations found matching CONF=$$(CONF)) - $$(info Available configurations:) - $$(foreach var,$$(all_confs),$$(info * $$(var))) - $$(eval $$(call fatal-error)) - else - ifeq ($$(words $$(matching_confs)),1) - $$(info Building '$$(matching_confs)' (matching CONF=$$(CONF))) - else - $$(info Building the following configurations (matching CONF=$$(CONF)):) - $$(foreach var,$$(matching_confs),$$(info * $$(var))) + ifneq ($$(origin CONF),undefined) + # We also have a CONF argument. This is OK only if this is a repeated call by ourselves, + # but complain if this is the top-level make call. + ifeq ($$(MAKELEVEL),0) + $$(info Cannot use CONF=$$(CONF) and SPEC=$$(SPEC) at the same time. Choose one.) + $$(eval $$(call FatalError)) endif endif - - # Create a SPEC definition. This will contain the path to one or more spec.gmk files. - SPEC=$$(addsuffix /spec.gmk,$$(addprefix $$(output_dir)/,$$(matching_confs))) + # ... OK, we're satisfied, we'll use this SPEC later on else - # No CONF or SPEC given, check the available configurations - ifneq ($$(words $$(all_spec_files)),1) - $$(info No CONF or SPEC given, but more than one spec.gmk found in $$(output_dir).) - $$(info Available configurations:) - $$(foreach var,$$(all_confs),$$(info * $$(var))) - $$(info Please retry building with CONF= or SPEC=) - $$(eval $$(call fatal-error)) + # Find all spec.gmk files in the build output directory + output_dir=$$(root_dir)/build + all_spec_files=$$(wildcard $$(output_dir)/*/spec.gmk) + ifeq ($$(all_spec_files),) + $$(info No configurations found for $$(root_dir)! Please run configure to create a configuration.) + $$(eval $$(call FatalError)) endif + # Extract the configuration names from the path + all_confs=$$(patsubst %/spec.gmk,%,$$(patsubst $$(output_dir)/%,%,$$(all_spec_files))) - # We found exactly one configuration, use it - SPEC=$$(strip $$(all_spec_files)) + ifneq ($$(origin CONF),undefined) + # User have given a CONF= argument. + ifeq ($$(CONF),) + # If given CONF=, match all configurations + matching_confs=$$(strip $$(all_confs)) + else + # Otherwise select those that contain the given CONF string + matching_confs=$$(strip $$(foreach var,$$(all_confs),$$(if $$(findstring $$(CONF),$$(var)),$$(var)))) + endif + ifeq ($$(matching_confs),) + $$(info No configurations found matching CONF=$$(CONF)) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(eval $$(call FatalError)) + else + ifeq ($$(words $$(matching_confs)),1) + $$(info Building '$$(matching_confs)' (matching CONF=$$(CONF))) + else + $$(info Building target '$(call GetRealTarget)' in the following configurations (matching CONF=$$(CONF)):) + $$(foreach var,$$(matching_confs),$$(info * $$(var))) + endif + endif + + # Create a SPEC definition. This will contain the path to one or more spec.gmk files. + SPEC=$$(addsuffix /spec.gmk,$$(addprefix $$(output_dir)/,$$(matching_confs))) + else + # No CONF or SPEC given, check the available configurations + ifneq ($$(words $$(all_spec_files)),1) + $$(info No CONF given, but more than one configuration found in $$(output_dir).) + $$(info Available configurations:) + $$(foreach var,$$(all_confs),$$(info * $$(var))) + $$(info Please retry building with CONF= (or SPEC=)) + $$(eval $$(call FatalError)) + endif + + # We found exactly one configuration, use it + SPEC=$$(strip $$(all_spec_files)) + endif endif endif endef -define CheckEnvironment - # Find all environment or command line variables that begin with ALT. - $(if $(list_alt_overrides), - @$(PRINTF) "\nWARNING: You have the following ALT_ variables set:\n" - @$(PRINTF) "$(foreach var,$(list_alt_overrides),$(var)=$$$(var))\n" - @$(PRINTF) "ALT_ variables are deprecated and will be ignored. Please clean your environment.\n\n" - ) -endef - -define PrintStartMessage - $(if $(VERBOSE),,@$(ECHO) Running make as $(MAKE) $(MFLAGS) $(MAKE_ARGS)) - $(call CheckEnvironment) - @$(ECHO) "Building OpenJDK for target $(if $(MAKECMDGOALS),'$(MAKECMDGOALS)','all') in configuration '$(CONF_NAME)'" -endef - -define PrintEndMessage - @$(ECHO) "Finished building OpenJDK for target '$@'" - $(call CheckEnvironment) -endef +### Convenience functions from Main.gmk # Cleans the component given as $1 define CleanComponent diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/Makefile --- a/common/makefiles/Makefile Wed Oct 31 18:35:56 2012 -0700 +++ b/common/makefiles/Makefile Wed Jul 05 18:27:34 2017 +0200 @@ -24,13 +24,24 @@ # # This must be the first rule -default: all +all: # Inclusion of this pseudo-target will cause make to execute this file # serially, regardless of -j. Recursively called makefiles will not be # affected, however. This is required for correct dependency management. .NOTPARALLEL: +# The shell code below will be executed on /usr/ccs/bin/make on Solaris, but not in GNU make. +# /usr/ccs/bin/make lacks basically every other flow control mechanism. +TEST_FOR_NON_GNUMAKE:sh=echo You are not using GNU make/gmake, this is a requirement. Check your path. 1>&2 && exit 1 + +# Assume we have GNU make, but check version. +ifeq (,$(findstring 3.81,$(MAKE_VERSION))) + ifeq (,$(findstring 3.82,$(MAKE_VERSION))) + $(error This version of GNU Make is too low ($(MAKE_VERSION)). Check your path, or upgrade to 3.81 or newer.) + endif +endif + # Locate this Makefile ifeq ($(filter /%,$(lastword $(MAKEFILE_LIST))),) makefile_path:=$(CURDIR)/$(lastword $(MAKEFILE_LIST)) @@ -43,202 +54,32 @@ include $(dir $(makefile_path))/MakeHelpers.gmk $(eval $(call ParseLogLevel)) -$(eval $(call SetupLogging)) $(eval $(call ParseConfAndSpec)) -ifneq ($(words $(SPEC)),1) -### We have multiple configurations to build, call make repeatedly -all clean dist-clean: -langtools corba jaxp jaxws hotspot jdk images overlay-images install: -langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only overlay-images-only install-only: -clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images: +# Now determine if we have zero, one or several configurations to build. +ifeq ($(SPEC),) + # Since we got past ParseConfAndSpec, we must be building a global target. Do nothing. +else + ifeq ($(words $(SPEC)),1) + # We are building a single configuration. This is the normal case. Execute the Main.gmk file. + include $(dir $(makefile_path))/Main.gmk + else + # We are building multiple configurations. + # First, find out the valid targets + # Run the makefile with an arbitraty SPEC using -p -q (quiet dry-run and dump rules) to find + # available PHONY targets. Use this list as valid targets to pass on to the repeated calls. + all_phony_targets=$(filter-out $(global_targets), $(strip $(shell \ + $(MAKE) -p -q -f $(makefile_path) SPEC=$(firstword $(SPEC)) | \ + grep ^.PHONY: | head -n 1 | cut -d " " -f 2-))) + +$(all_phony_targets): @$(foreach spec,$(SPEC),($(MAKE) -f $(makefile_path) SPEC=$(spec) $(VERBOSE) VERBOSE=$(VERBOSE) $@) &&) true -.PHONY: all clean dist-clean -.PHONY: langtools corba jaxp jaxws hotspot jdk images overlay-images install -.PHONY: langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only overlay-images-only install-only -.PHONY: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images - -else -### This is the main part of the Makefile, for the normal case with SPEC specifying a single existing spec.gmk file. - -# Now load the spec -include $(SPEC) - -# Load the vital tools for all the makefiles. -include $(SRC_ROOT)/common/makefiles/MakeBase.gmk - -### Clean up from previous run - -# Remove any build.log from a previous run, if they exist -ifneq (,$(BUILD_LOG)) - ifneq (,$(BUILD_LOG_PREVIOUS)) - # Rotate old log - $(shell $(RM) $(BUILD_LOG_PREVIOUS) 2> /dev/null) - $(shell $(MV) $(BUILD_LOG) $(BUILD_LOG_PREVIOUS) 2> /dev/null) - else - $(shell $(RM) $(BUILD_LOG) 2> /dev/null) endif endif -# Remove any javac server logs and port files. This -# prevents a new make run to reuse the previous servers. -ifneq (,$(SJAVAC_SERVER_DIR)) - $(shell $(MKDIR) -p $(SJAVAC_SERVER_DIR) && $(RM) -rf $(SJAVAC_SERVER_DIR)/*) -endif -# Clean out any notifications from the previous build. -$(shell $(FIND) $(OUTPUT_ROOT) -name "_the.*.notify" $(FIND_DELETE)) - -# Reset the build timers. -$(eval $(call ResetTimers)) - -# Setup number of jobs to use. -jN is unfortunately not available for us to parse from the command line, -# hence this workaround. -ifeq ($(JOBS),) - JOBS=$(NUM_CORES) -endif -MAKE_ARGS:=$(MAKE_ARGS) -j$(JOBS) - -### Main targets - -all: jdk - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) -.PHONY: all - -langtools: start-make langtools-only -langtools-only: - @$(call MakeStart,langtools,all) - @($(CD) $(LANGTOOLS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS)) - @$(call MakeFinish,langtools,all) - -corba: langtools corba-only -corba-only: - @$(call MakeStart,corba,all) - @($(CD) $(CORBA_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS)) - @$(call MakeFinish,corba,all) - -jaxp: langtools jaxp-only -jaxp-only: - @$(call MakeStart,jaxp,all) - @($(CD) $(JAXP_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS)) - @$(call MakeFinish,jaxp,all) - -jaxws: langtools jaxp jaxws-only -jaxws-only: - @$(call MakeStart,jaxws,all) - @($(CD) $(JAXWS_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS)) - @$(call MakeFinish,jaxws,all) - -hotspot: langtools hotspot-only -hotspot-only: - @$(call MakeStart,hotspot,all) - @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f HotspotWrapper.gmk) - @$(call MakeFinish,hotspot,all) - -jdk: langtools corba jaxp jaxws hotspot jdk-only -jdk-only: - @$(call MakeStart,jdk,all) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) $(JDK_TARGET)) - @$(call MakeFinish,jdk,all) - -images: source-tips start-make jdk langtools corba jaxp jaxws hotspot images-only -images-only: - @$(call MakeStart,jdk-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) images) - @$(call MakeFinish,jdk-images,$@) - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) - -overlay-images: source-tips start-make jdk langtools corba jaxp jaxws hotspot overlay-images-only -overlay-images-only: - @$(call MakeStart,jdk-overlay-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) overlay-images) - @$(call MakeFinish,jdk-overlay-images,$@) - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) - -install: source-tips start-make jdk langtools corba jaxp jaxws hotspot install-only -install-only: - @$(call MakeStart,jdk-images,$@) - @($(CD) $(JDK_TOPDIR)/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) install) - @$(call MakeFinish,jdk-images,$@) - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) - -docs: start-make jdk docs-only -docs-only: - @$(call MakeStart,docs,$@) - @($(CD) $(SRC_ROOT)/common/makefiles/javadoc && $(BUILD_LOG_WRAPPER) $(MAKE) $(MAKE_ARGS) -f Javadoc.gmk docs) - @$(call MakeFinish,docs,$@) - @$(if $(SJAVAC_SERVER_DIR),$(RM) -rf $(SJAVAC_SERVER_DIR)/*.port) - @$(call AtRootMakeEnd) - - -.PHONY: langtools corba jaxp jaxws hotspot jdk images install -.PHONY: langtools-only corba-only jaxp-only jaxws-only hotspot-only jdk-only images-only install-only - -start-make: - @$(call AtRootMakeStart) -.PHONY: start-make - -bootcycle-images: - @$(ECHO) Boot cycle build step 1: Building the JDK image normally - @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(SPEC) images) - @$(ECHO) Boot cycle build step 2: Building a new JDK image using previously built image - @($(CD) $(SRC_ROOT)/common/makefiles && $(BUILD_LOG_WRAPPER) $(MAKE) SPEC=$(dir $(SPEC))bootcycle-spec.gmk images) - -test: start-make - @$(call MakeStart,test,$(if $(TEST),$(TEST),all)) - @($(CD) $(SRC_ROOT)/test && $(BUILD_LOG_WRAPPER) $(MAKE) MAKEFLAGS= -j1 PRODUCT_HOME=$(OUTPUT_ROOT)/jdk JPRT_JAVA_HOME=$(OUTPUT_ROOT)/jdk ALT_OUTPUTDIR=$(OUTPUT_ROOT) $(TEST)) || true - @$(call MakeFinish,test,$(if $(TEST),$(TEST),all)) - @$(call AtRootMakeEnd) -.PHONY: test - - -# Stores the tips for each repository. This file is be used when constructing the jdk image and can be -# used to track the exact sources used to build that image. -source-tips: $(OUTPUT_ROOT)/source_tips -$(OUTPUT_ROOT)/source_tips: FRC - @$(MKDIR) -p $(@D) - @$(RM) $@ - @$(call GetSourceTips) - - -# Remove everything, except the output from configure. -clean: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images clean-bootcycle-build - @($(CD) $(OUTPUT_ROOT) && $(RM) -r tmp source_tips build.log*) - @$(ECHO) Cleaned everything except the build configuration. -.PHONY: clean - -# Remove everything, you have to rerun configure. -dist-clean: - @$(RM) -r $(OUTPUT_ROOT) - @$(ECHO) Cleaned everything, you will have to re-run configure. -.PHONY: dist-clean - -clean-langtools: - $(call CleanComponent,langtools) -clean-corba: - $(call CleanComponent,corba) -clean-jaxp: - $(call CleanComponent,jaxp) -clean-jaxws: - $(call CleanComponent,jaxws) -clean-hotspot: - $(call CleanComponent,hotspot) -clean-jdk: - $(call CleanComponent,jdk) -clean-images: - $(call CleanComponent,images) -clean-bootcycle-build: - $(call CleanComponent,bootcycle-build) - -.PHONY: clean-langtools clean-corba clean-jaxp clean-jaxws clean-hotspot clean-jdk clean-images - -endif # Here are "global" targets, i.e. targets that can be executed without specifying a single configuration. -# If you addd more global targets, please update the fatal-error macro. +# If you addd more global targets, please update the variable global_targets in MakeHelpers. help: $(info ) @@ -258,7 +99,7 @@ $(info . make test # Run tests, default is all tests (see TEST below)) $(info ) $(info Targets for specific components) - $(info (Component is any of langtools, corba, jaxp, jaxws, hotspot, jdk or images)) + $(info (Component is any of langtools, corba, jaxp, jaxws, hotspot, jdk, images or overlay-images)) $(info . make # Build and everything it depends on. ) $(info . make -only # Build only, without dependencies. This) $(info . # is faster but can result in incorrect build results!) @@ -272,7 +113,7 @@ $(info . make LOG= # Change the log level from warn to ) $(info . # Available log levels are:) $(info . # 'warn' (default), 'info', 'debug' and 'trace') - $(info . # To see executed command lines, use LOG=info) + $(info . # To see executed command lines, use LOG=debug) $(info ) $(info . make JOBS= # Run parallel make jobs) $(info . # Note that -jN does not work as expected!) @@ -280,5 +121,11 @@ $(info . make test TEST= # Only run the given test or tests, e.g.) $(info . # make test TEST="jdk_lang jdk_net") $(info ) -.PHONY: help -FRC: # Force target + +configure: + @$(SHELL) $(root_dir)/configure $(CONFIGURE_ARGS) + @echo ==================================================== + @echo "Note: This is a non-recommended way of running configure." + @echo "Instead, run 'sh configure' in the top-level directory" + +.PHONY: help configure diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/NativeCompilation.gmk --- a/common/makefiles/NativeCompilation.gmk Wed Oct 31 18:35:56 2012 -0700 +++ b/common/makefiles/NativeCompilation.gmk Wed Jul 05 18:27:34 2017 +0200 @@ -32,10 +32,10 @@ endif ifeq ($(COMPILER_TYPE),CC) - COMPILING_MSG=echo Compiling $1 - LINKING_MSG=echo Linking $1 - LINKING_EXE_MSG=echo Linking executable $1 - ARCHIVING_MSG=echo Archiving $1 + COMPILING_MSG=echo $(LOG_INFO) "Compiling $(notdir $1) (for $(notdir $2))" + LINKING_MSG=echo $(LOG_INFO) "Linking $1" + LINKING_EXE_MSG=echo $(LOG_INFO) "Linking executable $1" + ARCHIVING_MSG=echo $(LOG_INFO) "Archiving $1" else COMPILING_MSG= LINKING_MSG= @@ -94,7 +94,7 @@ $$($1_$2_OBJ) : $2 ifeq ($(COMPILER_TYPE),CC) - $$(call COMPILING_MSG,$$(notdir $2)) + $$(call COMPILING_MSG,$2,$$($1_TARGET)) $$($1_$2_COMP) $$($1_$2_FLAGS) $$($1_$2_DEP_FLAG) $$($1_$2_DEP) $(CC_OUT_OPTION)$$($1_$2_OBJ) $2 endif ifeq ($(COMPILER_TYPE),CL) @@ -129,30 +129,8 @@ # CC the compiler to use, default is $(CC) # LDEXE the linker to use for linking executables, default is $(LDEXE) # OPTIMIZATION sets optimization level to NONE, LOW, HIGH, HIGHEST - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$1_$(strip $(10))) - $(if $(11),$1_$(strip $(11))) - $(if $(12),$1_$(strip $(12))) - $(if $(13),$1_$(strip $(13))) - $(if $(14),$1_$(strip $(14))) - $(if $(15),$1_$(strip $(15))) - $(if $(16),$1_$(strip $(16))) - $(if $(17),$1_$(strip $(17))) - $(if $(18),$1_$(strip $(18))) - $(if $(19),$1_$(strip $(19))) - $(if $(20),$1_$(strip $(20))) - $(if $(21),$1_$(strip $(21))) - $(if $(22),$1_$(strip $(22))) - $(if $(23),$1_$(strip $(23))) - $(if $(24),$1_$(strip $(24))) - $(if $(25),$1_$(strip $(25))) + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupNativeCompilation($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15),$(16),$(17),$(18),$(19),$(20),$(21),$(22),$(23),$(24),$(25)) $(if $(26),$(error Internal makefile error: Too many arguments to SetupNativeCompilation, please update NativeCompilation.gmk)) ifneq (,$$($1_BIN)) @@ -236,9 +214,9 @@ $$(error You have to specify LANG for native compilation $1) endif ifeq (C,$$($1_LANG)) - ifeq ($$($1_LDEXE),) + ifeq ($$($1_LDEXE),) $1_LDEXE:=$(LDEXE) - endif + endif $1_LD:=$(LD) else ifeq (C++,$$($1_LANG)) @@ -254,9 +232,11 @@ endif # Make sure the dirs exist. - $$(shell $(MKDIR) -p $$($1_SRC) $$($1_OBJECT_DIR) $$($1_OUTPUT_DIR)) + $$(eval $$(call MakeDir,$$($1_OBJECT_DIR) $$($1_OUTPUT_DIR))) + $$(foreach d,$$($1_SRC), $$(if $$(wildcard $$d),,$$(error SRC specified to SetupNativeCompilation $1 contains missing directory $$d))) + # Find all files in the source trees. Sort to remove duplicates. - $1_ALL_SRCS := $$(sort $$(foreach i,$$($1_SRC), $$(shell $(FIND) $$i -type f))) + $1_ALL_SRCS := $$(sort $$(shell $(FIND) $$($1_SRC) -type f)) # Extract the C/C++ files. $1_EXCLUDE_FILES:=$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_EXCLUDE_FILES))) $1_INCLUDE_FILES:=$$(foreach i,$$($1_SRC),$$(addprefix $$i/,$$($1_INCLUDE_FILES))) @@ -291,7 +271,9 @@ # Are there too many object files on disk? Perhaps because some source file was removed? $1_SUPERFLOUS_OBJS:=$$(sort $$(filter-out $$($1_EXPECTED_OBJS),$$($1_BINS))) # Clean out the superfluous object files. - $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) + ifneq ($$($1_SUPERFLUOUS_OBJS),) + $$(shell $(RM) -f $$($1_SUPERFLUOUS_OBJS)) + endif # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables for CFLAGS. $1_EXTRA_CFLAGS:=$$($1_CFLAGS_$(OPENJDK_TARGET_OS_API)) $$($1_CFLAGS_$(OPENJDK_TARGET_OS)) @@ -358,11 +340,6 @@ $$(error Unknown value for OPTIMIZATION: $$($1_OPTIMIZATION)) endif - # Now create a list of the packages that are about to compile. Used when sending source - # in a batch to the compiler. - $$(shell $(RM) $$($1_OBJECT_DIR)/_the.list_of_sources) - $$(eval $$(call ListPathsSafelyNow,$1_SRCS,\n, >> $$($1_OBJECT_DIR)/_the.list_of_sources)) - # Now call add_native_source for each source file we are going to compile. $$(foreach p,$$($1_SRCS),\ $$(eval $$(call add_native_source,$1,$$p,$$($1_OBJECT_DIR),\ @@ -385,8 +362,6 @@ endif # mapfile doesnt seem to be implemented on macosx (yet??) - ifneq ($(OPENJDK_TARGET_CPU),ppc) - ifneq ($(OPENJDK_TARGET_CPU),arm) ifneq ($(OPENJDK_TARGET_OS),macosx) ifneq ($(OPENJDK_TARGET_OS),windows) $1_REAL_MAPFILE:=$$($1_MAPFILE) @@ -401,8 +376,6 @@ endif endif endif - endif - endif # Pickup extra OPENJDK_TARGET_OS_API and/or OPENJDK_TARGET_OS dependent variables # for LDFLAGS and LDFLAGS_SUFFIX @@ -445,9 +418,9 @@ $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) \ $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) $(RM) $$@ - $(FIX_EMPTY_SEC_HDR_FLAGS) $$< + $(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$< $(OBJCOPY) --only-keep-debug $$< $$@ - $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$< + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$< else # not solaris $$($1_OBJECT_DIR)/$$(LIBRARY_PREFIX)$$($1_LIBRARY).debuginfo : $$($1_TARGET) $(RM) $$@ @@ -523,9 +496,9 @@ $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) \ $(FIX_EMPTY_SEC_HDR_FLAGS) $(ADD_GNU_DEBUGLINK) $(RM) $$@ - $(FIX_EMPTY_SEC_HDR_FLAGS) $$< + $(FIX_EMPTY_SEC_HDR_FLAGS) $(LOG_INFO) $$< $(OBJCOPY) --only-keep-debug $$< $$@ - $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $$(@F) $$< + $(CD) $$(@D) && $(ADD_GNU_DEBUGLINK) $(LOG_INFO) $$(@F) $$< else # not solaris $$($1_OBJECT_DIR)/$$($1_PROGRAM).debuginfo : $$($1_TARGET) $(RM) $$@ @@ -564,7 +537,7 @@ $$($1_EXPECTED_OBJS) $$($1_RES) $$($1_LDFLAGS_SUFFIX) \ $$($1_EXTRA_LDFLAGS_SUFFIX) ifneq (,$$($1_GEN_MANIFEST)) - $(MT) -nologo /manifest $$($1_GEN_MANIFEST) /outputresource:$$@;#1 + $(MT) -nologo -manifest $$($1_GEN_MANIFEST) -outputresource:$$@;#1 endif endif diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/RMICompilation.gmk --- a/common/makefiles/RMICompilation.gmk Wed Oct 31 18:35:56 2012 -0700 +++ b/common/makefiles/RMICompilation.gmk Wed Jul 05 18:27:34 2017 +0200 @@ -34,16 +34,9 @@ # RUN_IIOP:=Set to run rmic with -iiop # RUN_IIOP_STDPKG:=Set to run rmic with -iiop -standardPackage # KEEP_GENERATED:=Set to keep generated sources around - $(if $2,$1_$(strip $2)) - $(if $3,$1_$(strip $3)) - $(if $4,$1_$(strip $4)) - $(if $5,$1_$(strip $5)) - $(if $6,$1_$(strip $6)) - $(if $7,$1_$(strip $7)) - $(if $8,$1_$(strip $8)) - $(if $9,$1_$(strip $9)) - $(if $(10),$(error Internal makefile error: Too many arguments to SetupRMICompilation, please update RMICompilation.gmk)) - + $(foreach i,2 3 4 5 6 7 8 9 10 11 12 13 14 15, $(if $($i),$1_$(strip $($i)))$(NEWLINE)) + $(call LogSetupMacroEntry,SetupRMICompilation($1),$2,$3,$4,$5,$6,$7,$8,$9,$(10),$(11),$(12),$(13),$(14),$(15)) + $(if $(16),$(error Internal makefile error: Too many arguments to SetupRMICompilation, please update RMICompilation.gmk)) $1_DEP_FILE := $$($1_STUB_CLASSES_DIR)/$1_rmic @@ -86,12 +79,12 @@ $$($1_DEP_FILE): $$($1_CLASS_FILES) $(MKDIR) -p $$($1_STUB_CLASSES_DIR) if [ "x$$($1_ARGS)" != "x" ]; then \ - $(ECHO) Running rmic $$($1_ARGS) for $$($1_DOLLAR_SAFE_CLASSES) &&\ + $(ECHO) $(LOG_INFO) Running rmic $$($1_ARGS) for $$($1_DOLLAR_SAFE_CLASSES) &&\ $(RMIC) $$($1_ARGS) -classpath "$$($1_CLASSES_DIR)" \ -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\ fi; if [ "x$$($1_ARGS2)" != "x" ]; then \ - $(ECHO) Running rmic $$($1_ARGS2) for $$($1_DOLLAR_SAFE_CLASSES) &&\ + $(ECHO) $(LOG_INFO) Running rmic $$($1_ARGS2) for $$($1_DOLLAR_SAFE_CLASSES) &&\ $(RMIC) $$($1_ARGS2) -classpath "$$($1_CLASSES_DIR)" \ -d $$($1_STUB_CLASSES_DIR) $$($1_DOLLAR_SAFE_CLASSES);\ fi; diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/compress.post --- a/common/makefiles/compress.post Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) \ No newline at end of file diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/compress.pre --- a/common/makefiles/compress.pre Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -$(subst com,X01,$(subst org,X02,$(subst sun,X03,$(subst java,X04,$(subst javax,X05,$(subst sun/io,X06,$(subst com/sun,X07,$(subst java/io,X08,$(subst org/omg,X09,$(subst org/w3c,X10,$(subst org/xml,X11,$(subst sun/awt,X12,$(subst sun/net,X13,$(subst sun/nio,X14,$(subst sun/rmi,X15,$(subst java/awt,X16,$(subst java/net,X17,$(subst java/nio,X18,$(subst java/rmi,X19,$(subst META-INF,X20,$(subst sun/font,X21,$(subst sun/misc,X22,$(subst sun/text,X23,$(subst sun/util,X24,$(subst java/lang,X25,$(subst java/math,X26,$(subst java/text,X27,$(subst java/util,X28,$(subst javax/jws,X29,$(subst javax/net,X30,$(subst javax/rmi,X31,$(subst javax/xml,X32,$(subst sun/corba,X33,$(subst sun/print,X34,$(subst sun/swing,X35,$(subst java/beans,X36,$(subst javax/lang,X37,$(subst sun/applet,X38,$(subst sun/java2d,X39,$(subst java/applet,X40,$(subst javax/print,X41,$(subst javax/sound,X42,$(subst javax/swing,X43,$(subst javax/tools,X44,$(subst jdk/classes,X45,$(subst org/relaxng,X46,$(subst sun/reflect,X47,$(subst javax/crypto,X48,$(subst javax/naming,X49,$(subst jaxp/classes,X50,$(subst sun/security,X51,$(subst corba/classes,X52,$(subst java/security,X53,$(subst javax/imageio,X54,$(subst jdk/btclasses,X55,$(subst javax/activity,X56,$(subst javax/security,X57,$(subst jdk/newclasses,X58,$(subst sun/instrument,X59,$(subst sun/management,X60,$(subst corba/btclasses,X61,$(subst jdk/democlasses,X62,$(subst javax/activation,X63,$(subst javax/annotation,X64,$(subst javax/management,X65,$(subst javax/transaction,X66,$(subst jaxws/jaf_classes,X67,$(subst langtools/classes,X68,$(subst META-INF/services,X69,$(subst jdk/newdemoclasses,X70,$(subst javax/accessibility,X71,$(subst jaxws/jaxws_classes,X72, \ No newline at end of file diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/support/ListPathsSafely-post-compress.incl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/makefiles/support/ListPathsSafely-post-compress.incl Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,1 @@ +)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/support/ListPathsSafely-pre-compress.incl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/makefiles/support/ListPathsSafely-pre-compress.incl Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,1 @@ +$(subst com,X01,$(subst org,X02,$(subst sun,X03,$(subst java,X04,$(subst javax,X05,$(subst sun/io,X06,$(subst com/sun,X07,$(subst java/io,X08,$(subst org/omg,X09,$(subst org/w3c,X10,$(subst org/xml,X11,$(subst sun/awt,X12,$(subst sun/net,X13,$(subst sun/nio,X14,$(subst sun/rmi,X15,$(subst java/awt,X16,$(subst java/net,X17,$(subst java/nio,X18,$(subst java/rmi,X19,$(subst META-INF,X20,$(subst sun/font,X21,$(subst sun/misc,X22,$(subst sun/text,X23,$(subst sun/util,X24,$(subst java/lang,X25,$(subst java/math,X26,$(subst java/text,X27,$(subst java/util,X28,$(subst javax/jws,X29,$(subst javax/net,X30,$(subst javax/rmi,X31,$(subst javax/xml,X32,$(subst sun/corba,X33,$(subst sun/print,X34,$(subst sun/swing,X35,$(subst java/beans,X36,$(subst javax/lang,X37,$(subst sun/applet,X38,$(subst sun/java2d,X39,$(subst java/applet,X40,$(subst javax/print,X41,$(subst javax/sound,X42,$(subst javax/swing,X43,$(subst javax/tools,X44,$(subst jdk/classes,X45,$(subst org/relaxng,X46,$(subst sun/reflect,X47,$(subst javax/crypto,X48,$(subst javax/naming,X49,$(subst jaxp/classes,X50,$(subst sun/security,X51,$(subst corba/classes,X52,$(subst java/security,X53,$(subst javax/imageio,X54,$(subst jdk/btclasses,X55,$(subst javax/activity,X56,$(subst javax/security,X57,$(subst jdk/newclasses,X58,$(subst sun/instrument,X59,$(subst sun/management,X60,$(subst corba/btclasses,X61,$(subst jdk/democlasses,X62,$(subst javax/activation,X63,$(subst javax/annotation,X64,$(subst javax/management,X65,$(subst javax/transaction,X66,$(subst jaxws/jaf_classes,X67,$(subst langtools/classes,X68,$(subst META-INF/services,X69,$(subst jdk/newdemoclasses,X70,$(subst javax/accessibility,X71,$(subst jaxws/jaxws_classes,X72, diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/support/ListPathsSafely-uncompress.sed --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/makefiles/support/ListPathsSafely-uncompress.sed Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,72 @@ +s|X01|com|g +s|X02|org|g +s|X03|sun|g +s|X04|java|g +s|X05|javax|g +s|X06|sun/io|g +s|X07|com/sun|g +s|X08|java/io|g +s|X09|org/omg|g +s|X10|org/w3c|g +s|X11|org/xml|g +s|X12|sun/awt|g +s|X13|sun/net|g +s|X14|sun/nio|g +s|X15|sun/rmi|g +s|X16|java/awt|g +s|X17|java/net|g +s|X18|java/nio|g +s|X19|java/rmi|g +s|X20|META-INF|g +s|X21|sun/font|g +s|X22|sun/misc|g +s|X23|sun/text|g +s|X24|sun/util|g +s|X25|java/lang|g +s|X26|java/math|g +s|X27|java/text|g +s|X28|java/util|g +s|X29|javax/jws|g +s|X30|javax/net|g +s|X31|javax/rmi|g +s|X32|javax/xml|g +s|X33|sun/corba|g +s|X34|sun/print|g +s|X35|sun/swing|g +s|X36|java/beans|g +s|X37|javax/lang|g +s|X38|sun/applet|g +s|X39|sun/java2d|g +s|X40|java/applet|g +s|X41|javax/print|g +s|X42|javax/sound|g +s|X43|javax/swing|g +s|X44|javax/tools|g +s|X45|jdk/classes|g +s|X46|org/relaxng|g +s|X47|sun/reflect|g +s|X48|javax/crypto|g +s|X49|javax/naming|g +s|X50|jaxp/classes|g +s|X51|sun/security|g +s|X52|corba/classes|g +s|X53|java/security|g +s|X54|javax/imageio|g +s|X55|jdk/btclasses|g +s|X56|javax/activity|g +s|X57|javax/security|g +s|X58|jdk/newclasses|g +s|X59|sun/instrument|g +s|X60|sun/management|g +s|X61|corba/btclasses|g +s|X62|jdk/democlasses|g +s|X63|javax/activation|g +s|X64|javax/annotation|g +s|X65|javax/management|g +s|X66|javax/transaction|g +s|X67|jaxws/jaf_classes|g +s|X68|langtools/classes|g +s|X69|META-INF/services|g +s|X70|jdk/newdemoclasses|g +s|X71|javax/accessibility|g +s|X72|jaxws/jaxws_classes|g diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/support/unicode2x.sed --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/makefiles/support/unicode2x.sed Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,100 @@ +s/\\u0020/\x20/g +s/\\u003A/\x3A/g +s/\\u006B/\x6B/g +s/\\u0075/\x75/g +s/\\u00A0/\xA0/g +s/\\u00A3/\xA3/g +s/\\u00B0/\xB0/g +s/\\u00B7/\xB7/g +s/\\u00BA/\xBA/g +s/\\u00BF/\xBF/g +s/\\u00C0/\xC0/g +s/\\u00C1/\xC1/g +s/\\u00C2/\xC2/g +s/\\u00C4/\xC4/g +s/\\u00C5/\xC5/g +s/\\u00C8/\xC8/g +s/\\u00C9/\xC9/g +s/\\u00CA/\xCA/g +s/\\u00CD/\xCD/g +s/\\u00CE/\xCE/g +s/\\u00D3/\xD3/g +s/\\u00D4/\xD4/g +s/\\u00D6/\xD6/g +s/\\u00DA/\xDA/g +s/\\u00DC/\xDC/g +s/\\u00DD/\xDD/g +s/\\u00DF/\xDF/g +s/\\u00E0/\xE0/g +s/\\u00E1/\xE1/g +s/\\u00E2/\xE2/g +s/\\u00E3/\xE3/g +s/\\u00E4/\xE4/g +s/\\u00E5/\xE5/g +s/\\u00E6/\xE6/g +s/\\u00E7/\xE7/g +s/\\u00E8/\xE8/g +s/\\u00E9/\xE9/g +s/\\u00EA/\xEA/g +s/\\u00EB/\xEB/g +s/\\u00EC/\xEC/g +s/\\u00ED/\xED/g +s/\\u00EE/\xEE/g +s/\\u00EF/\xEF/g +s/\\u00F1/\xF1/g +s/\\u00F2/\xF2/g +s/\\u00F3/\xF3/g +s/\\u00F4/\xF4/g +s/\\u00F5/\xF5/g +s/\\u00F6/\xF6/g +s/\\u00F9/\xF9/g +s/\\u00FA/\xFA/g +s/\\u00FC/\xFC/g +s/\\u0020/\x20/g +s/\\u003f/\x3f/g +s/\\u006f/\x6f/g +s/\\u0075/\x75/g +s/\\u00a0/\xa0/g +s/\\u00a3/\xa3/g +s/\\u00b0/\xb0/g +s/\\u00ba/\xba/g +s/\\u00bf/\xbf/g +s/\\u00c1/\xc1/g +s/\\u00c4/\xc4/g +s/\\u00c5/\xc5/g +s/\\u00c8/\xc8/g +s/\\u00c9/\xc9/g +s/\\u00ca/\xca/g +s/\\u00cd/\xcd/g +s/\\u00d6/\xd6/g +s/\\u00dc/\xdc/g +s/\\u00dd/\xdd/g +s/\\u00df/\xdf/g +s/\\u00e0/\xe0/g +s/\\u00e1/\xe1/g +s/\\u00e2/\xe2/g +s/\\u00e3/\xe3/g +s/\\u00e4/\xe4/g +s/\\u00e5/\xe5/g +s/\\u00e7/\xe7/g +s/\\u00e8/\xe8/g +s/\\u00e9/\xe9/g +s/\\u00ea/\xea/g +s/\\u00eb/\xeb/g +s/\\u00ec/\xec/g +s/\\u00ed/\xed/g +s/\\u00ee/\xee/g +s/\\u00ef/\xef/g +s/\\u00f0/\xf0/g +s/\\u00f1/\xf1/g +s/\\u00f2/\xf2/g +s/\\u00f3/\xf3/g +s/\\u00f4/\xf4/g +s/\\u00f5/\xf5/g +s/\\u00f6/\xf6/g +s/\\u00f7/\xf7/g +s/\\u00f8/\xf8/g +s/\\u00f9/\xf9/g +s/\\u00fa/\xfa/g +s/\\u00fc/\xfc/g +s/\\u00ff/\xff/g diff -r 540a11e15fbb -r 1c3fdd0c4268 common/makefiles/uncompress.sed --- a/common/makefiles/uncompress.sed Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -s|X01|com|g -s|X02|org|g -s|X03|sun|g -s|X04|java|g -s|X05|javax|g -s|X06|sun/io|g -s|X07|com/sun|g -s|X08|java/io|g -s|X09|org/omg|g -s|X10|org/w3c|g -s|X11|org/xml|g -s|X12|sun/awt|g -s|X13|sun/net|g -s|X14|sun/nio|g -s|X15|sun/rmi|g -s|X16|java/awt|g -s|X17|java/net|g -s|X18|java/nio|g -s|X19|java/rmi|g -s|X20|META-INF|g -s|X21|sun/font|g -s|X22|sun/misc|g -s|X23|sun/text|g -s|X24|sun/util|g -s|X25|java/lang|g -s|X26|java/math|g -s|X27|java/text|g -s|X28|java/util|g -s|X29|javax/jws|g -s|X30|javax/net|g -s|X31|javax/rmi|g -s|X32|javax/xml|g -s|X33|sun/corba|g -s|X34|sun/print|g -s|X35|sun/swing|g -s|X36|java/beans|g -s|X37|javax/lang|g -s|X38|sun/applet|g -s|X39|sun/java2d|g -s|X40|java/applet|g -s|X41|javax/print|g -s|X42|javax/sound|g -s|X43|javax/swing|g -s|X44|javax/tools|g -s|X45|jdk/classes|g -s|X46|org/relaxng|g -s|X47|sun/reflect|g -s|X48|javax/crypto|g -s|X49|javax/naming|g -s|X50|jaxp/classes|g -s|X51|sun/security|g -s|X52|corba/classes|g -s|X53|java/security|g -s|X54|javax/imageio|g -s|X55|jdk/btclasses|g -s|X56|javax/activity|g -s|X57|javax/security|g -s|X58|jdk/newclasses|g -s|X59|sun/instrument|g -s|X60|sun/management|g -s|X61|corba/btclasses|g -s|X62|jdk/democlasses|g -s|X63|javax/activation|g -s|X64|javax/annotation|g -s|X65|javax/management|g -s|X66|javax/transaction|g -s|X67|jaxws/jaf_classes|g -s|X68|langtools/classes|g -s|X69|META-INF/services|g -s|X70|jdk/newdemoclasses|g -s|X71|javax/accessibility|g -s|X72|jaxws/jaxws_classes|g diff -r 540a11e15fbb -r 1c3fdd0c4268 common/src/fixpath.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/src/fixpath.c Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +#include +#include +#include +#include +#include + +/* + * Test if pos points to /cygdrive/_/ where _ can + * be any character. + */ +int is_cygdrive_here(int pos, char *in, int len) +{ + // Length of /cygdrive/c/ is 12 + if (pos+12 > len) return 0; + if (in[pos+11]=='/' && + in[pos+9]=='/' && + in[pos+8]=='e' && + in[pos+7]=='v' && + in[pos+6]=='i' && + in[pos+5]=='r' && + in[pos+4]=='d' && + in[pos+3]=='g' && + in[pos+2]=='y' && + in[pos+1]=='c' && + in[pos+0]=='/') { + return 1; + } + return 0; +} + +/* + * Replace /cygdrive/_/ with _:/ + * Works in place since drive letter is always + * shorter than /cygdrive/ + */ +char *replace_cygdrive_cygwin(char *in) +{ + int len = strlen(in); + char *out = malloc(len+1); + int i,j; + + if (len < 12) { + strcpy(out, in); + return out; + } + for (i = 0, j = 0; i *bl) { + *bl *= 2; + *b = realloc(*b, *bl); + } + memcpy(*b+*u, add, addlen); + *u += addlen; +} + +/* + * Creates a new string from in where the first occurance of sub is + * replaced by rep. + */ +char *replace_substring(char *in, char *sub, char *rep) +{ + int in_len = strlen(in); + int sub_len = strlen(sub); + int rep_len = strlen(rep); + char *out = malloc(in_len - sub_len + rep_len + 1); + char *p; + + if (!(p = strstr(in, sub))) { + // If sub isn't a substring of in, just return in. + return in; + } + + // Copy characters from beginning of in to start of sub. + strncpy(out, in, p - in); + out[p - in] = '\0'; + + sprintf(out + (p - in), "%s%s", rep, p + sub_len); + + return out; +} + +char* msys_path_list; // @-separated list of paths prefix to look for +char* msys_path_list_end; // Points to last \0 in msys_path_list. + +void setup_msys_path_list(char* argument) +{ + char* p; + char* drive_letter_pos; + + msys_path_list = strdup(&argument[2]); + msys_path_list_end = &msys_path_list[strlen(msys_path_list)]; + + // Convert all at-sign (@) in path list to \0. + // @ was chosen as separator to minimize risk of other tools messing around with it + p = msys_path_list; + do { + if (p[1] == ':') { + // msys has mangled our path list, restore it from c:/... to /c/... + drive_letter_pos = p+1; + *drive_letter_pos = *p; + *p = '/'; + } + + // Look for an @ in the list + p = strchr(p, '@'); + if (p != NULL) { + *p = '\0'; + p++; + } + } while (p != NULL); +} + +char *replace_cygdrive_msys(char *in) +{ + char* str; + char* prefix; + char* p; + + str = strdup(in); + + // For each prefix in the path list, search for it and replace /c/... with c:/... + for (prefix = msys_path_list; prefix < msys_path_list_end && prefix != NULL; prefix += strlen(prefix)+1) { + p=str; + while ((p = strstr(p, prefix))) { + char* drive_letter = p+1; + *p = *drive_letter; + *drive_letter = ':'; + p++; + } + } + + return str; +} + +char*(*replace_cygdrive)(char *in) = NULL; + +char *files_to_delete[1024]; +int num_files_to_delete = 0; + +char *fix_at_file(char *in) +{ + char *tmpdir; + char name[2048]; + char *atname; + char *buffer; + size_t buflen=65536; + size_t used=0; + size_t len; + int rc; + FILE *atout; + FILE *atin; + char block[2048]; + size_t blocklen; + char *fixed; + + atin = fopen(in+1, "r"); + if (atin == NULL) { + fprintf(stderr, "Could not read at file %s\n", in+1); + exit(-1); + } + + tmpdir = getenv("TMP"); + if (tmpdir == NULL) { + tmpdir = "c:/cygwin/tmp"; + } + _snprintf(name, sizeof(name), "%s\\atfile_XXXXXX", tmpdir); + + rc = _mktemp_s(name, strlen(name)+1); + if (rc) { + fprintf(stderr, "Could not create temporary file name for at file!\n"); + exit(-1); + } + + atout = fopen(name, "w"); + if (atout == NULL) { + fprintf(stderr, "Could not open temporary file for writing! %s\n", name); + exit(-1); + } + + buffer = malloc(buflen); + while((blocklen = fread(block,1,sizeof(block),atin)) > 0) { + append(&buffer, &buflen, &used, block, blocklen); + } + buffer[used] = 0; + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "fixpath input from @-file %s: %s\n", &in[1], buffer); + } + fixed = replace_cygdrive(buffer); + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "fixpath converted to @-file %s is: %s\n", name, fixed); + } + fwrite(fixed, strlen(fixed), 1, atout); + fclose(atin); + fclose(atout); + free(fixed); + free(buffer); + files_to_delete[num_files_to_delete] = malloc(strlen(name)+1); + strcpy(files_to_delete[num_files_to_delete], name); + num_files_to_delete++; + atname = malloc(strlen(name)+2); + atname[0] = '@'; + strcpy(atname+1, name); + return atname; +} + +int main(int argc, char **argv) +{ + STARTUPINFO si; + PROCESS_INFORMATION pi; + unsigned short rc; + + char *new_at_file; + char *old_at_file; + char *line; + int i; + DWORD exitCode; + + if (argc<3 || argv[1][0] != '-' || (argv[1][1] != 'c' && argv[1][1] != 'm')) { + fprintf(stderr, "Usage: fixpath -c|m /cygdrive/c/WINDOWS/notepad.exe /cygdrive/c/x/test.txt"); + exit(0); + } + + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "fixpath input line >%s<\n", strstr(GetCommandLine(), argv[1])); + } + + if (argv[1][1] == 'c' && argv[1][2] == '\0') { + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "using cygwin mode\n"); + } + replace_cygdrive = replace_cygdrive_cygwin; + } else if (argv[1][1] == 'm') { + if (getenv("DEBUG_FIXPATH") != NULL) { + fprintf(stderr, "using msys mode, with path list: %s\n", &argv[1][2]); + } + setup_msys_path_list(argv[1]); + replace_cygdrive = replace_cygdrive_msys; + } else { + fprintf(stderr, "Unknown mode: %s\n", argv[1]); + exit(-1); + } + line = replace_cygdrive(strstr(GetCommandLine(), argv[2])); + + for (i=1; i%s<\n", line); + } + + ZeroMemory(&si,sizeof(si)); + si.cb=sizeof(si); + ZeroMemory(&pi,sizeof(pi)); + + rc = CreateProcess(NULL, + line, + 0, + 0, + TRUE, + 0, + 0, + 0, + &si, + &pi); + if(!rc) + { + //Could not start process; + fprintf(stderr, "Could not start process!\n"); + exit(-1); + } + + WaitForSingleObject(pi.hProcess,INFINITE); + GetExitCodeProcess(pi.hProcess,&exitCode); + + if (getenv("DEBUG_FIXPATH") != NULL) { + for (i=0; i -#include -#include -#include -#include - -/* - * Test if pos points to /cygdrive/_/ where _ can - * be any character. - */ -int is_cygdrive_here(int pos, char *in, int len) -{ - // Length of /cygdrive/c/ is 12 - if (pos+12 > len) return 0; - if (in[pos+11]=='/' && - in[pos+9]=='/' && - in[pos+8]=='e' && - in[pos+7]=='v' && - in[pos+6]=='i' && - in[pos+5]=='r' && - in[pos+4]=='d' && - in[pos+3]=='g' && - in[pos+2]=='y' && - in[pos+1]=='c' && - in[pos+0]=='/') { - return 1; - } - return 0; -} - -/* - * Replace /cygdrive/_/ with _:/ - * Works in place since drive letter is always - * shorter than /cygdrive/ - */ -char *replace_cygdrive(char *in) -{ - int len = strlen(in); - char *out = malloc(len+1); - int i,j; - - if (len < 12) { - strcpy(out, in); - return out; - } - for (i = 0, j = 0; i *bl) { - *bl *= 2; - *b = realloc(*b, *bl); - } - memcpy(*b+*u, add, addlen); - *u += addlen; -} - -/* - * Creates a new string from in where the first occurance of sub is - * replaced by rep. - */ -char *replace_substring(char *in, char *sub, char *rep) -{ - int in_len = strlen(in); - int sub_len = strlen(sub); - int rep_len = strlen(rep); - char *out = malloc(in_len - sub_len + rep_len + 1); - char *p; - - if (!(p = strstr(in, sub))) { - // If sub isn't a substring of in, just return in. - return in; - } - - // Copy characters from beginning of in to start of sub. - strncpy(out, in, p - in); - out[p - in] = '\0'; - - sprintf(out + (p - in), "%s%s", rep, p + sub_len); - - return out; -} - -char *files_to_delete[1024]; -int num_files_to_delete = 0; - -char *fix_at_file(char *in) -{ - char *tmpdir; - char name[2048]; - char *atname; - char *buffer; - size_t buflen=65536; - size_t used=0; - size_t len; - int rc; - FILE *atout; - FILE *atin; - char block[2048]; - size_t blocklen; - char *fixed; - - atin = fopen(in+1, "r"); - if (atin == NULL) { - fprintf(stderr, "Could not read at file %s\n", in+1); - exit(-1); - } - - tmpdir = getenv("TMP"); - if (tmpdir == NULL) { - tmpdir = "c:/cygwin/tmp"; - } - _snprintf(name, sizeof(name), "%s\\atfile_XXXXXX", tmpdir); - - rc = _mktemp_s(name, strlen(name)+1); - if (rc) { - fprintf(stderr, "Could not create temporary file name for at file!\n"); - exit(-1); - } - - atout = fopen(name, "w"); - if (atout == NULL) { - fprintf(stderr, "Could open temporary file for writing! %s\n", name); - exit(-1); - } - - buffer = malloc(buflen); - while((blocklen = fread(block,1,sizeof(block),atin)) > 0) { - append(&buffer, &buflen, &used, block, blocklen); - } - buffer[used] = 0; - fixed = replace_cygdrive(buffer); - fwrite(fixed, strlen(fixed), 1, atout); - fclose(atin); - fclose(atout); - free(fixed); - free(buffer); - files_to_delete[num_files_to_delete] = malloc(strlen(name)+1); - strcpy(files_to_delete[num_files_to_delete], name); - num_files_to_delete++; - atname = malloc(strlen(name)+2); - atname[0] = '@'; - strcpy(atname+1, name); - return atname; -} - -int main(int argc, char **argv) -{ - STARTUPINFO si; - PROCESS_INFORMATION pi; - unsigned short rc; - - char *new_at_file; - char *old_at_file; - char *line; - int i; - DWORD exitCode; - - if (argc<2) { - fprintf(stderr, "Usage: uncygdrive.exe /cygdrive/c/WINDOWS/notepad.exe /cygdrive/c/x/test.txt"); - exit(0); - } - - line = replace_cygdrive(strstr(GetCommandLine(), argv[1])); - - for (i=1; i%s<\n", line); - } - - ZeroMemory(&si,sizeof(si)); - si.cb=sizeof(si); - ZeroMemory(&pi,sizeof(pi)); - - rc = CreateProcess(NULL, - line, - 0, - 0, - TRUE, - 0, - 0, - 0, - &si, - &pi); - if(!rc) - { - //Could not start process; - fprintf(stderr, "Could not start process!\n"); - exit(-1); - } - - WaitForSingleObject(pi.hProcess,INFINITE); - GetExitCodeProcess(pi.hProcess,&exitCode); - - if (getenv("DEBUG_UNCYGDRIVE") != NULL) { - for (i=0; i 0), "SSE mode requires address alignment 16 bytes"); + InstructionMark im(this); + simd_prefix(dst, dst, src, VEX_SIMD_66, VEX_OPCODE_0F_38); + emit_byte(0x00); + emit_operand(dst, src); +} + void Assembler::pshufd(XMMRegister dst, XMMRegister src, int mode) { assert(isByte(mode), "invalid value"); NOT_LP64(assert(VM_Version::supports_sse2(), "")); @@ -8067,6 +8144,15 @@ LP64_ONLY(movq(dst, src)) NOT_LP64(movl(dst, src)); } +void MacroAssembler::movdqu(XMMRegister dst, AddressLiteral src) { + if (reachable(src)) { + Assembler::movdqu(dst, as_Address(src)); + } else { + lea(rscratch1, src); + Assembler::movdqu(dst, Address(rscratch1, 0)); + } +} + void MacroAssembler::movsd(XMMRegister dst, AddressLiteral src) { if (reachable(src)) { Assembler::movsd(dst, as_Address(src)); @@ -8357,6 +8443,17 @@ } } +void MacroAssembler::pshufb(XMMRegister dst, AddressLiteral src) { + // Used in sign-bit flipping with aligned address. + assert((UseAVX > 0) || (((intptr_t)src.target() & 15) == 0), "SSE mode requires address alignment 16 bytes"); + if (reachable(src)) { + Assembler::pshufb(dst, as_Address(src)); + } else { + lea(rscratch1, src); + Assembler::pshufb(dst, Address(rscratch1, 0)); + } +} + // AVX 3-operands instructions void MacroAssembler::vaddsd(XMMRegister dst, XMMRegister nds, AddressLiteral src) { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/assembler_x86.hpp --- a/hotspot/src/cpu/x86/vm/assembler_x86.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/assembler_x86.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -875,6 +875,17 @@ void addss(XMMRegister dst, Address src); void addss(XMMRegister dst, XMMRegister src); + // AES instructions + void aesdec(XMMRegister dst, Address src); + void aesdec(XMMRegister dst, XMMRegister src); + void aesdeclast(XMMRegister dst, Address src); + void aesdeclast(XMMRegister dst, XMMRegister src); + void aesenc(XMMRegister dst, Address src); + void aesenc(XMMRegister dst, XMMRegister src); + void aesenclast(XMMRegister dst, Address src); + void aesenclast(XMMRegister dst, XMMRegister src); + + void andl(Address dst, int32_t imm32); void andl(Register dst, int32_t imm32); void andl(Register dst, Address src); @@ -1424,6 +1435,10 @@ void prefetcht2(Address src); void prefetchw(Address src); + // Shuffle Bytes + void pshufb(XMMRegister dst, XMMRegister src); + void pshufb(XMMRegister dst, Address src); + // Shuffle Packed Doublewords void pshufd(XMMRegister dst, XMMRegister src, int mode); void pshufd(XMMRegister dst, Address src, int mode); @@ -2611,6 +2626,12 @@ void divss(XMMRegister dst, Address src) { Assembler::divss(dst, src); } void divss(XMMRegister dst, AddressLiteral src); + // Move Unaligned Double Quadword + void movdqu(Address dst, XMMRegister src) { Assembler::movdqu(dst, src); } + void movdqu(XMMRegister dst, Address src) { Assembler::movdqu(dst, src); } + void movdqu(XMMRegister dst, XMMRegister src) { Assembler::movdqu(dst, src); } + void movdqu(XMMRegister dst, AddressLiteral src); + void movsd(XMMRegister dst, XMMRegister src) { Assembler::movsd(dst, src); } void movsd(Address dst, XMMRegister src) { Assembler::movsd(dst, src); } void movsd(XMMRegister dst, Address src) { Assembler::movsd(dst, src); } @@ -2658,6 +2679,10 @@ void xorps(XMMRegister dst, Address src) { Assembler::xorps(dst, src); } void xorps(XMMRegister dst, AddressLiteral src); + // Shuffle Bytes + void pshufb(XMMRegister dst, XMMRegister src) { Assembler::pshufb(dst, src); } + void pshufb(XMMRegister dst, Address src) { Assembler::pshufb(dst, src); } + void pshufb(XMMRegister dst, AddressLiteral src); // AVX 3-operands instructions void vaddsd(XMMRegister dst, XMMRegister nds, XMMRegister src) { Assembler::vaddsd(dst, nds, src); } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_32.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -2137,6 +2137,529 @@ } } + // AES intrinsic stubs + enum {AESBlockSize = 16}; + + address generate_key_shuffle_mask() { + __ align(16); + StubCodeMark mark(this, "StubRoutines", "key_shuffle_mask"); + address start = __ pc(); + __ emit_data(0x00010203, relocInfo::none, 0 ); + __ emit_data(0x04050607, relocInfo::none, 0 ); + __ emit_data(0x08090a0b, relocInfo::none, 0 ); + __ emit_data(0x0c0d0e0f, relocInfo::none, 0 ); + return start; + } + + // Utility routine for loading a 128-bit key word in little endian format + // can optionally specify that the shuffle mask is already in an xmmregister + void load_key(XMMRegister xmmdst, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + __ movdqu(xmmdst, Address(key, offset)); + if (xmm_shuf_mask != NULL) { + __ pshufb(xmmdst, xmm_shuf_mask); + } else { + __ pshufb(xmmdst, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + } + } + + // aesenc using specified key+offset + // can optionally specify that the shuffle mask is already in an xmmregister + void aes_enc_key(XMMRegister xmmdst, XMMRegister xmmtmp, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + load_key(xmmtmp, key, offset, xmm_shuf_mask); + __ aesenc(xmmdst, xmmtmp); + } + + // aesdec using specified key+offset + // can optionally specify that the shuffle mask is already in an xmmregister + void aes_dec_key(XMMRegister xmmdst, XMMRegister xmmtmp, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + load_key(xmmtmp, key, offset, xmm_shuf_mask); + __ aesdec(xmmdst, xmmtmp); + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // + address generate_aescrypt_encryptBlock() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aescrypt_encryptBlock"); + Label L_doLast; + address start = __ pc(); + + const Register from = rsi; // source array address + const Register to = rdx; // destination array address + const Register key = rcx; // key array address + const Register keylen = rax; + const Address from_param(rbp, 8+0); + const Address to_param (rbp, 8+4); + const Address key_param (rbp, 8+8); + + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + const XMMRegister xmm_key_shuf_mask = xmm2; + + __ enter(); // required for proper stackwalking of RuntimeStub frame + __ push(rsi); + __ movptr(from , from_param); + __ movptr(to , to_param); + __ movptr(key , key_param); + + __ movl(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + // keylen = # of 32-bit words, convert to 128-bit words + __ shrl(keylen, 2); + __ subl(keylen, 11); // every key has at least 11 128-bit words, some have more + + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + __ movdqu(xmm_result, Address(from, 0)); // get 16 bytes of input + + // For encryption, the java expanded key ordering is just what we need + + load_key(xmm_temp, key, 0x00, xmm_key_shuf_mask); + __ pxor(xmm_result, xmm_temp); + for (int offset = 0x10; offset <= 0x90; offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, offset, xmm_key_shuf_mask); + } + load_key (xmm_temp, key, 0xa0, xmm_key_shuf_mask); + __ cmpl(keylen, 0); + __ jcc(Assembler::equal, L_doLast); + __ aesenc(xmm_result, xmm_temp); // only in 192 and 256 bit keys + aes_enc_key(xmm_result, xmm_temp, key, 0xb0, xmm_key_shuf_mask); + load_key(xmm_temp, key, 0xc0, xmm_key_shuf_mask); + __ subl(keylen, 2); + __ jcc(Assembler::equal, L_doLast); + __ aesenc(xmm_result, xmm_temp); // only in 256 bit keys + aes_enc_key(xmm_result, xmm_temp, key, 0xd0, xmm_key_shuf_mask); + load_key(xmm_temp, key, 0xe0, xmm_key_shuf_mask); + + __ BIND(L_doLast); + __ aesenclast(xmm_result, xmm_temp); + __ movdqu(Address(to, 0), xmm_result); // store the result + __ xorptr(rax, rax); // return 0 + __ pop(rsi); + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + return start; + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // + address generate_aescrypt_decryptBlock() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aescrypt_decryptBlock"); + Label L_doLast; + address start = __ pc(); + + const Register from = rsi; // source array address + const Register to = rdx; // destination array address + const Register key = rcx; // key array address + const Register keylen = rax; + const Address from_param(rbp, 8+0); + const Address to_param (rbp, 8+4); + const Address key_param (rbp, 8+8); + + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + const XMMRegister xmm_key_shuf_mask = xmm2; + + __ enter(); // required for proper stackwalking of RuntimeStub frame + __ push(rsi); + __ movptr(from , from_param); + __ movptr(to , to_param); + __ movptr(key , key_param); + + __ movl(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + // keylen = # of 32-bit words, convert to 128-bit words + __ shrl(keylen, 2); + __ subl(keylen, 11); // every key has at least 11 128-bit words, some have more + + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + __ movdqu(xmm_result, Address(from, 0)); + + // for decryption java expanded key ordering is rotated one position from what we want + // so we start from 0x10 here and hit 0x00 last + // we don't know if the key is aligned, hence not using load-execute form + load_key(xmm_temp, key, 0x10, xmm_key_shuf_mask); + __ pxor (xmm_result, xmm_temp); + for (int offset = 0x20; offset <= 0xa0; offset += 0x10) { + aes_dec_key(xmm_result, xmm_temp, key, offset, xmm_key_shuf_mask); + } + __ cmpl(keylen, 0); + __ jcc(Assembler::equal, L_doLast); + // only in 192 and 256 bit keys + aes_dec_key(xmm_result, xmm_temp, key, 0xb0, xmm_key_shuf_mask); + aes_dec_key(xmm_result, xmm_temp, key, 0xc0, xmm_key_shuf_mask); + __ subl(keylen, 2); + __ jcc(Assembler::equal, L_doLast); + // only in 256 bit keys + aes_dec_key(xmm_result, xmm_temp, key, 0xd0, xmm_key_shuf_mask); + aes_dec_key(xmm_result, xmm_temp, key, 0xe0, xmm_key_shuf_mask); + + __ BIND(L_doLast); + // for decryption the aesdeclast operation is always on key+0x00 + load_key(xmm_temp, key, 0x00, xmm_key_shuf_mask); + __ aesdeclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, 0), xmm_result); // store the result + + __ xorptr(rax, rax); // return 0 + __ pop(rsi); + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + return start; + } + + void handleSOERegisters(bool saving) { + const int saveFrameSizeInBytes = 4 * wordSize; + const Address saved_rbx (rbp, -3 * wordSize); + const Address saved_rsi (rbp, -2 * wordSize); + const Address saved_rdi (rbp, -1 * wordSize); + + if (saving) { + __ subptr(rsp, saveFrameSizeInBytes); + __ movptr(saved_rsi, rsi); + __ movptr(saved_rdi, rdi); + __ movptr(saved_rbx, rbx); + } else { + // restoring + __ movptr(rsi, saved_rsi); + __ movptr(rdi, saved_rdi); + __ movptr(rbx, saved_rbx); + } + } + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // c_rarg3 - r vector byte array address + // c_rarg4 - input length + // + address generate_cipherBlockChaining_encryptAESCrypt() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt"); + address start = __ pc(); + + Label L_exit, L_key_192_256, L_key_256, L_loopTop_128, L_loopTop_192, L_loopTop_256; + const Register from = rsi; // source array address + const Register to = rdx; // destination array address + const Register key = rcx; // key array address + const Register rvec = rdi; // r byte array initialized from initvector array address + // and left with the results of the last encryption block + const Register len_reg = rbx; // src len (must be multiple of blocksize 16) + const Register pos = rax; + + // xmm register assignments for the loops below + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + // first 6 keys preloaded into xmm2-xmm7 + const int XMM_REG_NUM_KEY_FIRST = 2; + const int XMM_REG_NUM_KEY_LAST = 7; + const XMMRegister xmm_key0 = as_XMMRegister(XMM_REG_NUM_KEY_FIRST); + + __ enter(); // required for proper stackwalking of RuntimeStub frame + handleSOERegisters(true /*saving*/); + + // load registers from incoming parameters + const Address from_param(rbp, 8+0); + const Address to_param (rbp, 8+4); + const Address key_param (rbp, 8+8); + const Address rvec_param (rbp, 8+12); + const Address len_param (rbp, 8+16); + __ movptr(from , from_param); + __ movptr(to , to_param); + __ movptr(key , key_param); + __ movptr(rvec , rvec_param); + __ movptr(len_reg , len_param); + + const XMMRegister xmm_key_shuf_mask = xmm_temp; // used temporarily to swap key bytes up front + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + // load up xmm regs 2 thru 7 with keys 0-5 + for (int rnum = XMM_REG_NUM_KEY_FIRST, offset = 0x00; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + load_key(as_XMMRegister(rnum), key, offset, xmm_key_shuf_mask); + offset += 0x10; + } + + __ movdqu(xmm_result, Address(rvec, 0x00)); // initialize xmm_result with r vec + + // now split to different paths depending on the keylen (len in ints of AESCrypt.KLE array (52=192, or 60=256)) + __ movl(rax, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + __ cmpl(rax, 44); + __ jcc(Assembler::notEqual, L_key_192_256); + + // 128 bit code follows here + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_128); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = 0x60; key_offset <= 0x90; key_offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0xa0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_128); + + __ BIND(L_exit); + __ movdqu(Address(rvec, 0), xmm_result); // final value of r stored in rvec of CipherBlockChaining object + + handleSOERegisters(false /*restoring*/); + __ movl(rax, 0); // return 0 (why?) + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + __ BIND(L_key_192_256); + // here rax = len in ints of AESCrypt.KLE array (52=192, or 60=256) + __ cmpl(rax, 52); + __ jcc(Assembler::notEqual, L_key_256); + + // 192-bit code follows here (could be changed to use more xmm registers) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_192); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = 0x60; key_offset <= 0xb0; key_offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0xc0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_192); + __ jmp(L_exit); + + __ BIND(L_key_256); + // 256-bit code follows here (could be changed to use more xmm registers) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_256); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = 0x60; key_offset <= 0xd0; key_offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0xe0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_256); + __ jmp(L_exit); + + return start; + } + + + // CBC AES Decryption. + // In 32-bit stub, because of lack of registers we do not try to parallelize 4 blocks at a time. + // + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // c_rarg3 - r vector byte array address + // c_rarg4 - input length + // + + address generate_cipherBlockChaining_decryptAESCrypt() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_decryptAESCrypt"); + address start = __ pc(); + + Label L_exit, L_key_192_256, L_key_256; + Label L_singleBlock_loopTop_128; + Label L_singleBlock_loopTop_192, L_singleBlock_loopTop_256; + const Register from = rsi; // source array address + const Register to = rdx; // destination array address + const Register key = rcx; // key array address + const Register rvec = rdi; // r byte array initialized from initvector array address + // and left with the results of the last encryption block + const Register len_reg = rbx; // src len (must be multiple of blocksize 16) + const Register pos = rax; + + // xmm register assignments for the loops below + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + // first 6 keys preloaded into xmm2-xmm7 + const int XMM_REG_NUM_KEY_FIRST = 2; + const int XMM_REG_NUM_KEY_LAST = 7; + const int FIRST_NON_REG_KEY_offset = 0x70; + const XMMRegister xmm_key_first = as_XMMRegister(XMM_REG_NUM_KEY_FIRST); + + __ enter(); // required for proper stackwalking of RuntimeStub frame + handleSOERegisters(true /*saving*/); + + // load registers from incoming parameters + const Address from_param(rbp, 8+0); + const Address to_param (rbp, 8+4); + const Address key_param (rbp, 8+8); + const Address rvec_param (rbp, 8+12); + const Address len_param (rbp, 8+16); + __ movptr(from , from_param); + __ movptr(to , to_param); + __ movptr(key , key_param); + __ movptr(rvec , rvec_param); + __ movptr(len_reg , len_param); + + // the java expanded key ordering is rotated one position from what we want + // so we start from 0x10 here and hit 0x00 last + const XMMRegister xmm_key_shuf_mask = xmm1; // used temporarily to swap key bytes up front + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + // load up xmm regs 2 thru 6 with first 5 keys + for (int rnum = XMM_REG_NUM_KEY_FIRST, offset = 0x10; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + load_key(as_XMMRegister(rnum), key, offset, xmm_key_shuf_mask); + offset += 0x10; + } + + // inside here, use the rvec register to point to previous block cipher + // with which we xor at the end of each newly decrypted block + const Register prev_block_cipher_ptr = rvec; + + // now split to different paths depending on the keylen (len in ints of AESCrypt.KLE array (52=192, or 60=256)) + __ movl(rax, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + __ cmpl(rax, 44); + __ jcc(Assembler::notEqual, L_key_192_256); + + + // 128-bit code follows here, parallelized + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_128); + __ cmpptr(len_reg, 0); // any blocks left?? + __ jcc(Assembler::equal, L_exit); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = FIRST_NON_REG_KEY_offset; key_offset <= 0xa0; key_offset += 0x10) { // 128-bit runs up to key offset a0 + aes_dec_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0x00); // final key is stored in java expanded array at offset 0 + __ aesdeclast(xmm_result, xmm_temp); + __ movdqu(xmm_temp, Address(prev_block_cipher_ptr, 0x00)); + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ lea(prev_block_cipher_ptr, Address(from, pos, Address::times_1, 0)); // set up new ptr + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jmp(L_singleBlock_loopTop_128); + + + __ BIND(L_exit); + __ movdqu(xmm_temp, Address(prev_block_cipher_ptr, 0x00)); + __ movptr(rvec , rvec_param); // restore this since used in loop + __ movdqu(Address(rvec, 0), xmm_temp); // final value of r stored in rvec of CipherBlockChaining object + handleSOERegisters(false /*restoring*/); + __ movl(rax, 0); // return 0 (why?) + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + + __ BIND(L_key_192_256); + // here rax = len in ints of AESCrypt.KLE array (52=192, or 60=256) + __ cmpl(rax, 52); + __ jcc(Assembler::notEqual, L_key_256); + + // 192-bit code follows here (could be optimized to use parallelism) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_192); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = FIRST_NON_REG_KEY_offset; key_offset <= 0xc0; key_offset += 0x10) { // 192-bit runs up to key offset c0 + aes_dec_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0x00); // final key is stored in java expanded array at offset 0 + __ aesdeclast(xmm_result, xmm_temp); + __ movdqu(xmm_temp, Address(prev_block_cipher_ptr, 0x00)); + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ lea(prev_block_cipher_ptr, Address(from, pos, Address::times_1, 0)); // set up new ptr + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual,L_singleBlock_loopTop_192); + __ jmp(L_exit); + + __ BIND(L_key_256); + // 256-bit code follows here (could be optimized to use parallelism) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_256); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + for (int key_offset = FIRST_NON_REG_KEY_offset; key_offset <= 0xe0; key_offset += 0x10) { // 256-bit runs up to key offset e0 + aes_dec_key(xmm_result, xmm_temp, key, key_offset); + } + load_key(xmm_temp, key, 0x00); // final key is stored in java expanded array at offset 0 + __ aesdeclast(xmm_result, xmm_temp); + __ movdqu(xmm_temp, Address(prev_block_cipher_ptr, 0x00)); + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ lea(prev_block_cipher_ptr, Address(from, pos, Address::times_1, 0)); // set up new ptr + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual,L_singleBlock_loopTop_256); + __ jmp(L_exit); + + return start; + } + + public: // Information about frame layout at time of blocking runtime call. // Note that we only have to preserve callee-saved registers since @@ -2332,6 +2855,16 @@ generate_arraycopy_stubs(); generate_math_stubs(); + + // don't bother generating these AES intrinsic stubs unless global flag is set + if (UseAESIntrinsics) { + StubRoutines::x86::_key_shuffle_mask_addr = generate_key_shuffle_mask(); // might be needed by the others + + StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock(); + StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock(); + StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt(); + StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_decryptAESCrypt(); + } } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp --- a/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/stubGenerator_x86_64.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -2941,6 +2941,548 @@ } } + // AES intrinsic stubs + enum {AESBlockSize = 16}; + + address generate_key_shuffle_mask() { + __ align(16); + StubCodeMark mark(this, "StubRoutines", "key_shuffle_mask"); + address start = __ pc(); + __ emit_data64( 0x0405060700010203, relocInfo::none ); + __ emit_data64( 0x0c0d0e0f08090a0b, relocInfo::none ); + return start; + } + + // Utility routine for loading a 128-bit key word in little endian format + // can optionally specify that the shuffle mask is already in an xmmregister + void load_key(XMMRegister xmmdst, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + __ movdqu(xmmdst, Address(key, offset)); + if (xmm_shuf_mask != NULL) { + __ pshufb(xmmdst, xmm_shuf_mask); + } else { + __ pshufb(xmmdst, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + } + } + + // aesenc using specified key+offset + // can optionally specify that the shuffle mask is already in an xmmregister + void aes_enc_key(XMMRegister xmmdst, XMMRegister xmmtmp, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + load_key(xmmtmp, key, offset, xmm_shuf_mask); + __ aesenc(xmmdst, xmmtmp); + } + + // aesdec using specified key+offset + // can optionally specify that the shuffle mask is already in an xmmregister + void aes_dec_key(XMMRegister xmmdst, XMMRegister xmmtmp, Register key, int offset, XMMRegister xmm_shuf_mask=NULL) { + load_key(xmmtmp, key, offset, xmm_shuf_mask); + __ aesdec(xmmdst, xmmtmp); + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // + address generate_aescrypt_encryptBlock() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aescrypt_encryptBlock"); + Label L_doLast; + address start = __ pc(); + + const Register from = c_rarg0; // source array address + const Register to = c_rarg1; // destination array address + const Register key = c_rarg2; // key array address + const Register keylen = rax; + + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + const XMMRegister xmm_key_shuf_mask = xmm2; + + __ enter(); // required for proper stackwalking of RuntimeStub frame + + __ movl(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + // keylen = # of 32-bit words, convert to 128-bit words + __ shrl(keylen, 2); + __ subl(keylen, 11); // every key has at least 11 128-bit words, some have more + + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + __ movdqu(xmm_result, Address(from, 0)); // get 16 bytes of input + + // For encryption, the java expanded key ordering is just what we need + // we don't know if the key is aligned, hence not using load-execute form + + load_key(xmm_temp, key, 0x00, xmm_key_shuf_mask); + __ pxor(xmm_result, xmm_temp); + for (int offset = 0x10; offset <= 0x90; offset += 0x10) { + aes_enc_key(xmm_result, xmm_temp, key, offset, xmm_key_shuf_mask); + } + load_key (xmm_temp, key, 0xa0, xmm_key_shuf_mask); + __ cmpl(keylen, 0); + __ jcc(Assembler::equal, L_doLast); + __ aesenc(xmm_result, xmm_temp); // only in 192 and 256 bit keys + aes_enc_key(xmm_result, xmm_temp, key, 0xb0, xmm_key_shuf_mask); + load_key(xmm_temp, key, 0xc0, xmm_key_shuf_mask); + __ subl(keylen, 2); + __ jcc(Assembler::equal, L_doLast); + __ aesenc(xmm_result, xmm_temp); // only in 256 bit keys + aes_enc_key(xmm_result, xmm_temp, key, 0xd0, xmm_key_shuf_mask); + load_key(xmm_temp, key, 0xe0, xmm_key_shuf_mask); + + __ BIND(L_doLast); + __ aesenclast(xmm_result, xmm_temp); + __ movdqu(Address(to, 0), xmm_result); // store the result + __ xorptr(rax, rax); // return 0 + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + return start; + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // + address generate_aescrypt_decryptBlock() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "aescrypt_decryptBlock"); + Label L_doLast; + address start = __ pc(); + + const Register from = c_rarg0; // source array address + const Register to = c_rarg1; // destination array address + const Register key = c_rarg2; // key array address + const Register keylen = rax; + + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + const XMMRegister xmm_key_shuf_mask = xmm2; + + __ enter(); // required for proper stackwalking of RuntimeStub frame + + __ movl(keylen, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + // keylen = # of 32-bit words, convert to 128-bit words + __ shrl(keylen, 2); + __ subl(keylen, 11); // every key has at least 11 128-bit words, some have more + + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + __ movdqu(xmm_result, Address(from, 0)); + + // for decryption java expanded key ordering is rotated one position from what we want + // so we start from 0x10 here and hit 0x00 last + // we don't know if the key is aligned, hence not using load-execute form + load_key(xmm_temp, key, 0x10, xmm_key_shuf_mask); + __ pxor (xmm_result, xmm_temp); + for (int offset = 0x20; offset <= 0xa0; offset += 0x10) { + aes_dec_key(xmm_result, xmm_temp, key, offset, xmm_key_shuf_mask); + } + __ cmpl(keylen, 0); + __ jcc(Assembler::equal, L_doLast); + // only in 192 and 256 bit keys + aes_dec_key(xmm_result, xmm_temp, key, 0xb0, xmm_key_shuf_mask); + aes_dec_key(xmm_result, xmm_temp, key, 0xc0, xmm_key_shuf_mask); + __ subl(keylen, 2); + __ jcc(Assembler::equal, L_doLast); + // only in 256 bit keys + aes_dec_key(xmm_result, xmm_temp, key, 0xd0, xmm_key_shuf_mask); + aes_dec_key(xmm_result, xmm_temp, key, 0xe0, xmm_key_shuf_mask); + + __ BIND(L_doLast); + // for decryption the aesdeclast operation is always on key+0x00 + load_key(xmm_temp, key, 0x00, xmm_key_shuf_mask); + __ aesdeclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, 0), xmm_result); // store the result + + __ xorptr(rax, rax); // return 0 + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + return start; + } + + + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // c_rarg3 - r vector byte array address + // c_rarg4 - input length + // + address generate_cipherBlockChaining_encryptAESCrypt() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_encryptAESCrypt"); + address start = __ pc(); + + Label L_exit, L_key_192_256, L_key_256, L_loopTop_128, L_loopTop_192, L_loopTop_256; + const Register from = c_rarg0; // source array address + const Register to = c_rarg1; // destination array address + const Register key = c_rarg2; // key array address + const Register rvec = c_rarg3; // r byte array initialized from initvector array address + // and left with the results of the last encryption block +#ifndef _WIN64 + const Register len_reg = c_rarg4; // src len (must be multiple of blocksize 16) +#else + const Address len_mem(rsp, 6 * wordSize); // length is on stack on Win64 + const Register len_reg = r10; // pick the first volatile windows register +#endif + const Register pos = rax; + + // xmm register assignments for the loops below + const XMMRegister xmm_result = xmm0; + const XMMRegister xmm_temp = xmm1; + // keys 0-10 preloaded into xmm2-xmm12 + const int XMM_REG_NUM_KEY_FIRST = 2; + const int XMM_REG_NUM_KEY_LAST = 12; + const XMMRegister xmm_key0 = as_XMMRegister(XMM_REG_NUM_KEY_FIRST); + const XMMRegister xmm_key10 = as_XMMRegister(XMM_REG_NUM_KEY_LAST); + + __ enter(); // required for proper stackwalking of RuntimeStub frame + +#ifdef _WIN64 + // on win64, fill len_reg from stack position + __ movl(len_reg, len_mem); + // save the xmm registers which must be preserved 6-12 + __ subptr(rsp, -rsp_after_call_off * wordSize); + for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { + __ movdqu(xmm_save(i), as_XMMRegister(i)); + } +#endif + + const XMMRegister xmm_key_shuf_mask = xmm_temp; // used temporarily to swap key bytes up front + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + // load up xmm regs 2 thru 12 with key 0x00 - 0xa0 + for (int rnum = XMM_REG_NUM_KEY_FIRST, offset = 0x00; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + load_key(as_XMMRegister(rnum), key, offset, xmm_key_shuf_mask); + offset += 0x10; + } + + __ movdqu(xmm_result, Address(rvec, 0x00)); // initialize xmm_result with r vec + + // now split to different paths depending on the keylen (len in ints of AESCrypt.KLE array (52=192, or 60=256)) + __ movl(rax, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + __ cmpl(rax, 44); + __ jcc(Assembler::notEqual, L_key_192_256); + + // 128 bit code follows here + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_128); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + __ aesenclast(xmm_result, xmm_key10); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_128); + + __ BIND(L_exit); + __ movdqu(Address(rvec, 0), xmm_result); // final value of r stored in rvec of CipherBlockChaining object + +#ifdef _WIN64 + // restore xmm regs belonging to calling function + for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { + __ movdqu(as_XMMRegister(i), xmm_save(i)); + } +#endif + __ movl(rax, 0); // return 0 (why?) + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + __ BIND(L_key_192_256); + // here rax = len in ints of AESCrypt.KLE array (52=192, or 60=256) + __ cmpl(rax, 52); + __ jcc(Assembler::notEqual, L_key_256); + + // 192-bit code follows here (could be changed to use more xmm registers) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_192); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + aes_enc_key(xmm_result, xmm_temp, key, 0xb0); + load_key(xmm_temp, key, 0xc0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_192); + __ jmp(L_exit); + + __ BIND(L_key_256); + // 256-bit code follows here (could be changed to use more xmm registers) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_loopTop_256); + __ movdqu(xmm_temp, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of input + __ pxor (xmm_result, xmm_temp); // xor with the current r vector + + __ pxor (xmm_result, xmm_key0); // do the aes rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + __ aesenc(xmm_result, as_XMMRegister(rnum)); + } + aes_enc_key(xmm_result, xmm_temp, key, 0xb0); + aes_enc_key(xmm_result, xmm_temp, key, 0xc0); + aes_enc_key(xmm_result, xmm_temp, key, 0xd0); + load_key(xmm_temp, key, 0xe0); + __ aesenclast(xmm_result, xmm_temp); + + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual, L_loopTop_256); + __ jmp(L_exit); + + return start; + } + + + + // This is a version of CBC/AES Decrypt which does 4 blocks in a loop at a time + // to hide instruction latency + // + // Arguments: + // + // Inputs: + // c_rarg0 - source byte array address + // c_rarg1 - destination byte array address + // c_rarg2 - K (key) in little endian int array + // c_rarg3 - r vector byte array address + // c_rarg4 - input length + // + + address generate_cipherBlockChaining_decryptAESCrypt_Parallel() { + assert(UseAES && (UseAVX > 0), "need AES instructions and misaligned SSE support"); + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", "cipherBlockChaining_decryptAESCrypt"); + address start = __ pc(); + + Label L_exit, L_key_192_256, L_key_256; + Label L_singleBlock_loopTop_128, L_multiBlock_loopTop_128; + Label L_singleBlock_loopTop_192, L_singleBlock_loopTop_256; + const Register from = c_rarg0; // source array address + const Register to = c_rarg1; // destination array address + const Register key = c_rarg2; // key array address + const Register rvec = c_rarg3; // r byte array initialized from initvector array address + // and left with the results of the last encryption block +#ifndef _WIN64 + const Register len_reg = c_rarg4; // src len (must be multiple of blocksize 16) +#else + const Address len_mem(rsp, 6 * wordSize); // length is on stack on Win64 + const Register len_reg = r10; // pick the first volatile windows register +#endif + const Register pos = rax; + + // xmm register assignments for the loops below + const XMMRegister xmm_result = xmm0; + // keys 0-10 preloaded into xmm2-xmm12 + const int XMM_REG_NUM_KEY_FIRST = 5; + const int XMM_REG_NUM_KEY_LAST = 15; + const XMMRegister xmm_key_first = as_XMMRegister(XMM_REG_NUM_KEY_FIRST); + const XMMRegister xmm_key_last = as_XMMRegister(XMM_REG_NUM_KEY_LAST); + + __ enter(); // required for proper stackwalking of RuntimeStub frame + +#ifdef _WIN64 + // on win64, fill len_reg from stack position + __ movl(len_reg, len_mem); + // save the xmm registers which must be preserved 6-15 + __ subptr(rsp, -rsp_after_call_off * wordSize); + for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { + __ movdqu(xmm_save(i), as_XMMRegister(i)); + } +#endif + // the java expanded key ordering is rotated one position from what we want + // so we start from 0x10 here and hit 0x00 last + const XMMRegister xmm_key_shuf_mask = xmm1; // used temporarily to swap key bytes up front + __ movdqu(xmm_key_shuf_mask, ExternalAddress(StubRoutines::x86::key_shuffle_mask_addr())); + // load up xmm regs 5 thru 15 with key 0x10 - 0xa0 - 0x00 + for (int rnum = XMM_REG_NUM_KEY_FIRST, offset = 0x10; rnum <= XMM_REG_NUM_KEY_LAST; rnum++) { + if (rnum == XMM_REG_NUM_KEY_LAST) offset = 0x00; + load_key(as_XMMRegister(rnum), key, offset, xmm_key_shuf_mask); + offset += 0x10; + } + + const XMMRegister xmm_prev_block_cipher = xmm1; // holds cipher of previous block + // registers holding the four results in the parallelized loop + const XMMRegister xmm_result0 = xmm0; + const XMMRegister xmm_result1 = xmm2; + const XMMRegister xmm_result2 = xmm3; + const XMMRegister xmm_result3 = xmm4; + + __ movdqu(xmm_prev_block_cipher, Address(rvec, 0x00)); // initialize with initial rvec + + // now split to different paths depending on the keylen (len in ints of AESCrypt.KLE array (52=192, or 60=256)) + __ movl(rax, Address(key, arrayOopDesc::length_offset_in_bytes() - arrayOopDesc::base_offset_in_bytes(T_INT))); + __ cmpl(rax, 44); + __ jcc(Assembler::notEqual, L_key_192_256); + + + // 128-bit code follows here, parallelized + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_multiBlock_loopTop_128); + __ cmpptr(len_reg, 4*AESBlockSize); // see if at least 4 blocks left + __ jcc(Assembler::less, L_singleBlock_loopTop_128); + + __ movdqu(xmm_result0, Address(from, pos, Address::times_1, 0*AESBlockSize)); // get next 4 blocks into xmmresult registers + __ movdqu(xmm_result1, Address(from, pos, Address::times_1, 1*AESBlockSize)); + __ movdqu(xmm_result2, Address(from, pos, Address::times_1, 2*AESBlockSize)); + __ movdqu(xmm_result3, Address(from, pos, Address::times_1, 3*AESBlockSize)); + +#define DoFour(opc, src_reg) \ + __ opc(xmm_result0, src_reg); \ + __ opc(xmm_result1, src_reg); \ + __ opc(xmm_result2, src_reg); \ + __ opc(xmm_result3, src_reg); + + DoFour(pxor, xmm_key_first); + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + DoFour(aesdec, as_XMMRegister(rnum)); + } + DoFour(aesdeclast, xmm_key_last); + // for each result, xor with the r vector of previous cipher block + __ pxor(xmm_result0, xmm_prev_block_cipher); + __ movdqu(xmm_prev_block_cipher, Address(from, pos, Address::times_1, 0*AESBlockSize)); + __ pxor(xmm_result1, xmm_prev_block_cipher); + __ movdqu(xmm_prev_block_cipher, Address(from, pos, Address::times_1, 1*AESBlockSize)); + __ pxor(xmm_result2, xmm_prev_block_cipher); + __ movdqu(xmm_prev_block_cipher, Address(from, pos, Address::times_1, 2*AESBlockSize)); + __ pxor(xmm_result3, xmm_prev_block_cipher); + __ movdqu(xmm_prev_block_cipher, Address(from, pos, Address::times_1, 3*AESBlockSize)); // this will carry over to next set of blocks + + __ movdqu(Address(to, pos, Address::times_1, 0*AESBlockSize), xmm_result0); // store 4 results into the next 64 bytes of output + __ movdqu(Address(to, pos, Address::times_1, 1*AESBlockSize), xmm_result1); + __ movdqu(Address(to, pos, Address::times_1, 2*AESBlockSize), xmm_result2); + __ movdqu(Address(to, pos, Address::times_1, 3*AESBlockSize), xmm_result3); + + __ addptr(pos, 4*AESBlockSize); + __ subptr(len_reg, 4*AESBlockSize); + __ jmp(L_multiBlock_loopTop_128); + + // registers used in the non-parallelized loops + const XMMRegister xmm_prev_block_cipher_save = xmm2; + const XMMRegister xmm_temp = xmm3; + + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_128); + __ cmpptr(len_reg, 0); // any blocks left?? + __ jcc(Assembler::equal, L_exit); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ movdqa(xmm_prev_block_cipher_save, xmm_result); // save for next r vector + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + __ aesdeclast(xmm_result, xmm_key_last); + __ pxor (xmm_result, xmm_prev_block_cipher); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ movdqa(xmm_prev_block_cipher, xmm_prev_block_cipher_save); // set up next r vector with cipher input from this block + + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jmp(L_singleBlock_loopTop_128); + + + __ BIND(L_exit); + __ movdqu(Address(rvec, 0), xmm_prev_block_cipher); // final value of r stored in rvec of CipherBlockChaining object +#ifdef _WIN64 + // restore regs belonging to calling function + for (int i = 6; i <= XMM_REG_NUM_KEY_LAST; i++) { + __ movdqu(as_XMMRegister(i), xmm_save(i)); + } +#endif + __ movl(rax, 0); // return 0 (why?) + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + + __ BIND(L_key_192_256); + // here rax = len in ints of AESCrypt.KLE array (52=192, or 60=256) + __ cmpl(rax, 52); + __ jcc(Assembler::notEqual, L_key_256); + + // 192-bit code follows here (could be optimized to use parallelism) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_192); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ movdqa(xmm_prev_block_cipher_save, xmm_result); // save for next r vector + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + aes_dec_key(xmm_result, xmm_temp, key, 0xb0); // 192-bit key goes up to c0 + aes_dec_key(xmm_result, xmm_temp, key, 0xc0); + __ aesdeclast(xmm_result, xmm_key_last); // xmm15 always came from key+0 + __ pxor (xmm_result, xmm_prev_block_cipher); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ movdqa(xmm_prev_block_cipher, xmm_prev_block_cipher_save); // set up next r vector with cipher input from this block + + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual,L_singleBlock_loopTop_192); + __ jmp(L_exit); + + __ BIND(L_key_256); + // 256-bit code follows here (could be optimized to use parallelism) + __ movptr(pos, 0); + __ align(OptoLoopAlignment); + __ BIND(L_singleBlock_loopTop_256); + __ movdqu(xmm_result, Address(from, pos, Address::times_1, 0)); // get next 16 bytes of cipher input + __ movdqa(xmm_prev_block_cipher_save, xmm_result); // save for next r vector + __ pxor (xmm_result, xmm_key_first); // do the aes dec rounds + for (int rnum = XMM_REG_NUM_KEY_FIRST + 1; rnum <= XMM_REG_NUM_KEY_LAST - 1; rnum++) { + __ aesdec(xmm_result, as_XMMRegister(rnum)); + } + aes_dec_key(xmm_result, xmm_temp, key, 0xb0); // 256-bit key goes up to e0 + aes_dec_key(xmm_result, xmm_temp, key, 0xc0); + aes_dec_key(xmm_result, xmm_temp, key, 0xd0); + aes_dec_key(xmm_result, xmm_temp, key, 0xe0); + __ aesdeclast(xmm_result, xmm_key_last); // xmm15 came from key+0 + __ pxor (xmm_result, xmm_prev_block_cipher); // xor with the current r vector + __ movdqu(Address(to, pos, Address::times_1, 0), xmm_result); // store into the next 16 bytes of output + // no need to store r to memory until we exit + __ movdqa(xmm_prev_block_cipher, xmm_prev_block_cipher_save); // set up next r vector with cipher input from this block + + __ addptr(pos, AESBlockSize); + __ subptr(len_reg, AESBlockSize); + __ jcc(Assembler::notEqual,L_singleBlock_loopTop_256); + __ jmp(L_exit); + + return start; + } + + + #undef __ #define __ masm-> @@ -3135,6 +3677,16 @@ generate_arraycopy_stubs(); generate_math_stubs(); + + // don't bother generating these AES intrinsic stubs unless global flag is set + if (UseAESIntrinsics) { + StubRoutines::x86::_key_shuffle_mask_addr = generate_key_shuffle_mask(); // needed by the others + + StubRoutines::_aescrypt_encryptBlock = generate_aescrypt_encryptBlock(); + StubRoutines::_aescrypt_decryptBlock = generate_aescrypt_decryptBlock(); + StubRoutines::_cipherBlockChaining_encryptAESCrypt = generate_cipherBlockChaining_encryptAESCrypt(); + StubRoutines::_cipherBlockChaining_decryptAESCrypt = generate_cipherBlockChaining_decryptAESCrypt_Parallel(); + } } public: diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/stubRoutines_x86_32.cpp --- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -44,3 +44,4 @@ address StubRoutines::x86::_verify_mxcsr_entry = NULL; address StubRoutines::x86::_verify_fpu_cntrl_wrd_entry = NULL; +address StubRoutines::x86::_key_shuffle_mask_addr = NULL; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/stubRoutines_x86_32.hpp --- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_32.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -41,10 +41,14 @@ private: static address _verify_mxcsr_entry; static address _verify_fpu_cntrl_wrd_entry; + // shuffle mask for fixing up 128-bit words consisting of big-endian 32-bit integers + static address _key_shuffle_mask_addr; public: static address verify_mxcsr_entry() { return _verify_mxcsr_entry; } static address verify_fpu_cntrl_wrd_entry() { return _verify_fpu_cntrl_wrd_entry; } + static address key_shuffle_mask_addr() { return _key_shuffle_mask_addr; } + }; static bool returns_to_call_stub(address return_pc) { return return_pc == _call_stub_return_address; } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/stubRoutines_x86_64.cpp --- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -56,3 +56,4 @@ address StubRoutines::x86::_double_sign_mask = NULL; address StubRoutines::x86::_double_sign_flip = NULL; address StubRoutines::x86::_mxcsr_std = NULL; +address StubRoutines::x86::_key_shuffle_mask_addr = NULL; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/stubRoutines_x86_64.hpp --- a/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/stubRoutines_x86_64.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -54,6 +54,8 @@ static address _double_sign_mask; static address _double_sign_flip; static address _mxcsr_std; + // shuffle mask for fixing up 128-bit words consisting of big-endian 32-bit integers + static address _key_shuffle_mask_addr; public: @@ -116,6 +118,9 @@ { return _mxcsr_std; } + + static address key_shuffle_mask_addr() { return _key_shuffle_mask_addr; } + }; #endif // CPU_X86_VM_STUBROUTINES_X86_64_HPP diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/vm_version_x86.cpp --- a/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -419,13 +419,16 @@ if (UseAVX < 1) _cpuFeatures &= ~CPU_AVX; + if (!UseAES && !FLAG_IS_DEFAULT(UseAES)) + _cpuFeatures &= ~CPU_AES; + if (logical_processors_per_package() == 1) { // HT processor could be installed on a system which doesn't support HT. _cpuFeatures &= ~CPU_HT; } char buf[256]; - jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", + jio_snprintf(buf, sizeof(buf), "(%u cores per cpu, %u threads per core) family %d model %d stepping %d%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", cores_per_cpu(), threads_per_core(), cpu_family(), _model, _stepping, (supports_cmov() ? ", cmov" : ""), @@ -441,6 +444,7 @@ (supports_popcnt() ? ", popcnt" : ""), (supports_avx() ? ", avx" : ""), (supports_avx2() ? ", avx2" : ""), + (supports_aes() ? ", aes" : ""), (supports_mmx_ext() ? ", mmxext" : ""), (supports_3dnow_prefetch() ? ", 3dnowpref" : ""), (supports_lzcnt() ? ", lzcnt": ""), @@ -472,6 +476,29 @@ if (!supports_avx ()) // Drop to 0 if no AVX support UseAVX = 0; + // Use AES instructions if available. + if (supports_aes()) { + if (FLAG_IS_DEFAULT(UseAES)) { + UseAES = true; + } + } else if (UseAES) { + if (!FLAG_IS_DEFAULT(UseAES)) + warning("AES instructions not available on this CPU"); + FLAG_SET_DEFAULT(UseAES, false); + } + + // The AES intrinsic stubs require AES instruction support (of course) + // but also require AVX mode for misaligned SSE access + if (UseAES && (UseAVX > 0)) { + if (FLAG_IS_DEFAULT(UseAESIntrinsics)) { + UseAESIntrinsics = true; + } + } else if (UseAESIntrinsics) { + if (!FLAG_IS_DEFAULT(UseAESIntrinsics)) + warning("AES intrinsics not available on this CPU"); + FLAG_SET_DEFAULT(UseAESIntrinsics, false); + } + #ifdef COMPILER2 if (UseFPUForSpilling) { if (UseSSE < 2) { @@ -714,6 +741,9 @@ if (UseAVX > 0) { tty->print(" UseAVX=%d",UseAVX); } + if (UseAES) { + tty->print(" UseAES=1"); + } tty->cr(); tty->print("Allocation"); if (AllocatePrefetchStyle <= 0 || UseSSE == 0 && !supports_3dnow_prefetch()) { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/vm_version_x86.hpp --- a/hotspot/src/cpu/x86/vm/vm_version_x86.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/vm_version_x86.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -78,7 +78,9 @@ sse4_2 : 1, : 2, popcnt : 1, - : 3, + : 1, + aes : 1, + : 1, osxsave : 1, avx : 1, : 3; @@ -244,7 +246,8 @@ CPU_TSC = (1 << 15), CPU_TSCINV = (1 << 16), CPU_AVX = (1 << 17), - CPU_AVX2 = (1 << 18) + CPU_AVX2 = (1 << 18), + CPU_AES = (1 << 19) } cpuFeatureFlags; enum { @@ -420,6 +423,8 @@ result |= CPU_TSC; if (_cpuid_info.ext_cpuid7_edx.bits.tsc_invariance != 0) result |= CPU_TSCINV; + if (_cpuid_info.std_cpuid1_ecx.bits.aes != 0) + result |= CPU_AES; // AMD features. if (is_amd()) { @@ -544,6 +549,7 @@ static bool supports_avx() { return (_cpuFeatures & CPU_AVX) != 0; } static bool supports_avx2() { return (_cpuFeatures & CPU_AVX2) != 0; } static bool supports_tsc() { return (_cpuFeatures & CPU_TSC) != 0; } + static bool supports_aes() { return (_cpuFeatures & CPU_AES) != 0; } // Intel features static bool is_intel_family_core() { return is_intel() && diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/cpu/x86/vm/x86.ad --- a/hotspot/src/cpu/x86/vm/x86.ad Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/cpu/x86/vm/x86.ad Wed Jul 05 18:27:34 2017 +0200 @@ -4102,9 +4102,158 @@ // ----------------------- LogicalRightShift ----------------------------------- -// Shorts/Chars vector logical right shift produces incorrect Java result +// Shorts vector logical right shift produces incorrect Java result // for negative data because java code convert short value into int with -// sign extension before a shift. +// sign extension before a shift. But char vectors are fine since chars are +// unsigned values. + +instruct vsrl2S(vecS dst, vecS shift) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed2S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, $shift$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl2S_imm(vecS dst, immI8 shift) %{ + predicate(n->as_Vector()->length() == 2); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed2S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, (int)$shift$$constant); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl2S_reg(vecS dst, vecS src, vecS shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 2); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed2S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, $shift$$XMMRegister, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl2S_reg_imm(vecS dst, vecS src, immI8 shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 2); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed2S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, (int)$shift$$constant, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl4S(vecD dst, vecS shift) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed4S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, $shift$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl4S_imm(vecD dst, immI8 shift) %{ + predicate(n->as_Vector()->length() == 4); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed4S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, (int)$shift$$constant); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl4S_reg(vecD dst, vecD src, vecS shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 4); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed4S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, $shift$$XMMRegister, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl4S_reg_imm(vecD dst, vecD src, immI8 shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 4); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed4S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, (int)$shift$$constant, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl8S(vecX dst, vecS shift) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed8S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, $shift$$XMMRegister); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl8S_imm(vecX dst, immI8 shift) %{ + predicate(n->as_Vector()->length() == 8); + match(Set dst (URShiftVS dst shift)); + format %{ "psrlw $dst,$shift\t! logical right shift packed8S" %} + ins_encode %{ + __ psrlw($dst$$XMMRegister, (int)$shift$$constant); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl8S_reg(vecX dst, vecX src, vecS shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 8); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed8S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, $shift$$XMMRegister, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl8S_reg_imm(vecX dst, vecX src, immI8 shift) %{ + predicate(UseAVX > 0 && n->as_Vector()->length() == 8); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed8S" %} + ins_encode %{ + bool vector256 = false; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, (int)$shift$$constant, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl16S_reg(vecY dst, vecY src, vecS shift) %{ + predicate(UseAVX > 1 && n->as_Vector()->length() == 16); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed16S" %} + ins_encode %{ + bool vector256 = true; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, $shift$$XMMRegister, vector256); + %} + ins_pipe( pipe_slow ); +%} + +instruct vsrl16S_reg_imm(vecY dst, vecY src, immI8 shift) %{ + predicate(UseAVX > 1 && n->as_Vector()->length() == 16); + match(Set dst (URShiftVS src shift)); + format %{ "vpsrlw $dst,$src,$shift\t! logical right shift packed16S" %} + ins_encode %{ + bool vector256 = true; + __ vpsrlw($dst$$XMMRegister, $src$$XMMRegister, (int)$shift$$constant, vector256); + %} + ins_pipe( pipe_slow ); +%} // Integers vector logical right shift instruct vsrl2I(vecD dst, vecS shift) %{ diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/os/bsd/vm/perfMemory_bsd.cpp --- a/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/os/bsd/vm/perfMemory_bsd.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -30,6 +30,7 @@ #include "os_bsd.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/perfMemory.hpp" +#include "services/memTracker.hpp" #include "utilities/exceptions.hpp" // put OS-includes here @@ -753,6 +754,10 @@ // clear the shared memory region (void)::memset((void*) mapAddress, 0, size); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + return mapAddress; } @@ -912,6 +917,10 @@ "Could not map PerfMemory"); } + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + *addr = mapAddress; *sizep = size; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/os/linux/vm/perfMemory_linux.cpp --- a/hotspot/src/os/linux/vm/perfMemory_linux.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/os/linux/vm/perfMemory_linux.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -30,6 +30,7 @@ #include "os_linux.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/perfMemory.hpp" +#include "services/memTracker.hpp" #include "utilities/exceptions.hpp" // put OS-includes here @@ -753,6 +754,10 @@ // clear the shared memory region (void)::memset((void*) mapAddress, 0, size); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + return mapAddress; } @@ -912,6 +917,10 @@ "Could not map PerfMemory"); } + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + *addr = mapAddress; *sizep = size; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/os/solaris/vm/os_solaris.cpp --- a/hotspot/src/os/solaris/vm/os_solaris.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/os/solaris/vm/os_solaris.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -55,6 +55,7 @@ #include "runtime/threadCritical.hpp" #include "runtime/timer.hpp" #include "services/attachListener.hpp" +#include "services/memTracker.hpp" #include "services/runtimeService.hpp" #include "thread_solaris.inline.hpp" #include "utilities/decoder.hpp" @@ -3072,11 +3073,12 @@ // Since snv_84, Solaris attempts to honor the address hint - see 5003415. // Give it a try, if the kernel honors the hint we can return immediately. char* addr = Solaris::anon_mmap(requested_addr, bytes, 0, false); + volatile int err = errno; if (addr == requested_addr) { return addr; } else if (addr != NULL) { - unmap_memory(addr, bytes); + pd_unmap_memory(addr, bytes); } if (PrintMiscellaneous && Verbose) { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/os/solaris/vm/perfMemory_solaris.cpp --- a/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/os/solaris/vm/perfMemory_solaris.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -30,6 +30,7 @@ #include "os_solaris.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/perfMemory.hpp" +#include "services/memTracker.hpp" #include "utilities/exceptions.hpp" // put OS-includes here @@ -768,6 +769,10 @@ // clear the shared memory region (void)::memset((void*) mapAddress, 0, size); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + return mapAddress; } @@ -927,6 +932,10 @@ "Could not map PerfMemory"); } + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + *addr = mapAddress; *sizep = size; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/os/windows/vm/perfMemory_windows.cpp --- a/hotspot/src/os/windows/vm/perfMemory_windows.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/os/windows/vm/perfMemory_windows.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -30,6 +30,7 @@ #include "os_windows.inline.hpp" #include "runtime/handles.inline.hpp" #include "runtime/perfMemory.hpp" +#include "services/memTracker.hpp" #include "utilities/exceptions.hpp" #include @@ -1496,6 +1497,10 @@ // clear the shared memory region (void)memset(mapAddress, '\0', size); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + return (char*) mapAddress; } @@ -1672,6 +1677,11 @@ "Could not map PerfMemory"); } + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_reserve((address)mapAddress, size, CURRENT_PC); + MemTracker::record_virtual_memory_type((address)mapAddress, mtInternal); + + *addrp = (char*)mapAddress; *sizep = size; @@ -1824,6 +1834,8 @@ } remove_file_mapping(addr); + // it does not go through os api, the operation has to record from here + MemTracker::record_virtual_memory_release((address)addr, bytes); } char* PerfMemory::backing_store_filename() { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/c1/c1_GraphBuilder.cpp --- a/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/c1/c1_GraphBuilder.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -1844,17 +1844,12 @@ code == Bytecodes::_invokevirtual && target->is_final_method() || code == Bytecodes::_invokedynamic) { ciMethod* inline_target = (cha_monomorphic_target != NULL) ? cha_monomorphic_target : target; - bool success = false; - if (target->is_method_handle_intrinsic()) { - // method handle invokes - success = try_method_handle_inline(target); - } else { - // static binding => check if callee is ok - success = try_inline(inline_target, (cha_monomorphic_target != NULL) || (exact_target != NULL), code, better_receiver); - } + // static binding => check if callee is ok + bool success = try_inline(inline_target, (cha_monomorphic_target != NULL) || (exact_target != NULL), code, better_receiver); + CHECK_BAILOUT(); - clear_inline_bailout(); + if (success) { // Register dependence if JVMTI has either breakpoint // setting or hotswapping of methods capabilities since they may @@ -3201,6 +3196,11 @@ return false; } + // method handle invokes + if (callee->is_method_handle_intrinsic()) { + return try_method_handle_inline(callee); + } + // handle intrinsics if (callee->intrinsic_id() != vmIntrinsics::_none) { if (try_inline_intrinsics(callee)) { @@ -3885,10 +3885,14 @@ ValueType* type = state()->stack_at(args_base)->type(); if (type->is_constant()) { ciMethod* target = type->as_ObjectType()->constant_value()->as_method_handle()->get_vmtarget(); - guarantee(!target->is_method_handle_intrinsic(), "should not happen"); // XXX remove - Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual; - if (try_inline(target, /*holder_known*/ true, bc)) { - return true; + // We don't do CHA here so only inline static and statically bindable methods. + if (target->is_static() || target->can_be_statically_bound()) { + Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual; + if (try_inline(target, /*holder_known*/ true, bc)) { + return true; + } + } else { + print_inlining(target, "not static or statically bindable", /*success*/ false); } } else { print_inlining(callee, "receiver not constant", /*success*/ false); @@ -3941,9 +3945,14 @@ } j += t->size(); // long and double take two slots } - Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual; - if (try_inline(target, /*holder_known*/ true, bc)) { - return true; + // We don't do CHA here so only inline static and statically bindable methods. + if (target->is_static() || target->can_be_statically_bound()) { + Bytecodes::Code bc = target->is_static() ? Bytecodes::_invokestatic : Bytecodes::_invokevirtual; + if (try_inline(target, /*holder_known*/ true, bc)) { + return true; + } + } else { + print_inlining(target, "not static or statically bindable", /*success*/ false); } } } else { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/classfile/vmSymbols.hpp --- a/hotspot/src/share/vm/classfile/vmSymbols.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/classfile/vmSymbols.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -110,6 +110,7 @@ template(sun_jkernel_DownloadManager, "sun/jkernel/DownloadManager") \ template(getBootClassPathEntryForClass_name, "getBootClassPathEntryForClass") \ template(sun_misc_PostVMInitHook, "sun/misc/PostVMInitHook") \ + template(sun_misc_Launcher_ExtClassLoader, "sun/misc/Launcher$ExtClassLoader") \ \ /* Java runtime version access */ \ template(sun_misc_Version, "sun/misc/Version") \ @@ -723,6 +724,21 @@ /* java/lang/ref/Reference */ \ do_intrinsic(_Reference_get, java_lang_ref_Reference, get_name, void_object_signature, F_R) \ \ + /* support for com.sum.crypto.provider.AESCrypt and some of its callers */ \ + do_class(com_sun_crypto_provider_aescrypt, "com/sun/crypto/provider/AESCrypt") \ + do_intrinsic(_aescrypt_encryptBlock, com_sun_crypto_provider_aescrypt, encryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \ + do_intrinsic(_aescrypt_decryptBlock, com_sun_crypto_provider_aescrypt, decryptBlock_name, byteArray_int_byteArray_int_signature, F_R) \ + do_name( encryptBlock_name, "encryptBlock") \ + do_name( decryptBlock_name, "decryptBlock") \ + do_signature(byteArray_int_byteArray_int_signature, "([BI[BI)V") \ + \ + do_class(com_sun_crypto_provider_cipherBlockChaining, "com/sun/crypto/provider/CipherBlockChaining") \ + do_intrinsic(_cipherBlockChaining_encryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, encrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \ + do_intrinsic(_cipherBlockChaining_decryptAESCrypt, com_sun_crypto_provider_cipherBlockChaining, decrypt_name, byteArray_int_int_byteArray_int_signature, F_R) \ + do_name( encrypt_name, "encrypt") \ + do_name( decrypt_name, "decrypt") \ + do_signature(byteArray_int_int_byteArray_int_signature, "([BII[BI)V") \ + \ /* support for sun.misc.Unsafe */ \ do_class(sun_misc_Unsafe, "sun/misc/Unsafe") \ \ diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/compiler/compilerOracle.cpp --- a/hotspot/src/share/vm/compiler/compilerOracle.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/compiler/compilerOracle.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -574,7 +574,7 @@ char token[1024]; int pos = 0; int c = getc(stream); - while(c != EOF) { + while(c != EOF && pos < (int)(sizeof(token)-1)) { if (c == '\n') { token[pos++] = '\0'; parse_from_line(token); @@ -595,7 +595,7 @@ int pos = 0; const char* sp = str; int c = *sp++; - while (c != '\0') { + while (c != '\0' && pos < (int)(sizeof(token)-1)) { if (c == '\n') { token[pos++] = '\0'; parse_line(token); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#include "precompiled.hpp" +#include "gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp" +#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" +#include "memory/freeBlockDictionary.hpp" +#include "memory/sharedHeap.hpp" +#include "runtime/globals.hpp" +#include "runtime/mutex.hpp" +#include "runtime/vmThread.hpp" + +template <> +void AdaptiveFreeList::print_on(outputStream* st, const char* c) const { + if (c != NULL) { + st->print("%16s", c); + } else { + st->print(SIZE_FORMAT_W(16), size()); + } + st->print("\t" + SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" + SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\n", + bfr_surp(), surplus(), desired(), prev_sweep(), before_sweep(), + count(), coal_births(), coal_deaths(), split_births(), split_deaths()); +} + +template +AdaptiveFreeList::AdaptiveFreeList() : FreeList(), _hint(0) { + init_statistics(); +} + +template +AdaptiveFreeList::AdaptiveFreeList(Chunk* fc) : FreeList(fc), _hint(0) { + init_statistics(); +#ifndef PRODUCT + _allocation_stats.set_returned_bytes(size() * HeapWordSize); +#endif +} + +template +void AdaptiveFreeList::initialize() { + FreeList::initialize(); + set_hint(0); + init_statistics(true /* split_birth */); +} + +template +void AdaptiveFreeList::reset(size_t hint) { + FreeList::reset(); + set_hint(hint); +} + +#ifndef PRODUCT +template +void AdaptiveFreeList::assert_proper_lock_protection_work() const { + assert(protecting_lock() != NULL, "Don't call this directly"); + assert(ParallelGCThreads > 0, "Don't call this directly"); + Thread* thr = Thread::current(); + if (thr->is_VM_thread() || thr->is_ConcurrentGC_thread()) { + // assert that we are holding the freelist lock + } else if (thr->is_GC_task_thread()) { + assert(protecting_lock()->owned_by_self(), "FreeList RACE DETECTED"); + } else if (thr->is_Java_thread()) { + assert(!SafepointSynchronize::is_at_safepoint(), "Should not be executing"); + } else { + ShouldNotReachHere(); // unaccounted thread type? + } +} +#endif +template +void AdaptiveFreeList::init_statistics(bool split_birth) { + _allocation_stats.initialize(split_birth); +} + +template +size_t AdaptiveFreeList::get_better_size() { + + // A candidate chunk has been found. If it is already under + // populated and there is a hinT, REturn the hint(). Else + // return the size of this chunk. + if (surplus() <= 0) { + if (hint() != 0) { + return hint(); + } else { + return size(); + } + } else { + // This list has a surplus so use it. + return size(); + } +} + + +template +void AdaptiveFreeList::return_chunk_at_head(Chunk* chunk) { + assert_proper_lock_protection(); + return_chunk_at_head(chunk, true); +} + +template +void AdaptiveFreeList::return_chunk_at_head(Chunk* chunk, bool record_return) { + FreeList::return_chunk_at_head(chunk, record_return); +#ifdef ASSERT + if (record_return) { + increment_returned_bytes_by(size()*HeapWordSize); + } +#endif +} + +template +void AdaptiveFreeList::return_chunk_at_tail(Chunk* chunk) { + return_chunk_at_tail(chunk, true); +} + +template +void AdaptiveFreeList::return_chunk_at_tail(Chunk* chunk, bool record_return) { + FreeList::return_chunk_at_tail(chunk, record_return); +#ifdef ASSERT + if (record_return) { + increment_returned_bytes_by(size()*HeapWordSize); + } +#endif +} + +#ifndef PRODUCT +template +void AdaptiveFreeList::verify_stats() const { + // The +1 of the LH comparand is to allow some "looseness" in + // checking: we usually call this interface when adding a block + // and we'll subsequently update the stats; we cannot update the + // stats beforehand because in the case of the large-block BT + // dictionary for example, this might be the first block and + // in that case there would be no place that we could record + // the stats (which are kept in the block itself). + assert((_allocation_stats.prev_sweep() + _allocation_stats.split_births() + + _allocation_stats.coal_births() + 1) // Total Production Stock + 1 + >= (_allocation_stats.split_deaths() + _allocation_stats.coal_deaths() + + (ssize_t)count()), // Total Current Stock + depletion + err_msg("FreeList " PTR_FORMAT " of size " SIZE_FORMAT + " violates Conservation Principle: " + "prev_sweep(" SIZE_FORMAT ")" + " + split_births(" SIZE_FORMAT ")" + " + coal_births(" SIZE_FORMAT ") + 1 >= " + " split_deaths(" SIZE_FORMAT ")" + " coal_deaths(" SIZE_FORMAT ")" + " + count(" SSIZE_FORMAT ")", + this, size(), _allocation_stats.prev_sweep(), _allocation_stats.split_births(), + _allocation_stats.split_births(), _allocation_stats.split_deaths(), + _allocation_stats.coal_deaths(), count())); +} +#endif + +// Needs to be after the definitions have been seen. +template class AdaptiveFreeList; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +#ifndef SHARE_VM_MEMORY_ADAPTIVEFREELIST_HPP +#define SHARE_VM_MEMORY_ADAPTIVEFREELIST_HPP + +#include "memory/freeList.hpp" +#include "gc_implementation/shared/allocationStats.hpp" + +class CompactibleFreeListSpace; + +// A class for maintaining a free list of Chunk's. The FreeList +// maintains a the structure of the list (head, tail, etc.) plus +// statistics for allocations from the list. The links between items +// are not part of FreeList. The statistics are +// used to make decisions about coalescing Chunk's when they +// are swept during collection. +// +// See the corresponding .cpp file for a description of the specifics +// for that implementation. + +class Mutex; + +template +class AdaptiveFreeList : public FreeList { + friend class CompactibleFreeListSpace; + friend class VMStructs; + // friend class PrintTreeCensusClosure; + + size_t _hint; // next larger size list with a positive surplus + + AllocationStats _allocation_stats; // allocation-related statistics + + public: + + AdaptiveFreeList(); + AdaptiveFreeList(Chunk* fc); + + using FreeList::assert_proper_lock_protection; +#ifdef ASSERT + using FreeList::protecting_lock; +#endif + using FreeList::count; + using FreeList::size; + using FreeList::verify_chunk_in_free_list; + using FreeList::getFirstNChunksFromList; + using FreeList::print_on; + void return_chunk_at_head(Chunk* fc, bool record_return); + void return_chunk_at_head(Chunk* fc); + void return_chunk_at_tail(Chunk* fc, bool record_return); + void return_chunk_at_tail(Chunk* fc); + using FreeList::return_chunk_at_tail; + using FreeList::remove_chunk; + using FreeList::prepend; + using FreeList::print_labels_on; + using FreeList::get_chunk_at_head; + + // Initialize. + void initialize(); + + // Reset the head, tail, hint, and count of a free list. + void reset(size_t hint); + + void assert_proper_lock_protection_work() const PRODUCT_RETURN; + + void print_on(outputStream* st, const char* c = NULL) const; + + size_t hint() const { + return _hint; + } + void set_hint(size_t v) { + assert_proper_lock_protection(); + assert(v == 0 || size() < v, "Bad hint"); + _hint = v; + } + + size_t get_better_size(); + + // Accessors for statistics + void init_statistics(bool split_birth = false); + + AllocationStats* allocation_stats() { + assert_proper_lock_protection(); + return &_allocation_stats; + } + + ssize_t desired() const { + return _allocation_stats.desired(); + } + void set_desired(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_desired(v); + } + void compute_desired(float inter_sweep_current, + float inter_sweep_estimate, + float intra_sweep_estimate) { + assert_proper_lock_protection(); + _allocation_stats.compute_desired(count(), + inter_sweep_current, + inter_sweep_estimate, + intra_sweep_estimate); + } + ssize_t coal_desired() const { + return _allocation_stats.coal_desired(); + } + void set_coal_desired(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_coal_desired(v); + } + + ssize_t surplus() const { + return _allocation_stats.surplus(); + } + void set_surplus(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_surplus(v); + } + void increment_surplus() { + assert_proper_lock_protection(); + _allocation_stats.increment_surplus(); + } + void decrement_surplus() { + assert_proper_lock_protection(); + _allocation_stats.decrement_surplus(); + } + + ssize_t bfr_surp() const { + return _allocation_stats.bfr_surp(); + } + void set_bfr_surp(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_bfr_surp(v); + } + ssize_t prev_sweep() const { + return _allocation_stats.prev_sweep(); + } + void set_prev_sweep(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_prev_sweep(v); + } + ssize_t before_sweep() const { + return _allocation_stats.before_sweep(); + } + void set_before_sweep(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_before_sweep(v); + } + + ssize_t coal_births() const { + return _allocation_stats.coal_births(); + } + void set_coal_births(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_coal_births(v); + } + void increment_coal_births() { + assert_proper_lock_protection(); + _allocation_stats.increment_coal_births(); + } + + ssize_t coal_deaths() const { + return _allocation_stats.coal_deaths(); + } + void set_coal_deaths(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_coal_deaths(v); + } + void increment_coal_deaths() { + assert_proper_lock_protection(); + _allocation_stats.increment_coal_deaths(); + } + + ssize_t split_births() const { + return _allocation_stats.split_births(); + } + void set_split_births(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_split_births(v); + } + void increment_split_births() { + assert_proper_lock_protection(); + _allocation_stats.increment_split_births(); + } + + ssize_t split_deaths() const { + return _allocation_stats.split_deaths(); + } + void set_split_deaths(ssize_t v) { + assert_proper_lock_protection(); + _allocation_stats.set_split_deaths(v); + } + void increment_split_deaths() { + assert_proper_lock_protection(); + _allocation_stats.increment_split_deaths(); + } + +#ifndef PRODUCT + // For debugging. The "_returned_bytes" in all the lists are summed + // and compared with the total number of bytes swept during a + // collection. + size_t returned_bytes() const { return _allocation_stats.returned_bytes(); } + void set_returned_bytes(size_t v) { _allocation_stats.set_returned_bytes(v); } + void increment_returned_bytes_by(size_t v) { + _allocation_stats.set_returned_bytes(_allocation_stats.returned_bytes() + v); + } + // Stats verification + void verify_stats() const; +#endif // NOT PRODUCT +}; + +#endif // SHARE_VM_MEMORY_ADAPTIVEFREELIST_HPP diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -91,7 +91,7 @@ _collector(NULL) { assert(sizeof(FreeChunk) / BytesPerWord <= MinChunkSize, - "FreeChunk is larger than expected"); + "FreeChunk is larger than expected"); _bt.set_space(this); initialize(mr, SpaceDecorator::Clear, SpaceDecorator::Mangle); // We have all of "mr", all of which we place in the dictionary @@ -101,14 +101,14 @@ // implementation, namely, the simple binary tree (splaying // temporarily disabled). switch (dictionaryChoice) { + case FreeBlockDictionary::dictionaryBinaryTree: + _dictionary = new BinaryTreeDictionary(mr); + break; case FreeBlockDictionary::dictionarySplayTree: case FreeBlockDictionary::dictionarySkipList: default: warning("dictionaryChoice: selected option not understood; using" " default BinaryTreeDictionary implementation instead."); - case FreeBlockDictionary::dictionaryBinaryTree: - _dictionary = new BinaryTreeDictionary(mr, use_adaptive_freelists); - break; } assert(_dictionary != NULL, "CMS dictionary initialization"); // The indexed free lists are initially all empty and are lazily @@ -453,7 +453,7 @@ reportIndexedFreeListStatistics(); gclog_or_tty->print_cr("Layout of Indexed Freelists"); gclog_or_tty->print_cr("---------------------------"); - FreeList::print_labels_on(st, "size"); + AdaptiveFreeList::print_labels_on(st, "size"); for (size_t i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { _indexedFreeList[i].print_on(gclog_or_tty); for (FreeChunk* fc = _indexedFreeList[i].head(); fc != NULL; @@ -1319,7 +1319,7 @@ size_t currSize = numWords + MinChunkSize; assert(currSize % MinObjAlignment == 0, "currSize should be aligned"); for (i = currSize; i < IndexSetSize; i += IndexSetStride) { - FreeList* fl = &_indexedFreeList[i]; + AdaptiveFreeList* fl = &_indexedFreeList[i]; if (fl->head()) { ret = getFromListGreater(fl, numWords); assert(ret == NULL || ret->is_free(), "Should be returning a free chunk"); @@ -1702,7 +1702,9 @@ _dictionary->return_chunk(chunk); #ifndef PRODUCT if (CMSCollector::abstract_state() != CMSCollector::Sweeping) { - TreeChunk::as_TreeChunk(chunk)->list()->verify_stats(); + TreeChunk* tc = TreeChunk::as_TreeChunk(chunk); + TreeList* tl = tc->list(); + tl->verify_stats(); } #endif // PRODUCT } @@ -1745,7 +1747,7 @@ { MutexLockerEx x(lock, Mutex::_no_safepoint_check_flag); ec = dictionary()->find_largest_dict(); // get largest block - if (ec != NULL && ec->end() == chunk) { + if (ec != NULL && ec->end() == (uintptr_t*) chunk) { // It's a coterminal block - we can coalesce. size_t old_size = ec->size(); coalDeath(old_size); @@ -1850,11 +1852,11 @@ the excess is >= MIN_CHUNK. */ size_t start = align_object_size(numWords + MinChunkSize); if (start < IndexSetSize) { - FreeList* it = _indexedFreeList; + AdaptiveFreeList* it = _indexedFreeList; size_t hint = _indexedFreeList[start].hint(); while (hint < IndexSetSize) { assert(hint % MinObjAlignment == 0, "hint should be aligned"); - FreeList *fl = &_indexedFreeList[hint]; + AdaptiveFreeList *fl = &_indexedFreeList[hint]; if (fl->surplus() > 0 && fl->head() != NULL) { // Found a list with surplus, reset original hint // and split out a free chunk which is returned. @@ -1873,7 +1875,7 @@ } /* Requires fl->size >= numWords + MinChunkSize */ -FreeChunk* CompactibleFreeListSpace::getFromListGreater(FreeList* fl, +FreeChunk* CompactibleFreeListSpace::getFromListGreater(AdaptiveFreeList* fl, size_t numWords) { FreeChunk *curr = fl->head(); size_t oldNumWords = curr->size(); @@ -2155,7 +2157,7 @@ assert_locked(); size_t i; for (i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { - FreeList* fl = &_indexedFreeList[i]; + AdaptiveFreeList* fl = &_indexedFreeList[i]; if (PrintFLSStatistics > 1) { gclog_or_tty->print("size[%d] : ", i); } @@ -2174,7 +2176,7 @@ assert_locked(); size_t i; for (i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { - FreeList *fl = &_indexedFreeList[i]; + AdaptiveFreeList *fl = &_indexedFreeList[i]; fl->set_surplus(fl->count() - (ssize_t)((double)fl->desired() * CMSSmallSplitSurplusPercent)); } @@ -2185,7 +2187,7 @@ size_t i; size_t h = IndexSetSize; for (i = IndexSetSize - 1; i != 0; i -= IndexSetStride) { - FreeList *fl = &_indexedFreeList[i]; + AdaptiveFreeList *fl = &_indexedFreeList[i]; fl->set_hint(h); if (fl->surplus() > 0) { h = i; @@ -2197,7 +2199,7 @@ assert_locked(); size_t i; for (i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { - FreeList *fl = &_indexedFreeList[i]; + AdaptiveFreeList *fl = &_indexedFreeList[i]; fl->set_prev_sweep(fl->count()); fl->set_coal_births(0); fl->set_coal_deaths(0); @@ -2224,7 +2226,7 @@ bool CompactibleFreeListSpace::coalOverPopulated(size_t size) { if (size < SmallForDictionary) { - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; return (fl->coal_desired() < 0) || ((int)fl->count() > fl->coal_desired()); } else { @@ -2234,14 +2236,14 @@ void CompactibleFreeListSpace::smallCoalBirth(size_t size) { assert(size < SmallForDictionary, "Size too large for indexed list"); - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; fl->increment_coal_births(); fl->increment_surplus(); } void CompactibleFreeListSpace::smallCoalDeath(size_t size) { assert(size < SmallForDictionary, "Size too large for indexed list"); - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; fl->increment_coal_deaths(); fl->decrement_surplus(); } @@ -2250,7 +2252,7 @@ if (size < SmallForDictionary) { smallCoalBirth(size); } else { - dictionary()->dict_census_udpate(size, + dictionary()->dict_census_update(size, false /* split */, true /* birth */); } @@ -2260,7 +2262,7 @@ if(size < SmallForDictionary) { smallCoalDeath(size); } else { - dictionary()->dict_census_udpate(size, + dictionary()->dict_census_update(size, false /* split */, false /* birth */); } @@ -2268,14 +2270,14 @@ void CompactibleFreeListSpace::smallSplitBirth(size_t size) { assert(size < SmallForDictionary, "Size too large for indexed list"); - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; fl->increment_split_births(); fl->increment_surplus(); } void CompactibleFreeListSpace::smallSplitDeath(size_t size) { assert(size < SmallForDictionary, "Size too large for indexed list"); - FreeList *fl = &_indexedFreeList[size]; + AdaptiveFreeList *fl = &_indexedFreeList[size]; fl->increment_split_deaths(); fl->decrement_surplus(); } @@ -2284,7 +2286,7 @@ if (size < SmallForDictionary) { smallSplitBirth(size); } else { - dictionary()->dict_census_udpate(size, + dictionary()->dict_census_update(size, true /* split */, true /* birth */); } @@ -2294,7 +2296,7 @@ if (size < SmallForDictionary) { smallSplitDeath(size); } else { - dictionary()->dict_census_udpate(size, + dictionary()->dict_census_update(size, true /* split */, false /* birth */); } @@ -2517,10 +2519,10 @@ #ifndef PRODUCT void CompactibleFreeListSpace::check_free_list_consistency() const { - assert(_dictionary->min_size() <= IndexSetSize, + assert((TreeChunk::min_size() <= IndexSetSize), "Some sizes can't be allocated without recourse to" " linear allocation buffers"); - assert(BinaryTreeDictionary::min_tree_chunk_size*HeapWordSize == sizeof(TreeChunk), + assert((TreeChunk::min_size()*HeapWordSize == sizeof(TreeChunk)), "else MIN_TREE_CHUNK_SIZE is wrong"); assert(IndexSetStart != 0, "IndexSetStart not initialized"); assert(IndexSetStride != 0, "IndexSetStride not initialized"); @@ -2529,15 +2531,15 @@ void CompactibleFreeListSpace::printFLCensus(size_t sweep_count) const { assert_lock_strong(&_freelistLock); - FreeList total; + AdaptiveFreeList total; gclog_or_tty->print("end sweep# " SIZE_FORMAT "\n", sweep_count); - FreeList::print_labels_on(gclog_or_tty, "size"); + AdaptiveFreeList::print_labels_on(gclog_or_tty, "size"); size_t total_free = 0; for (size_t i = IndexSetStart; i < IndexSetSize; i += IndexSetStride) { - const FreeList *fl = &_indexedFreeList[i]; + const AdaptiveFreeList *fl = &_indexedFreeList[i]; total_free += fl->count() * fl->size(); if (i % (40*IndexSetStride) == 0) { - FreeList::print_labels_on(gclog_or_tty, "size"); + AdaptiveFreeList::print_labels_on(gclog_or_tty, "size"); } fl->print_on(gclog_or_tty); total.set_bfr_surp( total.bfr_surp() + fl->bfr_surp() ); @@ -2620,7 +2622,7 @@ res = _cfls->getChunkFromDictionaryExact(word_sz); if (res == NULL) return NULL; } else { - FreeList* fl = &_indexedFreeList[word_sz]; + AdaptiveFreeList* fl = &_indexedFreeList[word_sz]; if (fl->count() == 0) { // Attempt to refill this local free list. get_from_global_pool(word_sz, fl); @@ -2640,7 +2642,7 @@ // Get a chunk of blocks of the right size and update related // book-keeping stats -void CFLS_LAB::get_from_global_pool(size_t word_sz, FreeList* fl) { +void CFLS_LAB::get_from_global_pool(size_t word_sz, AdaptiveFreeList* fl) { // Get the #blocks we want to claim size_t n_blks = (size_t)_blocks_to_claim[word_sz].average(); assert(n_blks > 0, "Error"); @@ -2722,7 +2724,7 @@ if (num_retire > 0) { _cfls->_indexedFreeList[i].prepend(&_indexedFreeList[i]); // Reset this list. - _indexedFreeList[i] = FreeList(); + _indexedFreeList[i] = AdaptiveFreeList(); _indexedFreeList[i].set_size(i); } } @@ -2736,7 +2738,7 @@ } } -void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList* fl) { +void CompactibleFreeListSpace:: par_get_chunk_of_blocks(size_t word_sz, size_t n, AdaptiveFreeList* fl) { assert(fl->count() == 0, "Precondition."); assert(word_sz < CompactibleFreeListSpace::IndexSetSize, "Precondition"); @@ -2752,12 +2754,12 @@ (cur_sz < CompactibleFreeListSpace::IndexSetSize) && (CMSSplitIndexedFreeListBlocks || k <= 1); k++, cur_sz = k * word_sz) { - FreeList fl_for_cur_sz; // Empty. + AdaptiveFreeList fl_for_cur_sz; // Empty. fl_for_cur_sz.set_size(cur_sz); { MutexLockerEx x(_indexedFreeListParLocks[cur_sz], Mutex::_no_safepoint_check_flag); - FreeList* gfl = &_indexedFreeList[cur_sz]; + AdaptiveFreeList* gfl = &_indexedFreeList[cur_sz]; if (gfl->count() != 0) { // nn is the number of chunks of size cur_sz that // we'd need to split k-ways each, in order to create @@ -2832,12 +2834,11 @@ MutexLockerEx x(parDictionaryAllocLock(), Mutex::_no_safepoint_check_flag); while (n > 0) { - fc = dictionary()->get_chunk(MAX2(n * word_sz, - _dictionary->min_size()), + fc = dictionary()->get_chunk(MAX2(n * word_sz, _dictionary->min_size()), FreeBlockDictionary::atLeast); if (fc != NULL) { _bt.allocated((HeapWord*)fc, fc->size(), true /* reducing */); // update _unallocated_blk - dictionary()->dict_census_udpate(fc->size(), + dictionary()->dict_census_update(fc->size(), true /*split*/, false /*birth*/); break; @@ -2890,7 +2891,7 @@ fc->set_size(prefix_size); if (rem >= IndexSetSize) { returnChunkToDictionary(rem_fc); - dictionary()->dict_census_udpate(rem, true /*split*/, true /*birth*/); + dictionary()->dict_census_update(rem, true /*split*/, true /*birth*/); rem_fc = NULL; } // Otherwise, return it to the small list below. diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/compactibleFreeListSpace.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -25,6 +25,7 @@ #ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_COMPACTIBLEFREELISTSPACE_HPP #define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_COMPACTIBLEFREELISTSPACE_HPP +#include "gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp" #include "gc_implementation/concurrentMarkSweep/promotionInfo.hpp" #include "memory/binaryTreeDictionary.hpp" #include "memory/blockOffsetTable.inline.hpp" @@ -38,6 +39,7 @@ class CompactibleFreeListSpace; class BlkClosure; class BlkClosureCareful; +class FreeChunk; class UpwardsObjectClosure; class ObjectClosureCareful; class Klass; @@ -131,7 +133,7 @@ FreeBlockDictionary::DictionaryChoice _dictionaryChoice; FreeBlockDictionary* _dictionary; // ptr to dictionary for large size blocks - FreeList _indexedFreeList[IndexSetSize]; + AdaptiveFreeList _indexedFreeList[IndexSetSize]; // indexed array for small size blocks // allocation stategy bool _fitStrategy; // Use best fit strategy. @@ -168,7 +170,7 @@ // If the count of "fl" is negative, it's absolute value indicates a // number of free chunks that had been previously "borrowed" from global // list of size "word_sz", and must now be decremented. - void par_get_chunk_of_blocks(size_t word_sz, size_t n, FreeList* fl); + void par_get_chunk_of_blocks(size_t word_sz, size_t n, AdaptiveFreeList* fl); // Allocation helper functions // Allocate using a strategy that takes from the indexed free lists @@ -214,7 +216,7 @@ // and return it. The split off remainder is returned to // the free lists. The old name for getFromListGreater // was lookInListGreater. - FreeChunk* getFromListGreater(FreeList* fl, size_t numWords); + FreeChunk* getFromListGreater(AdaptiveFreeList* fl, size_t numWords); // Get a chunk in the indexed free list or dictionary, // by considering a larger chunk and splitting it. FreeChunk* getChunkFromGreater(size_t numWords); @@ -621,7 +623,7 @@ CompactibleFreeListSpace* _cfls; // Our local free lists. - FreeList _indexedFreeList[CompactibleFreeListSpace::IndexSetSize]; + AdaptiveFreeList _indexedFreeList[CompactibleFreeListSpace::IndexSetSize]; // Initialized from a command-line arg. @@ -634,7 +636,7 @@ size_t _num_blocks [CompactibleFreeListSpace::IndexSetSize]; // Internal work method - void get_from_global_pool(size_t word_sz, FreeList* fl); + void get_from_global_pool(size_t word_sz, AdaptiveFreeList* fl); public: CFLS_LAB(CompactibleFreeListSpace* cfls); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/concurrentMarkSweepGeneration.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -9143,7 +9143,7 @@ size_t shrinkable_size_in_bytes = chunk_at_end->size(); size_t aligned_shrinkable_size_in_bytes = align_size_down(shrinkable_size_in_bytes, os::vm_page_size()); - assert(unallocated_start <= chunk_at_end->end(), + assert(unallocated_start <= (HeapWord*) chunk_at_end->end(), "Inconsistent chunk at end of space"); size_t bytes = MIN2(desired_bytes, aligned_shrinkable_size_in_bytes); size_t word_size_before = heap_word_size(_virtual_space.committed_size()); @@ -9210,7 +9210,7 @@ assert(_cmsSpace->unallocated_block() <= _cmsSpace->end(), "Inconsistency at end of space"); - assert(chunk_at_end->end() == _cmsSpace->end(), + assert(chunk_at_end->end() == (uintptr_t*) _cmsSpace->end(), "Shrinking is inconsistent"); return; } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/freeChunk.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -133,7 +133,7 @@ } // Return the address past the end of this chunk - HeapWord* end() const { return ((HeapWord*) this) + size(); } + uintptr_t* end() const { return ((uintptr_t*) this) + size(); } // debugging void verify() const PRODUCT_RETURN; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp --- a/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -25,6 +25,8 @@ #ifndef SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMSTRUCTS_CMS_HPP #define SHARE_VM_GC_IMPLEMENTATION_CONCURRENTMARKSWEEP_VMSTRUCTS_CMS_HPP +typedef BinaryTreeDictionary AFLBinaryTreeDictionary; + #define VM_STRUCTS_CMS(nonstatic_field, \ volatile_nonstatic_field, \ static_field) \ @@ -38,14 +40,8 @@ nonstatic_field(CMSCollector, _markBitMap, CMSBitMap) \ nonstatic_field(ConcurrentMarkSweepGeneration, _cmsSpace, CompactibleFreeListSpace*) \ static_field(ConcurrentMarkSweepThread, _collector, CMSCollector*) \ - volatile_nonstatic_field(FreeChunk, _size, size_t) \ - nonstatic_field(FreeChunk, _next, FreeChunk*) \ - nonstatic_field(FreeChunk, _prev, FreeChunk*) \ nonstatic_field(LinearAllocBlock, _word_size, size_t) \ - nonstatic_field(FreeList, _size, size_t) \ - nonstatic_field(FreeList, _count, ssize_t) \ - nonstatic_field(BinaryTreeDictionary,_total_size, size_t) \ - nonstatic_field(CompactibleFreeListSpace, _dictionary, FreeBlockDictionary*) \ + nonstatic_field(AFLBinaryTreeDictionary, _total_size, size_t) \ nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], FreeList) \ nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, LinearAllocBlock) @@ -60,19 +56,17 @@ declare_toplevel_type(CMSCollector) \ declare_toplevel_type(CMSBitMap) \ declare_toplevel_type(FreeChunk) \ + declare_toplevel_type(Metablock) \ declare_toplevel_type(ConcurrentMarkSweepThread*) \ declare_toplevel_type(ConcurrentMarkSweepGeneration*) \ declare_toplevel_type(SurrogateLockerThread*) \ declare_toplevel_type(CompactibleFreeListSpace*) \ declare_toplevel_type(CMSCollector*) \ - declare_toplevel_type(FreeChunk*) \ - declare_toplevel_type(BinaryTreeDictionary*) \ - declare_toplevel_type(FreeBlockDictionary*) \ - declare_toplevel_type(FreeList*) \ - declare_toplevel_type(FreeList) \ + declare_toplevel_type(AFLBinaryTreeDictionary*) \ declare_toplevel_type(LinearAllocBlock) \ declare_toplevel_type(FreeBlockDictionary) \ - declare_type(BinaryTreeDictionary, FreeBlockDictionary) + declare_type(AFLBinaryTreeDictionary, FreeBlockDictionary) \ + declare_type(AFLBinaryTreeDictionary, FreeBlockDictionary) \ #define VM_INT_CONSTANTS_CMS(declare_constant) \ declare_constant(Generation::ConcurrentMarkSweep) \ diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp --- a/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/gc_implementation/shared/vmGCOperations.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -191,7 +191,7 @@ class VM_CollectForMetadataAllocation: public VM_GC_Operation { private: MetaWord* _result; - size_t _size; // size of object to be allocated + size_t _size; // size of object to be allocated Metaspace::MetadataType _mdtype; ClassLoaderData* _loader_data; public: diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/allocation.cpp --- a/hotspot/src/share/vm/memory/allocation.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/allocation.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -433,19 +433,18 @@ NOT_PRODUCT(Atomic::inc(&_instance_count);) } -Arena::Arena(Arena *a) : _chunk(a->_chunk), _hwm(a->_hwm), _max(a->_max), _first(a->_first) { - set_size_in_bytes(a->size_in_bytes()); - NOT_PRODUCT(Atomic::inc(&_instance_count);) -} - - Arena *Arena::move_contents(Arena *copy) { copy->destruct_contents(); copy->_chunk = _chunk; copy->_hwm = _hwm; copy->_max = _max; copy->_first = _first; - copy->set_size_in_bytes(size_in_bytes()); + + // workaround rare racing condition, which could double count + // the arena size by native memory tracking + size_t size = size_in_bytes(); + set_size_in_bytes(0); + copy->set_size_in_bytes(size); // Destroy original arena reset(); return copy; // Return Arena with contents @@ -497,6 +496,9 @@ char* end = _first->next() ? _first->top() : _hwm; free_malloced_objects(_first, _first->bottom(), end, _hwm); } + // reset size before chop to avoid a rare racing condition + // that can have total arena memory exceed total chunk memory + set_size_in_bytes(0); _first->chop(); reset(); } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/allocation.hpp --- a/hotspot/src/share/vm/memory/allocation.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/allocation.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -144,8 +144,10 @@ mtNMT = 0x0A00, // memory used by native memory tracking mtChunk = 0x0B00, // chunk that holds content of arenas mtJavaHeap = 0x0C00, // Java heap - mtDontTrack = 0x0D00, // memory we donot or cannot track - mt_number_of_types = 0x000C, // number of memory types + mtClassShared = 0x0D00, // class data sharing + mt_number_of_types = 0x000D, // number of memory types (mtDontTrack + // is not included as validate type) + mtDontTrack = 0x0E00, // memory we do not or cannot track mt_masks = 0x7F00, // object type mask @@ -342,7 +344,6 @@ public: Arena(); Arena(size_t init_size); - Arena(Arena *old); ~Arena(); void destruct_contents(); char* hwm() const { return _hwm; } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/binaryTreeDictionary.cpp --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -25,9 +25,15 @@ #include "precompiled.hpp" #include "gc_implementation/shared/allocationStats.hpp" #include "memory/binaryTreeDictionary.hpp" +#include "memory/freeList.hpp" +#include "memory/freeBlockDictionary.hpp" +#include "memory/metablock.hpp" +#include "memory/metachunk.hpp" #include "runtime/globals.hpp" #include "utilities/ostream.hpp" #ifndef SERIALGC +#include "gc_implementation/concurrentMarkSweep/adaptiveFreeList.hpp" +#include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" #include "gc_implementation/shared/spaceDecorator.hpp" #include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" #endif // SERIALGC @@ -37,15 +43,18 @@ // This is currently used in the Concurrent Mark&Sweep implementation. //////////////////////////////////////////////////////////////////////////////// -template -TreeChunk* TreeChunk::as_TreeChunk(Chunk* fc) { +template class FreeList_t> +size_t TreeChunk::_min_tree_chunk_size = sizeof(TreeChunk)/HeapWordSize; + +template class FreeList_t> +TreeChunk* TreeChunk::as_TreeChunk(Chunk_t* fc) { // Do some assertion checking here. - return (TreeChunk*) fc; + return (TreeChunk*) fc; } -template -void TreeChunk::verify_tree_chunk_list() const { - TreeChunk* nextTC = (TreeChunk*)next(); +template class FreeList_t> +void TreeChunk::verify_tree_chunk_list() const { + TreeChunk* nextTC = (TreeChunk*)next(); if (prev() != NULL) { // interior list node shouldn'r have tree fields guarantee(embedded_list()->parent() == NULL && embedded_list()->left() == NULL && embedded_list()->right() == NULL, "should be clear"); @@ -57,53 +66,113 @@ } } +template class FreeList_t> +TreeList::TreeList() {} -template -TreeList* TreeList::as_TreeList(TreeChunk* tc) { +template class FreeList_t> +TreeList* +TreeList::as_TreeList(TreeChunk* tc) { // This first free chunk in the list will be the tree list. - assert(tc->size() >= BinaryTreeDictionary::min_tree_chunk_size, "Chunk is too small for a TreeChunk"); - TreeList* tl = tc->embedded_list(); + assert((tc->size() >= (TreeChunk::min_size())), + "Chunk is too small for a TreeChunk"); + TreeList* tl = tc->embedded_list(); + tl->initialize(); tc->set_list(tl); -#ifdef ASSERT - tl->set_protecting_lock(NULL); -#endif - tl->set_hint(0); tl->set_size(tc->size()); tl->link_head(tc); tl->link_tail(tc); tl->set_count(1); - tl->init_statistics(true /* split_birth */); - tl->set_parent(NULL); - tl->set_left(NULL); - tl->set_right(NULL); + + return tl; +} + + +template class FreeList_t> +TreeList* +get_chunk(size_t size, enum FreeBlockDictionary::Dither dither) { + FreeBlockDictionary::verify_par_locked(); + Chunk_t* res = get_chunk_from_tree(size, dither); + assert(res == NULL || res->is_free(), + "Should be returning a free chunk"); + assert(dither != FreeBlockDictionary::exactly || + res->size() == size, "Not correct size"); + return res; +} + +template class FreeList_t> +TreeList* +TreeList::as_TreeList(HeapWord* addr, size_t size) { + TreeChunk* tc = (TreeChunk*) addr; + assert((size >= TreeChunk::min_size()), + "Chunk is too small for a TreeChunk"); + // The space will have been mangled initially but + // is not remangled when a Chunk_t is returned to the free list + // (since it is used to maintain the chunk on the free list). + tc->assert_is_mangled(); + tc->set_size(size); + tc->link_prev(NULL); + tc->link_next(NULL); + TreeList* tl = TreeList::as_TreeList(tc); return tl; } -template -TreeList* TreeList::as_TreeList(HeapWord* addr, size_t size) { - TreeChunk* tc = (TreeChunk*) addr; - assert(size >= BinaryTreeDictionary::min_tree_chunk_size, "Chunk is too small for a TreeChunk"); - // The space in the heap will have been mangled initially but - // is not remangled when a free chunk is returned to the free list - // (since it is used to maintain the chunk on the free list). - assert((ZapUnusedHeapArea && - SpaceMangler::is_mangled((HeapWord*) tc->size_addr()) && - SpaceMangler::is_mangled((HeapWord*) tc->prev_addr()) && - SpaceMangler::is_mangled((HeapWord*) tc->next_addr())) || - (tc->size() == 0 && tc->prev() == NULL && tc->next() == NULL), - "Space should be clear or mangled"); - tc->set_size(size); - tc->link_prev(NULL); - tc->link_next(NULL); - TreeList* tl = TreeList::as_TreeList(tc); - return tl; + +#ifndef SERIALGC +// Specialize for AdaptiveFreeList which tries to avoid +// splitting a chunk of a size that is under populated in favor of +// an over populated size. The general get_better_list() just returns +// the current list. +template <> +TreeList* +TreeList::get_better_list( + BinaryTreeDictionary* dictionary) { + // A candidate chunk has been found. If it is already under + // populated, get a chunk associated with the hint for this + // chunk. + + TreeList* curTL = this; + if (surplus() <= 0) { + /* Use the hint to find a size with a surplus, and reset the hint. */ + TreeList* hintTL = this; + while (hintTL->hint() != 0) { + assert(hintTL->hint() > hintTL->size(), + "hint points in the wrong direction"); + hintTL = dictionary->find_list(hintTL->hint()); + assert(curTL != hintTL, "Infinite loop"); + if (hintTL == NULL || + hintTL == curTL /* Should not happen but protect against it */ ) { + // No useful hint. Set the hint to NULL and go on. + curTL->set_hint(0); + break; + } + assert(hintTL->size() > curTL->size(), "hint is inconsistent"); + if (hintTL->surplus() > 0) { + // The hint led to a list that has a surplus. Use it. + // Set the hint for the candidate to an overpopulated + // size. + curTL->set_hint(hintTL->size()); + // Change the candidate. + curTL = hintTL; + break; + } + } + } + return curTL; +} +#endif // SERIALGC + +template class FreeList_t> +TreeList* +TreeList::get_better_list( + BinaryTreeDictionary* dictionary) { + return this; } -template -TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunk* tc) { +template class FreeList_t> +TreeList* TreeList::remove_chunk_replace_if_needed(TreeChunk* tc) { - TreeList* retTL = this; - Chunk* list = head(); + TreeList* retTL = this; + Chunk_t* list = head(); assert(!list || list != list->next(), "Chunk on list twice"); assert(tc != NULL, "Chunk being removed is NULL"); assert(parent() == NULL || this == parent()->left() || @@ -112,13 +181,13 @@ assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); - Chunk* prevFC = tc->prev(); - TreeChunk* nextTC = TreeChunk::as_TreeChunk(tc->next()); + Chunk_t* prevFC = tc->prev(); + TreeChunk* nextTC = TreeChunk::as_TreeChunk(tc->next()); assert(list != NULL, "should have at least the target chunk"); // Is this the first item on the list? if (tc == list) { - // The "getChunk..." functions for a TreeList will not return the + // The "getChunk..." functions for a TreeList will not return the // first chunk in the list unless it is the last chunk in the list // because the first chunk is also acting as the tree node. // When coalescing happens, however, the first chunk in the a tree @@ -127,8 +196,8 @@ // allocated when the sweeper yields (giving up the free list lock) // to allow mutator activity. If this chunk is the first in the // list and is not the last in the list, do the work to copy the - // TreeList from the first chunk to the next chunk and update all - // the TreeList pointers in the chunks in the list. + // TreeList from the first chunk to the next chunk and update all + // the TreeList pointers in the chunks in the list. if (nextTC == NULL) { assert(prevFC == NULL, "Not last chunk in the list"); set_tail(NULL); @@ -141,11 +210,11 @@ // This can be slow for a long list. Consider having // an option that does not allow the first chunk on the // list to be coalesced. - for (TreeChunk* curTC = nextTC; curTC != NULL; - curTC = TreeChunk::as_TreeChunk(curTC->next())) { + for (TreeChunk* curTC = nextTC; curTC != NULL; + curTC = TreeChunk::as_TreeChunk(curTC->next())) { curTC->set_list(retTL); } - // Fix the parent to point to the new TreeList. + // Fix the parent to point to the new TreeList. if (retTL->parent() != NULL) { if (this == retTL->parent()->left()) { retTL->parent()->set_left(retTL); @@ -176,9 +245,9 @@ prevFC->link_after(nextTC); } - // Below this point the embeded TreeList being used for the + // Below this point the embeded TreeList being used for the // tree node may have changed. Don't use "this" - // TreeList*. + // TreeList*. // chunk should still be a free chunk (bit set in _prev) assert(!retTL->head() || retTL->size() == retTL->head()->size(), "Wrong sized chunk in list"); @@ -188,7 +257,7 @@ tc->set_list(NULL); bool prev_found = false; bool next_found = false; - for (Chunk* curFC = retTL->head(); + for (Chunk_t* curFC = retTL->head(); curFC != NULL; curFC = curFC->next()) { assert(curFC != tc, "Chunk is still in list"); if (curFC == prevFC) { @@ -215,8 +284,8 @@ return retTL; } -template -void TreeList::return_chunk_at_tail(TreeChunk* chunk) { +template class FreeList_t> +void TreeList::return_chunk_at_tail(TreeChunk* chunk) { assert(chunk != NULL, "returning NULL chunk"); assert(chunk->list() == this, "list should be set for chunk"); assert(tail() != NULL, "The tree list is embedded in the first chunk"); @@ -225,12 +294,12 @@ assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); - Chunk* fc = tail(); + Chunk_t* fc = tail(); fc->link_after(chunk); link_tail(chunk); assert(!tail() || size() == tail()->size(), "Wrong sized chunk in list"); - increment_count(); + FreeList_t::increment_count(); debug_only(increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); @@ -238,10 +307,10 @@ // Add this chunk at the head of the list. "At the head of the list" // is defined to be after the chunk pointer to by head(). This is -// because the TreeList is embedded in the first TreeChunk in the -// list. See the definition of TreeChunk. -template -void TreeList::return_chunk_at_head(TreeChunk* chunk) { +// because the TreeList is embedded in the first TreeChunk in the +// list. See the definition of TreeChunk. +template class FreeList_t> +void TreeList::return_chunk_at_head(TreeChunk* chunk) { assert(chunk->list() == this, "list should be set for chunk"); assert(head() != NULL, "The tree list is embedded in the first chunk"); assert(chunk != NULL, "returning NULL chunk"); @@ -249,7 +318,7 @@ assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); - Chunk* fc = head()->next(); + Chunk_t* fc = head()->next(); if (fc != NULL) { chunk->link_after(fc); } else { @@ -258,28 +327,38 @@ } head()->link_after(chunk); assert(!head() || size() == head()->size(), "Wrong sized chunk in list"); - increment_count(); + FreeList_t::increment_count(); debug_only(increment_returned_bytes_by(chunk->size()*sizeof(HeapWord));) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); } -template -TreeChunk* TreeList::head_as_TreeChunk() { - assert(head() == NULL || TreeChunk::as_TreeChunk(head())->list() == this, - "Wrong type of chunk?"); - return TreeChunk::as_TreeChunk(head()); +template class FreeList_t> +void TreeChunk::assert_is_mangled() const { + assert((ZapUnusedHeapArea && + SpaceMangler::is_mangled((HeapWord*) Chunk_t::size_addr()) && + SpaceMangler::is_mangled((HeapWord*) Chunk_t::prev_addr()) && + SpaceMangler::is_mangled((HeapWord*) Chunk_t::next_addr())) || + (size() == 0 && prev() == NULL && next() == NULL), + "Space should be clear or mangled"); } -template -TreeChunk* TreeList::first_available() { +template class FreeList_t> +TreeChunk* TreeList::head_as_TreeChunk() { + assert(head() == NULL || (TreeChunk::as_TreeChunk(head())->list() == this), + "Wrong type of chunk?"); + return TreeChunk::as_TreeChunk(head()); +} + +template class FreeList_t> +TreeChunk* TreeList::first_available() { assert(head() != NULL, "The head of the list cannot be NULL"); - Chunk* fc = head()->next(); - TreeChunk* retTC; + Chunk_t* fc = head()->next(); + TreeChunk* retTC; if (fc == NULL) { retTC = head_as_TreeChunk(); } else { - retTC = TreeChunk::as_TreeChunk(fc); + retTC = TreeChunk::as_TreeChunk(fc); } assert(retTC->list() == this, "Wrong type of chunk."); return retTC; @@ -288,41 +367,32 @@ // Returns the block with the largest heap address amongst // those in the list for this size; potentially slow and expensive, // use with caution! -template -TreeChunk* TreeList::largest_address() { +template class FreeList_t> +TreeChunk* TreeList::largest_address() { assert(head() != NULL, "The head of the list cannot be NULL"); - Chunk* fc = head()->next(); - TreeChunk* retTC; + Chunk_t* fc = head()->next(); + TreeChunk* retTC; if (fc == NULL) { retTC = head_as_TreeChunk(); } else { // walk down the list and return the one with the highest // heap address among chunks of this size. - Chunk* last = fc; + Chunk_t* last = fc; while (fc->next() != NULL) { if ((HeapWord*)last < (HeapWord*)fc) { last = fc; } fc = fc->next(); } - retTC = TreeChunk::as_TreeChunk(last); + retTC = TreeChunk::as_TreeChunk(last); } assert(retTC->list() == this, "Wrong type of chunk."); return retTC; } -template -BinaryTreeDictionary::BinaryTreeDictionary(bool adaptive_freelists, bool splay) : - _splay(splay), _adaptive_freelists(adaptive_freelists), - _total_size(0), _total_free_blocks(0), _root(0) {} - -template -BinaryTreeDictionary::BinaryTreeDictionary(MemRegion mr, - bool adaptive_freelists, - bool splay): - _adaptive_freelists(adaptive_freelists), _splay(splay) -{ - assert(mr.word_size() >= BinaryTreeDictionary::min_tree_chunk_size, "minimum chunk size"); +template class FreeList_t> +BinaryTreeDictionary::BinaryTreeDictionary(MemRegion mr) { + assert((mr.byte_size() > min_size()), "minimum chunk size"); reset(mr); assert(root()->left() == NULL, "reset check failed"); @@ -333,52 +403,48 @@ assert(total_free_blocks() == 1, "reset check failed"); } -template -void BinaryTreeDictionary::inc_total_size(size_t inc) { +template class FreeList_t> +void BinaryTreeDictionary::inc_total_size(size_t inc) { _total_size = _total_size + inc; } -template -void BinaryTreeDictionary::dec_total_size(size_t dec) { +template class FreeList_t> +void BinaryTreeDictionary::dec_total_size(size_t dec) { _total_size = _total_size - dec; } -template -void BinaryTreeDictionary::reset(MemRegion mr) { - assert(mr.word_size() >= BinaryTreeDictionary::min_tree_chunk_size, "minimum chunk size"); - set_root(TreeList::as_TreeList(mr.start(), mr.word_size())); +template class FreeList_t> +void BinaryTreeDictionary::reset(MemRegion mr) { + assert((mr.byte_size() > min_size()), "minimum chunk size"); + set_root(TreeList::as_TreeList(mr.start(), mr.word_size())); set_total_size(mr.word_size()); set_total_free_blocks(1); } -template -void BinaryTreeDictionary::reset(HeapWord* addr, size_t byte_size) { +template class FreeList_t> +void BinaryTreeDictionary::reset(HeapWord* addr, size_t byte_size) { MemRegion mr(addr, heap_word_size(byte_size)); reset(mr); } -template -void BinaryTreeDictionary::reset() { +template class FreeList_t> +void BinaryTreeDictionary::reset() { set_root(NULL); set_total_size(0); set_total_free_blocks(0); } // Get a free block of size at least size from tree, or NULL. -// If a splay step is requested, the removal algorithm (only) incorporates -// a splay step as follows: -// . the search proceeds down the tree looking for a possible -// match. At the (closest) matching location, an appropriate splay step is applied -// (zig, zig-zig or zig-zag). A chunk of the appropriate size is then returned -// if available, and if it's the last chunk, the node is deleted. A deteleted -// node is replaced in place by its tree successor. -template -TreeChunk* -BinaryTreeDictionary::get_chunk_from_tree(size_t size, enum FreeBlockDictionary::Dither dither, bool splay) +template class FreeList_t> +TreeChunk* +BinaryTreeDictionary::get_chunk_from_tree( + size_t size, + enum FreeBlockDictionary::Dither dither) { - TreeList *curTL, *prevTL; - TreeChunk* retTC = NULL; - assert(size >= BinaryTreeDictionary::min_tree_chunk_size, "minimum chunk size"); + TreeList *curTL, *prevTL; + TreeChunk* retTC = NULL; + + assert((size >= min_size()), "minimum chunk size"); if (FLSVerifyDictionary) { verify_tree(); } @@ -398,7 +464,7 @@ } if (curTL == NULL) { // couldn't find exact match - if (dither == FreeBlockDictionary::exactly) return NULL; + if (dither == FreeBlockDictionary::exactly) return NULL; // try and find the next larger size by walking back up the search path for (curTL = prevTL; curTL != NULL;) { @@ -410,46 +476,9 @@ } if (curTL != NULL) { assert(curTL->size() >= size, "size inconsistency"); - if (adaptive_freelists()) { - // A candidate chunk has been found. If it is already under - // populated, get a chunk associated with the hint for this - // chunk. - if (curTL->surplus() <= 0) { - /* Use the hint to find a size with a surplus, and reset the hint. */ - TreeList* hintTL = curTL; - while (hintTL->hint() != 0) { - assert(hintTL->hint() == 0 || hintTL->hint() > hintTL->size(), - "hint points in the wrong direction"); - hintTL = find_list(hintTL->hint()); - assert(curTL != hintTL, "Infinite loop"); - if (hintTL == NULL || - hintTL == curTL /* Should not happen but protect against it */ ) { - // No useful hint. Set the hint to NULL and go on. - curTL->set_hint(0); - break; - } - assert(hintTL->size() > size, "hint is inconsistent"); - if (hintTL->surplus() > 0) { - // The hint led to a list that has a surplus. Use it. - // Set the hint for the candidate to an overpopulated - // size. - curTL->set_hint(hintTL->size()); - // Change the candidate. - curTL = hintTL; - break; - } - // The evm code reset the hint of the candidate as - // at an interim point. Why? Seems like this leaves - // the hint pointing to a list that didn't work. - // curTL->set_hint(hintTL->size()); - } - } - } - // don't waste time splaying if chunk's singleton - if (splay && curTL->head()->next() != NULL) { - semi_splay_step(curTL); - } + curTL = curTL->get_better_list(this); + retTC = curTL->first_available(); assert((retTC != NULL) && (curTL->count() > 0), "A list in the binary tree should not be NULL"); @@ -465,9 +494,9 @@ return retTC; } -template -TreeList* BinaryTreeDictionary::find_list(size_t size) const { - TreeList* curTL; +template class FreeList_t> +TreeList* BinaryTreeDictionary::find_list(size_t size) const { + TreeList* curTL; for (curTL = root(); curTL != NULL;) { if (curTL->size() == size) { // exact match break; @@ -484,10 +513,10 @@ } -template -bool BinaryTreeDictionary::verify_chunk_in_free_list(Chunk* tc) const { +template class FreeList_t> +bool BinaryTreeDictionary::verify_chunk_in_free_list(Chunk_t* tc) const { size_t size = tc->size(); - TreeList* tl = find_list(size); + TreeList* tl = find_list(size); if (tl == NULL) { return false; } else { @@ -495,9 +524,9 @@ } } -template -Chunk* BinaryTreeDictionary::find_largest_dict() const { - TreeList *curTL = root(); +template class FreeList_t> +Chunk_t* BinaryTreeDictionary::find_largest_dict() const { + TreeList *curTL = root(); if (curTL != NULL) { while(curTL->right() != NULL) curTL = curTL->right(); return curTL->largest_address(); @@ -510,15 +539,15 @@ // chunk in a list on a tree node, just unlink it. // If it is the last chunk in the list (the next link is NULL), // remove the node and repair the tree. -template -TreeChunk* -BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { +template class FreeList_t> +TreeChunk* +BinaryTreeDictionary::remove_chunk_from_tree(TreeChunk* tc) { assert(tc != NULL, "Should not call with a NULL chunk"); assert(tc->is_free(), "Header is not marked correctly"); - TreeList *newTL, *parentTL; - TreeChunk* retTC; - TreeList* tl = tc->list(); + TreeList *newTL, *parentTL; + TreeChunk* retTC; + TreeList* tl = tc->list(); debug_only( bool removing_only_chunk = false; if (tl == _root) { @@ -538,8 +567,8 @@ retTC = tc; // Removing this chunk can have the side effect of changing the node - // (TreeList*) in the tree. If the node is the root, update it. - TreeList* replacementTL = tl->remove_chunk_replace_if_needed(tc); + // (TreeList*) in the tree. If the node is the root, update it. + TreeList* replacementTL = tl->remove_chunk_replace_if_needed(tc); assert(tc->is_free(), "Chunk should still be free"); assert(replacementTL->parent() == NULL || replacementTL == replacementTL->parent()->left() || @@ -549,17 +578,18 @@ assert(replacementTL->parent() == NULL, "Incorrectly replacing root"); set_root(replacementTL); } - debug_only( +#ifdef ASSERT if (tl != replacementTL) { assert(replacementTL->head() != NULL, "If the tree list was replaced, it should not be a NULL list"); - TreeList* rhl = replacementTL->head_as_TreeChunk()->list(); - TreeList* rtl = TreeChunk::as_TreeChunk(replacementTL->tail())->list(); + TreeList* rhl = replacementTL->head_as_TreeChunk()->list(); + TreeList* rtl = + TreeChunk::as_TreeChunk(replacementTL->tail())->list(); assert(rhl == replacementTL, "Broken head"); assert(rtl == replacementTL, "Broken tail"); assert(replacementTL->size() == tc->size(), "Broken size"); } - ) +#endif // Does the tree need to be repaired? if (replacementTL->count() == 0) { @@ -574,7 +604,7 @@ } else if (replacementTL->right() == NULL) { // right is NULL newTL = replacementTL->left(); - debug_only(replacementTL->clearLeft();) + debug_only(replacementTL->clear_left();) } else { // we have both children, so, by patriarchal convention, // my replacement is least node in right sub-tree complicated_splice = true; @@ -623,7 +653,7 @@ newTL->set_right(replacementTL->right()); debug_only( replacementTL->clear_right(); - replacementTL->clearLeft(); + replacementTL->clear_left(); ) } assert(replacementTL->right() == NULL && @@ -644,21 +674,21 @@ verify_tree(); } assert(!removing_only_chunk || _root == NULL, "root should be NULL"); - return TreeChunk::as_TreeChunk(retTC); + return TreeChunk::as_TreeChunk(retTC); } // Remove the leftmost node (lm) in the tree and return it. // If lm has a right child, link it to the left node of // the parent of lm. -template -TreeList* BinaryTreeDictionary::remove_tree_minimum(TreeList* tl) { +template class FreeList_t> +TreeList* BinaryTreeDictionary::remove_tree_minimum(TreeList* tl) { assert(tl != NULL && tl->parent() != NULL, "really need a proper sub-tree"); // locate the subtree minimum by walking down left branches - TreeList* curTL = tl; + TreeList* curTL = tl; for (; curTL->left() != NULL; curTL = curTL->left()); // obviously curTL now has at most one child, a right child if (curTL != root()) { // Should this test just be removed? - TreeList* parentTL = curTL->parent(); + TreeList* parentTL = curTL->parent(); if (parentTL->left() == curTL) { // curTL is a left child parentTL->set_left(curTL->right()); } else { @@ -685,31 +715,14 @@ return curTL; } -// Based on a simplification of the algorithm by Sleator and Tarjan (JACM 1985). -// The simplifications are the following: -// . we splay only when we delete (not when we insert) -// . we apply a single spay step per deletion/access -// By doing such partial splaying, we reduce the amount of restructuring, -// while getting a reasonably efficient search tree (we think). -// [Measurements will be needed to (in)validate this expectation.] - -template -void BinaryTreeDictionary::semi_splay_step(TreeList* tc) { - // apply a semi-splay step at the given node: - // . if root, norting needs to be done - // . if child of root, splay once - // . else zig-zig or sig-zag depending on path from grandparent - if (root() == tc) return; - warning("*** Splaying not yet implemented; " - "tree operations may be inefficient ***"); -} - -template -void BinaryTreeDictionary::insert_chunk_in_tree(Chunk* fc) { - TreeList *curTL, *prevTL; +template class FreeList_t> +void BinaryTreeDictionary::insert_chunk_in_tree(Chunk_t* fc) { + TreeList *curTL, *prevTL; size_t size = fc->size(); - assert(size >= BinaryTreeDictionary::min_tree_chunk_size, "too small to be a TreeList"); + assert((size >= min_size()), + err_msg(SIZE_FORMAT " is too small to be a TreeChunk " SIZE_FORMAT, + size, min_size())); if (FLSVerifyDictionary) { verify_tree(); } @@ -729,9 +742,9 @@ curTL = curTL->right(); } } - TreeChunk* tc = TreeChunk::as_TreeChunk(fc); + TreeChunk* tc = TreeChunk::as_TreeChunk(fc); // This chunk is being returned to the binary tree. Its embedded - // TreeList should be unused at this point. + // TreeList should be unused at this point. tc->initialize(); if (curTL != NULL) { // exact match tc->set_list(curTL); @@ -739,8 +752,8 @@ } else { // need a new node in tree tc->clear_next(); tc->link_prev(NULL); - TreeList* newTL = TreeList::as_TreeList(tc); - assert(((TreeChunk*)tc)->list() == newTL, + TreeList* newTL = TreeList::as_TreeList(tc); + assert(((TreeChunk*)tc)->list() == newTL, "List was not initialized correctly"); if (prevTL == NULL) { // we are the only tree node assert(root() == NULL, "control point invariant"); @@ -768,30 +781,30 @@ } } -template -size_t BinaryTreeDictionary::max_chunk_size() const { - FreeBlockDictionary::verify_par_locked(); - TreeList* tc = root(); +template class FreeList_t> +size_t BinaryTreeDictionary::max_chunk_size() const { + FreeBlockDictionary::verify_par_locked(); + TreeList* tc = root(); if (tc == NULL) return 0; for (; tc->right() != NULL; tc = tc->right()); return tc->size(); } -template -size_t BinaryTreeDictionary::total_list_length(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_list_length(TreeList* tl) const { size_t res; res = tl->count(); #ifdef ASSERT size_t cnt; - Chunk* tc = tl->head(); + Chunk_t* tc = tl->head(); for (cnt = 0; tc != NULL; tc = tc->next(), cnt++); assert(res == cnt, "The count is not being maintained correctly"); #endif return res; } -template -size_t BinaryTreeDictionary::total_size_in_tree(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_size_in_tree(TreeList* tl) const { if (tl == NULL) return 0; return (tl->size() * total_list_length(tl)) + @@ -799,8 +812,8 @@ total_size_in_tree(tl->right()); } -template -double BinaryTreeDictionary::sum_of_squared_block_sizes(TreeList* const tl) const { +template class FreeList_t> +double BinaryTreeDictionary::sum_of_squared_block_sizes(TreeList* const tl) const { if (tl == NULL) { return 0.0; } @@ -811,8 +824,8 @@ return curr; } -template -size_t BinaryTreeDictionary::total_free_blocks_in_tree(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_free_blocks_in_tree(TreeList* tl) const { if (tl == NULL) return 0; return total_list_length(tl) + @@ -820,28 +833,28 @@ total_free_blocks_in_tree(tl->right()); } -template -size_t BinaryTreeDictionary::num_free_blocks() const { +template class FreeList_t> +size_t BinaryTreeDictionary::num_free_blocks() const { assert(total_free_blocks_in_tree(root()) == total_free_blocks(), "_total_free_blocks inconsistency"); return total_free_blocks(); } -template -size_t BinaryTreeDictionary::tree_height_helper(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::tree_height_helper(TreeList* tl) const { if (tl == NULL) return 0; return 1 + MAX2(tree_height_helper(tl->left()), tree_height_helper(tl->right())); } -template -size_t BinaryTreeDictionary::treeHeight() const { +template class FreeList_t> +size_t BinaryTreeDictionary::tree_height() const { return tree_height_helper(root()); } -template -size_t BinaryTreeDictionary::total_nodes_helper(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_nodes_helper(TreeList* tl) const { if (tl == NULL) { return 0; } @@ -849,14 +862,18 @@ total_nodes_helper(tl->right()); } -template -size_t BinaryTreeDictionary::total_nodes_in_tree(TreeList* tl) const { +template class FreeList_t> +size_t BinaryTreeDictionary::total_nodes_in_tree(TreeList* tl) const { return total_nodes_helper(root()); } -template -void BinaryTreeDictionary::dict_census_udpate(size_t size, bool split, bool birth){ - TreeList* nd = find_list(size); +template class FreeList_t> +void BinaryTreeDictionary::dict_census_update(size_t size, bool split, bool birth){} + +#ifndef SERIALGC +template <> +void BinaryTreeDictionary::dict_census_update(size_t size, bool split, bool birth){ + TreeList* nd = find_list(size); if (nd) { if (split) { if (birth) { @@ -882,16 +899,26 @@ // This is a birth associated with a LinAB. The chunk // for the LinAB is not in the dictionary. } +#endif // SERIALGC -template -bool BinaryTreeDictionary::coal_dict_over_populated(size_t size) { +template class FreeList_t> +bool BinaryTreeDictionary::coal_dict_over_populated(size_t size) { + // For the general type of freelists, encourage coalescing by + // returning true. + return true; +} + +#ifndef SERIALGC +template <> +bool BinaryTreeDictionary::coal_dict_over_populated(size_t size) { if (FLSAlwaysCoalesceLarge) return true; - TreeList* list_of_size = find_list(size); + TreeList* list_of_size = find_list(size); // None of requested size implies overpopulated. return list_of_size == NULL || list_of_size->coal_desired() <= 0 || list_of_size->count() > list_of_size->coal_desired(); } +#endif // SERIALGC // Closures for walking the binary tree. // do_list() walks the free list in a node applying the closure @@ -899,19 +926,18 @@ // do_tree() walks the nodes in the binary tree applying do_list() // to each list at each node. -template +template class FreeList_t> class TreeCensusClosure : public StackObj { protected: - virtual void do_list(FreeList* fl) = 0; + virtual void do_list(FreeList_t* fl) = 0; public: - virtual void do_tree(TreeList* tl) = 0; + virtual void do_tree(TreeList* tl) = 0; }; -template -class AscendTreeCensusClosure : public TreeCensusClosure { - using TreeCensusClosure::do_list; +template class FreeList_t> +class AscendTreeCensusClosure : public TreeCensusClosure { public: - void do_tree(TreeList* tl) { + void do_tree(TreeList* tl) { if (tl != NULL) { do_tree(tl->left()); do_list(tl); @@ -920,11 +946,10 @@ } }; -template -class DescendTreeCensusClosure : public TreeCensusClosure { - using TreeCensusClosure::do_list; +template class FreeList_t> +class DescendTreeCensusClosure : public TreeCensusClosure { public: - void do_tree(TreeList* tl) { + void do_tree(TreeList* tl) { if (tl != NULL) { do_tree(tl->right()); do_list(tl); @@ -935,8 +960,8 @@ // For each list in the tree, calculate the desired, desired // coalesce, count before sweep, and surplus before sweep. -template -class BeginSweepClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class BeginSweepClosure : public AscendTreeCensusClosure { double _percentage; float _inter_sweep_current; float _inter_sweep_estimate; @@ -951,32 +976,36 @@ _inter_sweep_estimate(inter_sweep_estimate), _intra_sweep_estimate(intra_sweep_estimate) { } - void do_list(FreeList* fl) { + void do_list(FreeList* fl) {} + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { double coalSurplusPercent = _percentage; fl->compute_desired(_inter_sweep_current, _inter_sweep_estimate, _intra_sweep_estimate); fl->set_coal_desired((ssize_t)((double)fl->desired() * coalSurplusPercent)); fl->set_before_sweep(fl->count()); fl->set_bfr_surp(fl->surplus()); } +#endif // SERIALGC }; // Used to search the tree until a condition is met. // Similar to TreeCensusClosure but searches the // tree and returns promptly when found. -template +template class FreeList_t> class TreeSearchClosure : public StackObj { protected: - virtual bool do_list(FreeList* fl) = 0; + virtual bool do_list(FreeList_t* fl) = 0; public: - virtual bool do_tree(TreeList* tl) = 0; + virtual bool do_tree(TreeList* tl) = 0; }; #if 0 // Don't need this yet but here for symmetry. -template -class AscendTreeSearchClosure : public TreeSearchClosure { +template class FreeList_t> +class AscendTreeSearchClosure : public TreeSearchClosure { public: - bool do_tree(TreeList* tl) { + bool do_tree(TreeList* tl) { if (tl != NULL) { if (do_tree(tl->left())) return true; if (do_list(tl)) return true; @@ -987,11 +1016,10 @@ }; #endif -template -class DescendTreeSearchClosure : public TreeSearchClosure { - using TreeSearchClosure::do_list; +template class FreeList_t> +class DescendTreeSearchClosure : public TreeSearchClosure { public: - bool do_tree(TreeList* tl) { + bool do_tree(TreeList* tl) { if (tl != NULL) { if (do_tree(tl->right())) return true; if (do_list(tl)) return true; @@ -1003,17 +1031,17 @@ // Searches the tree for a chunk that ends at the // specified address. -template -class EndTreeSearchClosure : public DescendTreeSearchClosure { +template class FreeList_t> +class EndTreeSearchClosure : public DescendTreeSearchClosure { HeapWord* _target; - Chunk* _found; + Chunk_t* _found; public: EndTreeSearchClosure(HeapWord* target) : _target(target), _found(NULL) {} - bool do_list(FreeList* fl) { - Chunk* item = fl->head(); + bool do_list(FreeList_t* fl) { + Chunk_t* item = fl->head(); while (item != NULL) { - if (item->end() == _target) { + if (item->end() == (uintptr_t*) _target) { _found = item; return true; } @@ -1021,22 +1049,22 @@ } return false; } - Chunk* found() { return _found; } + Chunk_t* found() { return _found; } }; -template -Chunk* BinaryTreeDictionary::find_chunk_ends_at(HeapWord* target) const { - EndTreeSearchClosure etsc(target); +template class FreeList_t> +Chunk_t* BinaryTreeDictionary::find_chunk_ends_at(HeapWord* target) const { + EndTreeSearchClosure etsc(target); bool found_target = etsc.do_tree(root()); assert(found_target || etsc.found() == NULL, "Consistency check"); assert(!found_target || etsc.found() != NULL, "Consistency check"); return etsc.found(); } -template -void BinaryTreeDictionary::begin_sweep_dict_census(double coalSurplusPercent, +template class FreeList_t> +void BinaryTreeDictionary::begin_sweep_dict_census(double coalSurplusPercent, float inter_sweep_current, float inter_sweep_estimate, float intra_sweep_estimate) { - BeginSweepClosure bsc(coalSurplusPercent, inter_sweep_current, + BeginSweepClosure bsc(coalSurplusPercent, inter_sweep_current, inter_sweep_estimate, intra_sweep_estimate); bsc.do_tree(root()); @@ -1045,84 +1073,91 @@ // Closures and methods for calculating total bytes returned to the // free lists in the tree. #ifndef PRODUCT -template -class InitializeDictReturnedBytesClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class InitializeDictReturnedBytesClosure : public AscendTreeCensusClosure { public: - void do_list(FreeList* fl) { + void do_list(FreeList_t* fl) { fl->set_returned_bytes(0); } }; -template -void BinaryTreeDictionary::initialize_dict_returned_bytes() { - InitializeDictReturnedBytesClosure idrb; +template class FreeList_t> +void BinaryTreeDictionary::initialize_dict_returned_bytes() { + InitializeDictReturnedBytesClosure idrb; idrb.do_tree(root()); } -template -class ReturnedBytesClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class ReturnedBytesClosure : public AscendTreeCensusClosure { size_t _dict_returned_bytes; public: ReturnedBytesClosure() { _dict_returned_bytes = 0; } - void do_list(FreeList* fl) { + void do_list(FreeList_t* fl) { _dict_returned_bytes += fl->returned_bytes(); } size_t dict_returned_bytes() { return _dict_returned_bytes; } }; -template -size_t BinaryTreeDictionary::sum_dict_returned_bytes() { - ReturnedBytesClosure rbc; +template class FreeList_t> +size_t BinaryTreeDictionary::sum_dict_returned_bytes() { + ReturnedBytesClosure rbc; rbc.do_tree(root()); return rbc.dict_returned_bytes(); } // Count the number of entries in the tree. -template -class treeCountClosure : public DescendTreeCensusClosure { +template class FreeList_t> +class treeCountClosure : public DescendTreeCensusClosure { public: uint count; treeCountClosure(uint c) { count = c; } - void do_list(FreeList* fl) { + void do_list(FreeList_t* fl) { count++; } }; -template -size_t BinaryTreeDictionary::total_count() { - treeCountClosure ctc(0); +template class FreeList_t> +size_t BinaryTreeDictionary::total_count() { + treeCountClosure ctc(0); ctc.do_tree(root()); return ctc.count; } #endif // PRODUCT // Calculate surpluses for the lists in the tree. -template -class setTreeSurplusClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class setTreeSurplusClosure : public AscendTreeCensusClosure { double percentage; public: setTreeSurplusClosure(double v) { percentage = v; } - void do_list(FreeList* fl) { + void do_list(FreeList* fl) {} + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { double splitSurplusPercent = percentage; fl->set_surplus(fl->count() - (ssize_t)((double)fl->desired() * splitSurplusPercent)); } +#endif // SERIALGC }; -template -void BinaryTreeDictionary::set_tree_surplus(double splitSurplusPercent) { - setTreeSurplusClosure sts(splitSurplusPercent); +template class FreeList_t> +void BinaryTreeDictionary::set_tree_surplus(double splitSurplusPercent) { + setTreeSurplusClosure sts(splitSurplusPercent); sts.do_tree(root()); } // Set hints for the lists in the tree. -template -class setTreeHintsClosure : public DescendTreeCensusClosure { +template class FreeList_t> +class setTreeHintsClosure : public DescendTreeCensusClosure { size_t hint; public: setTreeHintsClosure(size_t v) { hint = v; } - void do_list(FreeList* fl) { + void do_list(FreeList* fl) {} + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { fl->set_hint(hint); assert(fl->hint() == 0 || fl->hint() > fl->size(), "Current hint is inconsistent"); @@ -1130,35 +1165,40 @@ hint = fl->size(); } } +#endif // SERIALGC }; -template -void BinaryTreeDictionary::set_tree_hints(void) { - setTreeHintsClosure sth(0); +template class FreeList_t> +void BinaryTreeDictionary::set_tree_hints(void) { + setTreeHintsClosure sth(0); sth.do_tree(root()); } // Save count before previous sweep and splits and coalesces. -template -class clearTreeCensusClosure : public AscendTreeCensusClosure { - void do_list(FreeList* fl) { +template class FreeList_t> +class clearTreeCensusClosure : public AscendTreeCensusClosure { + void do_list(FreeList* fl) {} + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { fl->set_prev_sweep(fl->count()); fl->set_coal_births(0); fl->set_coal_deaths(0); fl->set_split_births(0); fl->set_split_deaths(0); } +#endif // SERIALGC }; -template -void BinaryTreeDictionary::clear_tree_census(void) { - clearTreeCensusClosure ctc; +template class FreeList_t> +void BinaryTreeDictionary::clear_tree_census(void) { + clearTreeCensusClosure ctc; ctc.do_tree(root()); } // Do reporting and post sweep clean up. -template -void BinaryTreeDictionary::end_sweep_dict_census(double splitSurplusPercent) { +template class FreeList_t> +void BinaryTreeDictionary::end_sweep_dict_census(double splitSurplusPercent) { // Does walking the tree 3 times hurt? set_tree_surplus(splitSurplusPercent); set_tree_hints(); @@ -1169,9 +1209,9 @@ } // Print summary statistics -template -void BinaryTreeDictionary::report_statistics() const { - FreeBlockDictionary::verify_par_locked(); +template class FreeList_t> +void BinaryTreeDictionary::report_statistics() const { + FreeBlockDictionary::verify_par_locked(); gclog_or_tty->print("Statistics for BinaryTreeDictionary:\n" "------------------------------------\n"); size_t total_size = total_chunk_size(debug_only(NULL)); @@ -1182,36 +1222,47 @@ if (free_blocks > 0) { gclog_or_tty->print("Av. Block Size: %d\n", total_size/free_blocks); } - gclog_or_tty->print("Tree Height: %d\n", treeHeight()); + gclog_or_tty->print("Tree Height: %d\n", tree_height()); } // Print census information - counts, births, deaths, etc. // for each list in the tree. Also print some summary // information. -template -class PrintTreeCensusClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class PrintTreeCensusClosure : public AscendTreeCensusClosure { int _print_line; size_t _total_free; - FreeList _total; + FreeList_t _total; public: PrintTreeCensusClosure() { _print_line = 0; _total_free = 0; } - FreeList* total() { return &_total; } + FreeList_t* total() { return &_total; } size_t total_free() { return _total_free; } - void do_list(FreeList* fl) { + void do_list(FreeList* fl) { if (++_print_line >= 40) { - FreeList::print_labels_on(gclog_or_tty, "size"); + FreeList_t::print_labels_on(gclog_or_tty, "size"); _print_line = 0; } fl->print_on(gclog_or_tty); _total_free += fl->count() * fl->size() ; total()->set_count( total()->count() + fl->count() ); - total()->set_bfr_surp( total()->bfr_surp() + fl->bfr_surp() ); + } + +#ifndef SERIALGC + void do_list(AdaptiveFreeList* fl) { + if (++_print_line >= 40) { + FreeList_t::print_labels_on(gclog_or_tty, "size"); + _print_line = 0; + } + fl->print_on(gclog_or_tty); + _total_free += fl->count() * fl->size() ; + total()->set_count( total()->count() + fl->count() ); + total()->set_bfr_surp( total()->bfr_surp() + fl->bfr_surp() ); total()->set_surplus( total()->split_deaths() + fl->surplus() ); - total()->set_desired( total()->desired() + fl->desired() ); + total()->set_desired( total()->desired() + fl->desired() ); total()->set_prev_sweep( total()->prev_sweep() + fl->prev_sweep() ); total()->set_before_sweep(total()->before_sweep() + fl->before_sweep()); total()->set_coal_births( total()->coal_births() + fl->coal_births() ); @@ -1219,18 +1270,32 @@ total()->set_split_births(total()->split_births() + fl->split_births()); total()->set_split_deaths(total()->split_deaths() + fl->split_deaths()); } +#endif // SERIALGC }; -template -void BinaryTreeDictionary::print_dict_census(void) const { +template class FreeList_t> +void BinaryTreeDictionary::print_dict_census(void) const { gclog_or_tty->print("\nBinaryTree\n"); - FreeList::print_labels_on(gclog_or_tty, "size"); - PrintTreeCensusClosure ptc; + FreeList_t::print_labels_on(gclog_or_tty, "size"); + PrintTreeCensusClosure ptc; ptc.do_tree(root()); - FreeList* total = ptc.total(); - FreeList::print_labels_on(gclog_or_tty, " "); + FreeList_t* total = ptc.total(); + FreeList_t::print_labels_on(gclog_or_tty, " "); +} + +#ifndef SERIALGC +template <> +void BinaryTreeDictionary::print_dict_census(void) const { + + gclog_or_tty->print("\nBinaryTree\n"); + AdaptiveFreeList::print_labels_on(gclog_or_tty, "size"); + PrintTreeCensusClosure ptc; + ptc.do_tree(root()); + + AdaptiveFreeList* total = ptc.total(); + AdaptiveFreeList::print_labels_on(gclog_or_tty, " "); total->print_on(gclog_or_tty, "TOTAL\t"); gclog_or_tty->print( "total_free(words): " SIZE_FORMAT_W(16) @@ -1242,9 +1307,10 @@ (double)(total->desired() - total->count()) /(total->desired() != 0 ? (double)total->desired() : 1.0)); } +#endif // SERIALGC -template -class PrintFreeListsClosure : public AscendTreeCensusClosure { +template class FreeList_t> +class PrintFreeListsClosure : public AscendTreeCensusClosure { outputStream* _st; int _print_line; @@ -1253,14 +1319,14 @@ _st = st; _print_line = 0; } - void do_list(FreeList* fl) { + void do_list(FreeList_t* fl) { if (++_print_line >= 40) { - FreeList::print_labels_on(_st, "size"); + FreeList_t::print_labels_on(_st, "size"); _print_line = 0; } fl->print_on(gclog_or_tty); size_t sz = fl->size(); - for (Chunk* fc = fl->head(); fc != NULL; + for (Chunk_t* fc = fl->head(); fc != NULL; fc = fc->next()) { _st->print_cr("\t[" PTR_FORMAT "," PTR_FORMAT ") %s", fc, (HeapWord*)fc + sz, @@ -1269,11 +1335,11 @@ } }; -template -void BinaryTreeDictionary::print_free_lists(outputStream* st) const { +template class FreeList_t> +void BinaryTreeDictionary::print_free_lists(outputStream* st) const { - FreeList::print_labels_on(st, "size"); - PrintFreeListsClosure pflc(st); + FreeList_t::print_labels_on(st, "size"); + PrintFreeListsClosure pflc(st); pflc.do_tree(root()); } @@ -1281,18 +1347,18 @@ // . _root has no parent // . parent and child point to each other // . each node's key correctly related to that of its child(ren) -template -void BinaryTreeDictionary::verify_tree() const { +template class FreeList_t> +void BinaryTreeDictionary::verify_tree() const { guarantee(root() == NULL || total_free_blocks() == 0 || total_size() != 0, "_total_size should't be 0?"); guarantee(root() == NULL || root()->parent() == NULL, "_root shouldn't have parent"); verify_tree_helper(root()); } -template -size_t BinaryTreeDictionary::verify_prev_free_ptrs(TreeList* tl) { +template class FreeList_t> +size_t BinaryTreeDictionary::verify_prev_free_ptrs(TreeList* tl) { size_t ct = 0; - for (Chunk* curFC = tl->head(); curFC != NULL; curFC = curFC->next()) { + for (Chunk_t* curFC = tl->head(); curFC != NULL; curFC = curFC->next()) { ct++; assert(curFC->prev() == NULL || curFC->prev()->is_free(), "Chunk should be free"); @@ -1303,8 +1369,8 @@ // Note: this helper is recursive rather than iterative, so use with // caution on very deep trees; and watch out for stack overflow errors; // In general, to be used only for debugging. -template -void BinaryTreeDictionary::verify_tree_helper(TreeList* tl) const { +template class FreeList_t> +void BinaryTreeDictionary::verify_tree_helper(TreeList* tl) const { if (tl == NULL) return; guarantee(tl->size() != 0, "A list must has a size"); @@ -1332,15 +1398,25 @@ verify_tree_helper(tl->right()); } -template -void BinaryTreeDictionary::verify() const { +template class FreeList_t> +void BinaryTreeDictionary::verify() const { verify_tree(); guarantee(total_size() == total_size_in_tree(root()), "Total Size inconsistency"); } +template class TreeList; +template class BinaryTreeDictionary; +template class TreeChunk; + +template class TreeList; +template class BinaryTreeDictionary; +template class TreeChunk; + + #ifndef SERIALGC // Explicitly instantiate these types for FreeChunk. -template class BinaryTreeDictionary; -template class TreeChunk; -template class TreeList; +template class TreeList; +template class BinaryTreeDictionary; +template class TreeChunk; + #endif // SERIALGC diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/binaryTreeDictionary.hpp --- a/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/binaryTreeDictionary.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -37,77 +37,78 @@ // A TreeList is a FreeList which can be used to maintain a // binary tree of free lists. -template class TreeChunk; -template class BinaryTreeDictionary; -template class AscendTreeCensusClosure; -template class DescendTreeCensusClosure; -template class DescendTreeSearchClosure; +template class FreeList_t> class TreeChunk; +template class FreeList_t> class BinaryTreeDictionary; +template class FreeList_t> class AscendTreeCensusClosure; +template class FreeList_t> class DescendTreeCensusClosure; +template class FreeList_t> class DescendTreeSearchClosure; -template -class TreeList: public FreeList { - friend class TreeChunk; - friend class BinaryTreeDictionary; - friend class AscendTreeCensusClosure; - friend class DescendTreeCensusClosure; - friend class DescendTreeSearchClosure; +template class FreeList_t> +class TreeList : public FreeList_t { + friend class TreeChunk; + friend class BinaryTreeDictionary; + friend class AscendTreeCensusClosure; + friend class DescendTreeCensusClosure; + friend class DescendTreeSearchClosure; - TreeList* _parent; - TreeList* _left; - TreeList* _right; + TreeList* _parent; + TreeList* _left; + TreeList* _right; protected: - TreeList* parent() const { return _parent; } - TreeList* left() const { return _left; } - TreeList* right() const { return _right; } - // Explicitly import these names into our namespace to fix name lookup with templates - using FreeList::head; - using FreeList::set_head; + TreeList* parent() const { return _parent; } + TreeList* left() const { return _left; } + TreeList* right() const { return _right; } - using FreeList::tail; - using FreeList::set_tail; - using FreeList::link_tail; + // Wrapper on call to base class, to get the template to compile. + Chunk_t* head() const { return FreeList_t::head(); } + Chunk_t* tail() const { return FreeList_t::tail(); } + void set_head(Chunk_t* head) { FreeList_t::set_head(head); } + void set_tail(Chunk_t* tail) { FreeList_t::set_tail(tail); } - using FreeList::increment_count; - NOT_PRODUCT(using FreeList::increment_returned_bytes_by;) - using FreeList::verify_chunk_in_free_list; - using FreeList::size; + size_t size() const { return FreeList_t::size(); } // Accessors for links in tree. - void set_left(TreeList* tl) { + void set_left(TreeList* tl) { _left = tl; if (tl != NULL) tl->set_parent(this); } - void set_right(TreeList* tl) { + void set_right(TreeList* tl) { _right = tl; if (tl != NULL) tl->set_parent(this); } - void set_parent(TreeList* tl) { _parent = tl; } + void set_parent(TreeList* tl) { _parent = tl; } - void clearLeft() { _left = NULL; } + void clear_left() { _left = NULL; } void clear_right() { _right = NULL; } void clear_parent() { _parent = NULL; } - void initialize() { clearLeft(); clear_right(), clear_parent(); } + void initialize() { clear_left(); clear_right(), clear_parent(); FreeList_t::initialize(); } // For constructing a TreeList from a Tree chunk or // address and size. - static TreeList* as_TreeList(TreeChunk* tc); - static TreeList* as_TreeList(HeapWord* addr, size_t size); + TreeList(); + static TreeList* + as_TreeList(TreeChunk* tc); + static TreeList* as_TreeList(HeapWord* addr, size_t size); // Returns the head of the free list as a pointer to a TreeChunk. - TreeChunk* head_as_TreeChunk(); + TreeChunk* head_as_TreeChunk(); // Returns the first available chunk in the free list as a pointer // to a TreeChunk. - TreeChunk* first_available(); + TreeChunk* first_available(); // Returns the block with the largest heap address amongst // those in the list for this size; potentially slow and expensive, // use with caution! - TreeChunk* largest_address(); + TreeChunk* largest_address(); + + TreeList* get_better_list( + BinaryTreeDictionary* dictionary); // remove_chunk_replace_if_needed() removes the given "tc" from the TreeList. // If "tc" is the first chunk in the list, it is also the @@ -115,10 +116,10 @@ // returns the possibly replaced TreeList* for the node in // the tree. It also updates the parent of the original // node to point to the new node. - TreeList* remove_chunk_replace_if_needed(TreeChunk* tc); + TreeList* remove_chunk_replace_if_needed(TreeChunk* tc); // See FreeList. - void return_chunk_at_head(TreeChunk* tc); - void return_chunk_at_tail(TreeChunk* tc); + void return_chunk_at_head(TreeChunk* tc); + void return_chunk_at_tail(TreeChunk* tc); }; // A TreeChunk is a subclass of a Chunk that additionally @@ -134,52 +135,54 @@ // on the free list for a node in the tree and is only removed if // it is the last chunk on the free list. -template -class TreeChunk : public Chunk { - friend class TreeList; - TreeList* _list; - TreeList _embedded_list; // if non-null, this chunk is on _list +template class FreeList_t> +class TreeChunk : public Chunk_t { + friend class TreeList; + TreeList* _list; + TreeList _embedded_list; // if non-null, this chunk is on _list + + static size_t _min_tree_chunk_size; + protected: - TreeList* embedded_list() const { return (TreeList*) &_embedded_list; } - void set_embedded_list(TreeList* v) { _embedded_list = *v; } + TreeList* embedded_list() const { return (TreeList*) &_embedded_list; } + void set_embedded_list(TreeList* v) { _embedded_list = *v; } public: - TreeList* list() { return _list; } - void set_list(TreeList* v) { _list = v; } - static TreeChunk* as_TreeChunk(Chunk* fc); + TreeList* list() { return _list; } + void set_list(TreeList* v) { _list = v; } + static TreeChunk* as_TreeChunk(Chunk_t* fc); // Initialize fields in a TreeChunk that should be // initialized when the TreeChunk is being added to // a free list in the tree. void initialize() { embedded_list()->initialize(); } - Chunk* next() const { return Chunk::next(); } - Chunk* prev() const { return Chunk::prev(); } - size_t size() const volatile { return Chunk::size(); } + Chunk_t* next() const { return Chunk_t::next(); } + Chunk_t* prev() const { return Chunk_t::prev(); } + size_t size() const volatile { return Chunk_t::size(); } + + static size_t min_size() { + return _min_tree_chunk_size; + } // debugging void verify_tree_chunk_list() const; + void assert_is_mangled() const; }; -template -class BinaryTreeDictionary: public FreeBlockDictionary { +template class FreeList_t> +class BinaryTreeDictionary: public FreeBlockDictionary { friend class VMStructs; - bool _splay; - bool _adaptive_freelists; size_t _total_size; size_t _total_free_blocks; - TreeList* _root; + TreeList* _root; // private accessors - bool splay() const { return _splay; } - void set_splay(bool v) { _splay = v; } void set_total_size(size_t v) { _total_size = v; } virtual void inc_total_size(size_t v); virtual void dec_total_size(size_t v); - size_t total_free_blocks() const { return _total_free_blocks; } void set_total_free_blocks(size_t v) { _total_free_blocks = v; } - TreeList* root() const { return _root; } - void set_root(TreeList* v) { _root = v; } - bool adaptive_freelists() { return _adaptive_freelists; } + TreeList* root() const { return _root; } + void set_root(TreeList* v) { _root = v; } // This field is added and can be set to point to the // the Mutex used to synchronize access to the @@ -191,54 +194,55 @@ // return it. If the chunk // is the last chunk of that size, remove the node for that size // from the tree. - TreeChunk* get_chunk_from_tree(size_t size, enum FreeBlockDictionary::Dither dither, bool splay); - // Return a list of the specified size or NULL from the tree. - // The list is not removed from the tree. - TreeList* find_list (size_t size) const; + TreeChunk* get_chunk_from_tree(size_t size, enum FreeBlockDictionary::Dither dither); // Remove this chunk from the tree. If the removal results // in an empty list in the tree, remove the empty list. - TreeChunk* remove_chunk_from_tree(TreeChunk* tc); + TreeChunk* remove_chunk_from_tree(TreeChunk* tc); // Remove the node in the trees starting at tl that has the // minimum value and return it. Repair the tree as needed. - TreeList* remove_tree_minimum(TreeList* tl); - void semi_splay_step(TreeList* tl); + TreeList* remove_tree_minimum(TreeList* tl); // Add this free chunk to the tree. - void insert_chunk_in_tree(Chunk* freeChunk); + void insert_chunk_in_tree(Chunk_t* freeChunk); public: - static const size_t min_tree_chunk_size = sizeof(TreeChunk)/HeapWordSize; + // Return a list of the specified size or NULL from the tree. + // The list is not removed from the tree. + TreeList* find_list (size_t size) const; void verify_tree() const; // verify that the given chunk is in the tree. - bool verify_chunk_in_free_list(Chunk* tc) const; + bool verify_chunk_in_free_list(Chunk_t* tc) const; private: - void verify_tree_helper(TreeList* tl) const; - static size_t verify_prev_free_ptrs(TreeList* tl); + void verify_tree_helper(TreeList* tl) const; + static size_t verify_prev_free_ptrs(TreeList* tl); // Returns the total number of chunks in the list. - size_t total_list_length(TreeList* tl) const; + size_t total_list_length(TreeList* tl) const; // Returns the total number of words in the chunks in the tree // starting at "tl". - size_t total_size_in_tree(TreeList* tl) const; + size_t total_size_in_tree(TreeList* tl) const; // Returns the sum of the square of the size of each block // in the tree starting at "tl". - double sum_of_squared_block_sizes(TreeList* const tl) const; + double sum_of_squared_block_sizes(TreeList* const tl) const; // Returns the total number of free blocks in the tree starting // at "tl". - size_t total_free_blocks_in_tree(TreeList* tl) const; - size_t num_free_blocks() const; - size_t treeHeight() const; - size_t tree_height_helper(TreeList* tl) const; - size_t total_nodes_in_tree(TreeList* tl) const; - size_t total_nodes_helper(TreeList* tl) const; + size_t total_free_blocks_in_tree(TreeList* tl) const; + size_t num_free_blocks() const; + size_t tree_height() const; + size_t tree_height_helper(TreeList* tl) const; + size_t total_nodes_in_tree(TreeList* tl) const; + size_t total_nodes_helper(TreeList* tl) const; public: // Constructor - BinaryTreeDictionary(bool adaptive_freelists, bool splay = false); - BinaryTreeDictionary(MemRegion mr, bool adaptive_freelists, bool splay = false); + BinaryTreeDictionary() : + _total_size(0), _total_free_blocks(0), _root(0) {} + + BinaryTreeDictionary(MemRegion mr); // Public accessors size_t total_size() const { return _total_size; } + size_t total_free_blocks() const { return _total_free_blocks; } // Reset the dictionary to the initial conditions with // a single free chunk. @@ -249,23 +253,24 @@ // Return a chunk of size "size" or greater from // the tree. - // want a better dynamic splay strategy for the future. - Chunk* get_chunk(size_t size, enum FreeBlockDictionary::Dither dither) { - FreeBlockDictionary::verify_par_locked(); - Chunk* res = get_chunk_from_tree(size, dither, splay()); + Chunk_t* get_chunk(size_t size, enum FreeBlockDictionary::Dither dither) { + FreeBlockDictionary::verify_par_locked(); + Chunk_t* res = get_chunk_from_tree(size, dither); assert(res == NULL || res->is_free(), "Should be returning a free chunk"); + assert(dither != FreeBlockDictionary::exactly || + res == NULL || res->size() == size, "Not correct size"); return res; } - void return_chunk(Chunk* chunk) { - FreeBlockDictionary::verify_par_locked(); + void return_chunk(Chunk_t* chunk) { + FreeBlockDictionary::verify_par_locked(); insert_chunk_in_tree(chunk); } - void remove_chunk(Chunk* chunk) { - FreeBlockDictionary::verify_par_locked(); - remove_chunk_from_tree((TreeChunk*)chunk); + void remove_chunk(Chunk_t* chunk) { + FreeBlockDictionary::verify_par_locked(); + remove_chunk_from_tree((TreeChunk*)chunk); assert(chunk->is_free(), "Should still be a free chunk"); } @@ -281,19 +286,19 @@ } size_t min_size() const { - return min_tree_chunk_size; + return TreeChunk::min_size(); } double sum_of_squared_block_sizes() const { return sum_of_squared_block_sizes(root()); } - Chunk* find_chunk_ends_at(HeapWord* target) const; + Chunk_t* find_chunk_ends_at(HeapWord* target) const; // Find the list with size "size" in the binary tree and update // the statistics in the list according to "split" (chunk was // split or coalesce) and "birth" (chunk was added or removed). - void dict_census_udpate(size_t size, bool split, bool birth); + void dict_census_update(size_t size, bool split, bool birth); // Return true if the dictionary is overpopulated (more chunks of // this size than desired) for size "size". bool coal_dict_over_populated(size_t size); @@ -307,7 +312,7 @@ // statistics for the sweep. void end_sweep_dict_census(double splitSurplusPercent); // Return the largest free chunk in the tree. - Chunk* find_largest_dict() const; + Chunk_t* find_largest_dict() const; // Accessors for statistics void set_tree_surplus(double splitSurplusPercent); void set_tree_hints(void); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/filemap.cpp --- a/hotspot/src/share/vm/memory/filemap.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/filemap.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -29,6 +29,7 @@ #include "runtime/arguments.hpp" #include "runtime/java.hpp" #include "runtime/os.hpp" +#include "services/memTracker.hpp" #include "utilities/defaultStream.hpp" # include @@ -344,25 +345,14 @@ fail_continue(err_msg("Unable to reserved shared space at required address " INTPTR_FORMAT, requested_addr)); return rs; } + // the reserved virtual memory is for mapping class data sharing archive + if (MemTracker::is_on()) { + MemTracker::record_virtual_memory_type((address)rs.base(), mtClassShared); + } return rs; } // Memory map a region in the address space. - -char* FileMapInfo::map_region(int i, ReservedSpace rs) { - struct FileMapInfo::FileMapHeader::space_info* si = &_header._space[i]; - size_t used = si->_used; - size_t size = align_size_up(used, os::vm_allocation_granularity()); - - ReservedSpace mapped_rs = rs.first_part(size, true, true); - ReservedSpace unmapped_rs = rs.last_part(size); - mapped_rs.release(); - - return map_region(i); -} - - -// Memory map a region in the address space. static const char* shared_region_name[] = { "ReadOnly", "ReadWrite", "MiscData", "MiscCode"}; char* FileMapInfo::map_region(int i) { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/filemap.hpp --- a/hotspot/src/share/vm/memory/filemap.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/filemap.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -125,7 +125,6 @@ size_t capacity, bool read_only, bool allow_exec); void write_bytes(const void* buffer, int count); void write_bytes_aligned(const void* buffer, int count); - char* map_region(int i, ReservedSpace rs); char* map_region(int i); void unmap_region(int i); void close(); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/freeBlockDictionary.cpp --- a/hotspot/src/share/vm/memory/freeBlockDictionary.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/freeBlockDictionary.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -27,6 +27,8 @@ #include "gc_implementation/concurrentMarkSweep/freeChunk.hpp" #endif // SERIALGC #include "memory/freeBlockDictionary.hpp" +#include "memory/metablock.hpp" +#include "memory/metachunk.hpp" #ifdef TARGET_OS_FAMILY_linux # include "thread_linux.inline.hpp" #endif @@ -62,6 +64,9 @@ } #endif +template class FreeBlockDictionary; +template class FreeBlockDictionary; + #ifndef SERIALGC // Explicitly instantiate for FreeChunk template class FreeBlockDictionary; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/freeBlockDictionary.hpp --- a/hotspot/src/share/vm/memory/freeBlockDictionary.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/freeBlockDictionary.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -66,7 +66,7 @@ virtual void reset(HeapWord* addr, size_t size) = 0; virtual void reset() = 0; - virtual void dict_census_udpate(size_t size, bool split, bool birth) = 0; + virtual void dict_census_update(size_t size, bool split, bool birth) = 0; virtual bool coal_dict_over_populated(size_t size) = 0; virtual void begin_sweep_dict_census(double coalSurplusPercent, float inter_sweep_current, float inter_sweep_estimate, diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/freeList.cpp --- a/hotspot/src/share/vm/memory/freeList.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/freeList.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -25,6 +25,8 @@ #include "precompiled.hpp" #include "memory/freeBlockDictionary.hpp" #include "memory/freeList.hpp" +#include "memory/metablock.hpp" +#include "memory/metachunk.hpp" #include "memory/sharedHeap.hpp" #include "runtime/globals.hpp" #include "runtime/mutex.hpp" @@ -49,8 +51,6 @@ { _size = 0; _count = 0; - _hint = 0; - init_statistics(); } template @@ -62,34 +62,50 @@ { _size = fc->size(); _count = 1; - _hint = 0; - init_statistics(); -#ifndef PRODUCT - _allocation_stats.set_returned_bytes(size() * HeapWordSize); -#endif } template -void FreeList::reset(size_t hint) { +void FreeList::link_head(Chunk* v) { + assert_proper_lock_protection(); + set_head(v); + // If this method is not used (just set the head instead), + // this check can be avoided. + if (v != NULL) { + v->link_prev(NULL); + } +} + + + +template +void FreeList::reset() { + // Don't set the _size to 0 because this method is + // used with a existing list that has a size but which has + // been emptied. + // Don't clear the _protecting_lock of an existing list. set_count(0); set_head(NULL); set_tail(NULL); - set_hint(hint); } template -void FreeList::init_statistics(bool split_birth) { - _allocation_stats.initialize(split_birth); +void FreeList::initialize() { +#ifdef ASSERT + // Needed early because it might be checked in other initializing code. + set_protecting_lock(NULL); +#endif + reset(); + set_size(0); } -template -Chunk* FreeList::get_chunk_at_head() { +template +Chunk_t* FreeList::get_chunk_at_head() { assert_proper_lock_protection(); assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); - Chunk* fc = head(); + Chunk_t* fc = head(); if (fc != NULL) { - Chunk* nextFC = fc->next(); + Chunk_t* nextFC = fc->next(); if (nextFC != NULL) { // The chunk fc being removed has a "next". Set the "next" to the // "prev" of fc. @@ -197,11 +213,6 @@ link_tail(chunk); } increment_count(); // of # of chunks in list - DEBUG_ONLY( - if (record_return) { - increment_returned_bytes_by(size()*HeapWordSize); - } - ) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); assert(head() == NULL || head()->size() == size(), "wrong item on list"); @@ -233,11 +244,6 @@ } link_tail(chunk); increment_count(); // of # of chunks in list - DEBUG_ONLY( - if (record_return) { - increment_returned_bytes_by(size()*HeapWordSize); - } - ) assert(head() == NULL || head()->prev() == NULL, "list invariant"); assert(tail() == NULL || tail()->next() == NULL, "list invariant"); assert(head() == NULL || head()->size() == size(), "wrong item on list"); @@ -273,7 +279,7 @@ } } -// verify_chunk_in_free_list() is used to verify that an item is in this free list. +// verify_chunk_in_free_lists() is used to verify that an item is in this free list. // It is used as a debugging aid. template bool FreeList::verify_chunk_in_free_list(Chunk* fc) const { @@ -294,40 +300,14 @@ #ifndef PRODUCT template -void FreeList::verify_stats() const { - // The +1 of the LH comparand is to allow some "looseness" in - // checking: we usually call this interface when adding a block - // and we'll subsequently update the stats; we cannot update the - // stats beforehand because in the case of the large-block BT - // dictionary for example, this might be the first block and - // in that case there would be no place that we could record - // the stats (which are kept in the block itself). - assert((_allocation_stats.prev_sweep() + _allocation_stats.split_births() - + _allocation_stats.coal_births() + 1) // Total Production Stock + 1 - >= (_allocation_stats.split_deaths() + _allocation_stats.coal_deaths() - + (ssize_t)count()), // Total Current Stock + depletion - err_msg("FreeList " PTR_FORMAT " of size " SIZE_FORMAT - " violates Conservation Principle: " - "prev_sweep(" SIZE_FORMAT ")" - " + split_births(" SIZE_FORMAT ")" - " + coal_births(" SIZE_FORMAT ") + 1 >= " - " split_deaths(" SIZE_FORMAT ")" - " coal_deaths(" SIZE_FORMAT ")" - " + count(" SSIZE_FORMAT ")", - this, _size, _allocation_stats.prev_sweep(), _allocation_stats.split_births(), - _allocation_stats.split_births(), _allocation_stats.split_deaths(), - _allocation_stats.coal_deaths(), count())); -} - -template void FreeList::assert_proper_lock_protection_work() const { - assert(_protecting_lock != NULL, "Don't call this directly"); + assert(protecting_lock() != NULL, "Don't call this directly"); assert(ParallelGCThreads > 0, "Don't call this directly"); Thread* thr = Thread::current(); if (thr->is_VM_thread() || thr->is_ConcurrentGC_thread()) { // assert that we are holding the freelist lock } else if (thr->is_GC_task_thread()) { - assert(_protecting_lock->owned_by_self(), "FreeList RACE DETECTED"); + assert(protecting_lock()->owned_by_self(), "FreeList RACE DETECTED"); } else if (thr->is_Java_thread()) { assert(!SafepointSynchronize::is_at_safepoint(), "Should not be executing"); } else { @@ -350,21 +330,17 @@ // to the call is a non-null string, it is printed in the first column; // otherwise, if the argument is null (the default), then the size of the // (free list) block is printed in the first column. -template -void FreeList::print_on(outputStream* st, const char* c) const { +template +void FreeList::print_on(outputStream* st, const char* c) const { if (c != NULL) { st->print("%16s", c); } else { st->print(SIZE_FORMAT_W(16), size()); } - st->print("\t" - SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" - SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\t" SSIZE_FORMAT_W(14) "\n", - bfr_surp(), surplus(), desired(), prev_sweep(), before_sweep(), - count(), coal_births(), coal_deaths(), split_births(), split_deaths()); } +template class FreeList; +template class FreeList; #ifndef SERIALGC -// Needs to be after the definitions have been seen. template class FreeList; #endif // SERIALGC diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/freeList.hpp --- a/hotspot/src/share/vm/memory/freeList.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/freeList.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -40,23 +40,19 @@ // for that implementation. class Mutex; -template class TreeList; -template class PrintTreeCensusClosure; -template +template class FreeList VALUE_OBJ_CLASS_SPEC { friend class CompactibleFreeListSpace; friend class VMStructs; - friend class PrintTreeCensusClosure; private: - Chunk* _head; // Head of list of free chunks - Chunk* _tail; // Tail of list of free chunks + Chunk_t* _head; // Head of list of free chunks + Chunk_t* _tail; // Tail of list of free chunks size_t _size; // Size in Heap words of each chunk ssize_t _count; // Number of entries in list - size_t _hint; // next larger size list with a positive surplus - AllocationStats _allocation_stats; // allocation-related statistics + protected: #ifdef ASSERT Mutex* _protecting_lock; @@ -71,10 +67,6 @@ #endif } - // Initialize the allocation statistics. - protected: - void init_statistics(bool split_birth = false); - void set_count(ssize_t v) { _count = v;} void increment_count() { _count++; } @@ -89,52 +81,48 @@ // Construct a list without any entries. FreeList(); // Construct a list with "fc" as the first (and lone) entry in the list. - FreeList(Chunk* fc); + FreeList(Chunk_t* fc); - // Reset the head, tail, hint, and count of a free list. - void reset(size_t hint); + // Do initialization + void initialize(); + + // Reset the head, tail, and count of a free list. + void reset(); // Declare the current free list to be protected by the given lock. #ifdef ASSERT - void set_protecting_lock(Mutex* protecting_lock) { - _protecting_lock = protecting_lock; + Mutex* protecting_lock() const { return _protecting_lock; } + void set_protecting_lock(Mutex* v) { + _protecting_lock = v; } #endif // Accessors. - Chunk* head() const { + Chunk_t* head() const { assert_proper_lock_protection(); return _head; } - void set_head(Chunk* v) { + void set_head(Chunk_t* v) { assert_proper_lock_protection(); _head = v; assert(!_head || _head->size() == _size, "bad chunk size"); } // Set the head of the list and set the prev field of non-null // values to NULL. - void link_head(Chunk* v) { - assert_proper_lock_protection(); - set_head(v); - // If this method is not used (just set the head instead), - // this check can be avoided. - if (v != NULL) { - v->link_prev(NULL); - } - } + void link_head(Chunk_t* v); - Chunk* tail() const { + Chunk_t* tail() const { assert_proper_lock_protection(); return _tail; } - void set_tail(Chunk* v) { + void set_tail(Chunk_t* v) { assert_proper_lock_protection(); _tail = v; assert(!_tail || _tail->size() == _size, "bad chunk size"); } // Set the tail of the list and set the next field of non-null // values to NULL. - void link_tail(Chunk* v) { + void link_tail(Chunk_t* v) { assert_proper_lock_protection(); set_tail(v); if (v != NULL) { @@ -152,174 +140,45 @@ assert_proper_lock_protection(); _size = v; } - ssize_t count() const { - return _count; - } - size_t hint() const { - return _hint; - } - void set_hint(size_t v) { - assert_proper_lock_protection(); - assert(v == 0 || _size < v, "Bad hint"); _hint = v; - } - - // Accessors for statistics - AllocationStats* allocation_stats() { - assert_proper_lock_protection(); - return &_allocation_stats; - } - - ssize_t desired() const { - return _allocation_stats.desired(); - } - void set_desired(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_desired(v); - } - void compute_desired(float inter_sweep_current, - float inter_sweep_estimate, - float intra_sweep_estimate) { - assert_proper_lock_protection(); - _allocation_stats.compute_desired(_count, - inter_sweep_current, - inter_sweep_estimate, - intra_sweep_estimate); - } - ssize_t coal_desired() const { - return _allocation_stats.coal_desired(); - } - void set_coal_desired(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_coal_desired(v); - } - - ssize_t surplus() const { - return _allocation_stats.surplus(); - } - void set_surplus(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_surplus(v); - } - void increment_surplus() { - assert_proper_lock_protection(); - _allocation_stats.increment_surplus(); - } - void decrement_surplus() { - assert_proper_lock_protection(); - _allocation_stats.decrement_surplus(); - } + ssize_t count() const { return _count; } + void set_count(ssize_t v) { _count = v;} - ssize_t bfr_surp() const { - return _allocation_stats.bfr_surp(); - } - void set_bfr_surp(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_bfr_surp(v); - } - ssize_t prev_sweep() const { - return _allocation_stats.prev_sweep(); - } - void set_prev_sweep(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_prev_sweep(v); - } - ssize_t before_sweep() const { - return _allocation_stats.before_sweep(); - } - void set_before_sweep(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_before_sweep(v); - } - - ssize_t coal_births() const { - return _allocation_stats.coal_births(); - } - void set_coal_births(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_coal_births(v); - } - void increment_coal_births() { - assert_proper_lock_protection(); - _allocation_stats.increment_coal_births(); - } + size_t get_better_size() { return size(); } - ssize_t coal_deaths() const { - return _allocation_stats.coal_deaths(); - } - void set_coal_deaths(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_coal_deaths(v); - } - void increment_coal_deaths() { - assert_proper_lock_protection(); - _allocation_stats.increment_coal_deaths(); - } - - ssize_t split_births() const { - return _allocation_stats.split_births(); - } - void set_split_births(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_split_births(v); - } - void increment_split_births() { - assert_proper_lock_protection(); - _allocation_stats.increment_split_births(); - } - - ssize_t split_deaths() const { - return _allocation_stats.split_deaths(); - } - void set_split_deaths(ssize_t v) { - assert_proper_lock_protection(); - _allocation_stats.set_split_deaths(v); - } - void increment_split_deaths() { - assert_proper_lock_protection(); - _allocation_stats.increment_split_deaths(); - } - - NOT_PRODUCT( - // For debugging. The "_returned_bytes" in all the lists are summed - // and compared with the total number of bytes swept during a - // collection. - size_t returned_bytes() const { return _allocation_stats.returned_bytes(); } - void set_returned_bytes(size_t v) { _allocation_stats.set_returned_bytes(v); } - void increment_returned_bytes_by(size_t v) { - _allocation_stats.set_returned_bytes(_allocation_stats.returned_bytes() + v); - } - ) + size_t returned_bytes() const { ShouldNotReachHere(); return 0; } + void set_returned_bytes(size_t v) {} + void increment_returned_bytes_by(size_t v) {} // Unlink head of list and return it. Returns NULL if // the list is empty. - Chunk* get_chunk_at_head(); + Chunk_t* get_chunk_at_head(); // Remove the first "n" or "count", whichever is smaller, chunks from the // list, setting "fl", which is required to be empty, to point to them. - void getFirstNChunksFromList(size_t n, FreeList* fl); + void getFirstNChunksFromList(size_t n, FreeList* fl); // Unlink this chunk from it's free list - void remove_chunk(Chunk* fc); + void remove_chunk(Chunk_t* fc); // Add this chunk to this free list. - void return_chunk_at_head(Chunk* fc); - void return_chunk_at_tail(Chunk* fc); + void return_chunk_at_head(Chunk_t* fc); + void return_chunk_at_tail(Chunk_t* fc); // Similar to returnChunk* but also records some diagnostic // information. - void return_chunk_at_head(Chunk* fc, bool record_return); - void return_chunk_at_tail(Chunk* fc, bool record_return); + void return_chunk_at_head(Chunk_t* fc, bool record_return); + void return_chunk_at_tail(Chunk_t* fc, bool record_return); // Prepend "fl" (whose size is required to be the same as that of "this") // to the front of "this" list. - void prepend(FreeList* fl); + void prepend(FreeList* fl); // Verify that the chunk is in the list. // found. Return NULL if "fc" is not found. - bool verify_chunk_in_free_list(Chunk* fc) const; + bool verify_chunk_in_free_list(Chunk_t* fc) const; // Stats verification - void verify_stats() const PRODUCT_RETURN; +// void verify_stats() const { ShouldNotReachHere(); }; // Printing support static void print_labels_on(outputStream* st, const char* c); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/metablock.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/memory/metablock.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#ifndef SHARE_VM_MEMORY_METABLOCK_HPP +#define SHARE_VM_MEMORY_METABLOCK_HPP + +// Metablock are the unit of allocation from a Chunk. It is initialized +// with the size of the requested allocation. That size is overwritten +// once the allocation returns. +// +// A Metablock may be reused by its SpaceManager but are never moved between +// SpaceManagers. There is no explicit link to the Metachunk +// from which it was allocated. Metablock may be deallocated and +// put on a freelist but the space is never freed, rather +// the Metachunk it is a part of will be deallocated when it's +// associated class loader is collected. + +class Metablock VALUE_OBJ_CLASS_SPEC { + friend class VMStructs; + private: + // Used to align the allocation (see below). + union block_t { + void* _data[3]; + struct header_t { + size_t _word_size; + Metablock* _next; + Metablock* _prev; + } _header; + } _block; + static size_t _min_block_byte_size; + static size_t _overhead; + + typedef union block_t Block; + typedef struct header_t Header; + const Block* block() const { return &_block; } + const Block::header_t* header() const { return &(block()->_header); } + public: + + static Metablock* initialize(MetaWord* p, size_t word_size); + + // This places the body of the block at a 2 word boundary + // because every block starts on a 2 word boundary. Work out + // how to make the body on a 2 word boundary if the block + // starts on a arbitrary boundary. JJJ + + size_t word_size() const { return header()->_word_size; } + void set_word_size(size_t v) { _block._header._word_size = v; } + size_t size() const volatile { return _block._header._word_size; } + void set_size(size_t v) { _block._header._word_size = v; } + Metablock* next() const { return header()->_next; } + void set_next(Metablock* v) { _block._header._next = v; } + Metablock* prev() const { return header()->_prev; } + void set_prev(Metablock* v) { _block._header._prev = v; } + + static size_t min_block_byte_size() { return _min_block_byte_size; } + static size_t overhead() { return _overhead; } + + bool is_free() { return header()->_word_size != 0; } + void clear_next() { set_next(NULL); } + void link_prev(Metablock* ptr) { set_prev(ptr); } + uintptr_t* end() { return ((uintptr_t*) this) + size(); } + bool cantCoalesce() const { return false; } + void link_next(Metablock* ptr) { set_next(ptr); } + void link_after(Metablock* ptr){ + link_next(ptr); + if (ptr != NULL) ptr->link_prev(this); + } + + // Should not be needed in a free list of Metablocks + void markNotFree() { ShouldNotReachHere(); } + + // Debug support +#ifdef ASSERT + void* prev_addr() const { return (void*)&_block._header._prev; } + void* next_addr() const { return (void*)&_block._header._next; } + void* size_addr() const { return (void*)&_block._header._word_size; } +#endif + bool verify_chunk_in_free_list(Metablock* tc) const { return true; } + bool verify_par_locked() { return true; } + + void assert_is_mangled() const {/* Don't check "\*/} +}; +#endif // SHARE_VM_MEMORY_METABLOCK_HPP diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/metachunk.hpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/src/share/vm/memory/metachunk.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ +#ifndef SHARE_VM_MEMORY_METACHUNK_HPP +#define SHARE_VM_MEMORY_METACHUNK_HPP + +// Metachunk - Quantum of allocation from a Virtualspace +// Metachunks are reused (when freed are put on a global freelist) and +// have no permanent association to a SpaceManager. + +// +--------------+ <- end +// | | --+ ---+ +// | | | free | +// | | | | +// | | | | capacity +// | | | | +// | | <- top --+ | +// | | ---+ | +// | | | used | +// | | | | +// | | | | +// +--------------+ <- bottom ---+ ---+ + +class Metachunk VALUE_OBJ_CLASS_SPEC { + // link to support lists of chunks + Metachunk* _next; + Metachunk* _prev; + + MetaWord* _bottom; + MetaWord* _end; + MetaWord* _top; + size_t _word_size; + // Used in a guarantee() so included in the Product builds + // even through it is only for debugging. + bool _is_free; + + // Metachunks are allocated out of a MetadataVirtualSpace and + // and use some of its space to describe itself (plus alignment + // considerations). Metadata is allocated in the rest of the chunk. + // This size is the overhead of maintaining the Metachunk within + // the space. + static size_t _overhead; + + void set_bottom(MetaWord* v) { _bottom = v; } + void set_end(MetaWord* v) { _end = v; } + void set_top(MetaWord* v) { _top = v; } + void set_word_size(size_t v) { _word_size = v; } + public: +#ifdef ASSERT + Metachunk() : _bottom(NULL), _end(NULL), _top(NULL), _is_free(false) {} +#else + Metachunk() : _bottom(NULL), _end(NULL), _top(NULL) {} +#endif + + // Used to add a Metachunk to a list of Metachunks + void set_next(Metachunk* v) { _next = v; assert(v != this, "Boom");} + void set_prev(Metachunk* v) { _prev = v; assert(v != this, "Boom");} + + MetaWord* allocate(size_t word_size); + static Metachunk* initialize(MetaWord* ptr, size_t word_size); + + // Accessors + Metachunk* next() const { return _next; } + Metachunk* prev() const { return _prev; } + MetaWord* bottom() const { return _bottom; } + MetaWord* end() const { return _end; } + MetaWord* top() const { return _top; } + size_t word_size() const { return _word_size; } + size_t size() const volatile { return _word_size; } + void set_size(size_t v) { _word_size = v; } + bool is_free() { return _is_free; } + void set_is_free(bool v) { _is_free = v; } + static size_t overhead() { return _overhead; } + void clear_next() { set_next(NULL); } + void link_prev(Metachunk* ptr) { set_prev(ptr); } + uintptr_t* end() { return ((uintptr_t*) this) + size(); } + bool cantCoalesce() const { return false; } + void link_next(Metachunk* ptr) { set_next(ptr); } + void link_after(Metachunk* ptr){ + link_next(ptr); + if (ptr != NULL) ptr->link_prev(this); + } + + // Reset top to bottom so chunk can be reused. + void reset_empty() { _top = (_bottom + _overhead); } + bool is_empty() { return _top == (_bottom + _overhead); } + + // used (has been allocated) + // free (available for future allocations) + // capacity (total size of chunk) + size_t used_word_size(); + size_t free_word_size(); + size_t capacity_word_size(); + + // Debug support +#ifdef ASSERT + void* prev_addr() const { return (void*)&_prev; } + void* next_addr() const { return (void*)&_next; } + void* size_addr() const { return (void*)&_word_size; } +#endif + bool verify_chunk_in_free_list(Metachunk* tc) const { return true; } + bool verify_par_locked() { return true; } + + void assert_is_mangled() const {/* Don't check "\*/} + +#ifdef ASSERT + void mangle(); +#endif // ASSERT + + void print_on(outputStream* st) const; + void verify(); +}; +#endif // SHARE_VM_MEMORY_METACHUNK_HPP diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/metaspace.cpp --- a/hotspot/src/share/vm/memory/metaspace.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/metaspace.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -24,9 +24,12 @@ #include "precompiled.hpp" #include "gc_interface/collectedHeap.hpp" #include "memory/binaryTreeDictionary.hpp" +#include "memory/freeList.hpp" #include "memory/collectorPolicy.hpp" #include "memory/filemap.hpp" #include "memory/freeList.hpp" +#include "memory/metablock.hpp" +#include "memory/metachunk.hpp" #include "memory/metaspace.hpp" #include "memory/metaspaceShared.hpp" #include "memory/resourceArea.hpp" @@ -37,15 +40,8 @@ #include "utilities/copy.hpp" #include "utilities/debug.hpp" -// Define this macro to deallocate Metablock. If not defined, -// blocks are not yet deallocated and are only mangled. -#undef DEALLOCATE_BLOCKS - -// Easily recognizable patterns -// These patterns can be the same in 32bit or 64bit since -// they only have to be easily recognizable. -const void* metaspace_allocation_leader = (void*) 0X11111111; -const void* metaspace_allocation_trailer = (void*) 0X77777777; +typedef BinaryTreeDictionary BlockTreeDictionary; +typedef BinaryTreeDictionary ChunkTreeDictionary; // Parameters for stress mode testing const uint metadata_deallocate_a_lot_block = 10; @@ -53,7 +49,6 @@ size_t const allocation_from_dictionary_limit = 64 * K; const size_t metadata_chunk_initialize = 0xf7f7f7f7; const size_t metadata_deallocate = 0xf5f5f5f5; -const size_t metadata_space_manager_allocate = 0xf3f3f3f3; MetaWord* last_allocated = 0; @@ -62,11 +57,12 @@ SmallIndex = 0, MediumIndex = 1, HumongousIndex = 2, - NumberOfFreeLists = 3 + NumberOfFreeLists = 2, + NumberOfInUseLists = 3 }; static ChunkIndex next_chunk_index(ChunkIndex i) { - assert(i < NumberOfFreeLists, "Out of bound"); + assert(i < NumberOfInUseLists, "Out of bound"); return (ChunkIndex) (i+1); } @@ -100,164 +96,13 @@ // the Chunk after the header for the Chunk) where as Metachunks // point to space in a VirtualSpace. To replace Metachunks with // Chunks, change Chunks so that they can be allocated out of a VirtualSpace. -// - -// Metablock are the unit of allocation from a Chunk. It contains -// the size of the requested allocation in a debug build. -// Also in a debug build it has a marker before and after the -// body of the block. The address of the body is the address returned -// by the allocation. -// -// Layout in a debug build. In a product build only the body is present. -// -// +-----------+-----------+------------+ +-----------+ -// | word size | leader | body | ... | trailer | -// +-----------+-----------+------------+ +-----------+ -// -// A Metablock may be reused by its SpaceManager but are never moved between -// SpaceManagers. There is no explicit link to the Metachunk -// from which it was allocated. Metablock are not deallocated, rather -// the Metachunk it is a part of will be deallocated when it's -// associated class loader is collected. -// -// When the word size of a block is passed in to the deallocation -// call the word size no longer needs to be part of a Metablock. - -class Metablock { - friend class VMStructs; - private: - // Used to align the allocation (see below) and for debugging. -#ifdef ASSERT - struct { - size_t _word_size; - void* _leader; - } _header; - void* _data[1]; -#endif - static size_t _overhead; - +size_t Metablock::_min_block_byte_size = sizeof(Metablock); #ifdef ASSERT - void set_word_size(size_t v) { _header._word_size = v; } - void* leader() { return _header._leader; } - void* trailer() { - jlong index = (jlong) _header._word_size - sizeof(_header)/BytesPerWord - 1; - assert(index > 0, err_msg("Bad indexling of trailer %d", index)); - void** ptr = &_data[index]; - return *ptr; - } - void set_leader(void* v) { _header._leader = v; } - void set_trailer(void* v) { - void** ptr = &_data[_header._word_size - sizeof(_header)/BytesPerWord - 1]; - *ptr = v; - } - public: - size_t word_size() { return _header._word_size; } -#endif - public: - - static Metablock* initialize(MetaWord* p, size_t word_size); - - // This places the body of the block at a 2 word boundary - // because every block starts on a 2 word boundary. Work out - // how to make the body on a 2 word boundary if the block - // starts on a arbitrary boundary. JJJ - -#ifdef ASSERT - MetaWord* data() { return (MetaWord*) &_data[0]; } + size_t Metablock::_overhead = + Chunk::aligned_overhead_size(sizeof(Metablock)) / BytesPerWord; #else - MetaWord* data() { return (MetaWord*) this; } -#endif - static Metablock* metablock_from_data(MetaWord* p) { -#ifdef ASSERT - size_t word_offset = offset_of(Metablock, _data)/BytesPerWord; - Metablock* result = (Metablock*) (p - word_offset); - return result; -#else - return (Metablock*) p; + size_t Metablock::_overhead = 0; #endif - } - - static size_t overhead() { return _overhead; } - void verify(); -}; - -// Metachunk - Quantum of allocation from a Virtualspace -// Metachunks are reused (when freed are put on a global freelist) and -// have no permanent association to a SpaceManager. - -// +--------------+ <- end -// | | --+ ---+ -// | | | free | -// | | | | -// | | | | capacity -// | | | | -// | | <- top --+ | -// | | ---+ | -// | | | used | -// | | | | -// | | | | -// +--------------+ <- bottom ---+ ---+ - -class Metachunk VALUE_OBJ_CLASS_SPEC { - // link to support lists of chunks - Metachunk* _next; - - MetaWord* _bottom; - MetaWord* _end; - MetaWord* _top; - size_t _word_size; - - // Metachunks are allocated out of a MetadataVirtualSpace and - // and use some of its space to describe itself (plus alignment - // considerations). Metadata is allocated in the rest of the chunk. - // This size is the overhead of maintaining the Metachunk within - // the space. - static size_t _overhead; - - void set_bottom(MetaWord* v) { _bottom = v; } - void set_end(MetaWord* v) { _end = v; } - void set_top(MetaWord* v) { _top = v; } - void set_word_size(size_t v) { _word_size = v; } - public: - - // Used to add a Metachunk to a list of Metachunks - void set_next(Metachunk* v) { _next = v; assert(v != this, "Boom");} - - Metablock* allocate(size_t word_size); - static Metachunk* initialize(MetaWord* ptr, size_t word_size); - - // Accessors - Metachunk* next() const { return _next; } - MetaWord* bottom() const { return _bottom; } - MetaWord* end() const { return _end; } - MetaWord* top() const { return _top; } - size_t word_size() const { return _word_size; } - static size_t overhead() { return _overhead; } - - // Reset top to bottom so chunk can be reused. - void reset_empty() { _top = (_bottom + _overhead); } - bool is_empty() { return _top == (_bottom + _overhead); } - - // used (has been allocated) - // free (available for future allocations) - // capacity (total size of chunk) - size_t used_word_size(); - size_t free_word_size(); - size_t capacity_word_size(); - -#ifdef ASSERT - void mangle() { - // Mangle the payload of the chunk and not the links that - // maintain list of chunks. - HeapWord* start = (HeapWord*)(bottom() + overhead()); - size_t word_size = capacity_word_size() - overhead(); - Copy::fill_to_words(start, word_size, metadata_chunk_initialize); - } -#endif // ASSERT - - void print_on(outputStream* st) const; - void verify(); -}; // Pointer to list of Metachunks. @@ -292,7 +137,10 @@ // SmallChunk // MediumChunk // HumongousChunk - ChunkList _free_chunks[3]; + ChunkList _free_chunks[NumberOfFreeLists]; + + // HumongousChunk + ChunkTreeDictionary _humongous_dictionary; // ChunkManager in all lists of this type size_t _free_chunks_total; @@ -337,7 +185,9 @@ } ChunkList* free_medium_chunks() { return &_free_chunks[1]; } ChunkList* free_small_chunks() { return &_free_chunks[0]; } - ChunkList* free_humongous_chunks() { return &_free_chunks[2]; } + ChunkTreeDictionary* humongous_dictionary() { + return &_humongous_dictionary; + } ChunkList* free_chunks(ChunkIndex index); @@ -356,41 +206,35 @@ void locked_print_free_chunks(outputStream* st); void locked_print_sum_free_chunks(outputStream* st); + + void print_on(outputStream* st); }; // Used to manage the free list of Metablocks (a block corresponds // to the allocation of a quantum of metadata). class BlockFreelist VALUE_OBJ_CLASS_SPEC { -#ifdef DEALLOCATE_BLOCKS - BinaryTreeDictionary* _dictionary; -#endif - static Metablock* initialize_free_chunk(Metablock* block, size_t word_size); - -#ifdef DEALLOCATE_BLOCKS + BlockTreeDictionary* _dictionary; + static Metablock* initialize_free_chunk(MetaWord* p, size_t word_size); + // Accessors - BinaryTreeDictionary* dictionary() const { return _dictionary; } -#endif + BlockTreeDictionary* dictionary() const { return _dictionary; } public: BlockFreelist(); ~BlockFreelist(); // Get and return a block to the free list - Metablock* get_block(size_t word_size); - void return_block(Metablock* block, size_t word_size); - - size_t totalSize() { -#ifdef DEALLOCATE_BLOCKS - if (dictionary() == NULL) { - return 0; - } else { - return dictionary()->totalSize(); - } -#else + MetaWord* get_block(size_t word_size); + void return_block(MetaWord* p, size_t word_size); + + size_t total_size() { + if (dictionary() == NULL) { return 0; -#endif + } else { + return dictionary()->total_size(); } +} void print_on(outputStream* st) const; }; @@ -600,7 +444,6 @@ }; }; - class Metadebug : AllStatic { // Debugging support for Metaspaces static int _deallocate_block_a_lot_count; @@ -655,7 +498,7 @@ // List of chunks in use by this SpaceManager. Allocations // are done from the current chunk. The list is used for deallocating // chunks when the SpaceManager is freed. - Metachunk* _chunks_in_use[NumberOfFreeLists]; + Metachunk* _chunks_in_use[NumberOfInUseLists]; Metachunk* _current_chunk; // Virtual space where allocation comes from. @@ -700,24 +543,6 @@ // Add chunk to the list of chunks in use void add_chunk(Metachunk* v, bool make_current); - // Debugging support - void verify_chunks_in_use_index(ChunkIndex index, Metachunk* v) { - switch (index) { - case 0: - assert(v->word_size() == SmallChunk, "Not a SmallChunk"); - break; - case 1: - assert(v->word_size() == MediumChunk, "Not a MediumChunk"); - break; - case 2: - assert(v->word_size() > MediumChunk, "Not a HumongousChunk"); - break; - default: - assert(false, "Wrong list."); - } - } - - protected: Mutex* lock() const { return _lock; } public: @@ -751,10 +576,10 @@ MetaWord* allocate(size_t word_size); // Helper for allocations - Metablock* allocate_work(size_t word_size); + MetaWord* allocate_work(size_t word_size); // Returns a block to the per manager freelist - void deallocate(MetaWord* p); + void deallocate(MetaWord* p, size_t word_size); // Based on the allocation size and a minimum chunk size, // returned chunk size (for expanding space for chunk allocation). @@ -763,7 +588,7 @@ // Called when an allocation from the current chunk fails. // Gets a new chunk (may require getting a new virtual space), // and allocates from that chunk. - Metablock* grow_and_allocate(size_t word_size); + MetaWord* grow_and_allocate(size_t word_size); // debugging support. @@ -780,6 +605,8 @@ uint const SpaceManager::_small_chunk_limit = 4; + + const char* SpaceManager::_expand_lock_name = "SpaceManager chunk allocation lock"; const int SpaceManager::_expand_lock_rank = Monitor::leaf - 1; @@ -788,39 +615,26 @@ SpaceManager::_expand_lock_name, Mutex::_allow_vm_block_flag); -#ifdef ASSERT -size_t Metablock::_overhead = - Chunk::aligned_overhead_size(sizeof(Metablock)) / BytesPerWord; -#else -size_t Metablock::_overhead = 0; -#endif size_t Metachunk::_overhead = Chunk::aligned_overhead_size(sizeof(Metachunk)) / BytesPerWord; // New blocks returned by the Metaspace are zero initialized. // We should fix the constructors to not assume this instead. Metablock* Metablock::initialize(MetaWord* p, size_t word_size) { + if (p == NULL) { + return NULL; + } + Metablock* result = (Metablock*) p; // Clear the memory Copy::fill_to_aligned_words((HeapWord*)result, word_size); #ifdef ASSERT result->set_word_size(word_size); - // Check after work size is set. - result->set_leader((void*) metaspace_allocation_leader); - result->set_trailer((void*) metaspace_allocation_trailer); #endif return result; } -void Metablock::verify() { -#ifdef ASSERT - assert(leader() == metaspace_allocation_leader && - trailer() == metaspace_allocation_trailer, - "block has been corrupted"); -#endif -} - // Metachunk methods Metachunk* Metachunk::initialize(MetaWord* ptr, size_t word_size) { @@ -843,18 +657,13 @@ } -Metablock* Metachunk::allocate(size_t word_size) { - Metablock* result = NULL; +MetaWord* Metachunk::allocate(size_t word_size) { + MetaWord* result = NULL; // If available, bump the pointer to allocate. if (free_word_size() >= word_size) { - result = Metablock::initialize(_top, word_size); + result = _top; _top = _top + word_size; } -#ifdef ASSERT - assert(result == NULL || - result->word_size() == word_size, - "Block size is not set correctly"); -#endif return result; } @@ -878,103 +687,85 @@ bottom(), top(), end(), word_size()); } +#ifdef ASSERT +void Metachunk::mangle() { + // Mangle the payload of the chunk and not the links that + // maintain list of chunks. + HeapWord* start = (HeapWord*)(bottom() + overhead()); + size_t word_size = capacity_word_size() - overhead(); + Copy::fill_to_words(start, word_size, metadata_chunk_initialize); +} +#endif // ASSERT void Metachunk::verify() { #ifdef ASSERT // Cannot walk through the blocks unless the blocks have // headers with sizes. - MetaWord* curr = bottom() + overhead(); - while (curr < top()) { - Metablock* block = (Metablock*) curr; - size_t word_size = block->word_size(); - block->verify(); - curr = curr + word_size; - } + assert(_bottom <= _top && + _top <= _end, + "Chunk has been smashed"); + assert(SpaceManager::is_humongous(_word_size) || + _word_size == SpaceManager::MediumChunk || + _word_size == SpaceManager::SmallChunk, + "Chunk size is wrong"); #endif return; } // BlockFreelist methods -#ifdef DEALLOCATE_BLOCKS BlockFreelist::BlockFreelist() : _dictionary(NULL) {} -#else -BlockFreelist::BlockFreelist() {} -#endif BlockFreelist::~BlockFreelist() { -#ifdef DEALLOCATE_BLOCKS if (_dictionary != NULL) { if (Verbose && TraceMetadataChunkAllocation) { _dictionary->print_free_lists(gclog_or_tty); } delete _dictionary; } -#endif } -Metablock* BlockFreelist::initialize_free_chunk(Metablock* block, size_t word_size) { -#ifdef DEALLOCATE_BLOCKS -#ifdef ASSERT - assert(word_size = block->word_size(), "Wrong chunk size"); -#endif - Metablock* result = block; - result->setSize(word_size); - result->linkPrev(NULL); - result->linkNext(NULL); - - return result; -#else - ShouldNotReachHere(); +Metablock* BlockFreelist::initialize_free_chunk(MetaWord* p, size_t word_size) { + Metablock* block = (Metablock*) p; + block->set_word_size(word_size); + block->set_prev(NULL); + block->set_next(NULL); + return block; -#endif } -void BlockFreelist::return_block(Metablock* block, size_t word_size) { -#ifdef ASSERT - assert(word_size = block->word_size(), "Block size is wrong");; -#endif - Metablock* free_chunk = initialize_free_chunk(block, word_size); -#ifdef DEALLOCATE_BLOCKS +void BlockFreelist::return_block(MetaWord* p, size_t word_size) { + Metablock* free_chunk = initialize_free_chunk(p, word_size); if (dictionary() == NULL) { - _dictionary = new BinaryTreeDictionary(false /* adaptive_freelists */); + _dictionary = new BlockTreeDictionary(); } - dictionary()->returnChunk(free_chunk); -#endif + dictionary()->return_chunk(free_chunk); } -Metablock* BlockFreelist::get_block(size_t word_size) { -#ifdef DEALLOCATE_BLOCKS +MetaWord* BlockFreelist::get_block(size_t word_size) { if (dictionary() == NULL) { return NULL; } - Metablock* free_chunk = - dictionary()->getChunk(word_size, FreeBlockDictionary::exactly); -#else - Metablock* free_chunk = NULL; -#endif - if (free_chunk == NULL) { + if (word_size < TreeChunk::min_size()) { + // Dark matter. Too small for dictionary. return NULL; } - assert(free_chunk->word_size() == word_size, "Size of chunk is incorrect"); - Metablock* block = Metablock::initialize((MetaWord*) free_chunk, word_size); -#ifdef ASSERT - assert(block->word_size() == word_size, "Block size is not set correctly"); -#endif - - return block; + + Metablock* free_block = + dictionary()->get_chunk(word_size, FreeBlockDictionary::exactly); + if (free_block == NULL) { + return NULL; + } + + return (MetaWord*) free_block; } void BlockFreelist::print_on(outputStream* st) const { -#ifdef DEALLOCATE_BLOCKS if (dictionary() == NULL) { return; } dictionary()->print_free_lists(st); -#else - return; -#endif } // VirtualSpaceNode methods @@ -1597,14 +1388,11 @@ Metadebug::deallocate_block_a_lot_count() % MetaDataDeallocateALotInterval == 0 ) { Metadebug::set_deallocate_block_a_lot_count(0); for (uint i = 0; i < metadata_deallocate_a_lot_block; i++) { - Metablock* dummy_block = sm->allocate_work(raw_word_size); + MetaWord* dummy_block = sm->allocate_work(raw_word_size); if (dummy_block == 0) { break; } -#ifdef ASSERT - assert(dummy_block->word_size() == raw_word_size, "Block size is not set correctly"); -#endif - sm->deallocate(dummy_block->data()); + sm->deallocate(dummy_block, raw_word_size); } } else { Metadebug::inc_deallocate_block_a_lot_count(); @@ -1784,8 +1572,8 @@ } void ChunkManager::locked_verify() { + locked_verify_free_chunks_count(); locked_verify_free_chunks_total(); - locked_verify_free_chunks_count(); } void ChunkManager::locked_print_free_chunks(outputStream* st) { @@ -1803,7 +1591,6 @@ return &_free_chunks[index]; } - // These methods that sum the free chunk lists are used in printing // methods that are used in product builds. size_t ChunkManager::sum_free_chunks() { @@ -1818,6 +1605,7 @@ result = result + list->sum_list_capacity(); } + result = result + humongous_dictionary()->total_size(); return result; } @@ -1831,6 +1619,7 @@ } count = count + list->sum_list_count(); } + count = count + humongous_dictionary()->total_free_blocks(); return count; } @@ -1875,23 +1664,24 @@ assert_lock_strong(SpaceManager::expand_lock()); locked_verify(); - ChunkList* free_list = find_free_chunks_list(word_size); - assert(free_list != NULL, "Sanity check"); - - Metachunk* chunk = free_list->head(); - debug_only(Metachunk* debug_head = chunk;) - - if (chunk == NULL) { - return NULL; - } - - Metachunk* prev_chunk = chunk; - if (chunk->word_size() == word_size) { - // Chunk is being removed from the chunks free list. - dec_free_chunks_total(chunk->capacity_word_size()); + + Metachunk* chunk = NULL; + if (!SpaceManager::is_humongous(word_size)) { + ChunkList* free_list = find_free_chunks_list(word_size); + assert(free_list != NULL, "Sanity check"); + + chunk = free_list->head(); + debug_only(Metachunk* debug_head = chunk;) + + if (chunk == NULL) { + return NULL; + } + // Remove the chunk as the head of the list. free_list->set_head(chunk->next()); chunk->set_next(NULL); + // Chunk has been removed from the chunks free list. + dec_free_chunks_total(chunk->capacity_word_size()); if (TraceMetadataChunkAllocation && Verbose) { tty->print_cr("ChunkManager::free_chunks_get: free_list " @@ -1899,79 +1689,24 @@ free_list, chunk, chunk->word_size()); } } else { - assert(SpaceManager::is_humongous(word_size), - "Should only need to check humongous"); - // This code to find the best fit is just for purposes of - // investigating the loss due to fragmentation on a humongous - // chunk. It will be replace by a binaryTreeDictionary for - // the humongous chunks. - uint count = 0; - Metachunk* best_fit = NULL; - Metachunk* best_fit_prev = NULL; - while (chunk != NULL) { - count++; - if (chunk->word_size() < word_size) { - prev_chunk = chunk; - chunk = chunk->next(); - } else if (chunk->word_size() == word_size) { - break; - } else { - if (best_fit == NULL || - best_fit->word_size() > chunk->word_size()) { - best_fit_prev = prev_chunk; - best_fit = chunk; - } - prev_chunk = chunk; - chunk = chunk->next(); - } - } - if (chunk == NULL) { - prev_chunk = best_fit_prev; - chunk = best_fit; + chunk = humongous_dictionary()->get_chunk( + word_size, + FreeBlockDictionary::atLeast); + + if (chunk != NULL) { + if (TraceMetadataHumongousAllocation) { + size_t waste = chunk->word_size() - word_size; + tty->print_cr("Free list allocate humongous chunk size " SIZE_FORMAT + " for requested size " SIZE_FORMAT + " waste " SIZE_FORMAT, + chunk->word_size(), word_size, waste); } - if (chunk != NULL) { - if (TraceMetadataHumongousAllocation) { - size_t waste = chunk->word_size() - word_size; - tty->print_cr("Free list allocate humongous chunk size " SIZE_FORMAT - " for requested size " SIZE_FORMAT - " waste " SIZE_FORMAT - " found at " SIZE_FORMAT " of " SIZE_FORMAT, - chunk->word_size(), word_size, waste, - count, free_list->sum_list_count()); - } - // Chunk is being removed from the chunks free list. - dec_free_chunks_total(chunk->capacity_word_size()); - // Remove the chunk if it is at the head of the list. - if (chunk == free_list->head()) { - free_list->set_head(chunk->next()); - - if (TraceMetadataHumongousAllocation) { - tty->print_cr("ChunkManager::free_chunks_get: humongous free_list " - PTR_FORMAT " chunk " PTR_FORMAT " size " SIZE_FORMAT - " new head " PTR_FORMAT, - free_list, chunk, chunk->word_size(), - free_list->head()); - } - } else { - // Remove a chunk in the interior of the list - prev_chunk->set_next(chunk->next()); - - if (TraceMetadataHumongousAllocation) { - tty->print_cr("ChunkManager::free_chunks_get: humongous free_list " - PTR_FORMAT " chunk " PTR_FORMAT " size " SIZE_FORMAT - PTR_FORMAT " prev " PTR_FORMAT " next " PTR_FORMAT, - free_list, chunk, chunk->word_size(), - prev_chunk, chunk->next()); - } - } - chunk->set_next(NULL); - } else { - if (TraceMetadataHumongousAllocation) { - tty->print_cr("ChunkManager::free_chunks_get: New humongous chunk of size " - SIZE_FORMAT, - word_size); - } - } + // Chunk is being removed from the chunks free list. + dec_free_chunks_total(chunk->capacity_word_size()); +#ifdef ASSERT + chunk->set_is_free(false); +#endif + } } locked_verify(); return chunk; @@ -2000,12 +1735,18 @@ return chunk; } +void ChunkManager::print_on(outputStream* out) { + if (PrintFLSStatistics != 0) { + humongous_dictionary()->report_statistics(); + } +} + // SpaceManager methods size_t SpaceManager::sum_free_in_chunks_in_use() const { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); size_t free = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { Metachunk* chunk = chunks_in_use(i); while (chunk != NULL) { free += chunk->free_word_size(); @@ -2018,11 +1759,12 @@ size_t SpaceManager::sum_waste_in_chunks_in_use() const { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); size_t result = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { - // Count the free space in all the chunk but not the - // current chunk from which allocations are still being done. + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { + + result += sum_waste_in_chunks_in_use(i); } + return result; } @@ -2033,10 +1775,10 @@ // Count the free space in all the chunk but not the // current chunk from which allocations are still being done. if (chunk != NULL) { - while (chunk != NULL) { - if (chunk != current_chunk()) { - result += chunk->free_word_size(); - } + Metachunk* prev = chunk; + while (chunk != NULL && chunk != current_chunk()) { + result += chunk->free_word_size(); + prev = chunk; chunk = chunk->next(); count++; } @@ -2047,7 +1789,7 @@ size_t SpaceManager::sum_capacity_in_chunks_in_use() const { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); size_t sum = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { Metachunk* chunk = chunks_in_use(i); while (chunk != NULL) { // Just changed this sum += chunk->capacity_word_size(); @@ -2061,9 +1803,10 @@ size_t SpaceManager::sum_count_in_chunks_in_use() { size_t count = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { count = count + sum_count_in_chunks_in_use(i); } + return count; } @@ -2081,7 +1824,7 @@ size_t SpaceManager::sum_used_in_chunks_in_use() const { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); size_t used = 0; - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { Metachunk* chunk = chunks_in_use(i); while (chunk != NULL) { used += chunk->used_word_size(); @@ -2139,15 +1882,13 @@ gclog_or_tty->print_cr(" word_size " PTR_FORMAT, word_size); gclog_or_tty->print_cr(" chunk_word_size " PTR_FORMAT, chunk_word_size); - gclog_or_tty->print_cr(" block overhead " PTR_FORMAT - " chunk overhead " PTR_FORMAT, - Metablock::overhead(), + gclog_or_tty->print_cr(" chunk overhead " PTR_FORMAT, Metachunk::overhead()); } return chunk_word_size; } -Metablock* SpaceManager::grow_and_allocate(size_t word_size) { +MetaWord* SpaceManager::grow_and_allocate(size_t word_size) { assert(vs_list()->current_virtual_space() != NULL, "Should have been set"); assert(current_chunk() == NULL || @@ -2180,7 +1921,7 @@ void SpaceManager::print_on(outputStream* st) const { for (ChunkIndex i = SmallIndex; - i < NumberOfFreeLists ; + i < NumberOfInUseLists ; i = next_chunk_index(i) ) { st->print_cr(" chunks_in_use " PTR_FORMAT " chunk size " PTR_FORMAT, chunks_in_use(i), @@ -2191,8 +1932,11 @@ sum_waste_in_chunks_in_use(SmallIndex), sum_waste_in_chunks_in_use(MediumIndex), sum_waste_in_chunks_in_use(HumongousIndex)); - // Nothing in them yet - // block_freelists()->print_on(st); + // block free lists + if (block_freelists() != NULL) { + st->print_cr("total in block free lists " SIZE_FORMAT, + block_freelists()->total_size()); + } } SpaceManager::SpaceManager(Mutex* lock, VirtualSpaceList* vs_list) : @@ -2200,7 +1944,7 @@ _allocation_total(0), _lock(lock) { Metadebug::init_allocation_fail_alot_count(); - for (ChunkIndex i = SmallIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = SmallIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { _chunks_in_use[i] = NULL; } _current_chunk = NULL; @@ -2262,22 +2006,24 @@ // Humongous chunks are never the current chunk. Metachunk* humongous_chunks = chunks_in_use(HumongousIndex); - if (humongous_chunks != NULL) { - chunk_manager->free_humongous_chunks()->add_at_head(humongous_chunks); - set_chunks_in_use(HumongousIndex, NULL); + while (humongous_chunks != NULL) { +#ifdef ASSERT + humongous_chunks->set_is_free(true); +#endif + Metachunk* next_humongous_chunks = humongous_chunks->next(); + chunk_manager->humongous_dictionary()->return_chunk(humongous_chunks); + humongous_chunks = next_humongous_chunks; } + set_chunks_in_use(HumongousIndex, NULL); chunk_manager->locked_verify(); } -void SpaceManager::deallocate(MetaWord* p) { +void SpaceManager::deallocate(MetaWord* p, size_t word_size) { assert_lock_strong(_lock); - ShouldNotReachHere(); // Where is this needed. -#ifdef DEALLOCATE_BLOCKS - Metablock* block = Metablock::metablock_from_data(p); - // This is expense but kept it until integration JJJ - assert(contains((address)block), "Block does not belong to this metaspace"); - block_freelists()->return_block(block, word_size); -#endif + size_t min_size = TreeChunk::min_size(); + assert(word_size >= min_size, + err_msg("Should not deallocate dark matter " SIZE_FORMAT, word_size)); + block_freelists()->return_block(p, word_size); } // Adds a chunk to the list of chunks in use. @@ -2366,50 +2112,40 @@ MetaWord* SpaceManager::allocate(size_t word_size) { MutexLockerEx cl(lock(), Mutex::_no_safepoint_check_flag); - size_t block_overhead = Metablock::overhead(); // If only the dictionary is going to be used (i.e., no // indexed free list), then there is a minimum size requirement. // MinChunkSize is a placeholder for the real minimum size JJJ - size_t byte_size_with_overhead = (word_size + block_overhead) * BytesPerWord; -#ifdef DEALLOCATE_BLOCKS - size_t raw_bytes_size = MAX2(ARENA_ALIGN(byte_size_with_overhead), - MinChunkSize * BytesPerWord); -#else - size_t raw_bytes_size = ARENA_ALIGN(byte_size_with_overhead); -#endif + size_t byte_size = word_size * BytesPerWord; + + size_t byte_size_with_overhead = byte_size + Metablock::overhead(); + + size_t raw_bytes_size = MAX2(byte_size_with_overhead, + Metablock::min_block_byte_size()); + raw_bytes_size = ARENA_ALIGN(raw_bytes_size); size_t raw_word_size = raw_bytes_size / BytesPerWord; assert(raw_word_size * BytesPerWord == raw_bytes_size, "Size problem"); BlockFreelist* fl = block_freelists(); - Metablock* block = NULL; + MetaWord* p = NULL; // Allocation from the dictionary is expensive in the sense that // the dictionary has to be searched for a size. Don't allocate // from the dictionary until it starts to get fat. Is this // a reasonable policy? Maybe an skinny dictionary is fast enough // for allocations. Do some profiling. JJJ - if (fl->totalSize() > allocation_from_dictionary_limit) { - block = fl->get_block(raw_word_size); + if (fl->total_size() > allocation_from_dictionary_limit) { + p = fl->get_block(raw_word_size); } - if (block == NULL) { - block = allocate_work(raw_word_size); - if (block == NULL) { - return NULL; - } + if (p == NULL) { + p = allocate_work(raw_word_size); } Metadebug::deallocate_block_a_lot(this, raw_word_size); - // Push the allocation past the word containing the size and leader. -#ifdef ASSERT - MetaWord* result = block->data(); - return result; -#else - return (MetaWord*) block; -#endif + return p; } // Returns the address of spaced allocated for "word_size". // This methods does not know about blocks (Metablocks) -Metablock* SpaceManager::allocate_work(size_t word_size) { +MetaWord* SpaceManager::allocate_work(size_t word_size) { assert_lock_strong(_lock); #ifdef ASSERT if (Metadebug::test_metadata_failure()) { @@ -2417,7 +2153,7 @@ } #endif // Is there space in the current chunk? - Metablock* result = NULL; + MetaWord* result = NULL; // For DumpSharedSpaces, only allocate out of the current chunk which is // never null because we gave it the size we wanted. Caller reports out @@ -2436,8 +2172,8 @@ } if (result > 0) { inc_allocation_total(word_size); - assert(result != (Metablock*) chunks_in_use(MediumIndex), "Head of the list is being allocated"); - assert(result->word_size() == word_size, "Size not set correctly"); + assert(result != (MetaWord*) chunks_in_use(MediumIndex), + "Head of the list is being allocated"); } return result; @@ -2447,13 +2183,13 @@ // If there are blocks in the dictionary, then // verfication of chunks does not work since // being in the dictionary alters a chunk. - if (block_freelists()->totalSize() == 0) { + if (block_freelists()->total_size() == 0) { // Skip the small chunks because their next link points to // medium chunks. This is because the small chunk is the // current chunk (for allocations) until it is full and the // the addition of the next chunk does not NULL the next // like of the small chunk. - for (ChunkIndex i = MediumIndex; i < NumberOfFreeLists; i = next_chunk_index(i)) { + for (ChunkIndex i = MediumIndex; i < NumberOfInUseLists; i = next_chunk_index(i)) { Metachunk* curr = chunks_in_use(i); while (curr != NULL) { curr->verify(); @@ -2492,7 +2228,7 @@ // Add up statistics for all chunks in this SpaceManager. for (ChunkIndex index = SmallIndex; - index < NumberOfFreeLists; + index < NumberOfInUseLists; index = next_chunk_index(index)) { for (Metachunk* curr = chunks_in_use(index); curr != NULL; @@ -2521,7 +2257,7 @@ #ifdef ASSERT void SpaceManager::mangle_freed_chunks() { for (ChunkIndex index = SmallIndex; - index < NumberOfFreeLists; + index < NumberOfInUseLists; index = next_chunk_index(index)) { for (Metachunk* curr = chunks_in_use(index); curr != NULL; @@ -2833,13 +2569,12 @@ } } - MetaWord* Metaspace::allocate(size_t word_size, MetadataType mdtype) { // DumpSharedSpaces doesn't use class metadata area (yet) if (mdtype == ClassType && !DumpSharedSpaces) { - return class_vsm()->allocate(word_size); + return class_vsm()->allocate(word_size); } else { - return vsm()->allocate(word_size); + return vsm()->allocate(word_size); } } @@ -2853,6 +2588,7 @@ gclog_or_tty->print_cr("Increase capacity to GC from " SIZE_FORMAT " to " SIZE_FORMAT, before_inc, MetaspaceGC::capacity_until_GC()); } + result = allocate(word_size, mdtype); return result; @@ -2889,37 +2625,39 @@ void Metaspace::deallocate(MetaWord* ptr, size_t word_size, bool is_class) { if (SafepointSynchronize::is_at_safepoint()) { assert(Thread::current()->is_VM_thread(), "should be the VM thread"); - // Don't take lock -#ifdef DEALLOCATE_BLOCKS - if (is_class) { - class_vsm()->deallocate(ptr); - } else { - vsm()->deallocate(ptr); + // Don't take Heap_lock + MutexLocker ml(vsm()->lock()); + if (word_size < TreeChunk::min_size()) { + // Dark matter. Too small for dictionary. +#ifdef ASSERT + Copy::fill_to_words((HeapWord*)ptr, word_size, 0xf5f5f5f5); +#endif + return; } -#else -#ifdef ASSERT - Copy::fill_to_words((HeapWord*)ptr, word_size, metadata_deallocate); -#endif -#endif - + if (is_class) { + class_vsm()->deallocate(ptr, word_size); + } else { + vsm()->deallocate(ptr, word_size); + } } else { MutexLocker ml(vsm()->lock()); -#ifdef DEALLOCATE_BLOCKS - if (is_class) { - class_vsm()->deallocate(ptr); - } else { - vsm()->deallocate(ptr); + if (word_size < TreeChunk::min_size()) { + // Dark matter. Too small for dictionary. +#ifdef ASSERT + Copy::fill_to_words((HeapWord*)ptr, word_size, 0xf5f5f5f5); +#endif + return; } -#else -#ifdef ASSERT - Copy::fill_to_words((HeapWord*)ptr, word_size, metadata_deallocate); -#endif -#endif + if (is_class) { + class_vsm()->deallocate(ptr, word_size); + } else { + vsm()->deallocate(ptr, word_size); + } } } -MetaWord* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size, +Metablock* Metaspace::allocate(ClassLoaderData* loader_data, size_t word_size, bool read_only, MetadataType mdtype, TRAPS) { if (HAS_PENDING_EXCEPTION) { assert(false, "Should not allocate with exception pending"); @@ -2943,7 +2681,7 @@ if (result == NULL) { report_out_of_shared_space(read_only ? SharedReadOnly : SharedReadWrite); } - return result; + return Metablock::initialize(result, word_size); } result = loader_data->metaspace_non_null()->allocate(word_size, mdtype); @@ -2951,7 +2689,7 @@ if (result == NULL) { // Try to clean out some memory and retry. result = - Universe::heap()->collector_policy()->satisfy_failed_metadata_allocation( + Universe::heap()->collector_policy()->satisfy_failed_metadata_allocation( loader_data, word_size, mdtype); // If result is still null, we are out of memory. @@ -2967,7 +2705,7 @@ THROW_OOP_0(Universe::out_of_memory_error_perm_gen()); } } - return result; + return Metablock::initialize(result, word_size); } void Metaspace::print_on(outputStream* out) const { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/metaspace.hpp --- a/hotspot/src/share/vm/memory/metaspace.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/metaspace.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -57,12 +57,10 @@ // class ClassLoaderData; +class Metablock; class MetaWord; class Mutex; class outputStream; -class FreeChunk; -template class FreeList; -template class BinaryTreeDictionary; class SpaceManager; // Metaspaces each have a SpaceManager and allocations @@ -128,7 +126,7 @@ size_t capacity_words(MetadataType mdtype) const; size_t waste_words(MetadataType mdtype) const; - static MetaWord* allocate(ClassLoaderData* loader_data, size_t size, + static Metablock* allocate(ClassLoaderData* loader_data, size_t size, bool read_only, MetadataType mdtype, TRAPS); void deallocate(MetaWord* ptr, size_t byte_size, bool is_class); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/metaspaceShared.cpp --- a/hotspot/src/share/vm/memory/metaspaceShared.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/metaspaceShared.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -663,8 +663,8 @@ if (_ro_base == NULL || _rw_base == NULL) { return false; } else { - return ((p > _ro_base && p < (_ro_base + SharedReadOnlySize)) || - (p > _rw_base && p < (_rw_base + SharedReadWriteSize))); + return ((p >= _ro_base && p < (_ro_base + SharedReadOnlySize)) || + (p >= _rw_base && p < (_rw_base + SharedReadWriteSize))); } } @@ -693,14 +693,6 @@ ReservedSpace shared_rs = mapinfo->reserve_shared_memory(); if (!shared_rs.is_reserved()) return false; - // Split reserved memory into pieces (windows needs this) - ReservedSpace ro_rs = shared_rs.first_part(SharedReadOnlySize); - ReservedSpace tmp_rs1 = shared_rs.last_part(SharedReadOnlySize); - ReservedSpace rw_rs = tmp_rs1.first_part(SharedReadWriteSize); - ReservedSpace tmp_rs2 = tmp_rs1.last_part(SharedReadWriteSize); - ReservedSpace md_rs = tmp_rs2.first_part(SharedMiscDataSize); - ReservedSpace mc_rs = tmp_rs2.last_part(SharedMiscDataSize); - // Map each shared region if ((_ro_base = mapinfo->map_region(ro)) != NULL && (_rw_base = mapinfo->map_region(rw)) != NULL && diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/memory/resourceArea.hpp --- a/hotspot/src/share/vm/memory/resourceArea.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/memory/resourceArea.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -127,15 +127,21 @@ void reset_to_mark() { if (UseMallocOnly) free_malloced_objects(); - if( _chunk->next() ) // Delete later chunks + if( _chunk->next() ) { // Delete later chunks + // reset arena size before delete chunks. Otherwise, the total + // arena size could exceed total chunk size + assert(_area->size_in_bytes() > size_in_bytes(), "Sanity check"); + _area->set_size_in_bytes(size_in_bytes()); _chunk->next_chop(); + } else { + assert(_area->size_in_bytes() == size_in_bytes(), "Sanity check"); + } _area->_chunk = _chunk; // Roll back arena to saved chunk _area->_hwm = _hwm; _area->_max = _max; // clear out this chunk (to detect allocation bugs) if (ZapResourceArea) memset(_hwm, badResourceValue, _max - _hwm); - _area->set_size_in_bytes(size_in_bytes()); } ~ResourceMark() { @@ -219,15 +225,21 @@ void reset_to_mark() { if (UseMallocOnly) free_malloced_objects(); - if( _chunk->next() ) // Delete later chunks + if( _chunk->next() ) { // Delete later chunks + // reset arena size before delete chunks. Otherwise, the total + // arena size could exceed total chunk size + assert(_area->size_in_bytes() > size_in_bytes(), "Sanity check"); + _area->set_size_in_bytes(size_in_bytes()); _chunk->next_chop(); + } else { + assert(_area->size_in_bytes() == size_in_bytes(), "Sanity check"); + } _area->_chunk = _chunk; // Roll back arena to saved chunk _area->_hwm = _hwm; _area->_max = _max; // clear out this chunk (to detect allocation bugs) if (ZapResourceArea) memset(_hwm, badResourceValue, _max - _hwm); - _area->set_size_in_bytes(size_in_bytes()); } ~DeoptResourceMark() { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/oops/method.cpp --- a/hotspot/src/share/vm/oops/method.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/oops/method.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -1155,8 +1155,12 @@ vmSymbols::SID Method::klass_id_for_intrinsics(Klass* holder) { // if loader is not the default loader (i.e., != NULL), we can't know the intrinsics // because we are not loading from core libraries - if (InstanceKlass::cast(holder)->class_loader() != NULL) + // exception: the AES intrinsics come from lib/ext/sunjce_provider.jar + // which does not use the class default class loader so we check for its loader here + if ((InstanceKlass::cast(holder)->class_loader() != NULL) && + InstanceKlass::cast(holder)->class_loader()->klass()->name() != vmSymbols::sun_misc_Launcher_ExtClassLoader()) { return vmSymbols::NO_SID; // regardless of name, no intrinsics here + } // see if the klass name is well-known: Symbol* klass_name = InstanceKlass::cast(holder)->name(); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/c2_globals.hpp --- a/hotspot/src/share/vm/opto/c2_globals.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/c2_globals.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -439,6 +439,9 @@ product(bool, DoEscapeAnalysis, true, \ "Perform escape analysis") \ \ + develop(bool, ExitEscapeAnalysisOnTimeout, true, \ + "Exit or throw assert in EA when it reaches time limit") \ + \ notproduct(bool, PrintEscapeAnalysis, false, \ "Print the results of escape analysis") \ \ diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/callGenerator.cpp --- a/hotspot/src/share/vm/opto/callGenerator.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/callGenerator.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -670,6 +670,129 @@ } +//------------------------PredictedIntrinsicGenerator------------------------------ +// Internal class which handles all predicted Intrinsic calls. +class PredictedIntrinsicGenerator : public CallGenerator { + CallGenerator* _intrinsic; + CallGenerator* _cg; + +public: + PredictedIntrinsicGenerator(CallGenerator* intrinsic, + CallGenerator* cg) + : CallGenerator(cg->method()) + { + _intrinsic = intrinsic; + _cg = cg; + } + + virtual bool is_virtual() const { return true; } + virtual bool is_inlined() const { return true; } + virtual bool is_intrinsic() const { return true; } + + virtual JVMState* generate(JVMState* jvms); +}; + + +CallGenerator* CallGenerator::for_predicted_intrinsic(CallGenerator* intrinsic, + CallGenerator* cg) { + return new PredictedIntrinsicGenerator(intrinsic, cg); +} + + +JVMState* PredictedIntrinsicGenerator::generate(JVMState* jvms) { + GraphKit kit(jvms); + PhaseGVN& gvn = kit.gvn(); + + CompileLog* log = kit.C->log(); + if (log != NULL) { + log->elem("predicted_intrinsic bci='%d' method='%d'", + jvms->bci(), log->identify(method())); + } + + Node* slow_ctl = _intrinsic->generate_predicate(kit.sync_jvms()); + if (kit.failing()) + return NULL; // might happen because of NodeCountInliningCutoff + + SafePointNode* slow_map = NULL; + JVMState* slow_jvms; + if (slow_ctl != NULL) { + PreserveJVMState pjvms(&kit); + kit.set_control(slow_ctl); + if (!kit.stopped()) { + slow_jvms = _cg->generate(kit.sync_jvms()); + if (kit.failing()) + return NULL; // might happen because of NodeCountInliningCutoff + assert(slow_jvms != NULL, "must be"); + kit.add_exception_states_from(slow_jvms); + kit.set_map(slow_jvms->map()); + if (!kit.stopped()) + slow_map = kit.stop(); + } + } + + if (kit.stopped()) { + // Predicate is always false. + kit.set_jvms(slow_jvms); + return kit.transfer_exceptions_into_jvms(); + } + + // Generate intrinsic code: + JVMState* new_jvms = _intrinsic->generate(kit.sync_jvms()); + if (new_jvms == NULL) { + // Intrinsic failed, so use slow code or make a direct call. + if (slow_map == NULL) { + CallGenerator* cg = CallGenerator::for_direct_call(method()); + new_jvms = cg->generate(kit.sync_jvms()); + } else { + kit.set_jvms(slow_jvms); + return kit.transfer_exceptions_into_jvms(); + } + } + kit.add_exception_states_from(new_jvms); + kit.set_jvms(new_jvms); + + // Need to merge slow and fast? + if (slow_map == NULL) { + // The fast path is the only path remaining. + return kit.transfer_exceptions_into_jvms(); + } + + if (kit.stopped()) { + // Intrinsic method threw an exception, so it's just the slow path after all. + kit.set_jvms(slow_jvms); + return kit.transfer_exceptions_into_jvms(); + } + + // Finish the diamond. + kit.C->set_has_split_ifs(true); // Has chance for split-if optimization + RegionNode* region = new (kit.C) RegionNode(3); + region->init_req(1, kit.control()); + region->init_req(2, slow_map->control()); + kit.set_control(gvn.transform(region)); + Node* iophi = PhiNode::make(region, kit.i_o(), Type::ABIO); + iophi->set_req(2, slow_map->i_o()); + kit.set_i_o(gvn.transform(iophi)); + kit.merge_memory(slow_map->merged_memory(), region, 2); + uint tos = kit.jvms()->stkoff() + kit.sp(); + uint limit = slow_map->req(); + for (uint i = TypeFunc::Parms; i < limit; i++) { + // Skip unused stack slots; fast forward to monoff(); + if (i == tos) { + i = kit.jvms()->monoff(); + if( i >= limit ) break; + } + Node* m = kit.map()->in(i); + Node* n = slow_map->in(i); + if (m != n) { + const Type* t = gvn.type(m)->meet(gvn.type(n)); + Node* phi = PhiNode::make(region, m, t); + phi->set_req(2, n); + kit.map()->set_req(i, gvn.transform(phi)); + } + } + return kit.transfer_exceptions_into_jvms(); +} + //-------------------------UncommonTrapCallGenerator----------------------------- // Internal class which handles all out-of-line calls checking receiver type. class UncommonTrapCallGenerator : public CallGenerator { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/callGenerator.hpp --- a/hotspot/src/share/vm/opto/callGenerator.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/callGenerator.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -143,6 +143,9 @@ // Registry for intrinsics: static CallGenerator* for_intrinsic(ciMethod* m); static void register_intrinsic(ciMethod* m, CallGenerator* cg); + static CallGenerator* for_predicted_intrinsic(CallGenerator* intrinsic, + CallGenerator* cg); + virtual Node* generate_predicate(JVMState* jvms) { return NULL; }; static void print_inlining(ciMethod* callee, int inline_level, int bci, const char* msg) { if (PrintInlining) diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/compile.cpp --- a/hotspot/src/share/vm/opto/compile.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/compile.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -3047,9 +3047,9 @@ case T_LONG: case T_DOUBLE: return (_v._value.j == other._v._value.j); case T_OBJECT: - case T_METADATA: return (_v._metadata == other._v._metadata); case T_ADDRESS: return (_v._value.l == other._v._value.l); case T_VOID: return (_v._value.l == other._v._value.l); // jump-table entries + case T_METADATA: return (_v._metadata == other._v._metadata); default: ShouldNotReachHere(); } return false; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/compile.hpp --- a/hotspot/src/share/vm/opto/compile.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/compile.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -149,7 +149,7 @@ private: BasicType _type; union { - jvalue _value; + jvalue _value; Metadata* _metadata; } _v; int _offset; // offset of this constant (in bytes) relative to the constant table base. diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/doCall.cpp --- a/hotspot/src/share/vm/opto/doCall.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/doCall.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -107,7 +107,17 @@ // intrinsics handle strict f.p. correctly. if (allow_inline && allow_intrinsics) { CallGenerator* cg = find_intrinsic(callee, call_is_virtual); - if (cg != NULL) return cg; + if (cg != NULL) { + if (cg->is_predicted()) { + // Code without intrinsic but, hopefully, inlined. + CallGenerator* inline_cg = this->call_generator(callee, + vtable_index, call_is_virtual, jvms, allow_inline, prof_factor, false); + if (inline_cg != NULL) { + cg = CallGenerator::for_predicted_intrinsic(cg, inline_cg); + } + } + return cg; + } } // Do method handle calls. diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/escape.cpp --- a/hotspot/src/share/vm/opto/escape.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/escape.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -893,12 +893,16 @@ arg_has_oops && (i > TypeFunc::Parms); #ifdef ASSERT if (!(is_arraycopy || - call->as_CallLeaf()->_name != NULL && - (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 || - strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 )) - ) { + (call->as_CallLeaf()->_name != NULL && + (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 || + strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 || + strcmp(call->as_CallLeaf()->_name, "aescrypt_encryptBlock") == 0 || + strcmp(call->as_CallLeaf()->_name, "aescrypt_decryptBlock") == 0 || + strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_encryptAESCrypt") == 0 || + strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_decryptAESCrypt") == 0) + ))) { call->dump(); - assert(false, "EA: unexpected CallLeaf"); + fatal(err_msg_res("EA unexpected CallLeaf %s", call->as_CallLeaf()->_name)); } #endif // Always process arraycopy's destination object since @@ -1080,7 +1084,7 @@ C->log()->text("%s", (iterations >= CG_BUILD_ITER_LIMIT) ? "iterations" : "time"); C->log()->end_elem(" limit'"); } - assert(false, err_msg_res("infinite EA connection graph build (%f sec, %d iterations) with %d nodes and worklist size %d", + assert(ExitEscapeAnalysisOnTimeout, err_msg_res("infinite EA connection graph build (%f sec, %d iterations) with %d nodes and worklist size %d", time.seconds(), iterations, nodes_size(), ptnodes_worklist.length())); // Possible infinite build_connection_graph loop, // bailout (no changes to ideal graph were made). diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/library_call.cpp --- a/hotspot/src/share/vm/opto/library_call.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/library_call.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -44,18 +44,22 @@ public: private: bool _is_virtual; + bool _is_predicted; vmIntrinsics::ID _intrinsic_id; public: - LibraryIntrinsic(ciMethod* m, bool is_virtual, vmIntrinsics::ID id) + LibraryIntrinsic(ciMethod* m, bool is_virtual, bool is_predicted, vmIntrinsics::ID id) : InlineCallGenerator(m), _is_virtual(is_virtual), + _is_predicted(is_predicted), _intrinsic_id(id) { } virtual bool is_intrinsic() const { return true; } virtual bool is_virtual() const { return _is_virtual; } + virtual bool is_predicted() const { return _is_predicted; } virtual JVMState* generate(JVMState* jvms); + virtual Node* generate_predicate(JVMState* jvms); vmIntrinsics::ID intrinsic_id() const { return _intrinsic_id; } }; @@ -83,6 +87,7 @@ int arg_size() const { return callee()->arg_size(); } bool try_to_inline(); + Node* try_to_predicate(); // Helper functions to inline natives void push_result(RegionNode* region, PhiNode* value); @@ -148,6 +153,7 @@ CallJavaNode* generate_method_call_virtual(vmIntrinsics::ID method_id) { return generate_method_call(method_id, true, false); } + Node * load_field_from_object(Node * fromObj, const char * fieldName, const char * fieldTypeString, bool is_exact, bool is_static); Node* make_string_method_node(int opcode, Node* str1_start, Node* cnt1, Node* str2_start, Node* cnt2); Node* make_string_method_node(int opcode, Node* str1, Node* str2); @@ -253,6 +259,10 @@ bool inline_reverseBytes(vmIntrinsics::ID id); bool inline_reference_get(); + bool inline_aescrypt_Block(vmIntrinsics::ID id); + bool inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id); + Node* inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting); + Node* get_key_start_from_aescrypt_object(Node* aescrypt_object); }; @@ -306,6 +316,8 @@ } } + bool is_predicted = false; + switch (id) { case vmIntrinsics::_compareTo: if (!SpecialStringCompareTo) return NULL; @@ -413,6 +425,18 @@ break; #endif + case vmIntrinsics::_aescrypt_encryptBlock: + case vmIntrinsics::_aescrypt_decryptBlock: + if (!UseAESIntrinsics) return NULL; + break; + + case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: + case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: + if (!UseAESIntrinsics) return NULL; + // these two require the predicated logic + is_predicted = true; + break; + default: assert(id <= vmIntrinsics::LAST_COMPILER_INLINE, "caller responsibility"); assert(id != vmIntrinsics::_Object_init && id != vmIntrinsics::_invoke, "enum out of order?"); @@ -444,7 +468,7 @@ if (!InlineUnsafeOps) return NULL; } - return new LibraryIntrinsic(m, is_virtual, (vmIntrinsics::ID) id); + return new LibraryIntrinsic(m, is_virtual, is_predicted, (vmIntrinsics::ID) id); } //----------------------register_library_intrinsics----------------------- @@ -496,6 +520,47 @@ return NULL; } +Node* LibraryIntrinsic::generate_predicate(JVMState* jvms) { + LibraryCallKit kit(jvms, this); + Compile* C = kit.C; + int nodes = C->unique(); +#ifndef PRODUCT + assert(is_predicted(), "sanity"); + if ((PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) && Verbose) { + char buf[1000]; + const char* str = vmIntrinsics::short_name_as_C_string(intrinsic_id(), buf, sizeof(buf)); + tty->print_cr("Predicate for intrinsic %s", str); + } +#endif + + Node* slow_ctl = kit.try_to_predicate(); + if (!kit.failing()) { + if (C->log()) { + C->log()->elem("predicate_intrinsic id='%s'%s nodes='%d'", + vmIntrinsics::name_at(intrinsic_id()), + (is_virtual() ? " virtual='1'" : ""), + C->unique() - nodes); + } + return slow_ctl; // Could be NULL if the check folds. + } + + // The intrinsic bailed out + if (PrintIntrinsics || PrintInlining NOT_PRODUCT( || PrintOptoInlining) ) { + if (jvms->has_method()) { + // Not a root compile. + const char* msg = "failed to generate predicate for intrinsic"; + CompileTask::print_inlining(kit.callee(), jvms->depth() - 1, kit.bci(), msg); + } else { + // Root compile + tty->print("Did not generate predicate for intrinsic %s%s at bci:%d in", + vmIntrinsics::name_at(intrinsic_id()), + (is_virtual() ? " (virtual)" : ""), kit.bci()); + } + } + C->gather_intrinsic_statistics(intrinsic_id(), is_virtual(), Compile::_intrinsic_failed); + return NULL; +} + bool LibraryCallKit::try_to_inline() { // Handle symbolic names for otherwise undistinguished boolean switches: const bool is_store = true; @@ -767,6 +832,14 @@ case vmIntrinsics::_Reference_get: return inline_reference_get(); + case vmIntrinsics::_aescrypt_encryptBlock: + case vmIntrinsics::_aescrypt_decryptBlock: + return inline_aescrypt_Block(intrinsic_id()); + + case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: + case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: + return inline_cipherBlockChaining_AESCrypt(intrinsic_id()); + default: // If you get here, it may be that someone has added a new intrinsic // to the list in vmSymbols.hpp without implementing it here. @@ -780,6 +853,36 @@ } } +Node* LibraryCallKit::try_to_predicate() { + if (!jvms()->has_method()) { + // Root JVMState has a null method. + assert(map()->memory()->Opcode() == Op_Parm, ""); + // Insert the memory aliasing node + set_all_memory(reset_memory()); + } + assert(merged_memory(), ""); + + switch (intrinsic_id()) { + case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: + return inline_cipherBlockChaining_AESCrypt_predicate(false); + case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: + return inline_cipherBlockChaining_AESCrypt_predicate(true); + + default: + // If you get here, it may be that someone has added a new intrinsic + // to the list in vmSymbols.hpp without implementing it here. +#ifndef PRODUCT + if ((PrintMiscellaneous && (Verbose || WizardMode)) || PrintOpto) { + tty->print_cr("*** Warning: Unimplemented predicate for intrinsic %s(%d)", + vmIntrinsics::name_at(intrinsic_id()), intrinsic_id()); + } +#endif + Node* slow_ctl = control(); + set_control(top()); // No fast path instrinsic + return slow_ctl; + } +} + //------------------------------push_result------------------------------ // Helper function for finishing intrinsics. void LibraryCallKit::push_result(RegionNode* region, PhiNode* value) { @@ -3830,7 +3933,7 @@ vtable_index*vtableEntry::size()) * wordSize + vtableEntry::method_offset_in_bytes(); Node* entry_addr = basic_plus_adr(obj_klass, entry_offset); - Node* target_call = make_load(NULL, entry_addr, TypeInstPtr::NOTNULL, T_OBJECT); + Node* target_call = make_load(NULL, entry_addr, TypePtr::NOTNULL, T_ADDRESS); // Compare the target method with the expected method (e.g., Object.hashCode). const TypePtr* native_call_addr = TypeMetadataPtr::make(method); @@ -5613,3 +5716,265 @@ push(result); return true; } + + +Node * LibraryCallKit::load_field_from_object(Node * fromObj, const char * fieldName, const char * fieldTypeString, + bool is_exact=true, bool is_static=false) { + + const TypeInstPtr* tinst = _gvn.type(fromObj)->isa_instptr(); + assert(tinst != NULL, "obj is null"); + assert(tinst->klass()->is_loaded(), "obj is not loaded"); + assert(!is_exact || tinst->klass_is_exact(), "klass not exact"); + + ciField* field = tinst->klass()->as_instance_klass()->get_field_by_name(ciSymbol::make(fieldName), + ciSymbol::make(fieldTypeString), + is_static); + if (field == NULL) return (Node *) NULL; + assert (field != NULL, "undefined field"); + + // Next code copied from Parse::do_get_xxx(): + + // Compute address and memory type. + int offset = field->offset_in_bytes(); + bool is_vol = field->is_volatile(); + ciType* field_klass = field->type(); + assert(field_klass->is_loaded(), "should be loaded"); + const TypePtr* adr_type = C->alias_type(field)->adr_type(); + Node *adr = basic_plus_adr(fromObj, fromObj, offset); + BasicType bt = field->layout_type(); + + // Build the resultant type of the load + const Type *type = TypeOopPtr::make_from_klass(field_klass->as_klass()); + + // Build the load. + Node* loadedField = make_load(NULL, adr, type, bt, adr_type, is_vol); + return loadedField; +} + + +//------------------------------inline_aescrypt_Block----------------------- +bool LibraryCallKit::inline_aescrypt_Block(vmIntrinsics::ID id) { + address stubAddr; + const char *stubName; + assert(UseAES, "need AES instruction support"); + + switch(id) { + case vmIntrinsics::_aescrypt_encryptBlock: + stubAddr = StubRoutines::aescrypt_encryptBlock(); + stubName = "aescrypt_encryptBlock"; + break; + case vmIntrinsics::_aescrypt_decryptBlock: + stubAddr = StubRoutines::aescrypt_decryptBlock(); + stubName = "aescrypt_decryptBlock"; + break; + } + if (stubAddr == NULL) return false; + + // Restore the stack and pop off the arguments. + int nargs = 5; // this + 2 oop/offset combos + assert(callee()->signature()->size() == nargs-1, "encryptBlock has 4 arguments"); + + Node *aescrypt_object = argument(0); + Node *src = argument(1); + Node *src_offset = argument(2); + Node *dest = argument(3); + Node *dest_offset = argument(4); + + // (1) src and dest are arrays. + const Type* src_type = src->Value(&_gvn); + const Type* dest_type = dest->Value(&_gvn); + const TypeAryPtr* top_src = src_type->isa_aryptr(); + const TypeAryPtr* top_dest = dest_type->isa_aryptr(); + assert (top_src != NULL && top_src->klass() != NULL && top_dest != NULL && top_dest->klass() != NULL, "args are strange"); + + // for the quick and dirty code we will skip all the checks. + // we are just trying to get the call to be generated. + Node* src_start = src; + Node* dest_start = dest; + if (src_offset != NULL || dest_offset != NULL) { + assert(src_offset != NULL && dest_offset != NULL, ""); + src_start = array_element_address(src, src_offset, T_BYTE); + dest_start = array_element_address(dest, dest_offset, T_BYTE); + } + + // now need to get the start of its expanded key array + // this requires a newer class file that has this array as littleEndian ints, otherwise we revert to java + Node* k_start = get_key_start_from_aescrypt_object(aescrypt_object); + if (k_start == NULL) return false; + + // Call the stub. + make_runtime_call(RC_LEAF|RC_NO_FP, OptoRuntime::aescrypt_block_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start); + + return true; +} + +//------------------------------inline_cipherBlockChaining_AESCrypt----------------------- +bool LibraryCallKit::inline_cipherBlockChaining_AESCrypt(vmIntrinsics::ID id) { + address stubAddr; + const char *stubName; + + assert(UseAES, "need AES instruction support"); + + switch(id) { + case vmIntrinsics::_cipherBlockChaining_encryptAESCrypt: + stubAddr = StubRoutines::cipherBlockChaining_encryptAESCrypt(); + stubName = "cipherBlockChaining_encryptAESCrypt"; + break; + case vmIntrinsics::_cipherBlockChaining_decryptAESCrypt: + stubAddr = StubRoutines::cipherBlockChaining_decryptAESCrypt(); + stubName = "cipherBlockChaining_decryptAESCrypt"; + break; + } + if (stubAddr == NULL) return false; + + + // Restore the stack and pop off the arguments. + int nargs = 6; // this + oop/offset + len + oop/offset + assert(callee()->signature()->size() == nargs-1, "wrong number of arguments"); + Node *cipherBlockChaining_object = argument(0); + Node *src = argument(1); + Node *src_offset = argument(2); + Node *len = argument(3); + Node *dest = argument(4); + Node *dest_offset = argument(5); + + // (1) src and dest are arrays. + const Type* src_type = src->Value(&_gvn); + const Type* dest_type = dest->Value(&_gvn); + const TypeAryPtr* top_src = src_type->isa_aryptr(); + const TypeAryPtr* top_dest = dest_type->isa_aryptr(); + assert (top_src != NULL && top_src->klass() != NULL + && top_dest != NULL && top_dest->klass() != NULL, "args are strange"); + + // checks are the responsibility of the caller + Node* src_start = src; + Node* dest_start = dest; + if (src_offset != NULL || dest_offset != NULL) { + assert(src_offset != NULL && dest_offset != NULL, ""); + src_start = array_element_address(src, src_offset, T_BYTE); + dest_start = array_element_address(dest, dest_offset, T_BYTE); + } + + // if we are in this set of code, we "know" the embeddedCipher is an AESCrypt object + // (because of the predicated logic executed earlier). + // so we cast it here safely. + // this requires a newer class file that has this array as littleEndian ints, otherwise we revert to java + + Node* embeddedCipherObj = load_field_from_object(cipherBlockChaining_object, "embeddedCipher", "Lcom/sun/crypto/provider/SymmetricCipher;", /*is_exact*/ false); + if (embeddedCipherObj == NULL) return false; + + // cast it to what we know it will be at runtime + const TypeInstPtr* tinst = _gvn.type(cipherBlockChaining_object)->isa_instptr(); + assert(tinst != NULL, "CBC obj is null"); + assert(tinst->klass()->is_loaded(), "CBC obj is not loaded"); + ciKlass* klass_AESCrypt = tinst->klass()->as_instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt")); + if (!klass_AESCrypt->is_loaded()) return false; + + ciInstanceKlass* instklass_AESCrypt = klass_AESCrypt->as_instance_klass(); + const TypeKlassPtr* aklass = TypeKlassPtr::make(instklass_AESCrypt); + const TypeOopPtr* xtype = aklass->as_instance_type(); + Node* aescrypt_object = new(C) CheckCastPPNode(control(), embeddedCipherObj, xtype); + aescrypt_object = _gvn.transform(aescrypt_object); + + // we need to get the start of the aescrypt_object's expanded key array + Node* k_start = get_key_start_from_aescrypt_object(aescrypt_object); + if (k_start == NULL) return false; + + // similarly, get the start address of the r vector + Node* objRvec = load_field_from_object(cipherBlockChaining_object, "r", "[B", /*is_exact*/ false); + if (objRvec == NULL) return false; + Node* r_start = array_element_address(objRvec, intcon(0), T_BYTE); + + // Call the stub, passing src_start, dest_start, k_start, r_start and src_len + make_runtime_call(RC_LEAF|RC_NO_FP, + OptoRuntime::cipherBlockChaining_aescrypt_Type(), + stubAddr, stubName, TypePtr::BOTTOM, + src_start, dest_start, k_start, r_start, len); + + // return is void so no result needs to be pushed + + return true; +} + +//------------------------------get_key_start_from_aescrypt_object----------------------- +Node * LibraryCallKit::get_key_start_from_aescrypt_object(Node *aescrypt_object) { + Node* objAESCryptKey = load_field_from_object(aescrypt_object, "K", "[I", /*is_exact*/ false); + assert (objAESCryptKey != NULL, "wrong version of com.sun.crypto.provider.AESCrypt"); + if (objAESCryptKey == NULL) return (Node *) NULL; + + // now have the array, need to get the start address of the K array + Node* k_start = array_element_address(objAESCryptKey, intcon(0), T_INT); + return k_start; +} + +//----------------------------inline_cipherBlockChaining_AESCrypt_predicate---------------------------- +// Return node representing slow path of predicate check. +// the pseudo code we want to emulate with this predicate is: +// for encryption: +// if (embeddedCipherObj instanceof AESCrypt) do_intrinsic, else do_javapath +// for decryption: +// if ((embeddedCipherObj instanceof AESCrypt) && (cipher!=plain)) do_intrinsic, else do_javapath +// note cipher==plain is more conservative than the original java code but that's OK +// +Node* LibraryCallKit::inline_cipherBlockChaining_AESCrypt_predicate(bool decrypting) { + // First, check receiver for NULL since it is virtual method. + int nargs = arg_size(); + Node* objCBC = argument(0); + _sp += nargs; + objCBC = do_null_check(objCBC, T_OBJECT); + _sp -= nargs; + + if (stopped()) return NULL; // Always NULL + + // Load embeddedCipher field of CipherBlockChaining object. + Node* embeddedCipherObj = load_field_from_object(objCBC, "embeddedCipher", "Lcom/sun/crypto/provider/SymmetricCipher;", /*is_exact*/ false); + + // get AESCrypt klass for instanceOf check + // AESCrypt might not be loaded yet if some other SymmetricCipher got us to this compile point + // will have same classloader as CipherBlockChaining object + const TypeInstPtr* tinst = _gvn.type(objCBC)->isa_instptr(); + assert(tinst != NULL, "CBCobj is null"); + assert(tinst->klass()->is_loaded(), "CBCobj is not loaded"); + + // we want to do an instanceof comparison against the AESCrypt class + ciKlass* klass_AESCrypt = tinst->klass()->as_instance_klass()->find_klass(ciSymbol::make("com/sun/crypto/provider/AESCrypt")); + if (!klass_AESCrypt->is_loaded()) { + // if AESCrypt is not even loaded, we never take the intrinsic fast path + Node* ctrl = control(); + set_control(top()); // no regular fast path + return ctrl; + } + ciInstanceKlass* instklass_AESCrypt = klass_AESCrypt->as_instance_klass(); + + _sp += nargs; // gen_instanceof might do an uncommon trap + Node* instof = gen_instanceof(embeddedCipherObj, makecon(TypeKlassPtr::make(instklass_AESCrypt))); + _sp -= nargs; + Node* cmp_instof = _gvn.transform(new (C) CmpINode(instof, intcon(1))); + Node* bool_instof = _gvn.transform(new (C) BoolNode(cmp_instof, BoolTest::ne)); + + Node* instof_false = generate_guard(bool_instof, NULL, PROB_MIN); + + // for encryption, we are done + if (!decrypting) + return instof_false; // even if it is NULL + + // for decryption, we need to add a further check to avoid + // taking the intrinsic path when cipher and plain are the same + // see the original java code for why. + RegionNode* region = new(C) RegionNode(3); + region->init_req(1, instof_false); + Node* src = argument(1); + Node *dest = argument(4); + Node* cmp_src_dest = _gvn.transform(new (C) CmpPNode(src, dest)); + Node* bool_src_dest = _gvn.transform(new (C) BoolNode(cmp_src_dest, BoolTest::eq)); + Node* src_dest_conjoint = generate_guard(bool_src_dest, NULL, PROB_MIN); + region->init_req(2, src_dest_conjoint); + + record_for_igvn(region); + return _gvn.transform(region); + +} + + diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/loopTransform.cpp --- a/hotspot/src/share/vm/opto/loopTransform.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/loopTransform.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -2715,6 +2715,8 @@ result_mem = new (C) ProjNode(call,TypeFunc::Memory); _igvn.register_new_node_with_optimizer(result_mem); +/* Disable following optimization until proper fix (add missing checks). + // If this fill is tightly coupled to an allocation and overwrites // the whole body, allow it to take over the zeroing. AllocateNode* alloc = AllocateNode::Ideal_allocation(base, this); @@ -2738,6 +2740,7 @@ #endif } } +*/ // Redirect the old control and memory edges that are outside the loop. Node* exit = head->loopexit()->proj_out(0); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/mulnode.cpp --- a/hotspot/src/share/vm/opto/mulnode.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/mulnode.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -479,24 +479,27 @@ return new (phase->C) AndINode(load,phase->intcon(mask&0xFFFF)); // Masking bits off of a Short? Loading a Character does some masking - if (lop == Op_LoadS && (mask & 0xFFFF0000) == 0 ) { - Node *ldus = new (phase->C) LoadUSNode(load->in(MemNode::Control), - load->in(MemNode::Memory), - load->in(MemNode::Address), - load->adr_type()); - ldus = phase->transform(ldus); - return new (phase->C) AndINode(ldus, phase->intcon(mask & 0xFFFF)); - } + if (can_reshape && + load->outcnt() == 1 && load->unique_out() == this) { + if (lop == Op_LoadS && (mask & 0xFFFF0000) == 0 ) { + Node *ldus = new (phase->C) LoadUSNode(load->in(MemNode::Control), + load->in(MemNode::Memory), + load->in(MemNode::Address), + load->adr_type()); + ldus = phase->transform(ldus); + return new (phase->C) AndINode(ldus, phase->intcon(mask & 0xFFFF)); + } - // Masking sign bits off of a Byte? Do an unsigned byte load plus - // an and. - if (lop == Op_LoadB && (mask & 0xFFFFFF00) == 0) { - Node* ldub = new (phase->C) LoadUBNode(load->in(MemNode::Control), - load->in(MemNode::Memory), - load->in(MemNode::Address), - load->adr_type()); - ldub = phase->transform(ldub); - return new (phase->C) AndINode(ldub, phase->intcon(mask)); + // Masking sign bits off of a Byte? Do an unsigned byte load plus + // an and. + if (lop == Op_LoadB && (mask & 0xFFFFFF00) == 0) { + Node* ldub = new (phase->C) LoadUBNode(load->in(MemNode::Control), + load->in(MemNode::Memory), + load->in(MemNode::Address), + load->adr_type()); + ldub = phase->transform(ldub); + return new (phase->C) AndINode(ldub, phase->intcon(mask)); + } } // Masking off sign bits? Dont make them! @@ -923,7 +926,9 @@ set_req(2, phase->intcon(0)); return this; } - else if( ld->Opcode() == Op_LoadUS ) + else if( can_reshape && + ld->Opcode() == Op_LoadUS && + ld->outcnt() == 1 && ld->unique_out() == shl) // Replace zero-extension-load with sign-extension-load return new (phase->C) LoadSNode( ld->in(MemNode::Control), ld->in(MemNode::Memory), diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/runtime.cpp --- a/hotspot/src/share/vm/opto/runtime.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/runtime.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -811,6 +811,48 @@ return TypeFunc::make(domain, range); } +// for aescrypt encrypt/decrypt operations, just three pointers returning void (length is constant) +const TypeFunc* OptoRuntime::aescrypt_block_Type() { + // create input type (domain) + int num_args = 3; + int argcnt = num_args; + const Type** fields = TypeTuple::fields(argcnt); + int argp = TypeFunc::Parms; + fields[argp++] = TypePtr::NOTNULL; // src + fields[argp++] = TypePtr::NOTNULL; // dest + fields[argp++] = TypePtr::NOTNULL; // k array + assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); + const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); + + // no result type needed + fields = TypeTuple::fields(1); + fields[TypeFunc::Parms+0] = NULL; // void + const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields); + return TypeFunc::make(domain, range); +} + +// for cipherBlockChaining calls of aescrypt encrypt/decrypt, four pointers and a length, returning void +const TypeFunc* OptoRuntime::cipherBlockChaining_aescrypt_Type() { + // create input type (domain) + int num_args = 5; + int argcnt = num_args; + const Type** fields = TypeTuple::fields(argcnt); + int argp = TypeFunc::Parms; + fields[argp++] = TypePtr::NOTNULL; // src + fields[argp++] = TypePtr::NOTNULL; // dest + fields[argp++] = TypePtr::NOTNULL; // k array + fields[argp++] = TypePtr::NOTNULL; // r array + fields[argp++] = TypeInt::INT; // src len + assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); + const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); + + // no result type needed + fields = TypeTuple::fields(1); + fields[TypeFunc::Parms+0] = NULL; // void + const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields); + return TypeFunc::make(domain, range); +} + //------------- Interpreter state access for on stack replacement const TypeFunc* OptoRuntime::osr_end_Type() { // create input type (domain) diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/runtime.hpp --- a/hotspot/src/share/vm/opto/runtime.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/runtime.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -280,6 +280,9 @@ static const TypeFunc* array_fill_Type(); + static const TypeFunc* aescrypt_block_Type(); + static const TypeFunc* cipherBlockChaining_aescrypt_Type(); + // leaf on stack replacement interpreter accessor types static const TypeFunc* osr_end_Type(); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/superword.cpp --- a/hotspot/src/share/vm/opto/superword.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/superword.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -1776,16 +1776,15 @@ set_velt_type(n, container_type(n)); } - // Propagate narrowed type backwards through operations + // Propagate integer narrowed type backwards through operations // that don't depend on higher order bits for (int i = _block.length() - 1; i >= 0; i--) { Node* n = _block.at(i); // Only integer types need be examined - const Type* vt = velt_type(n); - if (vt->basic_type() == T_INT) { + const Type* vtn = velt_type(n); + if (vtn->basic_type() == T_INT) { uint start, end; VectorNode::vector_operands(n, &start, &end); - const Type* vt = velt_type(n); for (uint j = start; j < end; j++) { Node* in = n->in(j); @@ -1801,6 +1800,24 @@ } } if (same_type) { + // For right shifts of small integer types (bool, byte, char, short) + // we need precise information about sign-ness. Only Load nodes have + // this information because Store nodes are the same for signed and + // unsigned values. And any arithmetic operation after a load may + // expand a value to signed Int so such right shifts can't be used + // because vector elements do not have upper bits of Int. + const Type* vt = vtn; + if (VectorNode::is_shift(in)) { + Node* load = in->in(1); + if (load->is_Load() && in_bb(load) && (velt_type(load)->basic_type() == T_INT)) { + vt = velt_type(load); + } else if (in->Opcode() != Op_LShiftI) { + // Widen type to Int to avoid creation of right shift vector + // (align + data_size(s1) check in stmts_can_pack() will fail). + // Note, left shifts work regardless type. + vt = TypeInt::INT; + } + } set_velt_type(in, vt); } } @@ -1841,7 +1858,20 @@ // Smallest type containing range of values const Type* SuperWord::container_type(Node* n) { if (n->is_Mem()) { - return Type::get_const_basic_type(n->as_Mem()->memory_type()); + BasicType bt = n->as_Mem()->memory_type(); + if (n->is_Store() && (bt == T_CHAR)) { + // Use T_SHORT type instead of T_CHAR for stored values because any + // preceding arithmetic operation extends values to signed Int. + bt = T_SHORT; + } + if (n->Opcode() == Op_LoadUB) { + // Adjust type for unsigned byte loads, it is important for right shifts. + // T_BOOLEAN is used because there is no basic type representing type + // TypeInt::UBYTE. Use of T_BOOLEAN for vectors is fine because only + // size (one byte) and sign is important. + bt = T_BOOLEAN; + } + return Type::get_const_basic_type(bt); } const Type* t = _igvn.type(n); if (t->basic_type() == T_INT) { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/type.cpp --- a/hotspot/src/share/vm/opto/type.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/type.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -61,7 +61,7 @@ { Bad, T_ILLEGAL, "tuple:", false, Node::NotAMachineReg, relocInfo::none }, // Tuple { Bad, T_ARRAY, "array:", false, Node::NotAMachineReg, relocInfo::none }, // Array -#if defined(IA32) || defined(AMD64) +#ifndef SPARC { Bad, T_ILLEGAL, "vectors:", false, Op_VecS, relocInfo::none }, // VectorS { Bad, T_ILLEGAL, "vectord:", false, Op_VecD, relocInfo::none }, // VectorD { Bad, T_ILLEGAL, "vectorx:", false, Op_VecX, relocInfo::none }, // VectorX diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/opto/vectornode.cpp --- a/hotspot/src/share/vm/opto/vectornode.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/opto/vectornode.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -29,8 +29,7 @@ //------------------------------VectorNode-------------------------------------- // Return the vector operator for the specified scalar operation -// and vector length. Also used to check if the code generator -// supports the vector operation. +// and vector length. int VectorNode::opcode(int sopc, BasicType bt) { switch (sopc) { case Op_AddI: @@ -75,7 +74,7 @@ case T_BYTE: return 0; // Unimplemented case T_CHAR: case T_SHORT: return Op_MulVS; - case T_INT: return Matcher::match_rule_supported(Op_MulVI) ? Op_MulVI : 0; // SSE4_1 + case T_INT: return Op_MulVI; } ShouldNotReachHere(); case Op_MulF: @@ -104,9 +103,9 @@ return Op_LShiftVL; case Op_RShiftI: switch (bt) { - case T_BOOLEAN: + case T_BOOLEAN:return Op_URShiftVB; // boolean is unsigned value + case T_CHAR: return Op_URShiftVS; // char is unsigned value case T_BYTE: return Op_RShiftVB; - case T_CHAR: case T_SHORT: return Op_RShiftVS; case T_INT: return Op_RShiftVI; } @@ -116,10 +115,14 @@ return Op_RShiftVL; case Op_URShiftI: switch (bt) { - case T_BOOLEAN: - case T_BYTE: return Op_URShiftVB; - case T_CHAR: - case T_SHORT: return Op_URShiftVS; + case T_BOOLEAN:return Op_URShiftVB; + case T_CHAR: return Op_URShiftVS; + case T_BYTE: + case T_SHORT: return 0; // Vector logical right shift for signed short + // values produces incorrect Java result for + // negative data because java code should convert + // a short value into int value with sign + // extension before a shift. case T_INT: return Op_URShiftVI; } ShouldNotReachHere(); @@ -157,12 +160,14 @@ return 0; // Unimplemented } +// Also used to check if the code generator +// supports the vector operation. bool VectorNode::implemented(int opc, uint vlen, BasicType bt) { if (is_java_primitive(bt) && (vlen > 1) && is_power_of_2(vlen) && Matcher::vector_size_supported(bt, vlen)) { int vopc = VectorNode::opcode(opc, bt); - return vopc > 0 && Matcher::has_match_rule(vopc); + return vopc > 0 && Matcher::match_rule_supported(vopc); } return false; } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/prims/unsafe.cpp --- a/hotspot/src/share/vm/prims/unsafe.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/prims/unsafe.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -124,6 +124,8 @@ assert((void*)p->obj_field_addr((jint)byte_offset) == ptr_plus_disp, "raw [ptr+disp] must be consistent with oop::field_base"); } + jlong p_size = HeapWordSize * (jlong)(p->size()); + assert(byte_offset < p_size, err_msg("Unsafe access: offset " INT64_FORMAT " > object's size " INT64_FORMAT, byte_offset, p_size)); } #endif if (sizeof(char*) == sizeof(jint)) // (this constant folds!) diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/arguments.cpp --- a/hotspot/src/share/vm/runtime/arguments.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/arguments.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -791,6 +791,10 @@ st->print("jvm_args: "); print_jvm_args_on(st); } st->print_cr("java_command: %s", java_command() ? java_command() : ""); + if (_java_class_path != NULL) { + char* path = _java_class_path->value(); + st->print_cr("java_class_path (initial): %s", strlen(path) == 0 ? "" : path ); + } st->print_cr("Launcher Type: %s", _sun_java_launcher); } @@ -873,7 +877,7 @@ bool result = true; int c = getc(stream); - while(c != EOF) { + while(c != EOF && pos < (int)(sizeof(token)-1)) { if (in_white_space) { if (in_comment) { if (c == '\n') in_comment = false; @@ -2771,6 +2775,11 @@ return JNI_EINVAL; } FLAG_SET_CMDLINE(uintx, MaxDirectMemorySize, max_direct_memory_size); + } else if (match_option(option, "-XX:+UseVMInterruptibleIO", &tail)) { + // NOTE! In JDK 9, the UseVMInterruptibleIO flag will completely go + // away and will cause VM initialization failures! + warning("-XX:+UseVMInterruptibleIO is obsolete and will be removed in a future release."); + FLAG_SET_CMDLINE(bool, UseVMInterruptibleIO, true); } else if (match_option(option, "-XX:", &tail)) { // -XX:xxxx // Skip -XX:Flags= since that case has already been handled if (strncmp(tail, "Flags=", strlen("Flags=")) != 0) { @@ -2786,10 +2795,6 @@ // Change the default value for flags which have different default values // when working with older JDKs. - if (JDK_Version::current().compare_major(6) <= 0 && - FLAG_IS_DEFAULT(UseVMInterruptibleIO)) { - FLAG_SET_DEFAULT(UseVMInterruptibleIO, true); - } #ifdef LINUX if (JDK_Version::current().compare_major(6) <= 0 && FLAG_IS_DEFAULT(UseLinuxPosixThreadCPUClocks)) { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/globals.hpp --- a/hotspot/src/share/vm/runtime/globals.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/globals.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -533,6 +533,9 @@ product(intx, UseSSE, 99, \ "Highest supported SSE instructions set on x86/x64") \ \ + product(bool, UseAES, false, \ + "Control whether AES instructions can be used on x86/x64") \ + \ product(uintx, LargePageSizeInBytes, 0, \ "Large page size (0 to let VM choose the page size") \ \ @@ -635,6 +638,9 @@ product(bool, UseSSE42Intrinsics, false, \ "SSE4.2 versions of intrinsics") \ \ + product(bool, UseAESIntrinsics, false, \ + "use intrinsics for AES versions of crypto") \ + \ develop(bool, TraceCallFixup, false, \ "traces all call fixups") \ \ diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/handles.cpp --- a/hotspot/src/share/vm/runtime/handles.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/handles.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -158,13 +158,18 @@ // Delete later chunks if( _chunk->next() ) { + // reset arena size before delete chunks. Otherwise, the total + // arena size could exceed total chunk size + assert(area->size_in_bytes() > size_in_bytes(), "Sanity check"); + area->set_size_in_bytes(size_in_bytes()); _chunk->next_chop(); + } else { + assert(area->size_in_bytes() == size_in_bytes(), "Sanity check"); } // Roll back arena to saved top markers area->_chunk = _chunk; area->_hwm = _hwm; area->_max = _max; - area->set_size_in_bytes(_size_in_bytes); #ifdef ASSERT // clear out first chunk (to detect allocation bugs) if (ZapVMHandleArea) { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/handles.hpp --- a/hotspot/src/share/vm/runtime/handles.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/handles.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -297,6 +297,7 @@ void set_previous_handle_mark(HandleMark* mark) { _previous_handle_mark = mark; } HandleMark* previous_handle_mark() const { return _previous_handle_mark; } + size_t size_in_bytes() const { return _size_in_bytes; } public: HandleMark(); // see handles_inline.hpp HandleMark(Thread* thread) { initialize(thread); } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/handles.inline.hpp --- a/hotspot/src/share/vm/runtime/handles.inline.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/handles.inline.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -136,13 +136,18 @@ HandleArea* area = _area; // help compilers with poor alias analysis // Delete later chunks if( _chunk->next() ) { + // reset arena size before delete chunks. Otherwise, the total + // arena size could exceed total chunk size + assert(area->size_in_bytes() > size_in_bytes(), "Sanity check"); + area->set_size_in_bytes(size_in_bytes()); _chunk->next_chop(); + } else { + assert(area->size_in_bytes() == size_in_bytes(), "Sanity check"); } // Roll back arena to saved top markers area->_chunk = _chunk; area->_hwm = _hwm; area->_max = _max; - area->set_size_in_bytes(_size_in_bytes); debug_only(area->_handle_mark_nesting--); } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/os.cpp --- a/hotspot/src/share/vm/runtime/os.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/os.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -600,9 +600,7 @@ if (PrintMalloc && tty != NULL) tty->print_cr("os::malloc " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, memblock); // we do not track MallocCushion memory - if (MemTracker::is_on()) { MemTracker::record_malloc((address)memblock, size, memflags, caller == 0 ? CALLER_PC : caller); - } return memblock; } @@ -613,7 +611,7 @@ NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1)); NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size)); void* ptr = ::realloc(memblock, size); - if (ptr != NULL && MemTracker::is_on()) { + if (ptr != NULL) { MemTracker::record_realloc((address)memblock, (address)ptr, size, memflags, caller == 0 ? CALLER_PC : caller); } @@ -1401,7 +1399,7 @@ char* os::reserve_memory(size_t bytes, char* addr, size_t alignment_hint) { char* result = pd_reserve_memory(bytes, addr, alignment_hint); - if (result != NULL && MemTracker::is_on()) { + if (result != NULL) { MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); } @@ -1409,7 +1407,7 @@ } char* os::attempt_reserve_memory_at(size_t bytes, char* addr) { char* result = pd_attempt_reserve_memory_at(bytes, addr); - if (result != NULL && MemTracker::is_on()) { + if (result != NULL) { MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); } return result; @@ -1422,7 +1420,7 @@ bool os::commit_memory(char* addr, size_t bytes, bool executable) { bool res = pd_commit_memory(addr, bytes, executable); - if (res && MemTracker::is_on()) { + if (res) { MemTracker::record_virtual_memory_commit((address)addr, bytes, CALLER_PC); } return res; @@ -1431,7 +1429,7 @@ bool os::commit_memory(char* addr, size_t size, size_t alignment_hint, bool executable) { bool res = os::pd_commit_memory(addr, size, alignment_hint, executable); - if (res && MemTracker::is_on()) { + if (res) { MemTracker::record_virtual_memory_commit((address)addr, size, CALLER_PC); } return res; @@ -1458,8 +1456,9 @@ char *addr, size_t bytes, bool read_only, bool allow_exec) { char* result = pd_map_memory(fd, file_name, file_offset, addr, bytes, read_only, allow_exec); - if (result != NULL && MemTracker::is_on()) { + if (result != NULL) { MemTracker::record_virtual_memory_reserve((address)result, bytes, CALLER_PC); + MemTracker::record_virtual_memory_commit((address)result, bytes, CALLER_PC); } return result; } @@ -1474,6 +1473,7 @@ bool os::unmap_memory(char *addr, size_t bytes) { bool result = pd_unmap_memory(addr, bytes); if (result) { + MemTracker::record_virtual_memory_uncommit((address)addr, bytes); MemTracker::record_virtual_memory_release((address)addr, bytes); } return result; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/stubRoutines.cpp --- a/hotspot/src/share/vm/runtime/stubRoutines.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/stubRoutines.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -120,6 +120,10 @@ address StubRoutines::_arrayof_jshort_fill; address StubRoutines::_arrayof_jint_fill; +address StubRoutines::_aescrypt_encryptBlock = NULL; +address StubRoutines::_aescrypt_decryptBlock = NULL; +address StubRoutines::_cipherBlockChaining_encryptAESCrypt = NULL; +address StubRoutines::_cipherBlockChaining_decryptAESCrypt = NULL; double (* StubRoutines::_intrinsic_log )(double) = NULL; double (* StubRoutines::_intrinsic_log10 )(double) = NULL; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/stubRoutines.hpp --- a/hotspot/src/share/vm/runtime/stubRoutines.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/stubRoutines.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -199,6 +199,11 @@ // zero heap space aligned to jlong (8 bytes) static address _zero_aligned_words; + static address _aescrypt_encryptBlock; + static address _aescrypt_decryptBlock; + static address _cipherBlockChaining_encryptAESCrypt; + static address _cipherBlockChaining_decryptAESCrypt; + // These are versions of the java.lang.Math methods which perform // the same operations as the intrinsic version. They are used for // constant folding in the compiler to ensure equivalence. If the @@ -330,6 +335,11 @@ static address arrayof_jshort_fill() { return _arrayof_jshort_fill; } static address arrayof_jint_fill() { return _arrayof_jint_fill; } + static address aescrypt_encryptBlock() { return _aescrypt_encryptBlock; } + static address aescrypt_decryptBlock() { return _aescrypt_decryptBlock; } + static address cipherBlockChaining_encryptAESCrypt() { return _cipherBlockChaining_encryptAESCrypt; } + static address cipherBlockChaining_decryptAESCrypt() { return _cipherBlockChaining_decryptAESCrypt; } + static address select_fill_function(BasicType t, bool aligned, const char* &name); static address zero_aligned_words() { return _zero_aligned_words; } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/thread.cpp --- a/hotspot/src/share/vm/runtime/thread.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/thread.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -323,12 +323,10 @@ os::initialize_thread(this); #if INCLUDE_NMT - // record thread's native stack, stack grows downward - if (MemTracker::is_on()) { - address stack_low_addr = stack_base() - stack_size(); - MemTracker::record_thread_stack(stack_low_addr, stack_size(), this, + // record thread's native stack, stack grows downward + address stack_low_addr = stack_base() - stack_size(); + MemTracker::record_thread_stack(stack_low_addr, stack_size(), this, CURRENT_PC); - } #endif // INCLUDE_NMT } @@ -345,6 +343,9 @@ if (_stack_base != NULL) { address low_stack_addr = stack_base() - stack_size(); MemTracker::release_thread_stack(low_stack_addr, stack_size(), this); +#ifdef ASSERT + set_stack_base(NULL); +#endif } #endif // INCLUDE_NMT @@ -1521,10 +1522,12 @@ tty->print_cr("terminate thread %p", this); } - // Info NMT that this JavaThread is exiting, its memory - // recorder should be collected + // By now, this thread should already be invisible to safepoint, + // and its per-thread recorder also collected. assert(!is_safepoint_visible(), "wrong state"); - MemTracker::thread_exiting(this); +#if INCLUDE_NMT + assert(get_recorder() == NULL, "Already collected"); +#endif // INCLUDE_NMT // JSR166 -- return the parker to the free list Parker::Release(_parker); @@ -2425,6 +2428,7 @@ } void JavaThread::remove_stack_guard_pages() { + assert(Thread::current() == this, "from different thread"); if (_stack_guard_state == stack_guard_unused) return; address low_addr = stack_base() - stack_size(); size_t len = (StackYellowPages + StackRedPages) * os::vm_page_size(); @@ -4093,7 +4097,10 @@ // Now, this thread is not visible to safepoint p->set_safepoint_visible(false); - + // once the thread becomes safepoint invisible, we can not use its per-thread + // recorder. And Threads::do_threads() no longer walks this thread, so we have + // to release its per-thread recorder here. + MemTracker::thread_exiting(p); } // unlock Threads_lock // Since Events::log uses a lock, we grab it outside the Threads_lock diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/runtime/vmStructs.cpp --- a/hotspot/src/share/vm/runtime/vmStructs.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/runtime/vmStructs.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -59,6 +59,7 @@ #include "memory/generation.hpp" #include "memory/generationSpec.hpp" #include "memory/heap.hpp" +#include "memory/metablock.hpp" #include "memory/space.hpp" #include "memory/tenuredGeneration.hpp" #include "memory/universe.hpp" @@ -249,6 +250,7 @@ typedef Hashtable KlassHashtable; typedef HashtableEntry KlassHashtableEntry; typedef TwoOopHashtable SymbolTwoOopHashtable; +typedef BinaryTreeDictionary MetablockTreeDictionary; //-------------------------------------------------------------------------------- // VM_STRUCTS @@ -1237,7 +1239,15 @@ nonstatic_field(AccessFlags, _flags, jint) \ nonstatic_field(elapsedTimer, _counter, jlong) \ nonstatic_field(elapsedTimer, _active, bool) \ - nonstatic_field(InvocationCounter, _counter, unsigned int) + nonstatic_field(InvocationCounter, _counter, unsigned int) \ + volatile_nonstatic_field(FreeChunk, _size, size_t) \ + nonstatic_field(FreeChunk, _next, FreeChunk*) \ + nonstatic_field(FreeChunk, _prev, FreeChunk*) \ + nonstatic_field(FreeList, _size, size_t) \ + nonstatic_field(FreeList, _size, size_t) \ + nonstatic_field(FreeList, _count, ssize_t) \ + nonstatic_field(FreeList, _count, ssize_t) \ + nonstatic_field(MetablockTreeDictionary, _total_size, size_t) /* NOTE that we do not use the last_entry() macro here; it is used */ /* in vmStructs__.hpp's VM_STRUCTS_OS_CPU macro (and must */ @@ -2080,7 +2090,24 @@ declare_toplevel_type(Universe) \ declare_toplevel_type(vframeArray) \ declare_toplevel_type(vframeArrayElement) \ - declare_toplevel_type(Annotations*) + declare_toplevel_type(Annotations*) \ + \ + /***************/ \ + /* Miscellaneous types */ \ + /***************/ \ + \ + /* freelist */ \ + declare_toplevel_type(FreeChunk*) \ + declare_toplevel_type(Metablock*) \ + declare_toplevel_type(FreeBlockDictionary*) \ + declare_toplevel_type(FreeList*) \ + declare_toplevel_type(FreeList) \ + declare_toplevel_type(FreeBlockDictionary*) \ + declare_toplevel_type(FreeList*) \ + declare_toplevel_type(FreeList) \ + declare_toplevel_type(MetablockTreeDictionary*) \ + declare_type(MetablockTreeDictionary, FreeBlockDictionary) \ + declare_type(MetablockTreeDictionary, FreeBlockDictionary) /* NOTE that we do not use the last_entry() macro here; it is used */ diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/attachListener.cpp --- a/hotspot/src/share/vm/services/attachListener.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/attachListener.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -404,6 +404,8 @@ static void attach_listener_thread_entry(JavaThread* thread, TRAPS) { os::set_priority(thread, NearMaxPriority); + thread->record_stack_base_and_size(); + if (AttachListener::pd_init() != 0) { return; } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memBaseline.cpp --- a/hotspot/src/share/vm/services/memBaseline.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memBaseline.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -40,6 +40,7 @@ {mtSymbol, "Symbol"}, {mtNMT, "Memory Tracking"}, {mtChunk, "Pooled Free Chunks"}, + {mtClassShared,"Shared spaces for classes"}, {mtNone, "Unknown"} // It can happen when type tagging records are lagging // behind }; @@ -55,6 +56,7 @@ _malloc_cs = NULL; _vm_cs = NULL; + _vm_map = NULL; _number_of_classes = 0; _number_of_threads = 0; @@ -72,6 +74,11 @@ _vm_cs = NULL; } + if (_vm_map != NULL) { + delete _vm_map; + _vm_map = NULL; + } + reset(); } @@ -85,6 +92,7 @@ if (_malloc_cs != NULL) _malloc_cs->clear(); if (_vm_cs != NULL) _vm_cs->clear(); + if (_vm_map != NULL) _vm_map->clear(); for (int index = 0; index < NUMBER_OF_MEMORY_TYPE; index ++) { _malloc_data[index].clear(); @@ -94,39 +102,33 @@ } MemBaseline::~MemBaseline() { - if (_malloc_cs != NULL) { - delete _malloc_cs; - } - - if (_vm_cs != NULL) { - delete _vm_cs; - } + clear(); } // baseline malloc'd memory records, generate overall summary and summaries by // memory types bool MemBaseline::baseline_malloc_summary(const MemPointerArray* malloc_records) { - MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); - MemPointerRecord* mptr = (MemPointerRecord*)mItr.current(); + MemPointerArrayIteratorImpl malloc_itr((MemPointerArray*)malloc_records); + MemPointerRecord* malloc_ptr = (MemPointerRecord*)malloc_itr.current(); size_t used_arena_size = 0; int index; - while (mptr != NULL) { - index = flag2index(FLAGS_TO_MEMORY_TYPE(mptr->flags())); - size_t size = mptr->size(); + while (malloc_ptr != NULL) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(malloc_ptr->flags())); + size_t size = malloc_ptr->size(); _total_malloced += size; _malloc_data[index].inc(size); - if (MemPointerRecord::is_arena_record(mptr->flags())) { + if (MemPointerRecord::is_arena_record(malloc_ptr->flags())) { // see if arena size record present - MemPointerRecord* next_p = (MemPointerRecordEx*)mItr.peek_next(); - if (MemPointerRecord::is_arena_size_record(next_p->flags())) { - assert(next_p->is_size_record_of_arena(mptr), "arena records do not match"); - size = next_p->size(); + MemPointerRecord* next_malloc_ptr = (MemPointerRecordEx*)malloc_itr.peek_next(); + if (MemPointerRecord::is_arena_size_record(next_malloc_ptr->flags())) { + assert(next_malloc_ptr->is_size_record_of_arena(malloc_ptr), "arena records do not match"); + size = next_malloc_ptr->size(); _arena_data[index].inc(size); used_arena_size += size; - mItr.next(); + malloc_itr.next(); } } - mptr = (MemPointerRecordEx*)mItr.next(); + malloc_ptr = (MemPointerRecordEx*)malloc_itr.next(); } // substract used arena size to get size of arena chunk in free list @@ -142,20 +144,23 @@ // baseline mmap'd memory records, generate overall summary and summaries by // memory types bool MemBaseline::baseline_vm_summary(const MemPointerArray* vm_records) { - MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); - VMMemRegion* vptr = (VMMemRegion*)vItr.current(); + MemPointerArrayIteratorImpl vm_itr((MemPointerArray*)vm_records); + VMMemRegion* vm_ptr = (VMMemRegion*)vm_itr.current(); int index; - while (vptr != NULL) { - index = flag2index(FLAGS_TO_MEMORY_TYPE(vptr->flags())); - + while (vm_ptr != NULL) { + if (vm_ptr->is_reserved_region()) { + index = flag2index(FLAGS_TO_MEMORY_TYPE(vm_ptr->flags())); // we use the number of thread stack to count threads - if (IS_MEMORY_TYPE(vptr->flags(), mtThreadStack)) { + if (IS_MEMORY_TYPE(vm_ptr->flags(), mtThreadStack)) { _number_of_threads ++; } - _total_vm_reserved += vptr->reserved_size(); - _total_vm_committed += vptr->committed_size(); - _vm_data[index].inc(vptr->reserved_size(), vptr->committed_size()); - vptr = (VMMemRegion*)vItr.next(); + _total_vm_reserved += vm_ptr->size(); + _vm_data[index].inc(vm_ptr->size(), 0); + } else { + _total_vm_committed += vm_ptr->size(); + _vm_data[index].inc(0, vm_ptr->size()); + } + vm_ptr = (VMMemRegion*)vm_itr.next(); } return true; } @@ -165,41 +170,57 @@ bool MemBaseline::baseline_malloc_details(const MemPointerArray* malloc_records) { assert(MemTracker::track_callsite(), "detail tracking is off"); - MemPointerArrayIteratorImpl mItr((MemPointerArray*)malloc_records); - MemPointerRecordEx* mptr = (MemPointerRecordEx*)mItr.current(); - MallocCallsitePointer mp; + MemPointerArrayIteratorImpl malloc_itr(const_cast(malloc_records)); + MemPointerRecordEx* malloc_ptr = (MemPointerRecordEx*)malloc_itr.current(); + MallocCallsitePointer malloc_callsite; + // initailize malloc callsite array if (_malloc_cs == NULL) { _malloc_cs = new (std::nothrow) MemPointerArrayImpl(64); // out of native memory - if (_malloc_cs == NULL) { + if (_malloc_cs == NULL || _malloc_cs->out_of_memory()) { return false; } } else { _malloc_cs->clear(); } + MemPointerArray* malloc_data = const_cast(malloc_records); + + // sort into callsite pc order. Details are aggregated by callsites + malloc_data->sort((FN_SORT)malloc_sort_by_pc); + bool ret = true; + // baseline memory that is totaled over 1 KB - while (mptr != NULL) { - if (!MemPointerRecord::is_arena_size_record(mptr->flags())) { + while (malloc_ptr != NULL) { + if (!MemPointerRecord::is_arena_size_record(malloc_ptr->flags())) { // skip thread stacks - if (!IS_MEMORY_TYPE(mptr->flags(), mtThreadStack)) { - if (mp.addr() != mptr->pc()) { - if ((mp.amount()/K) > 0) { - if (!_malloc_cs->append(&mp)) { - return false; + if (!IS_MEMORY_TYPE(malloc_ptr->flags(), mtThreadStack)) { + if (malloc_callsite.addr() != malloc_ptr->pc()) { + if ((malloc_callsite.amount()/K) > 0) { + if (!_malloc_cs->append(&malloc_callsite)) { + ret = false; + break; } } - mp = MallocCallsitePointer(mptr->pc()); + malloc_callsite = MallocCallsitePointer(malloc_ptr->pc()); } - mp.inc(mptr->size()); + malloc_callsite.inc(malloc_ptr->size()); } } - mptr = (MemPointerRecordEx*)mItr.next(); + malloc_ptr = (MemPointerRecordEx*)malloc_itr.next(); } - if (mp.addr() != 0 && (mp.amount()/K) > 0) { - if (!_malloc_cs->append(&mp)) { + // restore to address order. Snapshot malloc data is maintained in memory + // address order. + malloc_data->sort((FN_SORT)malloc_sort_by_addr); + + if (!ret) { + return false; + } + // deal with last record + if (malloc_callsite.addr() != 0 && (malloc_callsite.amount()/K) > 0) { + if (!_malloc_cs->append(&malloc_callsite)) { return false; } } @@ -210,34 +231,106 @@ bool MemBaseline::baseline_vm_details(const MemPointerArray* vm_records) { assert(MemTracker::track_callsite(), "detail tracking is off"); - VMCallsitePointer vp; - MemPointerArrayIteratorImpl vItr((MemPointerArray*)vm_records); - VMMemRegionEx* vptr = (VMMemRegionEx*)vItr.current(); + VMCallsitePointer vm_callsite; + VMCallsitePointer* cur_callsite = NULL; + MemPointerArrayIteratorImpl vm_itr((MemPointerArray*)vm_records); + VMMemRegionEx* vm_ptr = (VMMemRegionEx*)vm_itr.current(); + // initialize virtual memory map array + if (_vm_map == NULL) { + _vm_map = new (std::nothrow) MemPointerArrayImpl(vm_records->length()); + if (_vm_map == NULL || _vm_map->out_of_memory()) { + return false; + } + } else { + _vm_map->clear(); + } + + // initialize virtual memory callsite array if (_vm_cs == NULL) { _vm_cs = new (std::nothrow) MemPointerArrayImpl(64); - if (_vm_cs == NULL) { + if (_vm_cs == NULL || _vm_cs->out_of_memory()) { return false; } } else { _vm_cs->clear(); } - while (vptr != NULL) { - if (vp.addr() != vptr->pc()) { - if (!_vm_cs->append(&vp)) { + // consolidate virtual memory data + VMMemRegionEx* reserved_rec = NULL; + VMMemRegionEx* committed_rec = NULL; + + // vm_ptr is coming in increasing base address order + while (vm_ptr != NULL) { + if (vm_ptr->is_reserved_region()) { + // consolidate reserved memory regions for virtual memory map. + // The criteria for consolidation is: + // 1. two adjacent reserved memory regions + // 2. belong to the same memory type + // 3. reserved from the same callsite + if (reserved_rec == NULL || + reserved_rec->base() + reserved_rec->size() != vm_ptr->addr() || + FLAGS_TO_MEMORY_TYPE(reserved_rec->flags()) != FLAGS_TO_MEMORY_TYPE(vm_ptr->flags()) || + reserved_rec->pc() != vm_ptr->pc()) { + if (!_vm_map->append(vm_ptr)) { return false; } - vp = VMCallsitePointer(vptr->pc()); + // inserted reserved region, we need the pointer to the element in virtual + // memory map array. + reserved_rec = (VMMemRegionEx*)_vm_map->at(_vm_map->length() - 1); + } else { + reserved_rec->expand_region(vm_ptr->addr(), vm_ptr->size()); } - vp.inc(vptr->size(), vptr->committed_size()); - vptr = (VMMemRegionEx*)vItr.next(); - } - if (vp.addr() != 0) { - if (!_vm_cs->append(&vp)) { + + if (cur_callsite != NULL && !_vm_cs->append(cur_callsite)) { return false; } + vm_callsite = VMCallsitePointer(vm_ptr->pc()); + cur_callsite = &vm_callsite; + vm_callsite.inc(vm_ptr->size(), 0); + } else { + // consolidate committed memory regions for virtual memory map + // The criterial is: + // 1. two adjacent committed memory regions + // 2. committed from the same callsite + if (committed_rec == NULL || + committed_rec->base() + committed_rec->size() != vm_ptr->addr() || + committed_rec->pc() != vm_ptr->pc()) { + if (!_vm_map->append(vm_ptr)) { + return false; } + committed_rec = (VMMemRegionEx*)_vm_map->at(_vm_map->length() - 1); + } else { + committed_rec->expand_region(vm_ptr->addr(), vm_ptr->size()); + } + vm_callsite.inc(0, vm_ptr->size()); + } + vm_ptr = (VMMemRegionEx*)vm_itr.next(); + } + // deal with last record + if (cur_callsite != NULL && !_vm_cs->append(cur_callsite)) { + return false; + } + + // sort it into callsite pc order. Details are aggregated by callsites + _vm_cs->sort((FN_SORT)bl_vm_sort_by_pc); + + // walk the array to consolidate record by pc + MemPointerArrayIteratorImpl itr(_vm_cs); + VMCallsitePointer* callsite_rec = (VMCallsitePointer*)itr.current(); + VMCallsitePointer* next_rec = (VMCallsitePointer*)itr.next(); + while (next_rec != NULL) { + assert(callsite_rec != NULL, "Sanity check"); + if (next_rec->addr() == callsite_rec->addr()) { + callsite_rec->inc(next_rec->reserved_amount(), next_rec->committed_amount()); + itr.remove(); + next_rec = (VMCallsitePointer*)itr.current(); + } else { + callsite_rec = next_rec; + next_rec = (VMCallsitePointer*)itr.next(); + } + } + return true; } @@ -251,12 +344,8 @@ _number_of_classes = SystemDictionary::number_of_classes(); if (!summary_only && MemTracker::track_callsite() && _baselined) { - ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_pc); - ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_pc); _baselined = baseline_malloc_details(snapshot._alloc_ptrs) && baseline_vm_details(snapshot._vm_ptrs); - ((MemPointerArray*)snapshot._alloc_ptrs)->sort((FN_SORT)malloc_sort_by_addr); - ((MemPointerArray*)snapshot._vm_ptrs)->sort((FN_SORT)vm_sort_by_addr); } return _baselined; } @@ -278,7 +367,7 @@ return MemType2NameMap[index]._name; } } - assert(false, "no type"); + assert(false, err_msg("bad type %x", type)); return NULL; } @@ -341,13 +430,6 @@ return UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); } -// sort snapshot mmap'd records in callsite pc order -int MemBaseline::vm_sort_by_pc(const void* p1, const void* p2) { - assert(MemTracker::track_callsite(),"Just check"); - const VMMemRegionEx* mp1 = (const VMMemRegionEx*)p1; - const VMMemRegionEx* mp2 = (const VMMemRegionEx*)p2; - return UNSIGNED_COMPARE(mp1->pc(), mp2->pc()); -} // sort baselined mmap'd records in size (reserved size) order int MemBaseline::bl_vm_sort_by_size(const void* p1, const void* p2) { @@ -376,12 +458,3 @@ return delta; } -// sort snapshot mmap'd records in memory block address order -int MemBaseline::vm_sort_by_addr(const void* p1, const void* p2) { - assert(MemTracker::is_on(), "Just check"); - const VMMemRegion* mp1 = (const VMMemRegion*)p1; - const VMMemRegion* mp2 = (const VMMemRegion*)p2; - int delta = UNSIGNED_COMPARE(mp1->addr(), mp2->addr()); - assert(delta != 0, "dup pointer"); - return delta; -} diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memBaseline.hpp --- a/hotspot/src/share/vm/services/memBaseline.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memBaseline.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -320,6 +320,8 @@ // only available when detail tracking is on. MemPointerArray* _malloc_cs; MemPointerArray* _vm_cs; + // virtual memory map + MemPointerArray* _vm_map; private: static MemType2Name MemType2NameMap[NUMBER_OF_MEMORY_TYPE]; @@ -432,9 +434,6 @@ static int malloc_sort_by_pc(const void* p1, const void* p2); static int malloc_sort_by_addr(const void* p1, const void* p2); - static int vm_sort_by_pc(const void* p1, const void* p2); - static int vm_sort_by_addr(const void* p1, const void* p2); - private: // sorting functions for baselined records static int bl_malloc_sort_by_size(const void* p1, const void* p2); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memPtr.cpp --- a/hotspot/src/share/vm/services/memPtr.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memPtr.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -40,35 +40,3 @@ return seq; } - - -bool VMMemRegion::contains(const VMMemRegion* mr) const { - assert(base() != 0, "Sanity check"); - assert(size() != 0 || committed_size() != 0, - "Sanity check"); - address base_addr = base(); - address end_addr = base_addr + - (is_reserve_record()? reserved_size(): committed_size()); - if (mr->is_reserve_record()) { - if (mr->base() == base_addr && mr->size() == size()) { - // the same range - return true; - } - return false; - } else if (mr->is_commit_record() || mr->is_uncommit_record()) { - assert(mr->base() != 0 && mr->committed_size() > 0, - "bad record"); - return (mr->base() >= base_addr && - (mr->base() + mr->committed_size()) <= end_addr); - } else if (mr->is_type_tagging_record()) { - assert(mr->base() != NULL, "Sanity check"); - return (mr->base() >= base_addr && mr->base() < end_addr); - } else if (mr->is_release_record()) { - assert(mr->base() != 0 && mr->size() > 0, - "bad record"); - return (mr->base() == base_addr && mr->size() == size()); - } else { - ShouldNotReachHere(); - return false; - } -} diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memPtr.hpp --- a/hotspot/src/share/vm/services/memPtr.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memPtr.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -291,6 +291,26 @@ inline bool is_type_tagging_record() const { return is_virtual_memory_type_record(_flags); } + + // if the two memory pointer records actually represent the same + // memory block + inline bool is_same_region(const MemPointerRecord* other) const { + return (addr() == other->addr() && size() == other->size()); + } + + // if this memory region fully contains another one + inline bool contains_region(const MemPointerRecord* other) const { + return contains_region(other->addr(), other->size()); + } + + // if this memory region fully contains specified memory range + inline bool contains_region(address add, size_t sz) const { + return (addr() <= add && addr() + size() >= add + sz); + } + + inline bool contains_address(address add) const { + return (addr() <= add && addr() + size() > add); + } }; // MemPointerRecordEx also records callsite pc, from where @@ -321,66 +341,32 @@ } }; -// a virtual memory region +// a virtual memory region. The region can represent a reserved +// virtual memory region or a committed memory region class VMMemRegion : public MemPointerRecord { - private: - // committed size - size_t _committed_size; - public: - VMMemRegion(): _committed_size(0) { } + VMMemRegion() { } void init(const MemPointerRecord* mp) { - assert(mp->is_vm_pointer(), "not virtual memory pointer"); + assert(mp->is_vm_pointer(), "Sanity check"); _addr = mp->addr(); - if (mp->is_commit_record() || mp->is_uncommit_record()) { - _committed_size = mp->size(); - set_size(_committed_size); - } else { set_size(mp->size()); - _committed_size = 0; - } set_flags(mp->flags()); } VMMemRegion& operator=(const VMMemRegion& other) { MemPointerRecord::operator=(other); - _committed_size = other.committed_size(); return *this; } - inline bool is_reserve_record() const { - return is_virtual_memory_reserve_record(flags()); - } - - inline bool is_release_record() const { - return is_virtual_memory_release_record(flags()); - } - - // resize reserved VM range - inline void set_reserved_size(size_t new_size) { - assert(new_size >= committed_size(), "resize"); - set_size(new_size); + inline bool is_reserved_region() const { + return is_allocation_record(); } - inline void commit(size_t size) { - _committed_size += size; + inline bool is_committed_region() const { + return is_commit_record(); } - inline void uncommit(size_t size) { - if (_committed_size >= size) { - _committed_size -= size; - } else { - _committed_size = 0; - } - } - - /* - * if this virtual memory range covers whole range of - * the other VMMemRegion - */ - bool contains(const VMMemRegion* mr) const; - /* base address of this virtual memory range */ inline address base() const { return addr(); @@ -391,13 +377,28 @@ set_flags(flags() | (f & mt_masks)); } - // release part of memory range - inline void partial_release(address add, size_t sz) { - assert(add >= addr() && add < addr() + size(), "not valid address"); - // for now, it can partially release from the both ends, - // but not in the middle + // expand this region to also cover specified range. + // The range has to be on either end of the memory region. + void expand_region(address addr, size_t sz) { + if (addr < base()) { + assert(addr + sz == base(), "Sanity check"); + _addr = addr; + set_size(size() + sz); + } else { + assert(base() + size() == addr, "Sanity check"); + set_size(size() + sz); + } + } + + // exclude the specified address range from this region. + // The excluded memory range has to be on either end of this memory + // region. + inline void exclude_region(address add, size_t sz) { + assert(is_reserved_region() || is_committed_region(), "Sanity check"); + assert(addr() != NULL && size() != 0, "Sanity check"); + assert(add >= addr() && add < addr() + size(), "Sanity check"); assert(add == addr() || (add + sz) == (addr() + size()), - "release in the middle"); + "exclude in the middle"); if (add == addr()) { set_addr(add + sz); set_size(size() - sz); @@ -405,16 +406,6 @@ set_size(size() - sz); } } - - // the committed size of the virtual memory block - inline size_t committed_size() const { - return _committed_size; - } - - // the reserved size of the virtual memory block - inline size_t reserved_size() const { - return size(); - } }; class VMMemRegionEx : public VMMemRegion { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memRecorder.cpp --- a/hotspot/src/share/vm/services/memRecorder.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memRecorder.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -31,14 +31,19 @@ #include "services/memTracker.hpp" MemPointer* SequencedRecordIterator::next_record() { - MemPointer* itr_cur = _itr.current(); - if (itr_cur == NULL) return NULL; - MemPointer* itr_next = _itr.next(); + MemPointerRecord* itr_cur = (MemPointerRecord*)_itr.current(); + if (itr_cur == NULL) { + return itr_cur; + } + + MemPointerRecord* itr_next = (MemPointerRecord*)_itr.next(); - while (itr_next != NULL && - same_kind((MemPointerRecord*)itr_cur, (MemPointerRecord*)itr_next)) { + // don't collapse virtual memory records + while (itr_next != NULL && !itr_cur->is_vm_pointer() && + !itr_next->is_vm_pointer() && + same_kind(itr_cur, itr_next)) { itr_cur = itr_next; - itr_next = _itr.next(); + itr_next = (MemPointerRecord*)_itr.next(); } return itr_cur; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memRecorder.hpp --- a/hotspot/src/share/vm/services/memRecorder.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memRecorder.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -188,6 +188,7 @@ // Test if the two records are the same kind: the same memory block and allocation // type. inline bool same_kind(const MemPointerRecord* p1, const MemPointerRecord* p2) const { + assert(!p1->is_vm_pointer() && !p2->is_vm_pointer(), "malloc pointer only"); return (p1->addr() == p2->addr() && (p1->flags() &MemPointerRecord::tag_masks) == (p2->flags() & MemPointerRecord::tag_masks)); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memReporter.cpp --- a/hotspot/src/share/vm/services/memReporter.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memReporter.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -51,6 +51,7 @@ report_summaries(baseline); if (!summary_only && MemTracker::track_callsite()) { + report_virtual_memory_map(baseline); report_callsites(baseline); } _outputer.done(); @@ -74,6 +75,25 @@ _outputer.done_category_summary(); } +void BaselineReporter::report_virtual_memory_map(const MemBaseline& baseline) { + _outputer.start_virtual_memory_map(); + MemBaseline* pBL = const_cast(&baseline); + MemPointerArrayIteratorImpl itr = MemPointerArrayIteratorImpl(pBL->_vm_map); + VMMemRegionEx* rgn = (VMMemRegionEx*)itr.current(); + while (rgn != NULL) { + if (rgn->is_reserved_region()) { + _outputer.reserved_memory_region(FLAGS_TO_MEMORY_TYPE(rgn->flags()), + rgn->base(), rgn->base() + rgn->size(), amount_in_current_scale(rgn->size()), rgn->pc()); + } else { + _outputer.committed_memory_region(rgn->base(), rgn->base() + rgn->size(), + amount_in_current_scale(rgn->size()), rgn->pc()); + } + rgn = (VMMemRegionEx*)itr.next(); + } + + _outputer.done_virtual_memory_map(); +} + void BaselineReporter::report_callsites(const MemBaseline& baseline) { _outputer.start_callsite(); MemBaseline* pBL = const_cast(&baseline); @@ -324,6 +344,40 @@ _output->print_cr(" "); } + +void BaselineTTYOutputer::start_virtual_memory_map() { + _output->print_cr("Virtual memory map:"); +} + +void BaselineTTYOutputer::reserved_memory_region(MEMFLAGS type, address base, address end, + size_t size, address pc) { + const char* unit = memory_unit(_scale); + char buf[128]; + int offset; + _output->print_cr(" "); + _output->print_cr("[" PTR_FORMAT " - " PTR_FORMAT "] reserved %d%s for %s", base, end, size, unit, + MemBaseline::type2name(type)); + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr("\t\tfrom [%s+0x%x]", buf, offset); + } +} + +void BaselineTTYOutputer::committed_memory_region(address base, address end, size_t size, address pc) { + const char* unit = memory_unit(_scale); + char buf[128]; + int offset; + _output->print("\t[" PTR_FORMAT " - " PTR_FORMAT "] committed %d%s", base, end, size, unit); + if (os::dll_address_to_function_name(pc, buf, sizeof(buf), &offset)) { + _output->print_cr(" from [%s+0x%x]", buf, offset); + } +} + +void BaselineTTYOutputer::done_virtual_memory_map() { + _output->print_cr(" "); +} + + + void BaselineTTYOutputer::start_callsite() { _output->print_cr("Details:"); _output->print_cr(" "); @@ -337,7 +391,7 @@ size_t malloc_count) { if (malloc_amt > 0) { const char* unit = memory_unit(_scale); - char buf[64]; + char buf[128]; int offset; if (pc == 0) { _output->print("[BOOTSTRAP]%18s", " "); @@ -357,7 +411,7 @@ size_t committed_amt) { if (reserved_amt > 0) { const char* unit = memory_unit(_scale); - char buf[64]; + char buf[128]; int offset; if (pc == 0) { _output->print("[BOOTSTRAP]%18s", " "); @@ -502,7 +556,7 @@ int malloc_diff, int malloc_count_diff) { if (malloc_diff != 0) { const char* unit = memory_unit(_scale); - char buf[64]; + char buf[128]; int offset; if (pc == 0) { _output->print_cr("[BOOTSTRAP]%18s", " "); diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memReporter.hpp --- a/hotspot/src/share/vm/services/memReporter.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memReporter.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -93,6 +93,11 @@ virtual void done_category_summary() = 0; + virtual void start_virtual_memory_map() = 0; + virtual void reserved_memory_region(MEMFLAGS type, address base, address end, size_t size, address pc) = 0; + virtual void committed_memory_region(address base, address end, size_t size, address pc) = 0; + virtual void done_virtual_memory_map() = 0; + /* * Report callsite information */ @@ -136,6 +141,7 @@ private: void report_summaries(const MemBaseline& baseline); + void report_virtual_memory_map(const MemBaseline& baseline); void report_callsites(const MemBaseline& baseline); void diff_summaries(const MemBaseline& cur, const MemBaseline& prev); @@ -251,6 +257,13 @@ void done_category_summary(); + // virtual memory map + void start_virtual_memory_map(); + void reserved_memory_region(MEMFLAGS type, address base, address end, size_t size, address pc); + void committed_memory_region(address base, address end, size_t size, address pc); + void done_virtual_memory_map(); + + /* * Report callsite information */ diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memSnapshot.cpp --- a/hotspot/src/share/vm/services/memSnapshot.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memSnapshot.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -31,6 +31,220 @@ #include "services/memSnapshot.hpp" #include "services/memTracker.hpp" + +bool VMMemPointerIterator::insert_record(MemPointerRecord* rec) { + VMMemRegionEx new_rec; + assert(rec->is_allocation_record() || rec->is_commit_record(), + "Sanity check"); + if (MemTracker::track_callsite()) { + new_rec.init((MemPointerRecordEx*)rec); + } else { + new_rec.init(rec); + } + return insert(&new_rec); +} + +bool VMMemPointerIterator::insert_record_after(MemPointerRecord* rec) { + VMMemRegionEx new_rec; + assert(rec->is_allocation_record() || rec->is_commit_record(), + "Sanity check"); + if (MemTracker::track_callsite()) { + new_rec.init((MemPointerRecordEx*)rec); + } else { + new_rec.init(rec); + } + return insert_after(&new_rec); +} + +// we don't consolidate reserved regions, since they may be categorized +// in different types. +bool VMMemPointerIterator::add_reserved_region(MemPointerRecord* rec) { + assert(rec->is_allocation_record(), "Sanity check"); + VMMemRegion* cur = (VMMemRegion*)current(); + + // we don't have anything yet + if (cur == NULL) { + return insert_record(rec); + } + + assert(cur->is_reserved_region(), "Sanity check"); + // duplicated records + if (cur->is_same_region(rec)) { + return true; + } + assert(cur->base() > rec->addr(), "Just check: locate()"); + assert(rec->addr() + rec->size() <= cur->base(), "Can not overlap"); + return insert_record(rec); +} + +// we do consolidate committed regions +bool VMMemPointerIterator::add_committed_region(MemPointerRecord* rec) { + assert(rec->is_commit_record(), "Sanity check"); + VMMemRegion* cur; + cur = (VMMemRegion*)current(); + assert(cur->is_reserved_region() && cur->contains_region(rec), + "Sanity check"); + + // thread's native stack is always marked as "committed", ignore + // the "commit" operation for creating stack guard pages + if (FLAGS_TO_MEMORY_TYPE(cur->flags()) == mtThreadStack && + FLAGS_TO_MEMORY_TYPE(rec->flags()) != mtThreadStack) { + return true; + } + + cur = (VMMemRegion*)next(); + while (cur != NULL && cur->is_committed_region()) { + // duplicated commit records + if(cur->contains_region(rec)) { + return true; + } + if (cur->base() > rec->addr()) { + // committed regions can not overlap + assert(rec->addr() + rec->size() <= cur->base(), "Can not overlap"); + if (rec->addr() + rec->size() == cur->base()) { + cur->expand_region(rec->addr(), rec->size()); + return true; + } else { + return insert_record(rec); + } + } else if (cur->base() + cur->size() == rec->addr()) { + cur->expand_region(rec->addr(), rec->size()); + VMMemRegion* next_reg = (VMMemRegion*)next(); + // see if we can consolidate next committed region + if (next_reg != NULL && next_reg->is_committed_region() && + next_reg->base() == cur->base() + cur->size()) { + cur->expand_region(next_reg->base(), next_reg->size()); + remove(); + } + return true; + } + cur = (VMMemRegion*)next(); + } + return insert_record(rec); +} + +bool VMMemPointerIterator::remove_uncommitted_region(MemPointerRecord* rec) { + assert(rec->is_uncommit_record(), "sanity check"); + VMMemRegion* cur; + cur = (VMMemRegion*)current(); + assert(cur->is_reserved_region() && cur->contains_region(rec), + "Sanity check"); + // thread's native stack is always marked as "committed", ignore + // the "commit" operation for creating stack guard pages + if (FLAGS_TO_MEMORY_TYPE(cur->flags()) == mtThreadStack && + FLAGS_TO_MEMORY_TYPE(rec->flags()) != mtThreadStack) { + return true; + } + + cur = (VMMemRegion*)next(); + while (cur != NULL && cur->is_committed_region()) { + // region already uncommitted, must be due to duplicated record + if (cur->addr() >= rec->addr() + rec->size()) { + break; + } else if (cur->contains_region(rec)) { + // uncommit whole region + if (cur->is_same_region(rec)) { + remove(); + break; + } else if (rec->addr() == cur->addr() || + rec->addr() + rec->size() == cur->addr() + cur->size()) { + // uncommitted from either end of current memory region. + cur->exclude_region(rec->addr(), rec->size()); + break; + } else { // split the committed region and release the middle + address high_addr = cur->addr() + cur->size(); + size_t sz = high_addr - rec->addr(); + cur->exclude_region(rec->addr(), sz); + sz = high_addr - (rec->addr() + rec->size()); + if (MemTracker::track_callsite()) { + MemPointerRecordEx tmp(rec->addr() + rec->size(), cur->flags(), sz, + ((VMMemRegionEx*)cur)->pc()); + return insert_record_after(&tmp); + } else { + MemPointerRecord tmp(rec->addr() + rec->size(), cur->flags(), sz); + return insert_record_after(&tmp); + } + } + } + cur = (VMMemRegion*)next(); + } + + // we may not find committed record due to duplicated records + return true; +} + +bool VMMemPointerIterator::remove_released_region(MemPointerRecord* rec) { + assert(rec->is_deallocation_record(), "Sanity check"); + VMMemRegion* cur = (VMMemRegion*)current(); + assert(cur->is_reserved_region() && cur->contains_region(rec), + "Sanity check"); +#ifdef ASSERT + VMMemRegion* next_reg = (VMMemRegion*)peek_next(); + // should not have any committed memory in this reserved region + assert(next_reg == NULL || !next_reg->is_committed_region(), "Sanity check"); +#endif + if (rec->is_same_region(cur)) { + remove(); + } else if (rec->addr() == cur->addr() || + rec->addr() + rec->size() == cur->addr() + cur->size()) { + // released region is at either end of this region + cur->exclude_region(rec->addr(), rec->size()); + } else { // split the reserved region and release the middle + address high_addr = cur->addr() + cur->size(); + size_t sz = high_addr - rec->addr(); + cur->exclude_region(rec->addr(), sz); + sz = high_addr - rec->addr() - rec->size(); + if (MemTracker::track_callsite()) { + MemPointerRecordEx tmp(rec->addr() + rec->size(), cur->flags(), sz, + ((VMMemRegionEx*)cur)->pc()); + return insert_reserved_region(&tmp); + } else { + MemPointerRecord tmp(rec->addr() + rec->size(), cur->flags(), sz); + return insert_reserved_region(&tmp); + } + } + return true; +} + +bool VMMemPointerIterator::insert_reserved_region(MemPointerRecord* rec) { + // skip all 'commit' records associated with previous reserved region + VMMemRegion* p = (VMMemRegion*)next(); + while (p != NULL && p->is_committed_region() && + p->base() + p->size() < rec->addr()) { + p = (VMMemRegion*)next(); + } + return insert_record(rec); +} + +bool VMMemPointerIterator::split_reserved_region(VMMemRegion* rgn, address new_rgn_addr, size_t new_rgn_size) { + assert(rgn->contains_region(new_rgn_addr, new_rgn_size), "Not fully contained"); + address pc = (MemTracker::track_callsite() ? ((VMMemRegionEx*)rgn)->pc() : NULL); + if (rgn->base() == new_rgn_addr) { // new region is at the beginning of the region + size_t sz = rgn->size() - new_rgn_size; + // the original region becomes 'new' region + rgn->exclude_region(new_rgn_addr + new_rgn_size, sz); + // remaining becomes next region + MemPointerRecordEx next_rgn(new_rgn_addr + new_rgn_size, rgn->flags(), sz, pc); + return insert_reserved_region(&next_rgn); + } else if (rgn->base() + rgn->size() == new_rgn_addr + new_rgn_size) { + rgn->exclude_region(new_rgn_addr, new_rgn_size); + MemPointerRecordEx next_rgn(new_rgn_addr, rgn->flags(), new_rgn_size, pc); + return insert_reserved_region(&next_rgn); + } else { + // the orginal region will be split into three + address rgn_high_addr = rgn->base() + rgn->size(); + // first region + rgn->exclude_region(new_rgn_addr, (rgn_high_addr - new_rgn_addr)); + // the second region is the new region + MemPointerRecordEx new_rgn(new_rgn_addr, rgn->flags(), new_rgn_size, pc); + if (!insert_reserved_region(&new_rgn)) return false; + // the remaining region + MemPointerRecordEx rem_rgn(new_rgn_addr + new_rgn_size, rgn->flags(), + rgn_high_addr - (new_rgn_addr + new_rgn_size), pc); + return insert_reserved_region(&rem_rgn); + } +} + static int sort_in_seq_order(const void* p1, const void* p2) { assert(p1 != NULL && p2 != NULL, "Sanity check"); const MemPointerRecord* mp1 = (MemPointerRecord*)p1; @@ -61,11 +275,11 @@ } -MemPointerArrayIteratorImpl StagingArea::virtual_memory_record_walker() { +VMRecordIterator StagingArea::virtual_memory_record_walker() { MemPointerArray* arr = vm_data(); // sort into seq number order arr->sort((FN_SORT)sort_in_seq_order); - return MemPointerArrayIteratorImpl(arr); + return VMRecordIterator(arr); } @@ -135,6 +349,8 @@ return false; } } else { + // locate matched record and/or also position the iterator to proper + // location for this incoming record. p2 = (MemPointerRecord*)malloc_staging_itr.locate(p1->addr()); // we have not seen this memory block, so just add to staging area if (p2 == NULL) { @@ -199,7 +415,7 @@ MallocRecordIterator malloc_itr = _staging_area.malloc_record_walker(); bool promoted = false; if (promote_malloc_records(&malloc_itr)) { - MemPointerArrayIteratorImpl vm_itr = _staging_area.virtual_memory_record_walker(); + VMRecordIterator vm_itr = _staging_area.virtual_memory_record_walker(); if (promote_virtual_memory_records(&vm_itr)) { promoted = true; } @@ -218,7 +434,7 @@ matched_rec = (MemPointerRecord*)malloc_snapshot_itr.locate(new_rec->addr()); // found matched memory block if (matched_rec != NULL && new_rec->addr() == matched_rec->addr()) { - // snapshot already contains 'lived' records + // snapshot already contains 'live' records assert(matched_rec->is_allocation_record() || matched_rec->is_arena_size_record(), "Sanity check"); // update block states @@ -277,87 +493,60 @@ bool MemSnapshot::promote_virtual_memory_records(MemPointerArrayIterator* itr) { VMMemPointerIterator vm_snapshot_itr(_vm_ptrs); MemPointerRecord* new_rec = (MemPointerRecord*)itr->current(); - VMMemRegionEx new_vm_rec; - VMMemRegion* matched_rec; + VMMemRegion* reserved_rec; while (new_rec != NULL) { assert(new_rec->is_vm_pointer(), "Sanity check"); - if (MemTracker::track_callsite()) { - new_vm_rec.init((MemPointerRecordEx*)new_rec); - } else { - new_vm_rec.init(new_rec); - } - matched_rec = (VMMemRegion*)vm_snapshot_itr.locate(new_rec->addr()); - if (matched_rec != NULL && - (matched_rec->contains(&new_vm_rec) || matched_rec->base() == new_vm_rec.base())) { + + // locate a reserved region that contains the specified address, or + // the nearest reserved region has base address just above the specified + // address + reserved_rec = (VMMemRegion*)vm_snapshot_itr.locate(new_rec->addr()); + if (reserved_rec != NULL && reserved_rec->contains_region(new_rec)) { // snapshot can only have 'live' records - assert(matched_rec->is_reserve_record(), "Sanity check"); - if (new_vm_rec.is_reserve_record() && matched_rec->base() == new_vm_rec.base()) { - // resize reserved virtual memory range - // resize has to cover committed area - assert(new_vm_rec.size() >= matched_rec->committed_size(), "Sanity check"); - matched_rec->set_reserved_size(new_vm_rec.size()); - } else if (new_vm_rec.is_commit_record()) { - // commit memory inside reserved memory range - assert(new_vm_rec.committed_size() <= matched_rec->reserved_size(), "Sanity check"); - // thread stacks are marked committed, so we ignore 'commit' record for creating - // stack guard pages - if (FLAGS_TO_MEMORY_TYPE(matched_rec->flags()) != mtThreadStack) { - matched_rec->commit(new_vm_rec.committed_size()); - } - } else if (new_vm_rec.is_uncommit_record()) { - if (FLAGS_TO_MEMORY_TYPE(matched_rec->flags()) == mtThreadStack) { - // ignore 'uncommit' record from removing stack guard pages, uncommit - // thread stack as whole - if (matched_rec->committed_size() == new_vm_rec.committed_size()) { - matched_rec->uncommit(new_vm_rec.committed_size()); - } - } else { - // uncommit memory inside reserved memory range - assert(new_vm_rec.committed_size() <= matched_rec->committed_size(), - "Sanity check"); - matched_rec->uncommit(new_vm_rec.committed_size()); - } - } else if (new_vm_rec.is_type_tagging_record()) { - // tag this virtual memory range to a memory type - // can not re-tag a memory range to different type - assert(FLAGS_TO_MEMORY_TYPE(matched_rec->flags()) == mtNone || - FLAGS_TO_MEMORY_TYPE(matched_rec->flags()) == FLAGS_TO_MEMORY_TYPE(new_vm_rec.flags()), - "Sanity check"); - matched_rec->tag(new_vm_rec.flags()); - } else if (new_vm_rec.is_release_record()) { - // release part or whole memory range - if (new_vm_rec.base() == matched_rec->base() && - new_vm_rec.size() == matched_rec->size()) { - // release whole virtual memory range - assert(matched_rec->committed_size() == 0, "Sanity check"); - vm_snapshot_itr.remove(); - } else { - // partial release - matched_rec->partial_release(new_vm_rec.base(), new_vm_rec.size()); - } - } else { - // multiple reserve/commit on the same virtual memory range - assert((new_vm_rec.is_reserve_record() || new_vm_rec.is_commit_record()) && - (new_vm_rec.base() == matched_rec->base() && new_vm_rec.size() == matched_rec->size()), - "Sanity check"); - matched_rec->tag(new_vm_rec.flags()); - } - } else { - // no matched record - if (new_vm_rec.is_reserve_record()) { - if (matched_rec == NULL || matched_rec->base() > new_vm_rec.base()) { - if (!vm_snapshot_itr.insert(&new_vm_rec)) { - return false; - } - } else { - if (!vm_snapshot_itr.insert_after(&new_vm_rec)) { + assert(reserved_rec->is_reserved_region(), "Sanity check"); + if (new_rec->is_allocation_record()) { + if (!reserved_rec->is_same_region(new_rec)) { + // only deal with split a bigger reserved region into smaller regions. + // So far, CDS is the only use case. + if (!vm_snapshot_itr.split_reserved_region(reserved_rec, new_rec->addr(), new_rec->size())) { return false; } } - } else { - // throw out obsolete records, which are the commit/uncommit/release/tag records - // on memory regions that are already released. - } + } else if (new_rec->is_uncommit_record()) { + if (!vm_snapshot_itr.remove_uncommitted_region(new_rec)) { + return false; + } + } else if (new_rec->is_commit_record()) { + // insert or expand existing committed region to cover this + // newly committed region + if (!vm_snapshot_itr.add_committed_region(new_rec)) { + return false; + } + } else if (new_rec->is_deallocation_record()) { + // release part or all memory region + if (!vm_snapshot_itr.remove_released_region(new_rec)) { + return false; + } + } else if (new_rec->is_type_tagging_record()) { + // tag this reserved virtual memory range to a memory type. Can not re-tag a memory range + // to different type. + assert(FLAGS_TO_MEMORY_TYPE(reserved_rec->flags()) == mtNone || + FLAGS_TO_MEMORY_TYPE(reserved_rec->flags()) == FLAGS_TO_MEMORY_TYPE(new_rec->flags()), + "Sanity check"); + reserved_rec->tag(new_rec->flags()); + } else { + ShouldNotReachHere(); + } + } else { + /* + * The assertion failure indicates mis-matched virtual memory records. The likely + * scenario is, that some virtual memory operations are not going through os::xxxx_memory() + * api, which have to be tracked manually. (perfMemory is an example). + */ + assert(new_rec->is_allocation_record(), "Sanity check"); + if (!vm_snapshot_itr.add_reserved_region(new_rec)) { + return false; + } } new_rec = (MemPointerRecord*)itr->next(); } @@ -433,5 +622,33 @@ cur = (MemPointerRecord*)vm_itr.next(); } } + +void MemSnapshot::dump_all_vm_pointers() { + MemPointerArrayIteratorImpl itr(_vm_ptrs); + VMMemRegion* ptr = (VMMemRegion*)itr.current(); + tty->print_cr("dump virtual memory pointers:"); + while (ptr != NULL) { + if (ptr->is_committed_region()) { + tty->print("\t"); + } + tty->print("[" PTR_FORMAT " - " PTR_FORMAT "] [%x]", ptr->addr(), + (ptr->addr() + ptr->size()), ptr->flags()); + + if (MemTracker::track_callsite()) { + VMMemRegionEx* ex = (VMMemRegionEx*)ptr; + if (ex->pc() != NULL) { + char buf[1024]; + if (os::dll_address_to_function_name(ex->pc(), buf, sizeof(buf), NULL)) { + tty->print_cr("\t%s", buf); + } else { + tty->print_cr(""); + } + } + } + + ptr = (VMMemRegion*)itr.next(); + } + tty->flush(); +} #endif // ASSERT diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memSnapshot.hpp --- a/hotspot/src/share/vm/services/memSnapshot.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memSnapshot.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -111,33 +111,41 @@ MemPointerIterator(arr) { } - // locate an existing record that contains specified address, or - // the record, where the record with specified address, should - // be inserted. - // virtual memory record array is sorted in address order, so - // binary search is performed + // locate an existing reserved memory region that contains specified address, + // or the reserved region just above this address, where the incoming + // reserved region should be inserted. virtual MemPointer* locate(address addr) { - int index_low = 0; - int index_high = _array->length(); - int index_mid = (index_high + index_low) / 2; - int r = 1; - while (index_low < index_high && (r = compare(index_mid, addr)) != 0) { - if (r > 0) { - index_high = index_mid; - } else { - index_low = index_mid; + reset(); + VMMemRegion* reg = (VMMemRegion*)current(); + while (reg != NULL) { + if (reg->is_reserved_region()) { + if (reg->contains_address(addr) || addr < reg->base()) { + return reg; } - index_mid = (index_high + index_low) / 2; } - if (r == 0) { - // update current location - _pos = index_mid; - return _array->at(index_mid); - } else { + reg = (VMMemRegion*)next(); + } return NULL; } - } + + // following methods update virtual memory in the context + // of 'current' position, which is properly positioned by + // callers via locate method. + bool add_reserved_region(MemPointerRecord* rec); + bool add_committed_region(MemPointerRecord* rec); + bool remove_uncommitted_region(MemPointerRecord* rec); + bool remove_released_region(MemPointerRecord* rec); + // split a reserved region to create a new memory region with specified base and size + bool split_reserved_region(VMMemRegion* rgn, address new_rgn_addr, size_t new_rgn_size); + private: + bool insert_record(MemPointerRecord* rec); + bool insert_record_after(MemPointerRecord* rec); + + bool insert_reserved_region(MemPointerRecord* rec); + + // reset current position + inline void reset() { _pos = 0; } #ifdef ASSERT virtual bool is_dup_pointer(const MemPointer* ptr1, const MemPointer* ptr2) const { @@ -154,32 +162,17 @@ (p1->flags() & MemPointerRecord::tag_masks) == MemPointerRecord::tag_release; } #endif - // compare if an address falls into a memory region, - // return 0, if the address falls into a memory region at specified index - // return 1, if memory region pointed by specified index is higher than the address - // return -1, if memory region pointed by specified index is lower than the address - int compare(int index, address addr) const { - VMMemRegion* r = (VMMemRegion*)_array->at(index); - assert(r->is_reserve_record(), "Sanity check"); - if (r->addr() > addr) { - return 1; - } else if (r->addr() + r->reserved_size() <= addr) { - return -1; - } else { - return 0; - } - } }; class MallocRecordIterator : public MemPointerArrayIterator { - private: + protected: MemPointerArrayIteratorImpl _itr; public: MallocRecordIterator(MemPointerArray* arr) : _itr(arr) { } - MemPointer* current() const { + virtual MemPointer* current() const { MemPointerRecord* cur = (MemPointerRecord*)_itr.current(); assert(cur == NULL || !cur->is_vm_pointer(), "seek error"); MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next(); @@ -194,7 +187,7 @@ } } - MemPointer* next() { + virtual MemPointer* next() { MemPointerRecord* cur = (MemPointerRecord*)_itr.current(); assert(cur == NULL || !cur->is_vm_pointer(), "Sanity check"); MemPointerRecord* next = (MemPointerRecord*)_itr.next(); @@ -214,6 +207,63 @@ bool insert_after(MemPointer* ptr) { ShouldNotReachHere(); return false; } }; +// collapse duplicated records. Eliminating duplicated records here, is much +// cheaper than during promotion phase. However, it does have limitation - it +// can only eliminate duplicated records within the generation, there are +// still chances seeing duplicated records during promotion. +// We want to use the record with higher sequence number, because it has +// more accurate callsite pc. +class VMRecordIterator : public MallocRecordIterator { + public: + VMRecordIterator(MemPointerArray* arr) : MallocRecordIterator(arr) { + MemPointerRecord* cur = (MemPointerRecord*)_itr.current(); + MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next(); + while (next != NULL) { + assert(cur != NULL, "Sanity check"); + assert(((SeqMemPointerRecord*)next)->seq() > ((SeqMemPointerRecord*)cur)->seq(), + "pre-sort order"); + + if (is_duplicated_record(cur, next)) { + _itr.next(); + next = (MemPointerRecord*)_itr.peek_next(); + } else { + break; + } + } + } + + virtual MemPointer* current() const { + return _itr.current(); + } + + // get next record, but skip the duplicated records + virtual MemPointer* next() { + MemPointerRecord* cur = (MemPointerRecord*)_itr.next(); + MemPointerRecord* next = (MemPointerRecord*)_itr.peek_next(); + while (next != NULL) { + assert(cur != NULL, "Sanity check"); + assert(((SeqMemPointerRecord*)next)->seq() > ((SeqMemPointerRecord*)cur)->seq(), + "pre-sort order"); + + if (is_duplicated_record(cur, next)) { + _itr.next(); + cur = next; + next = (MemPointerRecord*)_itr.peek_next(); + } else { + break; + } + } + return cur; + } + + private: + bool is_duplicated_record(MemPointerRecord* p1, MemPointerRecord* p2) const { + bool ret = (p1->addr() == p2->addr() && p1->size() == p2->size() && p1->flags() == p2->flags()); + assert(!(ret && FLAGS_TO_MEMORY_TYPE(p1->flags()) == mtThreadStack), "dup on stack record"); + return ret; + } +}; + class StagingArea : public _ValueObj { private: MemPointerArray* _malloc_data; @@ -233,7 +283,8 @@ return MallocRecordIterator(malloc_data()); } - MemPointerArrayIteratorImpl virtual_memory_record_walker(); + VMRecordIterator virtual_memory_record_walker(); + bool init(); void clear() { assert(_malloc_data != NULL && _vm_data != NULL, "Just check"); @@ -293,6 +344,8 @@ NOT_PRODUCT(void check_staging_data();) NOT_PRODUCT(void check_malloc_pointers();) NOT_PRODUCT(bool has_allocation_record(address addr);) + // dump all virtual memory pointers in snapshot + DEBUG_ONLY( void dump_all_vm_pointers();) private: // copy pointer data from src to dest @@ -302,5 +355,4 @@ bool promote_virtual_memory_records(MemPointerArrayIterator* itr); }; - #endif // SHARE_VM_SERVICES_MEM_SNAPSHOT_HPP diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memTracker.cpp --- a/hotspot/src/share/vm/services/memTracker.cpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memTracker.cpp Wed Jul 05 18:27:34 2017 +0200 @@ -364,7 +364,7 @@ if (thread != NULL) { if (thread->is_Java_thread() && ((JavaThread*)thread)->is_safepoint_visible()) { - JavaThread* java_thread = static_cast(thread); + JavaThread* java_thread = (JavaThread*)thread; JavaThreadState state = java_thread->thread_state(); if (SafepointSynchronize::safepoint_safe(java_thread, state)) { // JavaThreads that are safepoint safe, can run through safepoint, @@ -472,6 +472,8 @@ // it should guarantee that NMT is fully sync-ed. ThreadCritical tc; + SequenceGenerator::reset(); + // walk all JavaThreads to collect recorders SyncThreadRecorderClosure stc; Threads::threads_do(&stc); @@ -484,11 +486,12 @@ pending_recorders = _global_recorder; _global_recorder = NULL; } - SequenceGenerator::reset(); // check _worker_thread with lock to avoid racing condition if (_worker_thread != NULL) { _worker_thread->at_sync_point(pending_recorders); } + + assert(SequenceGenerator::peek() == 1, "Should not have memory activities during sync-point"); } } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/src/share/vm/services/memTracker.hpp --- a/hotspot/src/share/vm/services/memTracker.hpp Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/src/share/vm/services/memTracker.hpp Wed Jul 05 18:27:34 2017 +0200 @@ -113,8 +113,10 @@ #include "thread_solaris.inline.hpp" #endif -#ifdef _DEBUG - #define DEBUG_CALLER_PC os::get_caller_pc(3) +extern bool NMT_track_callsite; + +#ifdef ASSERT + #define DEBUG_CALLER_PC (NMT_track_callsite ? os::get_caller_pc(2) : 0) #else #define DEBUG_CALLER_PC 0 #endif @@ -261,7 +263,7 @@ // record a 'malloc' call static inline void record_malloc(address addr, size_t size, MEMFLAGS flags, address pc = 0, Thread* thread = NULL) { - if (NMT_CAN_TRACK(flags)) { + if (is_on() && NMT_CAN_TRACK(flags)) { assert(size > 0, "Sanity check"); create_memory_record(addr, (flags|MemPointerRecord::malloc_tag()), size, pc, thread); } @@ -275,7 +277,7 @@ // record a 'realloc' call static inline void record_realloc(address old_addr, address new_addr, size_t size, MEMFLAGS flags, address pc = 0, Thread* thread = NULL) { - if (is_on()) { + if (is_on() && NMT_CAN_TRACK(flags)) { assert(size > 0, "Sanity check"); record_free(old_addr, flags, thread); record_malloc(new_addr, size, flags, pc, thread); @@ -317,6 +319,7 @@ static inline void release_thread_stack(address addr, size_t size, Thread* thr) { if (is_on()) { assert(size > 0 && thr != NULL, "Sanity check"); + assert(!thr->is_Java_thread(), "too early"); create_memory_record(addr, MemPointerRecord::virtual_memory_uncommit_tag() | mtThreadStack, size, DEBUG_CALLER_PC, thr); create_memory_record(addr, MemPointerRecord::virtual_memory_release_tag() | mtThreadStack, @@ -326,11 +329,11 @@ // record a virtual memory 'commit' call static inline void record_virtual_memory_commit(address addr, size_t size, - address pc = 0, Thread* thread = NULL) { + address pc, Thread* thread = NULL) { if (is_on()) { assert(size > 0, "Sanity check"); create_memory_record(addr, MemPointerRecord::virtual_memory_commit_tag(), - size, DEBUG_CALLER_PC, thread); + size, pc, thread); } } diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/compiler/6340864/TestByteVect.java --- a/hotspot/test/compiler/6340864/TestByteVect.java Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/test/compiler/6340864/TestByteVect.java Wed Jul 05 18:27:34 2017 +0200 @@ -33,7 +33,7 @@ public class TestByteVect { private static final int ARRLEN = 997; private static final int ITERS = 11000; - private static final int ADD_INIT = 0; + private static final int ADD_INIT = 63; private static final int BIT_MASK = 0xB7; private static final int VALUE = 3; private static final int SHIFT = 8; @@ -76,6 +76,7 @@ test_subc(a0, a1); test_subv(a0, a1, (byte)VALUE); test_suba(a0, a1, a2); + test_mulc(a0, a1); test_mulv(a0, a1, (byte)VALUE); test_mula(a0, a1, a2); @@ -88,6 +89,7 @@ test_divc_n(a0, a1); test_divv(a0, a1, (byte)-VALUE); test_diva(a0, a1, a3); + test_andc(a0, a1); test_andv(a0, a1, (byte)BIT_MASK); test_anda(a0, a1, a4); @@ -97,30 +99,49 @@ test_xorc(a0, a1); test_xorv(a0, a1, (byte)BIT_MASK); test_xora(a0, a1, a4); + test_sllc(a0, a1); test_sllv(a0, a1, VALUE); test_srlc(a0, a1); test_srlv(a0, a1, VALUE); test_srac(a0, a1); test_srav(a0, a1, VALUE); + test_sllc_n(a0, a1); test_sllv(a0, a1, -VALUE); test_srlc_n(a0, a1); test_srlv(a0, a1, -VALUE); test_srac_n(a0, a1); test_srav(a0, a1, -VALUE); + test_sllc_o(a0, a1); test_sllv(a0, a1, SHIFT); test_srlc_o(a0, a1); test_srlv(a0, a1, SHIFT); test_srac_o(a0, a1); test_srav(a0, a1, SHIFT); + test_sllc_on(a0, a1); test_sllv(a0, a1, -SHIFT); test_srlc_on(a0, a1); test_srlv(a0, a1, -SHIFT); test_srac_on(a0, a1); test_srav(a0, a1, -SHIFT); + + test_sllc_add(a0, a1); + test_sllv_add(a0, a1, ADD_INIT); + test_srlc_add(a0, a1); + test_srlv_add(a0, a1, ADD_INIT); + test_srac_add(a0, a1); + test_srav_add(a0, a1, ADD_INIT); + + test_sllc_and(a0, a1); + test_sllv_and(a0, a1, BIT_MASK); + test_srlc_and(a0, a1); + test_srlv_and(a0, a1, BIT_MASK); + test_srac_and(a0, a1); + test_srav_and(a0, a1, BIT_MASK); + test_pack2(p2, a1); test_unpack2(a0, p2); test_pack2_swap(p2, a1); @@ -369,6 +390,60 @@ errn += verify("test_srav_on: ", i, a0[i], (byte)((byte)(ADD_INIT+i)>>(-SHIFT))); } + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + test_pack2(p2, a1); for (int i=0; i>>b); } } + static void test_srlc_add(byte[] a0, byte[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(byte[] a0, byte[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(byte[] a0, byte[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(byte[] a0, byte[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] & b)>>>VALUE); + } + } static void test_srac(byte[] a0, byte[] a1) { for (int i = 0; i < a0.length; i+=1) { @@ -1088,6 +1281,26 @@ a0[i] = (byte)(a1[i]>>b); } } + static void test_srac_add(byte[] a0, byte[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(byte[] a0, byte[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(byte[] a0, byte[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(byte[] a0, byte[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (byte)((a1[i] & b)>>VALUE); + } + } static void test_pack2(short[] p2, byte[] a1) { if (p2.length*2 > a1.length) return; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/compiler/6340864/TestIntVect.java --- a/hotspot/test/compiler/6340864/TestIntVect.java Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/test/compiler/6340864/TestIntVect.java Wed Jul 05 18:27:34 2017 +0200 @@ -74,6 +74,7 @@ test_subc(a0, a1); test_subv(a0, a1, (int)VALUE); test_suba(a0, a1, a2); + test_mulc(a0, a1); test_mulv(a0, a1, (int)VALUE); test_mula(a0, a1, a2); @@ -86,6 +87,7 @@ test_divc_n(a0, a1); test_divv(a0, a1, (int)-VALUE); test_diva(a0, a1, a3); + test_andc(a0, a1); test_andv(a0, a1, (int)BIT_MASK); test_anda(a0, a1, a4); @@ -95,30 +97,49 @@ test_xorc(a0, a1); test_xorv(a0, a1, (int)BIT_MASK); test_xora(a0, a1, a4); + test_sllc(a0, a1); test_sllv(a0, a1, VALUE); test_srlc(a0, a1); test_srlv(a0, a1, VALUE); test_srac(a0, a1); test_srav(a0, a1, VALUE); + test_sllc_n(a0, a1); test_sllv(a0, a1, -VALUE); test_srlc_n(a0, a1); test_srlv(a0, a1, -VALUE); test_srac_n(a0, a1); test_srav(a0, a1, -VALUE); + test_sllc_o(a0, a1); test_sllv(a0, a1, SHIFT); test_srlc_o(a0, a1); test_srlv(a0, a1, SHIFT); test_srac_o(a0, a1); test_srav(a0, a1, SHIFT); + test_sllc_on(a0, a1); test_sllv(a0, a1, -SHIFT); test_srlc_on(a0, a1); test_srlv(a0, a1, -SHIFT); test_srac_on(a0, a1); test_srav(a0, a1, -SHIFT); + + test_sllc_add(a0, a1); + test_sllv_add(a0, a1, ADD_INIT); + test_srlc_add(a0, a1); + test_srlv_add(a0, a1, ADD_INIT); + test_srac_add(a0, a1); + test_srav_add(a0, a1, ADD_INIT); + + test_sllc_and(a0, a1); + test_sllv_and(a0, a1, BIT_MASK); + test_srlc_and(a0, a1); + test_srlv_and(a0, a1, BIT_MASK); + test_srac_and(a0, a1); + test_srav_and(a0, a1, BIT_MASK); + test_pack2(p2, a1); test_unpack2(a0, p2); test_pack2_swap(p2, a1); @@ -359,6 +380,60 @@ errn += verify("test_srav_on: ", i, a0[i], (int)((int)(ADD_INIT+i)>>(-SHIFT))); } + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + test_pack2(p2, a1); for (int i=0; i>>b); } } + static void test_srlc_add(int[] a0, int[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(int[] a0, int[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(int[] a0, int[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(int[] a0, int[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] & b)>>>VALUE); + } + } static void test_srac(int[] a0, int[] a1) { for (int i = 0; i < a0.length; i+=1) { @@ -960,6 +1153,26 @@ a0[i] = (int)(a1[i]>>b); } } + static void test_srac_add(int[] a0, int[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(int[] a0, int[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(int[] a0, int[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(int[] a0, int[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (int)((a1[i] & b)>>VALUE); + } + } static void test_pack2(long[] p2, int[] a1) { if (p2.length*2 > a1.length) return; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/compiler/6340864/TestLongVect.java --- a/hotspot/test/compiler/6340864/TestLongVect.java Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/test/compiler/6340864/TestLongVect.java Wed Jul 05 18:27:34 2017 +0200 @@ -73,6 +73,7 @@ test_subc(a0, a1); test_subv(a0, a1, (long)VALUE); test_suba(a0, a1, a2); + test_mulc(a0, a1); test_mulv(a0, a1, (long)VALUE); test_mula(a0, a1, a2); @@ -85,6 +86,7 @@ test_divc_n(a0, a1); test_divv(a0, a1, (long)-VALUE); test_diva(a0, a1, a3); + test_andc(a0, a1); test_andv(a0, a1, (long)BIT_MASK); test_anda(a0, a1, a4); @@ -94,30 +96,48 @@ test_xorc(a0, a1); test_xorv(a0, a1, (long)BIT_MASK); test_xora(a0, a1, a4); + test_sllc(a0, a1); test_sllv(a0, a1, VALUE); test_srlc(a0, a1); test_srlv(a0, a1, VALUE); test_srac(a0, a1); test_srav(a0, a1, VALUE); + test_sllc_n(a0, a1); test_sllv(a0, a1, -VALUE); test_srlc_n(a0, a1); test_srlv(a0, a1, -VALUE); test_srac_n(a0, a1); test_srav(a0, a1, -VALUE); + test_sllc_o(a0, a1); test_sllv(a0, a1, SHIFT); test_srlc_o(a0, a1); test_srlv(a0, a1, SHIFT); test_srac_o(a0, a1); test_srav(a0, a1, SHIFT); + test_sllc_on(a0, a1); test_sllv(a0, a1, -SHIFT); test_srlc_on(a0, a1); test_srlv(a0, a1, -SHIFT); test_srac_on(a0, a1); test_srav(a0, a1, -SHIFT); + + test_sllc_add(a0, a1); + test_sllv_add(a0, a1, ADD_INIT); + test_srlc_add(a0, a1); + test_srlv_add(a0, a1, ADD_INIT); + test_srac_add(a0, a1); + test_srav_add(a0, a1, ADD_INIT); + + test_sllc_and(a0, a1); + test_sllv_and(a0, a1, BIT_MASK); + test_srlc_and(a0, a1); + test_srlv_and(a0, a1, BIT_MASK); + test_srac_and(a0, a1); + test_srav_and(a0, a1, BIT_MASK); } // Test and verify results System.out.println("Verification"); @@ -354,6 +374,60 @@ errn += verify("test_srav_on: ", i, a0[i], (long)((long)(ADD_INIT+i)>>(-SHIFT))); } + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + } if (errn > 0) @@ -696,6 +770,84 @@ end = System.currentTimeMillis(); System.out.println("test_srav_on: " + (end - start)); + start = System.currentTimeMillis(); + for (int i=0; i>>b); } } + static void test_srlc_add(long[] a0, long[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(long[] a0, long[] a1, long b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(long[] a0, long[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(long[] a0, long[] a1, long b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] & b)>>>VALUE); + } + } static void test_srac(long[] a0, long[] a1) { for (int i = 0; i < a0.length; i+=1) { @@ -906,6 +1098,26 @@ a0[i] = (long)(a1[i]>>b); } } + static void test_srac_add(long[] a0, long[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(long[] a0, long[] a1, long b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(long[] a0, long[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(long[] a0, long[] a1, long b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (long)((a1[i] & b)>>VALUE); + } + } static int verify(String text, int i, long elem, long val) { if (elem != val) { diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/compiler/6340864/TestShortVect.java --- a/hotspot/test/compiler/6340864/TestShortVect.java Wed Oct 31 18:35:56 2012 -0700 +++ b/hotspot/test/compiler/6340864/TestShortVect.java Wed Jul 05 18:27:34 2017 +0200 @@ -75,6 +75,7 @@ test_subc(a0, a1); test_subv(a0, a1, (short)VALUE); test_suba(a0, a1, a2); + test_mulc(a0, a1); test_mulv(a0, a1, (short)VALUE); test_mula(a0, a1, a2); @@ -87,6 +88,7 @@ test_divc_n(a0, a1); test_divv(a0, a1, (short)-VALUE); test_diva(a0, a1, a3); + test_andc(a0, a1); test_andv(a0, a1, (short)BIT_MASK); test_anda(a0, a1, a4); @@ -96,30 +98,49 @@ test_xorc(a0, a1); test_xorv(a0, a1, (short)BIT_MASK); test_xora(a0, a1, a4); + test_sllc(a0, a1); test_sllv(a0, a1, VALUE); test_srlc(a0, a1); test_srlv(a0, a1, VALUE); test_srac(a0, a1); test_srav(a0, a1, VALUE); + test_sllc_n(a0, a1); test_sllv(a0, a1, -VALUE); test_srlc_n(a0, a1); test_srlv(a0, a1, -VALUE); test_srac_n(a0, a1); test_srav(a0, a1, -VALUE); + test_sllc_o(a0, a1); test_sllv(a0, a1, SHIFT); test_srlc_o(a0, a1); test_srlv(a0, a1, SHIFT); test_srac_o(a0, a1); test_srav(a0, a1, SHIFT); + test_sllc_on(a0, a1); test_sllv(a0, a1, -SHIFT); test_srlc_on(a0, a1); test_srlv(a0, a1, -SHIFT); test_srac_on(a0, a1); test_srav(a0, a1, -SHIFT); + + test_sllc_add(a0, a1); + test_sllv_add(a0, a1, ADD_INIT); + test_srlc_add(a0, a1); + test_srlv_add(a0, a1, ADD_INIT); + test_srac_add(a0, a1); + test_srav_add(a0, a1, ADD_INIT); + + test_sllc_and(a0, a1); + test_sllv_and(a0, a1, BIT_MASK); + test_srlc_and(a0, a1); + test_srlv_and(a0, a1, BIT_MASK); + test_srac_and(a0, a1); + test_srav_and(a0, a1, BIT_MASK); + test_pack2(p2, a1); test_unpack2(a0, p2); test_pack2_swap(p2, a1); @@ -364,6 +385,60 @@ errn += verify("test_srav_on: ", i, a0[i], (short)((short)(ADD_INIT+i)>>(-SHIFT))); } + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + test_pack2(p2, a1); for (int i=0; i>>b); } } + static void test_srlc_add(short[] a0, short[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(short[] a0, short[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(short[] a0, short[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(short[] a0, short[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] & b)>>>VALUE); + } + } static void test_srac(short[] a0, short[] a1) { for (int i = 0; i < a0.length; i+=1) { @@ -1020,6 +1213,26 @@ a0[i] = (short)(a1[i]>>b); } } + static void test_srac_add(short[] a0, short[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(short[] a0, short[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(short[] a0, short[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(short[] a0, short[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (short)((a1[i] & b)>>VALUE); + } + } static void test_pack2(int[] p2, short[] a1) { if (p2.length*2 > a1.length) return; diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/compiler/7184394/TestAESBase.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/7184394/TestAESBase.java Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @author Tom Deneau + */ + +import javax.crypto.Cipher; +import javax.crypto.KeyGenerator; +import javax.crypto.SecretKey; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.security.AlgorithmParameters; + +import java.util.Random; +import java.util.Arrays; + +abstract public class TestAESBase { + int msgSize = Integer.getInteger("msgSize", 646); + boolean checkOutput = Boolean.getBoolean("checkOutput"); + boolean noReinit = Boolean.getBoolean("noReinit"); + int keySize = Integer.getInteger("keySize", 128); + String algorithm = System.getProperty("algorithm", "AES"); + String mode = System.getProperty("mode", "CBC"); + byte[] input; + byte[] encode; + byte[] expectedEncode; + byte[] decode; + byte[] expectedDecode; + Random random = new Random(0); + Cipher cipher; + Cipher dCipher; + String paddingStr = "PKCS5Padding"; + AlgorithmParameters algParams; + SecretKey key; + int ivLen; + + static int numThreads = 0; + int threadId; + static synchronized int getThreadId() { + int id = numThreads; + numThreads++; + return id; + } + + abstract public void run(); + + public void prepare() { + try { + System.out.println("\nmsgSize=" + msgSize + ", key size=" + keySize + ", reInit=" + !noReinit + ", checkOutput=" + checkOutput); + + int keyLenBytes = (keySize == 0 ? 16 : keySize/8); + byte keyBytes[] = new byte[keyLenBytes]; + if (keySize == 128) + keyBytes = new byte[] {-8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7}; + else + random.nextBytes(keyBytes); + + key = new SecretKeySpec(keyBytes, algorithm); + if (threadId == 0) { + System.out.println("Algorithm: " + key.getAlgorithm() + "(" + + key.getEncoded().length * 8 + "bit)"); + } + input = new byte[msgSize]; + for (int i=0; i 0 ? Integer.valueOf(args[0]) : 1000000); + System.out.println(iters + " iterations"); + TestAESEncode etest = new TestAESEncode(); + etest.prepare(); + long start = System.nanoTime(); + for (int i=0; i> 16; } + static int loadUS_signExt_1 (char[] ca) { return (ca[0] << 16) >> 16; } + + static long loadB2L_mask8 (byte[] ba) { return ba[0] & 0x55; } + static long loadB2L_mask8_1 (byte[] ba) { return ba[0] & 0x55; } + + public static void main(String[] args) { + for (int i = Byte.MIN_VALUE; i < Byte.MAX_VALUE; i++) { + byte[] ba = new byte[] { (byte) i}; + + { long v1 = loadB2L_mask8(ba); + long v2 = loadB2L_mask8_1(ba); + if (v1 != v2) + throw new InternalError(String.format("loadB2L_mask8 failed: %x != %x", v1, v2)); } + } + + for (int i = Short.MIN_VALUE; i < Short.MAX_VALUE; i++) { + short[] sa = new short[] { (short)i }; + char[] ca = new char[] { (char)i }; + + { long v1 = loadS2LmaskFF(sa); + long v2 = loadS2LmaskFF_1(sa); + if (v1 != v2) + throw new InternalError(String.format("loadS2LmaskFF failed: %x != %x", v1, v2)); } + + { long v1 = loadS2Lmask16(sa); + long v2 = loadS2Lmask16_1(sa); + if (v1 != v2) + throw new InternalError(String.format("loadS2Lmask16 failed: %x != %x", v1, v2)); } + + { long v1 = loadS2Lmask13(sa); + long v2 = loadS2Lmask13_1(sa); + if (v1 != v2) + throw new InternalError(String.format("loadS2Lmask13 failed: %x != %x", v1, v2)); } + + { int v1 = loadUS_signExt(ca); + int v2 = loadUS_signExt_1(ca); + if (v1 != v2) + throw new InternalError(String.format("loadUS_signExt failed: %x != %x", v1, v2)); } + } + + System.out.println("TEST PASSED."); + } +} diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/compiler/8001183/TestCharVect.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/compiler/8001183/TestCharVect.java Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,1332 @@ +/* + * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + * + */ + +/** + * @test + * @bug 8001183 + * @summary incorrect results of char vectors right shift operaiton + * + * @run main/othervm/timeout=400 -Xbatch -Xmx64m TestCharVect + */ + +public class TestCharVect { + private static final int ARRLEN = 997; + private static final int ITERS = 11000; + private static final int ADD_INIT = Character.MAX_VALUE-500; + private static final int BIT_MASK = 0xB731; + private static final int VALUE = 7; + private static final int SHIFT = 16; + + public static void main(String args[]) { + System.out.println("Testing Char vectors"); + int errn = test(); + if (errn > 0) { + System.err.println("FAILED: " + errn + " errors"); + System.exit(97); + } + System.out.println("PASSED"); + } + + static int test() { + char[] a0 = new char[ARRLEN]; + char[] a1 = new char[ARRLEN]; + short[] a2 = new short[ARRLEN]; + short[] a3 = new short[ARRLEN]; + short[] a4 = new short[ARRLEN]; + int[] p2 = new int[ARRLEN/2]; + long[] p4 = new long[ARRLEN/4]; + // Initialize + int gold_sum = 0; + for (int i=0; i>>VALUE)); + } + test_srlv(a0, a1, VALUE); + for (int i=0; i>>VALUE)); + } + + test_srac(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav(a0, a1, VALUE); + for (int i=0; i>VALUE)); + } + + test_sllc_n(a0, a1); + for (int i=0; i>>(-VALUE))); + } + test_srlv(a0, a1, -VALUE); + for (int i=0; i>>(-VALUE))); + } + + test_srac_n(a0, a1); + for (int i=0; i>(-VALUE))); + } + test_srav(a0, a1, -VALUE); + for (int i=0; i>(-VALUE))); + } + + test_sllc_o(a0, a1); + for (int i=0; i>>SHIFT)); + } + test_srlv(a0, a1, SHIFT); + for (int i=0; i>>SHIFT)); + } + + test_srac_o(a0, a1); + for (int i=0; i>SHIFT)); + } + test_srav(a0, a1, SHIFT); + for (int i=0; i>SHIFT)); + } + + test_sllc_on(a0, a1); + for (int i=0; i>>(-SHIFT))); + } + test_srlv(a0, a1, -SHIFT); + for (int i=0; i>>(-SHIFT))); + } + + test_srac_on(a0, a1); + for (int i=0; i>(-SHIFT))); + } + test_srav(a0, a1, -SHIFT); + for (int i=0; i>(-SHIFT))); + } + + test_sllc_add(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_add(a0, a1, ADD_INIT); + for (int i=0; i>>VALUE)); + } + + test_srac_add(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_add(a0, a1, ADD_INIT); + for (int i=0; i>VALUE)); + } + + test_sllc_and(a0, a1); + for (int i=0; i>>VALUE)); + } + test_srlv_and(a0, a1, BIT_MASK); + for (int i=0; i>>VALUE)); + } + + test_srac_and(a0, a1); + for (int i=0; i>VALUE)); + } + test_srav_and(a0, a1, BIT_MASK); + for (int i=0; i>VALUE)); + } + + test_pack2(p2, a1); + for (int i=0; i 0) + return errn; + + System.out.println("Time"); + long start, end; + + start = System.currentTimeMillis(); + for (int i=0; i>>VALUE); + } + } + static void test_srlc_n(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>>(-VALUE)); + } + } + static void test_srlc_o(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>>SHIFT); + } + } + static void test_srlc_on(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>>(-SHIFT)); + } + } + static void test_srlv(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>>b); + } + } + static void test_srlc_add(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] + ADD_INIT)>>>VALUE); + } + } + static void test_srlv_add(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] + b)>>>VALUE); + } + } + static void test_srlc_and(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] & BIT_MASK)>>>VALUE); + } + } + static void test_srlv_and(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] & b)>>>VALUE); + } + } + + static void test_srac(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>VALUE); + } + } + static void test_srac_n(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>(-VALUE)); + } + } + static void test_srac_o(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>SHIFT); + } + } + static void test_srac_on(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>(-SHIFT)); + } + } + static void test_srav(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)(a1[i]>>b); + } + } + static void test_srac_add(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] + ADD_INIT)>>VALUE); + } + } + static void test_srav_add(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] + b)>>VALUE); + } + } + static void test_srac_and(char[] a0, char[] a1) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] & BIT_MASK)>>VALUE); + } + } + static void test_srav_and(char[] a0, char[] a1, int b) { + for (int i = 0; i < a0.length; i+=1) { + a0[i] = (char)((a1[i] & b)>>VALUE); + } + } + + static void test_pack2(int[] p2, char[] a1) { + if (p2.length*2 > a1.length) return; + for (int i = 0; i < p2.length; i+=1) { + int l0 = (int)a1[i*2+0]; + int l1 = (int)a1[i*2+1]; + p2[i] = (l1 << 16) | (l0 & 0xFFFF); + } + } + static void test_unpack2(char[] a0, int[] p2) { + if (p2.length*2 > a0.length) return; + for (int i = 0; i < p2.length; i+=1) { + int l = p2[i]; + a0[i*2+0] = (char)(l & 0xFFFF); + a0[i*2+1] = (char)(l >> 16); + } + } + static void test_pack2_swap(int[] p2, char[] a1) { + if (p2.length*2 > a1.length) return; + for (int i = 0; i < p2.length; i+=1) { + int l0 = (int)a1[i*2+0]; + int l1 = (int)a1[i*2+1]; + p2[i] = (l0 << 16) | (l1 & 0xFFFF); + } + } + static void test_unpack2_swap(char[] a0, int[] p2) { + if (p2.length*2 > a0.length) return; + for (int i = 0; i < p2.length; i+=1) { + int l = p2[i]; + a0[i*2+0] = (char)(l >> 16); + a0[i*2+1] = (char)(l & 0xFFFF); + } + } + + static void test_pack4(long[] p4, char[] a1) { + if (p4.length*4 > a1.length) return; + for (int i = 0; i < p4.length; i+=1) { + long l0 = (long)a1[i*4+0]; + long l1 = (long)a1[i*4+1]; + long l2 = (long)a1[i*4+2]; + long l3 = (long)a1[i*4+3]; + p4[i] = (l0 & 0xFFFFl) | + ((l1 & 0xFFFFl) << 16) | + ((l2 & 0xFFFFl) << 32) | + ((l3 & 0xFFFFl) << 48); + } + } + static void test_unpack4(char[] a0, long[] p4) { + if (p4.length*4 > a0.length) return; + for (int i = 0; i < p4.length; i+=1) { + long l = p4[i]; + a0[i*4+0] = (char)(l & 0xFFFFl); + a0[i*4+1] = (char)(l >> 16); + a0[i*4+2] = (char)(l >> 32); + a0[i*4+3] = (char)(l >> 48); + } + } + static void test_pack4_swap(long[] p4, char[] a1) { + if (p4.length*4 > a1.length) return; + for (int i = 0; i < p4.length; i+=1) { + long l0 = (long)a1[i*4+0]; + long l1 = (long)a1[i*4+1]; + long l2 = (long)a1[i*4+2]; + long l3 = (long)a1[i*4+3]; + p4[i] = (l3 & 0xFFFFl) | + ((l2 & 0xFFFFl) << 16) | + ((l1 & 0xFFFFl) << 32) | + ((l0 & 0xFFFFl) << 48); + } + } + static void test_unpack4_swap(char[] a0, long[] p4) { + if (p4.length*4 > a0.length) return; + for (int i = 0; i < p4.length; i+=1) { + long l = p4[i]; + a0[i*4+0] = (char)(l >> 48); + a0[i*4+1] = (char)(l >> 32); + a0[i*4+2] = (char)(l >> 16); + a0[i*4+3] = (char)(l & 0xFFFFl); + } + } + + static int verify(String text, int i, int elem, int val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + elem + " != " + val); + return 1; + } + return 0; + } + + static int verify(String text, int i, long elem, long val) { + if (elem != val) { + System.err.println(text + "[" + i + "] = " + Long.toHexString(elem) + " != " + Long.toHexString(val)); + return 1; + } + return 0; + } +} diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/runtime/7158800/BadUtf8.java --- a/hotspot/test/runtime/7158800/BadUtf8.java Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1254 +0,0 @@ -/* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 7158800 - * @summary Test that 1200 symbols that hash to the same value triggers - * the symbol table alternate hashing mechanism. There isn't actually a - * way to verify this. - */ -// -// Generate large number of strings that hash to the same value -// to slow down symbol table lookup. - -import java.io.BufferedOutputStream; -import java.io.FileOutputStream; - -public class BadUtf8 { -static String[] strings = { - "EOcLKvbddZyPxYpb", - "DncLKvbdPxmAGrqj", - "DoCjjvbdpxoIHQdY", - "EPCkKvbdqYoHfqEY", - "DnbkKvbdezvYdiUX", - "DnbjjvbdeEoRbXCj", - "EObkKvbdbsCkUEKB", - "EOcLKvbdnUtyjiqf", - "DncLKvbdRWnDcMHc", - "DoCkKvbdrSUkOLAm", - "DncLKvbdfNFwGmJk", - "EPDLKvbdvAdYroFI", - "DoDLKvbdiGibyViu", - "DncLKvbdYqNEhmFR", - "DoCkKvbdEARhlzXX", - "DncLKvbdSZjHsCvA", - "DncKjvbdqTsgRqkU", - "DnbjjvbdqAiFAXHd", - "EPDKjvbdGcjvJaij", - "DnbkKvbdwtldpxkn", - "DoDKjvbdYkrETnMN", - "EPCjjvbdbBWEfQQX", - "EPCjjvbduMXwAtBX", - "DncLKvbdbsCkTcia", - "DoCjjvbdczYpYZRC", - "EOcKjvbdFeiqmhsq", - "DoCkKvbdKCicQibx", - "EOcKjvbdZLrEUOLm", - "DoCjjvbdaNKbStmH", - "DoDKjvbdJbjDQjDY", - "EPCkKvbdemFwGmKL", - "EPDKjvbdZQleImEq", - "DncKjvbdZjShPfbG", - "DnbjjvbdqYnhHREY", - "DoCkKvbdaRfDIUGL", - "DoDKjvbdLrWlyuQz", - "DnbjjvbdZisHofaf", - "EObjjvbdhtydvrUb", - "DnbjjvbdRotHKGEX", - "EObjjvbdNeEThhkE", - "EPCjjvbdZtJJZESn", - "DoDKjvbdnPyxvLYb", - "EPDKjvbdeEoRbWbj", - "EOcLKvbdFxttaEXb", - "EObjjvbddwystRez", - "EPCjjvbdJpzEnenF", - "DnbkKvbdTppntuIN", - "EPCkKvbdTukpKUBR", - "DnbkKvbdhlFEOUcZ", - "EObkKvbdlhdUQuRa", - "DnbjjvbdkClKqHUg", - "EOcKjvbdqTtGqqkU", - "DncKjvbdtkwvaUBX", - "DoDKjvbdsQWOjCuf", - "DncLKvbdEKIJuwjA", - "DncKjvbdGLErcIMu", - "EOcLKvbdNPwpumfs", - "EObkKvbdnVUzLJrG", - "DoCkKvbdcTDKsdKB", - "DncKjvbdKRZdoFme", - "EOcLKvbdemFvgNKL", - "EPCkKvbdznopdblY", - "EPDLKvbdOYPVzdOU", - "DnbjjvbdsZlPsAhO", - "DoDLKvbdKCjDRKDY", - "DoCkKvbdhuZeXSVC", - "EPDKjvbdOStVgEtp", - "DncLKvbdvwMAvBWV", - "EPDKjvbdBcoaWJlf", - "EOcKjvbdZxdKODMS", - "DoCjjvbdbsCkTcjB", - "EOcLKvbdwWlAuaWV", - "DnbjjvbdFejRnJUR", - "DnbjjvbdmIdTqVSB", - "DnbkKvbdqBIeAWhE", - "DncKjvbdrMzJyMIJ", - "DoCkKvbdZGvdAOsJ", - "DncLKvbdjggLfFnL", - "DoCjjvbdYqNFJMdq", - "DoCkKvbdqZPHfqDx", - "DncLKvbdOEdThiLE", - "DoCkKvbdZirgpGaf", - "EPDLKvbdziuQPdSt", - "EObkKvbdKQyeOenF", - "DoDLKvbduaDySndh", - "DoCjjvbdVUNUGLvK", - "DncKjvbdAMhYrvzY", - "DnbkKvbdnQZxvKxb", - "EPCjjvbdBhjakJFj", - "DncLKvbdmfeYNNfy", - "DoDLKvbdjlbLydfo", - "DoDLKvbdpyPIGpcx", - "EOcLKvbdnVUzLJqf", - "DoCjjvbdmJETqVSB", - "DoDLKvbdJTZAsMxM", - "DoCkKvbdnQZxvLZC", - "DoDKjvbdACqwizJQ", - "DncKjvbdvBEZSoFI", - "DncKjvbdGckVjCJj", - "DncLKvbdiMFENtcZ", - "Dnbjjvbdjuvmcaww", - "DnbkKvbdZyEKNblS", - "DoCjjvbduMYXBUBX", - "DnbjjvbdFWYopNJe", - "DoDKjvbdelfXGljL", - "DnbjjvbdakLenmcA", - "EPDKjvbdfILWRmpg", - "EObjjvbdSLYeuHLT", - "DoCjjvbdMfbolotk", - "EPDLKvbdrRuKnKaN", - "EOcKjvbdyzdnRhIh", - "DoDLKvbdGAoRZJzm", - "DoCjjvbdhlFDnUcZ", - "EPDLKvbdmpZyVkYb", - "DncKjvbdTpqPUuIN", - "DncLKvbdHDjvJaij", - "EPDLKvbdYlRcsmkm", - "EPDLKvbdvlvAMdFN", - "DncKjvbdIsZArmYM", - "EOcLKvbdegjuqnQg", - "EOcLKvbdZQmFJNFR", - "DoCjjvbdZxdJmcMS", - "EPCkKvbdlZTSTYgU", - "DoDKjvbdqceJPnWB", - "DncLKvbdVgwuxGxz", - "DncKjvbdDnbkLXDE", - "EPDLKvbdatbHYKsh", - "DncKjvbdEzsqFLbi", - "EPDLKvbdnVVZkKRf", - "EOcKjvbdKeegbBQu", - "EPCkKvbdKfGHaaRV", - "EPDKjvbdmIctRVRa", - "EPCjjvbdRMxBxnUz", - "DnbjjvbdJYTbILpp", - "EPCkKvbdTAEiHbPE", - "EOcLKvbdfelZnGgA", - "DoCjjvbdOStWGeUp", - "EOcLKvbdemGXHNJk", - "DoDKjvbdYTMAmUOx", - "EPCkKvbdpyOhGpcx", - "EPCkKvbdAMgxsWzY", - "DnbjjvbdYkrETnMN", - "EPDLKvbdUQqPUtgm", - "DncKjvbdehKurNqH", - "DoCjjvbdZMSETnLm", - "DoDKjvbdIHGyyXwg", - "EObjjvbdXGYzUAPT", - "DoCjjvbdhbPCeWqR", - "DoCkKvbdKNADzGuB", - "DnbjjvbdFeirOJTq", - "DncLKvbdaRecHtFk", - "DnbkKvbdzoPpeClY", - "EObkKvbdZRMeJMeR", - "DnbjjvbdYfvdAPSi", - "DncLKvbdJcKCqJcY", - "EOcLKvbdqvokbhyR", - "DoDLKvbdrRuLNjaN", - "DoCjjvbdTlWPBWOi", - "DoCkKvbdjvWnEBxX", - "DoDLKvbdTkunaVoJ", - "DoCkKvbdQZNAHTSK", - "EObjjvbdqwPkbhyR", - "EOcLKvbdNHDPlpUk", - "DncLKvbdIHHZxxYH", - "DncLKvbdtkxXAtAw", - "DncLKvbdSCEFMJZL", - "DnbjjvbdZQmEhldq", - "DoCjjvbdNGbolotk", - "DnbjjvbdnCKWwnmu", - "DncLKvbdzHZMANEw", - "DoDKjvbdmttykJrG", - "DnbkKvbdlrZUzSci", - "EPDKjvbdSKyGVHKs", - "DoCjjvbdKVuGEFGi", - "EPCjjvbdCIkBkIej", - "DncLKvbdzHZMAMeX", - "DnbkKvbdaSFbgsek", - "DncLKvbdHDjujBij", - "DoDKjvbdGZVUaDwb", - "DnbjjvbdZnnJFEzK", - "DoCkKvbdtcDUwWOo", - "DoCkKvbdlBMoNALA", - "EOcKjvbdNsUWHFUp", - "DoDLKvbdVUNUFlVj", - "DnbkKvbdhkdcnUcZ", - "DncLKvbdLiBkqYAS", - "EOcKjvbdzoPpdcLx", - "EPDKjvbdijGIJmXr", - "EOcKjvbdZisHofaf", - "DoDLKvbdeOdrkUUS", - "DoDLKvbdnPyxvKxb", - "EPDKjvbdIxUBhMRQ", - "DncLKvbdlhctRUqa", - "DoDLKvbdmgFXlnGy", - "DncKjvbdCJKbKiGK", - "EOcLKvbddndrjtUS", - "DnbjjvbdkDLjqGuH", - "DncKjvbdmIcsptqa", - "DoCkKvbdvvlAvBWV", - "EObjjvbdjblLQftg", - "DnbjjvbdCEQBWKMf", - "DnbjjvbdBdPaVilf", - "DoCkKvbdZxcjODLr", - "DoCkKvbdEObjjwCd", - "EPDKjvbdyTNhlqbH", - "EPCkKvbdUMVoAvPJ", - "DncKjvbdUxhUZjoO", - "DncKjvbdqqtjmkAm", - "DncKjvbdKfGICBRV", - "EPCjjvbdVrOXaeLc", - "EPDLKvbdwXLaWBWV", - "EPCkKvbdjblKqHUg", - "DnbjjvbduDCuWuoP", - "EPDKjvbdNGbpMouL", - "EObjjvbdBcoaVjNG", - "DncLKvbdrWpMDIxq", - "DncLKvbdhaoCdwRR", - "DnbkKvbdFxtuBDwb", - "DncKjvbdIjEAKPgE", - "EOcLKvbduCbuXVoP", - "DoDKjvbdZtIiZDsO", - "DnbjjvbdEztRElCi", - "DncLKvbdxmsHwsJD", - "DnbjjvbdRbEElIxk", - "DoDKjvbdWHwvXgYz", - "EOcKjvbdQlwbYnUz", - "EOcLKvbdVTltFkuj", - "DncKjvbdliETptqa", - "DnbkKvbddoErjtTr", - "DoCkKvbdgPazvdXh", - "DncKjvbdySmhlqag", - "DoCjjvbdbPgHDkzd", - "DoCkKvbdFWZPomKF", - "EObjjvbdssSSxydc", - "EObjjvbdzQnliJwA", - "EObkKvbdKCjCpibx", - "EPCjjvbdpyOhHREY", - "DncLKvbddjJqutzn", - "EObkKvbdBdQAujMf", - "EPCkKvbdLAjflbXq", - "DncLKvbdLBLGlaxR", - "DoDLKvbdrpWPJbuf", - "DoCjjvbdEKHiuxKA", - "DoCjjvbdXsMAlsnx", - "EObkKvbdptTgSSLU", - "DoDKjvbdnHFXmNfy", - "DncKjvbdCJKbKhej", - "EPCjjvbdhlEdOUby", - "EOcKjvbdKWUfEFGi", - "DoDKjvbdZQmFJMdq", - "EPCjjvbdiGjDZWKV", - "EObkKvbdVAbQrprZ", - "DoDKjvbdfekzNgHA", - "DoDLKvbdnHEwlmgZ", - "DncKjvbdwzHeexEr", - "DoCjjvbdmpZxujyC", - "EPDKjvbdwMvAMcdm", - "DoCjjvbdfHkVrNqH", - "EPCkKvbdYzbfRiuy", - "EPCkKvbdZtIiZDrn", - "DnbjjvbdjvWnDbYX", - "DoCjjvbdOStVgEtp", - "EPDLKvbdZMSETmlN", - "EPDKjvbdBhjajhej", - "EPCjjvbddoFTLUUS", - "DnbkKvbdsQVoJcWG", - "EPCjjvbdrEFJQNvB", - "DoCjjvbdMpYRWOGs", - "EOcLKvbdZirgpHBf", - "EPDLKvbdyOTIXsJD", - "DoCkKvbdKRZdnfNe", - "DnbjjvbdbBWFFoow", - "EPCjjvbdgFlZnHHA", - "DnbkKvbdGGJrOIsq", - "DoDLKvbduDCtwWPP", - "EObjjvbdNddUIhjd", - "DnbjjvbdxsNiMqag", - "EObjjvbddeOrCWbj", - "EObjjvbdPxmAGsRj", - "EOcLKvbddeOrCXDK", - "DoDLKvbddeOrBwCj", - "DoCjjvbdVqnYCElD", - "DnbkKvbdUyIUZjoO", - "EObjjvbdeFOrCXDK", - "EObkKvbdVrNxCFLc", - "EObjjvbdTfzmkwWF", - "EOcKjvbdIHGzZYYH", - "EPDKjvbdtbbuXWPP", - "DoCjjvbdZisIQHBf", - "EObjjvbdbsCkUDjB", - "EPCkKvbdVwJXudFH", - "EPDKjvbdrouoKDVf", - "EPCkKvbdFyVVBEYC", - "DncLKvbdZnnIeEzK", - "EPDLKvbdxVNFQxkn", - "DoDKjvbdpxnggRDx", - "DoDLKvbdqZOgfpcx", - "DncKjvbdCIjakJGK", - "EPCkKvbdCJLBjhej", - "DoDLKvbdnPzYvKxb", - "EOcKjvbdqTsgSRkU", - "EOcLKvbdLBLGlaxR", - "DoDLKvbdcbTMrAUN", - "DncLKvbdzitoodSt", - "DoDKjvbdJvUfDdfi", - "EOcLKvbdHDjvKCJj", - "EPCkKvbdeOeTKssr", - "DnbkKvbdlYrqsYft", - "DncLKvbdiiehKMxS", - "DncKjvbdURQoVUhN", - "DnbkKvbduMYXBUAw", - "DoDLKvbdSPtHJfEX", - "EObkKvbdqBJFAWgd", - "EOcKjvbdFpATWgFy", - "DoDLKvbdBsBDTfXS", - "DncKjvbdjhHLfFmk", - "DoCjjvbdCJKakIfK", - "DnbkKvbddoFSjtTr", - "EObkKvbdANIYsWzY", - "EObjjvbdCTAbtFvr", - "EObjjvbdrRtkOLAm", - "DnbkKvbdkxsSTYgU", - "DoCjjvbdnBiwXnmu", - "EObjjvbdwtmEqYlO", - "EPDKjvbdrylQTAhO", - "DoDLKvbdtbbtvvOo", - "EPCjjvbdZLrETmlN", - "EPDLKvbdWXJYWDdg", - "DoCkKvbdKQzFOfOF", - "EPCjjvbdwzIFfXeS", - "DncKjvbdRjyFuHLT", - "EPDLKvbdULunaWPJ", - "DncKjvbdUxhTykOn", - "DnbkKvbdJcKCqKDY", - "EPDLKvbdcbSmSATm", - "DnbkKvbdegjurNqH", - "EPDKjvbdZjTIQGbG", - "EPCjjvbdiLddNuCy", - "DoCjjvbdZQldiNEq", - "EOcLKvbdakMGPODA", - "EObjjvbdnHEwlmgZ", - "EOcLKvbdBsAcUGXS", - "EPCkKvbdiVZdwSUb", - "EOcLKvbddCTNSAUN", - "DnbkKvbdEXxMUUUM", - "DncKjvbdYpldiMeR", - "DoDKjvbdNddTiIjd", - "DoDLKvbdZLqdUNlN", - "EPCkKvbdiBncFWpq", - "DncLKvbdiCPDEvqR", - "EOcKjvbdUyHszKoO", - "DncKjvbdhtydvqtb", - "EPCjjvbdpxoHgQcx", - "EObkKvbdkWWnDaxX", - "DnbjjvbdBhkBkJFj", - "DoCkKvbdRacdkhyL", - "EOcLKvbdZjTHpHCG", - "EPCkKvbdMowqWOGs", - "DncLKvbdegjurNpg", - "EObjjvbdfMfWfmKL", - "EPDLKvbdZirgpGaf", - "DoDLKvbdiZuFlQnG", - "DncLKvbdFxuVAcxC", - "EObkKvbdZisHofaf", - "EOcKjvbdJSyBSmYM", - "EPDLKvbdVYgtZkPO", - "EOcKjvbdRbEFMJYk", - "DncLKvbdrEFIonWB", - "DncKjvbdKDJbqJcY", - "EOcLKvbdhfjCxuiu", - "EObjjvbdLLAhWAKZ", - "DoCkKvbdRXNcblID", - "DoDLKvbdcbSmSATm", - "EOcLKvbdwWlAvAuu", - "EObkKvbdiBnbdvpq", - "DoCkKvbdNQXpumgT", - "DncLKvbdkVwOECYX", - "DnbkKvbdfoazwDxI", - "DoDLKvbdbBWFFpPw", - "DoDLKvbdvBDxsPEh", - "EPDKjvbdJqZdoFme", - "DoDLKvbdIryArmXl", - "EPCjjvbdANIZSwZx", - "EPCkKvbdVhYVxGxz", - "DncKjvbdLAjgNCYR", - "DncKjvbdxxIjCQZk", - "DncKjvbdbiNKKewY", - "EPCjjvbdlrZVZsEJ", - "EPDKjvbdIryAsMwl", - "DoCkKvbdtAHRIAAr", - "EPDKjvbdJmAEZfuB", - "EPCkKvbdZjSgogBf", - "DoDLKvbdOXnuzcnU", - "DnbkKvbdehKvRnQg", - "EObjjvbdZyDimbkr", - "DoDKjvbdmajWwoOV", - "EOcKjvbdkMalZeHP", - "EOcKjvbdIjEAJpHE", - "EPCkKvbdDihKVxKA", - "DncKjvbdNddUIiKd", - "EObjjvbdqdFIpOWB", - "DoCkKvbdxnShXsJD", - "DoDLKvbdjmBkzEfo", - "EOcLKvbdatagYLTh", - "DoCjjvbdVhYVxHYz", - "DnbjjvbdJbjDRKDY", - "EPCjjvbdLBLHNCYR", - "DnbjjvbdnGeYNOGy", - "EOcLKvbdUsmTekvK", - "EPCjjvbdtkxXBTaX", - "EPCjjvbdzoPqFCkx", - "DncKjvbdCIjbKhej", - "DncKjvbdZLqdTmkm", - "DoDKjvbdsPunicVf", - "EOcKjvbdmgFXmNgZ", - "EObkKvbdiMFENuCy", - "DoDKjvbdhanbeXRR", - "EObkKvbdACqwiyhp", - "DncKjvbdZisIQHBf", - "EPCjjvbdgQBzwDwh", - "DnbjjvbdyYJJaoyk", - "DoDKjvbdxUldqZMO", - "EObkKvbdkClLQgVH", - "EPCjjvbdZQldiMeR", - "EPDLKvbdZyEKOClS", - "EPDLKvbdcIlikFvx", - "DoDKjvbdrzMQTBHn", - "DnbjjvbdVYgtZkPO", - "DoDLKvbdHEKuiajK", - "EPCkKvbdczZQXxqC", - "DoDKjvbdrDdiQNua", - "DncLKvbdcImKLGWx", - "DoCjjvbdVYgtZkPO", - "EPDLKvbdZnnIeFZj", - "EPDKjvbdMIakqYAS", - "DoCkKvbdSLYfUgLT", - "EPDLKvbdiCObdvpq", - "DnbjjvbdRpUHKFcw", - "DoDLKvbdIHHZyYXg", - "EPCjjvbdypoMhiwA", - "DnbkKvbdCEPaVjMf", - "DnbkKvbderAvzlDP", - "DnbkKvbdZQleImFR", - "EOcKjvbdKRZdneme", - "DoDLKvbdiBnbeXQq", - "DncLKvbdEPDKjvcE", - "EOcLKvbdauCGwkTh", - "DncLKvbdEvZQPmJe", - "EPCkKvbdURQnuVIN", - "DncLKvbdegjvSOQg", - "EPCjjvbdKaKgMawq", - "DnbkKvbdRzKISbvA", - "DncLKvbdiLdcnUcZ", - "EPDLKvbdkDMKpfuH", - "DoDLKvbdRbDdkhyL", - "DnbjjvbdDwxMUUTl", - "DnbkKvbdrpWPKCuf", - "DnbkKvbdNVSqjmAX", - "DoDKjvbdRbDeMIxk", - "EOcLKvbdcyxpXyRC", - "DncLKvbdRMwbYnUz", - "EObjjvbdqlzJxlHi", - "DoCkKvbdJYUCIMQp", - "DncLKvbdLZQjSzuG", - "EOcKjvbdxVNEqYkn", - "DnbkKvbdZoOIeFZj", - "DoCjjvbdBraCtFwS", - "EOcLKvbdliDsqVSB", - "EPCkKvbdeATqNXif", - "DncLKvbdkMbLydgP", - "EObjjvbdZxdJmbkr", - "DoCjjvbdraellHLZ", - "EObkKvbduDCuWvPP", - "DoCkKvbdpstGrSLU", - "DoCjjvbdLGFgbBQu", - "DnbkKvbdhtzFWquC", - "EObjjvbdoAKztHdO", - "EPDLKvbdatafxKtI", - "EPDKjvbdkWXNcaww", - "DoCkKvbdwkXEHzzG", - "EObkKvbdmgEwmNgZ", - "DncKjvbdBiLCLJFj", - "DoCjjvbdeOdsKssr", - "EOcLKvbdfILWSORH", - "EObkKvbdCDpAujMf", - "EPDKjvbdKDKDQibx", - "DoDKjvbdVUMtGLuj", - "EObkKvbdrXQMCiYq", - "DncKjvbdePEsLTtS", - "DncLKvbdDxYLtUTl", - "EPCkKvbdGYuVBEYC", - "DncLKvbdNeEUIiKd", - "EPCkKvbdpxoIHRDx", - "EObjjvbdFkEsDHlu", - "EObjjvbdssSSxzFD", - "DoCkKvbdUtNTfMVj", - "DnbjjvbdJcKDRKDY", - "DncKjvbdqiAKEmOe", - "DoDKjvbdtlXwAtBX", - "DnbkKvbdxmsIYTIc", - "EObkKvbdLrXMzUpz", - "DoCjjvbdkxsSSxft", - "DncKjvbdQlwaxnUz", - "EObkKvbdjhGlFfNk", - "EPCkKvbdxsNhmRag", - "DoDLKvbdMfcPmQUk", - "DoDKjvbdQvnEDLhD", - "EObjjvbdVgxVxHYz", - "DoDLKvbdlrYtyrdJ", - "DoCjjvbdezvYeIsw", - "DncLKvbdNddTiIjd", - "EPDLKvbdGGJrNiUR", - "EPDLKvbdRzJhTDWA", - "EPCjjvbdvvkaWBVu", - "EOcKjvbdRXNdCkgc", - "EOcKjvbdQZNAHTSK", - "EPCkKvbdsCGNLfkZ", - "EOcLKvbdDwwktTsl", - "EOcLKvbdqlzJyLgi", - "EOcLKvbdxsNiMqag", - "EOcLKvbdhzVFlROG", - "EOcKjvbdEztRFMCi", - "DnbkKvbdqiAJdmPF", - "EPDLKvbdjcMKqGtg", - "EObkKvbdTlWOaWOi", - "EPDLKvbdURRPUuHm", - "DoDKjvbdelfWgNKL", - "EOcLKvbdGAnqZJzm", - "EObjjvbdGZUuAdXb", - "DoDLKvbduLwwAtAw", - "DoCjjvbdZjTIQGbG", - "EPCjjvbdRNXbYnUz", - "EPDLKvbdiLeENtby", - "EObjjvbdMowpunGs", - "EOcKjvbdbiNJjevx", - "DoDKjvbdEYYLstTl", - "DoDLKvbdqUTfrRjt", - "DoDKjvbdbsCkUEJa", - "DoDKjvbdXsMBNUPY", - "EPCjjvbdRNXaxnUz", - "DoDLKvbdNGcQNQUk", - "DnbjjvbdEARiMywX", - "EPDKjvbdSKxfUfkT", - "DncKjvbdhtyeXRtb", - "DncKjvbdZLqcsnLm", - "EObkKvbdZnmheEzK", - "EObjjvbdtbcUvuno", - "DnbjjvbdrzMQTBHn", - "DnbjjvbdDwwktTsl", - "EPDKjvbdkxsSTYgU", - "DoDKjvbdIryArlxM", - "DoDKjvbdnBivxOnV", - "DoDKjvbdeATplwif", - "EOcLKvbdKeegbApu", - "EPCjjvbdMgDQMotk", - "DoCjjvbduCbtwWOo", - "DnbkKvbdyNsHwrhc", - "DnbkKvbdtvNxJpsA", - "EOcLKvbdqAheAWgd", - "DoCkKvbdURQoUtgm", - "EOcKjvbdqceIpOWB", - "DoCkKvbdVwIwudFH", - "DnbkKvbdbLMFnmcA", - "EOcLKvbdZjTHpHBf", - "EOcKjvbdRXNdCkhD", - "EPDLKvbdiHJcZViu", - "DoCjjvbdxxIjCPzL", - "DnbkKvbdBcpBWJmG", - "EPCkKvbdZyEKOCkr", - "EPDKjvbdOTUWHFVQ", - "DoCjjvbdIGgZxwwg", - "EPDLKvbdFjeSbhMu", - "EPDLKvbdhgKCxvJu", - "EOcLKvbdNsUWGdtp", - "EPDKjvbduVnXipsA", - "DncLKvbdGYuVBEXb", - "EPDLKvbdZtIhyESn", - "DoDKjvbdZxdJmcLr", - "DoCjjvbdUsltGLuj", - "DoDKjvbdDoDLKvbd", - "DncLKvbdrDdhpNvB", - "EPDLKvbdKCjDRJbx", - "DoDLKvbdxLWdHzyf", - "EObkKvbdrzMQTAhO", - "EOcLKvbdOFDtJJKd", - "EPCkKvbdrSVKmjaN", - "EOcKjvbdWWiYVdEg", - "EOcKjvbdWWhwvDdg", - "DncKjvbdpstHRqjt", - "EPCkKvbdKWVFceGi", - "DoCkKvbdZjShPfbG", - "DoCkKvbdSxKlNzkY", - "EPDLKvbdIwtCHkqQ", - "EOcKjvbdsCGNLgLZ", - "DncKjvbdzaAOfgCM", - "DoDLKvbdxmrhYSiD", - "DncLKvbdfMfWgMjL", - "EPDKjvbdqFdEsuaI", - "EOcLKvbdiLeDnUcZ", - "DoCjjvbdKVuFceHJ", - "DoCjjvbdfekzNgHA", - "EOcKjvbdOFEThiLE", - "EPDLKvbdqceJPnWB", - "DoDLKvbduCbtwWOo", - "DncKjvbdTqROtuIN", - "DncKjvbdpedFUWBI", - "DoDLKvbdrEFJQNua", - "DoDLKvbdyXhjCPyk", - "EPCkKvbdJYUBhLqQ", - "EPCkKvbdtcCuXVno", - "DoDLKvbdZLrEUOLm", - "EPCkKvbdpstGrRjt", - "DncLKvbddePSCXCj", - "EObkKvbdauCHXjsh", - "DoDLKvbdkHfkefNk", - "EObjjvbdMRwMzUpz", - "EObjjvbdaMkCTVNH", - "DoCkKvbdGGJrNhtR", - "EPDLKvbdvBDxrneI", - "EPDLKvbdIHHZxwxH", - "EOcLKvbdrJAJdmPF", - "EOcKjvbdGZUuAdXb", - "EOcLKvbdbUbHYLUI", - "DnbjjvbdJzofYEAN", - "EPDKjvbdFxtuBDxC", - "DnbkKvbdQvnDbkgc", - "EPDKjvbdJmADzGta", - "DoDKjvbdZRMdhleR", - "DnbkKvbdsrqsZZeD", - "EObkKvbdrovPJbuf", - "EPCjjvbddeOqbXCj", - "EObjjvbdtcDVXVoP", - "DncKjvbdMfbpNQVL", - "DoCkKvbdhbPCeXQq", - "DoCkKvbdNHComQVL", - "EObjjvbdvBDxroFI", - "EPCjjvbdnBivwoNu", - "EObjjvbdbhljKewY", - "EPDKjvbdZyDimcMS", - "EObkKvbdWSOXbElD", - "EOcKjvbdTfznMXVe", - "EPCjjvbdZtJJYcsO", - "DoCjjvbdRjxfVHLT", - "DoCkKvbdVTltGMVj", - "DncKjvbdYfwEAOri", - "DncKjvbdYkrEUOMN", - "EObkKvbdqGEEsuaI", - "DncLKvbdjJfHimXr", - "EPDLKvbddndsLUTr", - "DnbkKvbdqBJFAWhE", - "EPDLKvbdEOcKjwDE", - "EPCkKvbdtvOYJqTA", - "DncLKvbdkyTRsZHU", - "DoCjjvbdTppnuVIN", - "DncLKvbdwyhFeweS", - "DncKjvbdsBelkgKy", - "DoCjjvbdKDKCqJcY", - "DoCjjvbdkClKqHVH", - "DoCjjvbdcTCjtDia", - "EPDLKvbdUVkpJtAq", - "EPDLKvbdRyjITCvA", - "DnbjjvbdJuuFcdgJ", - "DoDKjvbdrJAJdmOe", - "DncKjvbdJcJbqKCx", - "DoDLKvbdJcJbqJcY", - "DoDKjvbdeEoSCXDK", - "DoDLKvbdSwjlNzkY", - "EObjjvbdzitopDrt", - "DoCkKvbdKWVGEEgJ", - "DncKjvbdpssfqrKt", - "EOcLKvbdUMWPBVoJ", - "DncKjvbdyzdmrIIh", - "EPCjjvbdxUldqZLn", - "DoDLKvbdySnImRbH", - "DoCjjvbdGdKvJaij", - "DoCkKvbdxZgeewdr", - "EObkKvbdiLddNuDZ", - "DnbjjvbdSCDdkiZL", - "DncKjvbdznpREcMY", - "EOcLKvbdaRebhTfL", - "DnbjjvbdZQldiMdq", - "EPCjjvbdbrbjtEKB", - "EOcKjvbdEARiMzXX", - "DoDLKvbdXrkaNTnx", - "EPCkKvbdQZNAHTRj", - "DoDLKvbdEzspeLcJ", - "EPCjjvbduVnYKRTA", - "EObjjvbdJXtBhMQp", - "EPDKjvbdeOdrjssr", - "EPCjjvbdLqwMytpz", - "EPDKjvbdUMVoBVoJ", - "DncKjvbdRpUGifDw", - "EPDLKvbdZyDinDLr", - "DnbkKvbdNrsufeVQ", - "EPCkKvbdZMSDtNlN", - "EPCkKvbdySnJNSCH", - "EPCjjvbdfMevfljL", - "DncLKvbdXsMBNTnx", - "DnbkKvbdpxoHfqDx", - "DncLKvbdUQpntthN", - "DncKjvbdIsZArlwl", - "DoDLKvbdZGwEAOsJ", - "EOcKjvbdVvhwvDdg", - "EOcLKvbduWNxJqTA", - "EPCjjvbdHEKvJaij", - "DoDKjvbdrpWOjCuf", - "DncLKvbdrpWOjDVf", - "DoCjjvbdIHGzYwwg", - "DoDLKvbdpxoIGqEY", - "DoDLKvbdJcJbqKDY", - "DoCjjvbdRWmdClHc", - "EPCjjvbdFWYopNJe", - "DncKjvbdmfdwlmfy", - "DoCkKvbdxUleQxlO", - "EObjjvbdnGdxMnGy", - "EPCjjvbdvvlAvBVu", - "DncLKvbddndsKssr", - "EObjjvbdZMRcsnLm", - "EOcKjvbdFxttaEXb", - "DncKjvbdVUNTfMVj", - "EOcLKvbdNrtWHFUp", - "DoDKjvbdwuMdqYlO", - "EPDLKvbdrXPkbhxq", - "EObjjvbdrEFIpNua", - "EObjjvbdziuQQDrt", - "EOcLKvbdqYoIGpcx", - "DnbjjvbdsQVoJcVf", - "EObkKvbdkDMKpgUg", - "EObjjvbdvBDyTPFI", - "DncKjvbduCbuWvOo", - "EPCjjvbdkVvnECYX", - "DncLKvbdZGvdAOri", - "DoCkKvbdrXPlDJZR", - "EOcLKvbduCcVWvOo", - "DoDKjvbdCEPaWJlf", - "EPDKjvbddoErjssr", - "DncKjvbdACqxKZiQ", - "EPCjjvbdUVlPitAq", - "EPDKjvbdjJfHjMxS", - "EObkKvbdAMhYsWzY", - "DoDKjvbdnBivxOmu", - "EOcLKvbdbiNKKfXY", - "EPDKjvbdYqMeIleR", - "EObkKvbdJmADygUa", - "EObjjvbdEPDLLWcE", - "EPCjjvbdrXPkcIxq", - "EOcLKvbdliDtQtqa", - "DoCjjvbdmoyxujyC", - "EPDLKvbddoFTLTsr", - "EOcLKvbdCWzdJEpW", - "DnbjjvbdrEEhpOWB", - "DoDKjvbdZLrDtNkm", - "EOcLKvbdLFfHbAqV", - "EOcKjvbdmttzLKSG", - "EOcLKvbdmbJvwoOV", - "EOcKjvbdUaCQrqSZ", - "DnbjjvbdmgExMnGy", - "EPDKjvbddndrkUUS", - "EObkKvbdDwwkstTl", - "DoCkKvbdcJMjLFwY", - "DnbjjvbdaNLBruMg", - "DoDLKvbdQYmAHTRj", - "DnbkKvbdsQWOicWG", - "EObkKvbdMRwMzUpz", - "DoDLKvbdZshiZDrn", - "EPDLKvbdnPzYujxb", - "EOcKjvbdCEQAujMf", - "EPDLKvbdKefHbApu", - "DoDLKvbdYpldiNFR", - "DoCkKvbdFWZQQNJe", - "DncLKvbdznpQeCkx", - "EOcKjvbdnQZxvKxb", - "DoCkKvbdVBBprpqy", - "DnbkKvbdZirhPfaf", - "DnbkKvbdegjvSNqH", - "EOcLKvbdqdEiPnWB", - "EObjjvbdBhkCKiGK", - "EObjjvbdxZgfGYFS", - "DnbjjvbdNQYQumgT", - "EPCjjvbdxsNhlrBg", - "DoCkKvbdQdDApRDr", - "DoCkKvbdxxIiaoyk", - "EPDKjvbdFeirNhtR", - "DoCjjvbdegjvSOQg", - "EObkKvbdqcdiQNvB", - "DncLKvbdiMEdNtcZ", - "DncLKvbdTqRPUthN", - "EPCkKvbdwygeexFS", - "DoDKjvbdyTOJMrBg", - "DncLKvbdeEoRavbj", - "EPCjjvbdtbcUvvOo", - "EObjjvbdKCicRJcY", - "EObjjvbdZyEKODMS", - "DnbjjvbdmJDtQtrB", - "DncLKvbdEARhlyvw", - "DnbjjvbdIxTbILqQ", - "EOcLKvbdwygefYFS", - "DoCjjvbdznoqFCkx", - "DoCjjvbdRpUGjGDw", - "DncKjvbdhzVGMQnG", - "EPCjjvbdhkeDnVCy", - "EObkKvbdOEdUIiKd", - "DncKjvbdrDeIomua", - "DncLKvbdiHJbxuiu", - "EPDKjvbddxZstRez", - "EPDLKvbdmSYuZrdJ", - "EObkKvbdVUNUFkvK", - "EPDLKvbdNeEUJIjd", - "DoCkKvbdiMEdNuCy", - "DoDLKvbdRDcApQcr", - "EPCjjvbdTlVoBVoJ", - "EObjjvbdLBKgNBwq", - "EPCkKvbdsCFllHKy", - "EObjjvbdnVUzLJqf", - "DoDKjvbdqrVLNkBN", - "DoCkKvbdqFcdtWBI", - "DncLKvbdbVCGxLTh", - "EOcLKvbdeFPSCXCj", - "EOcLKvbdRpTgKFdX", - "EObjjvbdznpQeDLx", - "EOcKjvbdjvXNcaxX", - "DnbjjvbdHDkWJbJj", - "DncKjvbdhkeENuDZ", - "DnbkKvbdnUtyjjSG", - "DoDKjvbdSQUHJfDw", - "DncKjvbdbUbHYLUI", - "EOcLKvbdNsTvGduQ", - "EPDLKvbdSZigsCvA", - "DncKjvbdMfcPlpUk", - "DoDLKvbdxrnIlrBg", - "DncKjvbdiLdcnVCy", - "EPCjjvbdmfeYNOHZ", - "DoCkKvbdjvWmcaxX", - "DoDKjvbdbUbHXkUI", - "DncKjvbdBhkBjiFj", - "DoDLKvbdNHColpVL", - "EOcKjvbdrykosAhO", - "DncLKvbdqGDeUVaI", - "DnbkKvbdhgJcZViu", - "DnbjjvbduLxXAtBX", - "EPCjjvbdYpleJNFR", - "EPDLKvbdQvmdClHc", - "DnbjjvbdJYTbIMRQ", - "DncLKvbdznpRFDMY", - "EOcLKvbdZnmiFEyj", - "DnbkKvbdrRuLOLAm", - "EObkKvbdhkeEOUby", - "DncLKvbdYlSEUOLm", - "DoCjjvbdhkdcmtby", - "DncLKvbdddnrCXDK", - "DoDLKvbdKaLHNCYR", - "EOcKjvbdcyxpYZQb", - "EPDLKvbdACqwjZhp", - "DoCkKvbdBsBDTevr", - "EObkKvbdeKJqvUzn", - "EObkKvbdcImJkGWx", - "DncLKvbdYSlAltOx", - "DncLKvbdlrYtyrdJ", - "EObkKvbdKxqJrztf", - "EOcKjvbdsQWPJcVf", - "DoDKjvbdkySqrxgU", - "EObjjvbdeEoRbXCj", - "EOcKjvbdHDkVjBij", - "DoDLKvbdCTBCsfXS", - "DoCjjvbdKCjDQibx", - "DoCjjvbdlhdTqUrB", - "DoDKjvbdTulQKTaR", - "DoCkKvbdRjxetfkT", - "EPCjjvbdEuyQQNKF", - "EPCjjvbdDoDKkXDE", - "DoCjjvbdsQWPJbuf", - "DoDKjvbdhuZdvqtb", - "EPDLKvbdiHKCyWJu", - "EPDLKvbdLFegaaQu", - "DoCjjvbdqZPHgRDx", - "DncKjvbdUWMPjUAq", - "DoDLKvbdTYKkmzjx", - "DoDKjvbdegjvSOQg", - "DnbkKvbdUtNTekvK", - "EObkKvbdNsTvGeVQ", - "DoDLKvbdfNFvgMjL", - "EOcLKvbdZQmEiNEq", - "EPDKjvbdBraDTfWr", - "EPDKjvbdNGcQNQVL", - "EPDLKvbdZyEKODMS", - "EOcKjvbdBvzdIdpW", - "EPCjjvbdACqwiyiQ", - "DoCjjvbddePRawCj", - "EPDKjvbdWWiXucdg", - "DoDKjvbdWexzUAPT", - "DnbjjvbdwXMBWBWV", - "EOcLKvbdUyHszLOn", - "EPCkKvbdOYOuzcnU", - "EPCkKvbdhancEwQq", - "DnbkKvbdjggLefOL", - "EPCkKvbdFjdsDIMu", - "DoDKjvbdrSUjmkBN", - "DoDLKvbdZjTIQGaf", - "DoDKjvbdMgDPmPtk", - "EPDLKvbdWRmwbFMD", - "DoCkKvbdzROmJKXA", - "DnbkKvbdrDdiQNvB", - "DnbjjvbduDCtwVoP", - "EOcLKvbdCIjbLJFj", - "EPDKjvbdXrkaMsnx", - "EPDKjvbdVhXvXfxz", - "DncKjvbdhbPDEwRR", - "DoCkKvbdpxoHgQcx", - "DoCkKvbduMXwBUBX", - "EObjjvbdNeEThhjd", - "DoCjjvbdirzhrkJz", - "DoDLKvbdaMkCTUlg", - "DncLKvbdWRnYBeLc", - "DnbjjvbdGBPRZJzm", - "EOcLKvbdeOeSjstS", - "DoDLKvbdmIctRVSB", - "DoCjjvbdZxdJnDMS", - "DoCkKvbdRpTgKFcw", - "DncLKvbdTukojTaR", - "DnbjjvbdKRZdoFme", - "DnbkKvbdURQoVUhN", - "DoDLKvbdyYJKBozL", - "EObkKvbdfNFwHMjL", - "DoDLKvbdZisIQHBf", - "EObkKvbdqFcdsuaI", - "DncLKvbdzoPqFDLx", - "DoDKjvbdSKxeuHLT", - "EPDKjvbdsBemLfjy", - "DoCjjvbdJbjCqJcY", - "DoCjjvbdNPxRVnGs", - "DncLKvbdGcjvJbKK", - "EOcKjvbdrWpMDIxq", - "EOcLKvbdQdDApQcr", - "DoDKjvbdZMRdTnLm", - "EOcLKvbddxZssrFz", - "EObjjvbdUtNTfLuj", - "EPCjjvbdLLBIWAKZ", - "DoCkKvbdgFlZmfgA", - "EPCjjvbdUVkoitAq", - "DoDKjvbdDncKjvcE", - "DoDLKvbdRpUHJfEX", - "EPDKjvbdLqvlzVQz", - "EPDKjvbdZMRdUOLm", - "EOcLKvbdCJLBkIfK", - "DncKjvbdaSFbhUFk", - "EPDLKvbdZoNheEzK", - "DncKjvbdUVlPjUAq", - "DnbkKvbdKNADyfuB", - "EObkKvbdZdwfzghb", - "EPDLKvbdZtIhxcrn", - "EObkKvbdGckViajK", - "DncLKvbdFfJqmiUR", - "DncKjvbdKWUfDdgJ", - "DoDKjvbdMtrqjmAX", - "EOcLKvbdsQWPKDVf", - "DoCjjvbdwtleRZMO", - "EObjjvbduaDxsPEh", - "EPDLKvbdKxqJrzuG", - "EOcKjvbdVAaprprZ", - "EObjjvbdEuxopMjF", - "DnbjjvbdyOTHwriD", - "EPDLKvbdrpVnibvG", - "EPDKjvbdkWWnDaww", - "DncLKvbdrXPkbiYq", - "DoDLKvbddxZssqez", - "EOcLKvbdHDkWJbJj", - "DncLKvbdEPCkLWcE", - "DnbkKvbdEXwkstTl", - "EObjjvbdqiAKEmOe", - "DncLKvbdjAQGaQGj", - "EPCjjvbdNeDtJJKd", - "EPCjjvbdvwMBWBVu", - "EPDKjvbdFejSOItR", - "EOcLKvbdNPwqWOHT", - "EPDKjvbdbsCjscia", - "EObkKvbdyYIiaoyk", - "DoDKjvbdLZQirzuG", - "EObjjvbdSLZGVGjs", - "DoCjjvbdAMgxsWzY", - "DoDLKvbdEObjjwCd", - "DnbkKvbdsPvOicWG", - "EPCkKvbdrJAKElne", - "EPCkKvbdauCGwjsh", - "DncLKvbdegkWRnQg", - "EPCkKvbdYpmEiNFR", - "DoDKjvbduaDxsPFI", - "DoCjjvbdcyxoxYqC", - "DoCkKvbdkMakzFHP", - "DnbjjvbdJbibqJbx", - "DnbkKvbdWWhxWDeH", - "DoCjjvbdssRsYzFD", - "DoDKjvbdpyPIHRDx", - "DncLKvbdwNWANDeN", - "DoDKjvbdJYUBglRQ", - "EObkKvbdXnRAYVVt", - "DoCjjvbdUWLpKTaR", - "DoDKjvbdTqROttgm", - "EPCkKvbdVqnXaeMD", - "EObjjvbdADRwiyiQ", - "DoDKjvbdlrZUyrci", - "EPDKjvbdvAdZSndh", - "DoCkKvbdzoQQeDLx", - "DnbkKvbdSQUGjFdX", - "EOcLKvbdqBJFAXIE", - "EObkKvbdSCEFLiZL", - "DnbjjvbdzoQQdcMY", - "DnbkKvbdpxngfqEY", - "DncLKvbdbsDLUEKB", - "DoCjjvbdXrlBMtOx", - "EObjjvbdKCjDQicY", - "DncLKvbdLrWlzUpz", - "EObjjvbdaaWEfQQX", - "EObjjvbdtlYWaTaX", - "DnbkKvbdMowpunGs", - "EObkKvbdSLYeuHKs", - "EObkKvbdTAEhhCOd", - "EPCkKvbdmSYtyrci", - "DncLKvbdYkqcsnLm", - "DoDLKvbdrylQTAgn", - "DncLKvbdJXtCIMRQ", - "EObkKvbdSBdElIyL", - "DoDLKvbdwygefYFS", - "DncKjvbdyXhibPzL", - "EPCjjvbduaDxsPFI", - "EObjjvbdZoNiFEzK", - "EPCjjvbdkNBkyeHP", - "EPCkKvbdWRnXadlD", - "DncLKvbdRWmdDLhD", - "DnbkKvbdmSYtzTDi", - "EOcKjvbdkVwODbXw", - "DncLKvbdQlxCZOUz", - "EObjjvbdbhlijfXY", - "EOcLKvbdXmqAXtut", - "EOcLKvbdmbKXXnnV", - "DoDKjvbdkHgMFfOL", - "EPCkKvbdfekymgHA", - "DoCjjvbdeKKRvUzn", - "DoDKjvbdkHfkefNk", - "DoCjjvbdyqPMiKXA", - "DnbjjvbdUQqOtuIN", - "EOcKjvbdEPCkKwDE", - "DoDLKvbdZRNFIleR", - "DnbjjvbdRacdlJZL", - "EOcLKvbdTukoitAq", - "EOcLKvbdZLrDtOMN", - "EOcLKvbdgKfzcGAE", - "EObjjvbdzjVQQESt", - "EOcLKvbdcIlijevx", - "EOcKjvbdGKdsDHmV", - "DncLKvbdKkBHvAJy", - "EOcKjvbdZMRctOLm", - "EPCkKvbdADRxKZiQ", - "EObjjvbdDwxLsssl", - "EPDLKvbdUxgszLPO", - "EPCkKvbdSQTfiedX", - "EPCjjvbdNeEUJIkE", - "DoDLKvbdpyPHfqDx", - "DnbkKvbdyOShXsJD", - "DncLKvbdLiBkpxAS", - "DoDKjvbdaaWEepQX", - "DoCjjvbdWSOYBeLc", - "EOcKjvbdLFegbAqV", - "EPDKjvbdffLzOGgA", - "EObkKvbdFkErbglu", - "DncLKvbdiZuFlROG", - "DncKjvbdegkWRnQg", - "DoDLKvbdQdDApRDr", - "EOcLKvbdeYZtURez", - "EObjjvbdrXQLcIxq", - "DoDLKvbdxZhGGXeS", - "DoDLKvbdGGKSOItR", - "EObjjvbdjhHLfFnL", - "EOcLKvbdUQpoUuHm", - "DoCkKvbdXrlBNUPY", - "DoDKjvbdJXtCIMRQ", - "DnbkKvbdZMSDsnLm", - "DncKjvbdCTBDUGWr", - "DncKjvbdbhlikGXY", - "DoDKjvbdXmqAYVWU", - "DnbjjvbdliDsqVRa", - "DnbkKvbdmajXYOnV", - "EObjjvbdJpyePGNe", - "DnbkKvbdCTAcUGXS", - "DoDLKvbdCDpBVjNG", - "EOcLKvbdxwhiaoyk", - "DoDKjvbdxVNFQyMO", - "EPCkKvbdVvhwvEEg", - "DnbkKvbdFWYoomJe", - "EOcKjvbdlrZUysEJ", - "EPDKjvbdqquKnKaN", - "DoCkKvbdTkunaVoJ", - "EOcLKvbdfHkVrOQg", - "EPDLKvbdiUzFWrUb", - "DoDLKvbdtAGqIABS", - "DoCkKvbdZRMdhmEq", - "DnbkKvbdNsUVfeVQ", - "EPDLKvbdqwPkbiZR", - "DoCkKvbdNUsSLNAX", - "DncKjvbdmpZxvKyC", - "EPCkKvbdLYqKSztf", - "EPDKjvbdZyEKODMS", - "EPDKjvbdNGbomPuL", - "DncKjvbdZMSDtNlN", - "EPCjjvbdTXjkmzjx", - "EObkKvbdBdQAvKMf", - "EOcLKvbdkySrTYgU", - "DnbkKvbdZoOIddzK", - "DoCkKvbdZMSDsmkm", - "EPCkKvbdCWzdIdpW", - "DncLKvbdBvzdIdov", - "DoCjjvbdaRfDHtFk", - "DnbkKvbdWeyZtAOs", - "DoDLKvbdnCJwYPOV", - "DoCjjvbdEYYLstUM", - "EOcLKvbdwtldqZMO", - "EPCjjvbdFVxoomKF", - "EObkKvbdyqPMhiwA", - "DoDLKvbdkxrrSxgU", - "DoCjjvbdeATqNYKG", - "DncLKvbdJKEAJpHE", - "DoCkKvbddndsLUTr", - "DnbjjvbdqFceUWBI", - "DoDLKvbdhkddOUby", - "DncKjvbdGKdrcIMu", - "EPCkKvbdelevflik", - "DoDKjvbdhaoDFWqR", - "DoCjjvbdYlSDsmlN", - "EPCjjvbdiZuGLpmf", - "EObkKvbdnCJvxPNu", - "DnbkKvbdhzUelRNf", - "DnbkKvbdZeYGzgiC", - "DoCkKvbdDnbkLWbd", - "DnbkKvbdnHFYMmfy", - "DoCjjvbdePEsKtTr", - "DnbjjvbdZQmEhleR", - "DnbkKvbdTkunaVoJ", - "DnbkKvbdFWZPpMjF", - "DoDKjvbdSwkMNzkY", - "EOcLKvbdwtldpyMO", - "EOcKjvbdhkdcmtby", - "DoCjjvbdNQXqWNfs", - "EPDKjvbdzjUpPdTU", - "DnbjjvbdqceJPnWB", - "EPDKjvbdUyHsyjoO", - "EPCkKvbdZshhxcsO", - "DncKjvbdqAiFAWgd", - "EObkKvbdgFkzOGgA", - "DncKjvbdmgFYNNgZ", - "DoDLKvbdDjHjWYKA", - "DnbjjvbdJbicRKCx", - "DnbkKvbdfNFwHMjL", - "EPCkKvbdWSNxBdlD", - "EPDLKvbdCJKbLJFj", - "EPDKjvbdEOcKkXDE", - "EPCkKvbdVrOYCElD", - "DnbjjvbdCIkBjhej", - "DoDLKvbddoFTKstS", - "DnbjjvbduDDVXVoP", - "EObkKvbdxwiKCPzL", - "DnbkKvbdZGvdAPTJ", - "DoDLKvbdBdPaVjNG", - "EOcKjvbdIHGzYwxH", - "DoCjjvbdGFjSNhsq", - "DnbjjvbdlYsSSxgU", - "EPCjjvbdqrUjnKaN", - "EOcLKvbdtvOXipsA", - "DoDLKvbdrounjCuf", - "DoCkKvbdFVyPomKF", - "EOcKjvbdNHCpNPtk", - "EPDLKvbdWeyZtAPT", - "EPDKjvbdjcLkQfuH", - "EOcLKvbdzHZMAMeX", - "DoCjjvbdUMWPBVni", - "EOcKjvbdHELWKBjK", - "DoDKjvbdMgComQUk", - "DnbkKvbdiGjDZWJu", - "DncKjvbdyqOmJKXA", - "DoDKjvbdVZITyjoO", - "DoCjjvbdzQoNJJwA", - "EOcLKvbdGAoQxizm", - "DoDKjvbdatagYKsh", - "EPDKjvbdSBceMJYk", - "DoDLKvbdMpYQvOHT", - "DncKjvbdiCOcFWpq", - "DoCjjvbdUGznLvvF", - "EPDLKvbdANIYrvyx", - "EPCjjvbdIwtCHkpp", - "EObkKvbdJSyBSmYM", - "EObkKvbdwuMdqYlO", - "EObjjvbdmuVZkKSG", - "DncLKvbdSPsfjFdX", - "DoDLKvbdSQUHJedX", - "DoDKjvbdiVZdwSUb", - "EPDLKvbdRjxfVGkT", - "EObjjvbdmpZyVkZC", - "DncLKvbdhzUelROG", - "EPCkKvbdxVMeRZMO", - "EOcKjvbdxxIiapZk", - "EOcKjvbdJSyBTNYM", - "EPDKjvbdMSXMzUpz", - "EObkKvbdJmADzHVB" }; - - public static void main(java.lang.String[] unused) { - try { - BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("bad.out")); - for (int i = 0; i < strings.length; i++) { - out.write(strings[i].getBytes()); - out.write("\n".getBytes()); - } - out.close(); - } catch (Exception e) { - System.out.println("Some exception occurred"); - } - } -} diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/runtime/7158800/InternTest.java --- a/hotspot/test/runtime/7158800/InternTest.java Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -/* - * @test - * @bug 7158800 - * @run shell/timeout=400 Test7158800.sh - * @summary This test performs poorly if alternate hashing isn't used for - * string table. - * The timeout is handled by the shell file (which kills the process) - */ -import java.util.*; -import java.io.*; - -public class InternTest { - public static void main (String args[]) throws Exception { - final String badStringsFilename = "badstrings.txt"; - - if (args.length == 0 || (!args[0].equals("bad") && !args[0].equals("normal"))) { - System.out.println("Usage: java InternTest [normal|bad]"); - System.exit(1); - } - - FileInputStream fstream = new FileInputStream(badStringsFilename); - DataInputStream in = new DataInputStream(fstream); - BufferedReader br = new BufferedReader(new InputStreamReader(in)); - String toIntern, toDiscard; - int count = 0; - long current = 0L; - long last = System.currentTimeMillis(); - - if (args[0].equals("bad")) { - while ((toIntern = br.readLine()) != null) { - toDiscard = new String((new Integer((int)(Math.random() * Integer.MAX_VALUE))).toString()); - toIntern.intern(); - count++; - if (count % 10000 == 0 && count != 0) { - current = System.currentTimeMillis(); - System.out.println(new Date(current) + ": interned " + count + " 0-hash strings - last 10000 took " + ((float)(current - last))/1000 + "s (" + ((float)(current - last))/10000000 + "s per String)"); - last = current; - } - } - } - if (args[0].equals("normal")) { - while ((toDiscard = br.readLine()) != null) { // do the same read from the file to try and make the test fair - toIntern = new String((new Integer((int)(Math.random() * Integer.MAX_VALUE))).toString()); - toIntern.intern(); - count++; - if (count % 10000 == 0 && count != 0) { - current = System.currentTimeMillis(); - System.out.println(new Date(current) + ": interned " + count + " normal strings - last 10000 took " + ((float)(current - last))/1000 + "s (" + ((float)(current - last))/10000000 + "s per String)"); - last = current; - } - } - } - in.close(); - } -} - - diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/runtime/7158800/Test7158800.sh --- a/hotspot/test/runtime/7158800/Test7158800.sh Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# -# Run test for InternTest.java -# - -if [ "${TESTSRC}" = "" ] -then TESTSRC=. -fi - -if [ "${TESTJAVA}" = "" ] -then - PARENT=`dirname \`which java\`` - TESTJAVA=`dirname ${PARENT}` - echo "TESTJAVA not set, selecting " ${TESTJAVA} - echo "If this is incorrect, try setting the variable manually." -fi - -if [ "${TESTCLASSES}" = "" ] -then - echo "TESTCLASSES not set. Test cannot execute. Failed." - exit 1 -fi - -# set platform-dependent variables -OS=`uname -s` -case "$OS" in - SunOS | Linux | Darwin ) - NULL=/dev/null - PS=":" - FS="/" - ;; - Windows_* ) - NULL=NUL - PS=";" - FS="\\" - ;; - CYGWIN_* ) - NULL=/dev/null - PS=";" - FS="/" - ;; - * ) - echo "Unrecognized system!" - exit 1; - ;; -esac - -JEMMYPATH=${CPAPPEND} -CLASSPATH=.${PS}${TESTCLASSES}${PS}${JEMMYPATH} ; export CLASSPATH - -THIS_DIR=`pwd` - -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -fullversion - -${TESTJAVA}${FS}bin${FS}javac -d . ${TESTSRC}${FS}InternTest.java - -cp ${TESTSRC}${FS}badstrings.txt . - -${TESTJAVA}${FS}bin${FS}java ${TESTVMOPTS} -XX:+PrintStringTableStatistics -XX:+TraceSafepointCleanupTime InternTest bad > test.out 2>&1 & -C_PID=$! - -sleep 60 - -ps | grep ${C_PID} | grep -v grep - -if [ $? = 0 ] -then - kill -9 ${C_PID} - echo "Test Failed" - exit 1 -else - echo "Test Passed" - exit 0 -fi diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/runtime/7158800/badstrings.txt --- a/hotspot/test/runtime/7158800/badstrings.txt Wed Oct 31 18:35:56 2012 -0700 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30001 +0,0 @@ -EOcLKvbddZyPxYpb -DncLKvbdPxmAGrqj -DoCjjvbdpxoIHQdY -EPCkKvbdqYoHfqEY -DnbkKvbdezvYdiUX -DnbjjvbdeEoRbXCj -EObkKvbdbsCkUEKB -EOcLKvbdnUtyjiqf -DncLKvbdRWnDcMHc -DoCkKvbdrSUkOLAm -DncLKvbdfNFwGmJk -EPDLKvbdvAdYroFI -DoDLKvbdiGibyViu -DncLKvbdYqNEhmFR -DoCkKvbdEARhlzXX -DncLKvbdSZjHsCvA -DncKjvbdqTsgRqkU -DnbjjvbdqAiFAXHd -EPDKjvbdGcjvJaij -DnbkKvbdwtldpxkn -DoDKjvbdYkrETnMN -EPCjjvbdbBWEfQQX -EPCjjvbduMXwAtBX -DncLKvbdbsCkTcia -DoCjjvbdczYpYZRC -EOcKjvbdFeiqmhsq -DoCkKvbdKCicQibx -EOcKjvbdZLrEUOLm -DoCjjvbdaNKbStmH -DoDKjvbdJbjDQjDY -EPCkKvbdemFwGmKL -EPDKjvbdZQleImEq -DncKjvbdZjShPfbG -DnbjjvbdqYnhHREY -DoCkKvbdaRfDIUGL -DoDKjvbdLrWlyuQz -DnbjjvbdZisHofaf -EObjjvbdhtydvrUb -DnbjjvbdRotHKGEX -EObjjvbdNeEThhkE -EPCjjvbdZtJJZESn -DoDKjvbdnPyxvLYb -EPDKjvbdeEoRbWbj -EOcLKvbdFxttaEXb -EObjjvbddwystRez -EPCjjvbdJpzEnenF -DnbkKvbdTppntuIN -EPCkKvbdTukpKUBR -DnbkKvbdhlFEOUcZ -EObkKvbdlhdUQuRa -DnbjjvbdkClKqHUg -EOcKjvbdqTtGqqkU -DncKjvbdtkwvaUBX -DoDKjvbdsQWOjCuf -DncLKvbdEKIJuwjA -DncKjvbdGLErcIMu -EOcLKvbdNPwpumfs -EObkKvbdnVUzLJrG -DoCkKvbdcTDKsdKB -DncKjvbdKRZdoFme -EOcLKvbdemFvgNKL -EPCkKvbdznopdblY -EPDLKvbdOYPVzdOU -DnbjjvbdsZlPsAhO -DoDLKvbdKCjDRKDY -DoCkKvbdhuZeXSVC -EPDKjvbdOStVgEtp -DncLKvbdvwMAvBWV -EPDKjvbdBcoaWJlf -EOcKjvbdZxdKODMS -DoCjjvbdbsCkTcjB -EOcLKvbdwWlAuaWV -DnbjjvbdFejRnJUR -DnbjjvbdmIdTqVSB -DnbkKvbdqBIeAWhE -DncKjvbdrMzJyMIJ -DoCkKvbdZGvdAOsJ -DncLKvbdjggLfFnL -DoCjjvbdYqNFJMdq -DoCkKvbdqZPHfqDx -DncLKvbdOEdThiLE -DoCkKvbdZirgpGaf -EPDLKvbdziuQPdSt -EObkKvbdKQyeOenF -DoDLKvbduaDySndh -DoCjjvbdVUNUGLvK -DncKjvbdAMhYrvzY -DnbkKvbdnQZxvKxb -EPCjjvbdBhjakJFj -DncLKvbdmfeYNNfy -DoDLKvbdjlbLydfo -DoDLKvbdpyPIGpcx -EOcLKvbdnVUzLJqf -DoCjjvbdmJETqVSB -DoDLKvbdJTZAsMxM -DoCkKvbdnQZxvLZC -DoDKjvbdACqwizJQ -DncKjvbdvBEZSoFI -DncKjvbdGckVjCJj -DncLKvbdiMFENtcZ -Dnbjjvbdjuvmcaww -DnbkKvbdZyEKNblS -DoCjjvbduMYXBUBX -DnbjjvbdFWYopNJe -DoDKjvbdelfXGljL -DnbjjvbdakLenmcA -EPDKjvbdfILWRmpg -EObjjvbdSLYeuHLT -DoCjjvbdMfbolotk -EPDLKvbdrRuKnKaN -EOcKjvbdyzdnRhIh -DoDLKvbdGAoRZJzm -DoCjjvbdhlFDnUcZ -EPDLKvbdmpZyVkYb -DncKjvbdTpqPUuIN -DncLKvbdHDjvJaij -EPDLKvbdYlRcsmkm -EPDLKvbdvlvAMdFN -DncKjvbdIsZArmYM -EOcLKvbdegjuqnQg -EOcLKvbdZQmFJNFR -DoCjjvbdZxdJmcMS -EPCkKvbdlZTSTYgU -DoDKjvbdqceJPnWB -DncLKvbdVgwuxGxz -DncKjvbdDnbkLXDE -EPDLKvbdatbHYKsh -DncKjvbdEzsqFLbi -EPDLKvbdnVVZkKRf -EOcKjvbdKeegbBQu -EPCkKvbdKfGHaaRV -EPDKjvbdmIctRVRa -EPCjjvbdRMxBxnUz -DnbjjvbdJYTbILpp -EPCkKvbdTAEiHbPE -EOcLKvbdfelZnGgA -DoCjjvbdOStWGeUp -EOcLKvbdemGXHNJk -DoDKjvbdYTMAmUOx -EPCkKvbdpyOhGpcx -EPCkKvbdAMgxsWzY -DnbjjvbdYkrETnMN -EPDLKvbdUQqPUtgm -DncKjvbdehKurNqH -DoCjjvbdZMSETnLm -DoDKjvbdIHGyyXwg -EObjjvbdXGYzUAPT -DoCjjvbdhbPCeWqR -DoCkKvbdKNADzGuB -DnbjjvbdFeirOJTq -DncLKvbdaRecHtFk -DnbkKvbdzoPpeClY -EObkKvbdZRMeJMeR -DnbjjvbdYfvdAPSi -DncLKvbdJcKCqJcY -EOcLKvbdqvokbhyR -DoDLKvbdrRuLNjaN -DoCjjvbdTlWPBWOi -DoCkKvbdjvWnEBxX -DoDLKvbdTkunaVoJ -DoCkKvbdQZNAHTSK -EObjjvbdqwPkbhyR -EOcLKvbdNHDPlpUk -DncLKvbdIHHZxxYH -DncLKvbdtkxXAtAw -DncLKvbdSCEFMJZL -DnbjjvbdZQmEhldq -DoCjjvbdNGbolotk -DnbjjvbdnCKWwnmu -DncLKvbdzHZMANEw -DoDKjvbdmttykJrG -DnbkKvbdlrZUzSci -EPDKjvbdSKyGVHKs -DoCjjvbdKVuGEFGi -EPCjjvbdCIkBkIej -DncLKvbdzHZMAMeX -DnbkKvbdaSFbgsek -DncLKvbdHDjujBij -DoDKjvbdGZVUaDwb -DnbjjvbdZnnJFEzK -DoCkKvbdtcDUwWOo -DoCkKvbdlBMoNALA -EOcKjvbdNsUWHFUp -DoDLKvbdVUNUFlVj -DnbkKvbdhkdcnUcZ -DncLKvbdLiBkqYAS -EOcKjvbdzoPpdcLx -EPDKjvbdijGIJmXr -EOcKjvbdZisHofaf -DoDLKvbdeOdrkUUS -DoDLKvbdnPyxvKxb -EPDKjvbdIxUBhMRQ -DncLKvbdlhctRUqa -DoDLKvbdmgFXlnGy -DncKjvbdCJKbKiGK -EOcLKvbddndrjtUS -DnbjjvbdkDLjqGuH -DncKjvbdmIcsptqa -DoCkKvbdvvlAvBWV -EObjjvbdjblLQftg -DnbjjvbdCEQBWKMf -DnbjjvbdBdPaVilf -DoCkKvbdZxcjODLr -DoCkKvbdEObjjwCd -EPDKjvbdyTNhlqbH -EPCkKvbdUMVoAvPJ -DncKjvbdUxhUZjoO -DncKjvbdqqtjmkAm -DncKjvbdKfGICBRV -EPCjjvbdVrOXaeLc -EPDLKvbdwXLaWBWV -EPCkKvbdjblKqHUg -DnbjjvbduDCuWuoP -EPDKjvbdNGbpMouL -EObjjvbdBcoaVjNG -DncLKvbdrWpMDIxq -DncLKvbdhaoCdwRR -DnbkKvbdFxtuBDwb -DncKjvbdIjEAKPgE -EOcLKvbduCbuXVoP -DoDKjvbdZtIiZDsO -DnbjjvbdEztRElCi -DncLKvbdxmsHwsJD -DnbjjvbdRbEElIxk -DoDKjvbdWHwvXgYz -EOcKjvbdQlwbYnUz -EOcLKvbdVTltFkuj -DncKjvbdliETptqa -DnbkKvbddoErjtTr -DoCkKvbdgPazvdXh -DncKjvbdySmhlqag -DoCjjvbdbPgHDkzd -DoCkKvbdFWZPomKF -EObjjvbdssSSxydc -EObjjvbdzQnliJwA -EObkKvbdKCjCpibx -EPCjjvbdpyOhHREY -DncLKvbddjJqutzn -EObkKvbdBdQAujMf -EPCkKvbdLAjflbXq -DncLKvbdLBLGlaxR -DoDLKvbdrpWPJbuf -DoCjjvbdEKHiuxKA -DoCjjvbdXsMAlsnx -EObkKvbdptTgSSLU -DoDKjvbdnHFXmNfy -DncKjvbdCJKbKhej -EPCjjvbdhlEdOUby -EOcKjvbdKWUfEFGi -DoDKjvbdZQmFJMdq -EPCjjvbdiGjDZWKV -EObkKvbdVAbQrprZ -DoDKjvbdfekzNgHA -DoDLKvbdnHEwlmgZ -DncKjvbdwzHeexEr -DoCjjvbdmpZxujyC -EPDKjvbdwMvAMcdm -DoCjjvbdfHkVrNqH -EPCkKvbdYzbfRiuy -EPCkKvbdZtIiZDrn -DnbjjvbdjvWnDbYX -DoCjjvbdOStVgEtp -EPDLKvbdZMSETmlN -EPDKjvbdBhjajhej -EPCjjvbddoFTLUUS -DnbkKvbdsQVoJcWG -EPCjjvbdrEFJQNvB -DoCjjvbdMpYRWOGs -EOcLKvbdZirgpHBf -EPDLKvbdyOTIXsJD -DoCkKvbdKRZdnfNe -DnbjjvbdbBWFFoow -EPCjjvbdgFlZnHHA -DnbkKvbdGGJrOIsq -DoDLKvbduDCtwWPP -EObjjvbdNddUIhjd -DnbjjvbdxsNiMqag -EObjjvbddeOrCWbj -EObjjvbdPxmAGsRj -EOcLKvbddeOrCXDK -DoDLKvbddeOrBwCj -DoCjjvbdVqnYCElD -DnbkKvbdUyIUZjoO -EObjjvbdeFOrCXDK -EObkKvbdVrNxCFLc -EObjjvbdTfzmkwWF -EOcKjvbdIHGzZYYH -EPDKjvbdtbbuXWPP -DoCjjvbdZisIQHBf -EObjjvbdbsCkUDjB -EPCkKvbdVwJXudFH -EPDKjvbdrouoKDVf -EPCkKvbdFyVVBEYC -DncLKvbdZnnIeEzK -EPDLKvbdxVNFQxkn -DoDKjvbdpxnggRDx -DoDLKvbdqZOgfpcx -DncKjvbdCIjakJGK -EPCkKvbdCJLBjhej -DoDLKvbdnPzYvKxb -EOcKjvbdqTsgSRkU -EOcLKvbdLBLGlaxR -DoDLKvbdcbTMrAUN -DncLKvbdzitoodSt -DoDKjvbdJvUfDdfi -EOcLKvbdHDjvKCJj -EPCkKvbdeOeTKssr -DnbkKvbdlYrqsYft -DncLKvbdiiehKMxS -DncKjvbdURQoVUhN -DnbkKvbduMYXBUAw -DoDLKvbdSPtHJfEX -EObkKvbdqBJFAWgd -EOcKjvbdFpATWgFy -DoDLKvbdBsBDTfXS -DncKjvbdjhHLfFmk -DoCjjvbdCJKakIfK -DnbkKvbddoFSjtTr -EObkKvbdANIYsWzY -EObjjvbdCTAbtFvr -EObjjvbdrRtkOLAm -DnbkKvbdkxsSTYgU -DoCjjvbdnBiwXnmu -EObjjvbdwtmEqYlO -EPDKjvbdrylQTAhO -DoDLKvbdtbbtvvOo -EPCjjvbdZLrETmlN -EPDLKvbdWXJYWDdg -DoCkKvbdKQzFOfOF -EPCjjvbdwzIFfXeS -DncKjvbdRjyFuHLT -EPDLKvbdULunaWPJ -DncKjvbdUxhTykOn -DnbkKvbdJcKCqKDY -EPDLKvbdcbSmSATm -DnbkKvbdegjurNqH -EPDKjvbdZjTIQGbG -EPCjjvbdiLddNuCy -DoCjjvbdZQldiNEq -EOcLKvbdakMGPODA -EObjjvbdnHEwlmgZ -EOcLKvbdBsAcUGXS -EPCkKvbdiVZdwSUb -EOcLKvbddCTNSAUN -DnbkKvbdEXxMUUUM -DncKjvbdYpldiMeR -DoDKjvbdNddTiIjd -DoDLKvbdZLqdUNlN -EPCkKvbdiBncFWpq -DncLKvbdiCPDEvqR -EOcKjvbdUyHszKoO -DncKjvbdhtydvqtb -EPCjjvbdpxoHgQcx -EObkKvbdkWWnDaxX -DnbjjvbdBhkBkJFj -DoCkKvbdRacdkhyL -EOcLKvbdZjTHpHCG -EPCkKvbdMowqWOGs -DncLKvbdegjurNpg -EObjjvbdfMfWfmKL -EPDLKvbdZirgpGaf -DoDLKvbdiZuFlQnG -DncLKvbdFxuVAcxC -EObkKvbdZisHofaf -EOcKjvbdJSyBSmYM -EPDLKvbdVYgtZkPO -EOcKjvbdRbEFMJYk -DncLKvbdrEFIonWB -DncKjvbdKDJbqJcY -EOcLKvbdhfjCxuiu -EObjjvbdLLAhWAKZ -DoCkKvbdRXNcblID -DoDLKvbdcbSmSATm -EOcLKvbdwWlAvAuu -EObkKvbdiBnbdvpq -DoCkKvbdNQXpumgT -DncLKvbdkVwOECYX -DnbkKvbdfoazwDxI -DoDLKvbdbBWFFpPw -DoDLKvbdvBDxsPEh -EPDKjvbdJqZdoFme -DoDLKvbdIryArmXl -EPCjjvbdANIZSwZx -EPCkKvbdVhYVxGxz -DncKjvbdLAjgNCYR -DncKjvbdxxIjCQZk -DncKjvbdbiNKKewY -EPCjjvbdlrZVZsEJ -EPDKjvbdIryAsMwl -DoCkKvbdtAHRIAAr -EPDKjvbdJmAEZfuB -EPCkKvbdZjSgogBf -DoDLKvbdOXnuzcnU -DnbkKvbdehKvRnQg -EObjjvbdZyDimbkr -DoDKjvbdmajWwoOV -EOcKjvbdkMalZeHP -EOcKjvbdIjEAJpHE -EPCkKvbdDihKVxKA -DncKjvbdNddUIiKd -EObjjvbdqdFIpOWB -DoCkKvbdxnShXsJD -DoDLKvbdjmBkzEfo -EOcLKvbdatagYLTh -DoCjjvbdVhYVxHYz -DnbjjvbdJbjDRKDY -EPCjjvbdLBLHNCYR -DnbjjvbdnGeYNOGy -EOcLKvbdUsmTekvK -EPCjjvbdtkxXBTaX -EPCjjvbdzoPqFCkx -DncKjvbdCIjbKhej -DncKjvbdZLqdTmkm -DoDKjvbdsPunicVf -EOcKjvbdmgFXmNgZ -EObkKvbdiMFENuCy -DoDKjvbdhanbeXRR -EObkKvbdACqwiyhp -DncKjvbdZisIQHBf -EPCjjvbdgQBzwDwh -DnbjjvbdyYJJaoyk -DoDKjvbdxUldqZMO -EObkKvbdkClLQgVH -EPCjjvbdZQldiMeR -EPDLKvbdZyEKOClS -EPDLKvbdcIlikFvx -DoDKjvbdrzMQTBHn -DnbjjvbdVYgtZkPO -DoDLKvbdHEKuiajK -EPCkKvbdczZQXxqC -DoDKjvbdrDdiQNua -DncLKvbdcImKLGWx -DoCjjvbdVYgtZkPO -EPDLKvbdZnnIeFZj -EPDKjvbdMIakqYAS -DoCkKvbdSLYfUgLT -EPDLKvbdiCObdvpq -DnbjjvbdRpUHKFcw -DoDLKvbdIHHZyYXg -EPCjjvbdypoMhiwA -DnbkKvbdCEPaVjMf -DnbkKvbderAvzlDP -DnbkKvbdZQleImFR -EOcKjvbdKRZdneme -DoDLKvbdiBnbeXQq -DncLKvbdEPDKjvcE -EOcLKvbdauCGwkTh -DncLKvbdEvZQPmJe -EPCkKvbdURQnuVIN -DncLKvbdegjvSOQg -EPCjjvbdKaKgMawq -DnbkKvbdRzKISbvA -DncLKvbdiLdcnUcZ -EPDLKvbdkDMKpfuH -DoDLKvbdRbDdkhyL -DnbjjvbdDwxMUUTl -DnbkKvbdrpWPKCuf -DnbkKvbdNVSqjmAX -DoDKjvbdRbDeMIxk -EOcLKvbdcyxpXyRC -DncLKvbdRMwbYnUz -EObjjvbdqlzJxlHi -DoCkKvbdJYUCIMQp -DncLKvbdLZQjSzuG -EOcKjvbdxVNEqYkn -DnbkKvbdZoOIeFZj -DoCjjvbdBraCtFwS -EOcLKvbdliDsqVSB -EPCkKvbdeATqNXif -DncLKvbdkMbLydgP -EObjjvbdZxdJmbkr -DoCjjvbdraellHLZ -EObkKvbduDCuWvPP -DoCkKvbdpstGrSLU -DoCjjvbdLGFgbBQu -DnbkKvbdhtzFWquC -EObjjvbdoAKztHdO -EPDLKvbdatafxKtI -EPDKjvbdkWXNcaww -DoCkKvbdwkXEHzzG -EObkKvbdmgEwmNgZ -DncKjvbdBiLCLJFj -DoCjjvbdeOdsKssr -EOcLKvbdfILWSORH -EObkKvbdCDpAujMf -EPDKjvbdKDKDQibx -DoDKjvbdVUMtGLuj -EObkKvbdrXQMCiYq -DncKjvbdePEsLTtS -DncLKvbdDxYLtUTl -EPCkKvbdGYuVBEYC -DncLKvbdNeEUIiKd -EPCkKvbdpxoIHRDx -EObjjvbdFkEsDHlu -EObjjvbdssSSxzFD -DoCkKvbdUtNTfMVj -DnbjjvbdJcKDRKDY -DncKjvbdqiAKEmOe -DoDKjvbdtlXwAtBX -DnbkKvbdxmsIYTIc -EObkKvbdLrXMzUpz -DoCjjvbdkxsSSxft -DncKjvbdQlwaxnUz -EObkKvbdjhGlFfNk -EPCkKvbdxsNhmRag -DoDLKvbdMfcPmQUk -DoDKjvbdQvnEDLhD -EObjjvbdVgxVxHYz -DoDLKvbdlrYtyrdJ -DoCjjvbdezvYeIsw -DncLKvbdNddTiIjd -EPDLKvbdGGJrNiUR -EPDLKvbdRzJhTDWA -EPCjjvbdvvkaWBVu -EOcKjvbdRXNdCkgc -EOcKjvbdQZNAHTSK -EPCkKvbdsCGNLfkZ -EOcLKvbdDwwktTsl -EOcLKvbdqlzJyLgi -EOcLKvbdxsNiMqag -EOcLKvbdhzVFlROG -EOcKjvbdEztRFMCi -DnbkKvbdqiAJdmPF -EPDLKvbdjcMKqGtg -EObkKvbdTlWOaWOi -EPDLKvbdURRPUuHm -DoDKjvbdelfWgNKL -EOcLKvbdGAnqZJzm -EObjjvbdGZUuAdXb -DoDLKvbduLwwAtAw -DoCjjvbdZjTIQGbG -EPCjjvbdRNXbYnUz -EPDLKvbdiLeENtby -EObjjvbdMowpunGs -EOcKjvbdbiNJjevx -DoDKjvbdEYYLstTl -DoDLKvbdqUTfrRjt -DoDKjvbdbsCkUEJa -DoDKjvbdXsMBNUPY -EPCjjvbdRNXaxnUz -DoDLKvbdNGcQNQUk -DnbjjvbdEARiMywX -EPDKjvbdSKxfUfkT -DncKjvbdhtyeXRtb -DncKjvbdZLqcsnLm -EObkKvbdZnmheEzK -EObjjvbdtbcUvuno -DnbjjvbdrzMQTBHn -DnbjjvbdDwwktTsl -EPDKjvbdkxsSTYgU -DoDKjvbdIryArlxM -DoDKjvbdnBivxOnV -DoDKjvbdeATplwif -EOcLKvbdKeegbApu -EPCjjvbdMgDQMotk -DoCjjvbduCbtwWOo -DnbkKvbdyNsHwrhc -DnbkKvbdtvNxJpsA -EOcLKvbdqAheAWgd -DoCkKvbdURQoUtgm -EOcKjvbdqceIpOWB -DoCkKvbdVwIwudFH -DnbkKvbdbLMFnmcA -EOcLKvbdZjTHpHBf -EOcKjvbdRXNdCkhD -EPDLKvbdiHJcZViu -DoCjjvbdxxIjCPzL -DnbkKvbdBcpBWJmG -EPCkKvbdZyEKOCkr -EPDKjvbdOTUWHFVQ -DoCjjvbdIGgZxwwg -EPDLKvbdFjeSbhMu -EPDLKvbdhgKCxvJu -EOcLKvbdNsUWGdtp -EPDKjvbduVnXipsA -DncLKvbdGYuVBEXb -EPDLKvbdZtIhyESn -DoDKjvbdZxdJmcLr -DoCjjvbdUsltGLuj -DoDKjvbdDoDLKvbd -DncLKvbdrDdhpNvB -EPDLKvbdKCjDRJbx -DoDLKvbdxLWdHzyf -EObkKvbdrzMQTAhO -EOcLKvbdOFDtJJKd -EPCkKvbdrSVKmjaN -EOcKjvbdWWiYVdEg -EOcKjvbdWWhwvDdg -DncKjvbdpstHRqjt -EPCkKvbdKWVFceGi -DoCkKvbdZjShPfbG -DoCkKvbdSxKlNzkY -EPDLKvbdIwtCHkqQ -EOcKjvbdsCGNLgLZ -DncKjvbdzaAOfgCM -DoDLKvbdxmrhYSiD -DncLKvbdfMfWgMjL -EPDKjvbdqFdEsuaI -EOcLKvbdiLeDnUcZ -DoCjjvbdKVuFceHJ -DoCjjvbdfekzNgHA -EOcKjvbdOFEThiLE -EPDLKvbdqceJPnWB -DoDLKvbduCbtwWOo -DncKjvbdTqROtuIN -DncKjvbdpedFUWBI -DoDLKvbdrEFJQNua -DoDLKvbdyXhjCPyk -EPCkKvbdJYUBhLqQ -EPCkKvbdtcCuXVno -DoDLKvbdZLrEUOLm -EPCkKvbdpstGrRjt -DncLKvbddePSCXCj -EObkKvbdauCHXjsh -DoDLKvbdkHfkefNk -EObjjvbdMRwMzUpz -EObjjvbdaMkCTVNH -DoCkKvbdGGJrNhtR -EPDLKvbdvBDxrneI -EPDLKvbdIHHZxwxH -EOcLKvbdrJAJdmPF -EOcKjvbdGZUuAdXb -EOcLKvbdbUbHYLUI -DnbjjvbdJzofYEAN -EPDKjvbdFxtuBDxC -DnbkKvbdQvnDbkgc -EPDKjvbdJmADzGta -DoDKjvbdZRMdhleR -DnbkKvbdsrqsZZeD -EObkKvbdrovPJbuf -EPCjjvbddeOqbXCj -EObjjvbdtcDVXVoP -DncKjvbdMfbpNQVL -DoCkKvbdhbPCeXQq -DoCkKvbdNHComQVL -EObjjvbdvBDxroFI -EPCjjvbdnBivwoNu -EObjjvbdbhljKewY -EPDKjvbdZyDimcMS -EObkKvbdWSOXbElD -EOcKjvbdTfznMXVe -EPCjjvbdZtJJYcsO -DoCjjvbdRjxfVHLT -DoCkKvbdVTltGMVj -DncKjvbdYfwEAOri -DncKjvbdYkrEUOMN -EObkKvbdqGEEsuaI -DncLKvbdjJfHimXr -EPDLKvbddndsLUTr -DnbkKvbdqBJFAWhE -EPDLKvbdEOcKjwDE -EPCkKvbdtvOYJqTA -DncLKvbdkyTRsZHU -DoCjjvbdTppnuVIN -DncLKvbdwyhFeweS -DncKjvbdsBelkgKy -DoCjjvbdKDKCqJcY -DoCjjvbdkClKqHVH -DoCjjvbdcTCjtDia -EPDLKvbdUVkpJtAq -EPDLKvbdRyjITCvA -DnbjjvbdJuuFcdgJ -DoDKjvbdrJAJdmOe -DncKjvbdJcJbqKCx -DoDLKvbdJcJbqJcY -DoDKjvbdeEoSCXDK -DoDLKvbdSwjlNzkY -EObjjvbdzitopDrt -DoCkKvbdKWVGEEgJ -DncKjvbdpssfqrKt -EOcLKvbdUMWPBVoJ -DncKjvbdyzdmrIIh -EPCjjvbdxUldqZLn -DoDLKvbdySnImRbH -DoCjjvbdGdKvJaij -DoCkKvbdxZgeewdr -EObkKvbdiLddNuDZ -DnbjjvbdSCDdkiZL -DncKjvbdznpREcMY -EOcLKvbdaRebhTfL -DnbjjvbdZQldiMdq -EPCjjvbdbrbjtEKB -EOcKjvbdEARiMzXX -DoDLKvbdXrkaNTnx -EPCkKvbdQZNAHTRj -DoDLKvbdEzspeLcJ -EPCjjvbduVnYKRTA -EObjjvbdJXtBhMQp -EPDKjvbdeOdrjssr -EPCjjvbdLqwMytpz -EPDKjvbdUMVoBVoJ -DncKjvbdRpUGifDw -EPDLKvbdZyDinDLr -DnbkKvbdNrsufeVQ -EPCkKvbdZMSDtNlN -EPCkKvbdySnJNSCH -EPCjjvbdfMevfljL -DncLKvbdXsMBNTnx -DnbkKvbdpxoHfqDx -DncLKvbdUQpntthN -DncKjvbdIsZArlwl -DoDLKvbdZGwEAOsJ -EOcKjvbdVvhwvDdg -EOcLKvbduWNxJqTA -EPCjjvbdHEKvJaij -DoDKjvbdrpWOjCuf -DncLKvbdrpWOjDVf -DoCjjvbdIHGzYwwg -DoDLKvbdpxoIGqEY -DoDLKvbdJcJbqKDY -DoCjjvbdRWmdClHc -EPCjjvbdFWYopNJe -DncKjvbdmfdwlmfy -DoCkKvbdxUleQxlO -EObjjvbdnGdxMnGy -EPCjjvbdvvlAvBVu -DncLKvbddndsKssr -EObjjvbdZMRcsnLm -EOcKjvbdFxttaEXb -DncKjvbdVUNTfMVj -EOcLKvbdNrtWHFUp -DoDKjvbdwuMdqYlO -EPDLKvbdrXPkbhxq -EObjjvbdrEFIpNua -EObjjvbdziuQQDrt -EOcLKvbdqYoIGpcx -DnbjjvbdsQVoJcVf -EObkKvbdkDMKpgUg -EObjjvbdvBDyTPFI -DncKjvbduCbuWvOo -EPCjjvbdkVvnECYX -DncLKvbdZGvdAOri -DoCkKvbdrXPlDJZR -EOcLKvbduCcVWvOo -DoDKjvbdCEPaWJlf -EPDKjvbddoErjssr -DncKjvbdACqxKZiQ -EPCjjvbdUVlPitAq -EPDKjvbdjJfHjMxS -EObkKvbdAMhYsWzY -DoDKjvbdnBivxOmu -EOcLKvbdbiNKKfXY -EPDKjvbdYqMeIleR -EObkKvbdJmADygUa -EObjjvbdEPDLLWcE -EPCjjvbdrXPkcIxq -EOcLKvbdliDtQtqa -DoCjjvbdmoyxujyC -EPDLKvbddoFTLTsr -EOcLKvbdCWzdJEpW -DnbjjvbdrEEhpOWB -DoDKjvbdZLrDtNkm -EOcLKvbdLFfHbAqV -EOcKjvbdmttzLKSG -EOcLKvbdmbJvwoOV -EOcKjvbdUaCQrqSZ -DnbjjvbdmgExMnGy -EPDKjvbddndrkUUS -EObkKvbdDwwkstTl -DoCkKvbdcJMjLFwY -DnbjjvbdaNLBruMg -DoDLKvbdQYmAHTRj -DnbkKvbdsQWOicWG -EObkKvbdMRwMzUpz -DoDLKvbdZshiZDrn -EPDLKvbdnPzYujxb -EOcKjvbdCEQAujMf -EPDLKvbdKefHbApu -DoDLKvbdYpldiNFR -DoCkKvbdFWZQQNJe -DncLKvbdznpQeCkx -EOcKjvbdnQZxvKxb -DoCkKvbdVBBprpqy -DnbkKvbdZirhPfaf -DnbkKvbdegjvSNqH -EOcLKvbdqdEiPnWB -EObjjvbdBhkCKiGK -EObjjvbdxZgfGYFS -DnbjjvbdNQYQumgT -EPCjjvbdxsNhlrBg -DoCkKvbdQdDApRDr -DoCkKvbdxxIiaoyk -EPDKjvbdFeirNhtR -DoCjjvbdegjvSOQg -EObkKvbdqcdiQNvB -DncLKvbdiMEdNtcZ -DncLKvbdTqRPUthN -EPCkKvbdwygeexFS -DoDKjvbdyTOJMrBg -DncLKvbdeEoRavbj -EPCjjvbdtbcUvvOo -EObjjvbdKCicRJcY -EObjjvbdZyEKODMS -DnbjjvbdmJDtQtrB -DncLKvbdEARhlyvw -DnbjjvbdIxTbILqQ -EOcLKvbdwygefYFS -DoCjjvbdznoqFCkx -DoCjjvbdRpUGjGDw -DncKjvbdhzVGMQnG -EPCjjvbdhkeDnVCy -EObkKvbdOEdUIiKd -DncKjvbdrDeIomua -DncLKvbdiHJbxuiu -EPDKjvbddxZstRez -EPDLKvbdmSYuZrdJ -EObkKvbdVUNUFkvK -EPDLKvbdNeEUJIjd -DoCkKvbdiMEdNuCy -DoDLKvbdRDcApQcr -EPCjjvbdTlVoBVoJ -EObjjvbdLBKgNBwq -EPCkKvbdsCFllHKy -EObjjvbdnVUzLJqf -DoDKjvbdqrVLNkBN -DoCkKvbdqFcdtWBI -DncLKvbdbVCGxLTh -EOcLKvbdeFPSCXCj -EOcLKvbdRpTgKFdX -EObjjvbdznpQeDLx -EOcKjvbdjvXNcaxX -DnbjjvbdHDkWJbJj -DncKjvbdhkeENuDZ -DnbkKvbdnUtyjjSG -DoDKjvbdSQUHJfDw -DncKjvbdbUbHYLUI -EOcLKvbdNsTvGduQ -EPDLKvbdSZigsCvA -DncKjvbdMfcPlpUk -DoDLKvbdxrnIlrBg -DncKjvbdiLdcnVCy -EPCjjvbdmfeYNOHZ -DoCkKvbdjvWmcaxX -DoDKjvbdbUbHXkUI -DncKjvbdBhkBjiFj -DoDLKvbdNHColpVL -EOcKjvbdrykosAhO -DncLKvbdqGDeUVaI -DnbkKvbdhgJcZViu -DnbjjvbduLxXAtBX -EPCjjvbdYpleJNFR -EPDLKvbdQvmdClHc -DnbjjvbdJYTbIMRQ -DncLKvbdznpRFDMY -EOcLKvbdZnmiFEyj -DnbkKvbdrRuLOLAm -EObkKvbdhkeEOUby -DncLKvbdYlSEUOLm -DoCjjvbdhkdcmtby -DncLKvbdddnrCXDK -DoDLKvbdKaLHNCYR -EOcKjvbdcyxpYZQb -EPDLKvbdACqwjZhp -DoCkKvbdBsBDTevr -EObkKvbdeKJqvUzn -EObkKvbdcImJkGWx -DncLKvbdYSlAltOx -DncLKvbdlrYtyrdJ -EObkKvbdKxqJrztf -EOcKjvbdsQWPJcVf -DoDKjvbdkySqrxgU -EObjjvbdeEoRbXCj -EOcKjvbdHDkVjBij -DoDLKvbdCTBCsfXS -DoCjjvbdKCjDQibx -DoCjjvbdlhdTqUrB -DoDKjvbdTulQKTaR -DoCkKvbdRjxetfkT -EPCjjvbdEuyQQNKF -EPCjjvbdDoDKkXDE -DoCjjvbdsQWPJbuf -DoDKjvbdhuZdvqtb -EPDLKvbdiHKCyWJu -EPDLKvbdLFegaaQu -DoCjjvbdqZPHgRDx -DncKjvbdUWMPjUAq -DoDLKvbdTYKkmzjx -DoDKjvbdegjvSOQg -DnbkKvbdUtNTekvK -EObkKvbdNsTvGeVQ -DoDLKvbdfNFvgMjL -EOcLKvbdZQmEiNEq -EPDKjvbdBraDTfWr -EPDKjvbdNGcQNQVL -EPDLKvbdZyEKODMS -EOcKjvbdBvzdIdpW -EPCjjvbdACqwiyiQ -DoCjjvbddePRawCj -EPDKjvbdWWiXucdg -DoDKjvbdWexzUAPT -DnbjjvbdwXMBWBWV -EOcLKvbdUyHszLOn -EPCkKvbdOYOuzcnU -EPCkKvbdhancEwQq -DnbkKvbdjggLefOL -EPCkKvbdFjdsDIMu -DoDKjvbdrSUjmkBN -DoDLKvbdZjTIQGaf -DoDKjvbdMgDPmPtk -EPDLKvbdWRmwbFMD -DoCkKvbdzROmJKXA -DnbkKvbdrDdiQNvB -DnbjjvbduDCtwVoP -EOcLKvbdCIjbLJFj -EPDKjvbdXrkaMsnx -EPDKjvbdVhXvXfxz -DncKjvbdhbPDEwRR -DoCkKvbdpxoHgQcx -DoCkKvbduMXwBUBX -EObjjvbdNeEThhjd -DoCjjvbdirzhrkJz -DoDLKvbdaMkCTUlg -DncLKvbdWRnYBeLc -DnbjjvbdGBPRZJzm -EOcLKvbdeOeSjstS -DoDLKvbdmIctRVSB -DoCjjvbdZxdJnDMS -DoCkKvbdRpTgKFcw -DncLKvbdTukojTaR -DnbjjvbdKRZdoFme -DnbkKvbdURQoVUhN -DoDLKvbdyYJKBozL -EObkKvbdfNFwHMjL -DoDLKvbdZisIQHBf -EObkKvbdqFcdsuaI -DncLKvbdzoPqFDLx -DoDKjvbdSKxeuHLT -EPDKjvbdsBemLfjy -DoCjjvbdJbjCqJcY -DoCjjvbdNPxRVnGs -DncLKvbdGcjvJbKK -EOcKjvbdrWpMDIxq -EOcLKvbdQdDApQcr -DoDKjvbdZMRdTnLm -EOcLKvbddxZssrFz -EObjjvbdUtNTfLuj -EPCjjvbdLLBIWAKZ -DoCkKvbdgFlZmfgA -EPCjjvbdUVkoitAq -DoDKjvbdDncKjvcE -DoDLKvbdRpUHJfEX -EPDKjvbdLqvlzVQz -EPDKjvbdZMRdUOLm -EOcLKvbdCJLBkIfK -DncKjvbdaSFbhUFk -EPDLKvbdZoNheEzK -DncKjvbdUVlPjUAq -DnbkKvbdKNADyfuB -EObkKvbdZdwfzghb -EPDLKvbdZtIhxcrn -EObkKvbdGckViajK -DncLKvbdFfJqmiUR -DncKjvbdKWUfDdgJ -DoDKjvbdMtrqjmAX -EOcLKvbdsQWPKDVf -DoCjjvbdwtleRZMO -EObjjvbduaDxsPEh -EPDLKvbdKxqJrzuG -EOcKjvbdVAaprprZ -EObjjvbdEuxopMjF -DnbjjvbdyOTHwriD -EPDLKvbdrpVnibvG -EPDKjvbdkWWnDaww -DncLKvbdrXPkbiYq -DoDLKvbddxZssqez -EOcLKvbdHDkWJbJj -DncLKvbdEPCkLWcE -DnbkKvbdEXwkstTl -EObjjvbdqiAKEmOe -DncLKvbdjAQGaQGj -EPCjjvbdNeDtJJKd -EPCjjvbdvwMBWBVu -EPDKjvbdFejSOItR -EOcLKvbdNPwqWOHT -EPDKjvbdbsCjscia -EObkKvbdyYIiaoyk -DoDKjvbdLZQirzuG -EObjjvbdSLZGVGjs -DoCjjvbdAMgxsWzY -DoDLKvbdEObjjwCd -DnbkKvbdsPvOicWG -EPCkKvbdrJAKElne -EPCkKvbdauCGwjsh -DncLKvbdegkWRnQg -EPCkKvbdYpmEiNFR -DoDKjvbduaDxsPFI -DoCjjvbdcyxoxYqC -DoCkKvbdkMakzFHP -DnbjjvbdJbibqJbx -DnbkKvbdWWhxWDeH -DoCjjvbdssRsYzFD -DoDKjvbdpyPIHRDx -DncLKvbdwNWANDeN -DoDKjvbdJYUBglRQ -EObkKvbdXnRAYVVt -DoCjjvbdUWLpKTaR -DoDKjvbdTqROttgm -EPCkKvbdVqnXaeMD -EObjjvbdADRwiyiQ -DoDKjvbdlrZUyrci -EPDKjvbdvAdZSndh -DoCkKvbdzoQQeDLx -DnbkKvbdSQUGjFdX -EOcLKvbdqBJFAXIE -EObkKvbdSCEFLiZL -DnbjjvbdzoQQdcMY -DnbkKvbdpxngfqEY -DncLKvbdbsDLUEKB -DoCjjvbdXrlBMtOx -EObjjvbdKCjDQicY -DncLKvbdLrWlzUpz -EObjjvbdaaWEfQQX -EObjjvbdtlYWaTaX -DnbkKvbdMowpunGs -EObkKvbdSLYeuHKs -EObkKvbdTAEhhCOd -EPCkKvbdmSYtyrci -DncLKvbdYkqcsnLm -DoDLKvbdrylQTAgn -DncLKvbdJXtCIMRQ -EObkKvbdSBdElIyL -DoDLKvbdwygefYFS -DncKjvbdyXhibPzL -EPCjjvbduaDxsPFI -EObjjvbdZoNiFEzK -EPCjjvbdkNBkyeHP -EPCkKvbdWRnXadlD -DncLKvbdRWmdDLhD -DnbkKvbdmSYtzTDi -EOcKjvbdkVwODbXw -DncLKvbdQlxCZOUz -EObjjvbdbhlijfXY -EOcLKvbdXmqAXtut -EOcLKvbdmbKXXnnV -DoDKjvbdkHgMFfOL -EPCkKvbdfekymgHA -DoCjjvbdeKKRvUzn -DoDKjvbdkHfkefNk -DoCjjvbdyqPMiKXA -DnbjjvbdUQqOtuIN -EOcKjvbdEPCkKwDE -DoDLKvbdZRNFIleR -DnbjjvbdRacdlJZL -EOcLKvbdTukoitAq -EOcLKvbdZLrDtOMN -EOcLKvbdgKfzcGAE -EObjjvbdzjVQQESt -EOcLKvbdcIlijevx -EOcKjvbdGKdsDHmV -DncLKvbdKkBHvAJy -EOcKjvbdZMRctOLm -EPCkKvbdADRxKZiQ -EObjjvbdDwxLsssl -EPDLKvbdUxgszLPO -EPCkKvbdSQTfiedX -EPCjjvbdNeEUJIkE -DoDLKvbdpyPHfqDx -DnbkKvbdyOShXsJD -DncLKvbdLiBkpxAS -DoDKjvbdaaWEepQX -DoCjjvbdWSOYBeLc -EOcKjvbdLFegbAqV -EPDKjvbdffLzOGgA -EObkKvbdFkErbglu -DncLKvbdiZuFlROG -DncKjvbdegkWRnQg -DoDLKvbdQdDApRDr -EOcLKvbdeYZtURez -EObjjvbdrXQLcIxq -DoDLKvbdxZhGGXeS -DoDLKvbdGGKSOItR -EObjjvbdjhHLfFnL -EOcLKvbdUQpoUuHm -DoCkKvbdXrlBNUPY -DoDKjvbdJXtCIMRQ -DnbkKvbdZMSDsnLm -DncKjvbdCTBDUGWr -DncKjvbdbhlikGXY -DoDKjvbdXmqAYVWU -DnbjjvbdliDsqVRa -DnbkKvbdmajXYOnV -EObjjvbdJpyePGNe -DnbkKvbdCTAcUGXS -DoDLKvbdCDpBVjNG -EOcLKvbdxwhiaoyk -DoDKjvbdxVNFQyMO -EPCkKvbdVvhwvEEg -DnbkKvbdFWYoomJe -EOcKjvbdlrZUysEJ -EPDKjvbdqquKnKaN -DoCkKvbdTkunaVoJ -EOcLKvbdfHkVrOQg -EPDLKvbdiUzFWrUb -DoDLKvbdtAGqIABS -DoCkKvbdZRMdhmEq -DnbkKvbdNsUVfeVQ -EPDLKvbdqwPkbiZR -DoCkKvbdNUsSLNAX -DncKjvbdmpZxvKyC -EPCkKvbdLYqKSztf -EPDKjvbdZyEKODMS -EPDKjvbdNGbomPuL -DncKjvbdZMSDtNlN -EPCjjvbdTXjkmzjx -EObkKvbdBdQAvKMf -EOcLKvbdkySrTYgU -DnbkKvbdZoOIddzK -DoCkKvbdZMSDsmkm -EPCkKvbdCWzdIdpW -DncLKvbdBvzdIdov -DoCjjvbdaRfDHtFk -DnbkKvbdWeyZtAOs -DoDLKvbdnCJwYPOV -DoCjjvbdEYYLstUM -EOcLKvbdwtldqZMO -EPCjjvbdFVxoomKF -EObkKvbdyqPMhiwA -DoDLKvbdkxrrSxgU -DoCjjvbdeATqNYKG -DncLKvbdJKEAJpHE -DoCkKvbddndsLUTr -DnbjjvbdqFceUWBI -DoDLKvbdhkddOUby -DncKjvbdGKdrcIMu -EPCkKvbdelevflik -DoDKjvbdhaoDFWqR -DoCjjvbdYlSDsmlN -EPCjjvbdiZuGLpmf -EObkKvbdnCJvxPNu -DnbkKvbdhzUelRNf -DnbkKvbdZeYGzgiC -DoCkKvbdDnbkLWbd -DnbkKvbdnHFYMmfy -DoCjjvbdePEsKtTr -DnbjjvbdZQmEhleR -DnbkKvbdTkunaVoJ -DnbkKvbdFWZPpMjF -DoDKjvbdSwkMNzkY -EOcLKvbdwtldpyMO -EOcKjvbdhkdcmtby -DoCjjvbdNQXqWNfs -EPDKjvbdzjUpPdTU -DnbjjvbdqceJPnWB -EPDKjvbdUyHsyjoO -EPCkKvbdZshhxcsO -DncKjvbdqAiFAWgd -EObkKvbdgFkzOGgA -DncKjvbdmgFYNNgZ -DoDLKvbdDjHjWYKA -DnbjjvbdJbicRKCx -DnbkKvbdfNFwHMjL -EPCkKvbdWSNxBdlD -EPDLKvbdCJKbLJFj -EPDKjvbdEOcKkXDE -EPCkKvbdVrOYCElD -DnbjjvbdCIkBjhej -DoDLKvbddoFTKstS -DnbjjvbduDDVXVoP -EObkKvbdxwiKCPzL -DnbkKvbdZGvdAPTJ -DoDLKvbdBdPaVjNG -EOcKjvbdIHGzYwxH -DoCjjvbdGFjSNhsq -DnbjjvbdlYsSSxgU -EPCjjvbdqrUjnKaN -EOcLKvbdtvOXipsA -DoDLKvbdrounjCuf -DoCkKvbdFVyPomKF -EOcKjvbdNHCpNPtk -EPDLKvbdWeyZtAPT -EPDKjvbdjcLkQfuH -EOcLKvbdzHZMAMeX -DoCjjvbdUMWPBVni -EOcKjvbdHELWKBjK -DoDKjvbdMgComQUk -DnbkKvbdiGjDZWJu -DncKjvbdyqOmJKXA -DoDKjvbdVZITyjoO -DoCjjvbdzQoNJJwA -EOcLKvbdGAoQxizm -DoDKjvbdatagYKsh -EPDKjvbdSBceMJYk -DoDLKvbdMpYQvOHT -DncKjvbdiCOcFWpq -DoCjjvbdUGznLvvF -EPDLKvbdANIYrvyx -EPCjjvbdIwtCHkpp -EObkKvbdJSyBSmYM -EObkKvbdwuMdqYlO -EObjjvbdmuVZkKSG -DncLKvbdSPsfjFdX -DoDLKvbdSQUHJedX -DoDKjvbdiVZdwSUb -EPDLKvbdRjxfVGkT -EObjjvbdmpZyVkZC -DncLKvbdhzUelROG -EPCkKvbdxVMeRZMO -EOcKjvbdxxIiapZk -EOcKjvbdJSyBTNYM -EPDKjvbdMSXMzUpz -EPCkKvbdNddThhjd -DoDKjvbdznpREcLx -DncLKvbdqYoHgREY -DnbjjvbdiCPCdvqR -DoCjjvbdsQVoKDVf -DoCjjvbdqFcdtWBI -EPCkKvbdFkFTDIMu -DnbkKvbdQvmdCkgc -DnbjjvbduCbtwWOo -DoCjjvbdaNKaruNH -EOcLKvbdrpWPKCvG -DoCjjvbdEKHiuwjA -DoDLKvbdsBfMlHKy -EObjjvbduCcVWuno -DoCkKvbdNddUIiLE -DoDLKvbdVrNwbElD -EPCkKvbdTqQoUuHm -DoCjjvbdcJMikFvx -EOcKjvbdijGIJmYS -DncKjvbdtvNwipsA -EPDKjvbdGQASwGey -DoCkKvbdmJEUQtqa -DncKjvbdpxnggQcx -EOcLKvbdDnbjjwDE -DnbjjvbdxVMdqZLn -EPCkKvbdTkvPAvOi -DnbkKvbddijRvUzn -DnbjjvbdJuuFceGi -DoDLKvbdeATplxJf -EObjjvbdiLeDmuDZ -EObkKvbdzHYlANFX -EObkKvbdSBdFLiYk -DncLKvbdMgCpNPuL -DncLKvbdNsTufeVQ -EPCjjvbdUQqOtuIN -EPCkKvbdKDJcQicY -DnbkKvbdsCFmLfjy -DnbjjvbdNdctJIjd -DoDLKvbdzjUpPdSt -EPDLKvbdMoxRVmgT -EOcKjvbdbsCjscia -DoCjjvbdrDeIpOWB -EPDKjvbdOTUVgFVQ -EOcLKvbduWNwipsA -DoDKjvbdJcJcRKCx -DncKjvbdGZUtaDwb -EPCjjvbdZtJJYdSn -DoDLKvbdtcDVWuoP -EObjjvbdKaLGmCXq -DoCjjvbddZxoxYpb -DnbkKvbdWRmxCEkc -EOcLKvbdNrsufduQ -DoDLKvbdqlzJxlIJ -DoCkKvbdFVyPoljF -DnbkKvbdjggMGGOL -DoDLKvbdLAkHMawq -DncLKvbdwuMdpxlO -DoDKjvbdtSqrxydc -DoCjjvbdSLZGVHKs -DnbjjvbdrMzKYlIJ -DnbjjvbdTAFIhBnd -EPDLKvbdIxTbIMRQ -DoDLKvbdbBVeGQPw -DnbkKvbdvlvANEEm -EPDLKvbdEOcKkXCd -DoCkKvbdYqMdhmFR -EObjjvbdnUtzKiqf -EPCkKvbdtunXjQsA -DnbkKvbdddoSBwDK -DnbjjvbdTqROttgm -EPCkKvbdzQnmJJwA -EObjjvbdfpBzwDwh -DncKjvbdRotHJecw -EPCjjvbdhtzFWrVC -DncLKvbdqdEhpNvB -DnbjjvbdkWWmcbYX -EOcLKvbdYSkaMsoY -EObjjvbdDjIKVxKA -DnbkKvbdrounjDVf -EObkKvbdJzpFwdAN -DoDLKvbdsBelkgLZ -DoDLKvbdwtmEqZMO -DncKjvbdxmrgwriD -EOcKjvbdDoDLLWbd -EPDKjvbdIwtBhLpp -EPDLKvbdUaBqTRRy -DoCjjvbdjKFhJlwr -DoCkKvbdGLFTDIMu -EPCjjvbdrbFmMHKy -DoDLKvbdehKurOQg -DncKjvbdijFhJlwr -DoCjjvbdjvXOEBww -EPCjjvbdTXjkmzkY -EOcKjvbdaSFcHtGL -EPDLKvbdpyPIHQcx -EOcKjvbdmaiwXoNu -DoDKjvbdSBdFMJZL -DoDKjvbdjKGIKMwr -DncLKvbdyXiKBozL -DoCkKvbdqlzJxkhJ -EObkKvbdrNZiyLhJ -DoCkKvbdrpWPKCvG -DncLKvbdVrOXbEkc -DnbkKvbdOAIrtJrA -DnbkKvbdrXQMChyR -EOcLKvbdDnbjjwCd -EPCjjvbdjvXOECXw -EPCkKvbdMgDPmPtk -DoDLKvbdYfwEAPSi -EPCjjvbdzGxlANEw -DoDKjvbdmbKWwoNu -EOcLKvbddZxpXxqC -DoDLKvbdLGGHbApu -DoCjjvbdVTltGLuj -EPCjjvbdOEdThiKd -DoCjjvbdUyHtZkPO -DncLKvbdHELWJajK -EOcKjvbdcarmSAUN -EObjjvbdqiAJdmOe -EObkKvbdZQleImFR -EObkKvbdQccBQRDr -DoCkKvbdLAjfmBwq -DncKjvbdSKxeuHKs -DncLKvbdmJDsqUrB -EOcLKvbdGFirNhtR -DncLKvbdEARiMywX -DnbjjvbdZxcjNblS -DncLKvbdWXIwudEg -DoDLKvbdhkeDmuCy -EObkKvbdUslselWK -DoCkKvbdLhakqYAS -DoCjjvbdIMBzmvpk -EPCjjvbdKaKgMbXq -EPCjjvbdiLeDmtcZ -DnbjjvbdsPvPKCvG -DncLKvbdnVUzLKRf -DoDLKvbdiUyeWrVC -EOcLKvbdjblLRGuH -DnbkKvbdhtydvqtb -EOcKjvbdTqQnuVIN -DoCjjvbdMtsRkNAX -EPCjjvbdGKdrbglu -DncKjvbdMoxQvOGs -DoDKjvbdiHKDZWKV -DoDKjvbdULvPAvPJ -DnbkKvbdEvZQPmKF -EObjjvbdkxrrTZGt -EObjjvbdKCicQibx -DoCjjvbdKkAgvAKZ -EOcKjvbdNxOuzcmt -EPDLKvbdbsCjsdJa -EObjjvbdHDkVjBjK -EPCjjvbdYqMdiMeR -EPCkKvbdczYoxZRC -DncKjvbdnPzYujxb -DnbjjvbdMpYRWOHT -DncLKvbdLFegbBRV -DncKjvbdxVMdqYlO -DoDKjvbdFkErbhNV -DncKjvbdLLBHvAJy -DoDKjvbdTfzmkwWF -EPCjjvbdyXiKCQZk -DoDKjvbdqUUGrSLU -EObjjvbdGcjuiaij -EOcLKvbdZRMdhmFR -DoCjjvbdZoNiEdzK -DoCjjvbdEARiNZwX -DoCkKvbdwXMBVaWV -EPCjjvbdVZHsyjoO -DoDKjvbdyXhjBpZk -EObkKvbdtkxWaUAw -DnbkKvbdLrWmZuQz -DncLKvbdySnJNRbH -EPCjjvbdezvYdhsw -DoDLKvbdhancFWqR -EObjjvbdyzeORgiI -EPCjjvbdyXiJbPyk -EObjjvbduVnXiqTA -DnbjjvbdZjTHofaf -EPDLKvbdLrXMyuQz -DnbjjvbdHffyxxXg -DoDLKvbdOStWGdtp -DnbjjvbddijRvUzn -DoCjjvbdYNqAXtut -EPCjjvbdUQpntuHm -DoDKjvbduWOXjQsA -DoDLKvbdtTRsYydc -DncKjvbdpfDeUVaI -DoDLKvbdULuoAvOi -DnbjjvbdqmZjYkhJ -EPDKjvbdZMSETmkm -DoDLKvbdZshhyETO -DncLKvbdQdCaQQcr -DncKjvbdQccBQRES -EOcKjvbdrNZjYlIJ -EPDKjvbdjAQHBPgK -DoCjjvbdnUuZkJqf -DoDKjvbdLAjfmBxR -EObjjvbdUsltFkuj -DoDLKvbdZQleJMeR -DnbjjvbdBraCtGXS -DoDLKvbdaSFbhUGL -EObjjvbdrbGMkgLZ -EPCkKvbdJYUCHlRQ -EOcKjvbdgFkzNfgA -DoCjjvbdaRecHtFk -EPDKjvbdnUuZkKSG -EPDLKvbdkWWmdBww -EObkKvbdypoNJKXA -EOcKjvbdZxdJmblS -DncLKvbdZirhPgCG -DoDLKvbddeOrCXCj -DoCjjvbdOXoVzcnU -DncLKvbdSBdFMJZL -DncKjvbdrzMPraHn -DncLKvbdqZPHfpcx -DncKjvbdVAbQsQqy -DoDKjvbdySnJNSCH -EPDLKvbdtSqsZZeD -DncLKvbdtvOYKRTA -DncLKvbdLGGICBQu -DoDLKvbdDncLKwDE -EObjjvbdNrtVgEtp -EOcKjvbdUQqOtthN -EObjjvbdZtIiYcrn -EOcKjvbdmuVZjjRf -DnbjjvbdcJNKKevx -DoCkKvbdDxXlTtUM -DncLKvbdqZOhHQcx -EPDKjvbdIsZBSlwl -EOcKjvbdNUsRkNAX -DoDLKvbdRbEFMJYk -DnbjjvbdiBncFWqR -EOcLKvbdRzKIScWA -EOcKjvbdRbEFMIyL -EPDKjvbdsPunjDVf -DoCjjvbdhzVFkpmf -EOcKjvbddxZtUSFz -DncKjvbdnVUykJrG -EOcLKvbdEPCkKvbd -EPCjjvbdnUuZkKSG -DnbjjvbdnCKWxOmu -DnbkKvbdYzcFrKVy -DoDKjvbdvmWAMcdm -EObkKvbdhkdcmuDZ -DncKjvbdNsUVgFVQ -EPDLKvbdYzbeqiuy -EOcLKvbdUxgszLOn -DnbjjvbdZQmEiMeR -DoCjjvbdkHflFemk -EPDLKvbdhbPCdwRR -DoDLKvbdWXIwucdg -DoCjjvbdOYOuzcnU -DoDLKvbdcSbkTdJa -EOcKjvbdEvYpQMjF -EPDLKvbdrykosAhO -EObkKvbdrovPJbvG -DoDLKvbdkHflGGNk -DoCjjvbdZtIiYcsO -DoDLKvbdZnmiEdzK -EObjjvbdZMSDsnLm -EPCjjvbdLAjfmBxR -DncLKvbdptUGrRjt -EOcLKvbdNQXqVmgT -DoDLKvbdCIkCLIfK -EPDLKvbduVmxKRTA -EPDKjvbdHbLzEzAD -EPCjjvbdbUbGxKsh -DoCkKvbdjlbLzEgP -EPCkKvbdXGYzUAPT -DnbkKvbduLxXAsaX -EObkKvbdJvUfEFHJ -EOcKjvbdmbKXXoNu -EPDKjvbdQvnDbkgc -DoDLKvbdiUzFWrVC -EObkKvbdZyEKNcLr -DoDKjvbdrEEhpNua -DnbkKvbdzitoocsU -EPCjjvbdmbJvxOnV -EOcLKvbdNddTiIjd -DncKjvbdfpBzvdYI -EObkKvbdBhjbLIfK -DoCjjvbdFjeTDHmV -EOcKjvbdRjyGVGkT -DoCkKvbdZQldhmFR -EPDKjvbdqlzKZLhJ -DnbkKvbdZoOIeEyj -DncKjvbdBdPaVjNG -EPCkKvbdTulPjUBR -EPDLKvbdGGJqmiTq -DoDLKvbdGGJqmhsq -EOcKjvbdIryBTNXl -EPDLKvbdIsYaSmXl -DoCjjvbdVwJXudEg -EPCkKvbduDCtvuoP -EOcLKvbddBsMrAUN -DncLKvbdrouoJcWG -DoDKjvbdCgLfHAzc -DncLKvbdhtzEvqtb -DoDKjvbdZtIiYcsO -DncKjvbdMfbomPtk -DncKjvbdYqNEiMdq -DnbkKvbdCTBCtFvr -DncLKvbdhtzEvquC -DoCjjvbdAMhZSvyx -DoDKjvbdjlbLzEfo -EOcKjvbdZLrETmkm -DncKjvbdULvPAuni -DoCjjvbdtcCtvuoP -EPCkKvbdOTTugEtp -EObjjvbdhtzEvquC -DoCjjvbdkHgLfFmk -DncKjvbdmoyyVkZC -DnbkKvbdsBemLgKy -DoDKjvbddCTMrAUN -DoCjjvbdmuUykJqf -DnbjjvbdbQHGckzd -DoDLKvbdyOShXriD -EPDLKvbdZRNFImFR -EOcLKvbdDoDKkWcE -EPCkKvbdwMvAMcdm -DnbjjvbdbKlFoNcA -DoCkKvbdMfbpMpVL -DncLKvbdhkeDnUby -DoDKjvbdMSWmZtpz -EPCjjvbdmfeYMmgZ -DnbjjvbdqiAKFMoF -DoCkKvbdSBdElIxk -EOcLKvbduoTzpkPU -DncLKvbdDoCjjwCd -EObjjvbdLGGHbBQu -DnbkKvbdQcbaQRDr -EPDLKvbdyNrgxTJD -EObjjvbdtSqryZdc -DoDLKvbdegkWSNpg -EOcKjvbdZLrDsnLm -EObjjvbdFkEsCgmV -DoDKjvbdatagXjtI -DncLKvbdGZUuBDwb -DoDLKvbduDDUvuno -EObjjvbdURROtuIN -DnbkKvbdyXhjBpZk -DoDLKvbdKaLGlaxR -DoCkKvbdlZTRrxgU -EPDLKvbdUsltFlWK -DncLKvbdGGKRnIsq -DnbkKvbdijFhKNXr -DoDKjvbdrWokbiYq -EObjjvbdUaCRSqRy -EObjjvbdRkYfVHKs -DnbkKvbdQvnDcMID -EObjjvbdvBEYrneI -DnbkKvbdySmiNRbH -EPDKjvbdjuvmcaxX -DoCjjvbdVTmUGLuj -EPDLKvbdxVMeRYlO -DnbjjvbdNPwpvNgT -DoDKjvbdJTZArlxM -EPDLKvbdjbkkRHUg -DnbkKvbdSBdFMIyL -EPDKjvbdMgColpUk -DncLKvbdVAbQsQrZ -DncLKvbdyTOJNRag -DnbjjvbdmgFYMmgZ -EPDKjvbdTAFIgbOd -EObkKvbdFWYoomJe -DoDKjvbdIxUBhMRQ -DoCjjvbdFWYopNKF -DoDKjvbdNdcshiLE -EOcLKvbdwWlBWAuu -EPCkKvbdYpldiNFR -EPDLKvbdQwODbkgc -EPCkKvbdqZOhHQcx -EObjjvbdHDjujCKK -DoDLKvbdnBjWwnmu -EPDLKvbdUQqPUuHm -DnbkKvbdIryBSlxM -DnbkKvbdjhGlFfNk -DnbkKvbdqlyiyMHi -EPDLKvbdxmsIYTIc -EPCjjvbdNrsufduQ -DncLKvbdaaWEepPw -DnbjjvbdkVvnDaxX -EOcKjvbdUQpntuIN -EOcKjvbdQdDAopcr -DoCkKvbduMXvaUAw -DnbkKvbdMRwNZuQz -DoCkKvbdNGcQMotk -EPDLKvbduWOYJpsA -DncKjvbdZtJIxcrn -DnbjjvbdwyhFfXeS -EOcLKvbdIryAsNYM -EObjjvbdyTNiNRag -EPCkKvbdiZuGLqOG -DncKjvbdHELWJbKK -DoDKjvbdIGfyxwxH -EPCkKvbdeOdrkTsr -DoDKjvbdpstGrRjt -EOcKjvbdZtJIxdSn -EObjjvbdZtIiZDrn -DnbjjvbdOEctIhkE -DncLKvbdKDJbqJbx -DncKjvbdEOcLKvcE -EOcLKvbdgLGzcGAE -DoCjjvbdGBPQxizm -EPCjjvbdeFOqbXDK -EObkKvbdehKuqnQg -DncKjvbdRosgKFcw -EOcLKvbdUsmUGLuj -EOcLKvbdrXQMCiZR -DoDKjvbdjcMLQftg -EPDLKvbdHEKvKBjK -EPDKjvbdbVCHYLUI -DncKjvbdFfKSOItR -DncKjvbdYSkaNToY -DncLKvbdQvmccLhD -EOcKjvbdnVUykKSG -DoCkKvbdbsDKsdJa -EObkKvbdGLFTChMu -DoCkKvbdqGEFTuaI -EPCkKvbdddoRbXCj -EPCjjvbdMfbpNQVL -DoDKjvbdFjdrbgmV -EPCkKvbdmRxuZsDi -DncKjvbdaRfChUGL -DncLKvbdMJBkqYAS -EObkKvbdxUmEqYlO -EPDLKvbdtbbtvuoP -DoDKjvbdxsOJNSBg -EPDKjvbdZtIhyDrn -DncLKvbdKCicRKDY -EPDLKvbdUtNUFlVj -EPCjjvbdeATqMxJf -EOcLKvbdaNLBsUmH -DoDKjvbdJcJcQjDY -EPCkKvbdiMEdNtby -DoCjjvbdiGibyWJu -DncKjvbdeEnrCXDK -EPCjjvbdUVlPisaR -DncLKvbdXGZZtAPT -DoDKjvbdddoRbXDK -DoDLKvbdSBdElIyL -DoCjjvbdRNXbZOUz -DnbjjvbdTAEhhCPE -EObjjvbdUMVoBWOi -DnbkKvbdFjdrcHmV -DoCjjvbdfIKurORH -DoDLKvbdVBCRTQrZ -EOcLKvbdZoNhddzK -DoCkKvbdULvOaVoJ -DnbjjvbdZirhPgCG -EOcKjvbdVBBprqSZ -DoDLKvbdaSFcIUGL -DoDLKvbdfIKuqnRH -DncKjvbdijGIKNXr -EPDLKvbdrzMPsAgn -EPDKjvbdNUsSKmAX -EPCkKvbdLLAhWAKZ -DncKjvbdkWWnDaww -DnbkKvbdJYUCHlQp -EPDLKvbdNwoVzdNt -DoCjjvbdSLYetfjs -DoDLKvbdptTgSSLU -DncKjvbdxVMdqZLn -DncKjvbdZyDinDMS -DnbkKvbdnPyxujxb -EPCkKvbdSiZjRABM -EPDKjvbdPyNAHSqj -DncLKvbdqwPlChyR -EPDKjvbdGckWJbKK -DoDLKvbdbBWFFoow -DoCkKvbdkCkkRGuH -DncLKvbdmJDtQuSB -EObkKvbdQdCaQQdS -DncKjvbdKfFhBaQu -DncKjvbdaNKaruMg -EOcKjvbdnPzZWLYb -EObjjvbdxUldqZMO -DnbkKvbdGckWJaij -DncKjvbdkVwODaww -EObjjvbdGKdsDHlu -EObkKvbdKQyeOfOF -EPCkKvbdGdKvKCJj -DnbkKvbdGdKuibKK -DoDKjvbdOFDtJJKd -DoCkKvbdwuMdpxkn -EObjjvbdZjShPgBf -DoDKjvbdcyxpYZQb -DnbjjvbdrbGMkgLZ -DnbjjvbdxsNiMqbH -DoDKjvbdWSOXbFLc -EPCjjvbdrDeIomvB -EOcKjvbdEuxopNJe -DoDKjvbdKDKCqKCx -DoCkKvbdkIHLfGNk -EOcKjvbdnUuZjirG -DncKjvbdIryArmXl -DoDKjvbdraemMGkZ -DncKjvbdEJgivYKA -DoDLKvbdbhmJkGWx -DnbjjvbdZyDimcMS -EOcKjvbdhuZeWrVC -DnbkKvbdRbEFMJZL -EPCkKvbdeOdrkUTr -DoCkKvbdlhdUQuRa -DnbjjvbdZtIiZDsO -EPCjjvbdZyEJmcMS -DnbjjvbdFpATWgGZ -EOcLKvbduaDxroEh -DnbkKvbdpeceUWBI -EOcKjvbdjcMLQftg -DncLKvbdnPzZWLZC -DnbjjvbdZyEKNcMS -DoDKjvbdZMSDsnLm -DnbjjvbdOAIsTjSA -DoCjjvbdWSNxCFLc -DoDKjvbdkClLRHVH -DncKjvbdZxdJmcLr -EPCjjvbdOYOuzdOU -DncKjvbdWHxVxHYz -DoDLKvbdwXMBWBVu -EObjjvbdZxdJmcMS -EOcKjvbdrEFJPmvB -EOcKjvbdQcbaQQcr -EPCkKvbdfHkWRnRH -EOcKjvbdrEEiQNvB -EObkKvbdcTCjtDia -DoCkKvbdnCJvwoOV -DoDLKvbdxnTIYSiD -EOcKjvbdGQASvfey -DoDKjvbdUtNTekvK -DoDLKvbdbUbHXkTh -DncKjvbdaNLBsVNH -EPCkKvbdmtuZjirG -EPDKjvbdvlvANEEm -DnbkKvbdcIljLGWx -EOcKjvbdJSyArmYM -EObjjvbdVTltFlVj -DncKjvbdTAFIgbOd -EOcLKvbdUsltGLuj -EObjjvbdZRNEhmFR -EOcKjvbdUGznMXVe -DnbjjvbdTqQoUthN -DncLKvbdZRNEhmEq -EObkKvbdKxpirzuG -EOcKjvbdiVZdvqtb -EOcLKvbdatbGxKtI -DnbkKvbdpfDdsvBI -DnbjjvbdpyPIGqDx -DoCkKvbdqUUGrRjt -DoCjjvbdfHjuqmqH -EPDKjvbdqlzJyLgi -DoCjjvbdznpREcMY -EObjjvbdjuvnEBww -DoCkKvbdQwNdCkgc -DoCjjvbdxsNhlqag -EOcKjvbdbsDKtEJa -EPDLKvbdfIKuqnQg -DncLKvbdJXsbILqQ -DoDLKvbdiUydwRuC -EOcLKvbdUtMsfMVj -DnbkKvbdfNGWflik -DoDLKvbdqwQLcJZR -DncLKvbdYqMeIleR -DoCjjvbdzaAPGgBl -EPCkKvbdauBgYLUI -EPDLKvbdiUydvqtb -DnbjjvbdRyjITCvA -DncLKvbdIwsahLqQ -EPCjjvbdRacdkiYk -EOcKjvbdRbEFMJZL -DoCjjvbdrzLoraHn -EObkKvbdxxIiaozL -EOcLKvbdJcJbqJbx -EPCjjvbdZisHogBf -EOcKjvbdVTmUGMWK -EPDKjvbdrylQSaIO -DncLKvbdSCEEkiYk -DoDLKvbdhtyeXRuC -EObjjvbdQvmcblID -DoDKjvbdauCGwjtI -DnbkKvbdGYtuBEYC -DoCkKvbdkyTSSxft -EPDLKvbdIGfyyYYH -EObjjvbdjlbLzEgP -EPCjjvbdIwsbHkpp -EPDKjvbdmuUyjjSG -DoCkKvbdUQpoUtgm -EObkKvbdUQqPVVIN -DncLKvbdXrkaMsnx -DncLKvbdaMjbTUlg -DncLKvbdhgJbyVjV -DnbkKvbdURQoUuIN -DnbjjvbdFWZQQMie -EPCjjvbdnCJwYPNu -EOcLKvbdBcpBVimG -DoCkKvbdyqPMiKXA -EObkKvbdnVUzKjRf -DnbkKvbdVgwvXgYz -EObkKvbdZsiJZDsO -EPDKjvbdiCPCdwRR -EObkKvbdGYuUaEYC -DnbkKvbdpyPIHREY -DnbjjvbdiZtfLpnG -EPCkKvbdVUNTelWK -DnbkKvbdTppoVUhN -DnbjjvbdxrnIlrBg -EPDKjvbdmIdUQtrB -EObjjvbdkNBkzFGo -DncKjvbdhbOcFXQq -DoDLKvbdNGcPmQVL -EPDKjvbdZoNheEyj -DnbkKvbdjlbLzEfo -DoCjjvbdZRMdiNEq -EObjjvbdczYoxYqC -EPDKjvbdLAkHMaxR -DoDLKvbdsPunibuf -DoDLKvbdNdcshhkE -EPDKjvbdhkdcnVCy -EPCkKvbdVZHtZkOn -DnbjjvbdsrrTYzFD -DoCjjvbdatbGxKtI -EOcLKvbdnGdxMnHZ -EPDLKvbdmaivwoOV -EObkKvbdjJegjMwr -EPDKjvbdYfwEAOri -EOcKjvbdpxngfpcx -DnbjjvbdEPCjkXCd -EPDKjvbdxsOImRag -EObjjvbdEPDKjwDE -DnbjjvbdYlSETnLm -DncLKvbdBiLBjhej -DoDKjvbdrpWPJcVf -DncKjvbdRpTfiedX -DoDKjvbdakMGOnDA -DnbjjvbduVmxKQsA -DncKjvbdKfFhCBRV -DnbkKvbdpfEFTvBI -DncLKvbdqwQLcIyR -EOcKjvbdlhdTpuSB -DncKjvbdqwQLbhxq -DnbkKvbdnHEwlmgZ -EPDKjvbdDoCjkWbd -EObkKvbdANIYsWyx -EObjjvbdpfEEsvBI -EPDKjvbdCJLCKiFj -DoDKjvbdqcdhonVa -EPCjjvbdzjUpQESt -DncLKvbdZQleImEq -EPCjjvbdEPCkLXCd -EPDKjvbdYlRdUNlN -EObkKvbdxwiKBozL -DnbjjvbdFjdsChNV -EObjjvbdwtleRYlO -DoDLKvbdeOdsLUUS -EPDKjvbdZLqctOLm -DoDLKvbdjlbLyeHP -DoCkKvbdaNLCTVMg -DnbkKvbdEKHjWXjA -DnbkKvbdZshhyDsO -DnbjjvbdsPunibuf -EPCkKvbdwWkaWBVu -EPDLKvbdFpATWfey -EObjjvbdzoQQdcMY -EPDLKvbdpxngfpcx -DnbjjvbdgPazwDwh -EPDKjvbdKVtfEEfi -EOcLKvbdhkeENuDZ -EObkKvbdIwtCILqQ -EPCjjvbdyNrhXsJD -DnbkKvbdMSWmZuQz -EOcLKvbdsPunicWG -DncLKvbdULvPBWPJ -DoCkKvbdKfFhCApu -EOcLKvbdTAEhhCOd -DnbkKvbdSKxetfjs -DoCjjvbdUtNTfLuj -EObjjvbdhzVGMROG -DoCkKvbdxsNhmRag -DnbjjvbddZyPwxpb -EObjjvbdEuxooljF -DncLKvbdVTlsfLuj -DoCkKvbdZjShQGaf -EPDKjvbdrSVKnKaN -DnbkKvbdFxuVBDwb -DoCkKvbdJXtBhLpp -EPCjjvbdHffzZXxH -DoCjjvbdqZOgfqDx -DncLKvbdqwQMChyR -EObjjvbdaSGDIUFk -EPDLKvbdZxdKNcMS -EObjjvbdhuZdwSUb -EPDLKvbdfMfWgMik -DncLKvbdZRNFJMdq -EOcKjvbdJKEAKPfd -EPCkKvbdcyxoxYqC -EOcKjvbdCSaCsevr -DoDLKvbdKQzEoGNe -DoDLKvbdjhHLefOL -DoCjjvbdRjxeuGjs -DncKjvbdyOTIXsIc -DnbkKvbdBdQBWKMf -EOcKjvbduLxXBUBX -EObkKvbdrSUkNkAm -DoDKjvbdKfFhBaRV -EPCjjvbdddoSBvcK -DncKjvbdyOTHxTJD -EOcLKvbdiLeENuDZ -DoCjjvbdJbjDRKCx -EPDKjvbddoErkUUS -DoCkKvbdBiKakJGK -DnbkKvbdCIjbKiFj -DoCjjvbdIsZBSmXl -EOcLKvbdBhjajiFj -DnbjjvbdrzMQTBIO -EObjjvbdrWolChyR -EPCkKvbdEARiMzXX -DoDLKvbdrWpMDJYq -EOcLKvbdKRZdoGOF -DoCjjvbdBsAcUFvr -DoCjjvbdBraDUGXS -DoCkKvbdIwtBhMQp -EObjjvbdeATqMxKG -EPDKjvbdYzbfRjWZ -EOcLKvbdsCGNLgKy -DoDKjvbdhficZWKV -EObjjvbdZQldhldq -EPDKjvbdsQVoJbvG -EPDKjvbdsQVnicWG -DoDLKvbdVZITyjoO -EPCjjvbdILazmvpk -EPCkKvbdZMSDsmlN -DoCjjvbdZGvdAOri -DoDKjvbdwuMeRYkn -DnbjjvbdZyEJmblS -EPDKjvbdhkeENuDZ -EPDLKvbdGdKvKCKK -EPCjjvbdjuwOECXw -EObkKvbdZeXfzghb -EObjjvbdJmAEZgUa -EOcLKvbdtcCuWvOo -EPCkKvbdiiehJlwr -DoDLKvbdwtldpyMO -DoCjjvbdjblLQfuH -DncKjvbdNPwpunGs -DnbjjvbdSLZFtgLT -EPDKjvbdyXhjCPyk -EObjjvbdliETpuSB -Dnbjjvbdqlyixkgi -DoDLKvbdmbJvxOnV -DoCjjvbdZjSgpGaf -DoCjjvbdqdEhpNua -DoDLKvbdelfXGmKL -EPDKjvbdIGgZyYYH -DncLKvbdfMfXHMik -DoCjjvbdZoNheEyj -EPCkKvbdsZlPsBIO -EOcKjvbdLAjgMbXq -DncKjvbdVZITykOn -DnbjjvbdpyOgfqEY -EPDKjvbdbUagYKtI -EObkKvbdrSUjnLBN -DncKjvbdQwNdDLhD -EOcLKvbdrykosBIO -EPDKjvbdsPunicWG -EPCjjvbdliDtQuRa -EOcKjvbdcSbkTdKB -EOcLKvbdKaKgNCXq -DnbjjvbdZshhxcrn -DnbkKvbdcbTMrAUN -EPCkKvbdsQWPKDVf -DncKjvbdijGHjMwr -EOcLKvbdULvPBVni -EPCjjvbdffLynHHA -DoCjjvbdTqQntuHm -DoDLKvbdjuwNdCXw -DoCkKvbdVZITzLOn -EPDLKvbdqrUkOLAm -EPDLKvbdZQmEhmFR -DoDKjvbdwjvdHzyf -EPDKjvbdePErjtTr -EObjjvbdmozYvLZC -DnbjjvbdACrXizIp -EOcLKvbdTvMQJtAq -DncLKvbdssSTZZeD -DnbjjvbdmozZVjxb -EOcLKvbdtSrSxzFD -EPDLKvbdZyDjOCkr -DnbkKvbdbBWEeopX -EOcLKvbdkWWmcbXw -DoCkKvbdkVwNdBww -DncKjvbdEzsqFMCi -DncLKvbdACqxJyhp -DoDKjvbdYpmFIleR -DncKjvbdGKdsCglu -DoCkKvbdZnnJFEzK -DoDKjvbdBsBCtGWr -EPDKjvbdBcpAuimG -DnbjjvbdIGfzYxXg -DnbkKvbdGLEsCgmV -EPCkKvbdySnJNSBg -DoCkKvbdPyNAGrqj -EPDKjvbdmaivxPNu -DnbjjvbddoFSkUUS -DoCkKvbdySmiNRag -DoDLKvbdEYXlUUUM -EObkKvbdCTBCtFwS -DoDLKvbdoznDkXoA -EOcLKvbdBvzciEov -DoCjjvbdSPtHJfEX -EPDLKvbdtvOYJqTA -EPDKjvbdZisHpHBf -EPDKjvbdILazmvqL -EOcKjvbdRpUHKGDw -DncKjvbdWXJYWDdg -EPDLKvbdIwtCHlQp -EPDKjvbdUtNTfLvK -DncLKvbddZxpXxqC -EOcLKvbdkNBlZdgP -EObkKvbdqYnhGqEY -EPDLKvbdfpBzwDwh -DncLKvbdTkuoBVoJ -DnbkKvbdvvlBWAvV -DoCjjvbdrXQMCiYq -EPCjjvbdFeiqmiUR -DncLKvbdzjUopDsU -DncKjvbdhkeDmuCy -EPCjjvbdVqnYBdlD -EOcLKvbdSCDeLiYk -DoCjjvbdJvUeceHJ -EPCjjvbdjgfkfFnL -DnbjjvbdkVwNdBww -EObkKvbdczYowyRC -EPCjjvbdZoNhddyj -EPCjjvbdOSsugEuQ -EObkKvbdZMRcsnLm -EObjjvbdrMzJyLgi -EPDKjvbdrSUjnKaN -EPDKjvbdSLYfUfkT -EPDKjvbdUVlQKUAq -DoDLKvbdJcKCqJbx -DnbjjvbdeFPRbWcK -DoCkKvbdVAbQsQqy -DncLKvbdpeceTvBI -DoDLKvbdcIlikFwY -DoDLKvbdbsDLTdJa -EPCkKvbdRXOEClHc -DnbjjvbdbKkennDA -DncLKvbdEzsqEkcJ -EPCjjvbdJvUedEgJ -EOcLKvbdzitpQDsU -DncLKvbdQvnDblHc -EOcKjvbdbQGgDkzd -DnbkKvbddZyPxYpb -EPDLKvbdLrXNZuQz -DoDKjvbdDjIJvYKA -EPCjjvbdbVCHXjsh -EOcLKvbdsPunicVf -EOcLKvbdEzspdlCi -DoDLKvbdmRxtzSdJ -DnbjjvbdsBfNLfjy -DoCjjvbdcTDLUDia -EPDLKvbdidjgVPAO -DoCkKvbduVmxKQsA -EObjjvbdxLXDgzzG -EPCkKvbduaEZSoFI -EOcLKvbddneSjssr -DoCkKvbdWXJYVdFH -DncLKvbdHkaznWqL -DncKjvbdbVCGxKsh -DnbjjvbdiMEcmtcZ -DoDKjvbdqAheAXHd -EPCkKvbdMIalQxAS -DnbjjvbdVviXucdg -DnbjjvbdMpXpumgT -EObkKvbdMJCLqYAS -EObjjvbdczZQYYqC -DncLKvbdUxgtZjoO -EOcLKvbdjuwNdCYX -DncKjvbdSwjlNzkY -EPDLKvbdrWpLbhxq -DoDKjvbdnBjWwoOV -EPCjjvbdmSYtyrdJ -DoDLKvbdzeZnzdzQ -DncLKvbdMowqWOGs -EPCkKvbdqTsfqrLU -EObkKvbdraemMHKy -EOcLKvbdJcJbpjCx -DnbjjvbdmuUzKjRf -DncKjvbdNeEThhkE -DoDKjvbdHakydzAD -EOcKjvbdXsLaNUPY -EObjjvbdLFfHbBQu -DncLKvbdbKlFoODA -DoCjjvbdRpTfiecw -DnbkKvbdRkYetgLT -DoCjjvbdegkVrOQg -DoDLKvbdhlFEOUby -DoCkKvbdFyUtaEXb -DnbjjvbdAMgxsXZx -EOcLKvbdUQqOtuHm -EPDKjvbdxrmiMrCH -EOcLKvbdREDApQdS -DoDLKvbdWRmxBdlD -DnbjjvbdiHKCyVjV -EPCkKvbdxwhjCPyk -EObjjvbdLKaHvAJy -EPDLKvbdZtJJYcsO -DoCjjvbdbPfgDkzd -EObkKvbdUaBqTRRy -EPDKjvbdGYtuAcwb -DnbjjvbdQcbaQRDr -EPCjjvbdsBfNMHKy -EPDKjvbdZyDimblS -DoDKjvbdJXtBglRQ -EObkKvbdpssfrSLU -EOcLKvbdMRwMytpz -DoCjjvbdEYYMUTtM -DoCkKvbdeAUQmXif -DncLKvbdUaBqSpqy -EObkKvbdVAbQrqRy -EObkKvbdwXMAuaWV -DncLKvbdCIjakIfK -DncLKvbdjmBkzEfo -EOcLKvbdKVtfDeGi -EObkKvbdnQZyVjxb -DncLKvbdzRPMhiwA -DncKjvbdJpydnfOF -EPDKjvbdqTsfrRkU -EPDLKvbdEuyQPlie -DnbjjvbdfSBWzlCo -DnbkKvbdqiAKFMne -EPCjjvbdatbHYLUI -EOcKjvbdNsTugEtp -EPCkKvbdmgFXmNgZ -EPDLKvbdMSXNZtpz -DoDKjvbdUaBprqRy -DnbjjvbdXmqAXtvU -EOcKjvbdHlBznWpk -EOcKjvbdVqmwbElD -DoCkKvbdqrVLOLAm -DnbkKvbdZshiYcrn -DoCkKvbdZoNhddyj -EOcLKvbdEuxooljF -DnbkKvbduCcVXVoP -EPCkKvbdmuVZjirG -DncKjvbdRzKHrbvA -EObkKvbdeKJqutzn -EObkKvbdyOShXsIc -EPCjjvbdRbDdlJZL -DoDKjvbdSBdFMIxk -DncLKvbdKaKgMawq -EObkKvbdCDpAuilf -DnbkKvbdRWnDcLgc -DncLKvbdqlzJxkhJ -EPCjjvbdNHDQMpUk -EOcLKvbdRMwbZNtz -EPDKjvbdOEdThiLE -DoDLKvbdUyHszKoO -DnbkKvbdZisIPgCG -DncKjvbdwzHeeweS -DncKjvbdQwODcLhD -DoDLKvbdqdFJPmua -EOcLKvbdvwMAvBVu -EPDLKvbdbVBfwjsh -DoCkKvbdRyjHrcWA -DoDLKvbdWIYVxGxz -DnbkKvbdbiMjLGXY -EOcLKvbdBhjbKiFj -EObjjvbdCDpAvJmG -EPDKjvbdLBKfmCYR -DoCkKvbdbiMijevx -DnbkKvbdyOSgwriD -EPDLKvbdlYrqsZHU -EOcLKvbdwyhGFxFS -EPDLKvbdRyjHsCvA -EPCkKvbdHgGzYxYH -DoDLKvbdGFjRmhtR -EPDKjvbdFyUtaEYC -DncLKvbdeFOrCWbj -DoDLKvbdJSyArlwl -EOcKjvbdZyEKODLr -EOcLKvbdemGXGmJk -DnbjjvbdSCDeLhyL -DoDLKvbdYTLaMsnx -DoCjjvbdxKwEHzyf -EOcLKvbdiVZdvquC -DnbkKvbdUaBqTQqy -EPCjjvbdGZVVBEXb -DoDLKvbdCEQAvKMf -DoDLKvbdRWmdCkhD -EPDKjvbdRotHJecw -DoCjjvbdZxcimblS -EOcLKvbdtbcUvvOo -DnbjjvbdZsiJZDsO -EOcKjvbdRyjHsCvA -EOcKjvbdxLWdHzzG -DoCjjvbdFjdrbhMu -EPCkKvbdxVNFRYlO -DoCkKvbdmIcsqUqa -EPDLKvbdfMfWgMjL -EPDKjvbdTqQoUthN -EOcKjvbdtkwvaUAw -DoDKjvbdBdPaVilf -DoDLKvbdZMRdTmkm -EPDLKvbdelewGlik -DoCkKvbdwzHfFxEr -EPCkKvbdvAcyTPFI -EObjjvbdQdDBPqES -DoDKjvbdZtIiYcrn -EOcKjvbdypnlhiwA -DoCkKvbdNrtWGduQ -DncKjvbdxsOIlqbH -EPCjjvbdANIYrvyx -DnbjjvbdNwnuzdOU -EPCkKvbdFyUuBEXb -EOcLKvbdaaWFGQQX -DncLKvbdraelkfkZ -EPCjjvbdTpqPVUhN -DncKjvbdySmiNSBg -EPDKjvbdrpWPJbvG -EObjjvbdwNWANEFN -EObjjvbdZeYGzhJC -DoCjjvbddndsKstS -EPDLKvbdegkWSORH -EPCjjvbdvwMAvBVu -EPCjjvbdkySqrxgU -EPCkKvbdHkaznWqL -EPCjjvbdqlzKYkhJ -DncLKvbdZxdJmcMS -EPCjjvbdqGEFTvAh -EObjjvbdTYKkmzkY -EPCkKvbdZisHofbG -EOcLKvbdzoPpdcLx -EPDKjvbdZjTHpHCG -EOcKjvbdKWVGEFHJ -EPCjjvbdhyuFlROG -EPCkKvbdFjeTDIMu -DncLKvbdOYPVzcnU -DoCjjvbdSZjISbvA -DoCkKvbdZoNiEdyj -EPCjjvbdrWpMDJZR -EObkKvbdkVvnDaxX -EObjjvbdcSbjtDia -DnbjjvbdLGGICBRV -EPDLKvbdkWWmcbXw -EObjjvbdnHExNOHZ -DncKjvbdUtNUFlVj -EObkKvbdEvZPomKF -DoCkKvbduoTzpjnt -EOcLKvbdURQoVVHm -DnbkKvbdTAEiIBnd -DncKjvbdQwOECkgc -DnbjjvbdRbDdkiZL -DoCjjvbdEPCkLWcE -EPDKjvbdzjUpPdSt -EPDKjvbdZMSDsmkm -DoDLKvbdBdPaWJmG -EPCkKvbdwjwEHzyf -DnbjjvbdhuZeXSUb -DoCkKvbdlYrqsYft -DoCjjvbdEXxMTssl -DoDKjvbdzoPpdbkx -DncKjvbdWRnXbFMD -DoDLKvbddijRutzn -DncKjvbdnCKWwnmu -EOcLKvbdZMSDsmkm -EOcLKvbdUaCRTRSZ -EObkKvbdkCkjpgVH -DnbkKvbdirziTKiz -DoDLKvbdJpyeOenF -EObkKvbdGKdsDHmV -EObjjvbdoAKzshDn -EPDLKvbdlrZVZrci -DncLKvbdRzKHsDWA -EObkKvbdKkAhWAKZ -EPDLKvbdVAaqSqRy -DoCkKvbdjAPgApHK -EPCkKvbdBcpBWJmG -DncKjvbduCbuXWOo -EOcLKvbdqiAKEmOe -EPDKjvbdYpldhleR -DnbjjvbdEPCjjwCd -DnbjjvbdbsDKtEJa -EObjjvbdKfGICBRV -DoDLKvbdRadFMIxk -DoDKjvbdGGJqmhsq -EPCjjvbdJbicQjDY -DncKjvbdbiNKKfWx -EOcLKvbduLxXAsaX -EPCjjvbdEKIJuwjA -EPCjjvbdWRmwadlD -DnbjjvbdfMewGmJk -EOcLKvbdNxOuzdOU -DnbkKvbdfIKvSOQg -DncLKvbdQZNAHSqj -DnbjjvbdZLqdUNlN -EPCjjvbdSLYetgLT -DncKjvbdeEoSCWbj -EPDLKvbdsCFmMGjy -EPDLKvbdLGGHaaRV -DncLKvbdEuxpQMjF -EObjjvbdVYhTzLPO -EPCkKvbdaSFbhTek -DnbkKvbdDihJuwjA -EObjjvbdFjeTDIMu -EObjjvbdhkeDnUby -DoDKjvbdxUmEpyLn -DncLKvbdiVZdvqtb -DoCkKvbdunszqLPU -DnbkKvbdSBcdkiYk -EObjjvbdbhmKKevx -DnbjjvbdVZHtZkOn -DoDLKvbdZirgogCG -DoDLKvbdqBIeAWhE -EPCjjvbdwtmEqYkn -DncKjvbdKCjDRJbx -EOcKjvbdTvLpJsaR -DoDKjvbdyXhjBozL -DnbjjvbduDDUwVoP -DoDKjvbdzaAOfgBl -DoCjjvbdWSOYCElD -EOcLKvbdqwQMDJYq -DoCkKvbdNHColpUk -EPCkKvbdCEPaVimG -EOcKjvbdjKFhJlxS -EOcLKvbdxUleRYkn -DnbkKvbdrNZjZMHi -DoDKjvbdmuUzLKSG -EObjjvbdfIKurOQg -EPDKjvbdQlwbZNtz -DncKjvbdhkeDnUby -EObjjvbdwuMdqZMO -DncKjvbdliDtQtrB -EPCjjvbdNPwqWNgT -DncKjvbdjAPgApGj -EObkKvbdMpYRVmfs -DnbkKvbdGKeTChNV -DoDLKvbdHbMZdzAD -EObjjvbdQlwayOUz -EPDKjvbdVqnYCFLc -DoCkKvbdmpZyVjyC -EObkKvbdUslsfLuj -DoDLKvbdlhdURVSB -EOcLKvbdmSZVZrci -DoCjjvbdYzberJuy -EPDLKvbdhzVGLpnG -EPCjjvbdsPvOicVf -EObkKvbdeOeTLUUS -DncLKvbdmfdxMnHZ -EPDKjvbdHffzYwxH -EPDLKvbdrylPsAgn -EOcKjvbdwWlBWAvV -EPDKjvbdVAbQsQqy -DnbkKvbdsZlPsBIO -DncLKvbdEzspdkbi -DncLKvbdhyuGMROG -DoCkKvbdFaOpxizm -DoCkKvbdZsiIxcrn -DoCkKvbdijGHjMwr -DnbkKvbdcyxpYZQb -DnbjjvbdEzspdkbi -DncLKvbdNQYRVnGs -EObkKvbdkClKpgVH -EOcLKvbdkClKqHVH -EOcKjvbdhanbdvqR -EPCkKvbdmfdwmNfy -EObkKvbdYTMAmUPY -DoCkKvbdIGgZxxXg -EOcKjvbdnHEwlnHZ -DncLKvbdCDpAuilf -EPCjjvbdmbKXXoOV -EObkKvbdapGfdLzd -EPCkKvbdRjyGVHLT -DoCkKvbddoFTLTtS -EPCjjvbdGLFTCglu -DoCjjvbdiLeENtcZ -DoCkKvbdKCicQjCx -EPCkKvbduoTzqLPU -EPCjjvbduVmwiqTA -EPCjjvbdWIXuxGxz -EPCjjvbdpxngfqDx -EOcKjvbdeOdrkTsr -DoDLKvbdNrsufduQ -EOcKjvbdIHHZyXwg -DoCjjvbdpfEEsvBI -EOcKjvbdhgKDYvKV -DnbjjvbdmbJvxOmu -EPDKjvbdGdKujCKK -DoDLKvbdfkGzcGAE -EPCkKvbdZoNiEeZj -EPDLKvbdaMjbTUlg -EPCkKvbdSPsgJfEX -EPDKjvbdDxYLstUM -EPCjjvbdKVtfDeGi -EOcLKvbdpeceTvAh -EObjjvbdHffzYwxH -DnbjjvbdffMZnHHA -EOcLKvbdsQVnibvG -EOcKjvbdZirgpGbG -EObjjvbdJSxaTMxM -EOcLKvbdbrcLUEKB -EPCjjvbdGZUuAcwb -DnbkKvbdpssgRrLU -DnbkKvbdKVteceHJ -EPDKjvbdmajXYOmu -EPDKjvbdNwoVzdOU -DnbjjvbdrpVnicWG -DoDKjvbdjhGlFfNk -EObjjvbdEXwlTtTl -DoDLKvbdkCkkQftg -DncKjvbdDxYLtUTl -DncKjvbdNQYQunGs -DoDLKvbdZQleImFR -DoDKjvbduVmxKRTA -DoDLKvbdsrqsZZdc -DoDLKvbdZLqctNlN -EPDLKvbdNsUVfeVQ -DncLKvbdhuZeXRuC -EPCkKvbdiCObdwRR -DoDKjvbdIwsbIMQp -EObjjvbdtcCtvvPP -EOcLKvbdpyOhHRDx -EObjjvbdmgEwmOHZ -DoCkKvbdelevgNJk -DoCjjvbduLwwBTaX -DoCkKvbdXrlBNTnx -EPDLKvbduCcUvuoP -EPDKjvbdURRPVUgm -EObkKvbdBsBCsfXS -DoDLKvbdZjSgogCG -EObkKvbdhgKDZViu -EPCkKvbdEYXkstUM -DncLKvbdrMzJyLgi -DnbjjvbdaSFcIUFk -EPDLKvbdnBjWxOnV -EPDLKvbdssRryZeD -EOcKjvbderAvzkbo -DoCjjvbdZirhQHCG -DnbkKvbdBraCtFvr -EOcLKvbdxZgfFxFS -DoDKjvbdJuuFdFGi -EPDKjvbdUQqPUtgm -EPDLKvbdNHCpMpUk -EPDKjvbdnCKXYOnV -DoCkKvbddZyQXyQb -DnbjjvbdpxoHgREY -EPCkKvbdfNFwHNJk -DncLKvbdVBCQsQqy -EPCkKvbdUxhTzLOn -EObjjvbdSQTgJfEX -DoCkKvbdrWpLbiZR -DoDLKvbdtcDUwWOo -DoCkKvbdwzHfGXeS -EPDLKvbdrzMPraHn -EPCkKvbdDoCjjvcE -DoDLKvbdbhlijewY -EObkKvbdUxgsyjoO -DoDLKvbdbUafxKsh -DoCjjvbdULuoBWOi -EPCkKvbdVBBqSqRy -DoCjjvbdhkeENtcZ -EPCjjvbdqYnggRDx -DncLKvbdjhHMFfOL -EOcKjvbdZxcinDMS -DoDLKvbdvBDySndh -DncKjvbdirziTKiz -DncKjvbdJXsaglRQ -DncKjvbdhfjDYvJu -DncLKvbdjuvnDbYX -EOcKjvbdKaLHMaxR -DoCjjvbdiGjDZWKV -DnbjjvbdEObjkWbd -DnbkKvbdJmADygVB -EPDKjvbdJvVFdEfi -EPDLKvbdnGeXmOGy -DoCjjvbdpssgSSKt -EPDKjvbdwtldqYlO -EPDKjvbdmfeXmNgZ -DoCjjvbdqvokbiZR -DoDLKvbdqUUHSRjt -EObkKvbdmbKXYOnV -EOcKjvbdaSGChTfL -EPCkKvbdWWiYWDdg -DoCjjvbduoTzqKnt -DnbjjvbdHDkVjBjK -EOcKjvbdbVBfwjtI -EOcKjvbdjvXOEBxX -DncKjvbdZLrETnMN -EObkKvbdfNGXHMjL -EPCkKvbdkDLkRHUg -EObjjvbdZjTIQGbG -DoDKjvbdZsiIyDsO -DnbkKvbdbrbjscjB -EPCjjvbdmbJwYPOV -DoCkKvbdKDJcQicY -DoDLKvbdZxcinCkr -DoDKjvbduoTzqLPU -EOcKjvbddndsKstS -DnbjjvbdNQXqWNfs -EOcKjvbdIidAKQGd -DoDLKvbdTkvOaVni -DoCjjvbdsPvPJcVf -DoDKjvbdVqnXbElD -EOcKjvbdIHGyyXxH -DnbkKvbdUxgszLOn -EPDLKvbdwuMdpxkn -DnbkKvbdqrVLNkBN -DncKjvbdijFgjMwr -EPCkKvbdSQUGjFcw -EObjjvbdRWmdCkgc -DnbkKvbdVTltFkvK -EOcLKvbdJbjCqKDY -EObkKvbdfMfXGmKL -EObjjvbdzRPNJKXA -EPCjjvbdBsAbtGWr -DoDKjvbdJXsahLqQ -DnbkKvbdlBNOmALA -DoDLKvbdlrYtzTDi -EPDLKvbdZtJIxdTO -DncKjvbdmbJvxPOV -EPDLKvbdaMkBsUmH -EPCkKvbdNsUVgFUp -DoCjjvbdWfYytAPT -EObjjvbdNHCpMpVL -EPCjjvbdMgComPtk -EOcLKvbdeqaWzlDP -DoCkKvbdFVxopNKF -EOcKjvbdYkrDsmlN -DncKjvbdWWiYWEFH -DoDKjvbdSLYfUfkT -DnbjjvbdhkeEOVCy -DoDKjvbdJXsagkpp -DoDLKvbdZoOIdeZj -DncLKvbdLiCMRYAS -DncKjvbdyOTHwsJD -DncKjvbdvmWANDeN -DoDLKvbdtTSTYydc -DoCkKvbddneSjtTr -EObkKvbdkDMKpftg -DnbjjvbdbhljKewY -EPCkKvbdIsZBSlwl -EPCjjvbdlqxuZsDi -DnbjjvbdNrtWGeVQ -EOcLKvbdvBEZSndh -EOcKjvbdrJAJdmOe -DoCjjvbdyOTHxTIc -DoCjjvbdmfdwlnGy -EOcLKvbdkDMKpgVH -DoCkKvbdRECaQQdS -DncKjvbdaMjartlg -EPCjjvbdVviXuceH -DnbkKvbdNsUVgFVQ -DoDKjvbdFkEsDIMu -EOcKjvbddZyPwyQb -DoDKjvbdqmZixlIJ -DoDKjvbdrEEhomvB -EOcLKvbdlZSqsZHU -EPCkKvbdehKuqmqH -DoDLKvbdFxtuBDwb -EPCjjvbdKjaHvAJy -DncLKvbdBcpAujMf -DoCjjvbdNQYRWOHT -DoCjjvbdHakzEzAD -EPCkKvbdJTYaSlwl -DoCjjvbdzitpQETU -DoDKjvbdvBEZSoFI -DncLKvbdnBjXXoOV -DoDLKvbdiZuGMROG -DoDKjvbdKVtecdfi -DnbjjvbddjJqvUzn -EPCkKvbdaMjbStlg -EOcKjvbdSZjHsDWA -DnbkKvbdUaCRSqSZ -DoDLKvbdxZgefXeS -DncKjvbdjhGkfFnL -DncKjvbdIjEAJogE -EPCkKvbdNGcPlpVL -DncKjvbdUMWPAvOi -DnbkKvbdatafxKsh -EObkKvbdjcMLQgUg -DoDKjvbddeOqavcK -EOcLKvbdoznELXoA -EPDLKvbdeOdrjtUS -DnbkKvbdjKFhJmXr -EPCkKvbdpxoHfpdY -DoCjjvbdZLrDsnMN -EPCkKvbdwyhFexFS -EOcKjvbdkClKpftg -DoDKjvbdxnTIYSiD -DncKjvbdxnShYSiD -DoCkKvbdFxtuBDwb -EObjjvbdYkrEUNkm -DnbjjvbdNQYQvNfs -EPCkKvbdhlFDnUby -EOcLKvbdiCObdwRR -DoCjjvbdVwJXvEFH -DnbkKvbdBvzchePv -EObkKvbdZHWdAPSi -DncKjvbdHgGzYxXg -DoCkKvbdMJCMQxAS -EPCkKvbdZLqdTmkm -DoDLKvbdnCJwYPNu -EPCjjvbdOSsvGdtp -DncKjvbdlYrqsZGt -EOcLKvbdJYUBhLqQ -DoCjjvbdZisHpGaf -DnbjjvbdVgxWXfxz -EPDKjvbdkWXNdBxX -DoCkKvbdlZTSSyHU -DncKjvbdjggLeenL -DnbjjvbdKNAEZfuB -DoCjjvbdLAkHMaxR -EOcLKvbdZRNFJNFR -DoDLKvbdjAQGaPfj -EObjjvbdjggMGFmk -DoDLKvbdyfyMAMeX -DncLKvbdjbkkRHVH -EOcLKvbdOTTugFVQ -EOcKjvbdWHxWXfxz -EPCkKvbdvwMBWBVu -EPCjjvbdnHEwlnHZ -DoDKjvbdHEKuiaij -DoCjjvbdVwIwvEEg -EPDLKvbdehKvRnRH -DncLKvbdnVUyjirG -EObjjvbdfMevgNJk -EPDKjvbdjbkjqHVH -DncLKvbdrJAKEloF -DoCkKvbdGckWJaij -DnbjjvbdTvMQJtAq -EPCkKvbdhkddNtcZ -DnbkKvbdrzMQTBIO -DncKjvbdsZlQTAgn -EPDLKvbdOFDtJIjd -EOcLKvbdnBivwoOV -DncKjvbdJXtBhLpp -EPCkKvbdJTYaSmXl -EOcLKvbdLGFgbBQu -DncKjvbdnHEwlmgZ -DoCjjvbdACrYJzJQ -EPCkKvbdiZuGLqNf -DnbjjvbdnGdxMmfy -DnbkKvbdRkZGUgKs -DoDLKvbdZisHofaf -EPDLKvbdJKEAJpGd -DnbkKvbdBsBDUFwS -EObjjvbdtcDVWuno -EOcKjvbdBsAbsfWr -EPDKjvbdrWpMChyR -DoDLKvbdVTltFkuj -EPDKjvbdGFjSOJUR -EOcKjvbdBsAcUGXS -EPCkKvbdcJNKKfWx -EPDLKvbdnQZyWKxb -EPCkKvbdqTtGrSKt -EObkKvbdjJfIKNXr -EOcLKvbdVqmxBdkc -EOcKjvbdFWYopMjF -DnbjjvbdqdFJPnWB -DoCjjvbdehKvRnRH -EPDKjvbdkyTRsZGt -EObjjvbdozmckYPA -DnbjjvbdbrcLUDjB -DoDLKvbdrMyixkhJ -DoDLKvbdrpWOjCvG -DoDKjvbdLFehCAqV -DncKjvbdrWpMCiYq -EOcKjvbdVTmUFkvK -EObkKvbdhficZVjV -EPCkKvbdIsZAsNXl -DoCjjvbdmfdxNOHZ -EPDKjvbdznopdblY -DnbjjvbdLiCMRYAS -DncLKvbdePEsKstS -DoDLKvbdUMVoBVni -DncKjvbdWRnXaeLc -EObjjvbdrDdiPmvB -DoDKjvbdDoDKkXDE -DncKjvbdOAIrtJrA -EPCkKvbdwzIGGXdr -EOcLKvbdUQqPUtgm -EPDLKvbdhlFEOUby -DncKjvbdZirhPfbG -EOcLKvbdKVuGEEgJ -DoDKjvbddePSBvbj -EPDLKvbdfHjuqmqH -EPDKjvbdZjSgpHBf -DncLKvbdunszpjoU -EPCkKvbdqTtHRrKt -EObjjvbdfNGXGljL -EObjjvbdUGznMWue -DnbkKvbdsPuoJbvG -EObjjvbdnQZxujxb -EPDLKvbdczZPwyQb -DoCkKvbdWXIwvDdg -EOcKjvbdQvmdDLhD -DncLKvbdCIkBjiFj -EObjjvbdjJegjNXr -DncLKvbdcIlikFvx -EPDLKvbdRkZFtfjs -DoCjjvbdczYoxZRC -EOcLKvbdatagXjsh -DncLKvbdjcLjqGuH -DoCjjvbdMSWlyuQz -DoCkKvbdjuvnDbYX -DnbjjvbdiMEdOUcZ -EPCjjvbdcTDKtEKB -DnbjjvbdwzHeexEr -EPDLKvbdemGWgNJk -EObjjvbdakLfOnDA -EPDLKvbdTfznLvvF -DoDKjvbdaNLBsUmH -EOcLKvbdhzVFkqNf -DoDKjvbdZRNFIldq -DoDKjvbdlrZVZsEJ -EObkKvbdbUagXjtI -DoDLKvbdUyHsykPO -EObjjvbdkVwNdCYX -EPDLKvbdUVkpJtBR -EPDKjvbdrMzJxkgi -EOcKjvbdSLYfUgLT -DoCjjvbdMRwNZtpz -EPDLKvbdIxTaglRQ -EPDLKvbdJqZdnenF -DoDLKvbdZMRdTmkm -DnbkKvbdANHxrvyx -EPCjjvbdFkErbhNV -EOcLKvbdWSNxCEkc -EPCjjvbdiCPCdwQq -DnbkKvbdbAvEeoow -EOcKjvbdeFOrBvcK -DnbkKvbdaRecHtGL -DnbkKvbdZshhxcrn -EOcKjvbdqTtHRrKt -EObjjvbdauBgXjtI -EOcKjvbdQdCaQRDr -DoCjjvbdFVxopMjF -EPDLKvbdIGgZyXwg -DoDLKvbdRpTfjFdX -DnbkKvbdSQUGifEX -DnbjjvbdpxoIHREY -DoDLKvbdqiAJeMne -EOcLKvbdCIkBkJFj -DncLKvbdFfKSNhsq -DoDKjvbdwWkaVaVu -EPDLKvbdNeETiJKd -DnbjjvbdhbOcEvpq -DoCkKvbdrbGMlHLZ -DnbjjvbdLAjgMawq -DncLKvbdlqyUzSdJ -DncLKvbdYkqdTnLm -EOcKjvbdYkrDsnMN -EOcLKvbdnCKXXnnV -DoCjjvbdDncLLWbd -DoDKjvbdYpmFJMdq -EPDLKvbdFpATXHFy -DoDKjvbdJvUfEEfi -EPDLKvbdmJEURVSB -DncLKvbdtbcVWuno -EOcLKvbdbUagYKtI -EObkKvbdcJMjKevx -DnbjjvbdKVuGEFGi -DoCkKvbdZMRctNkm -EOcLKvbdYpmEiMdq -DoDKjvbdYpmEhmEq -DncKjvbdzjVQQDrt -EPCjjvbdzHYlAMdw -EPDLKvbdYkqcsnMN -EObkKvbdiiehJmYS -DnbjjvbdDwwktUUM -EObkKvbdrounjCuf -DnbjjvbdGGKRmiUR -EOcLKvbdwzIGFxEr -EPDKjvbdOEdUJJLE -DoCkKvbdfNFvgMjL -DoDLKvbdOEdThhjd -DnbkKvbdyTOImSCH -EOcLKvbdzitpQESt -DoDKjvbduDCuWvPP -DoCjjvbdTppnuUhN -DoCkKvbdIBlZdzAD -DoCjjvbdZQmFJMeR -DnbkKvbdJXsaglQp -DoCkKvbdSZigrcWA -EObjjvbdZsiIyETO -EPDKjvbdZLqctOLm -DncKjvbdwyhGFxFS -DncLKvbdqwPkcIyR -EPDKjvbdRkYfUgLT -DoCkKvbdxxIjBpZk -DncLKvbdqlyjYlIJ -EPCjjvbdRaceLiYk -EPDKjvbdjlbLyeHP -EPDKjvbdrbFmLfkZ -EPCkKvbdvBEYsPFI -DncKjvbdSBdElJYk -EPDKjvbdpxoIHREY -EPCkKvbdjhHMFfNk -EPCkKvbdANIYsXZx -EObjjvbdnGdxNOHZ -EObjjvbdKQzFPGOF -DoCjjvbdtunYKRTA -DnbjjvbdLFfHbBRV -EOcKjvbdpedEsuaI -DnbjjvbdYkqcsmkm -EPCkKvbdbrcLUEKB -DnbkKvbdNQYQunGs -DoDLKvbdJcJbqKCx -EPDLKvbdIxTbHlRQ -DnbkKvbdvwMAvBWV -EOcKjvbdfHkVqnQg -EOcLKvbdbKkfPNcA -EPDLKvbdVAbQrpqy -DncLKvbdWRnXaeLc -EPCkKvbdFpATXGey -DoDLKvbdyfxlANFX -DoCkKvbdFVyQQMjF -EOcLKvbdxnShXrhc -DoCjjvbdmaivwoOV -DnbkKvbdbsDLTdJa -DoCkKvbdUtMtGMVj -DnbjjvbdNVSqkNAX -EPDLKvbdWfYytAOs -EPCkKvbdZyEJnDLr -EObkKvbdyXhjCQZk -EObkKvbddoFSkUTr -EOcKjvbdeATqMxKG -DnbkKvbdnPyyWKyC -DncKjvbdkySrTZHU -DnbjjvbdmfdxNNfy -EPCkKvbdHlBznXQk -EPDKjvbdZisIPgCG -DncLKvbdrEEhonVa -DoDLKvbdrykosBHn -EObkKvbdqvpLbiZR -DoCjjvbdhkeDnUcZ -DoCkKvbdVwIwudEg -DncLKvbdyXiJaozL -DoCkKvbdyzeOSIIh -EPCjjvbdkVwNcbYX -DncLKvbdTkuoAuoJ -EPCjjvbdijFgimYS -DncLKvbdliEURUrB -DoDKjvbdURQoUuIN -DoDKjvbdrMzJxkhJ -EPCkKvbdqYngfqEY -EPDLKvbddwzUTrFz -DoCkKvbdyYIjBpZk -EPCjjvbdssSSxzEc -EObkKvbdFejSNiUR -EPCkKvbdrEFJPmua -DnbkKvbdiifIJmXr -EPDLKvbdZLrEUOLm -EObjjvbdGFiqnItR -DoCkKvbdjuwNcaww -DncKjvbdmpZxukYb -DoDLKvbdqdFJQNua -EPDKjvbdNQYRWOGs -DoCjjvbdZeYGzhIb -EObjjvbdZjSgpHCG -EObjjvbdhfjDYvKV -EPCkKvbdJpzFOeme -DnbkKvbdlhcsptrB -DncLKvbdFeiqnJTq -EObjjvbdZxcinCkr -EPDLKvbdFVyQPmKF -EObkKvbdelfWfljL -EOcKjvbdJpydnenF -DnbkKvbdbVCGwkUI -EObkKvbdemFwGmJk -DoCkKvbdBsAbsfWr -EPDLKvbdJYTbHkqQ -DncKjvbdyNrgxTIc -DoDKjvbdGQASvfey -EOcLKvbdRNYCZOUz -EOcKjvbdyzeORgiI -EOcLKvbdZQmEhleR -EPCjjvbdmttyjjRf -DnbjjvbdLBLGmBwq -EOcLKvbdKVuFdFGi -EPCkKvbdxmsHwsJD -DoDLKvbdyOTIXriD -EPDLKvbdZsiJYcsO -EPCjjvbdjvXOEBxX -DoCkKvbdlZSqsZGt -DoDKjvbdADRxKZiQ -EOcKjvbdzoQREcMY -EObkKvbdGGKRmhsq -EObjjvbdJutfDdgJ -DoDLKvbdUsltFkvK -EObkKvbdHDkWKBjK -DncKjvbdLqwMzVQz -EObjjvbdaRecITfL -DoDKjvbdakMGPNcA -DnbjjvbdwXMBWAvV -EOcKjvbdQwOEDLhD -EOcKjvbdAMgxrwZx -DnbjjvbdqqtkNkAm -DoDLKvbdbhmKKewY -DoCjjvbdQmYBxnUz -DnbkKvbdvPTzqKnt -EPCkKvbdJqZePGOF -DoDLKvbdTfznMXVe -DoCkKvbdFyVUaDwb -DncLKvbdFxuUaDwb -EObkKvbdhlEcnUby -DnbjjvbdCJLCKhfK -DoCkKvbdPyNAGrrK -EOcKjvbdVgxVxGxz -EObkKvbdSxKkmzjx -EOcLKvbdemFwHMjL -EObjjvbdrEEiPnVa -DoCkKvbdDjIJvXjA -EPCjjvbdYTMAmToY -DoCjjvbdbLMFnmcA -DoCkKvbdrounjCuf -EPDKjvbdrJAJeNOe -DncLKvbdJbicQjDY -EPCjjvbdmpZxvLZC -DncLKvbdVrNxCElD -DnbkKvbdDoDLKwCd -DoDKjvbdsZkpSaIO -EPCjjvbdNQYRVnGs -DoCkKvbdVrOXbFMD -DoCjjvbdlYrqryHU -DoDLKvbdVTltGMVj -DncLKvbdwzHfGXeS -EPCkKvbdmajXYOnV -EOcLKvbdZLqdTmlN -DoDLKvbdqdFJQOWB -EObkKvbdVgwvXgYz -EPDKjvbdkMakzFHP -DoDKjvbdakLfPNcA -EObjjvbdyYJJbQZk -DoDLKvbdDigivXjA -DoDLKvbdHELWJajK -EObjjvbdZGvdAPTJ -EOcKjvbdUGzmkvue -DncLKvbdSZigsCvA -DoDLKvbddBsMrATm -EObkKvbdmSZUzSdJ -DncKjvbdjAPfaQGj -DoDKjvbdlBMoNALA -DnbkKvbdJTZArlxM -EObjjvbdHgHZyXwg -EPDLKvbdhzUekpnG -EPDKjvbdEOcKjvbd -DoCkKvbdjcLkRHUg -EObjjvbdBiLBkIej -DnbjjvbdZMSEUNkm -DoCkKvbdzRPNJJwA -EPCjjvbdGdKuiajK -EPDLKvbdrEFIpOVa -EPCkKvbdKfGHbApu -EPDKjvbdUtMsfMVj -DoDLKvbdbVCHYKsh -EPDLKvbdEztRFMCi -EOcLKvbdJmADzGta -DnbjjvbdtSrSxydc -DoCjjvbdACrYKZiQ -EPDKjvbdsrqsYzEc -DoCjjvbduLxXAtAw -DoCjjvbdEztQdkbi -DoDLKvbdkClKpgVH -DoDLKvbdSCDeMJYk -DoDLKvbdpxoIGqDx -DoCkKvbdDigjVxKA -EPDKjvbdGGKSOJUR -EOcLKvbdiLeDnVDZ -DnbjjvbdyOSgxShc -EPDLKvbdNsUWHEuQ -EOcLKvbdYpmFImEq -DoDKjvbdZLrDtOLm -DncKjvbdJvVGEFHJ -EOcKjvbdZirgogCG -EPCkKvbdKCjCqJbx -EObjjvbdgKfzcGAE -DncKjvbdZjTIQHBf -DoDKjvbdRDcBQQcr -DnbkKvbdZQmEiNFR -EObkKvbdSiZjRABM -EObkKvbdURROttgm -EObjjvbdlZSrSxft -DoCjjvbdNxPVzdOU -EPCjjvbdqAheAWhE -EPCkKvbdwXLaWBWV -DoCkKvbdKDKDQjCx -EOcKjvbdehLVqnQg -DoCkKvbdZxdJmcMS -DncLKvbdDjHjVxKA -EObkKvbdXrlAmToY -EOcLKvbdwtleRYlO -EPCjjvbdtlYWaUBX -EPCkKvbdiUzFXSVC -DoCjjvbdcJNJkFwY -EObkKvbdaRebhUGL -EOcKjvbdNHDQMotk -DoDLKvbdyTNhlqbH -EOcLKvbdKfGIBaRV -EObkKvbdKaLHMawq -DoCkKvbdnCKWwoNu -EPDLKvbdHffzYwxH -DncKjvbdnGdxMmgZ -EPCjjvbdNPwpvNgT -DoDLKvbdYkrEUOMN -DoDKjvbdTqROuUgm -DoDKjvbdvBDyTPEh -DnbkKvbdJKEAKQHE -EObjjvbdiBoCeWqR -DnbkKvbdmRyUyrci -DnbkKvbdJuuGEFGi -EOcLKvbdFyVVBEXb -EObkKvbdwyhGFwdr -EObkKvbdCTBDTevr -DoDKjvbdjbkkQftg -EOcKjvbdVAbQrqRy -EObjjvbdLAkHMawq -EObjjvbdEztQeLcJ -EPCjjvbdcIlikFvx -DncKjvbdZyEJmcLr -EObjjvbdqceJPmua -DncKjvbdZnmiEdyj -EOcLKvbdiGicYujV -DoCkKvbdFeirNhtR -DoCkKvbdDjHjVxKA -DnbkKvbdqFdEsvBI -EOcKjvbdcImKKevx -EPDLKvbdQmXbZOUz -DncKjvbdqcdhpNvB -EObkKvbdsPvOjCvG -DoDKjvbdFVyQPmKF -EOcKjvbdqYnhGpcx -EPDKjvbdKfGIBaRV -EPCkKvbdnGeXmNgZ -DncKjvbdKVtedEgJ -EObjjvbdCTAbsewS -DnbjjvbdeEoRavcK -EPCkKvbdNsUVfeVQ -EPDLKvbdGdLWKCKK -DnbjjvbdKfFhCBRV -DoCjjvbdZLrDtOLm -EPDLKvbdhtydvrVC -DoDLKvbdZjTIPfaf -DoCjjvbdbrcLTdKB -DncKjvbdzoQRFClY -DnbjjvbdSKyFuHKs -EOcKjvbdZQldiMeR -DncLKvbdkySrTYft -DnbkKvbdSLZGUgKs -EPCkKvbduCbuWvOo -DoDKjvbdsCFlkgLZ -DoCjjvbdrDdiPmvB -EPDLKvbdySnJNRbH -EPDLKvbdDoDKkXDE -EPCjjvbdijGHjMwr -EOcLKvbdeJjSWUzn -EPCkKvbdKWVFdEgJ -DoDLKvbdVYhTykPO -EObkKvbdeJiqutzn -DoCjjvbdRjyFuGkT -DoDKjvbdHDkWJajK -EPCkKvbdbKlFnnDA -EPDKjvbdQwOEDMHc -DoDLKvbdZshiZESn -EObjjvbdkyTSSyGt -DoCkKvbdxUmEpyLn -EObjjvbdMuSqkNAX -DncLKvbdbiNJkGWx -DoCjjvbdWIYVwfxz -DncLKvbdkVwNcaww -DoDLKvbdOFEThhjd -DoDLKvbddndrkUTr -DnbkKvbdyzeNrHiI -EPCjjvbdZRNEhldq -DncKjvbdhlEdNuDZ -DoCjjvbdqquKmkAm -DoDKjvbdFyVVBDxC -EPCkKvbdJuteceHJ -DnbkKvbdiBoDEvqR -DoDLKvbdLqvlzUpz -EPCjjvbdrRuKnLBN -DnbkKvbdZjShQHCG -DnbkKvbdcScLTcjB -EOcKjvbdyNrgxSiD -EOcKjvbdZirhPfbG -DoDLKvbdkIGkefOL -EPDLKvbdkCkkRGtg -EPDKjvbdbUafxLTh -EObkKvbdhfjDYvKV -DoCjjvbdpecdsvAh -EOcKjvbdpfDeUWAh -DnbkKvbdPxmAGsRj -DnbjjvbdZMSEUNlN -EOcLKvbdqFdFTvAh -DoCjjvbdWXJXvDeH -DoCjjvbdqUTfqrLU -EPCjjvbdvOszqLPU -EObkKvbdmtuZkJqf -EOcLKvbdjgfkefNk -DoCjjvbdhaoCeWqR -EObjjvbdKaLHMbXq -DoCjjvbdSLZFtfjs -DoCjjvbdFfKSOItR -DnbkKvbdqUUHSSKt -EPCkKvbdHEKujBjK -EObkKvbdIsZBSmXl -EOcKjvbdRDcApQcr -DoDKjvbduDDVWvPP -EOcKjvbdLBLGlaxR -DoDLKvbdIxTbHlQp -EPDLKvbdrRtkOKaN -DoCjjvbdRjyFtfkT -EPDKjvbdGQASwHGZ -EPDKjvbdMgDPlouL -EObkKvbdJXtCILqQ -EObkKvbdrEFJQNvB -DoCkKvbdeOeTKtUS -EObkKvbdSQTgJfDw -EPCjjvbdSQUGiedX -DoCjjvbdqUUGrRjt -EPDKjvbdTqRPVUgm -EPCkKvbdIMBznWqL -EObkKvbdhancEwRR -EOcKjvbdrMzJxkgi -EPCjjvbdhbPDEvqR -EPDKjvbdZHXEAOsJ -EPDLKvbdxnShXriD -DoCkKvbdLLAgvAKZ -DoCkKvbdhficYvJu -EObjjvbdZRMeIleR -DncLKvbdYfwEAOri -DoDLKvbdDwxMTtUM -DoCkKvbdWRmwbFLc -DnbkKvbdNQYRVnHT -DnbjjvbdjmCMZeHP -EPDKjvbdaNKbTUlg -EPCkKvbdidkHVPAO -DoCjjvbdHfgZxwxH -EObjjvbdxwhibPyk -EPDKjvbdFjeTDHmV -DoDKjvbdiCOcFWqR -DoCkKvbdJmADyfuB -EOcLKvbdhficYujV -DncLKvbdYzbfSJuy -DoCjjvbdbUagXjtI -DoDKjvbdjKFhKNYS -EOcLKvbdCIkCLJGK -DoDKjvbdZshiZESn -EPCkKvbdSQTfjFcw -EObkKvbdiMEcnUcZ -EPDLKvbdyOTHxSiD -EPCjjvbdFjeTDHmV -DnbjjvbdJuuGEFGi -EPDKjvbdhkeDnVCy -EPCkKvbdVAaqSprZ -DncLKvbdVUNTelVj -DoCkKvbdfILVrNpg -DncKjvbdNHDQNPuL -EOcLKvbdLZQirztf -EObjjvbdGckWKCJj -EObkKvbdIHGyyXwg -DncLKvbdiUydwSVC -DoDLKvbdpecdtWBI -EOcLKvbdLGFgaaRV -EOcLKvbdezuxeJUX -EObkKvbdgGLymgHA -DnbjjvbdEvZQQNJe -DncKjvbdJcJbpjDY -DoDKjvbdIxTahLqQ -DncKjvbdBcpAvJlf -EObjjvbdnPyyVkYb -EObjjvbdfNGWfljL -DnbjjvbdieLHVPAO -EOcKjvbdRNYCYmtz -EPDKjvbdiHJcYuiu -EObkKvbdMowqVnHT -DoCjjvbdiUydvrUb -EObjjvbdZMRcsnLm -DnbkKvbdaSFcIUFk -DnbjjvbdZyEKNcLr -DnbkKvbdZnnJFEzK -DncLKvbdJSyBSlxM -DoCkKvbdXsMAmUOx -EPCjjvbddneSkTtS -EOcLKvbdVwIxWEEg -EPCjjvbdxsOJMrBg -DncKjvbdkIHMGGOL -DncLKvbdGFjRmhsq -DnbkKvbdySmiNRag -EPDKjvbdpyPHgREY -DnbjjvbdGZUuAcxC -DnbjjvbdiHKDYvJu -DoCjjvbdtlXwBUBX -EObkKvbdTkvPAvPJ -EOcKjvbdSxLLmzkY -DncKjvbdhgJcZVjV -EOcLKvbdZirgogBf -EOcKjvbdTukpKUBR -EPDLKvbdQlwaxmtz -DoCkKvbdNxOuzdNt -EPDLKvbduCbuXWPP -EPCkKvbdmbJvwoNu -EObkKvbdKDKCqJbx -EPCjjvbdyNsIXrhc -EPCkKvbdSCEEkiYk -EObkKvbdOFDshiLE -DoDKjvbdZnmiFEzK -EObkKvbdJbjDRKDY -EObkKvbdYfvdAOri -DncKjvbdkDLjpfuH -DoCkKvbdsrqsZZdc -DoDKjvbdLBLHNBwq -DncLKvbdDjHjWYKA -DoDKjvbdZQleIldq -DoDKjvbdatbGxKtI -EObjjvbdUWMQKUAq -EOcLKvbdlhdUQtrB -EPCjjvbdAMhZTWyx -DoCjjvbdjhGlGFmk -DoDLKvbdHgGzZXxH -EOcKjvbdrykoraIO -DoDKjvbdjJehJlwr -EObkKvbdrEEhonWB -EPCjjvbdiUyeWrUb -DnbkKvbdNQYRVmgT -EPCjjvbdVUNUFkuj -DnbjjvbdEYYMTtUM -DoDKjvbdYpldhldq -EPCjjvbdtlYWaTaX -DoCjjvbdozmdLXoA -DnbjjvbdZnnJFFZj -EObjjvbdZshiZDrn -EPDLKvbdZjShPfaf -DoCkKvbdrpVnibvG -DoCkKvbdQwNcblHc -EObkKvbdxZgefXdr -DoDKjvbdNddUIhkE -DncKjvbdcImJkFwY -DoDKjvbdZirhQGaf -DoDKjvbdqwPkcJZR -EPDLKvbdkHgLfFnL -DncKjvbdlqxuZrci -DncKjvbdRadFLiYk -EPDKjvbdIHGyxxXg -EObkKvbdmpZyVjyC -EPCkKvbdUaBqSpqy -EOcKjvbdqZOgfqDx -EObkKvbdkNBlZeGo -EObjjvbdOAIrsjSA -EPDLKvbdEvZPpNKF -DnbjjvbdczYoxZRC -DoDKjvbdvAdZTPEh -DncKjvbdqUTfqrKt -EPCkKvbdZGwEAPTJ -EPDLKvbdZMSEUNkm -EPCjjvbdYkqctNlN -DnbkKvbdeEnqawDK -DoCjjvbdKVuGEFHJ -EOcKjvbdzitopDsU -DnbjjvbdsBfNLgLZ -DnbjjvbdcImJkFvx -EPCkKvbdMgCpNQUk -EOcLKvbdZQmEhleR -EPDLKvbdtTRrxzEc -DncLKvbdKVuFceHJ -EPCkKvbdyfxlAMdw -DnbkKvbdsZkosBHn -EPDLKvbdwWlAvBVu -DoDLKvbdlqxuZrdJ -EPDLKvbdMRwMzUpz -EObjjvbdFkFTCgmV -EObkKvbdHEKvJbKK -DncLKvbdkNCMZdfo -DoCjjvbddoFSkTtS -EPCkKvbdRpTfjFdX -DoDKjvbdIGgZyYXg -EPCkKvbdBiLCLIfK -DoCjjvbdKQydnfNe -EPCjjvbdHgGzZYYH -DnbjjvbdYNqAYUvU -DncKjvbdGckVjBjK -DoCjjvbdjhHMFemk -DnbkKvbdkIGkeenL -DncLKvbdmaivwnmu -EPDLKvbdmuVZkJqf -EPDKjvbdNddUIhjd -DoCkKvbdRDbaQRES -DncLKvbdTvLojUBR -DncLKvbdtSrSxyeD -DncKjvbdjgflGFmk -DoCkKvbdQwNdDLgc -DoCkKvbdEXwksssl -DoDKjvbdtAHRIAAr -DoDLKvbdSPsgJecw -EObkKvbdjggLfGOL -DoCjjvbdSBdFLhxk -DoCkKvbdiMEdNuDZ -DoCjjvbdhtzFWrUb -EPCjjvbdSKxetgKs -DoDLKvbddndsLTtS -DncKjvbdtcCtwVno -DoDLKvbdACrYJzJQ -EOcLKvbdyOShXrhc -EObjjvbdqquKnKaN -DoCkKvbdnCJvxOnV -EPDLKvbdFWYpQMjF -DnbjjvbdnCJvwoNu -EObkKvbdhfjCyWKV -DoDKjvbdrNZjZLhJ -DnbkKvbdyNrgwsIc -EPCkKvbdSZjITDWA -DncLKvbdqiAJeNOe -DoCkKvbdhaoDEvpq -EOcLKvbdtkwwAtAw -DncKjvbdsPvOicWG -DoCjjvbdWXJYVcdg -DoDLKvbdmIdUQuSB -DnbkKvbdauBgYKtI -EOcLKvbdJbicRKCx -DoDLKvbdsPuoJcVf -EPCkKvbdfILWRnRH -EPCkKvbdAMhYrvzY -DoCjjvbdKWUedEfi -EPCkKvbdhaoDEvqR -EObjjvbdxVMeRZMO -DncKjvbdFaOqZJzm -DncKjvbdIryArlwl -EObkKvbdRWmccLgc -EPCkKvbdsPunibvG -EOcKjvbdQccBPpcr -EPDKjvbdssRsYzFD -DncLKvbdySmiMqbH -EObkKvbdZLqdTmlN -EPDLKvbdVAaqTQqy -DncLKvbdFWZPomJe -DoDKjvbdUVkojTaR -DncKjvbdULvPBWPJ -EObjjvbdUslsfLuj -DoDKjvbdsBfMlHKy -DoCjjvbdkySrTYgU -EPDKjvbdYgXEAPTJ -EOcLKvbdrzMPsAhO -DoCkKvbdcyxpXyRC -DncLKvbdkIGkeemk -EObkKvbdVqnXbElD -EObkKvbdMuSqkNAX -DncLKvbdkNCLydfo -EOcLKvbdUVlQJsaR -EOcKjvbdczZPxYqC -EObkKvbdWIXvXfxz -DoCkKvbddndsLTtS -DnbkKvbdFfJqmiUR -DncKjvbdURROuVIN -EObkKvbdddnrCXDK -DncLKvbdZyEJmcLr -EPCkKvbdVgxVxHYz -DoDKjvbdFfKRmiTq -EPDKjvbddCTNSAUN -DoDLKvbdUxgsykOn -DoDLKvbdBhjbLIfK -DoCkKvbdFejRmiTq -EPDLKvbdmuUykJqf -DoCkKvbdVTmTfLuj -DoCjjvbdkNCLydgP -DnbjjvbdHffzYxYH -EObkKvbdpxngfpcx -EPCjjvbdKQzFOfOF -DncLKvbdOEdThiKd -EOcKjvbdJSyBTNXl -DncLKvbdyNsIXriD -EOcLKvbdJYTagkpp -DoCjjvbdkMakzEfo -DoDLKvbdZjSgpGbG -DnbjjvbdSQUHJfDw -DncKjvbdRpTgJedX -DncKjvbdrykosBIO -EObkKvbdGYttaEYC -DoCkKvbdZxcjNcMS -DoCjjvbdRadElIyL -DoDKjvbdkySqryGt -EPDKjvbdiHJbyWJu -EPCjjvbdwzHeewdr -EPDKjvbdQwNccLhD -DoCjjvbdbBVeGPow -EOcKjvbdddnrCWcK -EPCjjvbdJXtCHkqQ -EObkKvbdrbFllHLZ -DncKjvbdACqxKZhp -DoCkKvbdJXtCILpp -DncKjvbdEYYMTssl -EOcKjvbdwjvdHzzG -EPDLKvbdemGWgMik -EPCjjvbdqvokcIyR -DnbkKvbdUaCQrprZ -DoCjjvbdKCjCqKDY -EPDKjvbdYSlBMtOx -EPDLKvbdyXiKBozL -EObkKvbdZxdKNcMS -EObkKvbdCDpBVjNG -DncKjvbdmgExMmgZ -EObjjvbdHkaznWqL -EObjjvbdkNCLzEfo -EPDLKvbdyNrgwsIc -DncKjvbdnHFYNNfy -DoCkKvbdDwwktTsl -EPDLKvbdTlWOaWPJ -DoDKjvbdmIctRVRa -EPCkKvbdeEnqbWbj -EPDKjvbdTYLMNzkY -DncKjvbdkHgLfGNk -DncLKvbdnPyxvLZC -EOcLKvbdjKGHjMxS -DoCjjvbdiZtfMROG -EPDKjvbdFeiqmhsq -EPDKjvbdDoDKjvbd -EOcLKvbdKRZeOfOF -DoDKjvbdzoQQeCkx -EObjjvbdEOcLKwDE -DoCkKvbdrafNLgLZ -EObjjvbdMfbomPuL -DncKjvbdUQqPUthN -EOcLKvbddjJrWUzn -DoDLKvbdvBDySoEh -DnbjjvbdVUMselVj -DoCkKvbddndrkUUS -EObkKvbdmpZxvKxb -EPCkKvbdmbJvxPNu -EPCkKvbdmfdwlnHZ -DnbkKvbdZRMdhmFR -DnbjjvbdYSlBNToY -DncLKvbdzoQRFClY -EPCkKvbdVZITzLOn -DncKjvbdZtIiZDrn -DncKjvbdFVxopNKF -EOcKjvbdtTSSxydc -EObjjvbdUVlQKTaR -EPDLKvbdkMbLzEgP -DoDLKvbdKDJcQicY -DoDLKvbdJmAEZgVB -EOcKjvbdCWzdJFPv -DncLKvbddneTLUUS -EObjjvbdBcoaWJlf -EPDKjvbdGcjvJbJj -DoCjjvbdddoRavcK -EOcLKvbdAMhZSvyx -DnbjjvbdajlGOmcA -DoCkKvbdCIkCLJFj -DnbjjvbdMSWmZtpz -EOcKjvbdNGcQMpUk -EOcKjvbdTqROuUhN -DoCkKvbdFVxoolie -DoDKjvbdUQpnuUgm -EPDKjvbdnBiwXnmu -DnbjjvbdJuuGDdgJ -EPCjjvbdZLqcsnLm -EObkKvbdZnmheEzK -DoDKjvbdXsMAltOx -EObkKvbdiMEdOUcZ -DoDKjvbdZRNEhleR -DoDLKvbdMIbLpxAS -DoDLKvbdVwIwucdg -DoCjjvbdRbDeLiZL -DncLKvbdZMRctNlN -DoCkKvbdGcjvJbJj -DnbjjvbdSZihScWA -EPDLKvbdkDLjqHUg -DnbjjvbdZisIPfaf -EObjjvbdmpZyWLZC -EOcLKvbdrbGNLgLZ -DnbkKvbdkVvmdBww -EObjjvbddoFSjstS -EObjjvbdxwiJbPyk -EPDKjvbdTvLoitAq -DoCkKvbdZLrDsnMN -DoDKjvbdOAJTUJrA -EObkKvbdURQntuHm -EObkKvbdkIGkefOL -DncLKvbdsCFllHKy -EPCkKvbdatafxKtI -DoCjjvbdiifHjMxS -DnbkKvbdZsiIyDsO -DncKjvbdieKgUoAO -EPCjjvbdBhkCLIej -DnbjjvbdDxXktTsl -EObkKvbdKCjCqKCx -EOcLKvbdIwsahLqQ -EPDLKvbdhzUfLpnG -EObjjvbdbAvEepPw -EOcLKvbdSLZFuHKs -DnbkKvbdIidAJogE -DnbjjvbdJbjDQicY -EPDLKvbdQwODblID -EObkKvbdqZOgfqEY -EObjjvbdkWWnDbXw -DncLKvbdEvZPpMjF -EPDLKvbdKQydnfNe -EObjjvbdUWMQJtAq -EOcLKvbdqrUjmkBN -DoDLKvbdJmAEZfuB -DoCkKvbdhtydvqtb -DoCkKvbdtAHQhABS -EPDLKvbdxZhGGXdr -EPDKjvbdmSZVZrci -DnbkKvbdZjTHogCG -EObkKvbdYqMdiMeR -DoDKjvbddwzUURez -DoDLKvbdbKlFnnDA -EPCkKvbdGGKSOJTq -EObkKvbdLGFgbBRV -DoCkKvbdKyQjSzuG -DncKjvbdJcJcRJcY -EOcLKvbdnBiwYPOV -EOcLKvbdLGGHaaRV -EObjjvbddneSkTtS -DoDKjvbdiLddOUcZ -EObkKvbdsPvOjCuf -DnbkKvbdZyEKOClS -DoCjjvbdyzeORhIh -DnbkKvbdhkeDmuCy -EObkKvbdvvkaWAvV -EOcKjvbdzeZnzdzQ -DoCjjvbdVAaprqSZ -EObjjvbdjhGkefNk -DncLKvbdSKxfVHLT -EPCjjvbdZRMeImFR -DncLKvbdFeirOJTq -DncLKvbdFfJrOItR -DoDLKvbdmoyyVkYb -DncLKvbdddoRavcK -DoDLKvbdauBfxKtI -EObjjvbdSPtHJfDw -EPCjjvbdCEQBWJmG -DoCjjvbdDnbkLWcE -EPDLKvbdVUNUGMVj -DnbkKvbdnQZyVjyC -DnbkKvbdgFkymfgA -DoDKjvbdRDcBQQdS -EOcKjvbdtcCuWvOo -EObkKvbdlrYuZrdJ -DoCjjvbdZirgogBf -DoDLKvbdMfcPmPuL -EOcKjvbdDwwlTtTl -DncLKvbdwXLaWAuu -EPDKjvbdUaBqSpqy -EObkKvbdHlBznXRL -EPCkKvbdkMakzFHP -DnbkKvbdqZOgfpcx -DnbkKvbdUMWOaWPJ -DncLKvbdMfbolpVL -EObjjvbdfekynGgA -EPCkKvbdWWiXvEFH -DoCjjvbdpxnhGqDx -DoDKjvbdsQVnjDWG -EObkKvbdYNqAXtut -DncLKvbdDnbkLXCd -EObkKvbdKaLGmBwq -DoCkKvbdBvzciFPv -DoDLKvbdjKFgilwr -EPCkKvbdUaBqTQqy -DoDLKvbdVgwvYHYz -EPDKjvbdIHGyyXwg -EPDKjvbdEXxMTstM -DnbkKvbdQccBPpcr -DnbkKvbdMgCpNPuL -EPDKjvbdSPtHKFcw -DoDKjvbdkIHMGFnL -DncLKvbdnGeXmNgZ -DoDLKvbdhtyeWquC -EObjjvbdqGEFUVaI -EOcLKvbdNPwpumgT -DnbkKvbdZshiYdTO -DoDKjvbdZMSETmkm -DncLKvbdRbDdkhyL -EPCjjvbdTvMQJtBR -EObkKvbdjvXOEBww -DncLKvbdrXPkbiZR -EOcLKvbdFejSOJTq -EOcKjvbdegjvRnRH -EPDLKvbdJvVGDeHJ -EObjjvbdXrlBMtOx -DncKjvbdFejSNhsq -EPDKjvbdBiLBjiGK -EOcKjvbddiirVtzn -EPDLKvbdVBBqTRRy -DoCkKvbdeqaWzkcP -EObjjvbdqYnggREY -EPDKjvbdEARiNZwX -EObjjvbdSQTfifEX -EObjjvbdLBLHNBxR -EPCkKvbdNHCpMpUk -EPCkKvbdKVuGDdfi -EPCkKvbdxrnImRbH -EOcLKvbdZRNEiNFR -EOcLKvbdtbcUvuno -EPCjjvbdJTZAsNXl -EPDLKvbdFVyQPljF -DoCkKvbdieKftoAO -EObkKvbdZMSETnMN -DoCjjvbddePSBvcK -DncLKvbdqUUHSSLU -DoDLKvbdZQldhmEq -DoDKjvbdOTTugFUp -DncLKvbdZsiJZESn -DnbjjvbdtbcUwWPP -EPDLKvbddwzTtRez -DnbjjvbdZoNheFZj -EPCkKvbdKfFgbApu -DoDLKvbdhytfMQmf -DnbkKvbdnGeXlnGy -EPCjjvbdSBcdlIyL -DncKjvbdbAvFFpPw -EObjjvbdzoPpeClY -EOcLKvbdqwQMDIyR -EPCjjvbdmaivxOmu -EPCjjvbdIwsahLqQ -DncLKvbdddoSBwCj -EOcLKvbdrEEhpNvB -DoCjjvbdEPCkKvcE -DncKjvbdePEsLTsr -DncKjvbdmRyVZsEJ -DnbjjvbdZLqdTnMN -EPDKjvbdRbEFMIxk -EObjjvbdJXsbHlRQ -DncKjvbdkDMLQftg -EOcKjvbdOEctJIjd -DnbkKvbdqTsfrRkU -EPDKjvbdkIGkeenL -DoDLKvbdUxhUZjnn -DncLKvbdwyhFexFS -EPDKjvbdbLLfOmcA -DnbkKvbdtbbuXWPP -EOcLKvbdYpmEhmFR -DnbkKvbdxmsHxTIc -DoDKjvbdznoqFDLx -EObjjvbdmfdxMnHZ -EObjjvbdYTMBNUOx -EObjjvbdADRwizJQ -EOcLKvbdMoxQvOGs -EOcLKvbdrWolDJYq -EPCjjvbdeFPRbXDK -DoDKjvbdrDdhpNvB -EPDKjvbdZxdKODLr -EOcLKvbdWSNwadlD -EOcKjvbdxrmhlqbH -DoDLKvbdzoPqEblY -DncKjvbdTkuoBWPJ -DnbjjvbdrykpSaHn -EOcKjvbdKWUfDdgJ -DnbkKvbdZMSEUOMN -EObkKvbdSBcdkhxk -DnbjjvbdIGfyyYXg -EPCkKvbdnBjWwoOV -EOcKjvbdzaAPGgBl -DnbjjvbdkVvmdCXw -DoDLKvbdkDLkQfuH -DoCkKvbdVqnXbFMD -DncKjvbdWWiXuceH -DoCjjvbdBvzdIePv -DncKjvbdLFfICBQu -DncLKvbdeFPRawDK -DncKjvbdjmBkydgP -EObjjvbdVUMtFkuj -EPDLKvbdrSUjmkBN -DoDLKvbdSPsgKFdX -DoDKjvbduDDVXVno -DoCjjvbdMuSqjmAX -EPCkKvbdZyEJmcLr -DnbkKvbdMfcQMouL -DoDLKvbdUMWPAuni -DnbjjvbddZxpYZRC -EPDKjvbdbAvEeopX -DnbkKvbddoErkUUS -DoCjjvbdePErjstS -EOcKjvbdGKeTDHlu -EObjjvbdfIKvSORH -EPCjjvbdUsmTelWK -EObkKvbdaMkBsVMg -DoCkKvbdRjxfVHKs -DnbkKvbdMpYQumgT -DncLKvbdVwIxWEFH -DncKjvbdaMkCTUmH -DoDLKvbdhlFENuDZ -EPCjjvbdZisIPgCG -EPCjjvbdZnnJEdzK -EPDKjvbdGLEsDINV -EObjjvbdYzcFrKVy -EPDKjvbdZirhPgBf -EPDLKvbdKaLGmCXq -EObkKvbddoErkTsr -DoCkKvbdRXNdCkgc -DoDLKvbdEvZQQNKF -DoCkKvbdZoNhdeZj -EPCkKvbdhkddNtby -EPDLKvbdZLrDtNlN -DncKjvbdRbDdlIxk -EPCkKvbdEOcKjwCd -DncKjvbdlqyUyrdJ -DoDLKvbdNddThhkE -EOcKjvbdwyhFewdr -EPDLKvbdiUydwSVC -DnbkKvbdYzcFqjWZ -DnbkKvbdiBoCdwRR -EOcLKvbdpecdsuaI -EPCkKvbdQlxCYnUz -EPDLKvbdVvhxWEEg -EOcLKvbdlZSqryGt -EPCkKvbdUaCQsQqy -DoCkKvbdvAdZSndh -DnbjjvbdmttykKRf -EPCkKvbdYgWdAPTJ -DoCkKvbdlYrqsZGt -DnbkKvbdZsiIxcrn -DoCjjvbddeOqavbj -EObkKvbdbVBfwjsh -EObjjvbdMoxQvOHT -EPCkKvbdRbEFLiYk -DoCkKvbdlhdTqUqa -EOcLKvbdMIbMRYAS -EObkKvbdDncKkWbd -DncLKvbdfSAvzkcP -DnbkKvbdxsOIlqbH -DoCkKvbdADSYKZhp -EPCjjvbdZshiZESn -DoCjjvbdieLGuPAO -EPCjjvbdkHgMFenL -EPDKjvbddBrlrAUN -DncKjvbdddoSCXCj -EPCjjvbdsQWOibvG -EObkKvbdKkBHvAKZ -EObjjvbdkWWmdBww -EObjjvbdnGeXmNgZ -EOcLKvbdyNrgwrhc -DnbkKvbdNddThiLE -DncKjvbdDjHivYKA -EObjjvbdWXIxWDdg -EObjjvbdrMyixlIJ -EOcKjvbdcyyPxYpb -DncKjvbdcyxowxpb -EOcLKvbdhbOcFXQq -EOcKjvbdHDjuibKK -DoDKjvbdiVZeXRuC -EOcKjvbdnBjXYOnV -DnbkKvbdOTTufdtp -DoDKjvbdVAbRTRSZ -DnbjjvbdRXOEDLgc -EOcLKvbdznopdcLx -DncLKvbdRNXayOUz -DncLKvbdSPtHKFdX -EPDKjvbdxUldqYkn -DoCkKvbdZRNEiNEq -EPDKjvbdrbFllGjy -EPCjjvbdUyHszLPO -DncLKvbdxwhibQZk -EOcKjvbdFWYopMie -EOcKjvbdaNKbTVMg -DnbjjvbdliETqUrB -EObjjvbdRXODbkgc -DnbkKvbdTlWPBWPJ -EOcKjvbdOFEThiKd -EObjjvbdMSXMzVQz -EObjjvbdHDkVjCKK -EPDLKvbdqFceTuaI -EOcKjvbdFyUtaDxC -EOcLKvbdmgExMnGy -DncKjvbdtlYWaUBX -DoDKjvbdCDoaWJlf -EPDKjvbdkyTSTYgU -DoCjjvbdqqtjnLAm -DnbjjvbdGYtuAdXb -DoCkKvbdBhjbLIfK -EPDKjvbdNPwqVmfs -DoCjjvbdsrqsYzFD -EPDKjvbdSPsfjFdX -EPCjjvbdZyDjNbkr -EPDKjvbdqZOgfpcx -EPCkKvbdqGDeUVaI -DoDKjvbdUVkpKUAq -DoCjjvbdRpUGjGEX -DoDLKvbdmgFYMmfy -EPDLKvbdRpUHKFcw -DoDLKvbdEvZQPmKF -DoDKjvbdZshhxdTO -DoCjjvbdiZuGMROG -DoDKjvbdfpBzvdYI -EPCjjvbdmgFYNOGy -EOcKjvbdNrtWGdtp -DnbjjvbdWHxVwgYz -EPCkKvbdJbjDRKDY -EPCjjvbduWOYJpsA -DncKjvbdehLVrORH -DoCjjvbdGFjSOItR -DoCkKvbdjuwODbYX -EObjjvbdJTZBSmXl -DnbkKvbdzQoNIiwA -EObjjvbdjJfHilwr -EOcKjvbdJpyeOfOF -DnbjjvbdqFdEsuaI -EPDLKvbdUxhTzKoO -EPDKjvbdBraCsfXS -DoCjjvbdLAjgNBxR -EObkKvbdlhdTqUrB -EPCjjvbdZoOIeFZj -DnbjjvbdrDdhpNua -EPCjjvbdIHHZxxYH -EPCkKvbdiMEdOVCy -DoDKjvbdhgJbxvKV -DoDLKvbdUyHsyjoO -DoDKjvbdGQATXGfZ -DnbjjvbdvAdYroEh -EPCkKvbdhtydvrUb -DoCjjvbdsQWOicWG -DncLKvbdcJMjLGWx -DoCkKvbdIwsaglQp -DoCkKvbdYkrEUOLm -EObkKvbdVvhxWDeH -EPDLKvbdZMRdTnLm -DoCjjvbdADRwizJQ -DoDKjvbdSwjkmzjx -DnbkKvbdBiKbLIfK -EPCjjvbdRyigsDWA -EPDKjvbdRXOECkhD -EObjjvbddxZtTqez -EObjjvbdbBVdfPow -DncLKvbdMfcQNQVL -EPDKjvbdVBBqTQrZ -DncKjvbdZMRctOLm -DncKjvbdGGJrOIsq -EPCjjvbdZMSETmlN -DoDLKvbdhlEdOVDZ -EOcLKvbdOhAXyAZB -DoCkKvbdyOTIYSiD -DoCjjvbdUtNUGMVj -EObkKvbdWXJYWDdg -EOcLKvbdBhjbKhej -EObkKvbdVwIwvDdg -EPDLKvbdzjUpQDsU -EOcKjvbdqAiFAXHd -DoDLKvbdqrUkNjaN -EOcKjvbdYORAYUvU -EOcLKvbdcIljLFwY -DnbkKvbdVwJXvDdg -DoDKjvbdVBCQsRSZ -DoDLKvbdmuUzKiqf -EObkKvbdJYUCILpp -EPDKjvbdsQVoKCvG -EPDLKvbdmoyyVkZC -EPDLKvbdsCGNLfjy -EOcKjvbdbiNKLGWx -DoCjjvbdrpVnjDWG -EObkKvbdfVzxPizs -DnbkKvbdRXODcLgc -EPCjjvbdjJfIJlxS -DoCjjvbdZLqcsnLm -DncKjvbdjuvnECXw -DoDLKvbdEPDKkXCd -DnbjjvbdOSsvGduQ -DoDKjvbdIMBzmvpk -EPCjjvbdqrUkOLAm -EPCjjvbdTkvOaVoJ -EObjjvbdozmdKwoA -DncLKvbdDxXkstTl -EOcKjvbdfMewHMik -DoDLKvbdGKeTCgmV -EObjjvbdxnSgwsIc -EPCkKvbdaaVdepPw -EObkKvbdqGEFUVaI -DncLKvbdjblKpgUg -DoDLKvbdRWnEDLhD -DnbjjvbdFxuVAcxC -DncKjvbdqZOhGpcx -DoCkKvbdfHjvRnQg -DnbkKvbdwMvANDeN -EObkKvbdFfKSOIsq -DoCjjvbdmajXYPNu -EObkKvbdANHyTXZx -EPCjjvbdLFfHbAqV -DoCjjvbdVgwuxHYz -EPCjjvbdQvmcblHc -DoDKjvbdaSFbhUGL -DncLKvbdzHZMANFX -DncKjvbdySnJNRbH -DoCjjvbdMpYRVnHT -EObkKvbddePSBwDK -EPCkKvbdMfcPmQUk -EObjjvbdMgCpNQVL -DoDKjvbdrEFIonWB -DoDLKvbdFjdsCgmV -EObjjvbdwtmFRYlO -DnbjjvbdIwtBgkqQ -EPCjjvbduaDxrndh -EPDLKvbdShzKRABM -DnbjjvbdfHjvRnRH -EOcKjvbdBiLBjiGK -EPCjjvbdCEPaWKNG -DoDKjvbdtbbuWuoP -DoDKjvbdegkWRmqH -DnbjjvbdNeETiJLE -EPCkKvbdjcLkRHUg -DnbjjvbdjvXOEBww -EOcLKvbdTlWPAvOi -DoCjjvbdrMyixkhJ -EObkKvbdqGEEtWAh -DncKjvbdbBVeGQPw -DoDLKvbdpssfqqjt -DnbkKvbdFWZPomJe -DoDKjvbdSBcdkiYk -DoCkKvbdvBEZSoFI -EOcKjvbdRaceLhxk -EOcKjvbdJKEAKQHE -DoDLKvbddZyQYYpb -EObjjvbdeXzTsqez -DncLKvbdCSaCtGXS -EPCkKvbdlZSrSyHU -EOcLKvbdTJZiqABM -DncLKvbdvAdYsOdh -DnbkKvbdcyxoxZQb -DnbkKvbdhanbdwRR -EPCjjvbdbBVeFopX -DncKjvbdGLFTDHmV -DoCjjvbdiZuGLpmf -EOcLKvbdJbjCqJbx -EObkKvbdGdLWJbKK -DoCjjvbdRkZGVHKs -DoCjjvbdGckWJajK -DncKjvbdAMgxrvyx -EPCjjvbdEPDKjvbd -EOcLKvbdkDLjqGtg -DoDLKvbdNPxRVnGs -DoDKjvbdySmhmRag -EPCjjvbdVqnXadkc -EPDKjvbdTulPitAq -EObjjvbdGLErcHlu -DoDLKvbdHELWKCJj -EObjjvbdbVCHYLUI -DncKjvbdqvpLbiZR -EPCjjvbdvAdZSoFI -EOcLKvbdfjfzcGAE -DnbjjvbdaNKartmH -EOcLKvbdcTDKsdJa -DncLKvbdOSsufduQ -DnbkKvbdyYIiapZk -DoCjjvbdunszqKoU -DoCkKvbddndsLTsr -DoDKjvbdxxJKBoyk -DoDLKvbdrovOibvG -EPCkKvbdiLddOVDZ -EPCkKvbdiBncFWqR -EOcLKvbdZQldiNFR -DoCkKvbdOEctJJKd -DoCkKvbdrMzKZMIJ -DnbkKvbdVhYVwgYz -EOcLKvbdQvnDblHc -DoDLKvbdmJEURVRa -DoDLKvbdCTBDUFwS -EPCkKvbdNrsvHEuQ -DnbkKvbdegkVqnRH -DoCjjvbddBrlrATm -DoCkKvbdCJLCLJFj -EOcKjvbdxZgefXeS -EPDKjvbdZtJJZDsO -DoCkKvbdQvmdDMID -DoDLKvbdRaceLhxk -DnbkKvbdSBdFLhxk -DoDKjvbdOTTufdtp -DoDLKvbdnQZxujyC -DnbjjvbdZshhyETO -DoCjjvbdtvOYJqTA -DncLKvbdRMxBxmtz -DnbjjvbdEzsqElCi -EObjjvbdKefHbAqV -DnbkKvbdmpZyWKyC -DncLKvbdNQXqWOGs -EPDLKvbdVTlsekuj -EPCkKvbdGcjvJajK -EPDLKvbdIryArlxM -DoDLKvbdwyhGFwdr -EPCkKvbdzaAOgGal -DncLKvbdiHKCxvJu -EOcKjvbdLBKgMbXq -DoCjjvbdTppoVVIN -EPDKjvbdNPxQvOHT -DnbjjvbdTvLpJsaR -DncKjvbdnVUyjiqf -EPCjjvbdVUNTfLvK -EOcLKvbdDxYLtTtM -DnbkKvbddePSCXCj -EPDLKvbdgGLzOHHA -DoCkKvbdTukpKTaR -DncLKvbdVUMtGMWK -EObkKvbdXnRAYVWU -DncLKvbdyqOmJJwA -DoDKjvbdFVyQQNKF -DncKjvbdvOszqLOt -EPCkKvbdZRMdhmFR -EPDLKvbdhlFDmuCy -EOcKjvbdkIHLeenL -DnbjjvbdqceJQOWB -DoCkKvbdzitpPdSt -EPCjjvbdFeiqmhtR -DoDLKvbdsQVoJcVf -EPDLKvbdUQpnuVIN -DoDLKvbdWSNxBdlD -EPCjjvbdpyPHgQcx -EOcKjvbdUyHsyjoO -DoCjjvbdxrnJNSCH -DoCjjvbdKDKCpjCx -EPDLKvbdxsOIlrBg -DoCkKvbdnGdxMnHZ -EPDLKvbdfHkWSNpg -DnbjjvbdkHgMGFnL -EOcLKvbdxmsIYSiD -DoDLKvbdEXxLsssl -DoDKjvbdjFLGuPAO -EOcLKvbdeEoRawCj -DoDKjvbdyOTIYSiD -DnbjjvbdIHGyyXxH -DncKjvbdTqQoUuHm -EOcKjvbdMfcQNPuL -DnbkKvbdatbGxKsh -DoDKjvbdOTUWHEtp -EPCkKvbdGLFTCgmV -DoDKjvbdkHfkfGNk -EObjjvbdJXtBhMRQ -EObkKvbdRpUHKGEX -DnbjjvbdiUzFWrVC -EPCkKvbdliETqUrB -DnbkKvbdZjTIQHBf -DoCjjvbdZMSETnLm -EPDLKvbdFWYoomKF -EPDLKvbdRaceLhxk -DoDLKvbdEASJNZwX -EPDLKvbdGZUtaEXb -DncLKvbdyNrgxSiD -EOcKjvbdbVBgXkTh -EPCkKvbdvOszpkOt -EObkKvbdKfGHbBRV -DncLKvbdjvXOEBxX -EPDLKvbdvAcyTPFI -EObjjvbdNsUWGeUp -EPCjjvbdZtIiZDrn -DoDLKvbdrRtkOLBN -DncKjvbdptUHSSLU -DncLKvbdWSOXaeLc -EPCkKvbdiLeDmuCy -DoCjjvbdhyuFkqNf -DnbkKvbdzoPqFDMY -DoCkKvbdGFirOItR -DoCjjvbdEObjkXCd -DnbkKvbdjKFgilwr -EPDLKvbdVwIwvEFH -DoDKjvbdfIKvRmpg -EPDLKvbdOFDsiIkE -EPDLKvbdGKdrcIMu -EPDKjvbdZnmiEeZj -DoDKjvbdKWVFceHJ -DncKjvbdvBDySneI -DncKjvbddeOqawCj -DoCkKvbdEztRFLbi -EPDKjvbdMpXpumgT -EPDKjvbdtunYJqTA -EPCjjvbdegkVqmpg -EObjjvbdlYsRsZHU -EOcKjvbdbUagXkUI -EPDLKvbdANHySvyx -DnbkKvbdmJEUQtqa -EPDKjvbdVUNUFlVj -EPCkKvbdvvlBVaVu -DoCjjvbdmozZWLYb -DoDKjvbdwzIFfXeS -DoDLKvbdNQXpvOGs -DncLKvbdEYXlTstM -EPCkKvbdbUbGwkUI -EOcLKvbdLBLHNBxR -DnbkKvbdePErkUUS -EObjjvbdyXiJaoyk -DncLKvbdVrNxBeLc -DoCjjvbdaRebhUGL -EOcKjvbdxsNhmSBg -EOcKjvbdXrkaMsoY -EObjjvbdhuZdwSVC -DoCkKvbdqGEFUWAh -DoDKjvbdegkVrNpg -DoCkKvbdtcCtvuoP -EOcKjvbdmJEUQtrB -EOcKjvbdWXIwucdg -DoDLKvbdhgKCyWJu -EPCjjvbdcSbkUDjB -EPDKjvbdLrWmZuQz -EPDLKvbdXrlAlsnx -DnbkKvbdKNADygUa -EPDKjvbdyNrhXsJD -EOcLKvbdIsZBSlxM -EPCkKvbddndrkTsr -DnbjjvbdFyUuBEYC -EPCkKvbdJcKCpjCx -EObkKvbdbBWFGQPw -EOcLKvbdFjdrbhNV -EPDLKvbdrDdiQNvB -EObkKvbdkHgMGGOL -EPCkKvbdkySrSyHU -DncLKvbdaaWEfQQX -EObkKvbdehKvRmpg -DnbkKvbdmIdURVRa -DoDLKvbdvBEZSneI -DoCkKvbdNdcshhjd -DncLKvbdZyEKOCkr -DoCkKvbdVrNwbFMD -DnbkKvbdnCKXXoNu -EPDKjvbdSQTgKGDw -EObkKvbdaRfCgtFk -EObjjvbdkWXNcaww -EObkKvbdDihJuxKA -DncLKvbdnVVZkKSG -EPCkKvbdVBBqSpqy -DncLKvbdqGEFUWAh -DoCkKvbdsPvOjDWG -DncKjvbdySmiNRbH -DoDKjvbdraemLfjy -DoDLKvbdnPzZWKxb -DnbjjvbdRjxfVGkT -DoDKjvbdGLEsDHlu -DnbjjvbdRotHKFdX -DoCkKvbdRpUGiecw -DnbjjvbdZjTHogBf -EPDKjvbdcTCjtDia -EOcKjvbdrounibuf -EOcKjvbdVBCRSqRy -EPDKjvbdEvZPolie -DnbkKvbdzRPNJKXA -DncLKvbdBhjbKiGK -DnbkKvbdqrVKmkBN -DnbjjvbdBraDTewS -DnbkKvbdJcKDRJbx -DoCjjvbdbUbHYLUI -DoDKjvbdUyITykOn -DoCkKvbdYlSEUOMN -EPCkKvbdRpUHKGEX -EObkKvbdTAFJICPE -EPDKjvbdrpWPJcVf -DoCkKvbdZnnJFFZj -EPCkKvbdkVvmcaxX -EOcKjvbdyzdnRgiI -EObjjvbdqAiFAXIE -DncLKvbdWWiYWDeH -EPCjjvbdqlzKZLgi -EObjjvbdauCGwkUI -DoDLKvbdtTSSxydc -EObkKvbdbVCGxLTh -EObkKvbdkWWmdBxX -EObjjvbdRNXaxnUz -EOcKjvbdwXLaVaVu -DncKjvbdqTtGqrKt -DncKjvbdIjEAJpGd -EPDKjvbdHffyyXwg -EObkKvbdSCEFLiYk -DncKjvbdiVZeXRuC -DoDLKvbdWWhwudFH -EPDLKvbdrRuKmkAm -EObjjvbdxsNhlqag -EPDKjvbdcJMikFwY -DoDKjvbdpyPHfpdY -DncKjvbdwyhGGXdr -DoCkKvbdkVwODbXw -DncLKvbdJcJbpibx -EPCkKvbdsQWPJcVf -EOcKjvbdZRNEiMdq -EObkKvbdjvXOECXw -EObjjvbdZxcjODLr -DncKjvbdRWmdDMID -DncKjvbdjvWmcbYX -DoCjjvbdnBjXXoOV -DncKjvbdiBnbdwQq -EPDKjvbdDoDKjwCd -EPCkKvbdFxuVBEYC -DncKjvbdFVxopMie -EOcLKvbdKWUfEEfi -EPCkKvbdNrtVgEtp -DoDLKvbdfoazwDxI -DoDKjvbdqquKmkAm -EPDKjvbdhbPCeXRR -DncKjvbdZtIhyETO -EPCkKvbdQwNdCkhD -EPDKjvbdhzUfMROG -DnbjjvbdrpVoKCuf -EPDLKvbdtlYWaUAw -EOcLKvbddoErjstS -DnbkKvbdyzeORghh -EPDLKvbdZnmhdeZj -DoCjjvbdcIlikGXY -EOcLKvbdLAkHNBxR -DoCjjvbdtkwwBUAw -DoCjjvbdgGMZnHHA -DnbkKvbdUsmTfLuj -EOcLKvbdqZPHgQcx -EPDLKvbdLqvlytpz -DoDLKvbdqdFIomvB -EObjjvbdBhjbKhfK -EOcLKvbdrMyjYlIJ -DncKjvbdDncKkXCd -DnbkKvbdNQXpunHT -EPDKjvbdZjSgofbG -DnbjjvbdBiKbLIej -DoCjjvbdGAoQxizm -EOcLKvbdwtldqZLn -DoDLKvbdIrxaSmXl -DoCjjvbdNHDQMpUk -EOcLKvbdTkunaWOi -DncLKvbdNHCpMpVL -DoDKjvbdelfXHNKL -EObjjvbdcyxpYYqC -DoDLKvbdZGwEAOri -DoDLKvbdIxUCHkqQ -DoCjjvbdoznEKxPA -EOcKjvbdbLMGPNcA -EObjjvbdiiegilxS -DoDKjvbdZRNFImFR -DncLKvbdRbDeLhxk -EPCkKvbdqlzJxlHi -EOcLKvbdhkeDnUby -EPCjjvbdhaoDEwQq -EPCkKvbdFkFScHlu -EPCjjvbdJKEAKQGd -DoCkKvbdpxngfqDx -EObjjvbdUGznLwWF -EObjjvbdVZHsykPO -DncLKvbdYlRdUNlN -EPCkKvbdHDkWKBjK -DncLKvbdjKFhKMxS -DnbjjvbdnBjWxPOV -EObkKvbdtcCtvvOo -DnbjjvbdTpqPUthN -DncLKvbdMoxQvOGs -DnbjjvbdfNGXHMjL -EPDKjvbdhgJcZVjV -DoDLKvbdNGbolpVL -EPDKjvbdatbHYLUI -DncLKvbdczZPwxqC -DnbjjvbdZxcimblS -EPDLKvbdKaKgMbXq -EOcLKvbdtbcUwWOo -DnbkKvbdJutfEEfi -DoCjjvbdmIdURUqa -EPCjjvbddBrmSATm -EPCkKvbdXsLaNUPY -DnbkKvbdNPwpvOGs -EOcKjvbdIwsaglQp -DoCkKvbdlhdUQtrB -DoDLKvbdGdLWJaij -DoCjjvbdwXMAvAvV -DnbkKvbdbrbkTdJa -EPDKjvbdFVxpQNJe -DoCjjvbdHDkWJbKK -DnbkKvbdjvXODbYX -DoCjjvbdemFwGmJk -DoCjjvbdQdCaPpcr -EOcKjvbdqcdiQNvB -DncLKvbdbBWFFoow -EOcKjvbdKaKgMawq -EObkKvbdLBKgMawq -DncKjvbdcbSmSAUN -DoCjjvbdyOTHwsJD -EOcLKvbdOStVfeUp -EObkKvbdHffyyYXg -EPCjjvbdmuUykJrG -DoDLKvbdJYTbILpp -DncKjvbdnGdwlmgZ -EPDKjvbdZQldhldq -EObjjvbdUaBpsRSZ -EOcKjvbdrzLpSaIO -DnbjjvbdLGFgbAqV -EPDKjvbdXrlAmUOx -EPDLKvbdtSqryZeD -DoDKjvbdtlXwAtAw -DoDKjvbdaRebgsfL -EObjjvbdUWLpKUAq -EObjjvbdQvmccLgc -EOcLKvbdznopeDMY -EOcLKvbdIwsbHkpp -EPDLKvbdziuQPcsU -EPDLKvbdelevgMik -DoDKjvbdTAFIgbOd -DoDLKvbdbBWFGPow -DoDKjvbdYqNEiMeR -EOcLKvbdhficYuiu -EOcKjvbdyTOImRbH -DncKjvbdiLeDmtby -EPDLKvbdUsmTekvK -DoCkKvbdkCkkQftg -DoCkKvbdVTmUFlVj -DoCkKvbdTIyjRAAl -EOcKjvbdbUafxKtI -EOcKjvbdZsiIxdSn -DoDKjvbdSCEElIyL -DnbjjvbdBsAbsfXS -DoCkKvbdBcpAuimG -DoCkKvbdVwIwvEEg -DnbjjvbdajlFoNcA -EPCkKvbdtSrTYzFD -DnbkKvbdGFirNhsq -EOcKjvbdapHHELzd -DoDLKvbdiUyeXSUb -DnbjjvbdtAGqIABS -DnbkKvbdXsLaMsnx -DoCkKvbdeEnqawDK -EOcKjvbdDxXkstUM -DnbjjvbdcyxoxZQb -DoDLKvbdlrZVZrci -DoCkKvbdTAEiICPE -EOcLKvbdpyPHfpcx -EPDLKvbdVBCRTQqy -DnbjjvbdmJEUQtqa -DnbjjvbdkClKqHVH -EObkKvbdCJKajiGK -EObkKvbdeAURMxJf -EPDLKvbdcSbkUDjB -DncLKvbdsCFmLfjy -EPCkKvbdIwsahLqQ -DoCkKvbdrJAJeMne -DoDLKvbdIHGzYwxH -DoCjjvbdGckVjBjK -EObjjvbdegkVqmqH -DoDLKvbdLKaIWAKZ -EPDLKvbdaRfChUGL -DoDLKvbdyYJJaozL -DoCkKvbdrWpLbhyR -DoCkKvbdLGGIBaRV -DoDKjvbdKyRJrztf -DoCkKvbdjuvnEBxX -EObkKvbdNeEThhkE -EPCjjvbdQwNcbkhD -DoCkKvbdJqZePGOF -EObjjvbdNGbomQUk -EObkKvbdkxrqsZHU -EOcLKvbdrounjDVf -DoDLKvbdkClLRGtg -EOcLKvbdbKkfOnDA -EPCkKvbdRDbaPpcr -EPDLKvbdkHgLefNk -EOcLKvbdFVxpPmKF -EObkKvbdsrrSxzEc -DnbkKvbdFeirOIsq -DncLKvbdzitopDrt -DoCjjvbduWOXjQsA -EPCkKvbdyXhjCPyk -DoDKjvbdaaWEfPow -DncLKvbdvAcySneI -EObjjvbdADRwjZhp -EObkKvbdnPyxvLYb -DncKjvbdijGIJlwr -EPCjjvbdJcJbqJcY -DnbkKvbdkMbLydgP -DoCkKvbdRDbaQQcr -DoCjjvbdxsOIlrCH -DnbjjvbdKQydnfOF -EPDKjvbdcImKKfWx -DnbjjvbdcImKKewY -EObkKvbdqdFJPmua -EObjjvbdajkennDA -DnbjjvbdZyEKNcLr -DoCjjvbdKWVFdEgJ -EPDKjvbdWXIwuceH -DnbjjvbdqiAJdlne -EOcLKvbdkyTRryGt -EPCjjvbdpaJFAWgd -EPCjjvbdmJDsqVSB -EPCjjvbdREDAopdS -DoCjjvbdRpUHKFdX -DncKjvbdptUHSSKt -EPCjjvbdiCObdvpq -DncLKvbdNwnuzcmt -DncKjvbdqdFIpOWB -DoDKjvbdjggLefNk -EObkKvbdrNZiyLgi -EPCkKvbdaSFcITfL -DnbjjvbdGLFTDINV -EPCkKvbdiLeENuDZ -DncLKvbdZyEJmcLr -EObjjvbduDCuWvOo -DoDKjvbdNQXqWNgT -DncKjvbdVBCRTRRy -EPCjjvbdSQUGifEX -EOcLKvbdANIZSvyx -DoDKjvbdvBDyTPFI -DnbkKvbdEPCkLWbd -DoCkKvbdyYIjCPyk -DnbkKvbdelewGmKL -EPDLKvbdatbGxLUI -EPDLKvbdTvLojTaR -DoCjjvbdhtyeWrVC -DoDKjvbdzeZnzdzQ -DnbjjvbdyzdnRhJI -EPCjjvbduLxWaUBX -EOcLKvbdkyTRsYgU -DnbjjvbdCTBCsewS -EObjjvbdjAPgApHK -EPDLKvbdwkWdHzyf -EObjjvbdsPvOicWG -DoCkKvbdTulPisaR -DnbkKvbduCcUvuoP -EObkKvbdZRMdiMeR -DoCkKvbdSPtHJfDw -DncLKvbdKaLGlaxR -DnbkKvbdRpTgKGDw -DoCjjvbdWXJYWEEg -EObjjvbdWXJYWDdg -EOcKjvbdKCjCqKCx -DnbkKvbdakMGPNcA -DoDKjvbdwkXDgzzG -EObkKvbdNHDPlotk -DncLKvbdyzdmrIJI -EObkKvbdFkErbhMu -EPCkKvbdNeDsiIjd -DoDKjvbdIGfyyXxH -DoCjjvbdZyDinDLr -EPCjjvbdemFvfmJk -EObjjvbdJYTbILqQ -DnbjjvbdWXIwucdg -DoCjjvbdiHKCxvJu -EPDKjvbdfpBzwDxI -DoCjjvbdaNLCStlg -EPCkKvbdnVUykJqf -DoCjjvbdyYIjBozL -EPCjjvbdzjUpQDsU -DoDLKvbdZxcjOCkr -EPCkKvbdeFOrBvcK -EPDKjvbdKaKflaxR -EOcLKvbdfMevgMjL -EPDKjvbdGckWKCKK -DoCjjvbdKVuFdEgJ -EObjjvbdfMfWfmJk -DoDLKvbdMfbomQVL -EPDLKvbdRkYeuGjs -EOcLKvbdKfGHaaQu -EObkKvbdoznDjwoA -EOcKjvbdUMWPBVoJ -DoCkKvbdFjeSbgmV -EPCjjvbdrEFJQOWB -EOcLKvbdvAcyTOdh -DnbjjvbdWfYzUAOs -EObkKvbdTkuoBWPJ -DnbkKvbdFpASvgFy -DoCjjvbdczZQXyRC -DoCjjvbdRDcBQQdS -DoDKjvbdqYngfqDx -EObkKvbdWRmwbElD -EPCjjvbdFyVVBDwb -EObjjvbdBhjbKhej -DncLKvbdzaAPGgBl -EObkKvbdTppoVUgm -DoCjjvbdbrcLTcjB -EPCkKvbdGLFTCglu -DoDLKvbdDwxMUUUM -EPCjjvbdNQYQumgT -DncKjvbdmfeXmOGy -EPCjjvbdwtmFRYkn -DoCkKvbdsBfMlGjy -DncLKvbdRpUHKGDw -EObjjvbdjblLQfuH -EObjjvbdJYTbHlRQ -DoCkKvbdmttyjiqf -DoCkKvbdZQldiMdq -EPDKjvbdFejSNiUR -EOcLKvbdjgfkfFnL -DnbjjvbdMpYQvNgT -DnbkKvbdUyIUZjnn -DnbkKvbdJbjDRKDY -EPCjjvbdeEnrBvcK -EOcKjvbdyzdnSIIh -DoDKjvbdDoDKjwCd -DoDLKvbdCSaDUFwS -DoDLKvbdIrxaTMwl -DnbkKvbdRNXayNtz -DoCkKvbdxxJKBoyk -DncLKvbdnGdxNOGy -DnbjjvbdySmhlqbH -DoCkKvbdxwhjBoyk -EPCjjvbdZQleIleR -EPCjjvbdaRfChTek -EOcKjvbdYTMBNUPY -DoCjjvbdegkWSNpg -EObkKvbdziuQPdTU -EOcKjvbdnCKXYOmu -DoCkKvbdZnmhddzK -EObjjvbdzaAPGgBl -DoDLKvbdePFSjtTr -EPCkKvbdNrtWGeVQ -EPCjjvbdelfWfmKL -DoDKjvbdKxpjSztf -EPDKjvbdxmsIXsIc -EPCjjvbddZyPxYqC -DoDKjvbdvOszqLOt -DncKjvbdatbGxLTh -EObjjvbdzoQQdbkx -DoCjjvbdZRMeImEq -EOcKjvbdqTtGqqjt -EOcKjvbdqAheAWgd -DnbjjvbdySmhmRag -DncKjvbdjKFhJlwr -EPDKjvbdqFceUWBI -DoDKjvbdsBemLgLZ -EPDLKvbdKQzEoFnF -EOcKjvbdFjdsCgmV -EObjjvbdpfEEtWBI -EPDKjvbdZxcjOClS -EPDKjvbdnBivwoOV -EPCjjvbdrylQTAhO -EPDKjvbdKaLGmBxR -EPDKjvbdHgGzYwxH -EObjjvbdkHflGFmk -DnbjjvbdqGDeUVaI -EPDKjvbdMgDQNQUk -DncLKvbdSKyGVHKs -EOcKjvbdqFdEsvAh -EOcKjvbdYkrETnLm -DnbkKvbdqBIeAXHd -DncLKvbdZQldhmFR -DncLKvbdFjeSbhMu -EPCkKvbddePRavcK -EPCkKvbdssRsYzEc -EPCkKvbdRadFLhxk -DnbkKvbdVvhxWEEg -EOcLKvbdIryArmYM -EPCkKvbdKfGHbAqV -DncKjvbdEKIJuxKA -EPDKjvbdIwsbIMRQ -EObkKvbdzaAOfgBl -DncLKvbdeUAUASlv -DnbjjvbdlqxuZsDi -DnbjjvbdUWMQKTaR -EOcLKvbdNGbpNPtk -EPDKjvbdWSOYCEkc -DoCkKvbdjggMGGOL -DoCjjvbdSQUHJecw -DncLKvbdZyDjODMS -EObjjvbdfpBzvcxI -EOcLKvbdTlVoAvPJ -DnbjjvbdVviYWEFH -EPCkKvbdZnmiFFZj -EObjjvbdNGbpNQUk -DoDLKvbdrbGMkfjy -DoDLKvbdxnShYSiD -EObkKvbdJYTahMRQ -DoDLKvbdoAKzshEO -DoCkKvbdZxcjOCkr -EPDLKvbdRWmdCkgc -EPCkKvbdGFiqnJUR -DoDKjvbdRzJgsDWA -DncLKvbdptTfqqjt -EPDKjvbdmIctRUqa -EObkKvbdnBiwXoOV -DnbjjvbdfMevfljL -EObkKvbdBraDUGWr -DncKjvbdUxhTzKnn -DoCjjvbdmfdxMmfy -DnbjjvbdhuZeWrVC -DnbkKvbdLiCLpxAS -DnbjjvbdKfFgbApu -DnbjjvbdziuPpETU -DoCjjvbdwuNEqZLn -EPCkKvbdEXwksssl -EPCjjvbdhgKCxujV -DoDKjvbdhlEdOVDZ -DncKjvbdLAjgMbXq -DncKjvbdOFEThhkE -DoCkKvbdANHxrvzY -EPCjjvbdZtIiZDrn -DoCjjvbdYpldhmEq -DncLKvbdqwPlDIyR -DncLKvbdUtNUFlWK -EObkKvbdkWXODbYX -DnbjjvbdRzJhSbvA -DoCkKvbdEJgjVxKA -DncKjvbdxnSgxShc -EObjjvbdbUbHYKsh -DncLKvbdZoNiFEzK -EPDKjvbdbiMjKevx -DnbkKvbdIwsbHlRQ -EObjjvbdhWyAzzAJ -EObkKvbdqvpLcIyR -EObjjvbdGGKSOIsq -EObkKvbdTpqPUthN -DncKjvbduaEZTOdh -EObkKvbdJJdAJofd -DoCkKvbdEKIJuwjA -DncLKvbdDnbjkXDE -DnbjjvbdhbObdwQq -EObjjvbdunszpkPU -EPCjjvbdwNWANDdm -EPDLKvbdozmcjxPA -EObjjvbdZnmiFFZj -DnbjjvbduDDUwVno -EOcKjvbdZjShPfbG -DncLKvbdADSXiyhp -DoCjjvbduCcVXWPP -DnbkKvbdffLzOHHA -DncLKvbdBdPaWJlf -EPDLKvbdJvVGEFGi -EPCkKvbdvwMBWBWV -EObjjvbdijGHjMxS -EPCkKvbdaNLCTVNH -EPCjjvbdbAudeopX -DoDKjvbdozmcjwoA -EPCjjvbdYlRctOMN -DoCjjvbdDoDLKvcE -EObkKvbdVqmwaeMD -DnbjjvbdqvolChyR -EPCkKvbdRkZGVGjs -DoDKjvbdjvXOEBxX -DoCjjvbdIHHZyXwg -DnbkKvbdLBKgNCYR -EPDKjvbdyNsHxShc -EOcKjvbdyzdmqhJI -DnbjjvbdqFcdtVaI -EObjjvbdrJAKElne -DncKjvbdTvLpJtAq -EObkKvbdDoDKjvbd -EPCjjvbdYlRcsnLm -DoDKjvbdegkVqmqH -EPDLKvbdZHXEAPSi -DoDKjvbdakLennDA -DncLKvbdrDdiPmua -DoCjjvbdhbPDEwRR -EPDLKvbdtcDUvuno -DnbjjvbdEKHjVxKA -EOcLKvbdYqMdhmFR -EPDLKvbdmttzKiqf -EPDLKvbdTkvPAuoJ -DncLKvbdVAbRTQqy -DncLKvbdLBKflbYR -DoCjjvbdZyDimcMS -EOcKjvbdFpATXHFy -EObkKvbdnCJwYOmu -EPCkKvbdVZHszLPO -EPCkKvbdCSaDTfXS -DncKjvbdNVSqjmAX -EPCkKvbdFjdrbhMu -EPCkKvbdbsCkUDjB -EObjjvbdMowpumfs -DoDLKvbdRotHJecw -DnbjjvbdTfzmkwWF -EObjjvbdBcpAvKNG -DoDLKvbdWHxWXfxz -EPCjjvbdqUUGrSKt -DncLKvbdliDsqVSB -DnbkKvbdBdQAujMf -DnbkKvbdWXIxVcdg -DoCkKvbddePSCXCj -DnbjjvbdZirhPfbG -DnbjjvbdyXiKBozL -DnbjjvbdznpREcMY -DncKjvbdJcKCqKCx -EPCkKvbdJbibpjDY -EPDLKvbdkClLRHVH -EPDKjvbdTvLoisaR -EOcKjvbdZGwEAPSi -EPCkKvbdKRZdnenF -DncKjvbdfMfXGmJk -EPCkKvbdhfibyWJu -EOcKjvbdMIbLqYAS -EPDLKvbdbUbHXjtI -EObkKvbdCSaDUFwS -EPDLKvbdGGJqnJUR -EOcLKvbdDoDKjvbd -DnbjjvbdFkFTDIMu -DnbjjvbdgFlZnGgA -DoCkKvbdakLfPODA -EPDLKvbdDwwlTstM -DoCjjvbdMJBkqYAS -DnbjjvbdiGjCxujV -EPDLKvbdVwIwuceH -EPDLKvbdZyEKOCkr -EPDKjvbddoFTLTtS -DoCkKvbdXrlAlsnx -EOcLKvbdZoOIeEzK -DnbjjvbdaMjbTVMg -EPDKjvbdeOeTKssr -DncKjvbdSKxetfjs -DoCjjvbdpxnhGpcx -EPDLKvbdmtuZkJrG -DoCjjvbdYkqdTmlN -EOcLKvbdJuuGEEfi -DoCjjvbdhzUfMROG -DncLKvbdddnrBvbj -EOcLKvbdWSNwbFMD -DoDLKvbdtSrTYydc -EPCjjvbdRjxetgKs -DncKjvbdFxttaEYC -EPDLKvbdiBncFWpq -DnbjjvbdyTOImSCH -DoDKjvbdcyyQXyRC -EOcLKvbdZLrEUOLm -DoCjjvbdXmqAYVWU -EPCjjvbdUsltFkvK -DncKjvbdLqvmZuQz -DnbjjvbdZjTIQGaf -DoDKjvbdzoPpeCkx -EPDKjvbdGGKSNhsq -DncKjvbdtSrSxzFD -EPCkKvbdyOTHxShc -DnbkKvbdehKvSORH -DoDLKvbdWIXvYHYz -EObkKvbdDoCkLXCd -DoDLKvbdLBKflaxR -EPDLKvbdKQzFOenF -EObjjvbdjFLHVPAO -EObkKvbdFeiqmhsq -DoDKjvbdRotHKFdX -DnbkKvbddZxpYZQb -DncKjvbdqqtkNkBN -EPDKjvbdZjShPgBf -DoCkKvbdNHCpMouL -EObjjvbdxZgefYFS -DoCjjvbdNrsvHEuQ -DoCjjvbdwzHeewdr -EObjjvbdvPTzpkPU -EPDKjvbdrounibvG -DnbkKvbdpstGqqjt -EPDLKvbdeFOrCXDK -EOcLKvbdGBPRYizm -DoDLKvbdNwnuzdOU -DnbkKvbdRMwaxnUz -EOcLKvbdDihKWXjA -EObkKvbdFeirOJTq -DoDLKvbdSKxeuGjs -EOcLKvbddndsKssr -DnbjjvbdiCPDEvpq -EOcKjvbdMoxQumfs -DnbkKvbdfNGWfljL -DnbkKvbdIHGzZXwg -EObjjvbdTlWPAvOi -DoDLKvbdnPyyVkZC -EOcKjvbdkWWmdBxX -EObkKvbdEJgjWXjA -DnbjjvbdkMalZdgP -DnbkKvbdsCGNLfjy -DnbjjvbdYqMeIleR -DncLKvbdMgComPtk -DoCkKvbdMfbolouL -DncKjvbderAvzlDP -DnbjjvbdqwQLcIyR -EObjjvbdcImJkFwY -EPCjjvbdYzberKVy -DoCjjvbdEzsqElCi -EObkKvbdRotGiecw -EPCkKvbdGLErcINV -DoCkKvbdYpmEiMdq -DoDKjvbdJXsaglRQ -DnbkKvbdFVxpPmJe -DnbkKvbdxUmEpyLn -EPCjjvbdLrXMytpz -DnbkKvbdhtzEvqtb -EPDKjvbdDxYLstTl -EPCkKvbdiBoDFXQq -EPCkKvbdZoOJEeZj -DoCjjvbduDCuWuoP -EObkKvbdjcLkQfuH -DoCkKvbdcImKLGWx -EPDLKvbdEYXlUUTl -EOcLKvbdZLqdTnMN -EOcKjvbdmozYujyC -DncLKvbdJpzEnfOF -EOcLKvbdiCPCdvpq -DncKjvbdADRxKZhp -DoDLKvbdmJDsqVSB -EObkKvbdnBiwYPOV -EObkKvbdqwQMDIxq -DncKjvbdeFOqbWbj -EPDKjvbdmfeYMmfy -DnbkKvbdGLFSbhNV -DoDLKvbdwkXDgzzG -EObkKvbdbAvFFpQX -EPDLKvbdyXhjBoyk -DoCjjvbdMfbpMouL -DoCjjvbdREDApRES -DncLKvbdmajWwnmu -DoDLKvbdIidAJofd -DoCjjvbdSZihTCvA -DoCkKvbduLwvaUBX -EPCkKvbdiHJbyVjV -EObkKvbdGYtuAdXb -DoDLKvbdCTBCtFwS -EOcLKvbdhlFENtby -DoCkKvbdySnIlrBg -EPDLKvbdwuNFQyMO -DncKjvbdlqxtzTDi -DoDKjvbdWWhxWEFH -DoCkKvbdiHJcZVjV -EPDKjvbdCflGHAzc -DncLKvbdzROmJKXA -EPDLKvbdCJLBjhej -EOcKjvbdVrNwbEkc -DnbkKvbdUtNUFlWK -DoDKjvbdLBKflbYR -EPCjjvbdauBfwkTh -EPCkKvbdrXQMDJZR -DnbjjvbdnVUyjjSG -DncKjvbdiMEdOUby -DoDKjvbdqiAKFNPF -EOcLKvbdQdDBQQcr -DoDKjvbdpxnggQdY -DncKjvbdtSrTYydc -DnbjjvbdwzHefXeS -DoCjjvbdRosfjGEX -EPCkKvbdnPyxujyC -EObjjvbdZyEJnCkr -DnbkKvbdhytelRNf -EPDLKvbdeYZstSFz -EObjjvbdTfzmlXVe -EOcKjvbdbKkenmcA -DncLKvbdvwMAuaVu -EObkKvbdwMvAMdEm -EOcLKvbdkHflFfNk -EPCjjvbdzoPpeDMY -DoCjjvbdiLeDmuCy -EOcKjvbdRpUGjGDw -DnbkKvbdUslsekuj -EPCjjvbdmJEURVRa -DncLKvbdZjSgofaf -EOcLKvbdaMjasUlg -DoCjjvbdREDBPpdS -DnbjjvbdIwsaglQp -DoCkKvbdkNCLzFHP -DoDLKvbdaRfChUFk -EPCjjvbdrRtjnKaN -EPCkKvbduoTzpkOt -EOcKjvbdnHFYMmfy -EOcKjvbdHDkVjBjK -EObjjvbdEXxMTssl -DnbjjvbdNPxRWOHT -EObjjvbdiZtfLpmf -EObjjvbdTvLojTaR -DoDKjvbdKkBIWAKZ -DoDLKvbduCbtwVno -DncLKvbdmttzKjSG -DncLKvbdbBVdfQQX -EObkKvbdyXiKBpZk -DncLKvbdzGxlAMdw -DoCkKvbdMpXpvNfs -DoCkKvbdKQydoGOF -EPDLKvbdTfzmlXVe -EPDKjvbdQccBPqES -EPCjjvbdZtJIyESn -DoCjjvbdVrOXbElD -DnbjjvbdbLMGOmcA -DnbkKvbdnPzZWKyC -EPDLKvbdmajWwoOV -EObjjvbdQwOEDMHc -EPCkKvbdTvMQKUBR -DoCjjvbdOTUVgEtp -DoCkKvbdIHHZyXxH -EPDLKvbdDoDLKwDE -EObjjvbdiZtfMQmf -EObjjvbdijGHimXr -DoDKjvbdVrNxCElD -EPDLKvbdJutedFGi -DnbjjvbdmSZVZsEJ -DncKjvbdqlzKYlIJ -EOcKjvbdfelZnGgA -EOcKjvbdYlRctOLm -DoDKjvbdPxmAHSrK -EPCjjvbdWWiYWEEg -DoCjjvbdbAvFFoow -EOcKjvbdFjeSbglu -EPDLKvbdlqyVZsEJ -EOcKjvbdddoRbXDK -EPCkKvbdaRecHtFk -DncLKvbdSKyGUgKs -DoDLKvbdcyyPwyQb -DoDLKvbdnVUzKjRf -EObjjvbdYkqdUOLm -EObkKvbdRbEEkhyL -DncKjvbdtAHQhAAr -DnbkKvbdVqmwbFMD -EOcLKvbdznoqFDLx -EOcLKvbdEXxLtTsl -DnbkKvbdtumwipsA -EObjjvbdmJEUQtqa -DncKjvbdxwhjCPyk -DnbkKvbdyfyMANFX -DncLKvbdiVZeXRtb -EObkKvbddtAUATMv -EOcKjvbdxnSgwriD -EObjjvbdlrZVZrdJ -EPCkKvbdsBelkfkZ -DoDKjvbdFVyPomJe -EPCkKvbdQmYBxnUz -EOcKjvbdSBdFLhyL -DncLKvbdmJETpuSB -DoDLKvbdRECaPpcr -DncLKvbdIxUBglRQ -DoCjjvbdpssfrSLU -DnbkKvbdSQUHJedX -EObjjvbdkySrTZHU -EObkKvbdZtIiZETO -DoCjjvbdtumwipsA -DoCjjvbddBrlrAUN -EPCjjvbdKCjDQibx -DoCjjvbdQccAopdS -DoDLKvbdSBceLiYk -EPDKjvbdREDAoqDr -EOcKjvbdZQleJMeR -DoCkKvbdEARiMywX -EPDKjvbdkDLkQgUg -DncLKvbdFjdsDIMu -EPCjjvbdlrYtysDi -EPCkKvbdezuxeIsw -EObkKvbdyNsHxTJD -DnbkKvbdemGWgMik -DoDLKvbdBhkCKhej -EOcLKvbdjvWmcaww -EPDLKvbdqTsgRrLU -EObkKvbdZyDimcLr -EPCjjvbdlrYtzTEJ -DoCkKvbdHgGyyYXg -DoCkKvbdZoNhddyj -EPDKjvbdhtzFWquC -EPCkKvbdDoCkKwDE -DoDLKvbdsrqsZZeD -EPCkKvbdiHJbxuiu -DoCjjvbdhlFEOUcZ -EPDKjvbdDigiuwjA -EPDKjvbdQdDBPqES -DoCjjvbdcTCjsdKB -DncLKvbdUsmUFkuj -EPDLKvbdnHEwlnGy -EOcLKvbdxVNEqYkn -DoDKjvbdEuxopNJe -EObkKvbdkClLQfuH -EPCjjvbdcTDLUEKB -EOcKjvbdEPDKkXDE -EPCjjvbdXsLaNUOx -DoDKjvbdFWZQQNKF -EPDLKvbdUtMtFlVj -EOcKjvbdzaAPGfal -DnbkKvbdHlBznXRL -DoDLKvbdTlVoBWPJ -EPCkKvbdDoCjkXDE -EOcKjvbdrzMQTAhO -EOcLKvbdozmdLXoA -DoDLKvbdzQnmIjXA -DoCkKvbdmgExMmgZ -EPCkKvbdzjUoocrt -EOcLKvbdwyhGFweS -EOcLKvbdWWhxVceH -DncLKvbdqqtkOKaN -DoCkKvbdOTTvHEuQ -DoDLKvbdjJehKMwr -DoCjjvbduDCtvuoP -DnbjjvbdqdEiPmvB -DnbjjvbdhtzEwRuC -DnbkKvbdRkYetfkT -DoDKjvbdCDpBVjNG -DoCkKvbdcSbjscjB -EPDLKvbdYpldiMdq -DoCjjvbdaaWEfPow -EOcKjvbdqZPHgQdY -DoCkKvbdeOdrjtUS -DoDLKvbdFaPRZJzm -DnbjjvbdRECaPqES -DncKjvbdaMjaruMg -EObjjvbduVnYJpsA -DnbkKvbdqTsfrSLU -DncKjvbdYqMeJMdq -EOcKjvbdvvlBWAuu -DnbjjvbdUxgtZkOn -EOcKjvbdOSsufduQ -EOcLKvbdtumxJqTA -DncKjvbdIryAsNXl -DoDKjvbdMuTRkNAX -DoDLKvbdxnSgwrhc -EOcKjvbdiHKCxujV -EObkKvbdeKJrVtzn -EPDLKvbdjhHMGGNk -EOcLKvbdkVwNdBww -EOcLKvbdygZMANEw -EPDLKvbdRXODcLhD -EPCjjvbdSPsfjFcw -DoDKjvbdYpleIldq -DoDLKvbdOEcsiIjd -DnbjjvbdddoRavbj -DncLKvbdHDkWKBjK -DoCjjvbdxxJKBoyk -EPDKjvbdYkqdUNkm -DoDLKvbdDnbjjvcE -DoCkKvbdVvhxVceH -EPDLKvbdWRnXbFMD -EObkKvbdliEUQtqa -EPCkKvbdNQXqVmfs -EOcLKvbdIGfyyYYH -DncKjvbdxUldpxlO -DoDKjvbdznopdcLx -DncKjvbdHDkVibKK -EPDLKvbdjlbLydgP -DoDKjvbdYTMAltOx -DoDKjvbdcSbkUEKB -EPCjjvbdzoQREblY -EOcKjvbdZxcinDMS -DoDKjvbdZyDjODMS -DoCjjvbdxZgfFwdr -EPDLKvbdaMkBsVMg -EPCkKvbduDDUvuno -DncKjvbdsCFmLgKy -DoDLKvbddeOrCWcK -DncLKvbdNddThhjd -EOcKjvbdBvzcheQW -EPDLKvbdeEnqbXCj -DoCjjvbdNrtVfduQ -EOcKjvbdZQmEiNFR -EPCkKvbdGFjSNiTq -EPDKjvbdZxcinCkr -DoCjjvbdkNBlZdgP -DoCkKvbdEYXkstTl -DncLKvbdYpmEhmEq -EOcLKvbdePFSkTsr -DoCjjvbdemFvfmKL -DnbkKvbdemFwGljL -EPDLKvbdmbJvxOnV -EPCjjvbdtbcVXVoP -EOcKjvbdFkErcHmV -DoDKjvbdVUMtFlWK -EOcLKvbdkMakydfo -DnbjjvbdIMBznWqL -EObkKvbdptUHRrLU -DnbkKvbdjJfHilwr -EPCjjvbdGYuUaDxC -EObjjvbdmtuZjjRf -DncLKvbdkCkkQfuH -DoDLKvbdtlXwBUBX -DncLKvbdCWzchePv -EObkKvbdrEEiPmua -EOcLKvbdYqNFIldq -DoDLKvbdfILWRnQg -DoDLKvbdqUUGrRkU -DoCjjvbdfMfWflik -EOcLKvbdOTTugEuQ -DncLKvbdjvWnDaww -EOcLKvbdsPuoKDVf -EPDLKvbdZirhPfaf -DoCjjvbdDwxLsstM -DnbjjvbdfHkWRmpg -DncLKvbdrpWOibuf -EPDLKvbdZtIhyESn -DncLKvbdwygfGYEr -EPCjjvbdeEoSCWcK -EPCjjvbdjuvmdBww -EObjjvbdqUTfqqjt -EOcLKvbdZjSgogBf -DoDKjvbdYqMdiMeR -DoCjjvbdKefICApu -DoDLKvbdMfcQNQVL -EPCkKvbdjggMGGNk -EObkKvbdCDoaVjMf -EObkKvbdWWiXuceH -EOcLKvbdURROuVHm -DnbjjvbdpssfrSLU -DncKjvbdgFkzNgHA -DnbjjvbdaSFbgtFk -DncLKvbdIxTahMQp -EPDLKvbdKWVFceGi -DncKjvbdFVyPomKF -DoDKjvbdZirgpHBf -EObjjvbdVqmwadkc -EPCkKvbdieLHVPAO -DncKjvbdZLqdUOMN -DoDKjvbdWWiYWDeH -EObkKvbdQwNdClID -DnbjjvbdMoxRVnGs -DncLKvbdrDdiPmvB -DnbjjvbdZQleJNFR -EOcLKvbdrDdhpOVa -EPDLKvbdYqNFImFR -DoDKjvbdEYXlTtUM -DoCjjvbdhuZeWqtb -EPDKjvbdMfcPlpVL -EOcKjvbdNQYQvNfs -DoDKjvbdiUzFXSVC -DoCkKvbdmRxtzSci -DnbjjvbdbiMikGXY -DoCjjvbdQdDBQQdS -EObjjvbdqZPIGqDx -DoCkKvbdkWWmdBxX -DoDKjvbdKxpirzuG -DoCjjvbdlBNPNALA -DoCjjvbdhzVGMROG -DoCjjvbdzoQREcMY -EPDKjvbdlAlnmALA -EPDLKvbdwuMeRZLn -EOcLKvbdYqMdiNFR -EObkKvbdOTTugEuQ -EOcKjvbdYTMAmUOx -DnbjjvbdRDcBQRES -DoDLKvbdidkHVPAO -EPCkKvbdSKyFtfjs -DoCjjvbdhytelQmf -DncLKvbdEztRElCi -EPDLKvbdRWnEDLgc -DoDKjvbdwuNFQyLn -EObkKvbdGLFTDHmV -DnbkKvbdShyiqABM -EObkKvbdUaCQsRSZ -EOcKjvbdjuwNcbXw -DnbkKvbdmfeXlnHZ -DncKjvbdsPuoKDVf -EOcKjvbdNGbomPtk -DoDKjvbdvPTzpkOt -EPDKjvbdJqZdneme -DncKjvbdqTtGqqkU -DnbkKvbdjggLeemk -DoCjjvbdVZIUZkOn -EPCkKvbdzjVPodTU -DncKjvbdnBjXYOnV -DoDKjvbdHgGzYxYH -EPCkKvbdSZigsCvA -EPCjjvbdtbbtvuno -DoDKjvbdPIAXyAZB -EObjjvbdRNXaxmtz -DoCkKvbdUyITykPO -EPCkKvbdssRryZeD -EObkKvbdJuuGEFGi -DoDLKvbdxZgfGXeS -EObjjvbduoTzqLOt -DoDKjvbdbrbkTcjB -DncLKvbdxxIiaoyk -DoCjjvbdFxtuBDxC -EPDLKvbdzaAPGgBl -EPDLKvbdpxnhGqDx -EOcKjvbdtSqsZZeD -EOcLKvbdMowpvOGs -EObkKvbdVBCRSpqy -DoCkKvbdZRNEiMeR -EPCjjvbdczYowyQb -DncKjvbdjgfkfGNk -DnbkKvbdssSTYzFD -EOcLKvbdVhYWYGxz -DncKjvbdKDJcQibx -DncKjvbdZHWdAPTJ -EPCkKvbdFjdsChNV -DoDLKvbdJcJcRJcY -EPCjjvbdRjyGVHLT -DnbkKvbdBcpBWKMf -DoCjjvbdxUmEpyMO -EPDKjvbdZoNiFEzK -DoCjjvbdPIAYZAZB -EOcLKvbdFejSOIsq -DoDKjvbdjggMGFmk -EObkKvbdWRnXadlD -EObkKvbdnGdxMmfy -DoDLKvbdLBKgNBxR -DoCjjvbdaSGChTek -EPCkKvbdSCEElIxk -EObjjvbdIxTbHlQp -EPCkKvbdOEcshhkE -EOcLKvbdbsCjsdKB -DncLKvbdCSaDUGXS -EPCjjvbdRzJgsDWA -EPDLKvbduCbuXVno -EOcLKvbdGdLViajK -DncKjvbdCWzdJEpW -DncKjvbdjuwODbXw -DncLKvbdqUTfqqjt -EOcKjvbdxUmFRYkn -DoCjjvbdVAaqSqRy -EPDLKvbdaMkBsUlg -EOcKjvbdGLFTCgmV -EPCkKvbdZeYGzgiC -DoCjjvbdwXLaWBVu -DoCjjvbdelevgMik -EPDKjvbdkHgMGGOL -DoCjjvbdcJMjKewY -EOcLKvbdwzHfGYEr -DncLKvbdlZTRryGt -EOcLKvbdfVzwoizs -EPDKjvbdhzUelRNf -EPCkKvbdiHKCxvKV -EOcKjvbdGFjRmhtR -EPDLKvbdGLEsChNV -DoDKjvbdYORAXuWU -DnbjjvbdpstHSSKt -EObkKvbdegkVqmpg -EPDLKvbdhyuGMQmf -EObkKvbdliDtQtqa -DoCkKvbdfNGXGlik -DoCkKvbdHfgZyXwg -DoCjjvbddndsKssr -EPCjjvbdZMSDsnLm -EObkKvbdEXxMTstM -EPDKjvbdJvUecdfi -DnbkKvbdVUMsekuj -EPCjjvbdPyNAGsSK -DoCjjvbdMSWmZuQz -EObkKvbdBcpBVjNG -DnbjjvbdezuxdiUX -EPCjjvbdBdQAvJlf -DncKjvbdOTUWHFVQ -DoDKjvbdaSGDIUFk -EOcKjvbdUGzmlWvF -EOcLKvbdjlakydfo -DoCkKvbdWSOXaeLc -DoDKjvbdznpRFDLx -DoCkKvbdwtldpxlO -DoDLKvbdGdLVjBjK -EObjjvbdmttykKSG -DoDKjvbdZjShQGaf -DoDKjvbdrDdhomvB -EPDLKvbdiUyeXSVC -DncKjvbdIsYaSmXl -DnbjjvbdVhXvYHYz -EPDKjvbdwzHfGXdr -EOcKjvbdxsOJMqbH -DoCjjvbdehKuqmqH -EPCjjvbdZdxGzhJC -EOcKjvbdsCGMlHLZ -DoCjjvbdOEcshhkE -DoCjjvbdEzsqElDJ -DncLKvbdURRPVVIN -EPCkKvbdZoOJFEzK -DnbjjvbdBiKajhfK -EOcLKvbdbUafwkTh -EOcLKvbdVZHszKoO -DnbkKvbdGKdsDIMu -DnbkKvbddoFSkUUS -DnbjjvbdPxmAGrqj -EPCjjvbdKNADzHVB -EPCjjvbdcyxpXxqC -DnbkKvbdLBLGmBxR -EPDKjvbdFWYopNJe -EPCkKvbdcJNKKewY -DoCjjvbdGLErcHmV -EPCjjvbdWXIxWDdg -DnbkKvbdQvmcbkhD -EOcLKvbdbVCGwjtI -DoCjjvbdmgFYMmfy -EPDLKvbdQdDApRES -DnbkKvbdWWhwvEFH -DnbjjvbdxZhFexFS -EPCkKvbdCIjakJGK -EPCkKvbdKQyeOfOF -DncKjvbdEObjkXDE -DnbjjvbdNGcPlotk -DoCjjvbdVUMtGMVj -EPDLKvbdelfWgNKL -DnbkKvbdqwPlDJZR -DncLKvbdbiMikFwY -EObkKvbdkNBkzEgP -DoCkKvbdmuUyjiqf -DncKjvbddneSjtTr -EPCkKvbdRkZFtgLT -EObkKvbdRjyGUgLT -EPCkKvbdKaKgMaxR -DnbkKvbdZMRdTnMN -EPCkKvbdqZOhGpcx -EPCkKvbdxwhjBozL -DncKjvbdGckViajK -EPCkKvbdiifHilxS -EOcLKvbdqUUGrRjt -EPCjjvbdbhljLGWx -DnbkKvbdhgKCxujV -DoDLKvbdJSyAsNXl -DoDLKvbdjgflFenL -EPCkKvbdMJBlQxAS -DncLKvbdUMVoAvPJ -DoCkKvbdkCkjpgVH -EPDKjvbdqGEEsvAh -EObkKvbdmRxuZrci -EObjjvbdNdctIhjd -EPCkKvbdCSaDTevr -EPCjjvbdRDcAopcr -EObkKvbdwtmEpyMO -EOcKjvbdqZPHfqDx -EOcLKvbdaNKbStmH -EOcLKvbdaSFcHsfL -DnbkKvbdRosgJecw -EObkKvbdkySrSyGt -EOcLKvbdwuMdqYkn -EPCjjvbdrDdhonWB -EPCkKvbdiBoDEwRR -EPCkKvbdEztQdlCi -EObkKvbdFyUuBEXb -EPDKjvbdOAIsUJrA -EPDKjvbdKCicRKCx -EObjjvbdSZihSbvA -DncLKvbdvAdYsPEh -DncKjvbdySnImSCH -EObkKvbdiVZeXRtb -EOcKjvbdsCFllHLZ -EPDKjvbdZeXfzgiC -DnbjjvbdMpXpvNgT -DoDLKvbdsCFllHKy -DoCkKvbdqYoHfpdY -DnbjjvbdRzKHrbvA -EOcKjvbdNHComPtk -EOcLKvbdCJLBjiGK -EPDLKvbdsZlPsAhO -DnbkKvbdemFvgMik -DoCjjvbdFyUuBDwb -DnbjjvbdrafMlGkZ -DncKjvbddZyPxYpb -EObjjvbdxZhGFwdr -EPCkKvbdEXwlTssl -DnbkKvbdANIYrvyx -EObjjvbddePRawCj -EPDKjvbdyNsIXrhc -EPCkKvbdhkeEOVDZ -DoDLKvbdAMgxrwZx -EPDLKvbdsQWPJbvG -DoCkKvbdkVvmcbXw -EPDKjvbdJYTbIMQp -DncLKvbdBsAcTewS -DncLKvbdxrnJNRag -EOcLKvbdmSYtzSdJ -EObkKvbdqdFJQNua -DoCjjvbdZyEKOCkr -DoCkKvbdZLrEUOLm -EPCkKvbdRNXaxnUz -EPDLKvbdnUuZjjRf -EObkKvbdmbKXYOmu -DnbkKvbdlZTSTYgU -EPDKjvbdGYuUaDxC -DncLKvbdFyVVAcxC -DoDKjvbdEvZPpMjF -EPDLKvbdSwjlNzjx -EPCjjvbdbKkeoNcA -DoCkKvbdMfcQMotk -DnbkKvbdyTNiNRbH -DncLKvbdFWYpQMjF -EPCkKvbdEvYopMjF -DncKjvbdeKJrWUzn -EOcKjvbdpssfrSLU -EObjjvbdKCjDRJbx -DnbkKvbdeUAUATMv -EPDLKvbdjKGIJlxS -DnbkKvbdpssfqrLU -EPDKjvbdqZPHgQdY -EPDLKvbdeAURNXif -DoCjjvbdypoMhiwA -EPDLKvbdGYtuAdXb -EObkKvbdRaceLiYk -DoCjjvbdXsMBNTnx -EOcLKvbdKCjCqKCx -DoCjjvbdYSlAmUPY -EPDLKvbdpstGrSKt -EPDKjvbdhtyeXRuC -EObjjvbdtlYXBUBX -EObjjvbdRMxByNtz -EObjjvbdhanbeWqR -EOcKjvbdpyPIHQcx -EPDLKvbdrRtjnLBN -DoDKjvbdNQYQvNgT -DnbjjvbdbsDKsdJa -DnbjjvbdDxYMTssl -EPDLKvbdnCKWxOmu -DncKjvbdILazmwQk -DoDKjvbdhgJcYuiu -DoCjjvbdlYrrSyHU -EOcKjvbdVUNUFkvK -EObjjvbdRyjHrbvA -DoDLKvbdDnbkKvbd -EOcKjvbdaNKbStmH -DnbkKvbdjblLRGtg -DncKjvbdxUleQyLn -EPDKjvbdLGFhBaQu -EObkKvbdqmZiyLgi -DoCjjvbdJuuGEFGi -EPDKjvbdqmZixlIJ -DoCjjvbdXnRAYVVt -EOcLKvbdWIYVxGxz -EPCkKvbdxZgfGYEr -EPDKjvbdfNGWfmKL -EPDKjvbdbrbjscjB -DoDKjvbdsPunjCvG -DoDKjvbdziuQQDsU -DoDLKvbdbhlijfWx -EPCkKvbdhgKCyWKV -EPDLKvbdGLEsCgmV -EOcKjvbdmIcspuSB -EPDKjvbdIwsbILqQ -DoDLKvbdpedEsvBI -DncLKvbdsPunjDVf -DncLKvbdIxTbHkqQ -DncLKvbdcSbkTdJa -DncKjvbdUWLpJsaR -DnbkKvbdsQVnjCvG -EPDKjvbdyXiJapZk -EPCkKvbdrzLosAgn -DncLKvbdNsTugEuQ -DoDLKvbdrykoraHn -EObjjvbduaDySoFI -DncKjvbdZHWdAOri -EPCjjvbdlqxtysEJ -DnbkKvbdOSsvHEtp -DoDKjvbdRotGjGDw -DoDKjvbdYfvdAOsJ -DoCkKvbdBhjajiGK -EObjjvbdCgLegAzc -DoDLKvbdhtyeWrVC -EOcKjvbdzitoocrt -EOcKjvbdNVTSKmAX -EPCjjvbdVYgsyjnn -EObkKvbdliEUQuRa -DoCkKvbdqFceUWAh -EPDKjvbdIsZAsMxM -DnbkKvbdUVlPjUBR -DoDKjvbdbUafwjsh -EObjjvbdQlxCZOUz -DoCkKvbdQvnEDLhD -EOcKjvbdUVlQKUBR -EPDKjvbdehKvRnQg -DoDLKvbdxmsIYTIc -EObjjvbdsCGNLfkZ -EObjjvbdmSYtzSdJ -DoCjjvbdiMEcnVDZ -EPCjjvbdypnlhiwA -DoCjjvbdRyihTDWA -DoCjjvbdZoOJEdzK -DoCjjvbdJpzEoGOF -DoCkKvbdYpmEiMeR -EPCkKvbdbhljKfWx -EPDLKvbdqYnggQcx -EOcLKvbdwjwEHzyf -EPCjjvbdLFegbAqV -DoCjjvbdMoxQvNgT -EPCjjvbdZsiIyETO -DoDLKvbdZQmFImEq -DnbjjvbdYkrDtOMN -EPCjjvbdjggMGGOL -DncLKvbdDwwlTstM -EOcKjvbdCWzciFQW -DoCkKvbdyYIiaozL -DnbkKvbdNsTufeVQ -DoDKjvbdjlakydfo -EObjjvbdUGznLvue -DoCjjvbdeFOqawDK -DoCjjvbdZnmiFEyj -EOcKjvbdVBCQrprZ -EOcLKvbdrovOjCvG -DncKjvbdrovPKCuf -EOcLKvbdlYrqryHU -EObkKvbdcyyPxZQb -EObjjvbdnBivwnnV -EObjjvbdjJehJlwr -DnbkKvbdOFDtJIjd -DnbjjvbdVAaqSqSZ -EObkKvbdrXPkbiZR -DoCjjvbdzaAPGfal -DncKjvbdZQldhmEq -EObjjvbdmoyxvLZC -DnbkKvbdmpZxujyC -DoCjjvbdvwLaWBWV -DncLKvbdiVZdvquC -DnbjjvbderBWzlDP -EPCjjvbdjbkjpfuH -DncLKvbdrafNLfkZ -DncKjvbdrWokbhxq -EPCkKvbdsZkosBHn -EOcKjvbdidjfuPAO -DnbjjvbdNGcPmQUk -EPCjjvbdrJAKFNOe -DnbjjvbdTukoitBR -DnbkKvbdySmhlrCH -EObkKvbdrXPkcIxq -EOcLKvbdFejSOItR -EObkKvbdmgExMnGy -EPDKjvbdqrVLOLBN -DoDKjvbdLAkHNCYR -EObkKvbdVrOXbEkc -DnbjjvbdEXwlUTsl -EPCkKvbdyXhjBpZk -EObkKvbdiifHjMxS -EOcKjvbdEKHiuxKA -EObkKvbdZLqdTmlN -EObkKvbdWRnXaeLc -DnbjjvbdWSNwaeMD -DnbjjvbdfNGWgNKL -DoDKjvbdoAKztIDn -DncLKvbdmaivxOmu -DnbjjvbdZLqcsnMN -EObjjvbdcTDKscia -EPCjjvbdOTTufeUp -DoDKjvbdGdLVjBjK -DncKjvbdcJNKLFvx -EOcLKvbdTYKkmzjx -EOcKjvbdZRMeImEq -DoDLKvbdKQyePFnF -DnbkKvbdNrtWGduQ -EPCjjvbdatbHXjtI -EPCjjvbdvwMAuaVu -EPDLKvbdnQZxvLZC -EObjjvbdtlYXAsaX -DnbkKvbduDDVWvPP -EPDLKvbdqTtGrSKt -EObjjvbdxnSgwsJD -EObjjvbdbKkenmcA -EPCkKvbdFaOqYizm -EOcKjvbdLGGHbBRV -DoDLKvbdRzJhTCvA -EPCjjvbdiMFDmtcZ -DnbjjvbdWWhwvEEg -EPCjjvbdJmAEZgVB -DoCjjvbdmuVZjirG -DoCjjvbdliEURUqa -DoDLKvbdnCKWwnnV -EPDLKvbdhgJbyViu -DnbkKvbdjggMFfNk -EObkKvbdEuxopMie -EPDKjvbdssRsYydc -DncLKvbdliDsqVRa -EOcLKvbdLBKflbYR -DncKjvbdzoPpeClY -DncKjvbdqFdEsvBI -DoCjjvbdZMRctOMN -DncKjvbdDnbkLWcE -EObkKvbdMfcQNPuL -DoDKjvbdUWMPjTaR -DnbjjvbdxmsHwsIc -EObkKvbdrDdhonWB -EPCkKvbdhgJcYvJu -DoCkKvbdlYsSSyHU -EPCjjvbdNdcsiJLE -DoDKjvbdhlEcmuCy -EObjjvbdJTZAsNXl -EPCjjvbdznpQeClY -DncLKvbdDxYMTssl -DoCjjvbdkVwNcbXw -EOcLKvbdMgDPlpUk -EObkKvbdXsMAlsnx -DnbkKvbdiBncEvqR -EPCjjvbdeFPSCWcK -DoDKjvbdmuUzKjSG -EPDKjvbdqrUkNjaN -DoDKjvbdhyuFlQnG -EOcKjvbdDigivYKA -DoDLKvbdJYUCHkqQ -DncKjvbdACqwiyiQ -EPDKjvbdEYXkstUM -DoDLKvbdKDKCpicY -DncLKvbdCDoaVjNG -EObkKvbdxZhFexFS -EPCkKvbdKDJcQjCx -DoDLKvbdEPCkKwCd -EPCkKvbdTfzmkwVe -DnbjjvbduWOYJqTA -DoCjjvbdcJMijfXY -EPCkKvbdmaiwYPOV -EOcKjvbddjJrVtzn -EObkKvbdpstHSRjt -EOcKjvbdyXiKCQZk -DnbkKvbdIsYaSmYM -DnbjjvbdwtmFQxlO -DnbkKvbdYpleJMdq -DoCjjvbdkNBkzFGo -EOcKjvbdbsCkUEKB -DoDKjvbdYlRctOMN -DnbkKvbdjuwOECXw -EPDKjvbdWRnXaeMD -DncLKvbdkDLkQgVH -DoDLKvbdFeiqnJTq -EOcKjvbdzHYlAMeX -EPCjjvbdJbjCpjDY -EPDLKvbdzitopDsU -DnbkKvbdziuPpDrt -DncLKvbdySnImSCH -DnbjjvbdySnImRbH -DoCjjvbdKjaIWAJy -DnbjjvbdTqRPUthN -DoCjjvbdURQntuIN -EObjjvbdQlxCYmtz -EPDKjvbdMtsSLNAX -EObjjvbdJbjDQicY -DoDKjvbdEPCkKwDE -EObkKvbdKQydoGNe -DoDLKvbdVwJXuceH -EObjjvbdnUtykJrG -DncLKvbdwMvANEEm -EPDKjvbdpyPHgQdY -DnbjjvbdUVkpKUBR -EOcLKvbdhfjCyVjV -EPDKjvbddoFTKstS -EPCkKvbdANHyTXZx -EPCkKvbdUxhTyjoO -EObjjvbdkVwNdBxX -EPDKjvbdDoCjjvbd -DnbkKvbdWWhwudEg -DnbkKvbdyTNiMrCH -DoDLKvbdelewGljL -DncLKvbdUGznMWue -DncKjvbdwygfFwdr -EPCkKvbdJqZePFnF -DnbjjvbdNsTugEuQ -DoDKjvbdQcbaPqDr -DncLKvbdfMevgNJk -DncLKvbdlrZVZrdJ -DoCjjvbdFjeTCglu -DnbjjvbdYqNFImEq -DoCjjvbdsCGMkfkZ -DncLKvbdhuZdwSUb -DoCkKvbdrXPkbiZR -DoCjjvbdZRMdiMdq -DoDKjvbdemFvgMjL -DoCjjvbdygZMANEw -EOcKjvbdZRMeIldq -EObkKvbdiHJcZWKV -DncKjvbdCJKbKiFj -EObjjvbdzROlhjXA -DnbjjvbdDoDLKvbd -EPDLKvbdVYgtZjnn -EObkKvbdDoCjjwDE -DnbkKvbdrouoJbuf -DoCkKvbdyTOImRag -EPDKjvbdBcpBVilf -DoCjjvbdCWzdJFQW -EPCkKvbdbrbjscjB -EOcLKvbdwkWdHzzG -EPDKjvbdnGeXlnGy -EPCkKvbdznpREcLx -EPCkKvbdZMRcsnLm -EOcKjvbdJSyArmXl -DnbkKvbdZMSDtNkm -EPDKjvbdAMgySvzY -DoDLKvbdyYJJbPzL -DoCkKvbdLAjgMaxR -DoDLKvbdWIXuxGxz -DoCjjvbdqwQLbiYq -DnbkKvbdpyPIHQcx -EOcKjvbdfNGXHNJk -DncKjvbdqYnhHQdY -DncKjvbdeEnrBvcK -EPDKjvbdZjTHpGaf -DoDLKvbduoTzqLPU -DnbkKvbdIjEAJofd -DnbkKvbdxnSgxTJD -DoDLKvbdXsLaMsnx -DnbjjvbdaRfDHsek -DoCkKvbduLwwAtBX -DnbkKvbdrpWPJcVf -DoDKjvbdrbFlkgLZ -DoCkKvbdlqxtyrdJ -EObkKvbdRyihSbvA -EObkKvbdWRnYCFLc -DoCkKvbdOEcshhjd -DnbkKvbdZjTHpHBf -DnbjjvbdcyyPwxpb -DncLKvbdkVvmdCXw -DncLKvbdcScKtEJa -DnbjjvbdrSVLOLBN -EObkKvbdiGjDYvKV -EPCkKvbdEJgjVwjA -DnbkKvbdRosgKFdX -EPDLKvbdcScKtDia -DoCjjvbdtbcVXVno -DncKjvbdhgJbyViu -EPCjjvbdjJehKNYS -EObkKvbdyOTIYTJD -DnbkKvbdRaceMJYk -DoCkKvbdqiAKEmOe -DoDLKvbdEKHiuwjA -EObkKvbdxUldpxkn -EObkKvbdFejRmhtR -DncLKvbdSBcdlIyL -EPCkKvbdxZhFexFS -EObjjvbdwjwEHzzG -EPCjjvbdmRxtzSdJ -EPDLKvbdEvYooljF -DoCkKvbdmgFXlmfy -DoCjjvbdtkxXBTaX -EObkKvbdmgExMnHZ -DncLKvbdjvXODaww -DoCkKvbdSCEFMIyL -EPDKjvbdVYhTykOn -DoDLKvbdNsUVgFUp -DncKjvbdRXOEClID -DoDKjvbdnVVZkKSG -DoDKjvbdWWhxVcdg -EPCkKvbdwuNFQxlO -DncLKvbdKeegbBRV -DncLKvbdUWLpJsaR -EOcLKvbdNxOuzcmt -EObjjvbddwzUUSFz -DoCjjvbdJXtBhMQp -DoCkKvbdLGFgbBRV -EOcLKvbdcJMjKewY -DnbjjvbdxUmEqYkn -DnbkKvbdjbkjqGtg -EPCkKvbdIHGzYwwg -DnbjjvbdrpWOjCvG -DoDKjvbdZMRctNkm -DnbkKvbddZyPwxqC -DoCjjvbdtcDVWuno -DoCkKvbdJcKDRJcY -EOcLKvbdmbKWwnnV -EPDKjvbdcasNSAUN -EPCkKvbdUaBpsQqy -EObkKvbdJutedFHJ -DoDLKvbdBhjakJFj -DnbkKvbdnUuZjiqf -EPDKjvbdpxoHgQcx -DnbjjvbdZjTHofbG -EObkKvbdkxsSSxgU -DnbjjvbdWRmwbElD -DoCkKvbdRkZFuGjs -EPCkKvbdwNWANDdm -EObjjvbdTkvPBVni -DoDKjvbddndrkTtS -DncLKvbdZtJIxdSn -EOcLKvbduaDyTOeI -EOcKjvbdxZgfGXdr -EOcLKvbdkySrTZGt -EPDKjvbdVwJXucdg -EPDLKvbdatagYLUI -DoCjjvbddZxpYZQb -EPDKjvbdtunXjRTA -DoDLKvbdWSOYBeMD -DoCjjvbdHlBznXRL -EPDLKvbdcyxpXxpb -DnbjjvbdAMhYsWzY -EObjjvbdraemLgKy -EPDKjvbdJpzFOenF -DoCjjvbdZnnIeEyj -DoCjjvbdrWpLbiZR -EOcKjvbdLqwMytpz -DncKjvbdKQzEoFme -EPDKjvbdZRMeJMeR -DncKjvbdEuxpPlie -EOcLKvbdFWYpPlie -EOcLKvbdjblKpgUg -EOcLKvbdiBnbdwQq -DoDLKvbdOTTufeVQ -EPDKjvbdpyOggQdY -DnbkKvbdGBOqYizm -EObjjvbdRjxfUfkT -EPCjjvbdUMVoAuoJ -DoDLKvbdVwJXvEEg -EObkKvbdnCKXXoOV -DoDKjvbdNPxRVmgT -DncLKvbdZsiIxdSn -EPDKjvbdjlalZeHP -DoDLKvbdeFPSBvbj -DoDKjvbdVqnXbFMD -DncKjvbdHffyyYYH -EOcLKvbdBhjbLJFj -EPDKjvbdJvVGEFHJ -EOcKjvbdgQBzvdYI -EPDLKvbdpyOggRDx -EObjjvbdKQyeOfNe -EPCjjvbdtcCtwVno -EPCjjvbdQvmdClHc -DnbkKvbdyXiKBoyk -DncKjvbdqTsgSSLU -EObjjvbdyNrgxShc -DnbjjvbdRkZFuGjs -EObjjvbdYfvdAOri -DoDKjvbdkMbMZeGo -EPDLKvbdCIjbLIej -DoDKjvbdHffyxwwg -EPCkKvbdGdLVibJj -DoCkKvbdaaVdepQX -DnbkKvbdSQUGifDw -EPCkKvbdqYngfpdY -DnbkKvbdxUleQyLn -DoCjjvbdqlyixkgi -EPCkKvbdjgfkfGNk -EObjjvbdeFOqavbj -DoDLKvbdYkrDtNlN -DoCkKvbdjhGlFenL -EPCjjvbdijFhJmXr -EObjjvbdnGeYMmfy -EOcLKvbdbhmJjfXY -EOcLKvbdLBKfmCYR -DncLKvbdJSxaSmXl -EPCjjvbdsQVnicWG -DoDKjvbdjhHLfFnL -EObkKvbdjuwOEBww -DoCjjvbdiBncEvpq -EOcLKvbduLxWaUAw -DncLKvbdhuZdwRtb -EOcKjvbdjvWnECXw -EObkKvbdZeYGzghb -DoDLKvbdNQYQumgT -DoDKjvbdJpydoFnF -EPCkKvbdRjyFuGkT -DnbjjvbdraelkgKy -EObjjvbdfNGXHMjL -DoDLKvbduWNwiqTA -DncKjvbdnVUzLJrG -DoDLKvbdehKvSOQg -EPDLKvbdwtmFRYkn -DoDKjvbdKfFgaaQu -DncKjvbdCTBDTfXS -EObjjvbdDoCjjwCd -EPCjjvbdYTMAmUOx -EOcKjvbdiMFDnVCy -EObkKvbdjlalZeHP -DnbjjvbdCJLCLIfK -DoDLKvbdZMRdUNkm -DnbjjvbdURRPVUgm -EObjjvbdJcJbpibx -EObkKvbdrWpMDJZR -EObjjvbdjuwNdBxX -EPCjjvbdbBVdfQQX -EPCjjvbdKRZeOfOF -DoCkKvbdKDKCqKCx -DoCjjvbdkVvmdBxX -EPDKjvbdvAdYroEh -EOcLKvbdtcCuXWPP -EPCjjvbdczZQXxpb -DncKjvbdUxhUZkPO -EObjjvbdlrYtysEJ -DncLKvbdcScLUDia -EPDKjvbdBsAbsevr -DoDLKvbdqTtGqrLU -DoDKjvbdSCEFLiYk -EPCjjvbdRWmccLgc -DncLKvbdNQYQunGs -EObkKvbdmbKXYPNu -EPCjjvbdfMewGmKL -EObjjvbdzROmIiwA -DnbkKvbdliETptqa -EPDKjvbdHlBznWpk -DoCkKvbdUaBpsQqy -DoCkKvbdWSOYCFMD -DoDLKvbdxmrhYTIc -DncLKvbdLAkGlbYR -DncKjvbdlhctRUqa -DoCjjvbduDCtwVno -DnbkKvbdIjEAKQHE -DnbjjvbdiLddNuCy -EPDKjvbdEXwktUTl -EPCjjvbdyNrgwsJD -EObkKvbdnPzYujxb -EPDKjvbdznoqEcMY -EPDKjvbdZRNEhleR -DoCjjvbdGQATXHFy -EPCjjvbdyqPNIiwA -EOcKjvbdkxrrTYgU -EOcKjvbdcImKLFvx -DoCkKvbduoTzpkPU -EPCjjvbdJXtCIMQp -EOcKjvbdrpVoJbvG -DncLKvbdqZPIHRDx -DnbjjvbdTAFJHand -EOcKjvbdtcCuWuno -DncLKvbdfIKurNqH -DncKjvbdLrWmZtpz -DoDLKvbdMtsRjmAX -EObjjvbdLGGHbBRV -EObkKvbdCWzchePv -EOcKjvbdZxcjODMS -EObkKvbdzaAPGgBl -DoDLKvbdKVtecdgJ -DnbjjvbdHDjvJbJj -EPCjjvbdLiCLqYAS -EPDLKvbdFVxpPmKF -DoDLKvbdZisIPgBf -DncLKvbdTppoUtgm -DnbjjvbdpyPIGpdY -DoDLKvbdEztRElCi -DncLKvbdHgGzZYYH -DnbjjvbdZLqctOMN -DnbkKvbdqTtGqqkU -DnbjjvbdiMEcnVCy -EPDKjvbdvBDxrneI -DoDKjvbdemGXHNJk -DoDKjvbdhficYvKV -EObjjvbdegkWSOQg -DoDLKvbdOFDtIiKd -EPCjjvbdBdQAuimG -DoCjjvbdpyPHgREY -DncKjvbdJXsbHkpp -DoDKjvbdRbEElIxk -DoDKjvbdsQWPJcWG -EObkKvbdsCGNLfkZ -EOcLKvbdzaAPGgCM -EObkKvbdzjUoodSt -DnbkKvbdemFvgMjL -DnbkKvbdWWhxVcdg -DncLKvbdxrmiMqag -EPCkKvbdMSWlytpz -EObjjvbdwNWAMdFN -EPDLKvbdlrYtzTEJ -DnbjjvbdVqnYBeLc -DncKjvbdnHEwmOGy -DnbjjvbdtbbuWvPP -DncKjvbdmIcspuSB -EObkKvbdEOcKkXCd -EOcKjvbdDncKkXCd -EPDLKvbduaDxrndh -DoCjjvbdOFDshhkE -DnbkKvbdRaceLhyL -EPCkKvbdZshhyDrn -DoCjjvbdCSaDTfWr -EOcKjvbdqUTfrSLU -EPDLKvbdtTRryZdc -DoDLKvbdkyTRsZGt -EPDKjvbdyqPNIjXA -DoCkKvbdNUrrKmAX -DoCjjvbdSCDeMIxk -EObkKvbdkMbLzEgP -DncKjvbdEvZPpMie -DoCkKvbdyYIibQZk -EObkKvbdNPxQumfs -EOcLKvbdDncKjvbd -EPCkKvbdozmcjxPA -EPDKjvbdCIkCLIfK -DncKjvbdcyxoxZRC -DoCkKvbdeOdrkUUS -DoCjjvbdhzVFlQnG -EObjjvbdOFETiJLE -DncKjvbdhyuGLqNf -EObkKvbdRWmdClID -DoCjjvbdFpATWgFy -DnbkKvbdlqxtysDi -EObjjvbdqmZjYkhJ -DoDKjvbdZyDjODMS -DoCjjvbdEJhJvYKA -EOcKjvbdqTsgRrLU -EOcKjvbdZsiIxcrn -EObkKvbdIHGzZYYH -EPDKjvbdHgGyxxXg -EObkKvbdxmrgwriD -EPCkKvbdxrnJNSBg -DnbkKvbdjhGkefOL -EPCjjvbdKQydoGNe -EOcKjvbdqvpMDJZR -EObjjvbdQdDBQQdS -DoDKjvbdSKxfVHKs -DoDKjvbdbLLeoODA -DoDLKvbdBsAcUGWr -DoCjjvbdRzKHrbvA -EObjjvbdfMfXGljL -EObkKvbddeOrCWbj -DoDKjvbddjJrVtzn -DoDLKvbdhtydvqtb -DnbjjvbdRNXayOUz -EPDLKvbdRjyFtgKs -EObkKvbdsPuoKCvG -EPCkKvbdYqNEiNFR -DncKjvbdUxgsyjnn -EPCjjvbdZRMdhldq -DoDLKvbdEJhKWXjA -DoCkKvbdQwODblID -EPCkKvbdssRrxzFD -DnbjjvbdZxdKOCkr -EObjjvbduCcUwVno -EOcKjvbdmuUzLKRf -EPCjjvbdfpBzvcwh -DnbjjvbdMowpvNfs -EPDKjvbdGLErcHmV -EPDLKvbdZoOIeEyj -DncLKvbdSLZGUgKs -DncLKvbdlqyUzTEJ -EPCjjvbddePRawDK -DncKjvbdHEKvKCJj -DoDKjvbdeEnqavcK -DoDLKvbdtSrTYzFD -EPDLKvbdxUmFQxlO -DnbjjvbdLLBIWAJy -EOcLKvbdMowqWNfs -EPDKjvbdptUGrSKt -DoDLKvbdHEKvKCKK -EPCjjvbdJcJbpjDY -DnbjjvbdMuTRkNAX -DnbkKvbdEzspdlDJ -DncLKvbdVUMsekvK -EPDKjvbdOTUVgEtp -DncKjvbdAMgySwZx -DoCkKvbdwtmFRYkn -EObjjvbdIjEAKPgE -EPDKjvbdRpTfjGEX -DncKjvbdFjeSbglu -EObkKvbdjFLGtoAO -DoCkKvbduWOYJqTA -EPCkKvbdVAapsQrZ -DnbjjvbdVwJXudEg -DoDLKvbdUtMsfLvK -EPCjjvbdHELVjBij -DncKjvbdRWnECkhD -EPDLKvbdZsiJZDsO -DncLKvbdnPzZWLYb -EPCjjvbdznoqEcMY -EOcKjvbdzoQQeDMY -DnbjjvbdznpQdbkx -EPDKjvbdeYZtTrFz -DoCkKvbdkySrTZHU -DncKjvbdCSaDUGXS -DoCkKvbdcJNJjfXY -EOcLKvbdCEQAvJlf -EPDKjvbdyzdmqhJI -DncLKvbdNPwpvNgT -DoDKjvbdqmZixkgi -EOcKjvbdVYhUZkPO -EObkKvbdhgJbxvJu -DoDKjvbdUQqPUuHm -DncLKvbdqvolChyR -EPCkKvbdEXxMTssl -DnbkKvbdHgGzYwxH -DoDLKvbdIidAJpGd -DnbkKvbdZLqdUOMN -DnbkKvbdGckViaij -DoCkKvbdFVxopNJe -EOcLKvbdRbEFMIyL -EObkKvbdLAjflawq -EObjjvbdziuPodTU -EPDLKvbdQwNdCkhD -EPCjjvbdZxdJmcLr -EPDLKvbdxrmhlqag -DoCkKvbdSPsgJfDw -EPCjjvbdkDLjpgUg -DnbjjvbdtbcUwWOo -DnbkKvbdWIXuxHYz -EObjjvbdEvYpQMie -DoDLKvbdIHGzZXxH -EPDLKvbdVYgszKoO -DncKjvbdhancEvpq -EPCjjvbdcJNKKewY -EPDKjvbdWWhwvEEg -EOcLKvbdvAdYsOdh -EObkKvbdcyyPwxqC -EObjjvbdSPtGifDw -EOcLKvbdkMalZeHP -EPDKjvbdYlRctNlN -DoDLKvbdKWVGEFGi -DncLKvbdMgColouL -DncLKvbdhbPCeXRR -DncLKvbdDwxMTstM -DoDKjvbdvAcySndh -EObkKvbdXGYytAPT -DoCjjvbdmuVZjjRf -EOcLKvbdDGlFgAzc -DoDKjvbdiBncFXRR -DoDKjvbdkaMnmALA -DncKjvbdVBCQrqSZ -DoCkKvbdVviYWEFH -EObkKvbdAMhZSwZx -DoDLKvbdeAUQlwjG -DoDLKvbdZxcjODMS -EOcLKvbdrpWPKDVf -EPCkKvbdWRnYCFLc -DnbkKvbdKeehBaRV -DoDKjvbdMSXMzUpz -EOcKjvbdRkZGVGjs -DoDLKvbdFkFScIMu -DoCjjvbdZjTHogBf -DnbkKvbdnBivwnmu -EOcKjvbdCTAcTevr -EOcKjvbdVviXvDeH -DoDLKvbdliDsptqa -EPDLKvbdZirgpGaf -EPCjjvbdaRfChUFk -EPCjjvbdkClKqGtg -DoCjjvbdKQyeOfOF -EPCkKvbdqvpLbiYq -DnbjjvbdCTBDTfXS -DoCjjvbdOEctIhkE -EObjjvbdbVCHXkUI -DncKjvbdxnTIXrhc -DnbjjvbdezvYdhsw -EPCjjvbdDwwkstUM -EPCkKvbdaaVdepQX -DoDLKvbdjlbMZeHP -DoDLKvbdqAiFAXHd -EPDLKvbdGLEsCglu -EPCjjvbdZyDinClS -EPCkKvbdSLYeuGkT -EPDKjvbdwyhGFweS -EOcLKvbdjJfIKNYS -DoCjjvbddeOrCXCj -DoDKjvbdkxrqsZHU -EOcKjvbdGYuVBEYC -DncKjvbdHkazmvqL -DnbkKvbdZsiIxdSn -EObkKvbdhanbeXQq -EOcLKvbdMpXqWNfs -DnbkKvbdEztQdkcJ -EPCjjvbdDjHjWXjA -EOcKjvbdNQYQvNgT -EPCkKvbdNHCpNPtk -DoCjjvbdbsCkUDjB -EObkKvbdOStWGeUp -EOcKjvbdVqnYBdlD -DoCkKvbdvlvANDeN -DoDKjvbdnQZyWKyC -EOcLKvbdkyTRsYft -EOcKjvbdnVUyjiqf -EPCjjvbdXnRAXtut -EPDKjvbddZxpXxpb -EPDLKvbdfHjvSOQg -DncKjvbdXsMBNTnx -DncKjvbdEARiMzXX -EPCjjvbdOStVgEuQ -DnbjjvbdHELWKCKK -EOcLKvbdehLWSOQg -DncLKvbdYkqctOLm -DoDLKvbdxsOJMqbH -DoCjjvbdzGyMANFX -DoCjjvbdSCEElJZL -DoDKjvbdRkYeuHLT -EOcKjvbdXsLaMsnx -DnbjjvbdePFSkUUS -DncKjvbdGZUuAdXb -EOcLKvbdlZSqsZGt -DncKjvbdiCPCdwRR -EObjjvbdjvXOEBxX -EPDLKvbdRXOEDMHc -EPCkKvbdZisIQHCG -EPDKjvbdjKGIKNYS -DncLKvbdWWiYVdEg -DnbjjvbdaMkBruNH -EOcLKvbdOFEThiKd -DoCkKvbdVZHszLPO -DoDKjvbdiHJcYvJu -EPCkKvbdwuNFRZLn -EObkKvbdJqZdoGNe -EOcKjvbddndsLUUS -EOcLKvbdBraCtGWr -DncLKvbdxrnJNRbH -DoDLKvbdCWzciFPv -EPCkKvbdtlXvaUAw -DoCjjvbdMfbomQUk -DoCjjvbdfoazwDxI -DoCkKvbdauCHXkUI -DnbjjvbdaogHELzd -EPCjjvbdTulPisaR -EPCkKvbdOSsvHEtp -DoDLKvbdTkuoBVni -EPDKjvbdVBBqTRSZ -DnbjjvbdEJgivYKA -DncKjvbdJXtBgkqQ -DnbkKvbdbsCjsdJa -EPCjjvbdhlEcnUby -EObjjvbdssSSyZdc -EObkKvbdhgKCyWJu -EObkKvbddeOqbWcK -DoCkKvbdqvpLcJYq -EPDKjvbdxZgefXeS -EOcLKvbdkVwOEBww -EPDKjvbdemFvfljL -EPCjjvbdFkErcIMu -EOcKjvbdZyEKNcMS -EPDKjvbdqlzJxlHi -EPCjjvbdmbJwXnmu -EOcLKvbdcTDLTcia -DoCkKvbdyzdmqhJI -DnbjjvbdGdLWKBij -DoDKjvbduaDxsPEh -DoDKjvbdZshhxdTO -DncKjvbdptUGqrKt -EPCjjvbdJvVFceGi -EOcKjvbdddoRawDK -DoCkKvbdfMfXHMik -EObjjvbdVAbRSpqy -EObkKvbddZyPxYpb -DnbkKvbdVYgszKnn -DoCkKvbdZMRdUNkm -EObjjvbdTvMPitBR -EObkKvbdIxTaglQp -EObkKvbdGGKSNiUR -DoCkKvbdGBOpyJzm -EPCjjvbdqrUjmjaN -DncKjvbdIMBzmvpk -EPCjjvbdcyxoxYpb -EOcKjvbdmIcsqUrB -DoCkKvbdqvolChyR -EPCjjvbdkHgMGGOL -EPDLKvbdpaIeAWgd -DncLKvbdqvokcIxq -EOcKjvbdZsiJYcrn -EObkKvbdyYJKBpZk -DoCkKvbdKDKDQicY -EObkKvbdlhdTptqa -EObkKvbdyXhjBpZk -EObkKvbdKNAEZfta -EOcLKvbdRyihTCvA -DncLKvbdtcCtwVno -DnbjjvbdVZITykOn -DoCjjvbdJSyArlwl -EPDKjvbdDxYLtUUM -EPDKjvbdvlvANEFN -DoDKjvbdrykpTAgn -DnbjjvbdeYZtUSFz -DoDKjvbdzjVQQETU -EObjjvbdiHJbyVjV -DoCjjvbdcScLTcjB -DncLKvbdhaoDEwQq -DnbkKvbdQlwbZNtz -EPCjjvbdEARiMzXX -EPCjjvbdGFjSOIsq -DoDKjvbdrXPlChxq -DoDLKvbdYqMeImEq -DoDKjvbdOFETiJKd -EPCjjvbdCTBDUFvr -DoCkKvbdZoOIdeZj -DncLKvbdHgHZyYXg -EOcLKvbdCSaCsevr -DoCjjvbdsQWOjCuf -DoDKjvbdKWUfDeGi -EOcKjvbdzitpPcrt -EPDKjvbdZyDimcMS -EPCjjvbdBcpAuilf -EOcKjvbdqwQMCiYq -EOcLKvbdsrrTZZdc -EObjjvbdSQUHKGEX -DoDLKvbdcyxoxZRC -EObkKvbdWXJYWEFH -DnbkKvbdhgKDYuiu -DoDKjvbdrSVLOKaN -EPCjjvbdMoxQumgT -EPDKjvbdcbTMrATm -EPDKjvbdznopdcMY -DnbjjvbdzdzOzdyp -EObjjvbdGYuVBEXb -EPDKjvbdiZtekpnG -DoDLKvbdvvlAuaVu -DoDKjvbdEYXkstTl -EPCjjvbdauCHYKsh -DoCjjvbdDjIJuwjA -EObjjvbdkNCLzFGo -EPDLKvbdiGicZWKV -EPCkKvbdtlXvaTaX -DoCkKvbdpyOggQcx -EObjjvbdtTSSyZdc -DoDLKvbdiZtelROG -EOcLKvbdWRnYCFMD -EPDLKvbdNddUIhjd -DncLKvbdEObjjvbd -EPDLKvbdVUNTelVj -EPCjjvbdVhXvYGxz -DoCkKvbdfRaWzkbo -DoCjjvbdRjyGVHKs -DoCjjvbdSKxfUfkT -EOcKjvbdaRecITek -DoCkKvbdEJhKVwjA -DoDLKvbdwXLaWBVu -EPDLKvbdLYqJrztf -DncKjvbdUMVoAuoJ -DnbjjvbdvmWAMcdm -EObjjvbdpssfqrKt -DnbjjvbdhlEcnVDZ -EOcKjvbdNsUWGeVQ -EObjjvbdVUNTekuj -DnbkKvbdVYgsykOn -EObkKvbdpssgSRjt -DncKjvbdVZITzLOn -DoDKjvbdGGJrNiTq -DoDLKvbdACqwizJQ -DoDKjvbdIryArmXl -DoCkKvbdZMRdTmlN -DnbkKvbdrovPKDVf -EObkKvbdrounjDWG -DnbjjvbdCSaDTevr -DnbjjvbdUyITyjnn -DnbkKvbdKRZeOfOF -DoCkKvbdDigiuxKA -EOcKjvbdxsNhlrCH -EOcLKvbdDjHiuxKA -DncKjvbdXmqAXtvU -DnbjjvbdqFdFTvAh -EObkKvbdxrmhmSBg -DoCjjvbdIidAKPfd -EOcKjvbdKQydoGOF -DnbjjvbdlqyUzSdJ -EPDKjvbdtvOYKQsA -EPCkKvbdcIljLFvx -DoCjjvbdYqNEhldq -EPDKjvbdczYpYZRC -DoDLKvbdiBoCeXQq -EOcLKvbdiCPDFXRR -EPDLKvbdZisHofaf -EPDKjvbdmIdURVSB -EPDKjvbdZRNFIldq -DoDKjvbdJpydoFme -DoDLKvbdWWhwudEg -DncLKvbdDnbjjwDE -DncKjvbdqTsfqqkU -DncKjvbdKDKDRKDY -DoDKjvbdTulQJsaR -DoCjjvbdSBdFMIyL -DncLKvbdqTtHSSKt -EOcKjvbdBcoaVjMf -EObjjvbdiiehKNXr -EObjjvbdCWzciFQW -EPDLKvbdWSNwadlD -EPDKjvbdKVuGEFHJ -DoCkKvbdZMRdUNlN -EPDKjvbdZRMdiMdq -EPCkKvbdxUmEpyMO -DoDLKvbdRkYfVHKs -EObjjvbdIwtCIMQp -EPDKjvbdmJDsqUqa -EPDKjvbdrDeJPmvB -EOcKjvbdTvMPisaR -DncKjvbdMtsRjmAX -DnbjjvbdlqyUysDi -EPDKjvbdQwNdClID -DncLKvbdRjxfVGjs -EObkKvbdauBfxKtI -DoDLKvbdiZtfLpnG -DoDKjvbdhancFXRR -DoDKjvbdREDBQQdS -EObjjvbdrzMQTBIO -EOcKjvbdcImKKfXY -DoDLKvbdijGIKNXr -DncLKvbdgGMZmfgA -EPCjjvbdZnmheFZj -EPDKjvbdmuVZjiqf -EObjjvbdeFPRawDK -EPDLKvbdrNZiyLhJ -EOcKjvbdlhdURUrB -EPDLKvbdGGJrNhtR -EOcKjvbdiGibyWKV -EOcKjvbdQlwbZNtz -DncLKvbdnVUzKiqf -EOcKjvbdbsDKscjB -EPDLKvbdDnbjjvcE -DoCkKvbdySmhmRag -DncKjvbdkyTSTYft -DoDLKvbdEYXkstUM -EOcKjvbdiHJbyVjV -EOcKjvbdsQVnicWG -DoCkKvbdoznDkYPA -EObkKvbdURQoVVHm -EPDLKvbdFfKSNiTq -DnbjjvbdVgxVwgYz -DnbkKvbdmfeYNOHZ -DoDKjvbdyqPNIiwA -EObjjvbdFVyQPlie -EOcLKvbdGdKvKBij -EPCjjvbdDwxMUTtM -DoCkKvbdKVtfEEfi -DoCkKvbddjKRvUzn -EObkKvbdliEURVSB -EPDLKvbdWSNwaeMD -EOcLKvbdJqZdoFnF -DnbjjvbdKxqJrzuG -DnbjjvbdmuUyjjSG -EPDLKvbdADRxKZhp -EPCkKvbdiCPDEwRR -EObjjvbdTXkMNzkY -DnbjjvbdMgDPlouL -EPCjjvbdyzeNqghh -EOcKjvbdmuUyjjSG -EPDKjvbdDoDLKvcE -EPDLKvbdNxPVzdNt -DoDKjvbdBhjbKhfK -DnbjjvbdZLrETmlN -DoCkKvbdHffyxwwg -EOcKjvbdYSlAmUPY -EPCjjvbdtTSTYzFD -DoCjjvbdFjeTCgmV -EObjjvbdNwnuzcnU -DoDLKvbdSPsfiecw -DoDKjvbdKVtedFGi -EObjjvbdUaCQsRRy -EObkKvbdbsDLUDjB -EObkKvbdEOcKjvcE -EPCjjvbdyNsIYShc -EOcLKvbdbVCGxKsh -DoDKjvbdlZSqsYft -DoCjjvbdUslselWK -DncLKvbdbUbHXkUI -DnbkKvbdYkqcsmkm -DncKjvbdXsMAmUOx -DoDKjvbdJuuFcdgJ -EOcLKvbdGLFTChNV -DoCkKvbdaaWEfQQX -DncKjvbdVqnXbFMD -EOcKjvbdZyEJnClS -DoCkKvbdNdctJIjd -DoDLKvbdmaiwYOmu -EPCkKvbdmbJvxPOV -DncLKvbdTqRPUuIN -EPDLKvbdGGKSNiUR -EPCjjvbdIwtCIMQp -EOcKjvbdHDjvJajK -EOcLKvbdZyEJnDMS -DnbkKvbdrWpMDJZR -EOcLKvbdbUagXjtI -EOcLKvbdLGFgbBRV -EOcKjvbdqvpMDIxq -EPDKjvbdOAJSsjSA -DncKjvbdsrqsYyeD -DnbjjvbdtkwvaUBX -DnbjjvbdGQASwGfZ -EObkKvbdURROtuIN -EObkKvbdiUydwRtb -EOcLKvbdqlyixkhJ -EPCkKvbduaEYroFI -DoCkKvbdnUtyjiqf -DoCkKvbdssSTYzFD -DncLKvbdeATqMwjG -DnbkKvbdqlyjYlHi -DncLKvbdTAEhhCOd -EOcLKvbdpxoIHQdY -EPDKjvbdEXxLsstM -DncLKvbdbLLfPNcA -DoDLKvbdCWzdIeQW -DnbjjvbdWSNwbElD -DoDKjvbdGFjSOJUR -DoCjjvbdmttzKjRf -EPCjjvbdqmZjZMHi -DncLKvbddwzUTqez -EObkKvbdrEFIpOVa -DnbjjvbduMYWaTaX -EPDKjvbdTAEiIBoE -EOcKjvbdVrNwaeMD -DoCjjvbdSwkMNzjx -DoDKjvbdZoNheEyj -EObjjvbdFpASvgGZ -DnbkKvbdvBDxsPEh -DoDKjvbdIHGzYxYH -EOcLKvbdhanbeXQq -EObkKvbdACqxJyhp -DoDLKvbdgQBzwDxI -EObjjvbdOYOuzdNt -DnbjjvbdRWmdDMHc -EPCkKvbdePFTLUUS -DnbkKvbdHlBznWpk -EPCkKvbdqlyixlIJ -DnbjjvbdIHHZyYXg -EObjjvbdBcoaVimG -EOcLKvbdZnnIddzK -DnbjjvbdBiLBjhfK -EPDLKvbdeOeTKtTr -EObkKvbdYlRcsnLm -DoDKjvbdnHExNOGy -DoCkKvbdnCJwXoNu -EOcKjvbdwWlBWBWV -DnbjjvbdGYuVAdXb -EObkKvbdLGGHbBQu -EPCkKvbdEJgjVxKA -EObkKvbdlqyVZrdJ -EObkKvbdaNLBsUmH -EPCkKvbdGQASwHGZ -DncLKvbdnBjWwnnV -DnbjjvbdUslsekuj -DncLKvbdeATqNYJf -EOcLKvbdIwtCHlQp -EOcLKvbdGLErcIMu -DnbkKvbdjvXOECXw -EPCkKvbdfSAvzkbo -DnbjjvbdsCGNMHKy -DoDLKvbdURQnuVHm -EObjjvbdQvmdCkgc -EPCjjvbdSPsgKFcw -EPDLKvbdYpmEhleR -EPCjjvbdFjdsDHlu -EPDLKvbdqdFIpOWB -EObjjvbdnQZyVkZC -EPCjjvbdQdCaQRES -DnbjjvbdADRwiyiQ -DnbjjvbdiiehKNYS -DoCkKvbdHkaznWqL -EObjjvbdmoyxujxb -EOcLKvbdxxIibQZk -EObjjvbdsPuoKCvG -EObjjvbdjcMKpftg -EOcKjvbdZisHofbG -DncLKvbdUGznLwWF -DoDLKvbdFfJqnJUR -DnbjjvbdsBelkgLZ -DoCkKvbdrbGNLfkZ -DncKjvbdeYZssqez -EPCkKvbdyNsHwsIc -DnbkKvbdrafMkfjy -EPCjjvbdZyEJnDMS -DnbjjvbdFpASwGey -DnbkKvbdLGGIBaQu -DncLKvbddiiqutzn -DncKjvbdWIXuwfxz -DoCjjvbdNPxRVnHT -DncKjvbdwygefXeS -EPDLKvbdmJEUQtrB -EPCjjvbdQwOECkhD -DoDLKvbdNGbpMotk -DncLKvbdRyjIScWA -DncLKvbdVrOXaeMD -DncLKvbdQmYBxnUz -DnbjjvbdVBCRSqSZ -EPCkKvbdRosfifEX -EPDLKvbdlYrqrxgU -EPDLKvbdKVuGDeHJ -DncLKvbdDncLLWcE -EOcLKvbdfNGXGmKL -EOcLKvbdQvmdDMHc -EOcLKvbdEARiMyvw -DoCjjvbdnHFXlnGy -EOcKjvbdhtyeXRtb -DncKjvbdMgDQNQVL -EObjjvbdpedFUWBI -EPDKjvbdkHfkfFnL -DoDKjvbdrXQMChyR -EObkKvbdREDAoqES -DoDKjvbdBdQAvKMf -DoCkKvbdjvWnDaxX -DnbkKvbdePEsKstS -EPDKjvbdyOTHwsJD -DnbkKvbdrSVKnKaN -EPCkKvbdZirgpHBf -DoCkKvbdsQVnjDVf -DnbjjvbdGLEsCgmV -EPDLKvbdelewHMjL -EObjjvbdjlbMZeGo -DoDLKvbdxrmhlrCH -DoCkKvbdczZQXyQb -EObjjvbdRDcBQRDr -DoCjjvbdxLXEHzyf -DoCkKvbdkySrTZGt -DoCjjvbdDoDKjwCd -EObkKvbdKWVGEEfi -DoDKjvbdTqQoUuIN -EObjjvbdZRNEiMeR -DoDKjvbdxUmEpyMO -EPDLKvbdxxJJaozL -EObkKvbdraemLfkZ -EPCjjvbdbiNKLFvx -DnbjjvbdZjSgpHCG -EObjjvbdqBIeAXHd -EObjjvbdVUNUGMWK -EPDKjvbdliDsqUqa -EOcLKvbdxZgfGYFS -DnbjjvbdYpmFJMdq -EPCkKvbdcTCjtEKB -DncLKvbdVUMtFlVj -EPDKjvbdcIlijevx -DoCjjvbdpstHSSKt -EOcKjvbdLAjgMaxR -DoDKjvbdHkaznXQk -EPDLKvbdrovPJcVf -EObjjvbdjblLRHVH -EPCkKvbdfSAvzlCo -EPDLKvbdkHfkefOL -DoCjjvbdbiNKKfXY -EPDLKvbdjJfHilwr -EOcKjvbdxVMeQxkn -DncKjvbdqlzJyMIJ -DoDLKvbdffMZnGgA -EPDLKvbdrpWPJcVf -DnbkKvbdNsTvGeVQ -DncKjvbdZshiZETO -DoCjjvbdWRnXaeLc -EPDLKvbdUaCRTQqy -EOcKjvbdKDKDQjCx -EPCkKvbdLKaIWAJy -DoDKjvbdjblKpftg -EPDKjvbdfHkWSNqH -EObjjvbdSCEEkiZL -EPDKjvbdcyxpYZQb -EPDLKvbdVUMtFkuj -DnbjjvbdVBCQrprZ -EObjjvbddoEsLUUS -DnbkKvbdiHKDZVjV -EOcKjvbdpyPHgRDx -EObjjvbdYpleJNFR -DncLKvbdrDdhpOWB -DncLKvbdcbSmSAUN -DncLKvbdQwODcLgc -EPCjjvbdKVuFcdgJ -EPDLKvbdJvUecdfi -EObkKvbddjJqvUzn -EPCkKvbdLrXNZuQz -DnbkKvbdDihJuxKA -DoCjjvbdegkWSORH -DncKjvbdFyVUaEYC -DoDLKvbdNHDPlpVL -DoDLKvbddneTKtUS -DoCjjvbdEARhlywX -DncKjvbdmbJwYPOV -DnbjjvbddeOrBvbj -EPDKjvbdAMhZTXZx -DnbjjvbdULuoBVoJ -DoCkKvbdMfbomQVL -EObjjvbdyTNhlqbH -EPDLKvbdcyxowxpb -DoCkKvbdEPDLLXCd -DncLKvbdSCEFLiZL -DnbjjvbdBiLCKiFj -EPCjjvbdmgExNNgZ -EOcLKvbdsPvPKDVf -DoCkKvbdbKkfOmcA -DncLKvbdIxTaglRQ -DnbkKvbdFVyQQNJe -EPDLKvbdbsCjtEKB -EPDKjvbdakMFnnDA -EObjjvbdWWiYVcdg -DnbkKvbdfSAvzkcP -EOcLKvbdbKkennDA -EPCjjvbdTppoVUhN -EPDLKvbdemGWgMjL -DnbjjvbdJvUedFHJ -DoDLKvbdqvokbiZR -EPCjjvbdZMRctOMN -DoCjjvbdNPwpunGs -DoCkKvbdZtJIyDrn -EPCjjvbdFejRnIsq -EPDLKvbdZshhxdTO -DncLKvbdxZhGGXeS -DoDLKvbdKyRKSztf -EPDKjvbdCflFgAzc -EPDKjvbdOEdThiKd -DoDLKvbdTAFIgaoE -EObjjvbdEARiNZvw -EOcLKvbdjhHLefOL -DncKjvbdbVCHXjtI -EPDKjvbdeFPRawCj -DoDLKvbdtcCuWuoP -DoDLKvbdUVkpJtAq -EPCjjvbdaSFcHsfL -EPDKjvbdPxmAGrrK -EPCkKvbdDjHjWXjA -DnbkKvbdpssfqrKt -DoDKjvbdePEsKtTr -EObkKvbdDwxMUTtM -DnbkKvbdZRMdiNEq -EPCjjvbdhuZdvquC -DoCjjvbdGLEsChMu -EPDKjvbdRDbaQQdS -EOcKjvbdEJhJvYKA -DncKjvbdkxsSSxft -EObjjvbdKRZdnfOF -EOcLKvbdZQmFIleR -DnbkKvbdjcLjpfuH -DnbkKvbdYzbfSKWZ -EPDLKvbdbUafxLTh -EPCjjvbdJuuFcdgJ -DoCkKvbdJcKCqJcY -DoCjjvbdSKyGVGkT -DoCjjvbdemFvflik -DoCjjvbdvBEYsPEh -EOcKjvbdCWzdJEov -DncLKvbdqTsgSSKt -DnbkKvbdUMVoBWOi -EPCkKvbdOEcsiIjd -DncLKvbdaSFbhUFk -DoCkKvbdhtzEwRuC -DoCkKvbdiCOcEvqR -DoCkKvbdfILVqnRH -DnbkKvbdCJLCKhej -EPCkKvbdakLeoODA -DnbkKvbdUaCRTQrZ -DoDKjvbdRacdkhyL -EPCjjvbdYNqAXtut -DncKjvbdwzHfFwdr -DncLKvbdNrsvGeUp -EPDKjvbdDoCkKvbd -EPCjjvbdrafNLfkZ -EObjjvbdmajXXoOV -DncLKvbdVAbRTQrZ -EObkKvbdkySrTZHU -DoDKjvbdZeXfzghb -EPDLKvbdiCOcFWpq -EOcKjvbdUQpnuUhN -DncLKvbdijGIKMwr -DncKjvbdHgHZxwwg -DncLKvbdVTmUFlWK -DoDKjvbdeYZtUSFz -EPDKjvbdHffyyYXg -DncKjvbdXsLaMtOx -DncKjvbdzitoocrt -DoDKjvbdhtyeWquC -EPDKjvbdEuyPpNKF -DnbkKvbdtvOYKRTA -DncKjvbdZnnJFEzK -EPCkKvbdqZPIGpcx -DnbkKvbdVgxWYGxz -EPCjjvbdOStWHEuQ -EObkKvbdNddTiIjd -DoDKjvbdwXMBWAuu -EPDLKvbdsPvPKDVf -DncLKvbdQvnDbkhD -DncKjvbdEKHjWYKA -EPCkKvbdCgMFgAzc -EOcLKvbdQvnDbkgc -EPCjjvbdDoCkLWbd -DnbkKvbdKCibpicY -EOcLKvbdhfibyViu -EOcLKvbdzQnliJwA -DncKjvbdEASImZwX -EPDLKvbdFkFTChNV -DnbjjvbdEuxoomKF -EOcKjvbdYqMeJMeR -DnbjjvbdgQBzvdYI -DoCjjvbdkxrrSxft -DnbjjvbdjuwNdCYX -EOcLKvbdfpBzwEXh -DoCkKvbdnHFYMmgZ -EOcKjvbdjlbMZeHP -DoCkKvbdmttzKjSG -EPDLKvbdzjUopDsU -EPDLKvbdsZlPraIO -EOcLKvbdLBLHMbYR -EPDLKvbdtbcVXVno -DoDLKvbdaaVeGQQX -EPCjjvbdWSOYCEkc -EObjjvbdxUmFQyMO -DoDLKvbdRbDdkiZL -DoCjjvbdhlFDnVCy -EPDKjvbdcTDKscia -EPCkKvbdjlbMZeGo -DncLKvbdCIkCKiGK -DoCjjvbdrbFmMGkZ -EObkKvbdQccAoqDr -DnbjjvbdTqRPVUgm -EPCkKvbdNrsufeUp -EOcLKvbdrMyjZLhJ -EPDLKvbdiifHimXr -DnbkKvbdpstHSRjt -EOcKjvbdZtIhxdSn -DnbkKvbdbhmKLGXY -DnbkKvbdkxsSSxft -DoCjjvbdTAFIhBnd -EObkKvbdUtMtGLvK -EPCjjvbdpstGrSLU -DncKjvbdxLXDgzyf -EOcKjvbdSCDdlIxk -EObkKvbdOFEUIiLE -DnbkKvbdjggLefNk -DncKjvbdliEUQtqa -EOcLKvbdFjdsDHlu -DncLKvbdeEnqavcK -EOcLKvbdnPyyVjyC -DoDKjvbdliDsptrB -DoCkKvbdrXQLbiZR -DncLKvbdFkErbhNV -DoDKjvbdTqROtthN -DoCkKvbdYSlAmUOx -DnbkKvbdKVuGDdgJ -EOcKjvbdvwLaWAvV -DoDLKvbdEObjjvbd -DnbkKvbdwXLaWBVu -DnbkKvbdmtuZjiqf -DoDKjvbdegkWRnRH -DoCkKvbdeXzUUSFz -DncLKvbdfNGXGmJk -DoCjjvbdEztQdlCi -EPCkKvbdEuyQPljF -EPCjjvbdrEEiQNvB -DnbkKvbdLqwNZtpz -EObkKvbdKeegbBQu -EObkKvbdvBEZSoFI -DoDLKvbdrXQLbhyR -DnbkKvbdbKlGPODA -DncLKvbdnCKXYOnV -EOcKjvbdjcMKpfuH -DoCkKvbdQdCaQRES -EPCkKvbdDncKjwCd -DoDLKvbdYlSDtNkm -EObkKvbdmbKXXnmu -EPCkKvbdjgfkfGOL -DnbkKvbdZyDjNcMS -EOcLKvbdkNCLyeHP -DncLKvbdVUMtGLuj -EOcKjvbdKVtedFGi -EPCjjvbdKRZeOenF -DoCjjvbdUQqPUthN -EPDKjvbdkMbLydgP -EObjjvbdVqmxBdlD -EPDKjvbdjAQGaPgK -DoCkKvbdTlVnaWPJ -EPCjjvbdwjvdHzzG -EObjjvbdBsBCtGWr -EPCjjvbdwuNEqZMO -DncLKvbdbrcKtEKB -EPCkKvbdFyVVAcxC -EPCkKvbdaSGCgsfL -EPDKjvbdrylQTBIO -DncKjvbdfSBWzlCo -EObjjvbdfRaWzlCo -DnbkKvbdsPvOjDWG -EPCjjvbdcbSlrAUN -EObkKvbdrWpLbhxq -EPCjjvbdhgKDZVjV -EOcKjvbdhlFDnUby -DoCkKvbdddoSBvcK -DoCkKvbdpssfrRkU -DoDLKvbdJutfEFGi -EObkKvbdEPDKkWcE -EOcKjvbdcJNJjevx -EPCjjvbdcTDKscia -DncKjvbdYlRcsmlN -EPDLKvbdkHgMFfNk -DoCkKvbdjbkjqGuH -EPDKjvbdTvMPjUAq -DnbkKvbdQYmAGsRj -EPCkKvbdKeegbApu -EPDKjvbdiLdcmtcZ -DoCkKvbdNeDshhjd -EOcLKvbdxnShXsIc -EPDLKvbdyOShXrhc -EObkKvbdbPgHELzd -DoCjjvbdDoCkKwDE -EOcLKvbdmbJvxPOV -DnbjjvbdkNBlZeHP -DnbkKvbdRXNdDMID -DncLKvbdXnRAYUvU -EObkKvbdBcpAuilf -EPDKjvbdSLYeuGkT -DoCjjvbdRaceLiYk -DncLKvbdZoNiFEzK -EOcLKvbdGLEsDIMu -DnbjjvbdnUuZkJqf -DoCkKvbdlqyUyrci -DoCkKvbdLGGHaaRV -DnbkKvbdmoyyWLYb -DncKjvbdMpYRWOGs -DnbjjvbdkyTRsYft -EObkKvbdjKFhJmXr -DnbjjvbdxLWcgzzG -DoCkKvbdxnShXrhc -DnbjjvbdRbEEkiZL -EOcLKvbdWWiXudEg -DoDLKvbdDjIKVxKA -DoDKjvbdgFkzNgHA -EPDLKvbdvvlAuaVu -EPDLKvbdauBfwkTh -DncLKvbdmIctQtrB -EPDKjvbdCDpBWJmG -DoDKjvbdvAcxsPEh -EOcKjvbdrJAKFNOe -EOcLKvbdbsDKscia -DncLKvbdAMhYsWzY -DncKjvbdddnrCXDK -EOcLKvbdkHflGGOL -DoDKjvbdbUafxKsh -DnbkKvbdNdctIiLE -EOcLKvbdvBDyTPEh -DoCjjvbdFejSOJUR -DnbkKvbdUQpntuHm -EObjjvbdTpqOttgm -DoDLKvbdddoSCXCj -DncLKvbdbVCHXkUI -EPCjjvbdKNAEZgVB -EPDKjvbdFjdsDIMu -DnbjjvbdpaIeAXHd -EOcLKvbdrDdhpOWB -EPDKjvbdIxUBhLpp -EPDKjvbdhkddOVCy -EPCkKvbdTkuoAuni -EPDLKvbdnPyxujxb -EObjjvbdfSBWzlCo -EPDKjvbdMuSrKmAX -EPDLKvbdmozYvKyC -DnbkKvbdZirhPfaf -EPCjjvbdNQXqWOHT -DncKjvbdZsiIyESn -DnbkKvbdURQnuUgm -DoCjjvbdkIHMFfOL -EPDKjvbdKfGHaaRV -DncLKvbdtcDUwVoP -EOcLKvbdxrnImRbH -EPDLKvbdozmdLYPA -DoDKjvbdUVkojUBR -DnbjjvbdqUUHRrLU -DoDLKvbdEARhmZvw -EOcLKvbdZHWdAOri -DoCjjvbdVUMtGLuj -EOcLKvbdmfeYNNfy -EPDKjvbdZirgogCG -DnbjjvbdEJhKVwjA -DnbkKvbdkVvmdBxX -DnbjjvbdvBEYsOeI -EPCkKvbdDoCjjwDE -DoCjjvbdRXNdClID -EPDKjvbdkxrrTZGt -EOcLKvbdZdxGzhJC -DoDLKvbdxnSgxSiD -DoDKjvbdIryAsMxM -DnbkKvbdTYKlNzjx -DncLKvbdIGfzZYXg -DncLKvbdQvnEClHc -DnbkKvbdqUTfrRkU -DoDKjvbdRDcAopdS -DoDKjvbdTfznMXWF -EOcLKvbdauCHYKtI -EObkKvbdNrsvHEtp -DoDLKvbdDihJvXjA -DnbjjvbdliDtRVRa -DncKjvbdgFlZmfgA -DncLKvbdmJDsptqa -DncKjvbdfoazvdXh -EOcKjvbdJXtBgkpp -EPCkKvbdqUUGrSKt -EPDKjvbdrMzJyLgi -EPCjjvbdiGjDYuiu -EOcLKvbdkWXNcaww -EOcLKvbdxxIjBoyk -DnbkKvbdePErjssr -DnbjjvbdIryArmYM -EOcLKvbdRMwayNtz -EOcLKvbdRkZGUgKs -DoDKjvbdZLrEUOMN -DnbkKvbdDHMFgAzc -DnbkKvbdwXMBVaVu -DnbjjvbddeOrCXDK -EPDLKvbdwuMeQyLn -EPCjjvbdBhjbLIej -EPDKjvbdaNLCSuMg -EPCjjvbdBhkCKhej -EPCkKvbdptUGrSKt -EObkKvbdVTmTfLvK -DoCkKvbdDoDKkXDE -DnbjjvbdfoazvdYI -DnbkKvbdatbHYKtI -DnbkKvbdVUMtGLuj -EPDKjvbdeEoRavbj -DoCkKvbdJpzFPGNe -DnbjjvbdNHDQNQUk -DncKjvbdYNqAXuWU -EPCkKvbdZnnIddzK -EObkKvbdYlRdTnMN -EPDKjvbdEzspdkcJ -DoDLKvbdCIkBjhfK -EObjjvbdTkuoAvOi -DoCkKvbdhkdcnUby -EPCjjvbdHfgZyYXg -DncLKvbdbsCkTdKB -DoCjjvbdLqwMzVQz -DoDLKvbdRkYfUgLT -EOcLKvbdbQHHELzd -EPCkKvbdbVCGxLTh -EObjjvbdmSYuZsEJ -DoDKjvbdssRsYyeD -EPDKjvbdLrWlytpz -DncKjvbdJTZBSlxM -DnbkKvbdxrnJMrBg -EPCjjvbdxZgfFxFS -EObkKvbdUQpnuVIN -EObkKvbdzjUpQESt -EObjjvbduaDxsPFI -DoDLKvbdkyTRsYft -DoDKjvbdyTOImRbH -EObkKvbdegkWRnQg -DoCjjvbdaSFbgsek -DoDKjvbdrylPsAhO -DoCjjvbdgGMZnGgA -EPCkKvbdlqyUzSdJ -DncKjvbdwNWAMdFN -EPDKjvbdTlWPAuoJ -EOcLKvbdUMWPAuoJ -DnbjjvbddZxowxqC -EPCkKvbdEuyQPlie -DoDKjvbdVAaqSqSZ -EPDLKvbdwtldpxlO -EOcLKvbdrRtkNkBN -DncKjvbdJqZeOenF -DncKjvbdfHkWSNqH -DoCkKvbdnUuZjirG -EOcKjvbdsCFmMGkZ -DoDLKvbdwzIFfYEr -EOcLKvbdqqtjmjaN -DoCjjvbdrbGNLgKy -EPDKjvbdNHComQUk -DnbkKvbdIMBznWqL -EPCjjvbdEKHivXjA -EPDLKvbdVhYWYGxz -EPDLKvbdZxcjNblS -DnbjjvbdJpzEoFme -EPDKjvbderBWzkcP -DoDLKvbdpssgRrKt -EObkKvbdtbbtvuoP -EOcLKvbdqGDeUWAh -DoDKjvbdlZSrTYft -EOcKjvbdFfKRmhtR -DnbkKvbdNPxRVnGs -EPDLKvbdZshhxcsO -EPCjjvbdMoxQvNgT -EPCjjvbdKaKfmBxR -EPDLKvbdSwjkmzjx -DoCkKvbdjbkkRGtg -DoDKjvbdfoazwDxI -DoDKjvbdqwQLbhxq -EPCkKvbdZtIhyETO -DncLKvbdmpZxukYb -EOcKjvbdMoxQumgT -DoCjjvbdLYqJrzuG -EObjjvbdnGeXlmfy -EPDLKvbdyzeOSHhh -EOcLKvbdiZuGMQmf -EPCkKvbdWSNwadkc -DncKjvbdhfibyVjV -EOcKjvbdQmXbZOUz -DoCjjvbdSKxeuGkT -DnbjjvbdbrbkUDjB -EPDLKvbdJcKCqJbx -DnbjjvbdjSziTLJz -EOcKjvbdZxdKNcMS -DoCkKvbdelfWfmJk -DoCjjvbdFjeScHlu -EPDLKvbdnCJvwnnV -EPDKjvbdNrsufduQ -DnbkKvbdjcLjqGuH -EObjjvbdmbKXYOnV -DoCjjvbdRacdkiYk -EObkKvbdaaVdfQQX -DoCkKvbdJpydnfOF -DoCkKvbduCbtwVoP -DoDKjvbdpxnhHRDx -EOcKjvbdmJEUQtqa -EPDLKvbdRkZGVGjs -EPDKjvbdEObjkXCd -EObjjvbdCTAbtGWr -DoCkKvbdqTsfrSKt -DncLKvbdaMkBsUmH -DncLKvbdqlyixlIJ -EPCkKvbdvwMAuaVu -DncKjvbdiUzEwRuC -DoDKjvbdiUzFWrVC -DnbkKvbdkDMKpfuH -EObkKvbdZnnJFEzK -EObkKvbdWWhwudEg -DoCjjvbdypoNIiwA -DoCjjvbdShyiqABM -DnbjjvbdOFEThhkE -DnbjjvbdRXNcbkgc -DoCkKvbdqUTfrSKt -EPDLKvbdfNGWgMjL -EPDLKvbdGFirOJUR -EOcKjvbdSCEFMJYk -EOcKjvbdmpZxukYb -EPDLKvbdrafNLgKy -DnbkKvbdmJDsqUrB -DnbjjvbdjKFgimXr -EOcLKvbdVYgtZjoO -EObkKvbdTvMPjUBR -EOcLKvbdSxKkmzjx -DoDKjvbdnPzYvKxb -EPCjjvbdaRfDITek -EObkKvbdjKGIJmXr -DoCjjvbdliEURVSB -EObkKvbdFaOqYizm -EOcLKvbdqGEEsuaI -DoCjjvbdZQleJNEq -DoCjjvbdbKlFnnDA -DnbjjvbdWIXuwfxz -EPDLKvbdNGcPmPuL -DoCjjvbdBsBDTevr -DnbkKvbdczYoxYpb -EObjjvbdJutedEfi -DncLKvbdGFirNhsq -EPDKjvbdUaCQrqRy -EPCjjvbdQwNdDMID -EPDLKvbdtSrSyZeD -DnbkKvbdNHDQMpUk -DoDKjvbdZirgofaf -EObkKvbdrpWOibuf -DoCkKvbdwygfFxEr -EPCjjvbdSwjlNzjx -DnbkKvbdjKGHjMxS -DncLKvbdijFhKNXr -EOcKjvbdddoRavbj -EPDLKvbdmIdTpuSB -DncLKvbdiiehJmYS -EObkKvbdjcLkQgUg -DoDKjvbdsQVoJbuf -EObjjvbdhzUfMQmf -DnbkKvbdcImKKfWx -EObkKvbdbQHHELzd -DnbjjvbdWWiXuceH -EPDKjvbdjJegjNXr -EPCjjvbdZyEKNblS -DoDKjvbdLqvlzVQz -EPDLKvbdZRNEhmFR -DnbkKvbdGcjuibJj -EOcLKvbdGAnpxizm -EPCjjvbdkVvnDaww -EOcKjvbdHffzZXwg -DoCkKvbdKeehCAqV -EPCjjvbdHEKuiajK -EOcKjvbdUtMselWK -EPDKjvbdEXwlTstM -EPDKjvbdsrrSxzFD -EOcKjvbdEztQeMDJ -EPCkKvbddoFSjstS -DoCkKvbdSCEElIyL -DncKjvbdFVxpQNJe -DnbjjvbdXmqAYUut -DoCjjvbdiZtfLpmf -DoDKjvbdwygeexEr -EOcLKvbdiUyeXSUb -DncKjvbdsZkoraIO -EOcLKvbdACrYJyhp -EOcLKvbdTlVoBVoJ -EPCkKvbdqZPHfqDx -DnbkKvbdmJDsptqa -DncKjvbdhkeDnUcZ -EPDKjvbdURQoUtgm -EPDKjvbdjAQHAogK -EObjjvbdCIkCKhfK -EOcKjvbdYzbfRjWZ -DnbkKvbdWRnYCEkc -DncKjvbdyzeORgiI -EObjjvbdEPCkLWbd -DoDLKvbdNHComPuL -DnbkKvbdaRebhUFk -DnbkKvbdhlEcmtby -EOcLKvbdliETqUrB -EPDKjvbdIxTbHkqQ -DncLKvbdCEPaVjNG -EOcLKvbdIjEAJogE -DoCkKvbdsZkpSaHn -EPDLKvbdEXxLtTtM -DncKjvbdwXMAvAuu -EPDKjvbdakMGPODA -EPCkKvbdauBfxKsh -EOcKjvbdCJKakJFj -EPCkKvbdyXhjBozL -DoDLKvbdkWWnDbYX -DncKjvbdEPCjkXDE -DoDKjvbdlqxtzTDi -EPCjjvbdyTOJNSBg -DoCkKvbdnGeYMmgZ -EPCkKvbdaSFbhUFk -EObjjvbdnCKWxPNu -DoCjjvbdrWpLbhyR -EPDLKvbdmRxtyrci -DnbjjvbdSBdElJZL -DnbkKvbdrXQLbiYq -DoDLKvbdWHwuwfxz -DoCjjvbdZRNFJNEq -DncKjvbdUVkpJsaR -DoCjjvbdbiMijfXY -EPDKjvbdVTmTekvK -DoCjjvbdeXytTrFz -DoDLKvbdyYJKCQZk -DoDLKvbdczZQYZQb -EObjjvbdRadFMJZL -DncLKvbdkVvnECYX -DncKjvbduaDySneI -DnbjjvbdwuNFQyMO -DncLKvbdsrqrxzEc -DoDLKvbdcSbjtEKB -EPCjjvbdZtJIyETO -DoDLKvbdJvUfDdgJ -DnbjjvbdhbPDFWqR -DncKjvbdcyyQYYpb -DoDKjvbdWSNwbFMD -DoCjjvbdmajXXoNu -EPCkKvbdxZgeexEr -EOcKjvbdxsOIlrBg -DoDKjvbdZyEJmbkr -DncLKvbdTkunaVni -EOcLKvbdUQpoUthN -DoDLKvbdyNsHxTJD -DncKjvbdEztRElCi -DnbkKvbdXnRAYVVt -DnbjjvbdqAheAWgd -DnbkKvbdCJLBkIfK -EPDKjvbdUGzmkwWF -EPCkKvbdSiZiqABM -EPDLKvbdidkGtoAO -EOcLKvbdYlSDsnLm -EPDKjvbdMSWmZtpz -DoDKjvbdlhdURVRa -EOcLKvbdOYOuzdOU -DncLKvbdrafMlGkZ -EObjjvbdrylPraHn -DnbjjvbdDncLKwCd -DoCkKvbdoznELXoA -DoCkKvbdmttykJrG -DoDLKvbdBvzciEov -EPCjjvbdeXzUUSFz -DoDKjvbdtunYKQsA -EObjjvbdqceJQNvB -EOcLKvbdqTtGqqkU -DoCkKvbdiGjDYujV -EPCkKvbdRWnEDLhD -EOcLKvbdcSbjtDia -DncLKvbdTqROuVHm -EOcKjvbdiifIKMxS -EObkKvbdlYrqsZGt -DoDKjvbdSBdFLhxk -DnbkKvbdVUNUFkuj -DoCjjvbdrzLpSaIO -DoDKjvbdzGxlANFX -DoDLKvbdfHjuqmpg -EPDKjvbdZRMeIldq -DncKjvbdMfcPlpVL -DncKjvbdxKwDgzzG -EOcLKvbdYzbfRjVy -EObkKvbdWSNwbElD -DoCkKvbdeFOrCXCj -EObjjvbdbKlGOmcA -EOcKjvbdDxXktUTl -EPCjjvbdvBDySneI -EPDKjvbdLFehCBRV -DoDLKvbdiZuFlROG -EPDKjvbdDoDLKvbd -DoCjjvbdQwNdCkhD -DoCjjvbdCJLBkIfK -DnbjjvbdlqyUzSci -DncLKvbdNHCpMpUk -EOcKjvbdiMFEOVCy -DoCkKvbdnGeYNOGy -DnbkKvbdZoOIddzK -EOcKjvbdFpATWffZ -DoDKjvbdeOeTKtTr -DnbjjvbdGGKSNhsq -EOcKjvbdyXiKCPyk -DoCjjvbdeAURNYKG -DoDKjvbdpssfrRjt -EPDKjvbdnVVZjjRf -EOcKjvbdiZuGMQmf -EOcLKvbdNHDPlotk -DnbjjvbduCbtwVoP -EOcKjvbdxUleQxlO -DoDKjvbdnHFYMnGy -DnbjjvbdUVlPitAq -EPCkKvbdjAPgAofj -DoCkKvbdTlVoAuoJ -EPCkKvbdmSYtyrdJ -EPDKjvbdBsAcTevr -EPCkKvbdUyITzKnn -DnbjjvbdbQHGdLzd -EOcLKvbdezuyFIsw -DoDLKvbdEXwlTtUM -EOcKjvbdKyRJrztf -DnbjjvbdtTSSxzEc -DnbjjvbdHDjujBij -DoCjjvbdsQVnicWG -EObkKvbdZsiJYcrn -EPDLKvbdUtNUFkuj -DoDKjvbdNPwpumfs -EOcKjvbdSBcdlJZL -EPDLKvbdmfeXlmfy -DncKjvbdIsZAsNXl -DncLKvbdmJDsptrB -DncKjvbdGYuUaEXb -DncLKvbdyYJJbPzL -DnbkKvbdrpVnicWG -EPCjjvbdTqQoVUgm -DoDLKvbdFVyPpMjF -EObkKvbdZnnIeEyj -EObkKvbdbUagYKtI -DoCkKvbdqGDdtWBI -EPDLKvbdFVxpQNKF -DncLKvbdkWXNdCYX -EPDKjvbddwystRez -EOcKjvbdaNKasUlg -DnbkKvbdNdctIhjd -EPCkKvbdatagYKsh -DoCkKvbdfNFvgMik -EObjjvbdJYTbIMQp -DoCjjvbdEYYMTtTl -DncKjvbdWRmxCElD -EPCkKvbdbsCjsdKB -EOcLKvbdFVxpQMie -EObkKvbdpaJFAWgd -EPDLKvbdijGHimXr -EPCjjvbdlhctQtqa -EObjjvbdFVxoolie -DncKjvbdrJAKEmOe -DnbkKvbdzQnmIiwA -EPCkKvbdkHfkeemk -DnbjjvbdLGGHaaQu -DnbkKvbdOSsugEtp -DnbkKvbdZtIiYcrn -DoCjjvbdQZNAGsSK -EObjjvbdNPxRWOGs -DoCkKvbdVUMsfLuj -DnbjjvbdmJETqUqa -EPDLKvbdBsAcUFvr -EOcLKvbdIsZArlwl -EPCjjvbdNddTiJKd -DoDKjvbdyXhiaozL -DncLKvbdjmCLzEfo -EOcLKvbdRadElJYk -DncLKvbdjbkkQfuH -EObkKvbdXFxzUAOs -DncLKvbdxZhGFwdr -DoCjjvbdNsTugEuQ -EObjjvbdRbDdlIyL -DoCkKvbdePEsLUUS -DoCjjvbdOStVgFVQ -EPDLKvbdUtMtGLuj -EObjjvbdFjdrbhMu -EOcKjvbddeOrBwCj -DnbjjvbdxUmFRYkn -DnbjjvbdCEQBVimG -EOcLKvbdvAdZTPEh -EPCkKvbdGcjvJaij -EPCjjvbdOFETiIjd -EOcLKvbdemGWgNKL -DoCkKvbdqTsfrRkU -DncLKvbdbrcKsdKB -EPDLKvbdTAFIhBoE -DoCjjvbdKCjCqJbx -DnbjjvbdNsUWHFUp -EPDKjvbdkWWmcaxX -EPDLKvbdbKlFoNcA -DoCjjvbdkIGkefNk -EPCkKvbdXFyZtAPT -EPDKjvbdpxnhGpcx -DoDLKvbdhanbeWqR -EOcKjvbdliEUQtqa -EObjjvbdbBVeFpPw -EObkKvbdQdDApQdS -EPDLKvbdnQZyVkZC -EObjjvbdhbOcEwQq -DnbjjvbdBdPaWKMf -DoCjjvbdCTAbtGWr -EPCjjvbdEvYpQMie -EObjjvbdDxYLtUTl -EObkKvbdCTBDTfXS -EPCjjvbdmpZxvKyC -EPCkKvbdRzKITDWA -EObkKvbdemGXGmJk -EOcLKvbdIryAsNXl -DoDKjvbdkWXNcaww -EObkKvbddCTNSAUN -DncKjvbdvBDxroEh -DncLKvbdiCPDEwRR -EObjjvbdRkZGVHLT -DoCjjvbdFkFSbhNV -EPDLKvbdwjvdHzzG -DoDLKvbdqquKmkBN -EOcKjvbdsQVoJcVf -EPCjjvbdYlSEUOMN -EObkKvbdjKGIKMxS -DncLKvbdRpUGifDw -EObkKvbdEuxooljF -EPDLKvbdzitpQETU -EOcKjvbdTvLpKUAq -DoCjjvbdrSVKmkAm -EOcLKvbdEvZQPmJe -EPCkKvbdfelZnHHA -EOcLKvbdjhGlGGNk -DncKjvbdCEPaWJmG -DncLKvbdrpVnjDWG -DoDLKvbdeOeTKtUS -DoCkKvbdtbbuXVno -EObkKvbdYpleJMeR -DnbjjvbdiCPDEvqR -DoDLKvbdUslsekuj -DnbkKvbdGBPQyJzm -EPCkKvbdtbcUwVoP -DoDKjvbddxZssrFz -DncLKvbdkIGlGFmk -EPCkKvbdhuZdwRtb -EObkKvbdehLWSOQg -DoCkKvbdatafwjsh -DoDKjvbdhfjCyViu -DoCjjvbdFyUuAcxC -EObkKvbdUMWPAvPJ -EPDLKvbdxxIjBoyk -DnbjjvbdMRvlytpz -EPCkKvbdDxYLtUTl -DnbjjvbdiVZeXSUb -DoCjjvbdffMZmgHA -EPDLKvbdnPyyVkYb -EPCkKvbdZtIhyETO -DncKjvbdRECaPqDr -EPDKjvbdVrNxBeMD -DnbkKvbdKVuFdFGi -EOcLKvbdrzLosAgn -EPDKjvbdLLAgvAKZ -EOcLKvbdLYpirztf -DncKjvbdnGeXlnHZ -EOcLKvbdQdDAopdS -DnbkKvbdptTfrRkU -DoCjjvbdqGEFUVaI -DncLKvbdrDeIomvB -DoDLKvbdyOTHxSiD -EOcLKvbdRpTfjGDw -DoDLKvbdzitpPdTU -DnbjjvbdUxhTykOn -EOcKjvbdGFjSNhtR -EObkKvbdidkGuPAO -EObjjvbdVAapsQrZ -EPDLKvbdQccAopdS -EObjjvbdmozYukZC -EOcKjvbdGFjSOIsq -EPCkKvbdyzeNrHiI -DncLKvbdEOcKjvcE -DncLKvbdLFfIBaQu -DoDKjvbdtlXwBUBX -DoCjjvbdeOeTLTsr -DncKjvbdiZuGLpnG -DoCkKvbdWRnYBdkc -DncLKvbduCbtvvOo -DnbkKvbdGGKRnIsq -EOcLKvbdVTmUFkuj -EOcKjvbdFkEsDHlu -DoDKjvbdQwNcbkgc -DncLKvbdWRmwbFLc -DnbjjvbdHlBzmwRL -EPDKjvbdDncKjwCd -EObkKvbdGBPRYizm -EOcKjvbdqrVLNjaN -EObjjvbdqFceUVaI -DoCkKvbdZQmFImFR -EPDLKvbdmIctRVSB -EObkKvbdjAQHBPfj -EObjjvbdrEFIonWB -DnbjjvbdsPuoKCuf -DoDKjvbdtbbuXWPP -EPDLKvbdOStWGduQ -DoCkKvbdUQqPUuIN -EPDLKvbdwyhFewdr -EObkKvbdShyiqAAl -EPDLKvbdGZUuBEXb -EPCkKvbdHffyyXwg -EObjjvbdGBOpyJzm -EObkKvbdZirgpGaf -EObkKvbdRjxfUfkT -EPDKjvbdZHWdAPSi -DnbjjvbdVrOYBdkc -DoCjjvbdGGKSNhsq -EOcKjvbdJqZeOenF -EOcLKvbddBsNSAUN -DncKjvbdZtJJYcsO -EPDKjvbdBraDTevr -DoCkKvbdRDcApQdS -EObjjvbdGGJrNiTq -DoCjjvbdGLFTCgmV -DoCjjvbdtlXwBUAw -DncLKvbdQwNdClHc -DoDLKvbdygYlAMeX -EPDLKvbdTvMQKTaR -EPCjjvbdiMFDnVDZ -DoCjjvbdiBoDFXRR -EObkKvbdUQqOuUgm -EOcKjvbdaMkBsVNH -EObkKvbdwuNEqZMO -EObjjvbdLAkGlbXq -EObkKvbdkCkkQgUg -DncLKvbdVqnYCFLc -EPCkKvbdxVMeRZLn -DncLKvbdRXOEClHc -EObjjvbdvwMAvBWV -EObjjvbdIwsahLpp -EObjjvbdKDKCpicY -DoDKjvbdlrZUzTEJ -EOcLKvbdyYIjBpZk -DncLKvbdxsNhlqag -EPDKjvbdgPazvdXh -EPDLKvbdbKlGPNcA -DoCjjvbdqUUHSRjt -DnbkKvbdNeDsiJKd -DnbjjvbdqGEFTvAh -DoDKjvbdnUtykKRf -EPDKjvbdZtJJZDrn -DoCjjvbdmRxtysEJ -EOcKjvbdQmXbYnUz -EPDKjvbdjmCLzFGo -DncKjvbdsBfMkfkZ -EPCkKvbdFVxpPlie -DnbkKvbdZLrEUOMN -DoCkKvbdEOcKkXDE -EObkKvbdvBEYsPEh -EPDKjvbdcJMjLGXY -EOcLKvbdOYPVzcnU -DnbkKvbdsQWOjDWG -EOcLKvbdfHjvRnRH -DoDLKvbdmbKXYPOV -DncKjvbdrpWPJcVf -EOcKjvbdURROuUgm -DnbkKvbdrovOicWG -EObjjvbdLYpirzuG -DnbjjvbdGQASvgGZ -DnbkKvbdYzcFqjVy -DncKjvbdBsBCtFvr -DoDLKvbdYgXEAOri -EOcLKvbdqTsfqqjt -DncKjvbdPIAYZAYa -EOcLKvbdypnliJwA -DnbkKvbdhyuGLqNf -EOcLKvbdjhGkfGOL -DncKjvbdjblLRGuH -EPCjjvbdxwhibPyk -EOcKjvbdBhkCLIfK -DnbjjvbdJTZArlxM -DoCkKvbdRjxetgKs -EObkKvbdiUyeWrVC -EOcKjvbdwXLaWAuu -EPDLKvbdssSTZZdc -EObkKvbdcSbjtDia -DncKjvbdgGMZnHHA -DoCkKvbdatafwkUI -DncLKvbdnCKWxPNu -EObjjvbdyOShXrhc -EPCjjvbdpyPHfqEY -DoDKjvbdbUbGxKsh -EOcKjvbdypoNJKXA -EObkKvbdyTOJMrBg -DoDLKvbdiZtfLpmf -EPCkKvbdLGFgbBQu -EOcLKvbdCJLBkJFj -DnbkKvbdUxgszLPO -DoDKjvbdUQqPVVHm -EPCjjvbdijGIKNYS -EPDKjvbdCJKajhej -EPDLKvbduoTzqLPU -DnbjjvbdJTZBTMwl -EOcLKvbdLAjfmBwq -DoDLKvbdQwOECkhD -DoCjjvbdQYmAHTSK -DoDKjvbdEuyQQMjF -DoDKjvbdZdwfzhIb -EOcKjvbdyTOJNRag -DoDLKvbdbBVdfQPw -DoCkKvbdbVBfxLUI -DncKjvbdcIljKevx -EOcLKvbdhgKDZViu -EObjjvbdOTUWHEtp -DncKjvbdZRMeIldq -DnbjjvbdkHgMGGNk -EOcLKvbdZMSETmlN -EPCkKvbdjcMKpfuH -EPDLKvbdiBncFXQq -EObjjvbdJcKCqKDY -DoDKjvbdQwOEClID -EPCkKvbdRpUHJecw -DoDKjvbdZjSgogBf -DoCkKvbdEObkKvbd -DoDLKvbdDwwktUTl -DoCkKvbdSKyGVHKs -DnbkKvbdZMSETnMN -DncLKvbdiZuGLpmf -EObjjvbdjcLjpgVH -EOcLKvbdYzcFqjVy -EPCjjvbdQvnDcLhD -DoCkKvbdDihJvYKA -EPDLKvbdJqZeOenF -EOcKjvbdWXJXvDdg -DoCjjvbdznpQeCkx -EPCjjvbdjJehJmXr -DoDKjvbdmSYuZsDi -DoDKjvbdFVyPolie -DnbjjvbdULvPAvOi -DncKjvbdwzIGFwdr -DnbkKvbdOEcsiJKd -EPCkKvbdEJhJuwjA -EObkKvbdYSkaNUOx -EObkKvbddoFSkTtS -DoDLKvbdFkFTDHlu -DoCjjvbddwzTtRez -EOcLKvbdDwwlUTtM -DoDKjvbdHDjvJaij -EObkKvbdyTOIlrBg -EOcLKvbdtSqsYzFD -EObkKvbduVmwjQsA -EPDKjvbdbiMjKfXY -DncLKvbdsQWPKDWG -DncLKvbdRbEElIyL -DnbjjvbdGKeTDHlu -EPCkKvbdrpWOjDWG -EObjjvbdVwJYWEFH -EPCjjvbdvBDySoFI -EPCkKvbdZMSDsmkm -EObkKvbdqYnhHREY -EObjjvbdyqPMiJwA -DncLKvbdCTBCtGXS -EPCkKvbdfekynGgA -EPCkKvbdvvkaWBVu -DoCjjvbdGZUuAdYC -DoDKjvbdpyOgfqDx -EPCjjvbdePFTKstS -EOcLKvbdVviXudFH -EPCkKvbddZyQYZQb -DnbkKvbdUaCQrqRy -EPDLKvbdQwNdDMID -DncKjvbdUaCRTQrZ -DnbjjvbdHDkWJbKK -EOcKjvbdOTTvGduQ -DnbjjvbdssRrxzEc -EObjjvbdezuxdiTw -EOcLKvbdGLFTCgmV -EPDLKvbdUxgtZkOn -EOcLKvbdbrbjscia -DnbjjvbdjJfHimXr -EOcKjvbdjcMLQgUg -DoDKjvbdlYrqrxft -EPDKjvbdGYttaEXb -EOcLKvbdhbPDEwQq -EOcKjvbdvAcxroEh -DoDKjvbdVgxVxHYz -DoCkKvbdTqQnuVIN -DoCjjvbdrXQMCiZR -EOcKjvbdMSWlytpz -DoCjjvbdBiLCLJFj -EObkKvbdUyHtZkPO -DoDLKvbdGcjujCJj -EPCjjvbdfkGzbfAE -DoCjjvbdDoCjjwDE -DnbkKvbdqGDdsvAh -DoDLKvbdjvXNdBww -EOcKjvbdANHySvyx -DoCjjvbdeJjRvUzn -DncKjvbdqUTgRqkU -DncLKvbdEvZQPljF -DnbjjvbdSPsgKFdX -EOcKjvbdGLFScHmV -EPCjjvbdqUTgRqkU -EPCkKvbdNxOuzdOU -DoCkKvbdpfEEtWBI -EOcLKvbdDwwlTtTl -EPCjjvbdSZjITDWA -DncKjvbdQwNcblID -DnbjjvbdijGIKMwr -DnbjjvbdYpldiMdq -DncLKvbdemGXHNKL -EPCkKvbdEKHjWYKA -DoDLKvbdwXMBWAvV -DnbjjvbdQwOEClHc -DnbkKvbdbUbHYKtI -DncLKvbdCSaCtFvr -DncLKvbdEuyPpNJe -EPDKjvbdFVyPolie -DncKjvbddneSkTtS -EOcKjvbdZtJIxcsO -EOcKjvbdiGicZWJu -DncLKvbdOFDtIiLE -DoDLKvbdOSsufduQ -DnbkKvbdMfcPmQVL -EObjjvbdiUzEwSVC -DoCkKvbdCIkBkJFj -DncLKvbdYkrETmlN -EObjjvbdqZOggREY -EPCkKvbdHDkViajK -DnbkKvbdbsDLTdKB -EPDLKvbdlqxtzTDi -DncKjvbdLGFgbAqV -EObjjvbdoAKztHcn -EPDLKvbdRXODblID -DoCjjvbdIHGzYwxH -EObkKvbdNPwqVnHT -EOcKjvbdxrnImRag -EOcLKvbdiLddNuCy -DoCkKvbdkMakzEfo -EObkKvbdnPyxukYb -EPCjjvbdZdwfzgiC -EPCkKvbdnHEwmNfy -EObjjvbdySmiNRag -EOcKjvbdzeZnzdyp -EPCjjvbdJvVFdEgJ -EOcKjvbdZQldiMeR -EOcKjvbdFyVVAdYC -DncKjvbdJXsahMRQ -DnbjjvbdfNGXGljL -EOcLKvbdwWlAvAvV -DncLKvbdkIHLefNk -DncLKvbdliDtQtrB -DoCkKvbdxZgefXdr -DncKjvbdCWzchdpW -EPCkKvbdpyPHfpdY -EOcKjvbdhbOcFWqR -DnbjjvbdzjUpPdSt -DoDLKvbdZMRdUOLm -DncLKvbdVwJXucdg -EPCjjvbdWXIxVcdg -DnbkKvbdMpXpvOHT -DncLKvbdRkZGVHKs -DoDKjvbdmpZyWKxb -DoCjjvbdegkWRmpg -DncLKvbdyzeOSHhh -EPDLKvbdRECaPpdS -EPDKjvbdqvpLcJZR -DoCjjvbdRDbaPqDr -EObjjvbdRECaPqDr -EOcLKvbdsBfNLgLZ -DncKjvbdZyEKOCkr -DnbkKvbdSPsgJfEX -EPDKjvbdZRMdiMeR -EPDLKvbdDwwktTsl -EPDLKvbdLhbLpxAS -EPDKjvbdZirgpHBf -DoCkKvbdmtuZkJqf -DnbjjvbdwWkaWAuu -DnbjjvbdRDcBPqES -DnbkKvbdyzeNqgiI -EObjjvbdYkrEUOLm -DoCkKvbdmtuZkKRf -DoCkKvbdNdctIhkE -DnbjjvbdhytfLqOG -EOcLKvbddZyPwxpb -EPCjjvbdYzbeqivZ -EOcKjvbdwygfGXeS -EOcLKvbdRosfifEX -EPCkKvbdznopdbkx -EObkKvbdVBBqSqSZ -EObjjvbdQlxCZNtz -EPCkKvbdhlFDmtby -DoDLKvbdCDpAvJmG -EPDKjvbddeOrCXDK -EOcLKvbdrovOjDWG -DnbkKvbdIGfyyYYH -EObkKvbdmbKWwnmu -EOcLKvbdkDLjqGuH -EPDLKvbdqrUkNjaN -EPDKjvbduDDVXWPP -EObjjvbdZnnJFEzK -DnbjjvbdaRfCgtGL -DoCkKvbdGKdsDHlu -DncKjvbdqlyiyMHi -DoDLKvbdSLYetgLT -DnbkKvbdZQleJNEq -EOcLKvbdZLrETnMN -DnbjjvbdiUydwRuC -EObjjvbdnPzYvLYb -EPCjjvbdGYuUaEYC -EObjjvbdACqwiyiQ -DncKjvbdIHGzZYXg -DncKjvbdxrnIlqag -DnbjjvbdySmhlqag -DoCjjvbdSCEFMJZL -EObjjvbdSKxfUfjs -DnbjjvbdnUtyjjRf -DncLKvbdkyTRsZGt -DoDLKvbdWRnXbElD -EOcKjvbdjvXNcbYX -EOcKjvbddjKSWUzn -DoDKjvbdvBDxrneI -EOcLKvbddndsKtTr -DoDLKvbdZjTHpGbG -DnbkKvbdpfDdsuaI -EPCkKvbdfMfWgNJk -DoCkKvbdjJegjNXr -DoDKjvbdcTDLTdKB -EPDLKvbdwzHfFxEr -DncKjvbdfMfWgMik -DnbkKvbdrbFllGkZ -EPCkKvbdCIkCLJGK -EObjjvbduDDUvvOo -EOcKjvbdDxYMUTsl -EOcLKvbdsPvOibuf -DncKjvbdUsltGLvK -EPCjjvbdyOShYTIc -DoDKjvbduaEZSoEh -DncKjvbdLrXMzUpz -DoCkKvbdNsTufeUp -EObkKvbdLGGIBaQu -EPCjjvbdmSZVZsEJ -DncLKvbdQdDAoqDr -DoCkKvbdKCicRJbx -EPCkKvbdxwhibQZk -DoDKjvbdTvMQJsaR -DoCkKvbdYzcGSJuy -DnbkKvbdwyhGFwdr -DoCjjvbdEOcLKwDE -DoCkKvbdGGKRmhtR -EOcLKvbdrzMQTAgn -DoDLKvbdJvVFceHJ -DnbkKvbdfMfWfmJk -EPCkKvbdmajWwnmu -EPCjjvbdxrmiMqag -EOcKjvbdqUTfqqkU -EObkKvbdoAKztHcn -EObkKvbdkyTSTZHU -EPCjjvbdiCOcEwRR -DnbkKvbdGZUtaDwb -EPCjjvbdYORAXuWU -DoCkKvbdULvPAuoJ -DnbjjvbdcSbjscjB -DoDKjvbdLrXMytpz -DncKjvbdIryBTNYM -DoCjjvbdZyDinCkr -EPDLKvbdZoOJFEyj -DncLKvbdajkfOmcA -EPDLKvbdRNYCYmtz -DoCkKvbddePRawDK -EOcKjvbdbUbHYKtI -EPCjjvbdbrbjscjB -EPDKjvbdKDJcRKCx -EObjjvbdqcdiQOVa -EPDKjvbdZjTIPgBf -DnbjjvbdrSUjmjaN -DnbjjvbdEXxLsstM -EPCkKvbdFjeSbglu -DnbkKvbdLqwMytpz -DoDKjvbdUGznMXVe -EObkKvbdpstHRrLU -DoDKjvbdYTLaNUPY -DnbkKvbdGKdrbhNV -EObjjvbdRMxCZNtz -DncLKvbdDihJuwjA -EPCjjvbdOFDtJIkE -DnbkKvbdliEUQuSB -DoDKjvbdkCkkQftg -EPCkKvbdGZVVAcwb -EObjjvbdkyTSSxgU -EPDKjvbdIryBSlxM -EOcKjvbdWIXvXfxz -DoDLKvbdhfjCyWKV -DoDKjvbdNQXpumfs -DncKjvbdiMEcnVCy -EPDLKvbdxVMeRZLn -EPCkKvbdDoDKjwDE -DnbkKvbdSCEFLiZL -DoCjjvbdqYoHgQcx -EObjjvbdxZhFexFS -EOcLKvbdkDMLRGuH -EPCkKvbdVwJXvDdg -DoCjjvbdjhHLefOL -EOcLKvbdiCOcFWpq -DnbjjvbdrovOjCvG -DncLKvbdRzKHsCvA -EPCkKvbdDoDLKwDE -EOcKjvbdrNZjZLhJ -EObjjvbdTAFIhBoE -DncKjvbdlqyVZsDi -DncLKvbdjggMFenL -EPDLKvbdUsltGMWK -DoCjjvbdkyTRsZGt -EOcLKvbdrzMPsBHn -EPCkKvbddZxpYYpb -DncLKvbdGKdsCgmV -DnbkKvbdvAdYsPEh -DoDLKvbdqUUGrSKt -EPCjjvbdxnTHxTIc -EOcKjvbdZisIQGaf -DncLKvbdBhjbLJFj -DoCkKvbdJSyBTNYM -DnbjjvbdmfdwlmgZ -EOcLKvbdJcJcRJbx -DncLKvbdmoyyWLYb -EObjjvbdSKxfUfkT -EObjjvbdlAlnmALA -DoDLKvbdTlVnaVoJ -EOcKjvbdnCKWwnnV -EPCjjvbdjbkkRGtg -EPCjjvbdULuoBVoJ -EPDKjvbdwMvAMceN -DnbkKvbdznopdcLx -EPCkKvbdeuzwoizs -EPCjjvbdpssfrRjt -EOcKjvbdiGibyWJu -DnbkKvbdYSlBNToY -EPDKjvbdkVwNcbYX -DoCjjvbdsPuoJcVf -DnbkKvbdrbGNLgLZ -DnbkKvbdRbEFMJYk -EObjjvbdqceIonVa -DnbkKvbdTpqPUuHm -EOcLKvbdVviXvEEg -EOcLKvbdvAcxrndh -DnbjjvbdTYKkmzkY -EOcLKvbduDCuXVno -EPCkKvbdEvYpPlie -DncLKvbdaSGCgtFk -DoCjjvbdpfDdtWBI -DncLKvbdHDkWJbJj -DncLKvbdqZOgfpdY -EPCkKvbdFxuVBEXb -DoDKjvbdnBivwnnV -EPCkKvbdRWmcbkhD -EObjjvbdfIKvSOQg -DnbkKvbdcIlikGWx -EOcKjvbdQdDBQQdS -EPCjjvbdnPzZWKyC -DnbkKvbdZxcimbkr -DncLKvbdLFfHaaRV -DoCjjvbdYSlBNToY -DnbjjvbdKCicRKDY -EPCkKvbddneSjtUS -EObjjvbdmIctRUqa -DncKjvbdYqMdiNFR -DnbjjvbduaDyTPFI -EPCkKvbdePEsLTtS -EPCkKvbdbUagYKsh -DoDLKvbdssSSxzFD -EObkKvbdMuSrLNAX -EPDLKvbdddnqbWbj -DnbkKvbdvAcySneI -EPDKjvbdatbGxLUI -EOcLKvbddePRbWbj -DoDLKvbdijGIKNYS -EPCjjvbdNrsugEtp -EOcLKvbdxZhGGYEr -DnbkKvbdTkvPAvPJ -DoCjjvbdFyUuAcwb -DnbjjvbdJTZBTMxM -EPDLKvbdaMkCStmH -EPDLKvbdjKGHimYS -DnbkKvbdelewGlik -EObjjvbdkHgMGGOL -EObkKvbdURRPUuHm -EOcLKvbdjKFhKNYS -EPDLKvbdhyuFkpnG -EOcLKvbdRosgJecw -DoCjjvbdczYoxYqC -DncLKvbdzaAPGgCM -EPDKjvbdiUzEwSUb -DoCjjvbdKQzEneme -EObjjvbdatagXkTh -DoCjjvbdwtldqYkn -EOcKjvbdUxgszLOn -EPCkKvbdUaBprprZ -EOcLKvbdYNqAYVVt -EObjjvbdbUafwkTh -EPDLKvbdcIljLGWx -DnbjjvbdNHDPlotk -EOcLKvbdkIHMFfOL -EPDKjvbddePSCXDK -EOcLKvbdbUafxLTh -DoDKjvbdQlwaxmtz -DoCkKvbdbQHHELzd -EPDLKvbdhficZWKV -DoDKjvbdqrVLOLAm -DoCjjvbduDDUvvPP -EPCjjvbdCEQAuilf -EOcLKvbdEASIlywX -DncLKvbdRNXayNtz -EOcKjvbdVrOXaeMD -EPCjjvbdFWYopNKF -DnbkKvbdSQTfjFcw -DoDLKvbdJTZAsMwl -DoCjjvbdiCPDEvpq -DncKjvbdVwIwuceH -EPDLKvbdJvVFcdfi -EPCjjvbdcbSlrATm -DnbjjvbdqBJFAXIE -EPCkKvbdTAFJHbOd -EPCjjvbdcTCkUEKB -EPCkKvbdxwhibPzL -EPCkKvbdRpTfifEX -EPDLKvbdvAdYsOeI -DncKjvbdpxngfpdY -EPCjjvbdEXwksstM -DnbkKvbdNrsufeUp -DnbkKvbdJKEAJogE -DoCkKvbdNsUWGduQ -DoCkKvbdbrcLTcjB -EOcKjvbdiHJcZViu -EObkKvbdEztQdkcJ -DoCjjvbdliETptqa -EOcLKvbdOEdUIhjd -DoCkKvbdSKxfVGkT -EPCjjvbdIsZAsMxM -EOcKjvbdZsiIyDsO -DncLKvbduDCtwWOo -DnbkKvbdEztQdlCi -DnbjjvbdLZQjSztf -DoDLKvbdXmqAXuVt -EPCjjvbdxsOJNSCH -DoDLKvbdRadElJZL -EOcLKvbdWRnXbEkc -DncKjvbdSCEFLiYk -EPDLKvbdidkHVPAO -DoCjjvbdkClKqGtg -EPDKjvbduLxXBUAw -DncLKvbdqUTfqqkU -EObjjvbdcImKKevx -DoDLKvbdMgCpMpVL -DnbjjvbdtTRsYydc -DnbkKvbdKefHbBQu -EOcKjvbduoTzpjnt -DoCjjvbdjuwNcaww -DncKjvbdTkvPBVni -EPDLKvbdapGfdLzd -EPDKjvbdvAdZTPEh -EPCkKvbdwXLaVaWV -EOcKjvbdZoNhddyj -DncKjvbdqceIonVa -DnbjjvbdIwsbHkqQ -DoDKjvbdjFKfuPAO -EOcLKvbdbhmJkFvx -DncKjvbdDxYMUUTl -DnbjjvbdMfbpNQVL -DoDLKvbdZeXfzhIb -EOcLKvbdVAbRSpqy -DncLKvbdZxcjOCkr -EOcKjvbdyTNiNSCH -EObkKvbdiLddOUcZ -DoCjjvbddwystRez -DoDKjvbdUsmTelWK -EPDLKvbdEPCjkWcE -DoDKjvbdIwsaglQp -EObkKvbdGcjvJbKK -DoCkKvbdRzJgrbvA -EObkKvbdkxsSSxft -DncLKvbdfHjvSNpg -DnbkKvbdxsNiMqag -DoDLKvbdcImKKevx -EOcLKvbdJutfDdgJ -DoDLKvbdhancEwRR -EObkKvbdnPzYvKyC -DoDKjvbdNHDPlouL -EPCkKvbdKaKgMbXq -EOcLKvbdqUTgSRkU -EPCkKvbdZjSgpHBf -DncLKvbdHffzYxXg -DoCkKvbdFkErbhMu -EObjjvbdhancEwQq -EPDKjvbdJYUCHkpp -EPDKjvbdtkwwBUAw -EOcLKvbdiZuGMRNf -EObkKvbdrJAKElne -DnbjjvbdIHHZxwwg -EPDKjvbdkHgMGGNk -DoCjjvbdeOeSjtUS -DoDLKvbdJbicQjCx -DncKjvbdnGeXlnGy -EPDKjvbdKVtecdfi -EOcKjvbdULuoBVni -DnbkKvbdmJDtRVRa -DncLKvbdJTZAsMxM -EPDKjvbdVgxVxHYz -EPCjjvbdVBCRSqSZ -EPCjjvbdJqZdnfOF -DncKjvbdqdEiQOVa -DnbkKvbdZLqdTnLm -EOcKjvbdzHZMANFX -DncKjvbdVrNxBdkc -DnbjjvbdKkAgvAKZ -DnbjjvbdmbKWxOnV -DoDKjvbdYqMeImEq -EObjjvbdbUagYKtI -DncKjvbdQZNAHSqj -DoDLKvbdfoazvcwh -DnbkKvbdVvhwvDdg -DoDKjvbdURQoUthN -EPDLKvbdvBDyTOeI -DnbjjvbdrRuKmkBN -DnbkKvbdRbDdlIxk -EObjjvbdSCDdkhyL -DoDKjvbdSBceMJYk -DoDLKvbdwyhGGYFS -EPDKjvbdQvmcblID -DoDLKvbdaaWFGQQX -DoDKjvbdEASImZvw -EPDLKvbdnQZyWLYb -EPDKjvbdbrcLUEJa -EOcLKvbdKCicQjDY -EPCjjvbdVBCQsQqy -EPCkKvbdkaNPNALA -DncLKvbdaNKartmH -DoDLKvbdCTAbtFvr -EObjjvbddZxowxpb -EObkKvbdTpqOuUgm -DncLKvbdZQleJNFR -DnbjjvbdUVlPisaR -EObjjvbdBsBCtFvr -EPCjjvbdJutecdgJ -EOcKjvbdfNFvgNKL -DncKjvbddneSjtUS -DoDKjvbdjcMKqGtg -EOcLKvbdGdLWKCKK -EOcKjvbdRDcBPpdS -DoCkKvbdauCGwkTh -EPCjjvbdaNLCStmH -EOcKjvbdelfWgMjL -DoDLKvbdtSrSxyeD -EPCjjvbdemGXGmKL -EOcLKvbduDCuXWOo -DncKjvbdauBfxLUI -DnbjjvbdIHGyyXwg -EPCjjvbdEvYooljF -EObjjvbddneTLUTr -DoCjjvbdySmiNRag -DoDKjvbdqUUHSRjt -EObjjvbdczYpXxpb -EObkKvbdaMkBrtlg -EPDLKvbdnUuZkKRf -DoDKjvbdcScKsdJa -EPCjjvbdsrrTYydc -EObjjvbdZoNiFEyj -EPDLKvbdmttyjirG -EOcLKvbdYqMeIleR -DoDKjvbdKWUfEFGi -EOcLKvbdcyxoxYqC -EObkKvbdNeETiJLE -EPCkKvbdUMWOaVoJ -EPCjjvbdWSOXbElD -EPCkKvbdNHCpNPuL -EObkKvbdEuyQQNJe -DoCkKvbdmgExNOGy -EOcKjvbdZtJJYcsO -EOcLKvbdMpXqVnGs -EObjjvbdbsDLTcjB -EPCjjvbddoFTLUTr -EOcLKvbdaNKbTVNH -DoCjjvbdJcKCpicY -DoDLKvbdsBfMlGjy -EPDKjvbdqiAJdlne -EObkKvbdKefHaaRV -DoDLKvbdbiNJjewY -EPCkKvbdVTltFlWK -DoDLKvbdbBWFGPpX -DncLKvbdVZITzKoO -EPCjjvbdnUtzLKSG -EPCkKvbdBraDTevr -EPDLKvbdTkunaWPJ -EObjjvbdZRNFJNEq -DnbkKvbdxUldqYkn -EPDLKvbdtvOYJpsA -EOcLKvbdJvUfEEgJ -DoDKjvbdlYrqsZGt -DncKjvbdePFSjstS -EPDLKvbdqquLOLAm -DoCkKvbdSPtHKFdX -DoCjjvbdZyDjNcMS -EPDKjvbdTlVnaWPJ -EPCjjvbdZirgpHCG -EObkKvbdNQYQvNfs -DncKjvbdqqtjnLBN -DoDKjvbdjJehJmYS -DncLKvbdrNZixlHi -EPDLKvbdMfcPlpVL -EPCjjvbdUWMQJtBR -DoCkKvbdfMfWfljL -DnbjjvbdaRfDHtFk -DncLKvbdiMFDnVDZ -DoCkKvbdXrkaNToY -DoCjjvbdZLqdUNlN -EObkKvbdRjxetfkT -EOcLKvbdmgFXmOGy -EPDKjvbdUQpntuHm -DoDKjvbdpstHRrKt -DncLKvbdHkazmwRL -EObjjvbdpfEFUWAh -DoDKjvbdZyEJnDMS -EObkKvbdiBoCeXQq -DoCkKvbdeATplxKG -DncLKvbdWRmwadkc -EPDKjvbdUQqPUthN -DoCjjvbdnBjXXnmu -EPDLKvbdZjTIPfbG -EPCkKvbdWHwuxGxz -DncKjvbdYpmFJMdq -DoDKjvbdhbPDFXRR -DnbkKvbdBdQBVimG -DoCjjvbdmIctRUqa -EPDKjvbdZyDjNbkr -EOcLKvbdQYmAHSrK -DnbjjvbdqYoHgQcx -DncKjvbdqiAKFMoF -DncKjvbdOTUWHEuQ -DoCjjvbdVTmTfLuj -DoCkKvbdddoRbWcK -EPDKjvbdIsYaTNYM -EObkKvbdRosfiedX -EOcKjvbdcTDLUEKB -EOcLKvbdmozYujxb -DnbjjvbdZirgogBf -EPCjjvbdKWUeceHJ -DnbjjvbdZoOJEdzK -EPDKjvbdEJhKVwjA -DoCkKvbdfpBzvcxI -DoDKjvbdlrYtysDi -DoDLKvbdZjSgofbG -DoCjjvbdUtMtGMVj -EPCjjvbdGGKRmiTq -EPCkKvbdQvnDcMID -DnbkKvbdKCjCqJbx -EPCkKvbdYpleImEq -DoDLKvbdjKFgjNXr -DoDLKvbdZshhxcrn -EPDLKvbdnVVZjjRf -EOcKjvbdqdFIpNua -DnbjjvbdVwIxVdEg -DoCkKvbduaEZSneI -DnbkKvbdznoqFClY -DoCjjvbdoAKzsgcn -EOcKjvbdSLZGVGkT -DncKjvbdiCObeWqR -EPCjjvbdWRnXbEkc -EObjjvbdRotGiecw -EObkKvbdKDKDQibx -DnbjjvbdlYsRsYft -EOcKjvbdUaBqSprZ -DoCjjvbdhkdcmuDZ -EOcKjvbdjgflFfNk -DoCjjvbdGKdrcINV -EOcLKvbdEJgjVxKA -EObkKvbdSxKkmzkY -DnbjjvbdsZkosBIO -DoCjjvbdBvzchePv -EObkKvbdGYtuBEXb -EPDKjvbdiLeENtby -EPCkKvbdRNXbYnUz -EObjjvbdfHkWRnQg -EObkKvbduDDVXWOo -DoCkKvbdJbjCqJbx -EPDLKvbdpedFTvBI -DncLKvbdjJegjMwr -EPCjjvbdUxgszLPO -EObkKvbdxmrhXsJD -EOcKjvbdJSxaSmXl -EPDLKvbdfNFwGmJk -EPDKjvbdsrrTYydc -DncKjvbdhgKDZVjV -EPCkKvbdZMRctNkm -DoDKjvbdezuyEhtX -EPCkKvbdEXwlUTsl -EPDLKvbdeAUQlxKG -DoDKjvbdZnmiEdyj -EObkKvbdrzMPraIO -EPCjjvbdxxIibPyk -EPCkKvbdKfFgbBRV -DoDKjvbdyzeORhIh -DnbkKvbdbAvFGPpX -DncKjvbdZoOJEdyj -DnbkKvbdrJAJdmOe -DoDKjvbdKVuFdEfi -EOcKjvbdqdFJQNvB -EPDLKvbdOEctIhkE -EPDLKvbdvBEYsOeI -DncKjvbdHELVjBjK -DncLKvbdZshhyDsO -EPDKjvbdGdKuibJj -DoCkKvbdEYXkstUM -DnbjjvbdJpyeOfNe -EPDKjvbdzoPpdbkx -DoCkKvbdMSXMytpz -DncLKvbdqZOggQcx -DoDKjvbdmuUyjirG -DnbkKvbdNVSqkNAX -DncLKvbdRotHJfEX -EOcKjvbdZyEJnCkr -EPDLKvbdyYJKBpZk -DnbkKvbdxmrgxTJD -DnbkKvbdhaoDFWqR -DncKjvbdbhmJjevx -EObjjvbdSKyGVGjs -DnbjjvbdSKxfVHKs -DnbjjvbdqdFIomua -DnbkKvbdkHflGGOL -DoDLKvbdqGDeUVaI -EObjjvbdjmBlZeHP -EPCkKvbdmttykJrG -DncLKvbdRXOEDLgc -DoDLKvbdhaoDFWqR -DoDKjvbdvvkaWAuu -DoCkKvbdbhmKKfWx -EObjjvbdSBdFMJZL -DnbjjvbdnUuZjjSG -EPDLKvbdliDtQuSB -EOcLKvbdsCFmMGjy -DnbjjvbdtunXjQsA -EObkKvbdkCkjqHUg -EObjjvbdDoCkKvbd -DnbkKvbdiZuFlROG -EOcKjvbdRNYCZNtz -EOcLKvbdxUmEpxlO -EPCkKvbddePSBwDK -EOcLKvbdauBfxKsh -DoCjjvbdtkwwBTaX -EObjjvbdmgEwmNfy -DnbjjvbdOStWHEuQ -EPCkKvbdGLFTChNV -EPCkKvbdKDJbpjDY -DoDLKvbdnPzZVjxb -DoCjjvbdFVyPomJe -DncLKvbdACqwizIp -EPCkKvbdZirhQGaf -DncKjvbdtTRsZZeD -EObkKvbdLBLHMbYR -EOcLKvbdrNZjZLgi -EObjjvbdTXkLmzkY -EPCkKvbdBsAbsfXS -EOcKjvbdeATpmXif -DoCkKvbdMSWmZuQz -DncLKvbdVTmTfMVj -DoDLKvbdZxdKODMS -EPDKjvbdZjShPgCG -EPDLKvbdxVMdpxkn -EPDLKvbdcSbjsdKB -EPDLKvbdiifIJlwr -DoDKjvbdKQydoFnF -EObkKvbdegkWRmpg -EObkKvbdiBncFXQq -DoDLKvbdNdctJJLE -EOcKjvbdUyHszKnn -EOcLKvbdSQUHKFcw -EObkKvbdUaBqSprZ -DoCkKvbdSCDeLiZL -EPCkKvbdKDKCpjCx -EPDLKvbdwygfFweS -DoDKjvbdiVZeWqtb -DoCjjvbdMRwMyuQz -DoCjjvbdsCGNLfkZ -DoCkKvbdmRxuZsEJ -EPCkKvbdkDMLRGtg -EObkKvbdGdKuibJj -EPCkKvbdePFTLUTr -EOcKjvbdXrlAlsoY -DoDLKvbdZjTHogBf -DnbjjvbdZirhQGaf -EPCkKvbdFVxooljF -DoCkKvbdbKkeoNcA -DoDKjvbdqYngfqEY -EPDLKvbdrWokcJYq -DoCkKvbdMowqVnHT -EPCkKvbdqqtjnKaN -DoDLKvbdiCPDFWqR -DoDLKvbdeJiqutzn -EObkKvbdqcdiPmvB -EPCjjvbdMgComQUk -DoDLKvbduVnYKQsA -DnbjjvbdjhHLfFmk -EOcKjvbdVvhwvEEg -DnbkKvbdZtIhyESn -DncLKvbdznopeClY -EPCkKvbdwtldqZLn -EOcKjvbdeEnrBwDK -DoCkKvbdkxrqsZHU -DoDKjvbdijGHimYS -DncLKvbdfNGWgMjL -EOcKjvbdmbKWxOnV -EPCkKvbdhtzEvrVC -DoDLKvbdhfibyWJu -DoCkKvbdXrkaMsoY -DoCkKvbdzoPpdbkx -EPDLKvbdSLYeuGjs -EOcLKvbdqlyixlIJ -EObjjvbdnVVZjiqf -EOcLKvbdyNrhXriD -DoCjjvbdRjyFtgLT -EOcLKvbdkyTRryHU -EPCjjvbdrykpTBIO -EObjjvbdlqxtzSdJ -EObjjvbdcarmSATm -EOcKjvbdXsLaNToY -EOcKjvbdlqxtysDi -EOcLKvbdaMkCStmH -DncKjvbdbAvFGPow -EPDLKvbdTulQKTaR -DncKjvbdXGYzUAOs -DncKjvbdezuxeItX -DnbkKvbdrykpTBIO -DoCkKvbdxnShXsIc -DoDLKvbdEPCjkXCd -DnbkKvbdIxUBgkpp -DnbkKvbdBiKbKhfK -DoDKjvbdKNADygVB -EObjjvbdADRxKZiQ -EPCjjvbdMfcQMotk -EObjjvbdSBcdkhxk -EPDKjvbdNrtVgFVQ -EPDKjvbdZMRdTnLm -EObkKvbdehKvRnQg -DoCkKvbdliETptqa -DoDLKvbdEXwktUUM -EObjjvbdBiLBjiFj -EOcLKvbdRkYeuGjs -EOcKjvbdmttzKjRf -EObkKvbdxrmhmRbH -DnbkKvbdyXiJaoyk -EObkKvbdxmrgwsIc -DoDLKvbdiZtfMQmf -DnbkKvbdpxoHfpcx -EObjjvbduaEZTOdh -EObkKvbdqqtkNkAm -DoDKjvbdxmrgxTIc -DncLKvbdMgColpVL -EPCkKvbdZnnJEeZj -EPCjjvbdVYgszKoO -EPCkKvbdBcpAuilf -EObkKvbdlhdUQuSB -EObkKvbdMIbLpxAS -EPCjjvbdnVUyjirG -DoDKjvbdKRZeOenF -DnbjjvbduCbuXWPP -DnbjjvbdssRsYydc -EPCkKvbdlhctQtqa -DoCkKvbdsQVoJcVf -EObjjvbdegkWSNpg -DoDLKvbdOAJTUKSA -DoDLKvbdliEURVSB -DoDKjvbdxsNhlqbH -DnbjjvbdOSsvGdtp -EPDKjvbdaaVeGPow -EObjjvbdNeETiIjd -DnbkKvbdJKEAJpHE -EPCjjvbdANIYsWzY -DoCjjvbdjvWmdCXw -EPDKjvbdrouoJcVf -DnbjjvbdiUzFWquC -DnbjjvbdFxtuBEYC -DnbjjvbdRkYfVHLT -EObjjvbdQwNccMID -DoCjjvbdXsMAmTnx -DoCjjvbdjJfIKMxS -EOcLKvbdbiMikGXY -DoCjjvbdQdDAoqES -EPCkKvbdVwIxVcdg -EOcLKvbdCEQAvKMf -EPDLKvbdzROmJKXA -EPDLKvbdZLrDsnLm -DncKjvbdjggMGFmk -DnbkKvbdddnrBvcK -DnbjjvbdpecdsvBI -EPCkKvbdijFgjNYS -EOcLKvbdUaBqTQqy -DncKjvbdkHgMFfNk -EObkKvbdZGvdAPSi -DnbjjvbdqUTgSRjt -DoDLKvbdqvpLcIyR -DncLKvbdLqvlytpz -DnbkKvbdKDJbpjCx -DoCjjvbdlqyUyrci -DnbkKvbdUQqPUuIN -EObkKvbdTlVnaVni -EOcLKvbdNdcshiLE -EObkKvbdkDMLRHUg -DncKjvbdIxTbILpp -EPCkKvbdePFTKssr -DnbjjvbddeOrCWcK -DnbkKvbdatbGxLTh -EObkKvbdqlzKZLgi -EPCjjvbdOTUVgFUp -EOcLKvbdpfEFTvAh -DncLKvbdZnnIdeZj -EObkKvbdZxdKODLr -DoDKjvbdjggLfGNk -EPCjjvbdRDcAopdS -DncKjvbdlZTRryHU -DncKjvbdZshiYdSn -EPDKjvbdatbHYLTh -EPDKjvbdLAjfmCXq -EPDKjvbdOFEUIiLE -DncKjvbdxVNFQxlO -DoCjjvbdrafNLfkZ -DoCjjvbdGFiqnJTq -EPCkKvbdUsmUFlWK -EObkKvbdLBLHMbXq -EPCkKvbdtlYWaUBX -EPCjjvbdSPsfjGEX -EObjjvbdIjEAJogE -DoDLKvbdNHCpNQUk -DncLKvbdYkqdUNkm -DoCjjvbdqquKmkBN -DnbjjvbdEuyQQMjF -EOcKjvbdURRPUthN -EObjjvbdmoyxvLYb -EObkKvbdGYtuAdYC -DnbjjvbdZeYGzhJC -DoDLKvbdCgLfHAzc -DoDLKvbdhuZeXSUb -DoCkKvbdjlbMZdgP -DoCkKvbdemGWgMjL -EPCkKvbdxxJJaoyk -EPDLKvbdqGEEsuaI -EObkKvbdEKHjVwjA -EOcKjvbdiBoDFWpq -EPCkKvbdffLzNfgA -EObjjvbdDoCjkXDE -EPDKjvbdhficZWJu -DoCjjvbdWWiYVdFH -EPCkKvbdKQzFOenF -DoCkKvbdmbJvxPOV -DnbkKvbdtAHQhAAr -EPDLKvbdmSYtzSci -EPDLKvbddeOqavcK -DoCjjvbdCEQBVjMf -EPDLKvbdlYrqsYft -DnbkKvbdJSyBTNXl -EPCjjvbdcbSmSATm -DoDKjvbdfNFwGmJk -DoCkKvbdGLErbhNV -EObkKvbdiZuFlQnG -DnbjjvbdxUmEpxlO -EPDKjvbdUWMPitBR -EPDKjvbdrafNLfjy -EPDLKvbdrWolDJZR -EObjjvbdhbPDFXQq -DncLKvbdqrUkNjaN -DnbkKvbdBiLCKhej -DoDKjvbdSCEFMIxk -DoDLKvbdffLzNgHA -EPCkKvbdZLqcsmkm -DnbkKvbdZMSEUOMN -DnbjjvbdzaAPHHCM -DnbjjvbdCIkBjhfK -DoCkKvbdZirgpHBf -DnbjjvbdIwtBhLpp -EObkKvbdeOeTLUTr -EObkKvbdUxgszLPO -EObkKvbdhzVGLqOG -DnbjjvbdOTTufdtp -EOcKjvbdZRNEhleR -EPCjjvbdKyRKSzuG -DoCkKvbdZtJJYcsO -EOcLKvbdemGXGmKL -EPDKjvbdJXsahMQp -DoDLKvbdhbObeWqR -EObjjvbdFVxpPljF -EOcKjvbdaNLBruMg -DoCjjvbdpyPIGpcx -EOcLKvbdZMRcsmkm -EOcLKvbdnGeXmNgZ -DoDLKvbdjlalZeGo -DoDLKvbdaSGDHtGL -EPCkKvbdCTAbsewS -EPCjjvbdZjSgofbG -DnbjjvbdJutecdfi -EPCkKvbdIryBSmYM -DoCjjvbdfekzOHHA -DnbkKvbdREDAoqES -EPCjjvbdtTSTYzEc -EPCkKvbdmoyyVkYb -EObkKvbdmfdxMnGy -DoCkKvbdwuNFQxkn -DncKjvbdsBelkfjy -EPDLKvbdQvmdDLhD -EPDKjvbdBhkCLJFj -DoCkKvbdeJiqutzn -EOcLKvbdqTsfrSKt -DoDLKvbdakLfOmcA -DncKjvbdKaLHMawq -EPCkKvbdznopdcMY -DoDKjvbdZtJIyDsO -DoDLKvbdsQVnjCvG -DncKjvbduDDUvuno -DoCkKvbdJYUCHlQp -DnbkKvbdnBiwYPNu -EObjjvbdlYrqryHU -EPCjjvbdqcdiPnWB -DoCjjvbdUQpoUthN -EPDKjvbdsZlQTAhO -EOcKjvbdtbbtwWOo -EPDLKvbdJuuGDdgJ -EOcKjvbdjggMGGOL -EPDLKvbdHffyxwxH -EOcLKvbdSCEElIxk -EObkKvbdIwsbHkqQ -EPDLKvbdjbkjqHUg -DnbjjvbdnQZxujxb -EPDKjvbddePRbWbj -DoCkKvbdhtydwRuC -DoDKjvbdCDoaWKMf -EOcKjvbdRjyGVGjs -EObjjvbddCTNSATm -EOcKjvbdZLrETmlN -EPDKjvbdlrZUysDi -EOcLKvbdwtmFRZMO -EPCjjvbdtTRrxydc -EObjjvbdeFPSBvcK -DoCkKvbdwuNFRZLn -DnbjjvbdhytfLpmf -EPCkKvbdrykpTAgn -EObkKvbdRDcApRDr -DoCjjvbdZnnIeFZj -EOcLKvbdePErkUTr -DoDLKvbdrbGNLgLZ -EObjjvbdVZIUZjoO -DncLKvbdzHYlAMeX -DnbkKvbdbsDLTcia -EPCjjvbdOSsufdtp -DncKjvbdpstHSSLU -DncKjvbduDDVWuoP -EPDKjvbdiMEdNuCy -EOcKjvbdtbcVWuno -DoDKjvbdqUTgRqjt -DncLKvbdZyDjNcLr -DoDLKvbdRWmdDLgc -DncKjvbdZLqdUOMN -DoDKjvbdijGIJlwr -EObjjvbduMYXBUAw -DoCkKvbdHDkWJajK -DoCjjvbdRpTfifEX -DoCjjvbdUyHszKnn -EPDKjvbdqZPIGpdY -EPDKjvbdRWmdCkhD -EObkKvbdsrrSyZdc -EOcKjvbdYlSDtNlN -DncKjvbdbKkennDA -EPCkKvbdiZuGMQmf -EPCkKvbdEztQeLbi -EPCkKvbdaRebgsfL -DoCkKvbdBcpAuilf -EOcKjvbdyNsIYShc -EPCjjvbdcIlijewY -DoCjjvbdmbKXXoOV -DncLKvbduDCtwWPP -EPDKjvbdnCJwXoOV -EPCjjvbdjcLkQgUg -DnbkKvbdtcCtwVno -DncKjvbdGFjRmiUR -DncLKvbdrWpLcJYq -DncLKvbdKWVGDdfi -EPCkKvbdnUuZkJrG -EPCjjvbdiCPCeWqR -DncKjvbdEYYMUUTl -EObjjvbdrpWOicWG -DoDKjvbdFejSOIsq -DnbjjvbdqiAJdmOe -EOcKjvbdUyITzKnn -DoDKjvbdfMfWgMjL -DnbkKvbdXrkaMtOx -DoCkKvbdKefIBaRV -EPCjjvbdyTNhlqbH -EPCjjvbdtlXwBUAw -EOcKjvbdRosfjFdX -DoCjjvbdYpldiMeR -DnbjjvbdwzIFexFS -DncKjvbdSCDeLhyL -DncLKvbdrzLpSaHn -DncKjvbduCcVWuoP -DoDLKvbdatagXkTh -DnbkKvbdsCGMlGkZ -EPCkKvbdkWXNdBww -DncKjvbdJcKCpjCx -EOcKjvbdNxPVzdNt -EPCkKvbdKRZeOfOF -DncLKvbdcIljLGXY -EPDLKvbdVhXuwfxz -DoCjjvbdaoffckzd -EOcKjvbdLhbLpxAS -DnbjjvbdnHExMmgZ -EObjjvbdbhljKfXY -DnbjjvbdkDLkRGuH -EPDLKvbdfHkWSORH -EObjjvbdzoPqFClY -DncKjvbdznopdbkx -EObjjvbdnUtzLKRf -EPCkKvbdZQldiMeR -DoDKjvbdFjeScHmV -EPDKjvbdEOcLKwCd -EPDKjvbdyqOmJKXA -EOcKjvbdSQTfiecw -DoDLKvbdDoDLLXDE -DoDKjvbdhlEcmuDZ -EObjjvbdfHkWRmqH -DnbkKvbdIGfzYwwg -DncLKvbdUWMPjUAq -EPDKjvbdkHflGGOL -DnbkKvbdnPzZVjyC -EPDLKvbdSBceLiYk -DncLKvbdUtMsfLvK -DnbkKvbdbrcLTdJa -EObkKvbdIwtCHkqQ -EPDKjvbdtbcVWvPP -EObkKvbdtbcVWuoP -DoDKjvbdKVtfEFGi -EPCjjvbdMRvlytpz -DoDLKvbdwuMeRYlO -EOcKjvbdlhdTqVRa -EPDKjvbdiGjCyVjV -DnbjjvbdrDeJQNua -DoDKjvbdrbFmMHKy -EOcKjvbdfHjurNpg -DnbkKvbdZRNFJMeR -EOcKjvbdqFdEsvBI -DnbjjvbdZirgogCG -DoDLKvbdDncKjwDE -DoCkKvbdjhGlFfOL -EObjjvbdmaivxOnV -EObkKvbdKkAhWAJy -EOcKjvbdNrtWHEuQ -DnbkKvbdFkFTChMu -EObkKvbdeOdrjstS -EOcKjvbdIwsbHlQp -DoCkKvbdeATpmXif -EOcLKvbdKaKgMaxR -EObkKvbdUGznLvvF -DnbkKvbdbLMGPODA -EObjjvbdTkvOaVoJ -EOcKjvbdsQVoKDVf -EPDKjvbdznopdcLx -DoDLKvbdpfDdsvAh -DncKjvbdrDdhpNua -EOcLKvbdhficZVjV -DncKjvbdFxuVBEYC -EPDKjvbdzjVQQETU -EObkKvbdKRZePGNe -EObjjvbdDncLLXDE -EOcLKvbdYkqctNkm -DoDKjvbdtvOYKRTA -DoCkKvbdmajWxPNu -DncKjvbdIjEAJofd -EPCkKvbdiCPDFWqR -EOcLKvbdIHHZxwwg -EOcKjvbdYpmEiNFR -EOcLKvbdQmYCZNtz -EOcLKvbdVYhTykPO -EPCkKvbdJKEAKPfd -DoCjjvbdRkYfUfjs -EPDLKvbdlZTSTZGt -DoDLKvbdNGbpNQVL -DoCjjvbdvAdZTOdh -EPCjjvbdliDsqUqa -EPDKjvbdSPsfiecw -EOcKjvbdYlRcsmkm -DnbkKvbdwXMAvBVu -EPCkKvbdRjxfVGjs -EOcLKvbdCIkCKiFj -DoCkKvbddxZssrFz -EOcKjvbdREDApRES -EOcLKvbdTpqPVVIN -EObjjvbdaaWEeoow -EOcKjvbddeOrCXCj -EOcLKvbdAMgySvyx -EPDLKvbdNPwqVnHT -EObkKvbdwuMeRYlO -DoCkKvbdTkuoAuoJ -EPDKjvbdmJDspuRa -EPCjjvbdNHCpNQVL -DncKjvbdGcjvKBij -EOcKjvbdbQHHELzd -EPDKjvbdPxmAGrqj -EPCjjvbdRbDdkiYk -EPDLKvbdTAFJHand -DoDKjvbdqmZjZMHi -EObjjvbdtSrTYzFD -DncLKvbdhlEcmtby -EObjjvbdmJEUQuSB -DncKjvbddndsKstS -EPDLKvbdmgFYNOGy -DnbjjvbdSCEElIyL -DncKjvbdmaivxOmu -DoDKjvbdFVyPomKF -DnbkKvbdMpXqWOHT -EObjjvbdKefICBRV -EObjjvbdqGDdtWBI -DnbkKvbdCJLCLIfK -EObkKvbdLqwNZtpz -DoDLKvbdiifHjMwr -DoCkKvbdddoRawDK -DncKjvbdbrcKscjB -DnbjjvbdrSVLNkAm -DnbjjvbdffLynHHA -EObkKvbdTAFJHbPE -DncKjvbdDncKkWcE -EOcLKvbdrouoKDVf -EOcLKvbdZisIPfbG -EOcLKvbdiGicYuiu -DoDLKvbdVgxWXfxz -DoCkKvbdffMZmgHA -EObjjvbdWfZZtAPT -EPDLKvbdEzsqElCi -DoCkKvbdYSlAlsoY -EPDLKvbdFWYpPmKF -DoDKjvbdkNCMZdfo -EPDLKvbdehLWSOQg -DnbjjvbdxxJKCPyk -EOcLKvbdMfcQMpVL -EOcLKvbdnVVZkKRf -EObjjvbdczYoxZQb -EPCkKvbdSQUGiedX -DoDKjvbdeuzwpJzs -DoDLKvbdqZPHfqDx -DoCjjvbdKeehCBQu -DnbkKvbdADSYJyiQ -DoCjjvbdFkFTDHlu -EPDKjvbdZoOJEdzK -EPCjjvbdZjTIQGbG -DncKjvbdZHWdAOri -EPCjjvbdeXystRez -EObkKvbdIxTagkpp -EObjjvbdxZgfFxEr -DoDLKvbdjhHLfGNk -EObkKvbdTfznMWue -DoDLKvbdOSsufeVQ -DncKjvbdVUNTelWK -EPCjjvbdZQmFImEq -DnbjjvbdkClLQftg -DnbjjvbdRXNdDLhD -DncKjvbdTqQoVUgm -EPCjjvbdNQYRVmgT -DoDLKvbdnUuZjiqf -DoDKjvbdbsCjsdJa -EOcKjvbdFkEsDINV -DoDKjvbdyOTHxSiD -EOcKjvbdkMbMZdgP -DnbkKvbdeEnqavcK -DoCkKvbdxZhFfYEr -DncKjvbdNPxQunGs -EOcLKvbdOYOuzdNt -DncKjvbdJbicRKDY -DncKjvbdjAQHAofj -EOcKjvbdWWiYVcdg -DnbjjvbdjFKftoAO -EPCkKvbdTXkLmzjx -EPCkKvbdWSNxBeMD -DoCkKvbduMXwBTaX -DoDLKvbdLBKfmBxR -DoCjjvbdEObjjwDE -EPDKjvbdTlVnaVoJ -DoDLKvbdhgJcZViu -EObjjvbdatbHXjtI -EOcLKvbdZeXfzgiC -EPCkKvbdeFPRbXCj -EPCkKvbdZQleJMdq -DnbjjvbdUWLojUAq -EPCjjvbdFaOpyJzm -DnbkKvbdANIYrwZx -EPCkKvbdbBWEeopX -DoDLKvbdczYpYYpb -EPCkKvbdbVBfxLTh -DoDKjvbdLBKflawq -DoCkKvbdyOSgxSiD -EPDKjvbdkDLkQgVH -EObkKvbdjmBlZdfo -EPDKjvbduoTzqLOt -EOcLKvbdaRebhUFk -EPDKjvbdatbGwjtI -EOcLKvbdCIjbLIfK -DncKjvbdkIGkeemk -DncKjvbdxVMeRZMO -EOcKjvbdRXODcMHc -DnbjjvbdqquLOLAm -DoDKjvbdDHLfHAzc -DoCkKvbdnVVZkKRf -DoDLKvbdGcjvJbKK -DoCjjvbdzoQRFDLx -DoDLKvbdmuUzLKRf -EPDLKvbdtumwiqTA -EOcKjvbdmJDsptrB -EPCjjvbdIGgZxwwg -EPDLKvbdxLXDgzzG -DnbkKvbdQwNdCkhD -DnbjjvbdcasNSAUN -EPCkKvbdTulQKTaR -EOcKjvbdhgJbyVjV -DoDLKvbdKVteceHJ -DnbjjvbdHgGzYwxH -EPCjjvbdxnSgxTJD -EPDKjvbdyYJKCPzL -EOcKjvbdOFDtJJKd -EObkKvbdRadEkhxk -DoCkKvbdiifHjNXr -DoCjjvbdnUtyjirG -EObkKvbdJpydoGNe -DoDKjvbdZLqctOLm -DnbkKvbdsBfMkfkZ -EOcLKvbdOStWGeVQ -EPDLKvbdijGIJmYS -DoDLKvbdxxJJbQZk -DncKjvbdHbLydzAD -EOcLKvbdyTNiMqag -EPDKjvbdMgComQVL -DoDLKvbdzitoocsU -EPDKjvbdsBfMkfjy -DoCkKvbdFyUtaEYC -DoDLKvbdJKEAJpGd -DoCkKvbdygZMAMeX -EPCkKvbdJqZdoFnF -DnbkKvbdiBnbdvqR -EOcLKvbdSQUGjFdX -DnbkKvbdmSYtzTEJ -DoCjjvbdehKvSOQg -EOcLKvbdGckVibJj -DncKjvbdhficYvJu -EPDKjvbdwuMeRYkn -EOcLKvbdFejSNiUR -EPCjjvbdOFEUJJLE -DnbkKvbdXsLaMtOx -EPDKjvbddZyPxYpb -EPCkKvbdhzVFkqNf -DoDKjvbdOEdUIiLE -EPCkKvbdnGeXmOHZ -EObkKvbdiMEdNuCy -DoDLKvbddoFTLTtS -EObkKvbdIxTbHlQp -DncLKvbdZRMdhmEq -DoDLKvbdZnmheEyj -EPDKjvbdKeegbApu -DncLKvbdNVTSLNAX -EOcKjvbdKDJbqKCx -EPCjjvbdFfKSOIsq -EPCjjvbdxnShYSiD -EOcLKvbdOStWHFVQ -DncLKvbdsPvOicWG -DnbjjvbdxnTHwsJD -DoDKjvbdLAkGmBwq -DoCkKvbdwMvAMceN -EOcLKvbdmRyVZsDi -EPCkKvbdmpZyWKyC -DoDLKvbdrykpTBIO -DoCjjvbdVgwvYHYz -EPDLKvbdTvMPjUBR -EOcLKvbdgFkzOGgA -DnbkKvbdVBBpsRRy -DnbjjvbdRzKISbvA -EObjjvbdxnTIXsJD -EObjjvbdZoOJEdyj -EPCjjvbdHDjuibKK -EPCjjvbdezuxdiUX -EOcKjvbdYTMAmToY -EObjjvbdJYTbILpp -DoDKjvbdkClLRHUg -EPDKjvbdTkvPAvPJ -EObkKvbdeAURNXjG -DncLKvbdTukpKUBR -DoCjjvbdcTDKsdJa -DoDKjvbdBsAcUGXS -EObjjvbdDoCjjvcE -EOcKjvbdtlYWaTaX -DnbjjvbdRDbaPpcr -EPCjjvbdrylPsAgn -DoCkKvbdOhAYZAYa -DnbjjvbdiUydwSVC -DoCjjvbdwzIFfYFS -DoCkKvbdZshiZDrn -DoCkKvbdZoOIddyj -DncKjvbdpssgSSKt -EPCjjvbdrSUkNkBN -EPDKjvbdjJfIJlxS -EOcLKvbdxVNFRYkn -DoDKjvbdWWhwvEFH -DncLKvbdRDcBQQcr -DnbkKvbdliETpuRa -EPCjjvbdZRMdiMeR -DnbkKvbdiMEdOVCy -EPCjjvbdznpREbkx -DoCkKvbdwzIFexFS -DnbjjvbdmSYuZrdJ -DoDLKvbdCWzchdov -EPDLKvbdpfEFTvAh -EPDLKvbdyOTIYTIc -DncKjvbdNQXqVnHT -DoDLKvbdCgMFgAzc -EOcKjvbdIwtBgkpp -EPDKjvbdRjyGUfjs -EObjjvbdACqwjZiQ -DoDKjvbdpstGrSKt -DnbkKvbdnGdwmOHZ -DncKjvbdiZtfLpnG -DoDLKvbdaSGCgtFk -DoCkKvbdFfJqnIsq -EPCkKvbdkNCLzEgP -EOcKjvbdFeirOJTq -EOcLKvbdUtNUGMWK -EObkKvbdSQUHJfEX -EPCkKvbdqquKmkBN -DnbjjvbdbhmKKfXY -DoCkKvbdIsYaTNXl -DoCjjvbdZoNheFZj -EOcLKvbdBhjbLIfK -EOcKjvbdatafwjsh -DoCjjvbdkxrrSyHU -EPDLKvbdSCEElIxk -EOcKjvbdfMevfmKL -EPCjjvbdMJBlRYAS -DoCjjvbdSxKkmzkY -DnbkKvbdkNCLydgP -EObkKvbdkxsSTZHU -DoCjjvbdRpUGiedX -EOcKjvbdjblLRGuH -EObkKvbdyTNiMrCH -DnbjjvbdZeXfzhJC -DoDKjvbdZxdJmblS -DncKjvbdOStWHEuQ -DoCkKvbdyNsHwsIc -EPDKjvbdkxrqryHU -EObjjvbdZLqctNlN -DoDLKvbdxnSgxShc -EPDLKvbdnBjWwoNu -DoDKjvbdkIHMGGOL -EObjjvbdqUUGrRkU -DncLKvbdRjyGVHKs -EPDKjvbdhfjCyWJu -EPCkKvbdHELVjBjK -DncKjvbdgQBzvcwh -DoDLKvbdVAaqSpqy -DoCkKvbdySnJNSBg -DoDLKvbdpeceUWAh -DncLKvbdaRebgsfL -EOcKjvbdZLqctNlN -EObjjvbdtbbtvvPP -DoCkKvbdZMSDtNlN -EOcKjvbdsBelkfjy -EPDLKvbdTpqPVVIN -DnbjjvbdBiKbKhfK -DnbjjvbdOFEUIiKd -EPCkKvbdSiZjRAAl -EObkKvbdwjwDgzyf -EPCjjvbdhlEdNtby -EPCjjvbdhtydwSUb -EOcKjvbdnQZyVjyC -DoDKjvbdRzKIScWA -EOcLKvbdLBLHNCXq -DoDLKvbdssSTYzFD -EObjjvbdEvYpPlie -DncLKvbdhficYvKV -EPCjjvbdnUuZkJqf -DnbjjvbdXnRAXtut -EPDKjvbddijRutzn -EOcLKvbdEvYpPljF -DoCjjvbdTulQKUAq -EObkKvbdxmsIYShc -EPDLKvbdkyTRryHU -EObjjvbdCEQAvKNG -EObjjvbdGYuVBEYC -EPDKjvbdvAdYsOeI -EObjjvbdRpUHKGEX -EPCkKvbdKDJcQjDY -DoDLKvbdunszqKoU -DoCjjvbdJvUfEEfi -DncLKvbdrpWPJcWG -DoCkKvbdajkfPNcA -DnbjjvbdFpATXHFy -EObkKvbdFfJrOJTq -DncLKvbdZnnJFEyj -DoCjjvbdOEctIiKd -EPDLKvbdVhXuxGxz -EPDKjvbdySmhlrCH -EOcKjvbdiGjDZWJu -DncKjvbddZyQYZRC -DncLKvbdziuPpETU -DncLKvbdJTYaTNXl -EPCjjvbdNddThiKd -DnbkKvbdbAudepPw -EOcKjvbdMowpunHT -DoDLKvbdmbKXYPNu -DoDLKvbdezvZEiTw -DnbjjvbdrMyixkgi -DnbkKvbdKWVGEFGi -DoCjjvbdkDLjpftg -DnbjjvbdJqZePFme -EObkKvbdDwxLsssl -EPCjjvbdmoyyWLYb -EPCkKvbdFjdrcHmV -DoCkKvbdDwxLtTsl -EOcLKvbdoAKztHdO -EPDLKvbdTkuoAuoJ -DncLKvbdURRPVVHm -EPCkKvbdKCicRJcY -DoCkKvbduDCuXWOo -DoCjjvbdRXNdDMID -DoDKjvbdBcpBWJlf -DoCjjvbdTqROttgm -DncKjvbdRadFMIxk -DoDLKvbdCSaDTewS -EOcKjvbdQlxCYmtz -DncLKvbdeOeSkUTr -DnbkKvbdTqQntthN -DnbjjvbdhbObdvpq -EPDLKvbdMowqVmgT -DncKjvbdANIZTWzY -EPDLKvbdiVZeXRtb -DncLKvbdYNqAXtvU -EOcKjvbdfIKurNpg -DoCkKvbdFpATWfey -EPCjjvbdHkazmwRL -DoDKjvbdJvUfDdgJ -EPCkKvbdSBdElIxk -DoCkKvbdbsCjtEJa -DoDLKvbdvBEYsOdh -EOcLKvbdGGJqmhsq -EOcLKvbdJSyBSlxM -DncLKvbdnQZxukZC -EOcLKvbdySnIlrCH -DoCjjvbdIjEAKPgE -DoDLKvbdhlEcnVDZ -EPDKjvbdZeYGzghb -EPDKjvbdbKlGOnDA -EPDKjvbdkMbMZdgP -EOcLKvbdDoCkKwCd -DnbjjvbdLBLGlbXq -EPDLKvbdZxcinCkr -DoCkKvbdqTsfrRjt -DoCkKvbdADSYJzIp -DoDKjvbdbUagYKsh -EObjjvbdjAQHAofj -EOcKjvbdDoDKkXDE -EPDKjvbdSZigsCvA -EPCkKvbdKRZePGOF -EPCjjvbdKaKgNCXq -EObkKvbdxxJKBoyk -EOcKjvbdxmrgwsIc -DnbkKvbdmozYvKyC -DoCkKvbdqquLOLAm -EObkKvbdDncLLXCd -EPDLKvbdjcMKpftg -EPCjjvbdwkXDgzzG -DoDLKvbdHffyxwwg -DoCkKvbdvAdZSneI -EOcLKvbdrovOjDVf -EOcLKvbdsPuoJbuf -DoDLKvbdySnJNSBg -EObkKvbdXsMAltOx -DncLKvbdFfKSOJTq -EPCkKvbdddnrCWcK -DoCjjvbdySmhlrBg -DnbjjvbdNxPVzcnU -DncKjvbdhtzEvrVC -DoCjjvbdQwODblHc -DoDLKvbdjcLjpgVH -EOcLKvbdbKlGOmcA -EPDKjvbdfMfWflik -DncKjvbdmbJwXnmu -EOcLKvbdTkuoAvOi -DnbjjvbdsZkoraIO -DoDKjvbdZMSEUOLm -EOcLKvbdsCFmLfkZ -DncKjvbdUxhTyjnn -EPDKjvbdRosfjGEX -EOcLKvbdmuUzKirG -EPCkKvbdGGJrOItR -EObjjvbdEXwktUUM -DnbkKvbdiifHimXr -EPDKjvbdmJDspuSB -EObjjvbdwyhGFwdr -DncKjvbdatafwkUI -EPDLKvbdYNqAXtut -DoDLKvbdEPCkLWcE -EOcLKvbdqceJQOWB -EPDKjvbdySnJNSBg -DnbjjvbdyzdnSIIh -DoDKjvbdrDdiQNvB -DoCkKvbdYkqdTnLm -DoCkKvbdlZTSTYgU -EPDKjvbdMpXqWNfs -EObkKvbdJbicQjDY -DoDLKvbdGAoRYizm -DncKjvbdmgExNOHZ -DoCjjvbdznoqFDLx -EOcKjvbdieLGtoAO -DoCjjvbdMfbpMotk -EObkKvbdyzdnSHiI -EObkKvbdcSbjscia -DoDKjvbdNGcQNQUk -EPDKjvbdNGbpMpVL -DoDLKvbdUQqPVUgm -DnbjjvbdVvhwuceH -EPDKjvbdDxXkstTl -EPCjjvbdPyNAHTRj -EPDLKvbdeOdsLTtS -DoDKjvbdTAEiICPE -DoDKjvbdZisIQGaf -EObkKvbdxVMdpxkn -EPCkKvbdnUtzKjRf -EOcKjvbdhtydvrVC -DoDKjvbdbrcLTcia -EPDLKvbdbhlikFvx -EPDKjvbdANIZSwZx -EPDKjvbdtbbuXWOo -EObjjvbdliDtQtqa -DncLKvbdGLFScIMu -DnbkKvbdfMfXGljL -EObkKvbdCTBDTewS -EPDKjvbdSiZiqAAl -EOcKjvbdFfKSNhsq -EPCjjvbdyYJKBpZk -DncKjvbdAMgyTWyx -DnbkKvbdpaJFAXIE -EOcKjvbdEYYMUUTl -EPCjjvbdeFOrBvcK -DoDLKvbdptUHSRkU -DoCkKvbdOYPVzcnU -DnbjjvbdijFhKMxS -DnbkKvbdEKHivXjA -DncLKvbdsPvOicVf -DoCjjvbdmbJvxOmu -EOcKjvbdDxYMUUTl -DoDKjvbdZtIhxdTO -DncKjvbdTlVoAuoJ -DoDKjvbdFyUuBDwb -EObkKvbdQYmAGsSK -DnbkKvbduLwwAsaX -EPDKjvbdegkWRmpg -EPDLKvbdRDcAoqDr -DoCjjvbdFWZPolie -DoCkKvbdbhmJkGWx -DncLKvbdrWpMDJYq -DnbjjvbdaaWEeoow -DoDLKvbdzHYlANFX -DoCkKvbdjFLHUoAO -DnbjjvbdZyEKNbkr -DoDKjvbdLrXMyuQz -EPDLKvbdwNWAMdFN -DoCkKvbdkWXODaxX -EOcKjvbdraelkgKy -EOcLKvbdmSZVZsDi -EPCjjvbdkMbLzEfo -EObjjvbdaSFbgtFk -EObkKvbdmIctRUqa -DncKjvbdhtydvquC -EPDKjvbdZoOJEeZj -DoDLKvbdyXiJaozL -EOcLKvbdVwIxWEFH -DnbkKvbdYpmFJMdq -EPDLKvbdjKGIKMwr -EPCkKvbdFpASwHGZ -DncKjvbdKQzEnfNe -DoDLKvbdkVwODaxX -EPCjjvbdzaAOffal -EObjjvbdnHEwlnGy -DncLKvbdLqwMyuQz -EPCkKvbdWRnXaeMD -DoCkKvbdcbSlrAUN -EPDKjvbdMJBlRYAS -EOcLKvbdZxcimbkr -DncLKvbdCDpBVimG -DoDKjvbdGdKvKBjK -EPDLKvbdziuPodSt -DnbkKvbdbrbjtEKB -EOcLKvbdmIcsptqa -EPDKjvbdMRwMyuQz -DoDLKvbdfHkVrNqH -DnbkKvbdLZRKSzuG -EPDKjvbdTfzmkwWF -EOcLKvbdSKxeuHLT -EPDLKvbdkHgLfGNk -DoDLKvbdVhXuxHYz -EOcKjvbdkHgMGGOL -DoDKjvbdEARhmZvw -EPDLKvbdjKFgimXr -EObkKvbdSQUGiecw -EPCjjvbdjKFhJlxS -DoDKjvbdDxXlTtUM -EPDLKvbdelfWgMik -EOcKjvbdtcDVXWOo -DoDKjvbdiZuFlRNf -DoCkKvbdsBellHKy -EPCkKvbdjlbLyeGo -EOcKjvbdhfibxujV -EObjjvbdhyuGMROG -DoDLKvbdgQBzvdYI -DoDKjvbdeATpmXjG -EPDLKvbdjKFgilxS -DoDKjvbdrpWPJbuf -DncLKvbdDncLKvcE -DoCkKvbdkVvmdCXw -DncLKvbdGcjujCJj -DncLKvbdpxngfpcx -DnbjjvbdiCPCdwQq -EPDLKvbdijFhJlwr -DncKjvbdhgJbxvKV -EPCjjvbdZxcjNbkr -DncKjvbdZQleJMdq -DncLKvbdyfxlAMeX -EPCjjvbdFfJrNiUR -EPDLKvbdzjVQPdSt -DoDLKvbdjAQHBPfj -EObjjvbdZoOJFEzK -EObkKvbdFpATWgGZ -EPDKjvbdvAcxrneI -DoDLKvbdxrnJMrCH -DoCkKvbdjmCLydfo -EPCkKvbdegjuqmqH -DoCkKvbdSBdFLiZL -EObkKvbdbAvFFopX -DncLKvbdGQASwGey -DnbkKvbdQccAopdS -EPCkKvbdZshiYdSn -EPCjjvbdHDjujCKK -EObjjvbduDDVWuno -DoCjjvbdzjVQQDsU -EOcLKvbdeFOqavcK -DoDLKvbdyXhibPzL -DoDLKvbdrzMPsAgn -EObkKvbdUtNTfMWK -EOcLKvbdLqwNZuQz -EPDKjvbdqBJFAXHd -DoCkKvbdnUuZkKSG -DoCjjvbdZHXEAOsJ -DncKjvbdQdDBPpcr -DnbkKvbdCIkBkIej -DnbkKvbdMgDPmQUk -DnbkKvbdxxIjCPyk -DnbjjvbdZsiIxdSn -DoCkKvbdADRxJzJQ -EObjjvbdkxsSTZHU -DncKjvbdWXIxVdEg -DnbjjvbdLrWmZtpz -EPDKjvbdhzUelQnG -DoDLKvbdSBceLhxk -EObjjvbdWIXvYGxz -EPDKjvbdEYXktUUM -EObkKvbdhlFENtby -EPDLKvbdNwnuzcmt -EOcKjvbdaaWEfPpX -DncLKvbdddoSCWcK -EPDKjvbdmaiwXnnV -DoDLKvbdMgDQMpUk -DoDLKvbdjFKfuPAO -DncLKvbdnGeYMmfy -DncLKvbdrSUjmkAm -EOcLKvbdfHkWRnQg -DnbjjvbdnCKWxPNu -DnbjjvbdraemLgKy -EObkKvbdWWiYWDdg -DoCkKvbdKfFgaaQu -EPCkKvbdaSFcIUGL -EOcKjvbdkxrqryHU -DncKjvbdRDbaQQcr -DncLKvbdbVBgXjtI -DoCjjvbdqZPHfqDx -DnbkKvbdcyxowxpb -EPCkKvbdWXIxWDeH -DoCkKvbdyXiKBozL -DnbkKvbdlZSrTYft -EObjjvbdGdKujBij -DnbjjvbdtcDVXWPP -DoDKjvbdZnmhddyj -EObkKvbdTukoisaR -EObkKvbdzoPqFCkx -DncLKvbdLhalQxAS -EPCkKvbdVwIwudFH -DoDKjvbdjKGIKNYS -DoDLKvbdjhHLeenL -EPDKjvbdJTZBSlxM -DoCjjvbdFaOqZJzm -DoDLKvbdnBjXXnnV -DoCjjvbdeFPSCXDK -EPCjjvbdbAvFGPow -DnbkKvbdVwIwvEFH -EObjjvbdqUTfrSLU -DncKjvbdqlyixkhJ -DoDKjvbdSLZFuGjs -DncLKvbdsCGNLfkZ -EPDLKvbdaofgDkzd -DoCkKvbddiirWUzn -EOcKjvbduCcVWuno -DnbkKvbdSPsfjGDw -DoCkKvbdFWYpQMie -DoDLKvbdRECaQRES -EPDLKvbdhfibyVjV -DnbjjvbdqTsgSSLU -EObkKvbdrXQMChyR -DncLKvbdNrtVfduQ -EObjjvbdiUzEvqtb -DncKjvbdUaCQsRRy -EPCjjvbdRbEEkiYk -DncKjvbdUtNUGMVj -EPCjjvbdzHYlAMeX -EPCkKvbdeEoRbXCj -DoDLKvbdcScLUDia -DoDLKvbdtbbuWuno -EOcKjvbdbUafwkTh -DoCjjvbdtcDVXWOo -EOcKjvbdHgGyxxYH -EOcLKvbdWSOXbEkc -DoCkKvbdKeehCBRV -DncLKvbdMgComQVL -DoDKjvbdUMVoBVoJ -DoCjjvbdzoQRFCkx -DoCkKvbdUWMQJsaR -DnbjjvbdkNCLydgP -EOcKjvbdmozYvKyC -DnbkKvbdmgExMnGy -DncKjvbdznpQeDMY -DoDKjvbdZxcjNbkr -EOcKjvbdqdEiQNua -EPDLKvbdfHkVrNpg -DnbkKvbdXsMBMsoY -EObkKvbdcJNKLGXY -EPDLKvbdVqmwbEkc -EPCkKvbdJcJbpibx -EObjjvbdYNqAXtvU -EObkKvbdjAQHApGj -EPDKjvbdrbFmMHLZ -DnbkKvbdPIAXyAYa -DoDKjvbdSLZGVHLT -DoCkKvbdDnbkLWcE -DncKjvbdzoPpeDMY -EPDKjvbdQwNdDLhD -EPDKjvbdhfjCxuiu -DoCjjvbdajkenmcA -EPDKjvbdtTSTYyeD -DoCjjvbdijFhKMwr -DoDLKvbdpfDeTuaI -EPCjjvbdJXtCHlQp -EOcKjvbdjbkkRGuH -EObkKvbdVTlselWK -DoCkKvbdauCHXkTh -DnbjjvbdSLZGVGjs -DoDLKvbdehLWRmqH -DncKjvbdSBdFLhyL -DoDLKvbdmajXYPOV -EOcKjvbdpeceTvAh -EPCjjvbdNdctIhkE -EOcLKvbduWNwjQsA -DoCjjvbdtvOYKRTA -DncKjvbdqiAJeNOe -DnbjjvbdUtNUGLvK -EPDKjvbdMgColotk -EOcKjvbdQlxCZNtz -DoDKjvbdmfdwmNfy -EPDKjvbdrovPKDVf -DnbjjvbdDjIJuwjA -EPCjjvbdsBfNMHLZ -DoCjjvbdJbjDRJcY -EPDLKvbdZRMeJNEq -EPCkKvbdRkYfVGkT -DncLKvbdRbDeLiYk -EPCjjvbdqiAJdloF -DoCjjvbdFyVUaDwb -DoCjjvbdMRvmZtpz -DoDLKvbdGQATWffZ -EPCjjvbdwtmFQyMO -EOcKjvbdTIzKRAAl -DoCkKvbdsQVnicVf -DoDLKvbdFfKRmhtR -EOcKjvbdsCFmLfjy -DoDKjvbdddnqbXDK -DoDKjvbdYgWdAOri -DoCkKvbdmuUyjjSG -EObkKvbdhficYvJu -DoCkKvbdQlxCZNtz -EPCkKvbdGZVUaEXb -DncLKvbdEXxMTtTl -DoDKjvbdGFirNiUR -EPCjjvbdpssgRrLU -EObkKvbdVZHsykOn -DncKjvbdyTOJMrBg -EOcKjvbdRacdlIyL -EObkKvbdiCOcFWqR -DoDLKvbdRjxfVGkT -EOcLKvbdiBncFXQq -DncLKvbdnQZxukYb -DoDKjvbdpaIeAWgd -DncKjvbdVqnYCEkc -DnbjjvbdZRMdhmEq -EPCjjvbdhgKDYuiu -EOcLKvbdCIkBjhfK -EPCkKvbdZnmhdeZj -EOcKjvbdTppnuUhN -EOcLKvbdbVBfxKsh -EPDKjvbdFVxpQNKF -DnbjjvbdjvWnDaxX -EObjjvbdANIYrwZx -EObjjvbdauCHXjtI -EObkKvbdZirgpGaf -EObjjvbduoTzqLPU -DoDLKvbdxZhFeweS -DoCjjvbdILaznWqL -DncLKvbdaMkBrtlg -EObjjvbdNrtVgFUp -DnbkKvbdRzKHsCvA -DoCkKvbdiZuFkpnG -DnbkKvbdEztRElDJ -EPCjjvbdRECaQQdS -EPCjjvbdqqtkNkAm -EObkKvbdyNrhXriD -DoDLKvbdegkWRmqH -DncKjvbdNQXqWNfs -DoDLKvbdRadFLhxk -EPDKjvbdxUmFQyLn -EPCjjvbdxxJKBoyk -EObkKvbdnVUzLJqf -DnbjjvbdSQUGiedX -DncLKvbdrpVnjCvG -DoDKjvbdZirgpGbG -DncKjvbdOAJTUJrA -DnbjjvbdUyHsyjoO -EPDKjvbdfpBzvdXh -EPCjjvbdyTNhlqag -DncKjvbdLBKflaxR -DoCjjvbdVwJXvEEg -EOcKjvbdVqnXadlD -DoDKjvbdyNrgxSiD -EObjjvbdnVVZjjRf -DnbjjvbdFeiqmiTq -EObkKvbdFVxpQMie -DnbkKvbdIBkydzAD -EPCkKvbdZjTHofaf -DncLKvbdnPzYukZC -EObkKvbdLYqKSzuG -Dnbjjvbdxmrgwrhc -EObkKvbdTkuoBWOi -EObkKvbdIrxaSlxM -EOcLKvbdJqZeOfOF -DoCjjvbdBhjbKiFj -EPCkKvbdrDeJPnVa -EPCkKvbdNwoVzcnU -EOcLKvbdXmqAYVWU -EPCkKvbdZeYGzhJC -EOcKjvbdNddUIhjd -DoDKjvbdjggLeemk -EObkKvbdxZgefXeS -EOcKjvbdgFkzOGgA -EObkKvbdNdcsiIkE -EPDKjvbdbiMikFwY -EPDKjvbdelfWfmJk -EOcKjvbdHELWJajK -DoDLKvbdZRMeIldq -EOcLKvbdRXNccMHc -EPCkKvbdQlxCZNtz -DoCkKvbdyTOJMqag -EPDLKvbdCTAcTevr -EOcKjvbdrpVnicWG -DnbkKvbdZLrETmkm -EOcLKvbdRpTfifEX -DnbjjvbdQcbaPqDr -DoCkKvbdEuxpQNKF -EPCjjvbdNeEThiKd -EPDKjvbdVYgtZjoO -DoCjjvbdZRMdhleR -DoCjjvbdZsiIyDrn -EPDLKvbdaSGCgtGL -EPDLKvbdqTtGqrKt -DoCkKvbdnVUzKjSG -EPCjjvbdzQoMiJwA -EPDKjvbdXrlBMtOx -DoCjjvbdNHColpVL -EObkKvbdXnRAXuVt -EObjjvbdMJCMQxAS -EObkKvbdIrxaTMxM -DnbjjvbdbAudfQQX -DnbkKvbdnCKXYOmu -DoDKjvbdEXxMUUTl -EObkKvbdyXhiaozL -EObjjvbdEJhKVwjA -EOcKjvbdpfEFTuaI -EOcKjvbdbVCHYLTh -DncLKvbdyqOliJwA -EOcKjvbdkxrqsZHU -DncKjvbdDjHjVwjA -EPCkKvbdkDMLQfuH -EPCjjvbdUVlPjUBR -DoDLKvbdjJfHimXr -DoCkKvbdEuxooljF -DoDLKvbdYzcGRjWZ -DoDKjvbdwyhGGYFS -DnbkKvbdsrrSxyeD -EPCkKvbdxmrhXrhc -EPDKjvbdDjHivXjA -EObkKvbdfMfXGlik -EPDLKvbdGdKvKBij -DoCkKvbdbLMGOmcA -EPCkKvbdRXNdDLgc -EPCjjvbdZsiIxcrn -DoDKjvbdpyPIGqEY -EPDKjvbdlZTRryHU -DoDKjvbdUslsekvK -DncKjvbdKfFhCBQu -DncLKvbdSCDeMIyL -EPDKjvbdJcJcRJcY -DoDLKvbdraellHLZ -EPCjjvbduDCtwWPP -DnbkKvbdBdPaWJlf -EPCkKvbdqFceUVaI -DnbkKvbdcyxoxYqC -DnbkKvbdlYsSTYft -EObjjvbdZHXEAOsJ -EObjjvbdURROtuHm -EPCjjvbdZLrDsnMN -EPCjjvbdfIKvRmpg -EPDLKvbdwWlBVaVu -EObkKvbdZMSDsmkm -EPDKjvbdKNAEZfuB -DnbjjvbdhyuGMROG -EObjjvbdJuuGDdgJ -EPDLKvbdgQBzwDxI -EObjjvbdjvXNdCXw -EPCjjvbdlZSrSyGt -DoDKjvbdXsLaMsnx -DoDLKvbdTlVoAuoJ -DnbkKvbdptUGrSLU -EObkKvbdEztRFMCi -EOcLKvbdTkvOaVoJ -EObkKvbdDoCjjwCd -EPCkKvbdTfznLwVe -EObkKvbdRjyGUfjs -EPDKjvbdVviXvEFH -DnbjjvbdKkBIWAKZ -EOcLKvbdqFdFUVaI -EOcLKvbdBhjakJFj -DncKjvbdauBgYKsh -DnbjjvbdxKvdHzyf -DoCjjvbdxVMdqYlO -EPCjjvbdEPDLLXDE -EPDLKvbdVvhwucdg -DncKjvbdaRfDITfL -EPDKjvbdfpBzvcxI -DoCkKvbdGLFTDHmV -DoDLKvbdcTDKtDjB -DnbkKvbdZRMeIldq -EObjjvbdRjyGVGkT -EPCjjvbdlhctRVRa -DnbjjvbdyXhibPzL -DnbjjvbdFpASvgFy -DnbjjvbdKCicRJcY -DnbkKvbdPxmAGrrK -EPCjjvbdpstHSSKt -EObkKvbdiZtelQnG -DoDLKvbdKkAgvAJy -EObjjvbdsPvPKCuf -EOcLKvbdhyuGLqOG -EPDLKvbdyOSgxShc -EObkKvbdmJDsptqa -EPCjjvbdbVCHYKtI -DoCkKvbdCJLBkIfK -EPDKjvbdTqQnuUgm -EOcLKvbdypnmIjXA -DoDLKvbdiLddOUby -DoCkKvbdaSFbgtGL -EPDLKvbdraellGjy -EObkKvbdWRmwbEkc -EPCjjvbdDoDLKvcE -DnbjjvbdjEjfuPAO -DnbjjvbdqvokbiYq -DnbkKvbdVZITzLOn -EPDKjvbdUWLpJtAq -EObkKvbdwtmFQyMO -DoDLKvbdFWZQPmKF -EPDKjvbdLBKgMawq -DncLKvbdANIYsWyx -EObkKvbdqvolDJYq -EOcKjvbdQlwbZOUz -EPCkKvbdlqyUzTEJ -EPCkKvbdSLYfUgKs -DoCjjvbdRotHJfEX -EOcKjvbdrXQMCiZR -DncLKvbdaofgELzd -DoDKjvbdehKvSNqH -EPCkKvbdzaAOfgBl -DoCkKvbdVUMsfMVj -DoDLKvbdUGznLwVe -EPDLKvbdDoDKjwDE -DoCjjvbdANHxsXZx -EPCkKvbdJpydnenF -EPCjjvbdtTRsZZeD -DoDLKvbdnQZyWLZC -EPCkKvbdKNADyfta -EPCkKvbdUVlPjTaR -DncLKvbdeOeSjstS -DncKjvbdXrlAmUOx -DoCkKvbdxnTIXrhc -EPDLKvbdZjTIQGaf -DoCjjvbdPxmAGrrK -EPDKjvbdLZQirztf -DoDLKvbdkHflGFnL -DoCjjvbdiMFEOUby -DnbjjvbdhaoDFXQq -EPCkKvbdyzeNqhIh -EPDKjvbdbUbGwkUI -DoCkKvbdEXxLsstM -DoDLKvbdaRebhUGL -EObjjvbdMfbpNQUk -DoDLKvbdCEQAuilf -EObjjvbdMowpunHT -DoDLKvbdzHYlAMeX -DoCkKvbdegkVqnQg -DnbkKvbdwWlAuaVu -DncKjvbdFfJqnItR -EObjjvbdZjTHpHBf -EPCkKvbdbsDKtEJa -EOcLKvbdZtIiZESn -DoDLKvbdpxoIHRDx -EPDLKvbdTpqOtuIN -DnbjjvbdmoyxvKxb -DncKjvbdqGEEtWBI -EPCkKvbdQwNdClHc -DoCkKvbdHELViajK -EPDLKvbdCJLBkIfK -EPDLKvbdvwMBWBVu -EPDKjvbdxrmiNRag -EOcKjvbdxVMeQyLn -DoCkKvbdraelkgLZ -EPCjjvbddndsLUUS -DoCjjvbdhgKDYvKV -EPDKjvbdBiKbKiFj -DncKjvbdKkBIWAKZ -DnbjjvbdjlakzEgP -EObjjvbdNrtWGeUp -EPDKjvbdidkGuPAO -DnbkKvbdjAQHBPgK -DoCkKvbdUxgtZkPO -DoDLKvbdDoCkLXDE -DoDLKvbdkVvmcaxX -EPCkKvbdmfeXmOHZ -DoCjjvbdHDkWJajK -DoDLKvbdkHgMGFnL -EObjjvbdBdQAuilf -EPDKjvbdxUleQxlO -DoDKjvbdJbjDRJcY -EPDKjvbdXsMAltOx -EOcKjvbdIrxaSmXl -DoDLKvbdyYJJbQZk -DoDLKvbdQlwaxnUz -EObkKvbdqvpMDIyR -DoCkKvbdhzVGLpnG -DncKjvbdJKEAJofd -EOcLKvbdZLrETnLm -DncKjvbdQvnDcMID -EPDLKvbdiLddOUby -EOcKjvbdeJiqvUzn -DnbjjvbdsBemMGkZ -EPCkKvbddtAUASmW -EPCjjvbdiLeEOVCy -EPDKjvbdkxrrSyHU -DoCjjvbdURQoVUhN -EOcKjvbdtkwwBUBX -EOcKjvbddeOqawCj -EOcKjvbdbAvEfPow -EPCkKvbdzROmIjXA -EObjjvbdKDKCpibx -EPDKjvbdIGfyyYXg -EOcLKvbdeOdsKssr -EOcKjvbdsBelkgKy -DoDKjvbdJYUCIMRQ -EOcLKvbdjcMLQgVH -EOcLKvbdJTYaSmXl -DoDLKvbdNddUJIkE -DoDLKvbdFjdsChNV -DnbjjvbdmttyjjSG -EPDLKvbdVgwuxHYz -EOcLKvbdsCGMkfjy -EOcKjvbdKWVGDeHJ -EPDLKvbdjJegjMwr -DoCkKvbdNHDQMotk -DoDLKvbdjmBkydgP -DnbkKvbdSLZFtfjs -EPDKjvbdjbkjpfuH -EObjjvbdkVwNdBww -DncKjvbdFxtuBEYC -EPCkKvbdrMzJxkhJ -DoDLKvbdptUGrSKt -EOcKjvbdhzUelQnG -EObkKvbdsQVoKCuf -DoCkKvbdzitpPcsU -DoCkKvbdySnJMqag -DncKjvbdZRMeImFR -EObkKvbdYzcFrKVy -DoDKjvbdrNZjZMIJ -EPCkKvbdEvYoolie -EOcLKvbdLBKgNCXq -DnbkKvbdrpVnjDWG -EObkKvbdLLBHvAJy -DoCkKvbdqmZixkgi -DoCjjvbdhytfLpmf -DnbkKvbdVZHsyjoO -EObkKvbdWWhxWEEg -EObkKvbdhfjDZWJu -DoCjjvbdZoOIddzK -DoCjjvbdCDoaWJmG -DoCkKvbdzitoocrt -EOcLKvbdOSsvGduQ -EOcLKvbdVqnXbElD -EPDKjvbdgFlZnHHA -EOcKjvbdUsltFkvK -EPCkKvbdePFSkTsr -EPCkKvbdssSTYzFD -EOcLKvbdVTlselWK -DncKjvbdZRMeJMdq -EOcKjvbdYSlAlsnx -DncLKvbdSZihTDWA -DnbjjvbdvvlBWAuu -EOcLKvbdEvZPoljF -EPDKjvbdHELWJbJj -DoDKjvbdDjHiuxKA -DncLKvbdrMyjYkgi -EOcLKvbdRbDdlIxk -DoDLKvbdFVyQQMie -EOcLKvbdZxdJmcMS -EPDKjvbdFejRmiUR -EPCjjvbdnPyxujxb -DoCkKvbdjKGIKNXr -DoCjjvbdYSlBNUPY -DoDLKvbdZshiZDsO -EPDLKvbdkyTRsYft -DncKjvbdJbicQicY -DoCkKvbdXGZZtAOs -DnbkKvbdZjSgpGbG -DncKjvbdWSOYBeMD -DoDLKvbdKNADyfta -DoDLKvbdLBKgMbYR -EObjjvbdNddThhkE -EPCjjvbdQdCaPqES -DnbkKvbdvBDySoFI -EPCkKvbdDoDLLWcE -DncLKvbdaSGDHtGL -EObkKvbdKNADzGta -DncLKvbdTAFJHaoE -EOcLKvbdTAFJIBoE -DoDLKvbdUtNTelWK -EPCkKvbdKefICApu -EObkKvbdySmhlqbH -EPDLKvbduaEYroFI -DnbjjvbdSKxfVHLT -EObkKvbdhkdcnVDZ -DnbkKvbdCSaDTevr -DoCkKvbdiBoCeXQq -DncLKvbdZjShQGaf -EPCkKvbdIwsagkqQ -DnbkKvbdnCKWwoNu -DncKjvbdelfWgNJk -EOcLKvbdSPtHKFcw -EObjjvbdZRNEhleR -DoCkKvbdbLMGPNcA -DoCkKvbdRkZFtfjs -EOcLKvbdySmhmSBg -DoCkKvbdWHxVwgYz -EObjjvbdURQntuHm -EPDKjvbdySnJMqbH -EOcLKvbdOStWHEtp -EPCjjvbdeOeTKstS -DncLKvbdssRsZZdc -EObjjvbdrovPKCuf -EPDKjvbdiZuFkqOG -DncLKvbdsBfNLfjy -EOcLKvbdCDpAujNG -EPDKjvbdOSsugFUp -DoDLKvbdNQYRVmfs -EOcLKvbdTAEiHaoE -DoCjjvbdEPDKjwDE -EPCkKvbdqUUGqqkU -EPDKjvbdtbcVXVoP -DnbjjvbdhbOcEvqR -EOcKjvbdCTAcUGWr -EPCkKvbdQdDApQcr -DnbjjvbdTfznLwWF -DnbkKvbdCDoaVjMf -EPCjjvbdBsBDUFvr -EPCkKvbdWWiXuceH -DoCjjvbdJcJcRJbx -DoDLKvbdsCGMlHKy -EPCjjvbdSBceLhyL -DoDKjvbdHffzZYYH -EPCkKvbdvAdZTOeI -DnbkKvbdxwhjBpZk -DncKjvbdOFDtIhjd -DoCjjvbdmpZxujxb -EOcKjvbdIryAsMwl -EPCkKvbdTqQnuUhN -DncKjvbdOSsvHEtp -EPDLKvbdZoOIdeZj -DnbkKvbdKeegbAqV -EPCjjvbdqFceUWAh -DnbkKvbdCWzchdpW -EPCkKvbdzQnlhiwA -DoDLKvbdqdEiQNua -DncKjvbdddoRawCj -EPDLKvbdlYrrSxft -DnbkKvbdRWnECkgc -DncKjvbdGYuUaEYC -EPDLKvbdZsiIxcrn -DoCjjvbdJbibqJbx -EPDKjvbdGYtuBDxC -DnbjjvbdCEQAvKMf -EObjjvbdvAcyTPEh -DoCkKvbdxwhjBozL -DoDKjvbdNsTugFVQ -DoDKjvbdkHgLeemk -EOcLKvbdwWlBVaWV -EOcLKvbdrNZjYkgi -DnbkKvbdJYUBglRQ -DnbkKvbdjvWmdCXw -EObjjvbdmajXYPOV -DncKjvbdDihJuxKA -EPCjjvbdwzIGGYFS -DoDKjvbdMpYQvOHT -DncLKvbdbhljLFwY -EObjjvbdelevgMik -DnbjjvbddePSCWbj -DnbjjvbdKQydnenF -DnbkKvbdZQmEhmFR -DoDKjvbdjKFgimYS -EObjjvbdANIZSvyx -DoCjjvbdfHkWRnRH -EObkKvbddiiqutzn -EOcKjvbdqYnhHQdY -DoDKjvbdKCjDQjCx -DoDLKvbdjgflFfNk -EOcLKvbdtTRrxzEc -DnbkKvbduLwwBUAw -DncLKvbdkWXOEBxX -EPDKjvbdNxPVzcnU -EPCjjvbdUMVnaWOi -EObkKvbdZQmFImEq -DncLKvbdQvmdDMID -EObjjvbdGFjSNhsq -EOcLKvbdbAvFFpQX -DoCjjvbdkCkjqGuH -EPCkKvbdbLLeoNcA -DoDLKvbdemFwGmJk -EOcKjvbdVUMtFlWK -EPDLKvbdWXJXucdg -DncLKvbdqcdhpNua -DncLKvbdGYuUaDxC -EPCkKvbdGZUtaDwb -EOcLKvbdjuwODaxX -EOcKjvbdSKyFuHKs -EOcLKvbdNQYQvOHT -EPCkKvbdNGcQNPuL -EOcLKvbdPIAYZAZB -EObjjvbdMfcPlpVL -EPCjjvbdLAjflbXq -EPCjjvbdySmhmRbH -EPDKjvbdxsNhmSBg -EOcKjvbdZMSDsmkm -DoCjjvbdbAudfQQX -DoCjjvbdePErjtTr -DncKjvbdtkxXBUBX -DoCkKvbdqvokbiYq -DnbjjvbdMfbpMouL -DnbjjvbdijFhKNXr -DoDKjvbdhgJcZVjV -EPDKjvbdIHGzZYYH -DnbjjvbdNsTufeVQ -DnbjjvbdqlyixlIJ -EPDLKvbdmaivxPOV -DnbkKvbdmJDsptrB -DnbjjvbdQYmAGsSK -EOcKjvbdZjTIQHCG -EPDKjvbdqGDeTuaI -EOcLKvbdADSYJzIp -DncLKvbdeuzwoizs -EObjjvbdFyUuBEXb -DncLKvbdnUtykJqf -EPCjjvbdelfXGmKL -EOcKjvbdKCjDQjDY -DncKjvbdaaVeGPow -DncKjvbdqvolDJYq -DoCjjvbdDnbjkWbd -DoCjjvbdjlakyeHP -DoCkKvbdLZRJrztf -DncKjvbdZisIQHCG -EPDLKvbdZyDjNbkr -DnbkKvbdLAjfmBwq -EOcKjvbdtSqryZeD -EOcLKvbdIMBzmvqL -EObjjvbdiVZdvqtb -DoDLKvbdMgDPmQVL -EPDLKvbdMgCpNPtk -EObjjvbdKVuGDeHJ -EOcLKvbdjJehJlxS -EPCkKvbdhlEcmuDZ -DoDKjvbdHfgZyXwg -EPCjjvbdShyiqABM -EPDLKvbdMgColouL -EPDLKvbdVqmwadkc -EPCjjvbdnCKWwnmu -DncKjvbdRpUGjGEX -DoDKjvbdkWWnECYX -DnbjjvbdkMalZeGo -EOcKjvbdxUleRYkn -EObkKvbdFxtuBDxC -EObjjvbdnGdwlnGy -EObkKvbduaEYsOeI -EPCkKvbdyTOJMrBg -EObjjvbdDHMFgAzc -DnbjjvbdEOcKkXCd -EPDLKvbdBhjbLIfK -EPCkKvbdZtJJZETO -EOcLKvbdIwsagkqQ -DoCkKvbdZyDjNbkr -DnbjjvbdBsAbsfWr -DoCjjvbdeOeSjssr -EObkKvbdVUNUGMWK -DncLKvbdfMfWfmKL -DoCjjvbduaEZTOdh -DoCkKvbdZisIPgBf -DnbjjvbdVZHtZjoO -DoCjjvbdCWzchePv -EObjjvbdJmAEZfuB -EObjjvbdvvkaVaWV -DoCjjvbdiiegjNXr -DnbjjvbdcScLUEJa -DncLKvbdJXsbHlQp -EPCjjvbdrpWOjDVf -DoDLKvbdDnbjjwDE -DnbjjvbdxnShYSiD -DoCjjvbdqGEFUWBI -DoDKjvbdtSrTYzEc -EObkKvbdEPDLLWcE -DoDKjvbdKQzEnfOF -EPDLKvbdIwtBhMRQ -DoCjjvbdTvLojUBR -EPDLKvbdZyDimbkr -EPDLKvbdptTfrSKt -DncLKvbdkMbLyeHP -EOcKjvbdKfFhBaQu -EObjjvbdeEoRbXDK -EOcKjvbdHDjvJbJj -EObkKvbdEztQeLcJ -DncKjvbdUtMsfLuj -DnbjjvbdRXOECkgc -DncKjvbdLAjfmBxR -EOcLKvbdsPvPJcVf -EPCjjvbdygYlAMdw -DnbjjvbdmuVZkKRf -EPCkKvbdSZigrcWA -DncLKvbdcJMikGWx -EOcKjvbdGLErcHlu -DoDKjvbdKNADygUa -EPDLKvbdMfbolpUk -DoDLKvbdUxhTyjoO -EPCkKvbdMtrqjmAX -EPDLKvbdLBLGmBxR -DoCjjvbdrzMQTAgn -EPDLKvbdUxhTykPO -DnbkKvbdnVUzLJqf -DoCkKvbdLYpirztf -EPDLKvbdFejSOItR -DncLKvbdvlvANDeN -DncLKvbdwtleRYkn -EObkKvbdcJNKLFvx -EPCjjvbdYSkaNTnx -EOcLKvbdSxKlNzjx -DnbjjvbdHbMZdzAD -EPCjjvbdXnRAXuVt -DoDKjvbdQmYBxnUz -DoCkKvbdWSOYCEkc -DnbkKvbdemGXGlik -EObjjvbdNeDsiJLE -DoCkKvbdbiMijfXY -EPCjjvbdmIdTptrB -DoCjjvbdEztQeMDJ -DncLKvbdCIjbLIfK -EPCjjvbdhkeENuDZ -DoCkKvbdAMgxsWzY -DoCjjvbdiZtelQnG -EOcKjvbdWXJXuceH -EOcLKvbdZRMeJMeR -EPCkKvbdiVZdvquC -DoDLKvbdkVvmdCXw -EObjjvbdnHExMmgZ -EPDKjvbdHgHZyYYH -EPDKjvbdRbEFMJYk -EPCkKvbdvBEZSndh -DnbkKvbdcScLTdJa -DoDLKvbdcJMijfXY -DnbjjvbddndrjstS -EPDLKvbdbiNJjevx -DnbkKvbdOSsvGduQ -DoDKjvbdMowpvNfs -DoCkKvbdZjSgpGaf -DnbkKvbdddnqawDK -DoDLKvbdKaLGmCYR -DoCjjvbdmuVZkKSG -EOcKjvbdZQldiMdq -EObjjvbdRNXayOUz -DncLKvbdeuzxQJzs -DncLKvbdEOcKkXCd -DncKjvbdhtyeXSUb -DnbjjvbdEObjkXDE -DncLKvbdKQyePGNe -EOcLKvbdHgGzZXwg -EObkKvbdrMzJxlIJ -EObkKvbdRXNdClHc -DoDLKvbdwzIFexEr -EPDKjvbdJYUCIMQp -DnbkKvbdhbOcFWqR -EOcKjvbdnGdxMmgZ -EObjjvbddeOqawCj -EPCjjvbdqTsgSSKt -DncKjvbdJXtBhLqQ -DoDLKvbdatagYKsh -EOcKjvbdjEkHUoAO -DncKjvbdLFfICBRV -DnbkKvbdKQydoFme -EPDKjvbdhlFEOVCy -EPCkKvbdZxdJmblS -EPDKjvbdJbjCqKCx -DncKjvbdwNWANDdm -EPDLKvbdpyPHfqDx -EPCjjvbdOTTufeVQ -EPCkKvbdtbbtvvOo -DoCjjvbdbBWEfQQX -EObjjvbdKNAEZgVB -DnbjjvbdJXtBgkqQ -EPCjjvbdGYtuBEXb -DoDLKvbdZjShQGaf -DoDLKvbdQmYCYnUz -EOcLKvbdpedFTvAh -EObjjvbdKQydoGNe -EPCkKvbdKDJcRKDY -EObkKvbdrafMkfkZ -EObkKvbdiCObdwRR -EPCjjvbddBsMrAUN -DoDKjvbdWIXvXgYz -DoDKjvbdkClKpftg -EOcKjvbdkCkjpftg -EOcLKvbdVrOYBeLc -EObkKvbdmoyxukZC -EPCjjvbddZyQXyRC -DoCkKvbdhbPCdvqR -DoCkKvbdJvUeceGi -EOcLKvbdVqnXaeMD -DoCkKvbdWWhxVceH -EPDKjvbdiGjDZVjV -EObjjvbdGAnpxizm -DoCjjvbdiZuFlQnG -EOcKjvbdTqRPVVIN -EPCjjvbdqdEhomvB -DoCkKvbdLAkHMaxR -EPDLKvbdOEdThiKd -DnbkKvbdkxrrTZGt -EOcLKvbdEPDLLXCd -DoDLKvbdTIzKRAAl -EPDLKvbdSCDeLiZL -EPCkKvbdpyOgfpdY -EPCjjvbdtkwwBTaX -EPDKjvbdiBoCeWqR -DoCjjvbdhgJbxujV -DoDLKvbdqdEhpNvB -EOcKjvbdkCkjqGuH -EPCjjvbdhbObeXQq -EOcKjvbdxsOImRbH -DoCjjvbdKWVFceHJ -DoDKjvbdBiKbKiGK -EPDKjvbdnGeXmNgZ -EPDKjvbdiifHjNYS -EOcKjvbdauBgXjsh -DnbkKvbdUtMsfLvK -DncKjvbdNrtVgEuQ -EPDLKvbdUsmUGLvK -EOcLKvbdNGcQMpVL -EPCkKvbdqmZjZLhJ -EObkKvbdFfKSOJUR -DncKjvbdhaoCeXRR -DoCkKvbdmfdwlnGy -EPCjjvbdjbkjqGuH -DoDKjvbdlqyVZsEJ -DnbjjvbdWWiYVcdg -EOcKjvbdeATqMwjG -EOcKjvbdqUTgSSKt -DncKjvbdqwQMDJZR -EPCkKvbdsQVoJbuf -DoCjjvbdVTmUFlVj -DoDKjvbdmajWxPOV -EOcKjvbdUQpoUthN -DoDKjvbdwMvAMdEm -EPDLKvbdDnbkLXDE -DncLKvbdFfKSNiTq -DncKjvbdIryBSlwl -DoDKjvbdmgEwlmfy -DncKjvbdqwPkbhyR -DncLKvbdNeETiJKd -EObjjvbdDoCjkXCd -EObkKvbdjgflFfNk -DncLKvbdxsNhlrCH -DoCjjvbdeFOrCWbj -EObjjvbdkNBkzFHP -DoCjjvbdxrmiNSCH -EOcLKvbdVwJXvDeH -EPCkKvbdZRMdhmEq -EObjjvbdjSzhsKiz -DoCkKvbdqdEiQOVa -EOcLKvbdpaJFAWhE -EPDLKvbdRkYfVGjs -DncKjvbdMpXqWNgT -EOcLKvbdVYhUZkPO -DoCjjvbdUxhTyjnn -DoCkKvbdOYOuzcmt -DoDKjvbdZLqdUNlN -DoDLKvbdJSyBTMxM -DoDLKvbdYORAXtut -DncKjvbdHffzYxXg -DncLKvbdmpZyVjyC -EOcKjvbdmfeXlnGy -DoDLKvbdkHfkeenL -DoDLKvbdJTZBSmYM -EObkKvbdrMzKZMHi -DncLKvbdiLeDmuCy -DoDKjvbdjvXNcbYX -DnbkKvbdrJAJeMne -DoDLKvbdvlvAMdFN -EPCjjvbdZLrDsmlN -DnbjjvbdaaVdfPpX -EObkKvbdrbFlkfjy -DoDKjvbdGLErbhNV -DoCjjvbdCIkCKhfK -DnbjjvbdeEoSBwDK -DncLKvbdirziSjiz -EPDKjvbdwzIGGYEr -DncKjvbdbVCGwkTh -EObkKvbdakMFnmcA -DnbkKvbdRpUHKFdX -DoDLKvbdMSWlytpz -DncLKvbdpssgRrKt -EPCjjvbdZRMeImEq -DoCjjvbdqrVKmjaN -EObjjvbdjAQGaPfj -DoDLKvbdyqOmJJwA -DnbjjvbdQccApRES -DoDLKvbdIsYaSmXl -EPCjjvbdrovPKDWG -EPDLKvbdqdEhpOVa -DoCkKvbdVviYVdEg -DoCjjvbdqZPIGqEY -EPCkKvbdOTTvGeVQ -DoCkKvbdDncLLXCd -EObkKvbdvBEYsOeI -DoCjjvbdYORAYVVt -EOcLKvbdhgKCxuiu -DoDKjvbdddoRbWcK -EObkKvbdmoyyWKyC -EOcLKvbdyYJJbQZk -DnbjjvbdUyIUZkPO -DncKjvbdFyUuBDxC -DoCjjvbdnQZyVjyC -DoDLKvbdatbHYKsh -DoCjjvbdczYowxpb -DncLKvbdIsZAsMxM -EPDKjvbdGKeTChMu -DoCkKvbdptTgSRjt -EPDKjvbdMtrqjmAX -DncLKvbdKQzEoFme -EObjjvbdFxtuAcxC -DncKjvbdkDLkRHVH -EPCkKvbdunszqKnt -DoCkKvbdezuxeJTw -EObkKvbdzjVQQDsU -EPDLKvbdjKGIKMxS -DoCjjvbdcyyQXxqC -EObkKvbdhtydwRtb -DnbjjvbdfNGXHNKL -DoDKjvbdmoyxujxb -DncLKvbdmuVZkJqf -EObkKvbdZyDjNbkr -DnbkKvbdyXhiaozL -EObkKvbdKWUfDeHJ -DoCkKvbddoFTLUUS -DnbjjvbdJvUfEFHJ -EObjjvbdsrqrxzFD -EObjjvbdmgFYMmfy -DnbjjvbdbrcLTcjB -EPDKjvbdZtIiZETO -DncKjvbdSLZGVHLT -EObjjvbdhtzFXSVC -EOcKjvbdvAcxsPEh -EOcKjvbdbrbjsdKB -DoDKjvbdezuxdiTw -DoDKjvbdhkdcnVDZ -DoCkKvbdNddUJIkE -DnbjjvbdsCGMlGjy -EOcKjvbdssSSxydc -DoCjjvbdSPtHJfDw -DoDLKvbdmRyVZrdJ -EOcLKvbdBdQBVjNG -EPCjjvbdtvOXipsA -EOcLKvbdDwwlUUUM -EObkKvbdhkeENuDZ -EOcKjvbdwygfGYEr -DncKjvbdbsCkUEJa -DnbkKvbdvlvAMceN -EPDKjvbdTvMPitAq -EPDLKvbdMowpvOHT -EOcKjvbdNQXpvNgT -DncKjvbdYzcFqiuy -EObjjvbdqUUGrRjt -EOcKjvbdUaBqTRSZ -DnbjjvbdrafMkfjy -DncLKvbdmgFXmNfy -DncKjvbdNrtVfdtp -EOcKjvbdVZITyjoO -EPDKjvbdTukpJtBR -DoDLKvbdyOTHxTIc -DnbjjvbdsBfNLfkZ -EPCjjvbdmJDtRVSB -EObjjvbdmJDtRUrB -DnbjjvbdiVZeWrVC -DncKjvbdBiKajhfK -DnbkKvbdziuQPcsU -EOcKjvbdGFiqnJTq -DoCjjvbdAMhZTXZx -DncLKvbdDjHiuwjA -DnbkKvbdBdQBVjNG -EPCjjvbdqlzKYkgi -DncLKvbdLLBIWAJy -DncLKvbdbhljKfXY -DncKjvbdaogHELzd -DnbkKvbdjEkGtoAO -DnbjjvbdGdKvJbKK -EPDLKvbdqrUjnKaN -EObjjvbdnVUykKSG -EPDKjvbdVrNwbFMD -DoDKjvbdvlvAMdEm -EPCjjvbdaaWEeopX -EPDLKvbdULuoBVoJ -EPDLKvbdzjUpPcsU -EPDKjvbdZnnJEdyj -EPDKjvbdtlXwAsaX -EPCjjvbdjJfHimXr -EPCkKvbdxwiKBpZk -DoCkKvbdLiBlQxAS -EObkKvbdXFxytAOs -EObjjvbdnQZxukYb -DncKjvbdZxcjNcMS -DnbkKvbdQcbaQQcr -EObkKvbdVgxVwgYz -DoDLKvbddoEsLUUS -EOcKjvbdTppnttgm -DoDKjvbdBhkBjhej -EPCkKvbdlhcsqVRa -DoDKjvbdZshiYcsO -DoDKjvbdtcDUvvPP -DnbkKvbdRkZFuGjs -DoCkKvbdaaVeFopX -EObkKvbdYORAXtut -DncLKvbdqwPlDJYq -DoDLKvbdbBWEepPw -DnbkKvbdVvhxWDdg -EObkKvbdfHkVqmpg -DncKjvbdaMjartmH -EPCkKvbdBhjbLIej -DoCjjvbdCIjbKiFj -DoDKjvbdkIHLefOL -EOcKjvbdrbGMlGkZ -DncLKvbdPxmAGsRj -EOcKjvbdZxdKODMS -DncKjvbdkDLjqHUg -EOcLKvbdjEkHUoAO -DoDLKvbdrovOjDVf -DncLKvbdZshiZESn -DncKjvbdUyIUZjnn -EPDLKvbdxmrhYSiD -DoCjjvbdaNKasUlg -DnbkKvbdYqMeJMdq -DncKjvbdZoOIeEyj -EOcKjvbdemGXGlik -EObjjvbdyzdnRhIh -DncKjvbdHEKvJbJj -EObkKvbdSCDdlIxk -EPCjjvbdGAoQxizm -DoCjjvbdaNKasVMg -EObkKvbdePErkTtS -EPCjjvbdlhdUQuSB -EPDKjvbdNQXpvOGs -DoCkKvbdXnRAYUut -EObkKvbdcTCkUEKB -DncLKvbdmRyUzSdJ -EPDLKvbdrSVLNkAm -DoCkKvbdJvUecdgJ -DoDLKvbdRDbaQRDr -EPDKjvbdYlSETmlN -EPCkKvbdbUagYKtI -EPCjjvbdssRrxzFD -EPCjjvbdRMwbYmtz -DnbjjvbdxrmhmRag -DoDKjvbdTvLpJtAq -EPDKjvbdVBBprprZ -DnbkKvbdRkYeuGkT -EOcKjvbdmbKWwoOV -EOcKjvbdZeYGzghb -EPCjjvbdFeirOJUR -DoCkKvbdZsiIxcrn -EPDKjvbdDnbkKvcE -DoDLKvbdsrrTZZeD -DncKjvbdJbjCpicY -DnbjjvbdcyxpXxpb -EPCjjvbdrXQLbhxq -DncKjvbdzROmJJwA -DoDKjvbdqdFIpNvB -EPDKjvbdkHfkfGNk -DoDKjvbdFjdsDINV -DoDKjvbdUyITyjoO -EOcLKvbdiUzEwRtb -EPCkKvbdmfeYMmgZ -DncLKvbdHgGyyXxH -EObkKvbdMuTSLNAX -DncKjvbdtbcUwWOo -DoCjjvbdVwIxWEFH -EOcKjvbdhgJcZWKV -DoCjjvbdsCFllHLZ -EPDKjvbdGcjvJbKK -EOcLKvbdnGeYNNfy -DncKjvbdZnnIeFZj -DoDKjvbdxUldqZLn -EOcKjvbdrovOibvG -DoDKjvbdUWLpKTaR -DncKjvbdePFTKtTr -EPDLKvbdFxtuAdYC -DoDLKvbdfIKvRnQg -EPDLKvbdypnmIjXA -DncKjvbdbUagYLUI -EPDKjvbdnVUyjiqf -EObkKvbdKWVGDeGi -EObkKvbdaNKbSuMg -DoDKjvbdNVSqkNAX -EObkKvbdhbPDFWqR -DoDLKvbdLGFhBaRV -EOcKjvbdbrcLUDjB -EObjjvbdZHXEAPTJ -EPCjjvbdCSaDTevr -DncLKvbdgQBzvcxI -EObjjvbdidjfuPAO -DoDLKvbdzjUoodTU -DncKjvbdGLEsChNV -EPCjjvbdNeDshiLE -EObjjvbdGGKRnIsq -EObkKvbdeYZtTqez -EOcKjvbdQwODblHc -DoCkKvbdkClLRHVH -EPCkKvbdxUldqYkn -EPCkKvbdvBDxsPFI -DnbkKvbdqvpLcIyR -DncKjvbdqmZixkhJ -DoDLKvbdkVwNdCYX -EObkKvbdUxgsykPO -EPCkKvbdjcLjpgUg -DnbjjvbdbUagYKtI -EObjjvbdDjHjWXjA -EObjjvbdrykpSaIO -EObjjvbdrbGMlGjy -DncLKvbdVYhUZjnn -DoDLKvbdjlakydfo -DnbkKvbdVTmUGMVj -EObjjvbdZjTIQHCG -EOcLKvbdZxcjNcLr -DoCkKvbdqTsgSRjt -DnbjjvbdCIkBkJFj -EPCkKvbdaogHELzd -EPCjjvbdNPxQunGs -EObjjvbdxZhFfXeS -DoDKjvbdjblKqHUg -EObkKvbdNPxRWNgT -DoDKjvbdkaNOmALA -EPDLKvbdxsOImSCH -EOcLKvbdZshhyETO -EPDLKvbdIHHZyYYH -DoDKjvbdliEURVRa -EObjjvbdiVZeXRtb -EOcKjvbdiHJcYvJu -EOcKjvbdIsYaTNXl -DoCkKvbdtlXvaTaX -EOcKjvbdNQYRVnHT -DoDKjvbddjJqvUzn -DoDKjvbdULuoBVoJ -DoDLKvbdUslselVj -EPCkKvbddePSCWbj -EPDKjvbdNeDtIiKd -EOcKjvbdiUzFXSUb -DoCkKvbdmRyVZsEJ -EPCjjvbduLwwAtBX -EPDLKvbdxZgfGXdr -DnbkKvbdBcpAujNG -DnbjjvbdZtJIyDrn -EObjjvbdmbJvwnmu -EPCjjvbdXnRAYVWU -EOcLKvbdyOShXsJD -DoCjjvbdptUGqqkU -DnbkKvbdFpASwHGZ -DnbkKvbdwtleRYlO -EPCkKvbdnHFYMmfy -EPDKjvbdKCjDQjDY -EObkKvbdeqaWzlDP -DoCkKvbdbLMGPODA -DoCjjvbdpyPIGqDx -EOcKjvbdbhmKLFwY -DoDLKvbdEOcKjwCd -EPCkKvbdePFTKtUS -EPCkKvbdtvNwipsA -EPCkKvbdzoQQdblY -EOcLKvbdKjaHvAJy -EPDKjvbdvPTzpkOt -EPDKjvbdMJCLpxAS -EObkKvbdWWhwvEEg -DnbkKvbdcJNJjevx -DoCkKvbdNQXpunGs -EPDKjvbdWSNxBdlD -EPDKjvbdwyhFeweS -DncKjvbdddnrCWcK -EObjjvbdeKJrVtzn -EObjjvbdrykosBIO -EPDKjvbdiiehKMxS -DncKjvbdrWpMCiZR -DoCjjvbddoFSjssr -DoCjjvbdbhmKKfWx -EObjjvbdmajWwoNu -EOcLKvbdDxYLstUM -EPCjjvbdddoRawDK -DncKjvbdmuUzKjSG -DoDKjvbdLFegbBRV -EPCkKvbdySnJMqbH -DnbjjvbdLLAgvAKZ -EPCjjvbdraemMHLZ -EObjjvbdnUtzLKSG -EPDKjvbdkDMLQgVH -DoDKjvbdkHgMGGOL -DoCjjvbdxsNiNSCH -EObkKvbdNQXpvOHT -EObkKvbdQwNdDLgc -DnbjjvbdegkWRnRH -DnbkKvbdGZUuAcwb -DncLKvbdiMEcmuCy -DoDLKvbdFfJqnJTq -DoDKjvbdZnnJFEzK -EOcLKvbdTqRPUtgm -EOcLKvbdRjyFuHLT -EOcKjvbdhtzEwRtb -EObjjvbdTXjkmzjx -DoDKjvbdqdFJQOVa -DoCkKvbdGckViajK -DncLKvbdDxXlUTsl -EOcLKvbdeUAUASlv -DnbkKvbdzjUpQETU -DnbkKvbdtcCuWuoP -DncLKvbdauBgXkUI -DoCjjvbdUVlPitBR -DnbkKvbdFfJrOItR -DoDLKvbdxnSgwsJD -EPCkKvbdXsMBNToY -DncLKvbdCTAcUFwS -DoDKjvbdhgJbxvJu -DoDLKvbdhkeDnUby -EObkKvbdEvZPpNKF -EPCjjvbdiHJcZWJu -EObjjvbdIHHZyYXg -DoCkKvbdegkVqmqH -DoCjjvbdxVNFRZMO -DoDLKvbdUQpntuIN -DoDKjvbdEJhJuwjA -DoDKjvbdkHflGGNk -DnbkKvbdmttykKRf -DncLKvbdZxdJmblS -DnbjjvbdZQmEhmEq -DoCjjvbdJcJcQjDY -DoDKjvbdBhkCLIej -DoDLKvbdmIcspuRa -DnbjjvbdqiAKElne -DoCjjvbdJpzEoFnF -EOcKjvbdyOShYTJD -DoCkKvbdmuVZjiqf -DoDLKvbdSCDeLhyL -EOcKjvbdJvUedFGi -EObkKvbdehLWRnRH -EPDKjvbdxmrhXriD -DoDLKvbdOTUWGeVQ -EPCjjvbdzRPMhiwA -EPDKjvbdKRZePGOF -DoCkKvbdrDeIomvB -EPDKjvbdkVvmdBww -DoDKjvbdIGfzYwwg -EPDLKvbdFVyPpNKF -DoDKjvbdhytfLqNf -DnbjjvbdMfbomQUk -EOcLKvbdtcDVXWOo -DoDKjvbdqwPlDJYq -EOcLKvbdZshiZETO -EOcLKvbdeEnrCXCj -EOcKjvbdZLrDsnLm -EPCjjvbdLYqKSzuG -DncLKvbdMtsRjmAX -DoCjjvbdJTZArlxM -EPCkKvbdlZSrTZGt -DncKjvbdRyjITCvA -DoCjjvbdEuxpPmKF -DnbkKvbdTYKkmzjx -DoDLKvbduDDVXWPP -DncLKvbdjAPfaPgK -DncLKvbdrEFJPnVa -EPCjjvbdrXQMChyR -DnbkKvbdznpQeDLx -DoCkKvbdjgflFfOL -EObjjvbdjlalZdgP -DoCjjvbdtbcUvvOo -DoCkKvbdrEFIonWB -EObjjvbdwXMAvAuu -DncLKvbdePFSkUTr -EPCkKvbdTppoUuIN -EPDKjvbdIxUCHlQp -DnbkKvbdBiLBjiGK -DoDKjvbdliDspuRa -EObjjvbdFkFTDIMu -EPCjjvbdsQVnjDVf -EPCjjvbdKefIBaRV -DoDKjvbdIryAsNYM -DoCkKvbdsrqrxzEc -EPCjjvbdLqwNZuQz -EOcLKvbdcIlikGXY -DoCjjvbdADSXizIp -DoCkKvbduaEZTOeI -DncKjvbdvBDyTPEh -EPCkKvbdRkZFuHKs -DoDLKvbdSLZFuGkT -EOcLKvbdfekzOHHA -EOcLKvbdkaMoNALA -DncLKvbdkNCMZeGo -EObjjvbdNsUVfduQ -EPCjjvbdZoNiEeZj -DoDLKvbdLYpirzuG -EPDKjvbdmoyxujyC -DoCkKvbdaMjbSuNH -EPDLKvbdxxIjCPzL -DnbkKvbdVAaqSprZ -DoCjjvbduVmxJqTA -DoCkKvbdRkZGVHLT -DoDKjvbdEuyQPljF -DnbkKvbdptUHSRkU -DncLKvbduLxWaUAw -EObjjvbdaaVdfQQX -EPDLKvbdWWiYVdFH -EOcLKvbdfelZmgHA -DoCjjvbdADRxKZiQ -EOcKjvbdfHkWSORH -EObkKvbdTAEiIBoE -DncKjvbdEKIKVxKA -DoCkKvbdkDMKpgVH -DnbkKvbdCWzciEpW -EObjjvbdxZgefXeS -EOcLKvbdsZkpTBIO -DoDLKvbdrJAKFMne -EPDKjvbdkWXNdBww -DnbkKvbdRbEFLhyL -DncLKvbdWXJYWDeH -EOcLKvbdijFgjMwr -DoDLKvbdnHExMnGy -EObkKvbdZeYGzhJC -DnbjjvbdEvZPpMie -EObjjvbdYpldiMdq -DoCjjvbdfRaWzlCo -EPCjjvbdGYtuBDxC -EOcLKvbdQYmAGrrK -EPCkKvbdlhcspuSB -DoDLKvbdezvZFIsw -EOcKjvbdlYsSTZHU -DnbkKvbdmfeXmOGy -DncLKvbdKDKDQicY -DncKjvbdZjTIQHCG -DnbkKvbdgFkzOHHA -DnbkKvbdaNLBsVNH -DoCjjvbdBsBCtGWr -DncKjvbdqdFIomvB -DnbkKvbdkNBlZdfo -DnbkKvbdSQTgKGDw -DoCkKvbddoFTLTsr -DoDKjvbdEYYLtTtM -EOcKjvbdVwJYWEEg -DoDLKvbdyOSgwrhc -DoCkKvbdZMRdUOLm -DoDLKvbdYSlBMtOx -EPCkKvbdkxsRsYft -DnbkKvbdrzLpTAgn -DncKjvbdRjxfUgKs -DnbkKvbdqquLNkAm -DoDLKvbdRMxCYnUz -EPCjjvbdZoOIdeZj -EObkKvbdrpWOicVf -EPDLKvbdkCkjqHVH -EOcKjvbdmSZUzSci -EObjjvbdRjxfUgLT -EObjjvbdNddThhjd -DoCjjvbdKVuFcdfi -EPDKjvbdzjVPodTU -DncKjvbdJTYaSmXl -DncKjvbddZyQXyQb -EPCjjvbdCIkCKiFj -EPDKjvbdTkunaWOi -EObjjvbdfIKuqnRH -DoCjjvbdZRMdiMeR -DnbjjvbdMpXpunHT -DoDLKvbdZRNEhmFR -EObjjvbdaoffdLzd -DoDLKvbdvAdYsOdh -DnbjjvbdSLZGUgLT -DoCjjvbdSCDdkiZL -DoDLKvbdelewHNKL -DoCjjvbdRXNdDMHc -EObjjvbdkWWnDaww -EObjjvbdcyxoxZRC -DncKjvbdelfWfljL -EObjjvbdZnnJEdzK -EOcKjvbdkHflGFnL -DoCkKvbdhbPCdwRR -EPDLKvbdHDkWKCKK -DnbkKvbdRadEkiYk -EOcLKvbdFWYopNJe -DoDLKvbdqTsfrSKt -EObjjvbdxnSgxTJD -EPDLKvbdxZhFewdr -EPCkKvbdTvLojTaR -EObjjvbdfIKuqnQg -EPCjjvbdDxXlTssl -EObjjvbdQvmccLhD -EObkKvbdRNXayOUz -EPCjjvbdatbGxLTh -EOcKjvbdOSsvGeVQ -EPDKjvbdePFTKstS -DnbjjvbdlYsRsZHU -DnbjjvbdZisIQGaf -DoCkKvbdsrqsYzEc -EObjjvbdfILVqnRH -DnbkKvbdZHWdAPTJ -DoDLKvbdEPCkLXCd -EObjjvbdEXwktTsl -DncLKvbdFVyQPlie -DncKjvbdNsUWHEtp -EOcKjvbdyqOmJKXA -EOcKjvbdADSYJyhp -EPDKjvbdUyIUZjoO -EOcKjvbdmJEURVSB -DnbjjvbdIwtBgkpp -EPCjjvbdZQmEhldq -EPCkKvbdDjHiuxKA -DoDKjvbdrEEiQOVa -DncKjvbdKDKDQjCx -DncKjvbdZRNFJMeR -DncLKvbdwygeeweS -DncLKvbdnUuZkKSG -DoDKjvbdvwMAvBWV -DoCjjvbdBhkCLIfK -DnbjjvbdoznDkXoA -EOcKjvbdjgflFemk -EObkKvbdKVtfDdgJ -DnbjjvbdXrkaNUPY -DncKjvbdhlEdNtby -EPDKjvbdemGWfmJk -DoDLKvbdlhctQtrB -EObjjvbdnVVZkJqf -EObjjvbdwuNEpyMO -DoCjjvbdTpqOuVHm -EObjjvbdbLLennDA -DoDLKvbdiGjDZWKV -EPDLKvbdFjeTDHlu -DoDLKvbdDxYLstUM -EPDLKvbdiUzFXSVC -DncKjvbdJYTbHkpp -DoCkKvbdZshhxdSn -EPDKjvbdxrnIlqag -EOcLKvbdiHJcYvJu -DnbjjvbdkVwNcaxX -EObjjvbdpyPIGpcx -EPCkKvbdauCGxLUI -EObkKvbdWRnXadkc -DnbkKvbdVUNUGLvK -EObkKvbdDxYLsssl -DnbkKvbdCJKbKhfK -DncLKvbdbhmKKfXY -EOcLKvbdZoOIeFZj -DoDLKvbdkNCLzFHP -EObkKvbdpxnggQdY -EObkKvbdYqNFJNEq -EPCjjvbdyzdnSHhh -EOcKjvbdczZQYZQb -DncKjvbdZyDimblS -DncLKvbdyOTIXrhc -EObjjvbdhzUelQnG -EObjjvbdFjeTChNV -DoCjjvbdwMvANEEm -DoDLKvbdRXOEDMID -DncKjvbdiHJcYvJu -EOcLKvbdhtzFWrVC -DncKjvbdVYgsykPO -DoCjjvbdGGKRmiUR -EPDLKvbdQmXbYnUz -DnbkKvbdkIGlFemk -DoCjjvbdSPsgJfDw -DncKjvbdzjVQPcrt -EPDKjvbdmfdxNNfy -EPDKjvbdZyDimblS -DoDKjvbdANIZSvzY -DoCkKvbdJqZdoGOF -EOcKjvbdcJMijewY -DncLKvbdNQXqWNfs -DncLKvbdkNBlZeGo -DoCjjvbdHffzZYXg -DoDKjvbdjhHMGGOL -DnbkKvbdiCObdvpq -DoDLKvbdYlRctNkm -EObkKvbdiUzEwRuC -DncLKvbdMfbomPuL -EPCkKvbdlZSrSyGt -DncLKvbdvAcxroFI -DoCjjvbdNGcQNQUk -DncKjvbdWSNxBeLc -EPCkKvbdqvokcIyR -DncLKvbddZyQXxqC -DoCkKvbdvPTzqLPU -DncLKvbdZxcjNblS -EPCjjvbdkMbLzFHP -EPCkKvbdlYrqsYgU -DnbjjvbdWSOXbFMD -DnbkKvbdWeyZtAPT -EPCkKvbdEKHivYKA -DoCkKvbdkNBkyeGo -DoDLKvbdiBoDEvqR -DoDLKvbdRkYfVGjs -EOcKjvbddneSkUTr -EObjjvbdFejRnItR -DncLKvbdLAjgMbXq -DnbkKvbdUGznLwVe -DoDKjvbdLqwNZtpz -EPDKjvbdUxhTyjnn -EPDLKvbdkNBkyeHP -DoCjjvbdgFkzNgHA -EObjjvbdunszpjnt -EPCkKvbdtAHQhABS -DnbjjvbdbKkfOnDA -DoCjjvbdVviYWEFH -DoCjjvbdGZUuAdXb -EObjjvbdhlFDmuCy -DncLKvbdyfyMAMdw -EObjjvbdFyUtaDxC -DnbkKvbdeEoSCXDK -EOcKjvbdbVCGwjtI -EOcLKvbdTAEhgand -EObkKvbdRpUHJecw -DnbjjvbdZsiJZDrn -DncLKvbdtSqrxyeD -DoDKjvbdJSxaSmYM -EPCkKvbdjuvnECYX -DoDLKvbdrMyjYkgi -DnbkKvbdjJegjNXr -DoDLKvbduaDxsOdh -DoDLKvbdmIcsptrB -EObkKvbdFkFTDHmV -DnbjjvbdYORAYVVt -DncLKvbdddoRbWcK -EPDLKvbdLrWmZuQz -DoDLKvbdliETpuRa -DoCjjvbdbrcKsdKB -DoCkKvbdHkazmvpk -EPCjjvbdUaBpsRRy -EObkKvbdKfFhBaQu -DoCkKvbdKQydnfNe -EOcLKvbdDjIKVxKA -DncKjvbdpeceUWBI -DncLKvbdKaLHNBxR -EPDLKvbdptTfrRkU -EPDKjvbddndsLTtS -EObjjvbdMpXpvOHT -DnbkKvbdaMjaruNH -DoCkKvbdpecdtVaI -DncLKvbdRpTfjGEX -EObkKvbdCSaCsevr -DoCkKvbdnHEwmNgZ -EObjjvbdfHjuqmqH -DoDKjvbdKWVGDeGi -DoDLKvbdWHxVxHYz -DnbjjvbdXsLaMsnx -EPDLKvbdDjHiuwjA -DnbjjvbdaaWFGQQX -DnbjjvbdsrrTZZdc -DoCjjvbddneTKtUS -DoDKjvbdcJMjLFvx -DoDKjvbdaNKbTUlg -DnbjjvbdkHflFfOL -EObjjvbdJpzFOeme -DoCjjvbdrounibuf -DoCjjvbdHgHZxwxH -EOcLKvbdSKxeuGkT -EOcLKvbdzQoNJJwA -EObjjvbdZnnJEdzK -DoDLKvbdJuuFcdfi -DncKjvbdIryBSmYM -EObkKvbdyYJJaozL -EObjjvbdFkEsDHmV -DnbkKvbdfMfXHMjL -DnbkKvbdLGGIBaRV -EOcLKvbdRXNdDMHc -DoDKjvbdegjvRnRH -DnbkKvbdKeegaaQu -DnbjjvbdkMakzEgP -DoDKjvbdcTDKtEKB -DncLKvbdhaoDEvqR -DncLKvbdmgEwmNfy -EPDKjvbdCIjbLIfK -DncLKvbdJvUedEgJ -DoCjjvbdFVxpPljF -EOcLKvbdJYUCIMRQ -EPDKjvbddwyssrFz -DoDKjvbdiMEdOUcZ -DoDKjvbdZQleIldq -EPCkKvbdnQZyVkYb -DoCjjvbdNGbpNPuL -DoCkKvbdOStVgFVQ -EOcKjvbdGBPQxizm -DnbjjvbdOXoVzcnU -DncKjvbdyqPNIiwA -DoDLKvbdkIGlGGNk -EPDKjvbdbiNKLFvx -DoCkKvbdCTBCsfWr -DoDKjvbdShyjRABM -EPCjjvbdxwhjBozL -DoCkKvbdqUUHSSLU -DoDKjvbdbBVdfPow -DoCkKvbdqYnggRDx -DoCkKvbdtkwwAsaX -EPDLKvbdZMSDsnMN -EPDLKvbdZjTIQGbG -EPCjjvbdzoPpdblY -EPDKjvbdVviYWEFH -DnbjjvbdUsltGLuj -DoCkKvbdQdDAopcr -EPDKjvbdZxcjNbkr -EPCjjvbdZisHpGbG -EPDKjvbdEuxpPmKF -EOcKjvbdQwNccLgc -EPCjjvbdEYYLstUM -EObkKvbdZRNEhmEq -DoDKjvbdaRfDIUGL -DncKjvbduaDxsOeI -EObkKvbdmaiwYPOV -EOcKjvbdKDJbqJbx -DoDKjvbdQvnEDLgc -DnbkKvbdtlXvaTaX -EPDKjvbdzQoNIiwA -EOcLKvbdNeDsiIjd -DnbkKvbdBdQAvJlf -DoCkKvbdhzVGMROG -EPDLKvbdUaCQsRRy -EOcLKvbdZisHogCG -DoCkKvbdlqxtzTDi -DoCjjvbdRkZGUgKs -EObkKvbdZnmhdeZj -EOcLKvbdZjTHogBf -DncLKvbdhytfLqNf -EPCkKvbdnPyxvKxb -DncLKvbdjcMKqHVH -EPCkKvbduWNwjRTA -DnbkKvbdwygfGXeS -EObjjvbdTlWOaVoJ -EPCjjvbdUtNUGLvK -EObkKvbdKkAgvAKZ -EObkKvbdaMkCTUmH -EPDKjvbdOFDshhjd -EPDLKvbdhzUfLpmf -EPCkKvbdkySrTYgU -EOcLKvbdFfKSNhsq -DncKjvbdOAJTUKSA -EPDLKvbdrDeJPmvB -EPCkKvbdKRZdnfNe -EPCjjvbdRDcAoqDr -EOcKjvbdNHDQNPtk -EOcLKvbdVTmTfMVj -EOcKjvbdrXQMChyR -DoCjjvbdZQmFJNEq -EPCkKvbdWRmwadkc -EObkKvbdSCDeLhyL -DncKjvbdyNsHxTJD -EPDKjvbdtSrTYydc -DoDLKvbdiGjCxuiu -DoCkKvbdrNZjZLgi -EPDLKvbdJmADzGuB -DncLKvbdtcCuWuno -DnbjjvbdDxXktTtM -EPCjjvbddZyPxZQb -EPDLKvbdlqxtysDi -DoDLKvbdbAueGPpX -EObjjvbdVviXvDdg -EPDKjvbdBdQAvKMf -DnbkKvbdPxmAHSqj -DoDLKvbdUsltFlWK -DncKjvbdVhYWYHYz -DoDKjvbddwzTtSFz -DncLKvbdIGfzYwwg -EPCjjvbdmJDsqUrB -EPCkKvbdGQASwGey -EOcLKvbdTlWOaVoJ -DncLKvbdLFehCBRV -DnbjjvbdTkvOaVoJ -EPCkKvbdwXMAvBWV -EObjjvbdpxnhGqDx -EOcLKvbdsrqryZeD -DoDLKvbduVnXjQsA -DncLKvbdRotHKFdX -EOcKjvbdnUtyjirG -EOcKjvbdCJLCLJFj -EOcLKvbdSCEFLiYk -DoDLKvbdjcMLQgVH -DoCkKvbdLBLGlaxR -EObkKvbdZQldiNFR -EOcLKvbduMXwAsaX -DncKjvbdxrnIlrBg -EObkKvbdehKvRnRH -DoDLKvbdRosfiecw -DoCkKvbdFjdrcINV -EPCjjvbdkWWmdBxX -DnbjjvbdFkFTDHlu -DoCjjvbdTAEhgaoE -DoDKjvbdANIZTWyx -EObkKvbdJSyAsNYM -EPDLKvbdqTtHRqkU -EPDKjvbdbBVeFoow -EPCkKvbdYSkaMsoY -DncLKvbdDnbkKwDE -DncKjvbdMSWlzUpz -DncKjvbdauCHXjsh -DoCjjvbdTvMQKUBR -DoDLKvbdrRuLOLAm -EOcKjvbdatbGxKtI -DncLKvbdNGcQMotk -EPDKjvbdiCObeWqR -DoDKjvbduDDUwVno -DncLKvbdYlRcsmkm -DncKjvbdbAueFoow -EObkKvbdYTMBNToY -DncKjvbdvAdYsPEh -EObjjvbdBdQBWKMf -DnbkKvbduCbuWuno -EOcLKvbdKWVGEFHJ -EObkKvbdcyyQXxqC -DnbkKvbdaMjasUmH -EPCkKvbdmgEwlmfy -DoDLKvbdrDdiQOVa -DoDKjvbdUyIUZjnn -DnbkKvbdnBjXYOnV -EOcKjvbdRpTgJfDw -DncKjvbdjcLjqGuH -DnbkKvbdZjTIQHCG -EOcKjvbduVnYKRTA -DnbkKvbdGckWJbKK -EObjjvbdZyEJnDMS -DncKjvbdNsUWGduQ -EObjjvbdKQzEoFme -EOcKjvbdVUMtGLvK -EPDKjvbdrJAKFMoF -DoCkKvbdNrsvHFVQ -DncLKvbdSKyGUfjs -DoCkKvbdVvhxWEFH -DncLKvbdFejRnIsq -EObjjvbdVYhUZkOn -DoCjjvbdxUmEpxkn -DoDLKvbdBiLCKhej -DoDKjvbdIjEAJofd -EOcKjvbdwzHfFwdr -DncKjvbdFjeTDHlu -DnbjjvbdbiMjKewY -DnbjjvbdaNLCTUlg -EObjjvbdDwxMUUTl -DoCkKvbdmttykKSG -EPDKjvbdiUyeXSVC -EPDLKvbdWIYVwfxz -EPDLKvbdemFvgMik -DoCkKvbdUyHszKoO -EObkKvbdTXkMNzjx -DoDKjvbdSQTgKFdX -DnbjjvbdLiBkpxAS -EPCkKvbdRosgKGEX -DoCkKvbdmfdwmNgZ -DncLKvbdiHJbyViu -DncLKvbdxrnJMqbH -EOcKjvbdhlFENtcZ -DoCjjvbdbKkennDA -DnbkKvbdGckWKBjK -DnbjjvbdUyIUZkOn -EPDKjvbdeEnrCXDK -EOcKjvbdsBfMkgKy -DncKjvbdxsNiNSBg -EPDKjvbdkNCLzEgP -EPDKjvbdSKyGVGjs -DoDKjvbdrWolChyR -DncLKvbdWSNwaeLc -EOcKjvbdJYTbHkqQ -DnbjjvbdZshiZDsO -DoDKjvbdSKxfUfjs -EPCkKvbdptTgRrKt -EPCjjvbdREDApQdS -DncLKvbdtvOXjRTA -EPDKjvbdemGXGljL -EObjjvbdBdQAvJmG -EPDLKvbdhuZdwRuC -DncLKvbdjvWnDaxX -EPDLKvbdFVxopMie -EPCkKvbdajkeoNcA -EPCjjvbdSPsfifEX -DnbkKvbdBsAcTfWr -EPCjjvbdEOcLLWcE -DoCjjvbdZLrDsmlN -EPCkKvbdxnSgxTIc -EObjjvbdGQATXGey -EObkKvbdbsDLUEKB -DoCjjvbdrSVKmjaN -EPCkKvbddneTLUUS -DoCkKvbdxmrgwsJD -EPDKjvbdGYuVAdXb -DncLKvbdauBfxLTh -EPDLKvbdrMzKZLgi -EObkKvbdUsltGLvK -DnbjjvbdDxXlTstM -EObkKvbdsBfNLgLZ -DncKjvbdidjgUoAO -EPDLKvbdJJdAKQHE -EOcKjvbdbBWFFpQX -EPCjjvbdSZihTDWA -EPCkKvbdhgKCxuiu -DncKjvbddneTLUTr -DoDKjvbdczZPxZRC -DnbjjvbdlYrrTYft -DoDKjvbdWXJXvEEg -EPDLKvbdbhmJkFvx -EPCjjvbdDxYLtTsl -EPDKjvbdqdFIonVa -EObjjvbdCIjbLIej -DnbjjvbdmbKXXnmu -EPDKjvbdlZTSTYft -EPDKjvbdwXMBVaWV -DnbjjvbdSPtGjGEX -DoDKjvbdrMzKYlHi -EPCkKvbdiVZdwSVC -DnbjjvbdptUHSSKt -DncLKvbdcSbjscjB -DoDKjvbdSPsfiecw -EOcKjvbdegkVqnQg -EObkKvbdjuvmcbXw -DncKjvbdCJLCKhfK -EObjjvbdVqnYBeMD -DoCjjvbdKCjCqJcY -DncLKvbdZRMdhmEq -EOcKjvbdrRtkOKaN -DoDLKvbdRpTfiedX -DoCjjvbdRMwbZOUz -DoCjjvbdrXQMDIxq -EObjjvbdsrqsZZdc -DnbjjvbdfjfzbfAE -DoCkKvbdJSyBTMxM -EPDKjvbdnCJvwoNu -DoCjjvbdmbJvwoNu -DnbkKvbdFWZQPljF -DncLKvbdxnSgwriD -DnbjjvbdVvhwucdg -DoCjjvbdjgfkfFnL -DncLKvbdzRPMiKXA -EOcLKvbdqZPHgREY -EPCkKvbdrylPsAgn -EPCkKvbdVZITykPO -DoCjjvbdhkeEOVDZ -EOcKjvbdUVkpJtAq -EOcKjvbddCTMrAUN -EPDKjvbdZeXfzghb -EPCjjvbdiMFDmuDZ -EPCjjvbdJKEAJpHE -EOcLKvbdajkeoODA -DnbjjvbdZRNEhmFR -EOcLKvbdNHCpNQVL -EObjjvbdmRxtzSci -DoCjjvbdzRPMhjXA -DnbkKvbdnGdwmNfy -EObkKvbdvAcxsOeI -DoDLKvbdBsAcTevr -DoCkKvbdozmdKxPA -DnbkKvbdTlVoBVoJ -EPCkKvbdqwQLcIxq -DncLKvbdbiMjLGWx -DoDLKvbdfHkWRnRH -EOcKjvbdbVCGxKsh -DoCjjvbdTqRPUthN -DoCkKvbdbQGgELzd -EOcLKvbdQZNAHSrK -DoDLKvbdZyDjNbkr -EPCjjvbdqiAJdmOe -EObkKvbdKaLHNBxR -DncKjvbdyXhjBozL -EObjjvbdDjIKWYKA -EOcKjvbdLFegaaQu -EPDKjvbdZjTIPgCG -EOcLKvbdfHjuqnQg -DnbjjvbdlhcsqVRa -DoCjjvbdMuSqkNAX -DncLKvbdCIkBkIej -DncKjvbdUaCQsQqy -EObjjvbdRbDdkhyL -EOcKjvbdpssfrRkU -EOcKjvbdLGFhBaQu -EPCkKvbdqqtjnLBN -EOcLKvbdWRmwbEkc -EObjjvbdpedFTuaI -DoCkKvbdJJdAJofd -DoDLKvbdwNWANEEm -EPCkKvbdYgWdAOri -DoDLKvbdvAcyTOeI -DnbkKvbdbhmJjfWx -EOcLKvbdypnliKXA -EOcKjvbdZyEJnClS -DoCjjvbdZoNhdeZj -EPCkKvbdkDLkRGtg -EObjjvbdNsUWGdtp -DnbjjvbdZQldhmFR -EOcKjvbdYpmEhldq -EPCkKvbdZQmEiMeR -DnbjjvbdhytfLpnG -EObjjvbdmtuZkJrG -EObjjvbdGLEsDINV -EPCjjvbdVhXvYHYz -DoDLKvbdKefICAqV -DncKjvbdUtMsfLvK -EOcLKvbduaEZTOeI -EPDKjvbdddoSBwDK -DoCkKvbdffLymgHA -DnbkKvbdbAueGQQX -DnbkKvbdbrcLTcia -EPCjjvbdRbEElJYk -DoCkKvbdGFirNiTq -DoDKjvbdNdctIhkE -EPDLKvbdQccAoqES -DnbkKvbdFfKRnJUR -DnbjjvbdFfJrNiUR -EPDLKvbdCfkegAzc -EPCjjvbdRXNccMHc -DoCkKvbdZjShPgBf -EOcKjvbdSLZGUfkT -DoDLKvbdBcpAujMf -EOcLKvbduWNwiqTA -DoDLKvbdpyOgfqEY -EOcKjvbdcScKtEJa -EObjjvbdnCJwXoNu -DnbkKvbdjFLGtoAO -DoCjjvbdXrlBMsnx -EPDKjvbdhgJcZWJu -DoCjjvbdiBoDEvpq -EPDKjvbdczYoxYqC -DoDLKvbdjFLHVPAO -DnbjjvbdbPgGdLzd -DoDKjvbdWIYWYGxz -DncKjvbdhytfLpnG -EObjjvbdfHjuqnQg -DnbjjvbdmgExMmgZ -EOcLKvbdhgKDYuiu -EPDKjvbdmJEURVRa -DoDLKvbdJpyePGNe -DoDLKvbdlhdUQuRa -EObkKvbdmuUzLKSG -DnbjjvbdxwhjBozL -EPDLKvbdVZIUZjnn -EPDLKvbdJpydnfOF -EPCkKvbdqqtjmjaN -EPCkKvbdZoOJFFZj -DnbjjvbdmttzKjRf -EPDLKvbduWOXjQsA -EOcLKvbdwtleRYkn -DoCjjvbdLYpjSzuG -EObjjvbdIsYaSmYM -DnbjjvbdyzeORhJI -EOcLKvbdkWWnECXw -EPDKjvbdVviYVcdg -DoDKjvbdBcoaVjMf -DoCkKvbdiMEcmuDZ -EObjjvbdLKaHvAKZ -DncLKvbdJTZArlwl -EOcLKvbdhaoCeWpq -DncLKvbdrWpLcJZR -EObkKvbdHkaznWpk -DnbjjvbdzjVPocrt -EOcKjvbdyqPMhiwA -DoCkKvbdpstHRqkU -DnbkKvbdRkYfVHKs -DoDLKvbdVgwvYGxz -EOcKjvbdFfKSNiUR -DnbkKvbdqquLOLBN -DncKjvbdOAJTTjSA -DoDKjvbddneSkUTr -EObkKvbdlqyUysEJ -DoDKjvbdbhmKKevx -EOcLKvbdiCObdwQq -EPCkKvbdFejSNiTq -EObkKvbdwygfGYEr -EPDLKvbdsQWPKDVf -DncKjvbdjbkjpfuH -EPDKjvbdRkZFuGjs -EPDKjvbdwyhFfXdr -DncKjvbdcIlikFvx -DoCkKvbdiUydwSVC -DncKjvbdiUzFXSVC -EOcKjvbdjKFgimYS -EPDKjvbdjvXODaww -EPCkKvbdRbDdlJZL -EObkKvbdrEEhpNvB -EObjjvbdrpVoKDWG -DoCjjvbdNxPVzcnU -EPDKjvbdVgwvYHYz -DnbjjvbdmuUyjirG -EObjjvbdrSVLNkBN -DncKjvbdUWLojUBR -EOcLKvbdwygefXeS -EObkKvbdhaoDEvqR -EOcLKvbdGGKRmiUR -EOcKjvbdeEnqawDK -EPDLKvbdGGJqnItR -DoDLKvbddeOrBvbj -DnbkKvbdiVZeWquC -DncLKvbdJcJcQjDY -EPDLKvbdkDMLQgUg -EObjjvbdemFvflik -EObkKvbdwzHeewdr -DoCjjvbdHDjuiajK -DoCkKvbdrEEiPnVa -EOcLKvbdypnmJKXA -DoDLKvbdmgFXmOHZ -EObkKvbdUsmUFkuj -EPDLKvbdcScKtDjB -EPCkKvbdUyITzLOn -DncKjvbdZnnIddyj -EPCkKvbdaaVeGPow -DoCjjvbdSQTfifDw -DoDKjvbdDoDKkXCd -DncLKvbdhtzEwRuC -EObkKvbdMpXqVnGs -DoDKjvbdDncLLXCd -DoCkKvbdtcDUwVoP -DoDKjvbdtSqryZdc -EPDKjvbdbBWFGPpX -EPCjjvbdmRxtyrdJ -DoDLKvbdGckVjCJj -EObjjvbdzoPpeCkx -DnbjjvbdKWVFceHJ -EPCjjvbdSKyGVHLT -DoDLKvbdelevgNKL -DoCjjvbdTXjlNzkY -DoDLKvbdpstHSSLU -EPDKjvbdhgKCxuiu -EObkKvbdZQleJMeR -EPCjjvbdKVuGDdfi -DncKjvbdUGzmkvvF -DncKjvbdxrnJMqbH -EPCjjvbdKVuGDdgJ -EObjjvbdptTgRqjt -EObjjvbdCDpAujMf -EPDKjvbdczZQXyRC -DncLKvbdqYngfpdY -EOcLKvbdqBIeAXIE -EPDLKvbdZLrETmlN -EPDKjvbdNeEThhjd -EOcLKvbdmbKWxOnV -DoCkKvbdCDoaWKNG -EOcLKvbdEOcKkWbd -EPCkKvbdNQXpvOGs -EPDLKvbdFyUtaDxC -EPDKjvbdbLMGOnDA -DoDLKvbdJcJcQjDY -EPDLKvbdOTUWHFUp -DoCjjvbdmgFXlnGy -EOcLKvbdRDbaQRES -DoDLKvbdcyxowxpb -EPDLKvbdliEURVSB -EOcKjvbdXnRAXuWU -DoCkKvbdDnbjjwDE -DoCkKvbdKVuGEEfi -EObkKvbdyOTHxShc -EPDKjvbdySnIlqbH -DoDLKvbdHELWJbJj -DnbjjvbdyOTHxShc -DnbjjvbdczZQXxpb -EPDLKvbdZLrDsmkm -EPCjjvbdfNGWflik -EPDKjvbdmbKWwnmu -DncKjvbdrDdiPnWB -EObjjvbdHDjvKCKK -DnbkKvbdUVkojTaR -EObjjvbdptTfrSKt -EPDKjvbdFxttaEXb -DoCkKvbdjvXNcbYX -DoCkKvbdSLYfUgKs -EOcKjvbdHakzEzAD -DncLKvbdiCObdwQq -EPDLKvbdZLqdUNlN -DoDLKvbdhkeDnVCy -EPCkKvbdemFvgNKL -EObjjvbdliDtQuRa -EObkKvbdwuMdpxkn -EObkKvbdirzhrkJz -EPCjjvbdJYTahLqQ -DncLKvbdIHGyxwwg -EPCjjvbdSQUHKGEX -DoCjjvbdZshiYcsO -EOcLKvbdPyNAHSrK -EPCjjvbdbsCjscia -EObjjvbdUWLojUBR -DoDLKvbdKeehBaQu -EObjjvbdjuwODaww -DoDLKvbdtkxXAsaX -DncLKvbddneSkTtS -DnbjjvbdZtJIxcsO -DnbjjvbdJTYaTNXl -EPCjjvbdGKeTDHlu -DoDLKvbdKQydoGNe -DoDKjvbdVrOXaeLc -EPCkKvbdzHYlAMeX -DoDLKvbdBvzchdov -EObkKvbdapGgELzd -DoDKjvbdaMkBsUlg -DnbjjvbdVUNTelWK -EObjjvbdiHJcZWKV -DncLKvbdZoNheEyj -DncKjvbdDHMFgAzc -DnbkKvbdFpATXGey -EPDKjvbdMpXqWOHT -EPCjjvbdmSZVZrdJ -EPDKjvbdcIljKfXY -DoCkKvbdjcLkRGuH -DoDLKvbdGYuVBEXb -EObkKvbdWXIxWDeH -DncKjvbdQlxCZOUz -DnbjjvbdYNqAXtut -EPDLKvbdGdKvJbJj -DoDLKvbdGLFSbglu -EPCkKvbdRjxfVGkT -DoCkKvbduCbuXWOo -DoCjjvbduCbtvuno -EObkKvbdjAQGaQGj -DoDLKvbdqBJFAXHd -EOcKjvbdkClKpgVH -EOcLKvbdiMFDmtby -EPDLKvbdjvXNcbXw -EPCkKvbdxUmFRYkn -DoDKjvbdHgGyyYXg -DoCjjvbdRzJhScWA -DnbkKvbdlZTRsYgU -DnbkKvbdFVxpQNJe -EPCkKvbdZyEJmcMS -EObjjvbdZQldhmFR -EObjjvbdYSlBMtPY -DncLKvbdvBDxsOdh -DoDLKvbdvAdYrndh -DoCjjvbdZyEJmcLr -DnbkKvbdKaLGmCXq -DnbkKvbdZQmFImEq -EOcKjvbdqvolDIxq -DnbkKvbdVqnYBdkc -DoCkKvbdnPyxvLZC -EOcLKvbdmJEURUqa -DoDLKvbdfHkVrNpg -DoCjjvbdznopdblY -DoCkKvbdjvWmdCXw -EOcKjvbdunszpjnt -EObkKvbdzoPqFDMY -EObjjvbdDxXktTtM -EObjjvbdBcoaVjMf -DncKjvbdtcDVWuno -EObjjvbdpyOggQdY -DnbkKvbdwWkaWAuu -EPCjjvbdajkeoODA -EOcKjvbdKNAEZfta -EOcKjvbdZisIQHCG -DncLKvbdEXwksstM -DoDKjvbdtbbuXVoP -DncLKvbdDxYMTstM -DoCkKvbdcyyPwxpb -EPCkKvbdxmrgwsJD -DoDKjvbdYSkaNUOx -EOcLKvbdxwhjCPyk -DncKjvbdUsmTekuj -DnbkKvbdkVwOECXw -EObkKvbdnBjXYOnV -DncKjvbdcasNSATm -EPDKjvbdTAFIhCOd -DnbkKvbdkWWnECYX -DnbkKvbdFjeSbgmV -DoCjjvbdJzoewdAN -DnbkKvbdZeXfzhIb -DncKjvbdMJCLqYAS -DoCkKvbdGLFTCglu -DoDLKvbdMuSrLNAX -EOcKjvbdqceIomvB -DoDLKvbdegkVqnRH -DoDKjvbdKfGICBQu -EOcKjvbdEvYopNKF -DnbjjvbdlrZVZsEJ -DoDLKvbdqqtjmjaN -DncLKvbdQmXaxmtz -EPDKjvbdCDoaVjNG -EPCkKvbdqquLNjaN -DnbjjvbdKRZdoFnF -DoCkKvbdkVwOECYX -DncKjvbdGQATXGfZ -DncLKvbdCDpAujMf -EOcKjvbdDxXlUUTl -EPCjjvbdYkrEUNlN -DnbjjvbdZtJIyETO -DoCjjvbdXsMAltPY -EOcLKvbdxxIjCPzL -DoDLKvbdSLZFuHLT -DncKjvbdFVyQQMjF -DoCjjvbdFaOpyJzm -EPCjjvbdrJAJdmPF -EOcLKvbdMuSqjmAX -DncLKvbdEJgiuxKA -EPDKjvbdBdQAuimG -DnbjjvbdWXIxVdFH -DnbkKvbdHDkVjBjK -EPDKjvbdnHEwlmgZ -EPCkKvbdBiKbKhfK -EPDKjvbdhyuGLpnG -DoCkKvbdZsiJZDsO -DnbjjvbddBrlrAUN -DoCkKvbdYqMeIldq -DncLKvbdZLqdUNkm -EOcLKvbdMuSrKmAX -DoCkKvbdDxXksstM -EOcKjvbdqdEiPmua -DoCjjvbdOEdUJIjd -DoCkKvbdEObkLWbd -EObkKvbdfekynHHA -EPCkKvbdrEFIpNvB -DnbkKvbdnBjXXoOV -EPCjjvbdmgEwmOGy -DncKjvbdKCjDQjCx -EPDKjvbdJqZdoGOF -DncKjvbdUsmTfLuj -DoDLKvbdjcMKpgUg -EPDLKvbdSQUGjGDw -DnbjjvbdRacdlJYk -DncKjvbdYgXEAOsJ -EPCjjvbdhficZWKV -DoDKjvbdGAnpxizm -EPCkKvbdRbDeLhyL -DoDKjvbdiBncEwQq -DoCkKvbdxZgfFxFS -DoCjjvbdqvpMChyR -EObjjvbdbUbGxKtI -DoCkKvbdEObkKvcE -DnbjjvbdKQzEnfNe -DoCjjvbdRWnDblID -DnbkKvbdkxrqsYgU -DncLKvbdqwPlCiYq -EPDKjvbdSZjHsDWA -DncLKvbdEPCjjvbd -EOcLKvbdpyPIGpcx -DncLKvbdbVCGwkTh -DnbkKvbdnPzZWKxb -EObkKvbdGKeTDIMu -EOcKjvbdiifIKNYS -DncLKvbdnQZxvKxb -EPDLKvbdGFjSNiUR -DnbjjvbdRNXaxnUz -EPCjjvbdOTTvGduQ -EObkKvbdUtMselVj -DoCjjvbdnUuZkKSG -EPDKjvbdQmXaxnUz -EPCkKvbdNeDtIhjd -DncLKvbdNxOuzdOU -DncKjvbdJJdAJpGd -DoDKjvbdwuNEqYkn -DncKjvbdZMSDtOLm -DnbjjvbdNeDsiJLE -EPCjjvbdJpzEoGOF -EPCjjvbdkDLkRGtg -DoCjjvbdUWLpJtAq -EPDKjvbdfMfWfljL -EPCkKvbdrMzJyMIJ -DoCjjvbdJKEAJofd -DnbjjvbdnBiwXoNu -DoCjjvbdDihJvYKA -DnbkKvbdSZigsDWA -DoCjjvbdFejRmhsq -DnbkKvbdaMkCTVNH -EObkKvbdczZPxZRC -EPDKjvbdVZIUZjnn -DoDKjvbdkySrTZGt -DoDLKvbdsPvPKDVf -DoCkKvbdwWlBVaVu -EPDKjvbdANIZSvyx -EPCkKvbdnHFYNNgZ -DnbkKvbdNdcsiIkE -EPDLKvbdDoCkLWbd -EPDKjvbdQccBPqDr -EObkKvbdSPsfifEX -EOcKjvbdelfXHNJk -EObkKvbdFfKRmiUR -EOcLKvbdKCibqKDY -EPDLKvbdUWLpJsaR -EPCkKvbdKfFhCBQu -EOcKjvbdmuUzLJrG -EOcLKvbdBdQBVjMf -EOcKjvbdfpBzvcwh -EOcKjvbdmRyUzSci -EOcKjvbdFVxpPlie -DnbjjvbdDwwlUUUM -DncKjvbdUyHsyjoO -DoCkKvbdUslselVj -DncLKvbdmuUykJqf -DncLKvbdLFfHbApu -DncLKvbdhyuFlROG -EPDKjvbdxnTIYTJD -EPDKjvbdTulPjUAq -DoCjjvbdCDoaWJlf -DoCkKvbdbLMGOnDA -EPDKjvbdOStVfdtp -EPCkKvbdZRMeImFR -DoDLKvbdiVZeXRuC -EPDKjvbdRosfiedX -DoCjjvbdnGeYMnGy -DoCjjvbdiiehKNYS -DncKjvbdbhmKKfXY -EOcLKvbdnBjXXoNu -EPDKjvbduLwwAtAw -EOcLKvbdygYlAMeX -DoCkKvbdNsTvHEtp -EPCjjvbdsrrTYzFD -EPCkKvbdBdQAuimG -DncKjvbdmfeYMnHZ -EOcKjvbdxZhFexEr -DncLKvbdZshhyETO -EObkKvbdOFEUJJLE -DoDLKvbduDCtvuoP -EOcKjvbdGZVVBEYC -EObjjvbdZRMeJNEq -DnbkKvbdkxsRsYft -DnbkKvbdsBfNLfjy -EOcLKvbdNPxQvOHT -DnbjjvbdpstHRqkU -EOcLKvbdZQleJNFR -EPCjjvbdxVNEpxkn -DoCkKvbdwtmEqZLn -DoCkKvbdGAoQxizm -DoDLKvbdVqmwaeLc -DoDKjvbdKfGHaaQu -DoCjjvbdcJNKLGWx -EPDLKvbdrzMPsBHn -DncKjvbdfoazwDxI -EPDKjvbdZyEJnClS -DnbjjvbdwMvANDeN -EObjjvbdZshiZETO -EPDKjvbdUslselVj -DoDKjvbdwtmEpyLn -DncLKvbdJTYaTMxM -EPDKjvbdvBDxsOeI -DoDKjvbdxrmhmSCH -EPDLKvbdjJegjNYS -EOcKjvbdJvUedEgJ -DnbkKvbdVZITyjoO -DoDKjvbddePSCWbj -DncKjvbdWIXvXgYz -EPDKjvbdZQmFJMeR -DnbjjvbdqdEiPnWB -DoDLKvbdUVkojTaR -DoDLKvbdFVxpPmJe -EPCjjvbdxmsHwsIc -EPDLKvbdiiehJlxS -EPDLKvbdCTAbsewS -EPCjjvbdzoPpdbkx -DnbkKvbdijGHilxS -EPDLKvbdOYOuzdNt -EOcLKvbdTppoUuIN -DnbkKvbdcScLUDia -EOcLKvbdePFTLUTr -EOcLKvbdhgKCxvKV -EPCkKvbdrJAKFNOe -EOcKjvbdVwJXucdg -EPCkKvbdNddUJJKd -DncLKvbdJYUCHlQp -EObjjvbdkVvnDaxX -EPCjjvbdNeDsiJLE -EPDKjvbdyzeNqhJI -EPCjjvbdmIdTqUrB -EPDKjvbdZoOJFEyj -DoDKjvbduaDxsOeI -EPCkKvbdKjaIWAKZ -DncLKvbdKaLHMbYR -EOcKjvbdrafMlHKy -EPCjjvbdhtzEvqtb -EPCkKvbdddoSCXDK -EOcKjvbdzjUpPdTU -EPCjjvbdLZRJrzuG -EOcKjvbdaMjaruMg -DoCkKvbdyOSgwsJD -EPCjjvbdKDKCqJcY -EObkKvbdvAcxrneI -EObjjvbdwuMeQxkn -DncLKvbdmSZUysDi -DnbkKvbdcIlijfWx -DoDKjvbddndrjtTr -EOcKjvbdwtmEqYlO -EOcKjvbdYzcFqivZ -DnbkKvbdCDpBWJmG -EOcKjvbdaSGCgsfL -EObjjvbdIwtBhLqQ -DnbkKvbdyzdmrIIh -EPDLKvbdWexzUAOs -DncLKvbdRXNdCkgc -EOcKjvbdkVwNdBww -DncLKvbdIGfzYxYH -DoCkKvbdbAvFGPow -DoCkKvbdQlxBxnUz -DncKjvbdqrUkOKaN -EPDLKvbdZisIQGaf -DoDKjvbdsQWPJbvG -DncLKvbdjhHMFfNk -EObkKvbdwNWAMdFN -DoCkKvbdeKKRutzn -EObkKvbdJpyeOfNe -EOcKjvbdQmXayNtz -DncKjvbdnHExNNgZ -EPCjjvbdULuoBVni -DoCjjvbdqquLNjaN -EPDKjvbdyzdnSIJI -DnbkKvbdQvnDcLgc -DoCkKvbdtcDUvvOo -DnbjjvbdnGeXmNfy -DoDKjvbdxsNhmRbH -DoDKjvbdtTSSyZeD -DoDKjvbdRadFMJZL -EOcKjvbdUaCQrpqy -DoDLKvbdEJgivXjA -EOcLKvbdGFjSOItR -EPDLKvbdaSGDIUGL -DnbjjvbdJYTagkqQ -EOcLKvbdZLrDsmlN -EOcLKvbdEJgiuwjA -DoDKjvbdxUleRYlO -DnbjjvbdQwODcLhD -EObkKvbdOTUVgEtp -EObkKvbdRMwaxnUz -EObjjvbdrEFJPmua -EOcLKvbdiUzEvquC -DoDKjvbdMpYQumfs -EPCkKvbdhancEvqR -DncKjvbdkNCMZdfo -DncLKvbdZHWdAOri -EObjjvbdlrYuZrci -EObjjvbdgLGzbfAE -EObjjvbdcTCkUEJa -EPDLKvbdVAbRTRRy -DoCjjvbdYqNEiMeR -DncKjvbdBvzchdpW -DnbkKvbdtSqryZdc -EPCjjvbdwygeeweS -DoCkKvbdqlzJyLhJ -EOcLKvbdtbbtvvOo -DoDKjvbdrSVKnLAm -DnbkKvbdfMevgNKL -EObjjvbdRacdkhyL -EPCkKvbdFpASvgGZ -EPDLKvbdZoOJFEyj -EPCjjvbdzjUpPcrt -EOcKjvbdcbSlrATm -EOcKjvbdqwPkbhxq -DnbjjvbdHELVibKK -EPDKjvbdZQldiMeR -DnbjjvbdpstGqrKt -DoDKjvbdGFjRmiUR -EPCkKvbdssRsZZdc -DnbkKvbdlqxuZsDi -DncKjvbdEXwlUTtM -DnbjjvbdyzdnRhIh -EPCjjvbdkCkkRGtg -EOcLKvbdLrWlytpz -EPCkKvbdCEQAvKNG -DncLKvbdVwIxWDeH -EObkKvbduMYXBTaX -DoCkKvbdRyihTDWA -DnbjjvbdkaMoNALA -DnbjjvbdaMjartlg -DoCkKvbdNVTSKmAX -DoDLKvbddwystRez -EPCjjvbdcImJjevx -DoCkKvbdeAUQlwjG -DoDKjvbdZxcjNblS -DncLKvbdkIGlFenL -DoCjjvbdfHjurNqH -DoCkKvbdiBoDFXRR -EPDLKvbdvBDyTPFI -DnbkKvbdUxhUZkPO -EObjjvbdqZOhHQdY -EOcKjvbdSCDeLiZL -DncKjvbdozmckYPA -DncKjvbdgGLymgHA -DncKjvbdILaznWpk -EPCjjvbdqUTgSSKt -DoCkKvbdrovOjCuf -EOcLKvbdKfGIBaQu -EPDKjvbdCIjajiFj -EPCkKvbdmoyxujyC -EObkKvbdySnJMrCH -EOcLKvbdHDjujBij -EObjjvbdrMyiyMHi -DoCkKvbdiifHimXr -DnbkKvbdbsCkTcia -DnbkKvbdMfbpNPtk -EOcLKvbddoErkUTr -DncLKvbdqZOhGqDx -DnbjjvbdDncKkXCd -DoCjjvbdSCEElIxk -EPCkKvbdbUbHXjsh -DnbkKvbdCTAcUGWr -EPDLKvbdZtIiZESn -DnbjjvbdrDeJPnVa -DoCkKvbdZisIQHCG -DncLKvbdgFkzOHHA -EPCkKvbdmfdxMmfy -DncLKvbdMIbMRYAS -EOcKjvbdaogGckzd -EOcLKvbdLAkHMawq -DncLKvbdxwiJbQZk -DncLKvbdauBgYLUI -DnbkKvbdnQZxvKyC -EOcKjvbdFkEsChNV -DoDLKvbdpstGrRjt -EPDLKvbdlYrrSxgU -DnbjjvbdZQmFIldq -DoCjjvbdbhmKLFvx -EObkKvbdsBellGjy -DncLKvbduCcUwWOo -EObkKvbdJuuGEEfi -DoCkKvbdIwtCHkqQ -EPCkKvbdaMkBruMg -DncLKvbdEARiMyvw -EObjjvbdmgExNOGy -DoCjjvbdpfDdsuaI -EPDLKvbdEzspdlCi -EPDKjvbdqdFJQNua -DnbkKvbdnBjWxOnV -EPDLKvbdZisHogBf -EPCkKvbdjcMKpftg -DnbkKvbdauCGwjsh -DoDKjvbdlYrrTZHU -EOcLKvbdzjVPpDrt -DoCkKvbdQdDApQdS -DoDKjvbdehLWRmpg -EPDLKvbduoTzpkPU -DoCkKvbdliDspuRa -DoDKjvbdEXxLsssl -EObjjvbdZsiJYcrn -DoCkKvbdaaWFGPpX -DoCkKvbdrafNMHLZ -DoCjjvbdmgEwlnHZ -EPCkKvbdFkEsCgmV -DncKjvbdqmZjYlHi -DoCkKvbdfILWSORH -DoDLKvbdnCKXYOnV -DnbkKvbdHgGyyYYH -DoDLKvbdEKHjVxKA -EPDKjvbdbAueGPow -DnbkKvbdFyUuBDwb -EPDKjvbduCcUvvOo -EObkKvbdauBfxKsh -EObjjvbdZjTIPgBf -EObkKvbdNGbolpVL -EOcKjvbdeFOqbWbj -DoCjjvbdvwMAvBVu -DnbkKvbdzRPMhjXA -DncKjvbdFkErcIMu -EPCjjvbdhlFEOUcZ -DoCkKvbdJbjCpicY -EPCkKvbdZGwEAOri -DnbkKvbdNQYQunHT -DoCkKvbdkIHMFfOL -EObkKvbdHELVjBij -DoDLKvbdZQldhleR -DoDLKvbdVTmTelVj -DnbjjvbdJTZArlwl -DnbkKvbdCDpAvKMf -DoCjjvbdDxYLtUTl -DoDLKvbdwkWcgzyf -EPDLKvbdLBKgNCYR -DoDLKvbdZMSEUNkm -EOcLKvbdxUmEpxkn -EOcKjvbdGLFTDHlu -EOcLKvbdyYJKCPyk -DoCjjvbdDnbjjvcE -DoDLKvbdatbHXjtI -EObjjvbdbiMjLGWx -EPDKjvbdTYKlNzjx -EOcKjvbduDDUvvPP -EObkKvbdliETpuSB -DnbjjvbdrWolDIxq -EObjjvbdqZOggQcx -EOcLKvbdyXiKBoyk -DnbjjvbdqmZiyMIJ -EPCjjvbdULuoAuoJ -DoDLKvbdYzcGRivZ -DnbjjvbdtkwwBTaX -DnbjjvbdJbicQicY -DoCkKvbdTukojTaR -EPCkKvbdHbLydzAD -EObjjvbdVTltGLvK -EPCjjvbdUsmUFkuj -EPDLKvbdTqROuVIN -DncLKvbdYkrETnLm -DoCkKvbdeFPSBwDK -DnbjjvbdNGcPmPtk -DnbjjvbdWHwuxHYz -DoDLKvbdNUsRjmAX -EOcKjvbdZjTHpHBf -DncKjvbdWXIwvDeH -EOcLKvbdrJAKEloF -DoCjjvbdFeirOJUR -EOcKjvbdWWhwvEEg -DncKjvbdKeehBaQu -DnbjjvbdZLrDsmlN -EOcLKvbdZnnIeFZj -DoCkKvbdjKGHjMwr -EObkKvbdmIctQtqa -DoCjjvbdkClKpfuH -DnbjjvbdcTDKscia -DnbjjvbdADSYKZiQ -EObkKvbdygZMANFX -EPCjjvbdaMkCTUlg -DoDKjvbdzjVPodTU -EPCkKvbdIxTagkpp -EPCjjvbdZjSgpHBf -EOcLKvbdiCOcEvpq -EOcLKvbdsQWOibvG -DoDKjvbdEuxoomJe -DoDKjvbdmuVZkKSG -DoCjjvbdSZjITDWA -DoCkKvbdCJLBkJGK -EPCkKvbdliDsqVSB -DoCjjvbduaDxrneI -EOcLKvbdtvNxJpsA -EOcKjvbdEuyPoljF -DnbjjvbdwWlAuaWV -DncLKvbduMXvaTaX -EObjjvbddxZstSFz -EPDLKvbdmttykKSG -EPCjjvbdfIKvRnRH -DoDLKvbdjgfkeemk -DoCkKvbdHELVjBjK -EObjjvbdaRecIUGL -DnbkKvbdmSYuZrci -DoDLKvbdKfGHaaQu -EOcLKvbdIwsahLpp -EOcLKvbdEuyPomKF -DoCkKvbdsQWPJcVf -DnbjjvbdbPgHDkzd -DoDKjvbdZMSETnMN -DoDKjvbdJSyBTMwl -EPCkKvbdSCDeMIxk -DoDLKvbdtkwwBTaX -DoCjjvbdtbcVWuoP -EPCjjvbdozmdKxPA -DoCjjvbdtkwwBUBX -DoDLKvbdQdDBPpcr -DoCjjvbdJbjCpjDY -EPCjjvbdCTBDTfWr -EPDKjvbdYNqAYUut -DoDKjvbdURRPVUgm -EOcLKvbdNPwqVmfs -DoDKjvbdsCGMkgLZ -DoDLKvbdZtIiYcsO -EObjjvbdhficZWJu -EPCjjvbdTqRPUuIN -EPCjjvbdyOShXsIc -EOcLKvbdliETqVRa -DncKjvbdYqMdhmEq -DoCkKvbdKfGHbBQu -DnbkKvbdqBIeAXIE -EPDLKvbdQZNAHTRj -EObkKvbdRosgJecw -EPCjjvbdKQzEnfOF -DoDKjvbdzRPMiKXA -DnbkKvbdGcjvJbJj -DoCjjvbdbAvEeoow -DncKjvbdFVyQPmKF -EPDLKvbdRzKIScWA -EPCkKvbdKkAhWAJy -EPCkKvbdJqZdnenF -DoCkKvbdVUMtGMWK -DncKjvbdBiLBjiGK -DnbkKvbdjvWnDbYX -DnbkKvbdwuNEqYkn -DoDKjvbdegjurORH -EObjjvbdpeceTvAh -DoCkKvbdAMgySwZx -EPCkKvbdlZSqsZGt -EPDLKvbdbrbkTdKB -EPDKjvbdhzUekpnG -DncLKvbddeOqbWbj -EPCjjvbdsPunibvG -EOcLKvbdVwIxVdEg -DoCjjvbdkIHLefNk -DnbkKvbdxmrhXrhc -EPCkKvbdziuPocrt -EOcLKvbdNUsSLNAX -DncKjvbdhkddNtcZ -DoCjjvbdMpYRWNgT -EObjjvbddZxoxYqC -EOcLKvbdNVTRjmAX -EPDKjvbdZjTIQHCG -DnbkKvbdHEKvJbKK -EOcKjvbdiGibxvJu -DnbjjvbdsCGNMGjy -DoCjjvbdBhkBjhfK -EPCkKvbdSCDdkhyL -DnbjjvbdNPwpvNfs -EOcLKvbdJTZBTNYM -DncKjvbdqGEFTvBI -EObkKvbddneSjtTr -DncLKvbdqdFJPmua -EPDKjvbdrbFmMGkZ -DoCjjvbdhXZAzzAJ -EOcKjvbdkxsSSxgU -EPDKjvbdrEEhonVa -DnbkKvbdYzcGSKVy -DoCjjvbdzROmJJwA -EPDLKvbdOEdUJJKd -EPCjjvbdqquKmkAm -EOcLKvbdZyEKODLr -DnbkKvbdIsZAsMxM -DnbjjvbdZjTHofaf -DoCjjvbdrSUkOLAm -EPCjjvbdBsAbsewS -EObkKvbdUsltGLuj -EPCkKvbdANHyTWyx -EObkKvbdsBemMGjy -EObjjvbdMoxRVmfs -EPCkKvbdNGbolouL -EPDLKvbdjKGHimXr -DncKjvbdUMWPAuni -EOcLKvbdOEdUIhkE -EPCkKvbdjKGHimXr -EPCkKvbdhuZdwSVC -DoCjjvbdCIkBjiFj -EPCkKvbdxZhGFxFS -EObjjvbdOFDtJJKd -DoCkKvbdfNGWgNKL -EPDLKvbdcarmSATm -DoDKjvbdkNCMZeHP -DoDLKvbdkMakyeGo -DnbjjvbdiHJcYvKV -DnbjjvbdWWhxVcdg -EPDKjvbdVUNTelVj -DoDKjvbdZGvdAPTJ -DoCjjvbdDncLLXCd -EPDKjvbduDCuWuno -DoCkKvbdPyNAHTSK -DncKjvbdqwPlDIyR -EOcKjvbdYzbfSJvZ -DnbkKvbdRotGifDw -DoDLKvbdRDcBQRDr -DoDKjvbdEARiNZvw -DncKjvbdJSxaTNYM -EPDKjvbdVwJXvDeH -EOcKjvbdQwOECkhD -DoCjjvbdEPCkLWbd -EPDKjvbdVBBpsRSZ -EOcKjvbdddoSBwCj -EOcKjvbdFkFScINV -EObjjvbdpstGrSLU -EPDLKvbdhaoDFXRR -EPDKjvbdKfGICApu -EObkKvbdBsAcTevr -EObkKvbdhkeDmtby -DoCkKvbdqYngfpdY -EOcKjvbdsPvPKCvG -DoDLKvbduVmwiqTA -EOcKjvbdidkGtoAO -EPCkKvbdyzeORgiI -DoCkKvbdmJDsqUqa -DncLKvbdiGibyVjV -DncKjvbdhtzEwSVC -EOcLKvbdZRMdiNFR -EOcKjvbdrafMkgKy -DoDKjvbdZGwEAOsJ -EOcLKvbdjmCMZeHP -DncLKvbdjKFgimYS -EPCjjvbddZxpYZRC -DncKjvbdjmBkzEgP -EObkKvbdkIHLeemk -EPDKjvbdjAQGaQGj -DncLKvbdSPtHJfDw -DoCkKvbdGKdsChNV -EPCjjvbdrouoJbuf -EPDKjvbdlhcsqUqa -DoCjjvbdwXMBWAvV -DnbkKvbdhkdcmtby -EOcLKvbdFkEsDHmV -EOcLKvbdCIkBjhej -DoCkKvbdiLeDnVDZ -DoDLKvbdDxXlTssl -DnbjjvbdNrtVfduQ -EPCkKvbdHDkWJajK -EPCjjvbdTulQKUBR -DoDKjvbdJYUBhLpp -DncKjvbdiCOcFXRR -DoCkKvbdxsNiMrBg -EObkKvbdQlxByNtz -EPCjjvbdBhkBjiFj -EPCjjvbdNeDsiIjd -DncLKvbdBsAcTfXS -DncLKvbdDwwlUTsl -EOcKjvbdUQqPVUgm -DncKjvbdmttzKirG -EPCjjvbdKWUfEFHJ -EPCjjvbdGKdrcINV -EPDLKvbdkxrrTYgU -DoCkKvbdQdCaQQcr -DnbkKvbdvAdYroFI -EObkKvbdFxttaDwb -DnbkKvbdQdDBPqES -DncKjvbdkVwODbXw -DoCkKvbdrounicVf -EPCjjvbdBcoaVjMf -DncKjvbdcImKKevx -DoCjjvbdxLWdHzyf -EOcLKvbdcbTNSATm -EPDKjvbdRacdlJZL -EPDLKvbdZQleIleR -EPCkKvbdTfznLwWF -EObkKvbdsCFmLgKy -DoDKjvbdyqOlhiwA -EOcKjvbdtcCtwVoP -DnbjjvbdRWmdCkgc -EOcKjvbdqUTfqrKt -DnbkKvbdRyjHsDWA -DoDLKvbdYqMdiNEq -EOcKjvbdhbPCeXRR -EOcKjvbdVrNwbFLc -EObkKvbdZLqcsmkm -DoDKjvbdRWmdDMID -EPCjjvbdkWXNcbYX -DncLKvbdZyDinClS -EOcLKvbdqUTfqqjt -DncLKvbdUtNTelWK -EPDKjvbdkWWmdCXw -DoDKjvbdezuxdhtX -DoCkKvbdaSGCgtGL -EPDKjvbdVwJYWDdg -DoDLKvbdWSOYCFMD -EObkKvbdxwiJaozL -DoCjjvbdTpqOuVIN -DoCkKvbdrzLpSaHn -DnbkKvbdJutecdfi -DnbkKvbdhgKDZVjV -DncKjvbdCJKajiGK -EPCkKvbdbrcLTcia -DncKjvbdxxIibPzL -DoDLKvbdNUsRkNAX -DoCkKvbdZRMeJMdq -DnbjjvbdxsOJMqbH -DncKjvbdqAheAWhE -DoCkKvbdZnnIddyj -DoCjjvbdrpWOibuf -DoCjjvbdDxXlUUTl -EPDKjvbdZirgofbG -DnbjjvbdDnbkKvbd -EOcLKvbdoznDkXoA -DnbjjvbdozmdKxPA -DnbkKvbdfHkVqmqH -DoDLKvbdkDMLRGtg -EPDKjvbdDxXlUTtM -DoDLKvbdZLrETmkm -DoCjjvbdLAkGlbYR -DncLKvbddndsLUUS -DoCjjvbdaRfDIUFk -DnbjjvbdjJfHjNXr -DncLKvbdeFPRbXDK -DoCkKvbdJYTbIMRQ -DnbkKvbdptUGrRjt -EOcKjvbdkMbLzEfo -DoCjjvbdezuxeJUX -DoCjjvbdZMRctOLm -DoDLKvbdWWiXudEg -DnbkKvbdiiehKNXr -DoCkKvbdXrkaNUOx -EPDLKvbdZjTIQGbG -EObjjvbdeOeTLTtS -EPDKjvbdBraCsewS -EPDLKvbdLBKflaxR -DncKjvbdRzJhScWA -EPDLKvbdGKdrbhMu -DoDKjvbdFeiqmiUR -DnbjjvbdFWYooljF -DnbkKvbdUWLoisaR -EPDKjvbdfRaWzkbo -EPDLKvbdKQzEnfNe -DoDLKvbdnUtyjiqf -DnbjjvbdyNrgxSiD -EOcKjvbdjlakzFHP -DoCkKvbdjvXODaxX -DnbkKvbdLFfHaaRV -EPCkKvbdwuMeRYlO -EPDLKvbdtSqrxzEc -DncKjvbddwytTqez -EOcKjvbdZLqcsnMN -DoCjjvbdkxsSTZHU -EPDKjvbdiZtekqNf -EObkKvbdnCKWwnmu -EObjjvbdauBgYKsh -EPDKjvbdrSVKmkBN -EObkKvbdxrnImSBg -DncKjvbdZnnJEeZj -DoDKjvbdZjTIQHBf -DncLKvbdmIctRVRa -DoCjjvbdziuQQDsU -EPDKjvbdZRNFJNEq -EOcKjvbdTqRPUthN -EPCkKvbdePFSjssr -EPDLKvbdfIKuqmqH -DoDKjvbddZyQYYpb -DoDLKvbdWRmwaeMD -DoDLKvbdOYOuzcmt -DoDLKvbdxsNiNRbH -EPCkKvbdNeEThiLE -EPCkKvbdNPxQunHT -EPCjjvbduCbtvuoP -EOcLKvbdjgfkeemk -EObjjvbdjlbLydfo -DoDLKvbdxmsIXrhc -DoCkKvbdlrZVZsDi -DoDKjvbdEztRElCi -EObjjvbdBsAbsfWr -DoDLKvbdZHWdAOsJ -DnbjjvbdSCDdkhxk -EObjjvbdeFOqbWcK -EPDLKvbdZtJJZESn -EPCkKvbdKfFhBaQu -DoCkKvbdMpYQvNfs -EObjjvbdrpWOjCvG -EPDLKvbdJSxaTMxM -EPCjjvbdOSsvGduQ -DoDLKvbdtumxKRTA -EPDKjvbdBcpBWKMf -DnbkKvbdtbbuWvPP -DoDLKvbdKWUfDdfi -EPDKjvbdOStVgFVQ -EObkKvbdZnmheFZj -DoDLKvbdQwODcMID -DoDKjvbdVrNxBeMD -DoCkKvbdaSFbgsek -DoCjjvbdTvMQKTaR -DoCkKvbdZsiIxdSn -EObkKvbdakMFnnDA -DoDLKvbdJutedFHJ -EOcLKvbdhzVFlQnG -EObjjvbdzjUpQDsU -EPCkKvbdzoQQeCkx -DncKjvbdZjShPgCG -DnbjjvbdMgCpMpVL -DnbkKvbdNGbpNPuL -EObkKvbdKfFhBaRV -DnbjjvbdKQzFPFnF -EPDKjvbdCIkBkJGK -EObkKvbdmajXXnnV -DoCkKvbdNwnuzcnU -EObjjvbdauCGwkTh -DnbkKvbdbiNKKfXY -DnbjjvbdQmYCYnUz -DoDKjvbdiLddNtcZ -EOcKjvbdeEoSBwDK -DoDKjvbdcTCkUDia -DnbkKvbdZRNEhmEq -EPCkKvbdHfgZxxXg -EObjjvbdbsDLUDjB -EPDKjvbdhbPDFWqR -DncLKvbdKNADyfuB -EObkKvbdEztREkcJ -DncLKvbdbLMFnnDA -EObkKvbdZjShPgBf -DncLKvbdbVCHXkTh -DnbkKvbdqTtHSRkU -EObkKvbdfSBWzlDP -DnbkKvbdGKeTDIMu -EOcLKvbdGcjvJbJj -EPCkKvbdMowqWOHT -DncKjvbdYpmFIleR -EPDKjvbdZxcjNblS -DncLKvbdNrtVgEuQ -EOcKjvbdqrVKnLBN -DnbkKvbdatbHXkUI -DoCkKvbdEPDKkWbd -EPDLKvbdmIdURVRa -DoCkKvbdMoxRWNgT -EObjjvbdLBKflbXq -DoCkKvbdSwjkmzkY -DoDKjvbdJbicQicY -EObkKvbdNQYQumgT -DoDKjvbdxxJKCPzL -DncLKvbdnGdxNNgZ -DoCkKvbddijSVtzn -EPDKjvbdrJAJdmOe -DnbjjvbdzoQQeDLx -DoCjjvbdZRMeIldq -DnbjjvbdkHgMGGOL -DoCjjvbdaSGChTfL -EOcLKvbdCJLCKiFj -DoCkKvbdVhXvYHYz -EPCjjvbdcSbjscia -EOcKjvbdxZgeewdr -EPDLKvbdYkqdUNlN -DnbkKvbdREDApQdS -DnbjjvbdmozZVkYb -EPDKjvbdaRecITfL -DncLKvbdZyEJmbkr -EOcKjvbdZnnIdeZj -DncLKvbdeXzTsrFz -DoCjjvbdZRMdhmEq -EOcLKvbdGGJqmhtR -EPDKjvbdIidAJpHE -DncKjvbdMRwNZtpz -DncLKvbdnBiwXoOV -DoDLKvbdqYnhGqEY -EOcKjvbdWexytAOs -EOcKjvbdiZuFlQnG -EObkKvbdVAaqTRRy -EPCkKvbdTAEhgaoE -DoDKjvbdMoxQvNfs -EPDKjvbddjJqvUzn -EObkKvbdBiKajhfK -EPDLKvbdZLqcsmlN -DoCjjvbdgPazwDwh -EPCkKvbdwkWcgzzG -EPDKjvbdlYsSSyGt -EObjjvbdZLrDsmkm -DncLKvbdbsCkUDia -EObkKvbdkxrrSyGt -DnbkKvbdnBivxOnV -DoDLKvbdZirhPgCG -EObjjvbdfMevfmKL -EPDKjvbdSQTgJecw -DoDLKvbdUWMPitAq -DoDKjvbdwtleRZMO -EObjjvbdKRZdoGNe -DoCjjvbdauBgYKsh -DoDKjvbdXrlAlsnx -DncKjvbdUMVnaVni -DncKjvbdiHKDYvKV -DnbkKvbdySnJNSCH -EPCjjvbdfNGWgNKL -EOcLKvbdnQZxujxb -EObjjvbdVgwvXgYz -EOcLKvbdjKGHimYS -DnbkKvbdhanbeXQq -DncLKvbdhzUfLpmf -DoDLKvbdczZPxZRC -EPDKjvbdRNYBxnUz -EOcLKvbdlrZVZrdJ -DncKjvbdtcDUwWOo -EPCkKvbdQvmdDLhD -EPCjjvbdfMfWfljL -DoCjjvbdZyEKNbkr -EOcKjvbdgPazvcxI -DncKjvbdfNGXHMjL -DncLKvbdEKHjWXjA -EObkKvbdZjSgogCG -EPCjjvbdxnSgxShc -EPCjjvbdqrVKmkBN -EPCjjvbdbBVdepQX -DoCkKvbdrXQLbhxq -DoCjjvbdbVBfxLTh -EPCkKvbdHlBznWqL -EPDKjvbdTAEhgaoE -DnbjjvbdCfkfHAzc -DnbkKvbdptTfqqjt -EPDLKvbdWIXuwgYz -EObjjvbdrJAJeNPF -DncLKvbdKDKDRJcY -DnbkKvbdrDeIpNvB -DncLKvbdVwIwudFH -DncKjvbdICMZdzAD -EPCkKvbdsQVnjDVf -EPDKjvbdiZuGMRNf -DoDLKvbdIGfyyXwg -EPDLKvbdYORAXtut -DoCjjvbdhzVGMQnG -EPDLKvbdQwNcbkgc -EObjjvbdsBemLgLZ -DoDLKvbdZtIiYdSn -DoCjjvbdelevfljL -DoCkKvbdcyxowxqC -EPDLKvbdZMRdUNlN -EOcLKvbddZyPwyRC -EPCjjvbdZLrDsnLm -EPCkKvbdgPazwEYI -DoDKjvbdqFdEsvBI -EOcKjvbdVviXvDdg -EPCjjvbdCWzdIdov -DncKjvbdrSVKnLBN -EObkKvbdiLddNtcZ -EPDLKvbdrDdiPmvB -EPDKjvbdKDKDRKCx -DoDKjvbdtSqsZZeD -DoDLKvbdwuNFRYlO -DoCjjvbduLwvaTaX -EObjjvbdtkxXBUBX -EOcLKvbdSQTgJfEX -EObjjvbddneTKtUS -DoDLKvbdAMhYsXZx -EOcLKvbdczZPwxqC -EPDLKvbdjbkjqGtg -EOcLKvbdFkEsChMu -EObjjvbdbsCkUDia -EObkKvbdEzsqElDJ -EPDLKvbdGZUuBEYC -DoCkKvbdzROmJJwA -EPDKjvbduMXwAsaX -EPCjjvbdqwQMDJZR -DoDKjvbdqUUHSRkU -DoCkKvbdwtleQxkn -DnbkKvbdQvnEClHc -EPDKjvbdjvXNcaww -DoCjjvbdjggMFenL -EPDLKvbdJYUBhLpp -DnbkKvbdkNCLyeGo -DoCjjvbdDoCkLWcE -EOcKjvbdYqMeJNFR -EPCjjvbdRDcApQdS -EObjjvbdjblKpgVH -EPDKjvbdqqtjnKaN -DoDLKvbdwtmFRYlO -DoCjjvbdnHEwmNgZ -DncLKvbdaMjasVNH -DncKjvbdnUtzLKSG -DoDLKvbdkySrSyGt -EPCjjvbdyNsIXriD -DoCkKvbdRadFMIyL -EOcKjvbdqvokbhxq -EPCjjvbdYkrEUOLm -EPDKjvbdrpWPKCvG -DncKjvbdxUldpyLn -EObjjvbdrbFmMHKy -DoCjjvbdZHWdAPTJ -DncKjvbdEPDLKwDE -DnbjjvbdZHWdAPTJ -DoDLKvbdNrsvHFUp -DncLKvbdCTBDUFvr -EPDLKvbduDDUvuno -DoDLKvbddwystSFz -DnbkKvbdmbJvwoNu -EPCjjvbdcbTNSAUN -DnbjjvbdnVUzKjRf -EOcLKvbdYlRdUOMN -DoCjjvbdTAFIgand -DnbkKvbdpeceUVaI -DoDLKvbdlZSrTYft -EPCjjvbddePRbXDK -EOcLKvbdJqZdnfNe -EPCkKvbdRaceLhyL -EPDKjvbdLAkGlaxR -EPCjjvbdqGDdsvAh -DnbjjvbdxZgefYEr -EObkKvbdKWVGEFGi -EPCjjvbdSQUHKFdX -EPDKjvbdDxYLsssl -EPCjjvbdfHjvSNqH -EPCkKvbdQwODbkhD -EOcKjvbdZnmiFEyj -EPCkKvbdqwQMChyR -EOcLKvbdZyDimcLr -EObjjvbdjAQGaQGj -EPCkKvbdZtJJYdTO -EObjjvbdjFKgUoAO -DnbkKvbdcScLUEKB -EPDKjvbdjcMLRGuH -EObjjvbdqlzKZLgi -EOcKjvbdFfJrNiUR -EObkKvbdKaKgNBxR -EOcKjvbdHDjujBij -EObkKvbdFejSOJUR -DncLKvbdMIalRYAS -EOcKjvbdVTlsekvK -DoCjjvbdUQqOtthN -DnbjjvbdVYgtZkOn -DnbkKvbdrovOicVf -DncKjvbdKfGIBaQu -DnbjjvbdjuvnDaxX -EPDLKvbdHakzEzAD -EPDLKvbdyzdnRhIh -DoCjjvbdZGvdAPTJ -DoDLKvbdqvolChyR -DncLKvbdjlbLyeHP -EPCkKvbdmIdTptrB -EPCkKvbdQcbaPqES -DoDLKvbdddoSBwCj -DnbjjvbdjvWnECXw -DnbjjvbdZisHofbG -EOcKjvbdZQldhldq -DnbkKvbdfekymfgA -DnbjjvbdLBKgMbYR -EPCjjvbdEARiMzWw -EObjjvbdtSrTYzEc -EPDKjvbdZoOIddyj -DnbkKvbdcSbjtEKB -EObjjvbddndsKssr -DoCjjvbdxnSgxShc -EPCjjvbdOTUVfdtp -DoCkKvbdUtMselWK -DnbjjvbdJpydoGNe -DoCkKvbdGQASwGey -DnbjjvbdnGdxMnGy -EPDKjvbdHDkVibKK -DoCjjvbdtbbuXWOo -EPDKjvbdKWVGEEgJ -EObkKvbdGLEsCgmV -DoCkKvbdbrbjtEKB -EPDLKvbdRzJgrcWA -EPCkKvbdaRecITfL -EObjjvbdrbGMlHKy -DnbkKvbdZdwfzgiC -EPDKjvbdVwJXudFH -DoCjjvbdiZtekqOG -EObkKvbdqrUkOKaN -EObkKvbdySnImRbH -EObjjvbddoFTKstS -EOcKjvbdyOTHxTJD -DncKjvbdFVxoolie -DoCkKvbdFejRnIsq -EPDLKvbdptUGrRkU -EOcKjvbdajlGOnDA -EPDKjvbdrRtkOKaN -EOcKjvbdzoQQeDLx -EPCjjvbdrafMlGkZ -EPCjjvbdmpZyWKyC -DoCkKvbddBrlrAUN -DnbkKvbdMgDPlpVL -DnbjjvbdUxhTzKoO -DoCkKvbdSCDdlIyL -EPDKjvbdmbJvxPOV -EPCkKvbdNGcQMpUk -EPCjjvbdVqmxCFLc -DoDKjvbdrDdhonWB -EOcLKvbdYTLaNToY -DoCkKvbdkIGlFemk -EPDKjvbdNrsvHFVQ -EPDLKvbdrzLoraHn -EObkKvbdraelkgLZ -DoDLKvbdBdQAujMf -DncKjvbdwzIGGYFS -EOcKjvbdZeXfzhIb -DoDKjvbdbAueGPpX -DoCjjvbdZtJJYcrn -DoDKjvbdyqPNJKXA -DoCkKvbdTAFIhCPE -DoDLKvbdjblLQgVH -DoCjjvbdZtJJZDsO -EOcLKvbdrNZixkhJ -DoCjjvbdzoPpdblY -DnbkKvbdqcdhpNvB -DncKjvbdYpldhleR -DoCjjvbdmRyUysEJ -DoCjjvbdJXtBgkqQ -EOcKjvbdVwJYWDeH -DoDLKvbdZLqdUOLm -EPDKjvbdEXwlUUTl -EObkKvbdoznDkYPA -EPCkKvbdEASJNZvw -EPCjjvbdFjdsCglu -DoCkKvbdTlWPBWOi -DnbjjvbdcTCjsdKB -EObkKvbdkySrTYft -EPCkKvbdLrXMytpz -DncKjvbdZQmEhleR -EOcLKvbdHkaznWpk -DnbkKvbdHfgZyXxH -EObkKvbdpecdtWAh -DnbkKvbdRadElJYk -EPCjjvbdTXkMNzjx -DoCjjvbdmSYtzTEJ -EPCkKvbdZsiJZDsO -DncKjvbddoErkTtS -DoCkKvbdZRMdiMeR -EObkKvbdTfzmkvvF -DncKjvbdpxnhHQcx -EPDLKvbdaMjbStlg -DoCjjvbdkHfkefOL -DoCjjvbdqqtkOLAm -DnbjjvbdyzeNqgiI -EOcKjvbdiLeDnUby -DncKjvbdyYIjCPyk -EOcKjvbdpfEFUVaI -EPCjjvbdZirgpHBf -DnbkKvbdKWUecdgJ -EOcLKvbdiHKCxvJu -EPDKjvbdcTCkUEKB -EOcLKvbdaMkBsVNH -EPDLKvbdJutfEFGi -EPCkKvbdFaOqZJzm -EObjjvbdhaoCdvqR -EPCkKvbddZxpXxqC -DnbjjvbdZxcinDLr -DoDLKvbdpssfqrKt -DoCjjvbdqTsgRrLU -EPDLKvbdEYXlUTtM -EObjjvbduVmwjQsA -EOcLKvbdNPxQunHT -DnbjjvbdBhjajiGK -DoCkKvbdUGznMXVe -EPDKjvbdVwIwvEFH -EObkKvbdRMwayNtz -DoDLKvbdQZNAGrrK -EObjjvbdKWUedFGi -DoDLKvbdaNKartlg -DncKjvbduWOXipsA -EObjjvbduVmxKRTA -DoDKjvbdygZMAMdw -DoDLKvbdqTsfrRkU -DoCjjvbdEvYpQMjF -EObkKvbdNPxQunGs -EObkKvbdsZlPsAgn -DnbkKvbdZnnIddzK -EPCkKvbdNQXqWOHT -DnbkKvbdGLFSbhMu -DoDKjvbdrzMPraIO -DnbkKvbdZirgofaf -EPDKjvbdijFhJlxS -DncKjvbdWRmxBeLc -DnbkKvbduDDUvuoP -DoDKjvbdiZuGMQmf -EObkKvbdelfXGljL -EPDLKvbdfNFvfljL -DncKjvbdGKdrcINV -EObjjvbdFfJqnIsq -EOcLKvbdILaznWqL -DncLKvbdJutedFHJ -EOcLKvbdIwtBhLpp -EPDLKvbdsrrSyZdc -EPDKjvbdczZQXxpb -DncLKvbdDoCjjvcE -EPCjjvbdpxoIHREY -DoCkKvbdxxJJbPzL -EPCkKvbdVZIUZkPO -EPDLKvbdULuoBWPJ -EPCkKvbdfMfWfmJk -DnbjjvbdZtIiZETO -DoCjjvbdiMEcnUby -DoCkKvbdcyyPxZQb -DoCkKvbdZirgofaf -EObkKvbdozmdLYPA -DoDKjvbdYkrEUNkm -DoCkKvbdLqwMzVQz -EObjjvbdLFfICBRV -EObjjvbdjJehKNYS -DoCjjvbdEJgiuwjA -EPCkKvbdyqPNIiwA -EPDKjvbdNdcsiIjd -EPCjjvbdauBgXjsh -DnbkKvbdyzeORgiI -EPCkKvbdsCGNLgLZ -EObkKvbdtbbtwVno -EObjjvbdwuMdqZLn -EObjjvbdSQTfiedX -EPCjjvbdmttyjjSG -DncLKvbdnHFYMnGy -DncKjvbdxmsIXrhc -EPDKjvbdQYmAGsRj -EObjjvbdfoazvdYI -DoDLKvbdhaoDEvpq -EObjjvbdDihKVwjA -DoCjjvbdZMSDtNlN -DnbjjvbdhlFDnVDZ -EPCjjvbdiCPCdwRR -DncLKvbdULuoBVoJ -DoDLKvbdyYJKBpZk -DoDLKvbdRbDdlIyL -EOcKjvbdYSlAlsoY -DoCkKvbdySmhlqbH -EOcKjvbduWNxKRTA -DnbkKvbdFjeTDIMu -DoDLKvbdzaAPGgCM -EPCkKvbdBhkCLJGK -DnbkKvbdYpmFJNFR -EPCjjvbdQccBQQdS -EOcKjvbdqGDdtVaI -EOcLKvbdILazmvqL -EPDLKvbdajkennDA -DoDKjvbdxVMdqZLn -EPDKjvbdNPxQunGs -EObjjvbdhytfMROG -EPDKjvbdEXxLtTtM -EPDKjvbdZnnIdeZj -DoDKjvbdGKeTChNV -DncLKvbdjmCMZeGo -DnbkKvbdQwNdClHc -DncKjvbdXrlBMtOx -DoCkKvbdzaAOgHBl -DncLKvbdcIlijewY -EObjjvbdrbFllHKy -EOcKjvbdmbJwXnmu -EObkKvbdssSSxydc -DoDKjvbdSQTgKGEX -DnbjjvbdUyHtZkPO -EPCjjvbdFyUuAdYC -DoCkKvbdqFcdsvBI -EOcLKvbdqwQLbhyR -DoCkKvbdbsCkUEKB -EPCjjvbdIjEAKQHE -DnbkKvbdaNKbTUmH -EObkKvbdnCKWxPOV -EOcLKvbdZxcinClS -EObjjvbdhlFDnVDZ -DncLKvbdpyPHfpdY -EOcKjvbdTlVoAuoJ -EOcKjvbdmbKXXoOV -DoCkKvbdxsOImSBg -DncKjvbdZHXEAPTJ -DoDLKvbdDjIKVwjA -DoDLKvbdnCJvwoNu -EPCjjvbdZeYGzghb -EPDKjvbdHffzYxXg -EObjjvbdirzhrkJz -DoCjjvbdZnnJFFZj -EPDKjvbdeATqMwif -DoDKjvbdbVCHXjsh -DoCjjvbdGckVjCKK -EOcLKvbdyYJJbPzL -DoCjjvbdiCPDFWpq -EOcLKvbdIwtCILqQ -DoDLKvbdKQzFOfOF -EOcKjvbdNPwqWNgT -EObjjvbdZLqcsmkm -EPDLKvbdnPyxvKxb -DoDLKvbdKjaHvAKZ -EObjjvbdjKFgjNYS -DnbkKvbdLAkGmCXq -DoDLKvbdeEoSBwCj -DnbjjvbdHlBznXRL -DnbjjvbdKfGHbBRV -DnbkKvbdZQldiMdq -EOcLKvbdnBivwnnV -DncKjvbdsQVoKDWG -EObkKvbdypnlhiwA -EObkKvbdrykpTAgn -DoCjjvbdaMkBsUmH -EPDLKvbdRDcBPqES -DoCjjvbdpxngfpdY -EOcKjvbdEztRFLbi -EOcLKvbdcbTNSAUN -DoCkKvbdjcLjpfuH -EPCkKvbdjSzhsKiz -EPCkKvbdoAKztIDn -EPCjjvbdMgDQNPuL -DoDLKvbdKNAEZgVB -EPCjjvbdZsiJZDsO -EOcLKvbdkCkkQfuH -DoCjjvbdnGeXmNfy -DnbjjvbdrpVoJbuf -DoCkKvbduCbuWuoP -EObjjvbdSwkMNzkY -DoCkKvbdrNZiyMHi -DnbjjvbduDCtvuoP -DoDLKvbdMuSqjmAX -EObkKvbdsQVnicVf -EPCjjvbdmfeYNNgZ -DncLKvbdmIdURUqa -EPCkKvbdGBPQyJzm -EPCjjvbdZRNFImEq -DncKjvbdNddUJJLE -EObkKvbdaSFbgsek -DncKjvbdDoCkKwDE -DoCjjvbdtkxWaUBX -DncLKvbdfNGXHMjL -EPCkKvbdqTtHSSKt -DnbkKvbdxmrhXsJD -DnbjjvbdmttykKSG -EObjjvbdqcdhomua -DoCkKvbdVTlsfMVj -DnbkKvbdRECaPpcr -DnbkKvbdijFhKNYS -EObkKvbdIwsbIMRQ -EPDLKvbdJbibqJbx -EPDKjvbdxxJKCPyk -EOcKjvbdjuvnECYX -DnbkKvbdKRZePFme -DnbkKvbdMpYRVnGs -EOcKjvbdfMevgNKL -DoCkKvbdmfeXmOHZ -DncLKvbdFpATXGey -DoDKjvbdJXtCIMQp -EObjjvbdZshiZDsO -EPDLKvbdaRfDHsfL -DncKjvbdMIakqYAS -EObjjvbdSLZGUfjs -DoDKjvbdBcoaWJmG -DoDKjvbdEuxpPlie -EObjjvbdJcJbqKCx -DoCjjvbdxwhiapZk -DnbkKvbdsBemLfkZ -DoDLKvbdHgGyxwxH -EOcKjvbdQdDApRDr -EPDLKvbdKWUfDeHJ -DnbjjvbdjvXODbYX -DoDLKvbdHELWJbKK -DncLKvbdgFkynHHA -EPCkKvbdPxmAHSqj -DoDLKvbdYkqdTnLm -EPCkKvbdJYUCILpp -EOcKjvbdxwhjBpZk -DoCjjvbdiMFENtcZ -DoCjjvbdnCJvwoOV -DoDKjvbdSKxetgKs -EOcKjvbdWRmxCFMD -EOcLKvbdpedFTvBI -EObkKvbdbAvEfPow -EObkKvbdZnmiEeZj -DnbkKvbdtTSSyZeD -EPCkKvbdPxmAGsRj -EPCkKvbdVTmUGLvK -EObkKvbdJmADyfta -EOcKjvbdwWlBVaWV -DoDLKvbdjcMKqGtg -EOcLKvbdGGJrNiTq -DnbkKvbdgPazvdYI -EPCkKvbdGLEsDHmV -DnbjjvbdqceIomua -DncLKvbdjbkjpgUg -DoCjjvbdSxLLmzkY -EPDLKvbdjKGHilxS -EPDKjvbdmbJvwoNu -EPDKjvbdjmBkyeHP -EPDLKvbdzROliJwA -DnbjjvbdUaBprprZ -DoDKjvbdtbbtwWPP -DnbjjvbdURQoVVHm -DoCjjvbdjbkjqGuH -DoCjjvbdRbEFLhyL -DncKjvbdBcpAujMf -DoCkKvbdPxmAGrqj -EPDLKvbdZRMeImFR -EOcLKvbdcScKscia -EObjjvbdeXytTrFz -EPCjjvbdKfGICBQu -DncKjvbdijGIKMwr -EObjjvbdZLqctOLm -EObkKvbdSLZFuGjs -DnbjjvbdZMRcsnMN -EPCkKvbdWSOYBeMD -EObjjvbdRacdlJYk -DnbjjvbdFyVUaEXb -EObjjvbdRbEFLiYk -EObjjvbdZjTIQGaf -EPCkKvbdNsTugEtp -DoCkKvbdEASIlyvw -DoCjjvbdsrrSxzFD -DoDLKvbdQwOEDMID -EPDKjvbdaaVeGQPw -DoCjjvbdFejRnItR -EObkKvbdRacdlIyL -DnbjjvbdGGJqnIsq -DoDLKvbdGYtuBDxC -DncKjvbdbLMGPODA -EObjjvbdqYoIGpcx -DncKjvbdrykosAgn -EPCjjvbdJbjDQjCx -EObjjvbdkySqsYft -EPDKjvbdxwhjBpZk -DncKjvbdauBfwkTh -EPCkKvbdtSrSxydc -DoDKjvbdMRvmZuQz -DncLKvbdnUtyjiqf -DoDKjvbdSLYetgKs -DoDLKvbdJbjCqJcY -EPDLKvbdShyiqAAl -EPDLKvbdSQUHJfDw -EOcLKvbdijFhJmYS -EPDLKvbdvwMBWAvV -EObjjvbdeXytUSFz -EObjjvbdWXJXuceH -EPCkKvbdrDeIomvB -DncKjvbdczZQXyRC -DnbjjvbdQlxCZOUz -EPCjjvbdQccApRDr -DoCkKvbdqiAJdloF -DoCjjvbdDwwktTtM -EPCjjvbdRpUGjGEX -DnbkKvbdWfYytAPT -EPCjjvbdUMVoBVni -EObkKvbdxnShYTIc -EObjjvbdVAaqSprZ -DncLKvbdKVtfDdgJ -DoCjjvbdliEUQtqa -DnbjjvbdiGjCyWKV -DnbjjvbdqrVLOLBN -EObkKvbdUaCRSqSZ -EObkKvbdTkvPAuni -DoCjjvbdIGgZyXwg -DoDLKvbdssRsYzEc -DnbjjvbdZLqdTmkm -EPCjjvbdUtNTfLvK -DncKjvbdfMewGmJk -EOcLKvbdCTBDTfWr -EPDKjvbdFpASwGey -EPCjjvbdZLrETmkm -EPDLKvbdyXhjCQZk -DnbkKvbdeATqMxJf -DoCjjvbdjJfHilwr -EPDKjvbdzitopESt -EPDKjvbdEuxopMjF -DoCkKvbdvBEYroFI -DnbkKvbdrNZiyMIJ -EPCjjvbdxVMdpyMO -DnbkKvbdQlxCZOUz -DnbkKvbdqmZiyLhJ -DncLKvbdXnRAXuWU -EObkKvbdRadElJYk -DncKjvbdLiBkqYAS -DnbjjvbdmRyUysDi -DoDKjvbdKCicQjDY -EOcLKvbdRkZGVGjs -DoDKjvbdtSrSyZdc -EOcKjvbdRyjISbvA -EPCjjvbdHffyyYYH -EOcKjvbdaogHDkzd -EPCjjvbdidkGuPAO -EOcKjvbdCDpAujMf -DoCkKvbduVnXjQsA -DnbjjvbdTulQJtAq -DncKjvbdqTsgRrLU -DoCkKvbdzdynzdyp -EObkKvbdemGXHNKL -EOcKjvbdJXtCHlRQ -EPDKjvbdegkWRnQg -DoCjjvbdyXiKCPyk -EPDLKvbdlZTRsZHU -DoCjjvbdfNFvgNKL -DnbjjvbdbVBgYLTh -DncKjvbdcJMikFvx -EPDLKvbdUMVnaVoJ -DoCkKvbdgQBzvcxI -DoCjjvbdZtIhxdSn -EPCjjvbdRWnEDMID -EObkKvbdjlakydfo -DncLKvbdrpWOicVf -EOcKjvbdhgKDYuiu -DoDKjvbdmIdTqUqa -EPCjjvbdwtleQxkn -EObkKvbdcJNKKfWx -DncLKvbdNsUWGdtp -DoDKjvbdWSOXbEkc -EPCkKvbdpyOhHREY -DoDKjvbdkyTSTYft -EPCjjvbdFjdrbgmV -DncLKvbdrounjDWG -DoDKjvbdVTmTfLvK -EPDLKvbdSCDeLiYk -DoCkKvbdrXPlDIxq -DncLKvbdKVuGDeHJ -DnbjjvbdrWokcIxq -EObjjvbdKVuGEEfi -EPDLKvbdrbGMlGjy -EPDKjvbdlqxtzSci -EOcLKvbdwygeeweS -EObjjvbdjKGIKNYS -EObkKvbdVrOXbElD -DnbjjvbdrMzKZLgi -EPCkKvbdMpXqWNfs -EPDLKvbdrSUkOLAm -EPDKjvbdZisIPfbG -EPDLKvbdRDbaQRES -DncKjvbdVTmUGLvK -EOcKjvbdYzcGRjWZ -EObjjvbdMuSrLNAX -DncKjvbdjgflGFnL -DncLKvbdWIXvXfxz -DoDLKvbdNHComPtk -EOcLKvbdSBceLhyL -DoCkKvbdZRMeImFR -EPDLKvbdiifIKMwr -DoCkKvbdvBDxsOeI -EPDLKvbdxmsHxShc -EOcKjvbdcyyPxZRC -DoCkKvbdsBfNMHKy -DoDLKvbdaRebhTfL -DncLKvbdypoNJKXA -EObkKvbdzRPNJKXA -DnbkKvbdTvLoitBR -EOcKjvbdWHwuxGxz -EObjjvbdZHWdAPTJ -DnbjjvbdySnJMqag -EPCkKvbdtTRsYzFD -EPDLKvbdhytelQnG -EPCkKvbdTppntuHm -DnbjjvbdZeYGzhIb -EPCjjvbdIwsaglQp -DoCkKvbdpstGrRkU -EObjjvbdCJLBjiFj -EOcLKvbdePErjstS -EPDKjvbdpxnhGqDx -DnbjjvbdZyEKOClS -DoCjjvbdpyOhHREY -DncLKvbdNGcPmPuL -DoDLKvbdQwNccLgc -EPDKjvbdmbJvxPNu -DnbkKvbdQwOEDMHc -DoDKjvbdXrlAltOx -EPCkKvbdGQASvgGZ -EOcLKvbdmttykKSG -EOcLKvbdGLFSbgmV -DncLKvbduCbuWvOo -EPDKjvbdSQTfiecw -DoCkKvbdYkqctNkm -DoDLKvbdlZSqsZHU -DoDLKvbdqGEEtVaI -EObjjvbdhytekpmf -DoDKjvbdmuUzKiqf -EObjjvbdrMyiyLhJ -DoDLKvbdEARhlzWw -EObjjvbdaRfCgsek -EPDKjvbdaNKaruNH -EOcLKvbdJqZeOenF -DnbjjvbdTfzmlXVe -DoCjjvbdzQoNIjXA -EObkKvbdMpYQvNfs -DncLKvbdVrOYCElD -DoCjjvbdijGIJlwr -DoDLKvbdrXQMDIyR -EPDLKvbdEYYMUTtM -DncKjvbdkHgMFenL -DnbjjvbdqdFIpOWB -EObkKvbdqFceTvAh -EObjjvbdyOSgxSiD -EOcKjvbdDnbkKvcE -DoDLKvbdYqMeImFR -EObkKvbdwtleRZMO -EPCkKvbdrWolCiYq -EObjjvbdrXPkcJYq -DoCkKvbdtlXvaUBX -EOcLKvbdeYZssrFz -DoDLKvbdnGeYMnHZ -EObkKvbdYTLaMtOx -DoDLKvbdJcJcRKDY -EPDKjvbdeKJrVtzn -DoCkKvbdrSUkNjaN -DncKjvbdeATqNXjG -EObkKvbdqlzJyLhJ -EObjjvbdDjIJvXjA -EObjjvbdzGyMAMdw -DoDLKvbdFfJrNiTq -EOcLKvbdBhkCKiGK -EObjjvbdpssgSRjt -DncKjvbdKaLGlbXq -EOcLKvbdlYrqrxgU -EPCjjvbdVqmxBeLc -EPDLKvbdZQmFJNFR -DoCkKvbdkCkkQfuH -DncKjvbdauCGwjsh -DoCjjvbdEASIlywX -DncKjvbdLAjgNBxR -DncKjvbdCDpBVimG -EOcLKvbdqlzJxkhJ -EPDLKvbdtvNxKRTA -DnbkKvbdGLFScINV -DoCkKvbdQvmdCkhD -EPDKjvbdFjdrbhNV -EPCkKvbdZLrETnLm -EPDLKvbdTvLoisaR -EPDLKvbdsrrTZZdc -EPCkKvbdZMRcsmlN -DncLKvbdxnTHxTIc -EOcKjvbdzROliJwA -EOcKjvbdsQVnjDVf -EObkKvbdqGDdsvBI -DncKjvbdwtleQxkn -EObjjvbdTqRPUuHm -DnbjjvbdVwIwvEFH -EPCjjvbdZshhxcsO -DoCkKvbdKCibqJbx -EOcKjvbdUVlQKTaR -EObkKvbdVTmUFlWK -EOcLKvbdmIctRVRa -DoDKjvbdPIAYZAYa -DoCkKvbdjvWnDbXw -DnbjjvbdtvNwjRTA -EObjjvbdNHComQUk -EOcKjvbdySnImRbH -DoCjjvbdDjIKVxKA -DncLKvbdKefHbApu -EObjjvbdehLWRmpg -EOcLKvbdJTZAsMwl -DoDKjvbdZirgpHCG -EObkKvbdozmcjxPA -EObkKvbdsZkosAgn -EPCjjvbdSxKlNzjx -DoCjjvbdfILVrNpg -EPCjjvbdGGKRnJTq -DnbjjvbdpssgSSLU -DoDKjvbdrDdiPmvB -EPCkKvbdZtJJYcsO -DoDLKvbdNdctIhkE -EPCjjvbdcImJkFvx -EOcLKvbdGLErbhNV -DoCkKvbdnQZxukYb -EPCkKvbdWSNxBeLc -EPCkKvbdsPvOjDWG -EOcLKvbdeFOqavbj -EPCjjvbdjAQHApHK -EPDKjvbdwXMBVaVu -DncLKvbdMowqWNfs -DoCkKvbdRbEFMJYk -DoCkKvbdrNZjZLhJ -DoCjjvbduDCtwWPP -EObjjvbdNeEUJIjd -DnbkKvbdlYsRsYgU -DoCjjvbdUxgsyjnn -EObkKvbdbLMGPODA -DoCkKvbddneTKtUS -EOcKjvbdvvkaWAuu -EPDKjvbdVUNUFkuj -EObjjvbdKDKDQjCx -EPDKjvbdnUuZjiqf -DoCkKvbdsCFmMGkZ -DncKjvbdrpVnjDWG -DnbjjvbdiZtfMQmf -DoCkKvbdwWkaVaVu -DoCjjvbdSCDeLiZL -DncKjvbdEYYLtTsl -EPDLKvbdOSsufeVQ -EOcLKvbdWSOXadlD -EPDLKvbdpaJFAXHd -DncKjvbdSCDdkhyL -DoCjjvbdIMBzmvqL -DnbkKvbdVUMsfLvK -DoCkKvbdlhctQuSB -DncKjvbdJuuGEFGi -EPCjjvbdJSyAsMwl -EOcKjvbdUtMtGMVj -EPCkKvbdHDkWKCKK -DncLKvbdySnImRag -EPCjjvbdwMvAMcdm -DnbkKvbdelevfmJk -EPDKjvbdYORAYUvU -EPCkKvbdVwIxWDeH -EObjjvbdtvOXipsA -DncLKvbdhlEdOUcZ -EOcLKvbdTlVoAuoJ -EPCkKvbdNQXpunHT -EOcLKvbdWXJXvDdg -DnbkKvbdZoOJFEzK -EObkKvbdmbKWwoOV -DnbjjvbdiHKDYvKV -DncKjvbdfSBWzlDP -DoCkKvbdLBKflawq -EObkKvbdUsmUFkvK -EObjjvbdLqwNZtpz -DoCkKvbdsBfNLfjy -DncLKvbdjvWmcbYX -EObkKvbdaMkBruMg -EPCkKvbdHkazmvqL -DnbjjvbdRyjHrbvA -EPCkKvbdNQXpvOHT -EObjjvbdOYPVzcnU -DoCjjvbdaSGCgtFk -DoDKjvbdxmsHxSiD -EObjjvbdZirgogCG -EOcLKvbdmuVZkKSG -DncLKvbdUyHszKnn -DnbkKvbdxmsHxTJD -EPCkKvbdVrOYBdkc -EOcLKvbdhkdcmuDZ -DncKjvbdwuMdpyLn -EObkKvbdxVMdpxlO -EPDKjvbdmbKWwoOV -DoCjjvbdhkeDmtby -DncLKvbdLFehCBQu -DoCkKvbdYSkaNUOx -DnbkKvbdmaivxPNu -EPDKjvbdfNFvgNKL -EPDKjvbdhlEdOUcZ -EPDLKvbdTukpKUAq -DncKjvbdUVlQKTaR -DnbkKvbdYgWdAPSi -DoDKjvbdIwsbHkpp -EOcKjvbdlZTSTYgU -DoCkKvbdNHColpVL -EPCjjvbdxrmhmRag -EObkKvbdUxgsyjnn -DoCjjvbdsQVoJbvG -DoCkKvbdBdQBVjMf -EObkKvbdIHHZxxXg -EOcKjvbdJuuFdEgJ -DoDLKvbdwyhGGXeS -DnbkKvbdSKyFuGkT -DoDKjvbdiGibxvKV -DncKjvbdnBjXXoNu -DnbkKvbdFpATWffZ -EPCjjvbduDCtvvOo -EObjjvbdIsZArlxM -DncKjvbdEvYopMjF -EObjjvbdwuMdqYkn -DoCjjvbdwyhFfYEr -EPCjjvbdqUTfrSLU -EOcLKvbdzGxlANEw -EPCjjvbdEOcKjwCd -EPCkKvbdOSsvGeUp -DncKjvbdhlEcnUcZ -EPCkKvbdUVkoitAq -DnbjjvbdOAJTTjSA -DncKjvbdqmZiyLhJ -EObjjvbdpstGqrLU -EPDLKvbdFxuVAcwb -DoCkKvbdauBgYKsh -DnbjjvbdZMRcsmkm -EOcLKvbdqrVLNkBN -DoDKjvbdNQYRWNgT -DoCjjvbdCTBCtFvr -DncKjvbdZyEKNcMS -EPCkKvbdVviYVdFH -DoDKjvbdePErjtUS -EObkKvbdwtmFRZLn -DncKjvbdpedEsvAh -EPCkKvbdzoQRFClY -DoDKjvbdIxTbIMQp -DoDLKvbdxsOImSCH -EPCjjvbdYfwEAOri -EOcKjvbdnPyyWLZC -EOcKjvbdhlFEOVCy -DoCjjvbdwyhFfXdr -DnbkKvbdZQmEhleR -DnbjjvbdbAudepPw -DnbjjvbdMpXqVmgT -DncLKvbdNeEUIhjd -EObkKvbdMfbomQUk -DoCkKvbdqvpMDJYq -DoDLKvbdfekzNfgA -EOcLKvbderAvzlCo -EOcLKvbdiZtelQnG -EPDLKvbdRXNdClHc -EPDKjvbdNrsufeUp -DncKjvbdZQldiMeR -EObkKvbdiLdcmtby -DncLKvbdZQmEhleR -DncLKvbdZRNEiMdq -DncLKvbdWRmwadlD -EPDLKvbdGLEsDHlu -DncLKvbdZjTIPgCG -EObjjvbdxnTIXsIc -EPCjjvbdliETptqa -EOcKjvbdlrZUyrci -DoDKjvbdbKlFnnDA -DnbjjvbdwXLaWBWV -DoCkKvbduaEZSoFI -EPCjjvbdRyjHrbvA -EPCjjvbdLhakpxAS -DoCkKvbdmaiwXoNu -EOcKjvbdyNrhYShc -EObjjvbdsCFllGjy -DnbkKvbdZshhxdTO -DoDKjvbdZjShPfaf -EOcKjvbdmajWwnmu -EObjjvbdJvUfEFHJ -EPCkKvbdOEcsiIkE -EPCkKvbdkNBlZeGo -DoCjjvbdVviXudFH -DnbkKvbdjJfHjMxS -DoDLKvbdGBPRZJzm -EOcKjvbdiCObdvqR -DnbjjvbdVwJYWDeH -DncKjvbdGAoQxizm -EObjjvbdxmsIYSiD -DncLKvbdqqtkOLAm -EObjjvbdvvlAvBWV -DncKjvbdvAdZTPFI -EOcKjvbdjAQHAogK -EObkKvbdpxoIHRDx -EPCkKvbdffLynGgA -EPDLKvbdTvLpKUAq -EOcKjvbdmttzKjSG -DoCkKvbdqwQMChyR -DoDKjvbdrzMPsAgn -DoDLKvbdyYJKCPyk -DoCkKvbdRbEEkhxk -EPCkKvbdBdQAuilf -EPDLKvbdRaceMIyL -EOcKjvbdraelkfjy -EOcLKvbdEASIlzWw -DnbkKvbdOSsvGeUp -DnbjjvbdmuVZkJrG -DnbkKvbdVwIwvDeH -DoDKjvbdwWlAvBVu -DncKjvbdSKyFuGjs -DoCkKvbdOXnuzcmt -DncKjvbdrXPlDJZR -EPDLKvbdsBfNMGjy -EPDLKvbdiifHilwr -DnbkKvbdjvWmcbYX -DoDLKvbdZnmhddyj -EPCkKvbdemFvfmKL -EPDLKvbdNxPVzcnU -DnbjjvbdRkYfUgLT -EPCkKvbdZRMdhldq -EObjjvbdYqMdhmFR -DncLKvbdJvVGDeGi -EPDKjvbdUtMsfLuj -DoDLKvbdZyEJnClS -DnbkKvbdjcMKqGtg -EPCjjvbdDnbjkXDE -DnbjjvbdLGGICAqV -EPDKjvbdWIXvYGxz -EOcLKvbdBiLCKhfK -DnbkKvbddwzUURez -EOcLKvbdZQldiMdq -DncLKvbdKVtfEFGi -DoCkKvbdvAcxsPEh -DncLKvbdjvWmcbXw -EObkKvbdqiAJeNOe -EOcLKvbdUMWPBWPJ -EPCjjvbdOFDshhjd -EOcLKvbdVrNxBeMD -EPDKjvbdiGicZWKV -EObkKvbdtTRrxzFD -DoCjjvbdjJfHilxS -DoCjjvbdelfXGmKL -EPCjjvbdIrxaTMwl -EOcLKvbdRECaPpcr -DnbkKvbdiLeDmtby -EPDLKvbdGcjvKCJj -EOcKjvbdWWiXuceH -DoCkKvbdpstHRrLU -EPDLKvbdkHgLeemk -EPCkKvbdzGxlANEw -EObkKvbdjKGHjMwr -EPCkKvbdiUzEvquC -EOcLKvbdwXMBWBVu -EObkKvbdeKKRvUzn -DncLKvbdSBceLhxk -DoDLKvbdJbibqJbx -DncKjvbdeAUQlxJf -EPDKjvbdbUafwkUI -DoCkKvbdxnTIXriD -EPDLKvbdRacdlJYk -EOcLKvbdmgFXlnGy -EOcKjvbdHELWJaij -EPDLKvbdLhbMQxAS -DnbkKvbdhbPDFXRR -EOcKjvbdqwQMDIxq -DncKjvbdeOdrkTsr -EObjjvbdyOSgwriD -EPCkKvbdjmCLyeHP -DnbjjvbdZisHpGbG -EOcKjvbdIHGzZXwg -DncLKvbdwWkaWAvV -DoDKjvbdffLzOHHA -EPCjjvbdqZPIHREY -DoCkKvbdDjHivYKA -DoDLKvbdYNqAYVWU -EPCkKvbdzjUpPcrt -DncLKvbdlqyVZrdJ -DncLKvbdDoDLLXDE -DoCjjvbdcSbjtDia -DoDKjvbdDxXlUTsl -DncLKvbdJYTahLpp -EObkKvbdNQXqVnHT -EObjjvbdijGIJlxS -EObjjvbdOStVfdtp -EPCkKvbderBWzlCo -EObjjvbdKQzEnenF -EPCjjvbdmtuZkKRf -EPCkKvbdEJhJuxKA -EPCjjvbdgGLymfgA -EObjjvbdRbDeLhxk -EOcKjvbdrSUkNkAm -DoDLKvbdEOcLLXDE -EObjjvbdBhjbKiFj -DoDLKvbdBdQAuimG -DnbjjvbdDwwkstTl -DoDLKvbdVwJYVdEg -EOcKjvbdACqwizJQ -EObjjvbdZsiIyETO -EObkKvbdGLFSbhMu -EOcLKvbdFkFTChNV -DnbjjvbdVBCRSprZ -DoCjjvbdssRsYydc -DoCkKvbdUMWOaWOi -DoDKjvbdYSlBMsnx -EObkKvbdNsTvHFVQ -EPDKjvbdZisIPfaf -EOcLKvbdpssfqqjt -EPCkKvbdNHCpMpVL -EPDKjvbdczZPwxpb -EPCjjvbdnBivxPOV -DoDKjvbdUtNTelVj -EPDKjvbdjhHMFfNk -EObjjvbdEuyPolie -EPDLKvbdKQydneme -EPCkKvbdQvnECkgc -EPDLKvbdatbGxLTh -DoDLKvbdNPxQvOGs -DoDLKvbdySnImSCH -EObkKvbdvBEZTOeI -DoCjjvbdatagXkUI -DnbjjvbdmbKXXnnV -EOcLKvbdmbKXXoNu -EPCkKvbdNsUWGduQ -DncLKvbdpssgSRjt -EPDLKvbdiUzFXSUb -EObkKvbdyzeORgiI -EOcLKvbdKDKDQibx -DoCjjvbdmJDtQuSB -DncLKvbdaNKaruMg -DnbkKvbdOEctJJKd -EObjjvbdkVvnECXw -EObkKvbdKaLHMbXq -DoCjjvbdYzcFqiuy -DoCkKvbdvwLaWAvV -EPDLKvbdnBiwXoNu -EOcLKvbdLBKgNBwq -EPCkKvbdCJLBjiFj -EObjjvbdptUGqrLU -DoCkKvbdWXJYWEFH -EOcLKvbdNeEThiLE -EPCjjvbdtAHQhAAr -EOcKjvbdUGzmlXVe -DnbkKvbdrylPsBIO -EPCjjvbdICLzEzAD -EPDKjvbdrpVoKCuf -EPCjjvbdRkZFuGjs -Dnbjjvbdznopdbkx -DoDLKvbdmgFYNNfy -EObjjvbdptUHRrKt -DoCkKvbdhfjDZWJu -DncLKvbdLGFgbBRV -EPCjjvbdZnnIeEyj -DoDKjvbdmtuZjirG -EPCkKvbdmbJvwoOV -DncLKvbdJpydoFme -EPDKjvbdFyUtaEXb -DnbkKvbdqFcdtWAh -DnbjjvbdWRnXaeMD -EOcKjvbdCIkBkJGK -EOcKjvbdJTZBSlxM -DnbjjvbdziuPocsU -DnbjjvbdhzUelQmf -EPCjjvbdUaBqSprZ -DncLKvbdxZgefXdr -EObjjvbdKVuFdEgJ -EPCjjvbdAMgyTWzY -DnbjjvbdiHJbxuiu -DoDLKvbdUtNTekuj -EPCjjvbdUQpnttgm -DoDLKvbdVAbRTRSZ -DncKjvbdkxsSTYgU -DnbkKvbdMfbomQUk -DoCjjvbdTAEiHbOd -DoCjjvbdczZPxYpb -DnbkKvbdUVkojUBR -DncKjvbdddnqavbj -DoDLKvbdxwhiapZk -DoDKjvbdZirhPfaf -DoDKjvbdTukoitAq -DoCjjvbdrJAKFMne -EObkKvbdZQmEhmFR -DoCjjvbdHgHZyXxH -DncLKvbdNHCpNPuL -DoCkKvbdfIKvRmpg -DoCjjvbdNsUWHEtp -DoCjjvbdpfDdtWAh -DoDLKvbdBhkCKiGK -EObjjvbdtSqsYydc -EPDLKvbdQccBPqES -EOcLKvbduMXvaUAw -EOcLKvbdZMRctNkm -EObjjvbdRadFMIxk -DncLKvbdjhGlFfOL -DoCjjvbdhtzEvqtb -DnbjjvbdUtNUGMWK -EPCjjvbdaaWEfQQX -DncKjvbdunszpkOt -DoDKjvbdEJgjWYKA -DoCkKvbdQYmAGsRj -DoCjjvbdmozYujyC -DnbkKvbduVnYKRTA -DnbkKvbdZxcjNblS -EPDKjvbdzRPNIiwA -EObkKvbdzitopESt -EObjjvbdfILVrNpg -DoCjjvbdNGcPmPuL -DnbjjvbdEYXlUUTl -DnbjjvbdraellHKy -DoDKjvbdZQmEhmFR -DoCkKvbdZnnIdeZj -DnbjjvbdjcMKpgVH -EObkKvbdTfznLvue -EOcKjvbdFkErcIMu -DncKjvbdGdKvKBjK -DoCjjvbdVvhwvEFH -EPCkKvbdmJEUQuSB -DncKjvbdIsZBSlxM -DnbkKvbdmbJvxPNu -DoDKjvbdTqRPVUhN -DoDLKvbdwygefXdr -DnbjjvbdLGGHbBRV -DncLKvbddijSVtzn -EObkKvbdZnnJFFZj -EOcKjvbdCTBCsfXS -DoDLKvbdmttzKjSG -EOcKjvbdyNsIXsIc -EOcKjvbdbVBgXjtI -EOcLKvbdGFjRnJUR -DnbkKvbdYTMBMtOx -EPCkKvbdNGcQMouL -DoDKjvbdJcKDQibx -DoDLKvbdrpWOicWG -EOcKjvbdRaceMIyL -EPDLKvbdWWiYWDeH -EPDLKvbdczZQXxqC -DoDKjvbdLBKgMaxR -DnbjjvbdZjShQHBf -DoCkKvbdKaLGlbXq -DnbkKvbdGdKujCJj -EObkKvbdIBkydzAD -DnbkKvbdqUTgSRkU -EOcLKvbdBiKbKhfK -DoDKjvbdVwIwvEEg -EPDKjvbdIjEAKQHE -DoCkKvbdEPCkLWcE -DoDLKvbdrDeJQNua -EOcLKvbdNddUIhjd -EPCkKvbdYNqAXtvU -EObkKvbdUaCRSqRy -EPCjjvbdqqtjmjaN -EPDLKvbdhbOcFWpq -DoDKjvbdULvPBVni -DoDKjvbdGGJrOJTq -DoCkKvbdqceIpNvB -EOcKjvbddePSCXCj -EPCjjvbdVUNTekuj -DnbjjvbdLGGHbApu -DoCkKvbdcTDLTcia -DnbkKvbdNsUWGeVQ -EObjjvbdZLqcsmlN -EObkKvbdxrnJMrCH -DnbjjvbdqvolChxq -EPCjjvbdaNKbSuNH -DnbkKvbdlYrrTYft -EPCjjvbdwtldpyMO -DnbkKvbdNddThiKd -EPCkKvbdjJfIJlwr -EPCjjvbdJpzEoFme -DnbkKvbdiMEcmuDZ -EOcKjvbdkVvmdBww -EOcLKvbdAMgxrwZx -EObjjvbdatbGwjtI -EOcKjvbdTAEhhCOd -DnbjjvbdfNFwHNJk -EObjjvbdVBBqSpqy -EPCjjvbduaEZSndh -EPDLKvbdpstGqqkU -DnbkKvbdIwtCHlQp -DncKjvbdrbGNMGkZ -EOcKjvbdILaznWqL -DoCjjvbdTXjkmzkY -DoCjjvbdIGfyyXxH -EOcKjvbdjKFhKNXr -EPDKjvbdRDcApRES -EObjjvbdmfdxNNfy -EObjjvbdDihKWYKA -DoCjjvbdzaAOffal -EPDLKvbdQccBQQcr -EPCjjvbdTlWPAvOi -DnbjjvbdqUTfrSLU -EObjjvbdVAbRTRRy -DoCkKvbdnCKWxPOV -EOcKjvbdFjdrbhNV -DnbjjvbdrzLpTAhO -DoCjjvbdDxYMUUUM -DnbjjvbdmoyxujyC -DnbjjvbdUVkoitAq -EObjjvbdrEEhpOWB -DncKjvbdRjyGVGjs -DoCkKvbdJJdAKPgE -DoDKjvbdKDJbqKCx -EPDLKvbdcTDLUDia -DoCkKvbdePEsKssr -EPCjjvbdJbjCqJbx -DoDLKvbddBrmSATm -EOcLKvbdlhcsqVRa -EOcLKvbdKfGICBRV -EPDLKvbdrovPJbvG -DoCjjvbdbAvFGQQX -EPDLKvbdlZTSSxft -DnbjjvbdLqvmZuQz -DncLKvbdZshiYdSn -EOcLKvbduMXvaTaX -EObjjvbdZtJJYcrn -EOcLKvbdczZPwxpb -EPDKjvbdatafwjtI -EObkKvbdsQVnicWG -DnbjjvbdrWokcIyR -DncLKvbdJuteceGi -EOcLKvbdADRwiyiQ -EPDKjvbdCIkBjiFj -EPDKjvbdrNZjYkgi -DnbkKvbdSLYeuHLT -DoDKjvbdkNBkzEfo -DnbkKvbdcyxowyQb -EPDKjvbdYkrETnMN -DoDKjvbdwWlAvAvV -EPCkKvbdczZPxZQb -EPCkKvbdKCibpjCx -EOcKjvbdhytfLqOG -DnbjjvbdxmsHwriD -EPDKjvbdmfeYMmgZ -DoCkKvbdNQXpvNfs -DncLKvbdirziSkJz -EOcKjvbdHffzYxYH -EOcKjvbdWXIxWDdg -DncLKvbdVvhwuceH -DoDLKvbdFxtuBDxC -DncLKvbdJcKCqJbx -DoCkKvbdxLWcgzyf -DnbjjvbdCJLBjiGK -EPCjjvbdcasMrATm -DoDLKvbdLFfICAqV -EPDKjvbdqmZjZMHi -DncKjvbdczZPwxqC -EObkKvbdrWpMDJYq -EPCjjvbdLFehCBQu -EPCkKvbdRzJgsDWA -DoDKjvbdIsZArlxM -DncLKvbdqFcdsuaI -DncLKvbdULvPBVni -EOcLKvbdWXJXuceH -EPDLKvbdaNLCTVMg -EObkKvbdUxhUZjnn -DncLKvbdeATplxKG -DoCjjvbdmSYtzSci -EOcLKvbdkMbLzEfo -EPCjjvbdrpVoJcWG -EPCjjvbdXrlAlsoY -DoDLKvbdUxhTzKnn -EPCjjvbdOEdUJJLE -EObjjvbdKDJcRKCx -EPDKjvbdcyxpXxqC -DnbkKvbdZxdKODMS -DncLKvbdcImJjfWx -DnbjjvbdpfEFTuaI -DnbkKvbdZoNheEyj -EOcKjvbdjFKfuPAO -DnbkKvbdFVyQQNKF -DnbkKvbdDjHiuwjA -EPCkKvbdMgDPlotk -EPDKjvbdxnShXsIc -DoDLKvbdOTUVfduQ -DncKjvbdFejRnIsq -DncKjvbdSQUHJfEX -DncLKvbdRXOEDMHc -DoCkKvbdsZkosAgn -DoDKjvbdUsmUGLuj -EPDKjvbdiifIJmYS -DoDLKvbdZQmEhmFR -EObjjvbdeUAUASlv -DoDLKvbdUsltFlVj -DoCjjvbdSiZjRABM -EOcLKvbdegkVrORH -DoDKjvbdYlRdTnLm -DncKjvbdzitopESt -DnbkKvbdhbPDEwQq -DncKjvbdSKxetgLT -DncKjvbdZQmEiNFR -EPDLKvbdUyITzLPO -DnbjjvbdznpQdblY -EObkKvbdbLMFoODA -EPDLKvbdBhjbLJFj -DoDKjvbdNwoVzdOU -DncKjvbdvBDxsPEh -DnbkKvbdSBceLiZL -EPCkKvbdOhAXyAZB -EObjjvbdZisIQGbG -EOcLKvbdAMgxrvyx -EPDKjvbdCDpAvKMf -DoDKjvbdxVMdpxlO -EOcKjvbdJbicRJbx -DoCkKvbdTppnuVIN -EObjjvbdZjTIPfbG -DoCkKvbdpyOhHQcx -DoCjjvbdfHjvSOQg -DoCjjvbdzoPpdcMY -EPDKjvbdmfeYNNfy -EPCjjvbdXGYzUAPT -DoDLKvbdypnmJKXA -DnbkKvbdBsAcUFwS -DoDLKvbdQYmAGsRj -EObjjvbdUxhTyjnn -DoCkKvbdrouoKCvG -DoDLKvbdhtydwSUb -EPCkKvbddwytUSFz -EOcKjvbdrbFmLgLZ -EObkKvbdbPffckzd -EObjjvbdDxXlTtUM -DnbkKvbdqGEFTvAh -EPCjjvbdDoCkKwDE -EOcLKvbdVviYWDeH -EPCjjvbdWSOYCFLc -DncKjvbdmbKWxPNu -DoCkKvbdZshhxdTO -DoDKjvbdwtldqYkn -DoDLKvbdYSlBMsoY -EPDKjvbdRkZFuHKs -DnbkKvbdeYZstRez -DoCjjvbdrNZixlIJ -DoCjjvbdmgFXlmgZ -EPCkKvbdYlRcsmlN -DoCjjvbdOFETiJKd -EPDLKvbdBhkCLJFj -EPCjjvbdmuVZkJrG -DnbkKvbdFjeTChMu -DoCjjvbdJTZBSlwl -DnbkKvbdozmdLYPA -EObjjvbdtbbtvuoP -DncKjvbdqUTfrSKt -DncKjvbdyTOImSBg -DnbjjvbdcTCkTdKB -EOcKjvbdKaKgNCXq -EPDKjvbdZoOIeEyj -DoDKjvbdYqMeIleR -DncKjvbdnPzZWLZC -EPDLKvbdZirhPfbG -DnbkKvbdGQATXGey -EOcKjvbdZsiJYcsO -DnbkKvbdrWpMDJYq -DoCkKvbdMuTSLNAX -EObjjvbdpxnhHRDx -EOcKjvbdzitpQESt -EPCjjvbdhuZeXSUb -DoCjjvbdNeDtJIkE -DoCkKvbdCEQBWKMf -EPCkKvbdHEKvKCJj -EPCjjvbdatbHYLTh -EObkKvbdLGGICBRV -DncKjvbdRjxeuGjs -DoDKjvbdnHFYNOHZ -EObkKvbdIryAsNYM -EObjjvbdmfdwlnGy -EOcLKvbdNeDsiIkE -DnbjjvbdJTYaSlxM -DoCkKvbdRadEkiYk -DncLKvbdjKFgjNYS -EObkKvbdZjShQGaf -EOcKjvbdKfFgaaQu -DoDKjvbdhgJbyVjV -DoCkKvbdwuNFRZMO -DncLKvbdfekzNfgA -DncKjvbduCcVWuno -EPDLKvbdVrNxBdkc -DnbkKvbdRkYeuHLT -DoDLKvbdwuNEpxlO -DoCjjvbdQccAoqDr -EOcKjvbdUGzmkvvF -DncKjvbdEJhKWYKA -EOcLKvbdssSSxyeD -DoCjjvbdVviXvEEg -DnbjjvbdEuxopNKF -EObkKvbdLAkGlbXq -DoCkKvbdZsiJZESn -DoCkKvbdhkeEOUby -DnbkKvbdbhlikGXY -EObkKvbdLBLGmCYR -EPCjjvbdxUleQyLn -DncLKvbdrbGNMGjy -DoCkKvbdddoSBwDK -EPDLKvbdkyTRsYgU -EPDKjvbdehLVqmqH -EPDLKvbdrbFmMHKy -DncLKvbdmbJvwoOV -EOcLKvbdVUNUFkvK -EPDLKvbdrpWPJbvG -DncKjvbdGAnpxizm -EOcKjvbdyzeNqghh -DoDLKvbdhbPDFWpq -DoDLKvbdfVzxQJzs -DoDLKvbdUMWPBVoJ -EOcLKvbdRpTfjFdX -EPCkKvbdpfDeUWBI -EObjjvbdmuUyjirG -EObjjvbdtbbtwWOo -EObkKvbdrylPsAgn -EOcLKvbdmSYtysEJ -DncKjvbdSCDeMJYk -DoCjjvbdTppoUthN -EPDKjvbdVTmUFkuj -EObjjvbdIsZAsNXl -EOcKjvbdSBcdlJYk -DnbkKvbdZQleIleR -DnbjjvbdddoSBvcK -EOcLKvbdNHComPuL -DncKjvbdiCPCdvqR -EOcKjvbdliDspuSB -EObkKvbdzoPpeCkx -DnbjjvbdcJMijevx -DoDKjvbddZxpYZQb -DoDKjvbdkySrSxft -DoDKjvbdyXhiapZk -EPCkKvbdOAIrsirA -EObkKvbdUaBqSqSZ -EPCkKvbdZtJIyESn -DnbkKvbdTvLoitAq -EPCjjvbdyzeNrIJI -EOcKjvbdiCPDEwRR -EPCkKvbdnCJvwoNu -EPCkKvbdIGfzZYXg -DoCkKvbdkySqrxft -DoCjjvbdZdxGzgiC -DncKjvbdzitpPcsU -DncLKvbdbVCHXjsh -EPCkKvbdlhcsqVSB -EPCjjvbdGYtuAcxC -EOcLKvbdjAQGaQHK -EObjjvbdjlakzFGo -EOcLKvbdvwMAvAuu -EPCjjvbdTqQoVUhN -EPCkKvbdeEnrBwCj -DoCkKvbdsCGMkgKy -DnbjjvbdhkeDnVDZ -EPCjjvbdOFDshiLE -DnbjjvbdDwwlUTsl -EPCkKvbdKWUedEgJ -EPDLKvbdsQVnicWG -EPCkKvbdjgflFfOL -EObkKvbdQYmAHTSK -EObkKvbdSPsgJecw -EObjjvbdjAQGaPgK -DoDLKvbdDxXlUUUM -DoCjjvbdegjuqnQg -DnbkKvbddwzTsqez -DncKjvbdxxJJbPyk -EOcKjvbdGKeTChMu -DoCkKvbdeFPSCWcK -EObkKvbddeOrBwDK -EPCkKvbdaNLBsUmH -DoDLKvbdRpTgJedX -EPCkKvbdkySrSxgU -EPCkKvbdVYhTzKoO -EPCjjvbdxxIjCPyk -EPDLKvbdVrOXadkc -EOcLKvbdEOcKjwDE -DncLKvbdmfeYMnGy -EPCkKvbdVAaprprZ -EPCjjvbdFWYpQMjF -DoCkKvbdqrUjmkAm -DoCjjvbdQvmdDLhD -EPDLKvbdeATqNYKG -DnbkKvbdLGGHaaQu -EObjjvbdezvZEhtX -DnbkKvbdjuwNdBww -DncKjvbdJTZAsMwl -EPDKjvbdkxrrTYgU -EPDKjvbdbAudfQQX -DoCkKvbdVUNUGMVj -EPDLKvbdaNLBsUlg -EPDLKvbdDwxLtUUM -EPCjjvbdMgColpUk -EPDLKvbdaogGdLzd -EPDKjvbdzGxlANFX -EPCkKvbdUQqOuUgm -DoDKjvbdEPDKkXCd -EPDKjvbdbsCkTcia -EObjjvbdTAEhhBnd -EPCkKvbdhzVFkpmf -DnbkKvbdaSFcHtGL -DoCjjvbdGBOpxizm -DncLKvbdGYttaEYC -DoDKjvbdqYoHfpdY -EOcKjvbdrouoKCuf -EOcKjvbdiCPDFWqR -DnbjjvbdVAaprqRy -EPCjjvbdePFSjtUS -DnbkKvbdLGGICBRV -EPDLKvbdkMalZeHP -DoDLKvbdJutfEFHJ -DoDKjvbdVBCRSqSZ -EObjjvbdvvlBWBWV -EOcLKvbdFVxpPmJe -DoDLKvbdKfGHaaRV -DnbjjvbdBvzdIdpW -DncKjvbdNsUWHFUp -EPDLKvbdrSVLNjaN -EPDKjvbdgGMZnGgA -DnbkKvbdSBceMIyL -EOcLKvbdSBdFLiYk -EOcLKvbdRyigrcWA -EPDKjvbdaMkBruNH -DncKjvbdUaCRSpqy -DnbjjvbdIMBzmvpk -DnbkKvbdbVCGxKtI -DncLKvbdliDtQuSB -EObkKvbdHDkVjBjK -DncKjvbdmSYtyrci -DnbkKvbdxVMdpxlO -EPCjjvbdRpTfjGDw -EPCkKvbdhancEvpq -EPDLKvbdNsTvHEuQ -DoDKjvbdfekymfgA -EObkKvbdUWLojUBR -EPCjjvbdJXtBgkpp -DoCjjvbdEPCkLXCd -EPCjjvbdZxcjNcLr -DoCjjvbdZsiJYcrn -EPCkKvbdZtIiZDrn -EObkKvbduLxWaUBX -EObkKvbdZdxGzghb -EOcKjvbdkClLRHVH -EOcLKvbdFjdsDINV -DncKjvbdNeEUIiKd -EPCkKvbdYpmFJNFR -EPDKjvbdlhcsptqa -DoDLKvbdnCKWwoOV -EObkKvbdDnbkLXCd -EObkKvbdQwOECkhD -EOcKjvbdUaCRSpqy -EPCjjvbdBcoaVjNG -DnbjjvbdxmrhXsJD -EObjjvbdcImKKewY -DnbkKvbdpyOgfpdY -DnbjjvbdpyOggRDx -EObjjvbdEOcKjwDE -DnbkKvbduCcUwVoP -EOcKjvbdhgKCxuiu -DoDKjvbdiZtelQmf -DoDKjvbdnBjXYOnV -EPDLKvbdczZPwxpb -EPCjjvbdADRwizJQ -EObjjvbdfVzwpJzs -DnbjjvbdxxIiapZk -EPCjjvbdjcLkQfuH -EPCjjvbdcyyQYYqC -DoCkKvbdEuyPpNJe -DncLKvbdcJNJkGWx -DoDKjvbdZoOIdeZj -DoCjjvbdWHxVwgYz -DnbjjvbdeEoRbWbj -DncKjvbdZMSDsnLm -EOcLKvbdbiNKLFvx -DnbkKvbdjcLjqHVH -DnbjjvbdEYXktTtM -EPCjjvbdCSaCsfWr -EOcLKvbdBdQAuimG -EObkKvbdqdFIpOWB -DncLKvbdelevgNKL -EObkKvbdZMRdUNkm -EPCkKvbdrDdiQOVa -DoDLKvbdCWzdJFQW -EObjjvbdxUleQyMO -DncKjvbdBsAcTfXS -EOcKjvbdRMxBxmtz -EOcKjvbdSKyFuGkT -EPCkKvbdEuxooljF -DncLKvbdYgWdAPSi -DoCkKvbdiHJcYvKV -EPCkKvbdZQldiNFR -DncKjvbdjAPgAofj -EObjjvbdkVvmdBxX -DoDLKvbdsBfMlHLZ -DoDLKvbduWNxKQsA -EObjjvbdOTTugEtp -DoCjjvbdIxUBgkqQ -EOcKjvbdqFceUWAh -DnbjjvbdTkunaVoJ -EPDKjvbdiZtfLqOG -DoCjjvbdcImJkGXY -DncLKvbdpstGrSLU -DncLKvbdRpTfjGDw -DnbkKvbdznpREblY -DnbjjvbdqdEhomvB -DncLKvbdIwtBhMRQ -DoDKjvbdhtzFWqtb -EOcKjvbdiBncEwQq -EPDKjvbdZQleJMdq -EOcLKvbdLAkGlaxR -DoCkKvbdZsiIyDsO -EObkKvbdeOdsKssr -DnbjjvbdJcKCpjDY -EPDLKvbdSBdElIyL -EPCkKvbdyOTHwrhc -EPDLKvbdGLEsDIMu -EPCjjvbdmJETqVRa -DncKjvbdKDJbqJbx -EOcKjvbdbsCkTdKB -EOcKjvbduDCuXVno -EOcKjvbdrXPlDIxq -EOcKjvbdqlyixkhJ -EObjjvbdRkYfUgLT -EPDLKvbdLAkGmCXq -DnbjjvbdHgGzYxXg -DncKjvbdpstHSSKt -DoCkKvbdqvolCiYq -DoCkKvbdmgFYNOHZ -DnbkKvbdqGDeTvBI -DoDLKvbdyzeNrHhh -DnbkKvbdwzHefXeS -DoDKjvbdbiMjLGXY -DnbkKvbdTulQKTaR -DnbjjvbdsPunicVf -DncKjvbdqvpLcIyR -DncLKvbdOFEThhkE -EOcKjvbdZshhxdSn -DncKjvbdpyPHfpdY -DoDLKvbdNGcPmQUk -DoCkKvbdVgwvXfxz -DoCjjvbdCgLegAzc -DnbjjvbdauCGxLTh -DoDKjvbdqFceTvBI -DoCjjvbduMYXAsaX -EPCkKvbdrSVKmkAm -EObkKvbdOYOuzcnU -DncKjvbdYkqctNlN -DncKjvbdSZjHrcWA -DoCjjvbdrEFJQNua -EPCjjvbdRosfjFcw -EObkKvbdZoNiFEyj -EPDKjvbdVgwvXfxz -DoDLKvbdhbPCdvqR -DncKjvbdqvokcIyR -DnbjjvbdpssfqqkU -DncLKvbdzoPpdbkx -DnbjjvbduaDySoFI -EOcKjvbdEASImZwX -DncKjvbdbrcKtDjB -DoCjjvbdQccBQQdS -DoCkKvbdDigjVwjA -DnbkKvbdbVBfwkUI -EOcKjvbdIsYaSlxM -DoDLKvbdKVtedEgJ -EPCjjvbdIryArlxM -DncKjvbdpeceTuaI -EObkKvbdZshiYdSn -DncLKvbdZtIhyESn -DnbjjvbdOYOuzcnU -DoDKjvbdUxhTyjoO -EObjjvbdTppoVVHm -DncKjvbdrWolCiYq -DoDLKvbdNVSrKmAX -EObkKvbdiGicZWKV -DoDKjvbduVmwipsA -EPCjjvbdNPwqVnHT -EObjjvbdelewGmJk -EOcLKvbdgGLzNgHA -DoDKjvbdcJNJjfWx -DoCkKvbdyOTHwriD -EObjjvbdEzspeLcJ -DnbjjvbdjhHLeenL -DncKjvbdOStWHFVQ -EOcLKvbdsZlPsBHn -EPDLKvbdtcCuWuno -DnbkKvbdULunaVni -EPDKjvbdJqZdnfNe -EOcKjvbdqwPkcIxq -EObjjvbdrJAJeNOe -DnbjjvbdRECaPpdS -EPCjjvbdpfEEsvBI -EPDLKvbdIsZArmYM -EPDLKvbdJYUCILpp -EOcLKvbdYlSDtNlN -EPCjjvbdJYTbHkpp -EPDKjvbdYzbfSJvZ -EPCjjvbdRaceMJYk -EObjjvbdZisHofaf -DnbkKvbdRbEElIyL -EOcLKvbdijFhKNXr -EOcKjvbdRXNdDMID -DncLKvbdbiNKLGXY -DoDLKvbdlZSrSyHU -EObkKvbdqZPIHRDx -DoDKjvbdnPzYujxb -EObkKvbdnHEwlmfy -EObkKvbdCWzdIePv -EObkKvbdqlyiyLgi -EPCjjvbdkySqryHU -EObkKvbdcImKKevx -DncKjvbdEASJMzWw -DncKjvbdRkYfUfkT -EPCjjvbdqYoIGpcx -DncKjvbdGckWKBjK -EPCjjvbdYTLaNUOx -EPDKjvbdwtleRZMO -EObkKvbdGFiqnJUR -DncLKvbdlhdURVRa -EObjjvbdqlzJxkhJ -DncLKvbdFaPQyJzm -EPCkKvbdpssgRrLU -EObjjvbdiCOcFXRR -DncKjvbdqTtGqrLU -EPCjjvbdsCFlkgLZ -EOcKjvbduWOXiqTA -EOcKjvbdkClKqGuH -EPCjjvbdMowpvOGs -EPCkKvbdxrmhmRag -DoCjjvbdiUzFXRuC -EOcLKvbdUMWPAvOi -DoDLKvbdmfdwlmgZ -EPCjjvbdehKurNpg -EOcLKvbdBsAcTevr -EPCjjvbdZjTIPgBf -EObjjvbdPIAXyAZB -EPCjjvbdCDoaVjNG -DncKjvbdrpVnicVf -DoDKjvbdlZTSSxgU -DncKjvbdGZVVAdYC -EPDLKvbdsCGMkfjy -EPCjjvbdSPsfjFdX -DoCjjvbdJXsbIMQp -DncKjvbdzeZnzdyp -DnbkKvbdlYsRsYft -DncKjvbdbiMjLFwY -EPDKjvbdyOShYSiD -DoCkKvbdOTTufduQ -EPDLKvbdVwJYVcdg -DoCkKvbdGFiqnJTq -EOcLKvbdUslselWK -EObjjvbdkxsSSyHU -EOcLKvbdxsNhmSBg -DnbjjvbdqqtkOLAm -DnbjjvbdeFPRawDK -DnbkKvbdLZQirzuG -EPCkKvbdFWYpPlie -EObkKvbdrWpMCiYq -EOcKjvbdiiehKNXr -EPDKjvbdEvYopNJe -EPCkKvbdxrmhmSCH -DoCkKvbdptUHSRkU -EOcKjvbdKCjDRJcY -DoDLKvbdrMzKYkgi -DoCjjvbdZLrDtNkm -DoCkKvbdqYnggQcx -DnbkKvbdrovOibvG -DncKjvbdADRwizIp -EOcLKvbdZisHpHCG -EPCjjvbdZRNFImFR -EPDKjvbdVwIxVceH -EOcKjvbdrDeJQNua -EPCkKvbdIxTaglQp -DncKjvbdGFiqmiUR -EPCjjvbdVwJXvEEg -DnbkKvbdwuMeRZMO -EPCkKvbdZRNFImFR -EPCkKvbdnHEwlmgZ -EPDKjvbdLYqKSzuG -DoDKjvbdZsiJYdTO -DoDLKvbdShyjRAAl -DoDKjvbdRadFLiYk -DnbkKvbdjbkjpgUg -EObkKvbdUaBpsRRy -EOcKjvbdehKuqnRH -EObkKvbdDwxMUTsl -EOcKjvbdptUHSSKt -EPDKjvbdHEKuibJj -EOcKjvbdxxIjBpZk -EObkKvbdelewGmJk -DncLKvbdTvLpKUAq -EPCjjvbdGLErbhNV -DncLKvbdfHjvRmqH -DnbjjvbdkMakyeHP -EPDKjvbdJcKCpjDY -DoCkKvbdRECaPpcr -EOcLKvbdmgFYMmgZ -EObjjvbdZRMdiMeR -DoCjjvbdYzcFqivZ -DoCkKvbdeOeTKtTr -EPCkKvbdXFxytAPT -DncLKvbdZnnJEdzK -DncLKvbdhtyeWrUb -EOcKjvbdEJgivXjA -EPDLKvbdssSTYyeD -EPDLKvbdLBLGmCXq -DnbkKvbdKeegbApu -DoDLKvbdJYUBhLqQ -EPDKjvbdwNWANDdm -DoCjjvbdKfGIBaRV -DoCjjvbdbhljLFwY -DncLKvbdmgFXmNgZ -DoDKjvbdZRMeJNFR -DoCkKvbdWeyZtAOs -DoCkKvbdbiNKLFvx -EPDKjvbdUsmTfMVj -EPCkKvbdijFgjMwr -DnbkKvbdbsCjtDia -DnbjjvbdZQleJNFR -DoDLKvbdNQXqWNfs -EOcLKvbdULunaVoJ -DncLKvbdrEEhpOVa -DncLKvbdRyigsCvA -DoCkKvbdVwJYWEEg -DncLKvbdjKGIKMwr -EObkKvbdrEFIpNvB -DoCjjvbdGLEsDINV -EOcLKvbdJSyArlxM -EPCjjvbdTJZiqABM -DncLKvbdCTAbsewS -DnbjjvbdZjTIPfaf -EPCjjvbdbPfgELzd -DnbjjvbdLBLHMbXq -EPCjjvbdqiAKFMoF -DnbkKvbdIBlZdzAD -EPDLKvbdyTNiNRag -DoDLKvbdZjSgogCG -EPCjjvbdjAPgAofj -EPCjjvbdxmrgxTJD -EObjjvbdSPsgKGEX -EObkKvbdRWnDblHc -DnbjjvbdZQmFImFR -DoCjjvbdjuwODaww -EOcLKvbdVviXvEFH -EPCjjvbdcImJkGXY -EPDKjvbdVAbQrqSZ -DoCjjvbdWWiXudFH -EPDKjvbdapGfdLzd -EObkKvbdQwOEDMID -EPCjjvbdKDKCqKCx -DncKjvbdJvUfEEgJ -EObkKvbdDoDLKvcE -EOcKjvbdqwPkbhyR -EObjjvbdyTOJNSCH -EObkKvbdZsiIxdTO -DoCjjvbdaSFbhTfL -EOcKjvbdUslsekvK -DoDKjvbdehLWSORH -EPCkKvbdBsBDTfWr -DoCkKvbdMfbpNQVL -DoCkKvbdezvZFJUX -EObjjvbdJYUBhMRQ -DncKjvbdlhcsptqa -DoCkKvbdiZtfMQnG -EObkKvbdZRMdhleR -EPDLKvbdkySrSxgU -DoCkKvbdYlSDsmkm -DnbkKvbdkNBkzEfo -EPDLKvbdyYJKCPzL -EOcKjvbdqwPkbiZR -DncLKvbdqdFJQOWB -DoDKjvbdFyUtaDxC -DnbjjvbdZyDinDMS -EOcKjvbdqrVKnKaN -DoCjjvbdMgDPlotk -EPCjjvbdUVlPitBR -DoDLKvbdbsCkTcjB -EPCjjvbdnGdwlnGy -DnbkKvbdapGfdLzd -EPDKjvbddndsKtTr -DncLKvbdsrrTZZeD -EObkKvbdqdFJQOWB -DncKjvbdRadFLhxk -DnbkKvbdfILWSORH -DnbkKvbdqZOggQcx -EPDKjvbdCDpAujMf -EObjjvbdxsOImSBg -DoDKjvbdrSUjmjaN -EObkKvbdrMyjYkhJ -EObkKvbdANHySvzY -EObkKvbdgGLynGgA -DoDLKvbdNdcshiKd -EObjjvbdePErkTtS -EPCkKvbdSCEFLhxk -DoDKjvbdIxUBhLqQ -EPCkKvbdVvhxWDdg -EOcLKvbdKfGHbBQu -DoCjjvbdajlFoNcA -DoCkKvbdQdDAopdS -DoDKjvbdSBceMJZL -DoDKjvbdOStWGdtp -DoCjjvbdGdLWKBij -DnbkKvbdvOszpjnt -DncLKvbdUVlPjTaR -DoDLKvbdliDsptrB -EOcKjvbdZisHpHCG -DoDKjvbdkVwODaxX -DoDLKvbdfVzwpJzs -DnbkKvbdDjIKWYKA -EObkKvbdrJAJdmPF -EObjjvbdeATpmYJf -DnbkKvbdQmYByOUz -EPDLKvbdxmrhXsJD -EPDLKvbdCJLBjiGK -DoCkKvbdYpmFJMeR -DoDKjvbdXnRAXuWU -DoDKjvbdiMFDmtby -DnbkKvbddZyQYZQb -DncLKvbdZtIiYdSn -EObjjvbdwMvANDdm -EPDLKvbdIwsbHkqQ -DncKjvbdURQntthN -EObkKvbdTqROttgm -EPCjjvbdTkvOaVni -EOcLKvbdfNFwHNKL -EObkKvbdjgflFfOL -EObjjvbdUQqOuUhN -DncLKvbdegjurNqH -EPDLKvbdxUmEqZMO -DoDKjvbdGcjvKBjK -DoDKjvbdVTltFkuj -DnbkKvbdLYqKSztf -DoDKjvbdUyHtZkOn -EPDLKvbdvAcyTOdh -DncKjvbdqFcdsvAh -DncLKvbdrbFmMHKy -EOcKjvbdYlRdTnLm -DoCjjvbdEASJMzXX -EObkKvbdMoxQvNfs -EOcKjvbdiHJcYujV -DnbjjvbdvAcyTPEh -DoDLKvbdGQASwGfZ -EObkKvbdMoxRVnHT -EObkKvbdhgJcYvJu -DnbjjvbduWOXipsA -DoDLKvbdQcbaQQdS -EObkKvbdUsltFkvK -EPDKjvbdKyQirzuG -EPCjjvbdmJDtQuSB -EObkKvbdXrkaMsoY -EOcKjvbdrEFIpOVa -EPDKjvbdVqmwadkc -EOcKjvbdqYoIGqDx -EObkKvbdtbbtwWOo -EPCkKvbdSKxfUfkT -EPCkKvbdmJDsqUrB -DncKjvbdhaoCeWpq -EObjjvbdFxuVAdYC -EPCkKvbdqFcdsvBI -EPDLKvbdOTUWGeVQ -EPCkKvbdlhdUQtrB -DoDKjvbdCJLCLJGK -EPDKjvbdMgCpMotk -DnbjjvbdrbFlkgLZ -DoDKjvbdqBJFAWhE -EPCjjvbdpyPHfqDx -EOcKjvbdTlVoBVni -EPCjjvbdrRtkNkBN -EPCkKvbdWWhwuceH -EPDKjvbdcImKKewY -EOcKjvbdYSlBNToY -EObkKvbdZRMeIldq -EPDLKvbdMoxRWNgT -EObjjvbdMIbMQxAS -EPCjjvbdQdDBQQdS -EObkKvbddZyPwxqC -EOcLKvbdACrXiyiQ -EPDLKvbdcSbkUEJa -DncLKvbdTkunaWPJ -DnbjjvbdvBEYrndh -EObjjvbdmIctQuRa -DncKjvbdiUydvqtb -DoCjjvbdhkdcnUby -EOcKjvbdePFTLTsr -EOcLKvbdiHJbxujV -EObjjvbdZsiJZESn -EOcKjvbdpxoHfqEY -EPDKjvbdFyUuBDwb -DoDLKvbdBiLBkJGK -EPCkKvbdliDtQuRa -DoDKjvbdhbOcEwQq -DncLKvbdRosgJfDw -EObjjvbdrzMQSaIO -EObkKvbdUsmTfMVj -EOcKjvbdWXIxWEFH -EPCjjvbdcTCjtDjB -EObkKvbdbBVeGQPw -EOcLKvbdaSGDHtFk -DoDLKvbdqFdFUVaI -EPCkKvbdxxIjBozL -DncLKvbdNddUIiLE -EObjjvbduMYWaUAw -EPCkKvbdWWiXvDdg -EObjjvbdJXsbILqQ -DnbkKvbdDnbjjwCd -DnbkKvbdxUldqZMO -DoCjjvbdKyRKSztf -DncLKvbdLFehBaQu -EPDLKvbdjvXNdBww -EOcLKvbduaEZTPFI -DoCkKvbdfMevfmKL -EPCkKvbdpxoIGqEY -EPCkKvbdKWUecdgJ -EObkKvbdmbJwYOmu -EPCkKvbdIsZArmYM -DnbjjvbdxLXDgzyf -DncLKvbdEvYopMjF -DncLKvbdmJETqVRa -DnbkKvbdrouoKDWG -EPDLKvbdbVCGwkTh -DoDKjvbdZirhPgCG -EPDKjvbdTvMQKUAq -DnbkKvbdLrWlzVQz -EOcLKvbdrEEiPmua -DnbjjvbdczZQXyRC -DncKjvbdnUtzKjSG -EPCjjvbdkNCLzFHP -DncKjvbdZyEKNbkr -EObkKvbdJuuFdEgJ -DncLKvbduCbuXWPP -EPCjjvbdyNrhXriD -DnbkKvbdIxTaglQp -EPCjjvbdJvVFceHJ -EPCkKvbdVBBprqSZ -EOcKjvbdkxrqsYgU -EPCjjvbdGLFSbhMu -EObjjvbdnPzZWLYb -EObkKvbdjblLRGuH -DoDLKvbduaDyTPFI -EPCjjvbdiifIJmXr -EObkKvbdYkqctOMN -EPCkKvbdelfXHMjL -EPDLKvbdeFOrCWbj -EObjjvbdeUAUATNW -EPCjjvbdWRmxBeMD -DoCjjvbdZxcinDMS -EOcLKvbdWRmwbElD -DoDLKvbdpssfrSLU -DncLKvbdQccApRES -DoDKjvbdGdKujBij -DoDKjvbdZLqdTmlN -DoCjjvbdbiNKLGXY -DoCjjvbdVZITzKoO -DoCkKvbdsPuoKCvG -EPDKjvbdNGbomQVL -DnbkKvbdkIHMGFnL -EPDKjvbdvPTzpjoU -EOcKjvbdczZPxZQb -DncKjvbdliEURUrB -DnbkKvbdGZUtaDxC -EPCjjvbdrMyjZLhJ -EPCjjvbdTulPjTaR -DoCkKvbdZeYGzhJC -DncLKvbdwygefYEr -DnbjjvbdehLVrOQg -DnbjjvbdZxcjNblS -DoCjjvbdSLYetgKs -EPCkKvbdVAbQrpqy -EPCjjvbdtTSTZZdc -DnbkKvbdSCEFMIyL -DoDKjvbdrDeJPmvB -EOcLKvbduDDVXVno -DoDLKvbdZdxGzhIb -EObkKvbdhgJbxujV -DncLKvbdlYsRsZHU -DoDLKvbdhzUelQmf -EObkKvbdWWhwvDeH -EPCjjvbdjgfkfFmk -EObkKvbdzaAPHGal -DoDLKvbdEPDLLXDE -DoCjjvbdTukpKTaR -EOcKjvbdhaoCeWpq -EPDKjvbdwjvdHzzG -EPDLKvbdJTZBTNYM -DoDLKvbdRECaPqDr -DncKjvbdjhGkfGNk -EObkKvbdjhGkfFmk -DncLKvbdqlyixkhJ -EObkKvbdjEkHUoAO -EPCkKvbdcasMrAUN -EObjjvbdhzUfLqOG -DoCkKvbdEvYopNKF -EPCjjvbdjuwODaxX -DncLKvbddiirWUzn -EObkKvbdOStVfduQ -DnbjjvbdypnmIjXA -DnbjjvbdRWnEClHc -EOcLKvbdbhljLFvx -EPDLKvbdJXsaglRQ -EObkKvbdhzUfLqOG -EObkKvbdnPyxujyC -DoDKjvbdBiKajiFj -DoDKjvbdZjTHpHBf -EPCjjvbdaSFcITek -EObjjvbdYzcFqiuy -DncLKvbdqdFIpNvB -DoDKjvbdLYqJrzuG -DoDLKvbdVwJXucdg -DnbjjvbdhbObdvqR -DoCkKvbdCEQBWJlf -DoDLKvbdSCDdlJYk -EPDLKvbdZyEJnCkr -DoDKjvbdvAcyTOeI -DoDKjvbdkIHLfFmk -EPCjjvbduaEYroFI -DnbkKvbdjblKpgUg -EOcKjvbdwygefYFS -EOcKjvbdliDsqUqa -DnbjjvbdjcMLRGtg -EObkKvbdRbEElJYk -EPCkKvbdqrUkNjaN -EOcLKvbdRotGifDw -DnbkKvbdUsmUGLuj -DoCjjvbdeKJqvUzn -EPDKjvbdQwNdClHc -EOcLKvbdcScLTcjB -DoCjjvbdvBDxroEh -DoDLKvbdIxUBglQp -EPDLKvbdfVzxQJzs -DncLKvbdqlzKYlIJ -DoDKjvbdaNLCSuMg -EOcKjvbdwjwDgzyf -EPDKjvbdIxTaglRQ -DoDKjvbdVTltGLuj -DoCkKvbdiMFENuDZ -EOcLKvbdZyEJnDMS -DnbkKvbdiBoCeXRR -EPCkKvbdbiMijewY -EOcKjvbdmttzLJqf -DncKjvbdYTLaMtOx -EPCjjvbdfIKuqmqH -DoCjjvbdBdQBVjNG -EObkKvbdieLGuPAO -EPDLKvbdsZlQSaIO -DnbkKvbdEztQeMDJ -EPCjjvbdIjEAJpHE -EOcLKvbdfILWRmpg -EPCjjvbdZyDinDLr -DncKjvbdLGGIBaRV -DncLKvbdmozZWLZC -DoCkKvbdlZSrSxft -EOcLKvbdFjdrcINV -EOcKjvbdQvnDblHc -DoCkKvbdqUUHRqkU -EPDKjvbdnBjWwnmu -DoCjjvbdZxcjNbkr -DncKjvbdZisIQHCG -DoCkKvbdJcJcRJbx -EPDLKvbdlhdUQtqa -DnbkKvbdrzLpSaHn -DoDKjvbdziuPpDrt -EPDKjvbdEYXlTtUM -EObkKvbdqdFIpOVa -DncKjvbdpxnhHQdY -DnbkKvbdLhakqYAS -EPCkKvbdrRtkNkBN -EObkKvbdqrVKmjaN -EOcKjvbdxUldqZMO -EOcKjvbdrbFllHKy -DoCkKvbdySmhlrBg -EPCkKvbdkxrqsYgU -EPCkKvbdZLqcsnMN -DncKjvbdFpATXHFy -EPDLKvbdZRMdiMeR -EPDLKvbdRNXbYmtz -DoCkKvbdpyPIGqEY -DoDLKvbdKaKfmCYR -EPDLKvbdrylPsBIO -EObjjvbdUQqOuVHm -EPCkKvbdezvZFItX -EOcKjvbdZirhQHCG -DoDKjvbdePFSjssr -EOcKjvbdCTAcTfXS -EOcKjvbdkxsRsYft -EPDLKvbdQwODcMHc -DoDKjvbdwuNFRZMO -EPCjjvbdEuyPomKF -DoCkKvbdpxnhGpcx -DncKjvbdiVZeWrUb -EOcKjvbdrEEiPmvB -EOcLKvbdZxdJnDLr -EObjjvbdUtNUFkvK -DoDLKvbdZQmFIldq -EObjjvbdnCJvwnmu -EPCkKvbdRWmccLgc -DnbkKvbdnUtykJqf -DnbkKvbdVBBqSpqy -EPCkKvbdZoOIddyj -DnbkKvbdZQldiNFR -DncLKvbdmRyVZsDi -DoCjjvbdcasMrATm -EOcLKvbdtbbtvuno -DoDLKvbdZtJJYdSn -DnbkKvbdGKeTDHlu -DoCkKvbdZjTHpGbG -EOcKjvbdHDjvKCKK -EObjjvbdddnqbXCj -EObkKvbdlZTSTYgU -EPCjjvbdqqtjmkBN -EObjjvbdtAGqIAAr -EObkKvbdrRtjmjaN -DnbjjvbdMRwMytpz -EPCkKvbdsQWPJbuf -DoDKjvbdqFceUWBI -DoCkKvbdnBjWxPNu -DoDLKvbdiUzFXRuC -EObkKvbdQccBPqES -DnbjjvbdOFDtIiLE -EPDKjvbdYlRcsnMN -DncKjvbdFfJrNhsq -DoCkKvbdsCFmMHKy -EPDLKvbdYkrETnMN -DoCjjvbdYNqAXuWU -EPDKjvbdrovPKDWG -DoDLKvbdbKlGOmcA -DoCkKvbdOStWHFVQ -EObjjvbdhbObeXQq -EPCjjvbdeEnrBwDK -DoDLKvbdrbFmMGkZ -DncKjvbdxZhGGYFS -EPDKjvbdbrbkTdKB -EPDKjvbdraellGkZ -EPCkKvbdssSTZZeD -EPDKjvbdDjHiuxKA -DoCjjvbdzoPqFDMY -EPCjjvbdlAlnmALA -DoDKjvbdmtuZjjRf -DoDKjvbdFpASvfey -DoCkKvbdjlakyeGo -DoDKjvbdxnSgxTIc -EPCjjvbdxZhFfXeS -EPCkKvbdqcdiPnVa -EOcLKvbdmfeYMnHZ -DoDLKvbduCbuWvOo -DoDKjvbdmIcsqUqa -EPDKjvbdzoQQdblY -DoDLKvbdRNXayOUz -DnbjjvbdrJAKFNOe -DnbjjvbdZLrEUOMN -EOcKjvbdwygeexEr -EPCkKvbdbVBfwjtI -EObkKvbdKDKDRJbx -DoCkKvbdGckWKBij -EOcKjvbdzjVQPdSt -EPDLKvbdqlzKYkhJ -DnbjjvbdajkennDA -DoDLKvbdRzJgsCvA -EObjjvbdehKuqmqH -DncKjvbdajlFnnDA -DnbjjvbdjEkHUoAO -DoCjjvbdFVyPomKF -DoCkKvbdJcJbpjCx -DnbkKvbdRaceLiZL -EPDKjvbdeEnrBwDK -DoDLKvbdxKvdHzyf -DoCkKvbdSPtHKFcw -EObkKvbdjhHMGGOL -EOcLKvbdGGJqnItR -DoCjjvbdnGdxNNgZ -DoDKjvbdbKkfOmcA -DnbjjvbdelewHNKL -EPCkKvbdcSbjsdJa -EPCkKvbdTAEhgbOd -DncLKvbdUslselVj -DnbjjvbdVrOYBeMD -EObjjvbdEzspeMDJ -EPCjjvbdcTDLTcjB -EPDLKvbdsPvPJbuf -EOcKjvbdqGEFUWBI -EPDKjvbdVgxWYGxz -EOcLKvbdSPtGjGDw -EObkKvbdGckVibJj -DoDLKvbdeEoSCWcK -EPCkKvbdQvmdClID -DncLKvbdhytelROG -EPCkKvbdeXzTtSFz -EPCkKvbdrXQMDIxq -EObkKvbdtlXvaUAw -DnbkKvbdiMFDmtcZ -EPDLKvbdJqZeOfNe -EPDLKvbdmIdUQtrB -DoDKjvbdVTltGLvK -DncLKvbdZRNEhleR -EPDKjvbdjlakydfo -DnbjjvbdFpASvfey -EPCkKvbdkySrTYft -EOcLKvbdVUMtGMVj -EPDLKvbdmRyUysDi -EPCkKvbdGKeScHlu -EObjjvbdczZPwyRC -EPDLKvbdVYhUZkOn -DncLKvbdJbibqKDY -EPDLKvbdfekzNfgA -EObkKvbdKQydoGOF -EObkKvbdVgwvXfxz -DncLKvbdQdDApQcr -DncLKvbdGFjRnJUR -DncKjvbdjgflFemk -DoDKjvbdlhctRVSB -DncLKvbdZLqctOLm -DncKjvbdfSAvzlCo -EPDKjvbdZRMeIleR -EObjjvbdZRMeJMdq -EOcKjvbdMuTSKmAX -DncKjvbdqYngfpdY -DnbkKvbdxrmiMqbH -EObjjvbdbPgGckzd -DoCkKvbdpstGqqkU -DncLKvbdmJDsqVSB -EPDLKvbdtunYKQsA -EObkKvbdDnbkKwCd -EPDLKvbdEXwkstUM -DoDKjvbdrRtkNkBN -DncLKvbdIwtCIMQp -EPDLKvbdZQmEhmEq -DnbkKvbdxmrhYTIc -DoCjjvbdCSaDUGWr -EPCkKvbdatagXkUI -DncLKvbdEPDKkWcE -DncKjvbdZjShPgBf -EPDKjvbdHDkVjCJj -DoCjjvbdsrrTYzEc -EObjjvbdhlEcnUby -DnbjjvbdemFvfmKL -EObkKvbdlhcsqUqa -DoCkKvbdZtIiYdTO -EObkKvbdEXwlTssl -DoDKjvbdhaoCdvqR -EObkKvbdliEURUrB -DoDLKvbdEYXkstTl -DncKjvbdFkEsDINV -DoDKjvbdFkErcHmV -DoDLKvbdKCjCpjDY -EPCjjvbdjJegjMxS -DnbkKvbdnCKWwnmu -DnbjjvbdqwQLbiYq -DoDLKvbdSZigsDWA -EObjjvbduVnYKRTA -EOcKjvbdTlWOaVoJ -DnbjjvbdSCDeMJYk -DnbkKvbdQvmdClID -EPCkKvbdziuQPdTU -EOcLKvbdhficZWJu -EOcKjvbdZLqdTmkm -DoDKjvbdcImKKevx -EOcLKvbdGFirOJUR -EObkKvbdREDApRES -DoDKjvbdHELWKBij -EOcKjvbdrSVLNkBN -EOcKjvbdBdQBWJlf -DoCjjvbdFpATXHGZ -DnbjjvbdqZOhGpdY -EPDLKvbdCSaDUGWr -DoDLKvbdrpWPJcWG -DnbjjvbdZsiJYdTO -EPDKjvbdJvVGEFGi -EPCkKvbdmIctRVSB -DncKjvbdBiLCKhfK -DoCkKvbdZisIQGbG -DoCjjvbduWNwjQsA -EOcLKvbdiHKCyVjV -EPCjjvbdlZSrTZGt -EObjjvbdNPxRWNgT -DncKjvbdeAURNXif -DncLKvbdOStWGeVQ -DoCjjvbdJvUeceGi -DoDKjvbdXsMBMsnx -EPDKjvbdGLFSbhMu -EPDLKvbdEvZPolie -EOcKjvbdrRtjnLBN -EPDKjvbdyOTHxTJD -EPDKjvbdmajWwnmu -EPCjjvbdrNZjZLhJ -DncKjvbdajlFoODA -DoDKjvbdrEFIpOVa -DnbkKvbdpedEtWBI -DncKjvbdqwQMChyR -DnbjjvbdnCKWwnnV -DoCjjvbdNUsRkNAX -EOcLKvbdULvPBWPJ -DncLKvbdjlalZdfo -EPDKjvbdjJfHjNYS -DoDKjvbdPxmAHTSK -DnbkKvbdmIctQtqa -EObjjvbdnHFXmNfy -EPCkKvbdqlzJyLhJ -DnbjjvbdVqnYCElD -EPDKjvbdqTsgRqkU -EPCjjvbdADSYKZhp -EPDLKvbdEvZPoljF -DoCkKvbdLFfICBRV -EOcLKvbdZRNFJNFR -EPDKjvbdpedFUWBI -EPDKjvbdVwJYVceH -DoCjjvbdGYtuBDwb -DoCjjvbdVYgtZjoO -DncKjvbdQccApQcr -EOcLKvbdWWiYWDdg -DncKjvbdyTOJNSBg -DnbjjvbdbAueFpQX -DnbkKvbdiUydwSUb -DoDKjvbdKVtfDeHJ -DoDKjvbdEObjkXCd -EOcKjvbdqlyjYlHi -EOcKjvbdfRaWzlCo -EObjjvbdRWmcblID -DoDLKvbdCDpAvKMf -DncLKvbdmuVZjjSG -EPDLKvbdkaMnmALA -EPCkKvbdcSbkTdKB -DnbjjvbdZtJIyESn -EPCkKvbdQvmccMHc -DncLKvbdfHjvRmpg -DoCjjvbdVvhwvEEg -EPCjjvbdXrkaNTnx -DnbkKvbdGFirNiUR -EObkKvbdZLrDsnLm -EObkKvbdySnJNRbH -DncKjvbdaMkBsUmH -EPCkKvbdqGEFUWBI -EObjjvbdmajXYOnV -DnbkKvbdHELWKBjK -EPDKjvbdWSOYCFLc -DncLKvbdehKurNqH -EPDLKvbdSZjIScWA -DncKjvbdZQldiNEq -DncLKvbdVwIwvEEg -DnbjjvbdauCGxKsh -DnbkKvbdKefHbApu -DoCkKvbdssSTYyeD -DnbjjvbdSPsgJfEX -DoCkKvbdeKKRvUzn -DoDLKvbdiMEcnVCy -DoDLKvbdoAKzsgcn -DoDKjvbdDoDKjvbd -DncKjvbdFWYopMie -EPDLKvbdRNXaxmtz -EOcLKvbdKefHaaRV -EPDKjvbderAvzkbo -EObjjvbdzoQREcMY -DnbkKvbdijFgjMwr -EObjjvbdhbObdvqR -EPCkKvbdySmiMqbH -EObkKvbdyzeOSIIh -DnbkKvbdjcLkRHUg -DoDLKvbdJpydoGNe -DoDKjvbdwXMBWBWV -EObkKvbdsBfMkgKy -DnbkKvbdYkqdTnMN -EPCjjvbdEPDLLWbd -EObkKvbdDwxLtUUM -DncKjvbdNrtVgFUp -EPDKjvbdZQleJNFR -EPDKjvbdJKEAKPfd -DnbjjvbdhgKCxvJu -EObkKvbdLAkHMbXq -EPDKjvbdhancEvqR -DoCjjvbdNsUWHEuQ -DnbkKvbdZjTHofaf -EPCjjvbdrDdiQOVa -EPDKjvbdkMbLzEgP -EPCkKvbdZoOJFEyj -EPCkKvbdADRxJyhp -EObjjvbdaSGCgsfL -DnbjjvbdJbjDQibx -EPCjjvbdpfEEtWBI -EOcLKvbdZxdJmblS -EPCkKvbdRpTgKGEX -DoCjjvbdzRPNIiwA -EObkKvbdzoPpeClY -EObjjvbdeFOrBwDK -DoCkKvbdOTTvHEtp -DnbjjvbdGQATWgFy -EPCjjvbdEvZQQNJe -EObkKvbdjvWnECYX -DoDLKvbdyTOIlqag -DnbkKvbdEASJNZvw -EOcKjvbdsZkosBHn -DoDLKvbdtSqsYyeD -DncKjvbdqlyixkgi -EPCjjvbdTppnuVHm -DncKjvbdatbHYKsh -DoCkKvbduVmwjQsA -EPCkKvbdvAcxsOeI -EObkKvbdRjyFuHLT -EObjjvbdTukoitAq -EOcLKvbdkySqrxft -EObjjvbdQccBPpdS -DoDKjvbdffLzNfgA -DoDKjvbdiCOcEvqR -DncKjvbdIBkzEzAD -EObjjvbdVZHsyjoO -EOcLKvbdZoNheEzK -DnbkKvbdsZkpTAhO -DnbjjvbdqFdEtVaI -DnbkKvbdIGfzZXwg -EPDLKvbdlrZVZsEJ -EObjjvbdBcpAvJmG -DnbjjvbdtSqsYzFD -EPDLKvbdJJdAJogE -DncKjvbdxVMdpyMO -EPCjjvbdQwOEDLhD -DoCjjvbdmgFXmNgZ -DoDLKvbdjEkGuPAO -EPCjjvbdACrXjZiQ -DoCjjvbdZMRdTmlN -DncLKvbdiLeDnVDZ -EObjjvbdVAaprpqy -DoDLKvbdRjyFuGjs -DnbjjvbdVAbQrprZ -EObkKvbdSZjHrcWA -EPDKjvbdVrOYBeMD -EPDLKvbdDwxMUTsl -EPDKjvbdRadElIxk -DnbjjvbdmozZWKyC -DoDLKvbdptTgRrKt -EPCjjvbdatagXkUI -DncLKvbdZLqcsnMN -DoDLKvbdfNFwGmJk -EObkKvbdqTsfrSKt -DncLKvbdZjTHpGbG -DoCjjvbduWNwipsA -EPDKjvbdauCGwkTh -DncLKvbdKVuGEFGi -EObjjvbdZirhPfaf -DoDKjvbdxKvcgzyf -DnbkKvbdxsNhlrCH -DoCkKvbdBsBDUGWr -DncKjvbdfMfXHNJk -DnbjjvbdOSsugFVQ -DncKjvbdZisIPfaf -DnbjjvbdZHXEAOsJ -DnbjjvbdLZRJrzuG -EObkKvbdwuNFQxlO -DncKjvbddxZtURez -EPCkKvbdxrmiNSCH -DoDKjvbdiUydwSVC -EObjjvbdiifIJlwr -DncLKvbdssSSxyeD -EPDKjvbdOEcsiJLE -EOcKjvbdySnIlrBg -EPCkKvbddZyQYZRC -DnbjjvbdWXJXudEg -DoDLKvbdKaLHNCXq -DoDKjvbdGGKRmiTq -DnbkKvbdlrYtyrdJ -EPDKjvbdhtzEvrVC -EObkKvbddZyQYYqC -DoDLKvbdhaoCdwRR -EPCkKvbdxLWdHzyf -DoDKjvbdySmhmRbH -DnbkKvbdZLqcsmlN -EObjjvbdZtJIxdTO -DoDKjvbdDwwksssl -EPDKjvbdFyVVAdXb -DoCkKvbdUtNUFkvK -EPDLKvbdxmsIXsIc -EPDLKvbdUsmUFkuj -EOcKjvbdGKdsDHlu -EOcKjvbdACqwjZiQ -EPDKjvbdFpASwHGZ -DoCkKvbdGZUtaDxC -DncKjvbdmSZVZsEJ -DoCjjvbdJbicRKCx -DncLKvbdTvMQJsaR -DoCjjvbdNeDtJJKd -EPCjjvbdnPzYvKxb -DoDLKvbdyTNhlrCH -EPDKjvbdRosgJecw -EObkKvbdTAEiICOd -EOcKjvbdapHHDkzd -DoCkKvbdjlakzFGo -DncLKvbdrpWPJbuf -DnbjjvbdNQXqVnHT -EOcLKvbdkNCLzFHP -EObjjvbdTukpKTaR -EOcLKvbdEuxpPlie -EPCkKvbdJuuFdFHJ -EPDKjvbdGGJqmiTq -DnbjjvbdOAIrtJrA -DnbjjvbdelfWgNKL -EObkKvbdhbOcEwRR -DncLKvbdqiAKFNPF -DncKjvbdVqnYCFMD -DoDLKvbdWHxWXgYz -EOcLKvbdNVTSKmAX -EPDKjvbduaDySndh -DnbkKvbdiifIJlxS -EPDKjvbdeATpmYJf -DncLKvbduCcVWuoP -EPCjjvbdhficYvJu -DncKjvbdehLVqnQg -EPCkKvbdrDeJPmua -DoCjjvbdTfzmlWue -DncKjvbdZoNiFEyj -DoDLKvbdxmsHxSiD -EObkKvbdVwJYVdFH -EPCjjvbduMXwBUBX -DnbkKvbdTqROuVIN -EPCjjvbdGKeTCglu -EPDLKvbdcyyPwxpb -EPDLKvbdQmXayOUz -EPDLKvbdZyDinCkr -EPDLKvbdZoNheEyj -DncLKvbdmfdxMnGy -DnbkKvbdkClLRGuH -DncLKvbdJXsbIMQp -DnbjjvbdjJegilxS -DoCkKvbdnPyxukZC -EPDKjvbdZMRcsnLm -DoCkKvbdHffzYxYH -DnbkKvbdbsDLTcjB -DoDLKvbdSwjlNzjx -DncKjvbdkaMnmALA -DncLKvbdqmZjZLhJ -DoDKjvbdqrUkNkBN -DncLKvbdmfeXmOGy -EPCjjvbdZMRdTmlN -DnbkKvbdypnlhjXA -EPDLKvbdyOTHxTJD -EObjjvbdMRwMzVQz -EPCjjvbdSCDeMIxk -EObjjvbdOXnuzdOU -EPDKjvbdOStWHFVQ -DoDLKvbdrzLpTAgn -DnbkKvbdULuoAvPJ -EPDKjvbdZxdKODMS -EOcKjvbdbAvEfPpX -DncKjvbdyOSgwriD -EPDLKvbdrJAJdmPF -EPDLKvbdauCGxKtI -DncLKvbdqrVLOLAm -EPDKjvbdkHgLfFmk -DncKjvbdUaCRSqSZ -DnbkKvbdbQGgELzd -EOcKjvbdcJMijfXY -EPCkKvbdeOeTLUTr -EOcKjvbdQmYByNtz -EPDLKvbdFxuVBDwb -EOcKjvbdGGJrNiUR -DoDKjvbddndsLTtS -EOcLKvbddZyPxYqC -EPCkKvbdSKxfVHLT -EOcKjvbdSCDdkiYk -DnbjjvbdtvNwjQsA -EOcKjvbdJXsbILqQ -EObjjvbdjcLkRHVH -EObjjvbdkCkkQgUg -DoCjjvbdTqQnttgm -EPCkKvbdEuyPoljF -DoCkKvbdTqQnuUgm -DoDLKvbdLrWlzVQz -EPCjjvbdRjyGVGkT -DoDLKvbdHEKvKBjK -DoCjjvbdnCJvxOnV -EObkKvbdptUGrRkU -EPDKjvbdQwNcblID -DoCjjvbdIidAKPgE -DoCjjvbdTYLMNzkY -DnbjjvbdEztRFMCi -EObkKvbdBhkCLJGK -EPDLKvbdZisHpGbG -EPDLKvbddePRbXDK -EObkKvbdUQpntuIN -EObjjvbdEPCjjvcE -DncKjvbdbiNJjewY -EPDLKvbdVrOYCElD -EPCkKvbdSBdElIyL -DoDLKvbdzjVQQETU -DoCjjvbdCDpAvKNG -EObkKvbdNHComPuL -EOcKjvbdGdKvJaij -DnbkKvbdqmZjYkgi -DncKjvbdQvnEClID -DncLKvbdWWiXudFH -DoDLKvbdCEQBWJlf -DncKjvbdMpXqWOGs -EPDKjvbdVBCRSqRy -EPDLKvbdqUTgSRjt -EOcLKvbdJXtCHkqQ -EObkKvbdBiLBkJFj -EOcLKvbdVvhwvEEg -EOcKjvbdCTBCsewS -EOcKjvbdyNsHwriD -DoDKjvbdwzHfFxEr -DnbjjvbdypoMiJwA -DoCjjvbdJbicQjCx -EOcLKvbdVUMsekuj -EOcKjvbdCEQBWJlf -EObjjvbdIjEAKQGd -DoCjjvbdDjIJvXjA -DoDLKvbdFyUuAdYC -DncLKvbdRotGiedX -DoCjjvbdBhkBjhej -EOcKjvbdBhkCKhfK -EPCkKvbdLFfHbBRV -DoCkKvbdNUrrLNAX -EOcKjvbdZoOIeEzK -EPCjjvbdkMbMZeHP -DoCjjvbdkVwNdBxX -EPCkKvbdNddThiKd -DnbjjvbdjcLkQftg -DnbkKvbdFkErcHmV -DnbjjvbdqGEEtWAh -DncKjvbdmSYuZsEJ -DoCjjvbdUsmTfMWK -DoCkKvbdVUMtFkvK -EOcKjvbdKfGICBRV -DnbkKvbdMSWlzUpz -EOcLKvbdVBBprpqy -EPCjjvbdnHEwmNgZ -DoCkKvbdeEoRawDK -DnbkKvbdpssgSSLU -DncKjvbdOSsugFUp -DnbkKvbdwzHfGYFS -DoCjjvbdTAEiHbPE -EObkKvbdKaLGmCXq -DnbkKvbdCWzciFQW -DncLKvbdnVVZjiqf -EPCjjvbdOStWHEtp -DoDKjvbdkIGkfFmk -DoDKjvbdZjTIPfbG -EOcKjvbdXsMAlsnx -DnbjjvbdILazmwRL -EOcKjvbdrDdiPmvB -EPDKjvbdiUzEwRuC -EOcKjvbdqAheAXHd -EPCjjvbdRyigsCvA -DoCjjvbdpyOggQcx -EPCkKvbdZyDjNblS -DncLKvbdFejSNiTq -EPDKjvbdzRPNIjXA -DncLKvbdaMkBsVMg -EObkKvbdLYqJrzuG -DncKjvbdsBfNMHLZ -EPDKjvbdjgflFfOL -DoDKjvbdCTAcUGWr -DnbjjvbdSLZGVGkT -DoCkKvbdZQmEhldq -EPDKjvbdUsmTfMWK -DoCjjvbdKefICBRV -EPCjjvbdZMSDsnMN -EObkKvbdwzIGGXdr -EObjjvbdrRtjnLAm -EPDKjvbdXrlAmTnx -EPCjjvbdZtJJZETO -DnbjjvbdieLGtoAO -DnbkKvbdnCJvxPOV -EPDKjvbdjKFgjNYS -DoCkKvbdlhcspuRa -EPDKjvbdbAvEfQPw -EOcLKvbdiGjDYuiu -DncKjvbdnQZxvLZC -DoDLKvbdaogHDkzd -DnbjjvbdMfcQMouL -DncKjvbdKaKgMbYR -DncKjvbdrbGNMHKy -DoCkKvbddoFSjtUS -EPDLKvbdNddTiIjd -EPDKjvbdhgKDZViu -EPDLKvbdkMbLzEfo -DoDKjvbdjmCMZdfo -DoDKjvbdSCDeLhyL -DoCkKvbdQwODcMID -DnbkKvbdgGLymgHA -EPDKjvbdWIYVwfxz -DnbkKvbdZLqdUNkm -DoCkKvbdYlSETmkm -DnbkKvbdLqvlyuQz -DnbkKvbdZRMdiMdq -EOcLKvbddePSCXCj -EPDLKvbdRacdkiYk -DnbjjvbdZisIQGbG -EObjjvbdrpVnibvG -DncLKvbdIxUCHlRQ -EPCkKvbdhuZeXRtb -DnbjjvbdQwODblID -DoDKjvbdezuyEhsw -DncKjvbdiLddNtcZ -EPCkKvbdiLeENtby -DnbjjvbdxKvcgzzG -EPDLKvbdRXNdClID -DncLKvbdEKHjVwjA -EOcLKvbdzoPqFCkx -DoDLKvbdliEURUqa -DoCjjvbdyOTIYTJD -DncLKvbdIHGyyXwg -EPCjjvbdShyjRABM -DoCkKvbdnPyyWLYb -EObjjvbdsPvPJcVf -EPDKjvbdTXjlNzjx -DoDKjvbddneTLUUS -EOcKjvbdmuUyjiqf -DncKjvbdZoOIddzK -DoCjjvbdpyOhGqEY -DoCkKvbdwjwDgzyf -DnbkKvbdxZgeexEr -EOcLKvbdHDjvKCKK -DoCkKvbdpxnhHQdY -DoDLKvbdLrWlzUpz -EPDKjvbdatbHXkTh -DoDLKvbdZyDinDLr -EPCjjvbdGGJqnJTq -DoDKjvbddneTLTsr -DncLKvbdyzdmqhJI -EObkKvbdRjxfVGkT -EPDKjvbdOAJTTirA -EPCjjvbdZoNiFEzK -DnbjjvbdOhAXyAYa -DnbjjvbdACqwizIp -DoDLKvbdcImJjevx -EPDLKvbdxmrhYTIc -DoDLKvbdjcLkRGuH -EPCkKvbdxVNEpxlO -EPCkKvbdKCibqJbx -DoCkKvbdjJfIKMxS -DoDLKvbdVYhUZjoO -EPDLKvbdrJAKEmPF -EOcLKvbdRDbaQRDr -DoCkKvbduWOXiqTA -DoCjjvbdZyDjNcLr -EObjjvbdbBWEeoow -EPDLKvbdUQpnttgm -EOcKjvbdlBNOmALA -DnbjjvbdSPsfiecw -DnbjjvbdwzIGGYFS -EOcKjvbdLGFgaaRV -EOcKjvbdrXQLcJYq -DnbkKvbdmbKXYPOV -DoCkKvbdZisHogCG -EPCkKvbdFVyPpMjF -EOcKjvbdYkrDsmkm -DoDKjvbdxUmEqYlO -EPDKjvbdKNAEZgUa -DoDLKvbdqZPIGpcx -DoCjjvbdMgComPtk -EObjjvbdUyHszKoO -DoCkKvbdeEnqavcK -EPDKjvbdqYoIGqEY -DoDLKvbdCDoaWJmG -EPDLKvbdlZSrTZHU -EPCkKvbdZxcinDMS -DoCkKvbdgFkzNfgA -EOcKjvbdYNqAXtvU -EObjjvbdwygefYEr -EPCkKvbdbBVdfQQX -DnbkKvbdqrVLOLAm -EOcKjvbdFjeTDINV -DnbjjvbdnHFYMnGy -EPCjjvbdrbFllHKy -EPCjjvbdZLrDtOMN -EPDLKvbdcJNKKfWx -DoCjjvbdraemMHLZ -DoDKjvbdeJjSWUzn -EPCkKvbdZnmiEdyj -DnbjjvbdwtleQxlO -DnbkKvbdDwwlUTtM -DoDKjvbdrWpMDJZR -EOcKjvbdegkVrORH -EPCkKvbdiCOcFWqR -DnbkKvbdBsBDTevr -DoCjjvbdjcLjpfuH -DnbjjvbdZxdKODLr -DoCjjvbdqceIpOVa -DoDLKvbdVvhxVceH -EObkKvbdsrqryZdc -DnbkKvbdMSWlytpz -DoDLKvbdqTsfqrKt -EPCjjvbdjKGIKNYS -EOcLKvbdiGibxvKV -EPCjjvbdKDKCpibx -EPDKjvbdQdDBPqDr -DncKjvbdozmdLYPA -DoCkKvbdTvLojUAq -DnbkKvbdbhmKLFwY -EPDKjvbdCIjbLIej -DncKjvbdkHfkeenL -DoDKjvbdtAGqIABS -EPCjjvbdRosfjFdX -EOcKjvbdraemLgLZ -DnbkKvbdxmrgxTIc -DoCkKvbdOAJStJrA -EPCjjvbdqYngfpdY -EPDLKvbdBvzdJEov -DoDKjvbdrDeIpOWB -EObjjvbdqUTfrSKt -EOcKjvbdxnShXsIc -DoDKjvbdEzsqFLcJ -EObjjvbdDxYMUUUM -EOcKjvbdjKFhKNYS -EOcKjvbdjgflGFmk -DoCkKvbdGGKRnItR -EPCkKvbdREDApRDr -EOcLKvbdNQYRWOHT -EPCjjvbdxmrgwriD -DncLKvbdbsCjsdJa -EOcKjvbdypoNIiwA -DncKjvbdZoOJFEyj -DoCjjvbdrbGMkgKy -EPDKjvbdyTNiNSBg -DoCjjvbdczZPwyQb -DoDKjvbdWfZZtAOs -EPDKjvbdznoqFClY -DncKjvbdTlVoBVoJ -EPCkKvbdIxUBhMRQ -DoCkKvbdZQmEiNEq -DoDKjvbdnVUykKRf -DnbjjvbdUtMtFlWK -EObjjvbdOTUVfeUp -DoCjjvbdZMSEUOMN -DoCjjvbdwjwDgzzG -DoDKjvbdYqNEiNFR -DoDLKvbdqiAKEmOe -EPDLKvbdfNGXHNJk -DnbjjvbdCEQBVjMf -EObkKvbdqUUGrRjt -DnbkKvbdjmCLyeHP -DnbjjvbdcJMikFwY -EPCjjvbdjuwNdBxX -DoCkKvbdeqaWzkbo -DncKjvbdTkvOaVoJ -DoDKjvbdZoOIeEzK -DoDLKvbdKDKDRKDY -DncLKvbdqwQMDJYq -EObkKvbdKeegbBRV -EPDKjvbdegjuqnRH -DoDKjvbdxwhjBpZk -EObjjvbdziuQPdSt -EPCjjvbdZyEKOCkr -EPCjjvbdRWmdCkhD -EOcLKvbdQcbaQRES -DncLKvbdIrxaTNYM -DnbjjvbdGFiqmiTq -DoCjjvbdZeXfzghb -DoCjjvbdSLZFuGkT -EPDKjvbdIryBSmYM -EOcLKvbdRyjHsCvA -EPDKjvbdzoPqFCkx -EPDLKvbdFeirOIsq -EObkKvbdLiBkpxAS -DoCjjvbdmuUyjirG -EOcKjvbdpfDeTuaI -DncLKvbdtSqsYyeD -EOcLKvbdAMhYrwZx -EOcKjvbdJSyAsNYM -DncLKvbddneTLTsr -EPDLKvbdANIYsWyx -EObkKvbdRXODblHc -DoCkKvbdYzcGRjWZ -DoDLKvbdkHgLfFnL -DoCkKvbdpyPIGqDx -EObkKvbdwuNEpxkn -DoDLKvbdJSxaTNYM -DoDLKvbdRNXbZOUz -DnbjjvbdNHDPlpUk -EObjjvbdKQzFPFnF -EOcKjvbdwkWdHzzG -EObkKvbdiCPCdvpq -EPCkKvbdwzHfFwdr -DoDLKvbdwuMeQxkn -DoDLKvbdmoyxujyC -DncLKvbdyYJKBoyk -EOcKjvbdhgJbxujV -EOcKjvbdvAcySndh -EPCjjvbdOYPVzcmt -DncKjvbderBWzlCo -DncLKvbdEuxoolie -DoDLKvbdUsmTelVj -DoCkKvbdcImKKfXY -EPCkKvbdKDJcRJcY -DoDLKvbdfILWSOQg -DoDLKvbdtcDVWuno -DoDKjvbdegjvSNpg -DncKjvbdjvXOEBxX -DncKjvbdvOszpjoU -EOcLKvbdkIGkfFnL -EPDKjvbdZxcinCkr -EOcKjvbdNxPVzcnU -DnbkKvbdNrsvHEtp -DnbjjvbdwygefXeS -EObkKvbdnHEwmOGy -EObkKvbdZRNFIleR -DoCjjvbdNHColotk -EPDKjvbdTkuoBVni -EObkKvbdkHgLfGNk -DoCkKvbdVvhxWEEg -EOcLKvbdtbcVWvOo -DoDKjvbdULvOaWOi -EObkKvbdNdcsiJLE -DoDLKvbdOYPVzdNt -DoCkKvbdNeDsiJLE -EOcLKvbdXGYytAOs -EOcKjvbdcIljLGWx -DoDKjvbdIMBzmwQk -EPDKjvbdbrcKscjB -DoCjjvbdqdEhpOWB -DnbjjvbdzoPqFClY -DnbjjvbdKDKCqJcY -EPDLKvbdZRNEhldq -DncLKvbddZyQXyRC -DncLKvbdRzKHrcWA -EObkKvbdTAFIgbPE -EObjjvbdwtmFRYkn -DoDLKvbdCTAbtFwS -EObjjvbdJzpFwdAN -DoCjjvbdCTAbsevr -EObjjvbdyzdmrIIh -DnbkKvbdANIZTXZx -EPCkKvbdVwJXvDeH -DncKjvbdmfdwlnHZ -DoCjjvbdZirhPfaf -EPCkKvbdiHJcYvJu -DnbjjvbdRMxCYmtz -EPDLKvbdZHWdAPSi -DnbjjvbdWSNxBdkc -DoDKjvbdNxPVzdNt -EObjjvbddePRawDK -DncKjvbdaSGCgtGL -DncKjvbddoFSjstS -DnbjjvbdOFETiJLE -DoDLKvbdeAUQmYJf -EObjjvbdZshiZESn -EPCjjvbdVwIwvEFH -DnbkKvbdKDKDQjDY -EPDLKvbdRbEFMJZL -DoDKjvbdiZuGLpnG -DoCjjvbdqGEEtWAh -DnbjjvbdnBiwYPNu -DnbjjvbdtlXwBTaX -DoCjjvbdqYoHfqEY -EPCkKvbdIsZArmXl -DoDLKvbdmfeYNNgZ -DoCkKvbdrafNLgKy -DnbkKvbdYfwEAOsJ -DoDLKvbdrEFIonWB -EPCjjvbdRXODcMID -EPCjjvbdZisIPfbG -DncKjvbdoAKzshEO -EOcLKvbdNQXqVmfs -DnbkKvbddoEsKssr -EPDKjvbdNeETiJLE -EPCkKvbdVgwvXfxz -EOcKjvbdIsZBTNXl -EObkKvbdFeirOJUR -EPCjjvbdVAbRSpqy -DnbjjvbdeXyssqez -EPDLKvbdZGwEAOri -DoCkKvbdVAaqSqRy -DoDLKvbdiVZeWrVC -EPDKjvbdGYuUaDwb -DncLKvbdLrXMyuQz -EPDKjvbdGZUtaEXb -EOcLKvbdzoQRFDLx -EPCkKvbdTAFJICOd -EPDKjvbdNPxRVmfs -DoCjjvbdauBfxKsh -DncLKvbdMIbLpxAS -DoCkKvbdmgEwmNfy -DoDLKvbdhanbdvqR -DoCkKvbdSLYfUfjs -DoCjjvbdTvMQJsaR -DnbkKvbdlhcspuRa -DnbjjvbdJSyBSlxM -EPCjjvbdSLZFuHLT -DoCkKvbdYTLaNUPY -EObjjvbdFeiqnJUR -EPDKjvbdYlRctNkm -EOcKjvbdHDjvJaij -DnbkKvbdnCJvwnnV -DoCjjvbdNHDPlouL -DncLKvbdWXIxWDdg -DoCkKvbdJSyAsMwl -EObkKvbdxmrhXriD -DnbkKvbdJzpGYEAN -EOcLKvbdddnqawDK -EOcLKvbdhyuFkpnG -DnbkKvbdtAHQhABS -DoCjjvbdjhGlFemk -DncLKvbdjJehJmXr -EPDLKvbdHffyyXwg -DoCkKvbdRbEFLiZL -DoCjjvbddePSBwCj -EPDKjvbdeOeTKtUS -DnbjjvbdrDeIomvB -DnbjjvbdVZIUZjoO -EPDKjvbdxmsIYTIc -EPCjjvbdDnbkLXDE -DnbkKvbdYlSDtNlN -EObkKvbdeFPSBvbj -EPCkKvbdkDMKpgUg -DoCkKvbdbKlGPODA -EObjjvbdGdLVjCKK -EPCkKvbdkCkjqGuH -EOcLKvbdqYngfpcx -EPDLKvbdeKJqvUzn -DoCkKvbdkIHMGGOL -DncKjvbdDoDKkXDE -EPCkKvbdsCGNMHLZ -EOcKjvbdyzeNqhJI -DnbjjvbdqwQLbhxq -EObjjvbdaaWEepPw -EObjjvbdDxXktUTl -DnbjjvbddwzTtRez -DnbjjvbdKQyeOfNe -EPDKjvbdbBVdepPw -DncLKvbdfSAvzkbo -DoDKjvbdqYoIHQcx -DoCkKvbdeEnrBwCj -DncKjvbdehLVqnRH -EPDLKvbdhfjDYuiu -EPCkKvbdvmWANEEm -EPCkKvbdZRNEiNFR -EOcLKvbdCSaCtGXS -DoDKjvbdbhljKevx -DoDKjvbdbBVdepQX -DncLKvbdqTsfrSKt -EPDKjvbdjEjgVPAO -DoCjjvbdFeiqmiTq -EObjjvbdcImJkGXY -EObjjvbdJbjCqJcY -DnbkKvbdjcLjpftg -EPDLKvbdWXJYWEEg -DoDKjvbdznpREbkx -EObjjvbdfILVqmqH -DnbkKvbdxwiKCQZk -EPDLKvbdOEdUJIjd -DnbkKvbdsCFmLgKy -DncKjvbdijFhKMxS -EPCjjvbdzitpQDrt -EPCkKvbdZQleImEq -DoDKjvbdZxdKNcLr -DncKjvbdGdLVjCKK -EOcKjvbdhzUfLpnG -DncLKvbdwzHfGYEr -EObjjvbdEObjjvcE -EOcLKvbdfHkVqmpg -DnbjjvbdXnRAXuVt -EOcLKvbdeFOrBwDK -EPCjjvbdzitoocsU -EPDKjvbdZxdJmblS -EObjjvbdFjeScHlu -DoDKjvbdjhGkfFmk -EOcLKvbduDDVXWPP -EPDLKvbdJYUCHkpp -EPCkKvbdkClKpgVH -EObkKvbdJcKCqJbx -DncKjvbdEXwlUTsl -EObkKvbdxwiJbPzL -DncLKvbdHDjujCKK -DnbkKvbdEuyQQMie -EPCkKvbdUaBpsRSZ -EPCkKvbddoFTKstS -EPCjjvbduaEYsOeI -DoDLKvbdcTDKscjB -DncLKvbdNdcshiKd -DnbjjvbdWSOYCEkc -EOcKjvbdZnmiEdzK -EPDKjvbdUQpnttgm -DoCjjvbdnGdwmOGy -DoCkKvbdZyDjNblS -EOcKjvbdShyjRAAl -DncKjvbdTkvOaWPJ -DoDKjvbdOEcsiJKd -DncKjvbdbVBfxKtI -EPCkKvbdrafNLfjy -DoDKjvbduaEZTOeI -DncLKvbdGGKSNhtR -EPCjjvbdnBjWxOmu -EObkKvbdKefICBRV -DncKjvbdZoNheFZj -DnbkKvbdEOcKkWbd -EPDKjvbdNGcPmQUk -EObkKvbdaMjbStlg -DnbkKvbdJYTbIMRQ -DncLKvbdJXsahLpp -DncKjvbddeOrBvbj -DoDLKvbdJSyAsMwl -EPCkKvbdZdwfzhJC -DoCjjvbduDDVWuno -DnbjjvbdEztQdkbi -EOcLKvbdUyHsykOn -EObjjvbdDjHivYKA -DoDLKvbdnUtzLKSG -DncLKvbdSLZFuGkT -DoDKjvbdlYrrTZGt -EOcLKvbdqUUGqrKt -EPDLKvbdEPCjjvcE -EPDKjvbddxZtTrFz -EObkKvbdlYrqrxgU -DoCjjvbdauCGwjtI -DnbjjvbdQZNAHTRj -DoDKjvbdMoxRVmfs -DncLKvbdOTTvGeUp -DncKjvbdcJNKKewY -DoDKjvbdmuVZjjSG -EPDKjvbdUWLpKUAq -EOcLKvbdSLZGVGjs -EObjjvbdCIjakJGK -EPDLKvbdZnmhddyj -EOcKjvbdLBKgMaxR -EOcLKvbdDjHjVwjA -DnbkKvbdYlRcsnLm -DoCjjvbdrRuKnKaN -EPCkKvbdptUHSSLU -DncLKvbdYpmEiNFR -EObkKvbdMIalQxAS -DnbjjvbdJuteceHJ -DncLKvbdFWYpPlie -EPCkKvbdmgFYMmgZ -DoCjjvbdmbJvxOnV -DncKjvbdIGfzZYXg -EPDLKvbdqTtGqrLU -EPCjjvbdWRmwbElD -EPDLKvbdGLErcIMu -EPDLKvbdwygefYEr -EPDKjvbdrSUkOLBN -DoCkKvbdNQYQumfs -DoCkKvbdRjyGVGjs -EPDKjvbdmajXXoOV -DncKjvbdIGgZxwwg -DnbkKvbdxwiJapZk -DoDKjvbdYqMdhleR -EOcLKvbdZtJIxdSn -EPDLKvbdTIzKRABM -EPDKjvbdCEPaWJlf -EOcLKvbdjgflFfOL -EPCjjvbdZjShQGbG -DoDLKvbdHDjvJbKK -EOcLKvbdBiKbLIfK -DncLKvbdiHJbxujV -EObkKvbdKeehBaQu -EPDLKvbdYSlBMsnx -EObkKvbdmJDsptrB -DoDKjvbdTkuoAvPJ -EPDKjvbdZyEJnDLr -EPCkKvbdZoNhddyj -EPDKjvbdVZHsykOn -DnbkKvbdjJegjNYS -DoDLKvbdtcCtwVno -EOcKjvbdkIHLefOL -EOcKjvbdYkqdTnLm -DnbkKvbdiZuGMQmf -DoCjjvbdZLrDsnLm -DoCjjvbdDwwktTsl -EObjjvbdRzKHrbvA -DoDKjvbdQlwaxnUz -EObkKvbdyTOImRag -EPCjjvbdQmYByOUz -EObjjvbdbrbkUDjB -DoDLKvbdGYtuAcwb -DncLKvbdePFSjssr -DoDKjvbdRbDdlIxk -DoDKjvbdwzIGGXeS -EPCjjvbdOTUVgEuQ -EPCkKvbdemGWfmJk -EOcLKvbdZQmEhmEq -DoCjjvbdZRMeJNFR -DoCjjvbdvBEZSoEh -DncLKvbdhlFDnVDZ -DoCjjvbdJJdAKPfd -EObjjvbdyYJKCQZk -EObjjvbdRzKITCvA -EPCjjvbdUMVnaWPJ -DoCjjvbdNddThhjd -EOcKjvbdNPwpvOHT -DnbjjvbdZisHpHCG -EObkKvbdGLFScINV -EOcLKvbdbsDLTdJa -EObjjvbdbhlijfWx -DoDLKvbdVZHszLPO -EObjjvbdZnnJFEyj -DoDKjvbdeOeSkTtS -DoDLKvbdkCkjpgUg -EPCjjvbdFejRnJUR -DoCjjvbdZsiIyDrn -DoDLKvbdtunYJqTA -DnbkKvbdoznELXoA -DoCjjvbdZtIiYcsO -EOcLKvbdGGKSOJUR -DoCjjvbdUMWPAuni -DnbkKvbdEPDKkWbd -EPCkKvbdUxhTzLPO -DoDKjvbdGdKvKBij -DncKjvbdmSZUzSci -EPCjjvbdZjShQGaf -DncLKvbdWRmxCElD -EPDLKvbdqvpMDIyR -DncKjvbdCJKakIfK -EPDKjvbdHELWJbKK -DoDKjvbdjlbLzFGo -EPCjjvbdTkvPBWOi -DoCkKvbdJvVGEFGi -EOcLKvbdUyHszLPO -EObjjvbdVBBpsQqy -DnbkKvbdZdxGzhIb -DnbjjvbdsPvOicVf -DoDKjvbdtcCtwWPP -EOcLKvbdwtmFRYkn -EPDKjvbdegjvSNqH -DoDKjvbdIxUBglQp -EOcLKvbdBcpAvKNG -DnbjjvbdwXMAvAvV -DnbkKvbddoEsLUUS -DncKjvbdCIkCKiGK -DoDKjvbdlZTSTYft -EPCjjvbddoEsKtTr -EObjjvbdFfJrOJTq -EPDLKvbdliDsqVSB -DncLKvbdbUagXjtI -EObkKvbdIsYaSlxM -EPCjjvbdHkaznXRL -DnbkKvbdxUmFQyMO -DoCjjvbdWWiXvDdg -EPCjjvbdSQUHKFcw -EPDLKvbdjKGIJlwr -EOcKjvbdXFxytAOs -DncKjvbdmbKWwoNu -EObjjvbdiZuFkpmf -DoCjjvbdFyVVBDwb -DnbjjvbdeqaWzlDP -EPCjjvbdRyjHsDWA -DnbkKvbdqlzJyMHi -DnbkKvbdZRNFImFR -DoCkKvbdYfwEAPSi -DoCjjvbdOAIrsjSA -EPCkKvbdaNLCTVMg -DnbjjvbdqceIomvB -DnbjjvbdsCFlkgLZ -DoDLKvbdmIdURUqa -EOcKjvbdZshhxcrn -DoDKjvbdZjTIPgCG -DncKjvbdemGWfmJk -DnbjjvbdACqxKZiQ -EObkKvbdkVvnEBxX -DncLKvbdUtNTfMWK -EPDLKvbduaDxsPFI -EObkKvbdgQBzvcxI -EObkKvbdSZihTDWA -EOcLKvbdqYnggREY -EPDKjvbdqiAJdmPF -EOcLKvbdiGjDZVjV -EOcLKvbdGZVVAdXb -DoDKjvbdhfjCxuiu -DnbkKvbduMYXBTaX -DoCkKvbdjSziTKiz -DoDKjvbdqlzKZMIJ -DnbjjvbdkVwOEBxX -DoCjjvbddtAUASmW -DoDLKvbdzjVQQESt -EOcLKvbdkySrSyHU -DncLKvbdNGbolotk -DnbjjvbddeOrBwCj -DoDLKvbdiLdcmuDZ -DoDKjvbdSPsfjFdX -DoCkKvbdbUafxKtI -DnbkKvbdcJNJkFvx -EObjjvbdFejSNiUR -EPDKjvbdQmYCYmtz -DncKjvbdfVzwpJzs -EPDKjvbdWRmwbEkc -DncLKvbdFkEsDIMu -DoCjjvbdQccBPqES -EObkKvbdKCibpjCx -EOcKjvbdLBLHNBwq -DoCkKvbdUMWOaVoJ -DoCjjvbdrbFmMGjy -EOcLKvbdJvVFdEgJ -EPCkKvbdjhHMGFnL -DncKjvbdNxOuzcmt -EPDKjvbdEXxLstUM -DoDKjvbdwygfGXeS -EObkKvbdyTNiMrBg -DncKjvbdlZSrSxgU -EPDKjvbdJXtCHlQp -EPCkKvbddndsLTsr -EObjjvbdNdcshhkE -DncLKvbdSCDeLhyL -DncLKvbdNsTvHEuQ -EOcKjvbdACqxKZiQ -DoCjjvbdptTgRqjt -EPDKjvbdOEdTiJLE -DoDKjvbdrpVoKCvG -DnbjjvbdFjeSbhNV -EPCjjvbdNGbolouL -EPDLKvbdrEFIonVa -DnbkKvbdOFDsiIjd -DoCkKvbdTqQoUuIN -EPDKjvbdeOdsKtTr -DncKjvbdyNrhXsIc -EPDKjvbdnQZxujyC -EPCkKvbdYqMdhmFR -DncLKvbddeOrBvbj -DoCjjvbdLGFgbApu -DoCjjvbdemFwHMik -DoCkKvbdRXOEClHc -DoCkKvbdZQmEiNFR -EPCjjvbdEASIlzXX -DnbkKvbdrWokbiZR -EObkKvbdHELWKBij -DnbkKvbdbUagXkUI -EOcKjvbdbsDLUDia -EOcLKvbdUWLojUAq -DnbjjvbdQvmccMID -DoDKjvbdZxcjODMS -EPDKjvbdTulPjUBR -DncLKvbdjSzhsKiz -EOcKjvbdTAFJICOd -DnbkKvbdKNADzHVB -DoCjjvbdliDtRVSB -EObjjvbdWXIxVceH -EPCjjvbdfHkWRnQg -EObkKvbdjAQGaPgK -EObkKvbdkClLRGuH -DncLKvbdZnnIdeZj -EObjjvbdlYsRsYgU -DoDLKvbdpyPHgQcx -DnbjjvbdnPyyWKyC -EObjjvbdQwNcblID -DnbjjvbdCJKajhfK -EPDKjvbdiHKCyWKV -EObjjvbdeEoRavbj -EOcKjvbdmaivwnnV -EOcKjvbdwNWANDeN -EPDKjvbdTAFIhCPE -DoCjjvbdZQleJMeR -EPDKjvbdmtuZjiqf -DnbkKvbdEPCkLXCd -EObkKvbdqGEEsvBI -EOcKjvbdmIdTqVSB -EObjjvbdJTZBSlwl -EPCjjvbdqlzKZMIJ -EPDKjvbduCbtwWOo -EPDLKvbdnPzYukYb -EPDKjvbdeFPSBvbj -EPDLKvbdHEKvKCJj -EPDKjvbdVUNUGLuj -EOcLKvbdJuuGEEgJ -EOcKjvbdzQnmJKXA -EOcLKvbdrbGMkfjy -DnbjjvbdUsltFkuj -DnbkKvbdDxYMUUUM -DnbjjvbdUQpoUuHm -EPDKjvbdRbDdlJZL -DncLKvbdmgFXlmfy -EPCjjvbdJbibqJcY -DoCjjvbdEPDLLWcE -DoDLKvbdMJCMRYAS -DoCkKvbdQZNAGsSK -EObjjvbdiCPDFXQq -EOcLKvbdVwJXvEEg -DoDLKvbdsrqsYzFD -DncLKvbdjuvnDbXw -EPDKjvbdhgKCyWKV -DoDLKvbdNdctIiKd -EObkKvbduaEYrneI -DoCkKvbdNVSrKmAX -DncKjvbdXnRAXtvU -DoDKjvbdhkddNtcZ -DoCkKvbdiBnbdwQq -DnbkKvbdLBLGlawq -DoDKjvbdygZMANEw -DnbkKvbdZsiIxcsO -EObjjvbdiBoDEwRR -DoCjjvbdHbLzEzAD -EPCkKvbdjbkkQgVH -EOcLKvbdsBemLgLZ -EOcLKvbdptUGrRkU -EPCjjvbdznpQdbkx -DoDKjvbdGYtuAdXb -EOcKjvbdzjUpQETU -EOcLKvbdypoNIjXA -DnbkKvbdSQUHJfDw -EPCkKvbdbsCjtEKB -DoDLKvbdajlFoODA -DoDKjvbdelevfmKL -DnbkKvbdCTAbsfWr -DoDKjvbdjhGlGGNk -DoCkKvbddCTMrATm -EPDLKvbdaMjbSuMg -DoCkKvbdKaLHNCYR -DncLKvbdGGKSNiTq -DoCjjvbdLZRJrztf -EPDLKvbdjlakyeGo -EObkKvbdwuMdpyLn -DnbkKvbdegjuqnQg -EPDKjvbdtTSTYydc -EObkKvbdZyDjOClS -DnbkKvbdqGEEtWAh -EOcLKvbdKQydoFnF -EPDLKvbdqUTgSSKt -DnbjjvbdMJCMQxAS -EPCkKvbdiMFDnUby -EOcKjvbdfpBzwEXh -DoCkKvbdSBceMIxk -EObjjvbdfMevgMik -EPCjjvbdjAQHAofj -EPCjjvbdZLrETnMN -EObkKvbdDoDLLXCd -DncLKvbdSZjHsDWA -DnbjjvbdOStVgFVQ -EObkKvbdbhlijfXY -DnbkKvbdjEjftoAO -DoCjjvbdeEnrCXDK -EOcLKvbdZyEKNcMS -EPDKjvbdWSNwadkc -EPCjjvbdkDLjqHUg -DoCkKvbdSCEFLiYk -DncKjvbdtkwwBTaX -EPDKjvbdCTAbsevr -DncLKvbdmfdwlnGy -DncLKvbdTukpJtBR -DoCjjvbdlYrrTZGt -EOcKjvbdnCKWwoOV -DncKjvbdMgColpVL -EPDLKvbddwytURez -DoCkKvbdakLenmcA -EPCkKvbdQvmdCkhD -DncLKvbdEARhlzWw -EOcLKvbdrXQMDJYq -EObkKvbdmJETptrB -EOcKjvbdAMgxsXZx -EPDKjvbdULvPBVni -DoDKjvbdqGEFTvAh -DoDKjvbdGLFTChMu -DoCjjvbdLBKgNCXq -DoCjjvbdOEcsiJLE -EObjjvbdSLZFuHKs -DoCjjvbdtkxXAsaX -DnbjjvbdNGbpNQVL -EOcLKvbdiLeEOUby -EObjjvbdDoCjjwDE -EPCkKvbdxrnJMrCH -EPDKjvbdJTZBTMwl -DncKjvbdBcpBWJlf -DncLKvbdGKdsDHmV -DncLKvbdDwwlUUTl -EPDLKvbdbQHHELzd -EPDLKvbdYlSEUOLm -EObjjvbdhtyeXSUb -EPCjjvbdACqxKZiQ -EObjjvbdrDdiPmua -EPCkKvbdcyxpYYqC -EPDKjvbdrXQLbiZR -DncKjvbdjmBlZeHP -DncKjvbdlYrrTYft -EObkKvbdaaWFFpPw -DncKjvbdwyhGFwdr -EPCkKvbduLxXAtBX -EObjjvbdhancEvpq -DncLKvbdbiMjKevx -DncKjvbdTIyjRABM -DoCkKvbdcImKLFvx -DnbkKvbdZjSgpHBf -EPCkKvbdGdKvJbJj -EOcLKvbdSCDeMIyL -EOcKjvbdZxdJnClS -EOcLKvbdHDkVibJj -DoDKjvbdezuxeJTw -EOcKjvbdqFceUVaI -EPDKjvbdWIYWXfxz -DoDKjvbdNQXqWOHT -DnbkKvbdOStWHEtp -EPDKjvbdLAkGmBxR -EPDKjvbdDxXksssl -EPCkKvbdTqRPVUgm -DoDLKvbdrDdhomvB -DncLKvbdptUGrSKt -EOcKjvbdiBnbeWqR -DoDKjvbdezvYeJUX -DnbkKvbdOAJStJrA -DnbjjvbdtcCuWvPP -DnbjjvbdIjEAKPgE -EObkKvbdWWiXvEEg -DnbkKvbdSBdFMJYk -EOcKjvbdQdCaQQcr -EPDLKvbdLZRKSzuG -DoCkKvbdpfEFTuaI -DnbkKvbdVBBqSqRy -DncLKvbdMoxRVnGs -EOcLKvbduoTzqKnt -DoCjjvbdxxJKCPyk -DncLKvbdVvhwvEFH -EPDLKvbdOYPVzcnU -EOcLKvbdBdPaWJlf -DnbkKvbdJSyAsMwl -DoCkKvbdYTLaMsnx -EOcKjvbdUWLpJsaR -DoCjjvbdhbOcEwRR -DncKjvbdKfGHbAqV -DoCjjvbdlZTSSyGt -DncLKvbdatbGxLTh -EPDLKvbdiGicYvKV -EOcLKvbdTIyjRAAl -EPDKjvbdZsiIyDsO -DnbjjvbdZLqcsmlN -EOcLKvbdeOeTLTtS -DncKjvbdQdCaPqDr -EPCjjvbdUGznLvvF -EObkKvbdrDdhpNvB -EPDLKvbdRadFLhxk -DnbjjvbdhytelQmf -EPDKjvbdFkFSbhNV -DoDKjvbdaSGDHsek -EObkKvbdzHYlAMdw -DnbjjvbdliDsptrB -EPCkKvbdYlSDtNlN -DoDKjvbdnPyxujxb -EObjjvbdRkYfVGjs -EPCjjvbdRaceMJZL -EOcLKvbdnUuZkJrG -DncKjvbdOYOuzdNt -DoCkKvbdJbjDQicY -DnbjjvbdRyjHsCvA -EOcLKvbdUGzmlXVe -EPCjjvbdMoxRWOGs -DncKjvbdlrZUzTEJ -DoCjjvbdJYUBgkpp -EOcLKvbdACrXizJQ -EPDKjvbdsCGMkfkZ -DncKjvbdqYnhGqEY -DncLKvbdjgflFemk -DncKjvbdrzMQTAgn -DoCjjvbdlZTSSxgU -EPDLKvbdKCibqKCx -EOcLKvbdmJDtQuSB -DncLKvbdQcbaPqES -DoCjjvbdOXoVzdNt -EObkKvbdbsCjsdKB -EPDKjvbdySmiMqbH -DoCjjvbdrMzKZLhJ -DncKjvbdtAGqIAAr -EPCjjvbdEXxMTtUM -EOcKjvbdVrOYBdkc -DoDKjvbdzROlhiwA -DncKjvbdqTtHRrLU -DnbkKvbdiUzEwSUb -DoCkKvbdZLqcsnMN -DnbjjvbdUaBqTRRy -DoDKjvbdRosgKGEX -EObkKvbdShzKRABM -DoDLKvbdqZOhHRDx -EPDLKvbdiUzFWqtb -DoCkKvbdZyEJmbkr -DncKjvbdREDBPpdS -EPCjjvbdMSWmZtpz -EPDLKvbdTAEiHaoE -DoDKjvbdNeETiIjd -EOcLKvbdqdFJPmua -DoCkKvbdRpTfjFcw -DncLKvbdznoqEcMY -DoCkKvbdFfJqmiUR -EOcLKvbdSPsfifEX -DnbjjvbdtunYJpsA -EPDKjvbdqcdiQOVa -DnbkKvbdeXyssrFz -EPDLKvbdQYmAGrqj -EObjjvbdegjuqmpg -EOcLKvbdbLLenmcA -EOcLKvbdpyPHgREY -DoDKjvbdZRMdhmEq -DncLKvbddZxoxZRC -EOcKjvbdKxpjSztf -EPDKjvbdKkBHvAJy -EObkKvbdnBiwYOnV -EObkKvbdrWolDJYq -DoCkKvbdZyEJmbkr -DoDKjvbdkDMLRHUg -EPCjjvbdQwNccMID -DncKjvbdSZihSbvA -DncLKvbdnHFXmNgZ -DncKjvbdGKeSbhMu -DncLKvbdULvPAuoJ -EOcLKvbdYqNFJMeR -DoDLKvbdMfcPmQVL -EPDKjvbdFpATWgGZ -EObjjvbdeqaWzkbo -EOcKjvbdZoNhddzK -EObjjvbdFeiqmiTq -DoDKjvbdauBfwjsh -EOcLKvbdBraDUFvr -DoDLKvbdyYIjCPzL -DnbjjvbdmRxuZsEJ -EObjjvbdMfcQMpUk -EOcKjvbdyNsIXrhc -EPDKjvbdREDBPpcr -EPCjjvbdRkYeuGkT -EPCkKvbdtAHRIAAr -DnbkKvbdxUmFQxkn -EObkKvbdtTSTZZdc -EOcKjvbdmIdUQtqa -EOcKjvbdXrkaNUPY -DoDKjvbdCWzdIePv -DoDKjvbdbBVdfQPw -EPCjjvbdZyEJmblS -DncKjvbdlZTRrxft -EPDLKvbdIxUCIMQp -DnbjjvbdKyRKSztf -EOcKjvbdNeEUIhjd -EOcLKvbdjKGIJmXr -DoDLKvbdCEPaVimG -EPCkKvbdOFDsiIkE -EOcLKvbdehKvSORH -DoDKjvbdwWkaWAuu -EPDKjvbdpxoHfpcx -EPDKjvbdJbjCqJbx -DncKjvbdZtJJZETO -EPDLKvbdsZkpTBHn -EPCkKvbdTlWPAuoJ -DoCjjvbdjggMFfOL -DoDKjvbdfMewGlik -EPDLKvbdnBivwoOV -DoCjjvbdwuNEpxkn -DnbkKvbdiifIKNYS -EOcKjvbdKVuFdFGi -EPCjjvbdZdxGzgiC -EOcLKvbduaDxsPEh -EPCkKvbdRotHJfEX -DncLKvbdCIjajhej -DoCkKvbdcImJjfWx -EOcLKvbdKVtecdgJ -DoCjjvbdeFOrBwCj -EPDKjvbdqvpLcIxq -EObjjvbdEARiMyvw -DncKjvbdbUafxLTh -DncLKvbdLAkGmCYR -DoDKjvbdxVMdqYkn -EPDKjvbdWWiYWDdg -EObkKvbdKDJbpjCx -DoCkKvbdnPyxvKyC -DoCkKvbdZsiJYcsO -EObkKvbdJpzFOeme -EOcLKvbdOSsufeUp -DoDLKvbdTfznMWvF -EPDLKvbdfNFwGlik -EPDLKvbdCDpAuilf -EPDKjvbdbiMikGWx -DoCkKvbdrbGMkfjy -DoCjjvbdWIXuxHYz -EPDKjvbdGFiqnIsq -EPDLKvbdNGbpMpVL -EOcLKvbdtSrTYyeD -DoDKjvbdjJfHjNXr -EPCkKvbdzitpPcrt -DoDLKvbdxmrgxSiD -EPDLKvbdcJNKLFvx -EPDLKvbdsrrSxydc -DnbkKvbdqceIonWB -EPCkKvbdZnnIddzK -DoCjjvbdLYpirztf -EPCjjvbdLrWlzUpz -DnbjjvbdRkZGVGjs -EObjjvbdnBivxOmu -DoCjjvbdmIdUQuSB -EObkKvbdtcCtvuoP -DnbjjvbdANIYrvzY -DncKjvbdmaivwoNu -EOcLKvbdrouoJcWG -DoDLKvbdTppoVVIN -DoDLKvbdVUMtFkuj -DncLKvbdznpQdblY -DncKjvbdEPCkLXDE -EOcLKvbdfHkVqmqH -EPDKjvbdapGgDkzd -EPCjjvbdSPsfifDw -DoDLKvbdGKeTDINV -EObjjvbdyqPNIjXA -EPCjjvbdatbGwkUI -DoCjjvbdCTAcTewS -DnbjjvbdxnTIXsJD -EOcKjvbdbKlFnnDA -DncKjvbdjJegjNXr -EObjjvbdMuTRkNAX -EObkKvbdUxgsykOn -DoCkKvbdRaceMIxk -EPDLKvbdJbibpibx -DoDKjvbdEztQdlCi -EPDKjvbdcyyPwyRC -DncKjvbdjlbMZdfo -EPCkKvbdRXNdClID -DncLKvbdtbbuXVoP -DoDKjvbdieLHVPAO -DoDKjvbdFVxopMie -EObjjvbdzoPpdblY -EPCjjvbdmIdUQuSB -EPCkKvbdYkrEUNkm -DoCkKvbdVwIxVdEg -DoCjjvbdOSsvGdtp -EPCjjvbdmSYtysDi -EObkKvbdWWiYVceH -DoDKjvbdrNZixkgi -EPDKjvbdbVCHYKsh -DnbkKvbdjKFgimXr -EPDKjvbdNsUWHFUp -EObkKvbdeAUQlwjG -EOcKjvbdTAEiICPE -DoCkKvbdZLqdUNkm -EOcKjvbdZisHogCG -EPCkKvbdKVtfEEgJ -EObjjvbdaSGDIUGL -EPDKjvbdZRNFIleR -DoDKjvbdyXiJaoyk -EObkKvbdRkYfVHKs -DnbkKvbdLAkHNCXq -DncKjvbdJpyePFnF -EPCkKvbdkHgMFenL -DoDLKvbdOFDtIhkE -DoCkKvbdtTSTZZdc -EOcLKvbdkClKpfuH -DoCjjvbdBcpBVjNG -DnbkKvbdfMfXHNJk -DoDKjvbdBsBCtFvr -DoCjjvbdHgGzYwwg -DncLKvbdSwjkmzkY -DoCkKvbdDihJuwjA -EPDKjvbdQccBPpdS -EPDKjvbdehLVqnQg -DoCjjvbdmozZVkZC -DoDLKvbdaNKasVNH -EObkKvbdrRtkOLBN -DoDKjvbdehLWRnRH -EObkKvbdSCEEkiYk -DoCjjvbdRXOEDMID -EOcKjvbdFejRmiUR -EOcLKvbdFkEsChNV -DncKjvbdWWhwuceH -EPCkKvbdNwoVzdOU -EOcKjvbdePFSkUTr -DoDKjvbdMRwMzUpz -EObjjvbdLrXMzUpz -EPDKjvbdZxdJnDLr -EOcLKvbdrRtkNjaN -EPCkKvbdTvLoitBR -DncKjvbdKeehCApu -EPDLKvbdemFvfljL -DncLKvbdeFOqawCj -DoDKjvbdZyEJnCkr -DoCjjvbdlZTRsZHU -DnbkKvbdRbDdlJZL -DnbjjvbdYqMdiNFR -EObjjvbdSQTfjFdX -DoCjjvbdgFlZnGgA -DoDLKvbdwtldqYkn -EObkKvbdjggLfFmk -DncLKvbdMgCpNPtk -DncKjvbdmpZyWKxb -EPDKjvbdVqnYBeMD -DoDKjvbdULuoBWOi -DncLKvbdezvZEiTw -EPCkKvbdjblLRHUg -EPCjjvbdBiKakJGK -DncKjvbdTukpJtAq -DoCkKvbdkWWnEBxX -EPCjjvbdnPzYvLZC -EOcLKvbdWHxVxGxz -DncLKvbdNsUWHEtp -EObkKvbdHDkWKBij -EObkKvbdVAbQsQrZ -DnbkKvbdKCibqKDY -EObjjvbdLYqKSztf -DoCkKvbdZLrDtOMN -EOcKjvbdemFvgNJk -DncLKvbdiCOcEvpq -DnbkKvbdEXxLtTtM -EObkKvbdFjdrbglu -EObkKvbdmttykJrG -DoCjjvbdePFTLUTr -DoCkKvbdWRmwadlD -DoDLKvbdVqmxCElD -EPCkKvbdnBiwXoOV -DnbjjvbdEvZQPmKF -EObkKvbdSKyGVGkT -EPCjjvbdauBgXkTh -EPCjjvbdVrNxBeLc -EObjjvbdOEcshiLE -DoDLKvbdbLMGPNcA -DnbkKvbddZxpYYqC -DoCkKvbdlZTSTZHU -EObkKvbdtlXwBTaX -EObkKvbdHffyxwxH -EPDKjvbdrpWOicVf -DncKjvbdkVvmdBww -EPDKjvbduaDySoFI -EObkKvbdsZkosBHn -DoDLKvbdTAFJICOd -DnbjjvbdpstHRrLU -DncKjvbdUQqOtuIN -EPDKjvbdVUMtFlWK -DoDLKvbdrouoKDVf -DoCjjvbdmRyUysDi -EPDKjvbdgFkzNgHA -DnbjjvbdZshiZDsO -DnbjjvbdIMBzmwRL -EObjjvbdZshhxdTO -EOcLKvbdZGwEAOri -EPCkKvbdkHflFfOL -DoCkKvbdKDJcQibx -EOcLKvbdFkEsCgmV -EPCjjvbdJutfEEgJ -DoCkKvbdOXnuzdNt -EPDLKvbduLwwAtAw -DoDKjvbdqvpLbiZR -EPCjjvbdGYuVBEXb -EOcLKvbdCJKajhfK -DnbjjvbdkMbLyeGo -EPCkKvbdijGIKMwr -DoDLKvbdJzpGXdAN -DoDKjvbdNwnuzdOU -EOcLKvbdtSqsYyeD -EOcLKvbdmRxuZrdJ -EPDKjvbdhlEcmtcZ -DoCkKvbdbiNJjevx -DoDKjvbdGckVibJj -DoDLKvbdGLFSbhMu -EPDKjvbdEObjkWbd -EObkKvbdBhkBjiGK -EPDKjvbdtAGqIAAr -DoCkKvbdWRmwadkc -EObjjvbdQdDAoqDr -EOcLKvbdwNWANDeN -EPCjjvbdMowqVmgT -EPDLKvbdegkWSNpg -EPDLKvbdjAQHAogK -DoDLKvbdvwLaVaWV -EPCjjvbdLGFgbBQu -DoCjjvbdxsOJMrCH -EObkKvbdFkFTChMu -EObjjvbdbLLenmcA -EPDLKvbdiCObeXRR -EPCjjvbdhbObdvpq -EObkKvbdVZIUZkOn -EPDLKvbdfVzxPizs -EPDKjvbdnPyyVjyC -DncLKvbdRzKITCvA -EOcLKvbdUtMsfLuj -DncKjvbdVBBpsRRy -DnbkKvbdzeZnzdzQ -EOcLKvbdUtNTfMVj -EObjjvbdqcdiQOWB -DoCkKvbdNddTiIjd -DncLKvbdrykosBHn -EPDKjvbdWRnYBeLc -DncLKvbdrXQLcIxq -EPCkKvbdUWLpKTaR -DoCkKvbdZRNFJMeR -EPDLKvbdunszpjoU -DoDKjvbdzitpPdSt -EObkKvbdvBDxrneI -DoDLKvbdVviXvDeH -EPCkKvbdDihJuxKA -EPCkKvbdNPxQunGs -DoCjjvbdmuUzKjRf -DnbkKvbdbPffdLzd -DoDLKvbdXrlBNTnx -DoDKjvbdZQmEhmFR -EObjjvbdmttzLKRf -DoCkKvbddijRvUzn -EPDLKvbdHffyyYXg -EPCkKvbdcTDKtEJa -EPCkKvbdpecdtWAh -DncKjvbdRjxeuGkT -EPCjjvbdqdEhpOVa -EPCjjvbdelfXGmJk -EObkKvbdWWhwudFH -EPDKjvbdhbObeXQq -DoCkKvbdffLynHHA -DnbjjvbdpaJFAXIE -DoDKjvbdqZPIGpcx -DoDLKvbdmaivxPOV -DncKjvbdqFdEsvAh -EPCjjvbdrpWOibvG -EPCkKvbdyfyMAMdw -DoDLKvbdhuZdvqtb -DncLKvbdWRnYBeMD -DncLKvbdDncLKvbd -EObkKvbdhzUfLpnG -EOcLKvbddoFSkTtS -EPDKjvbdbKlFoODA -DoCkKvbdRWmccLhD -EObjjvbdeAUQlxJf -DncLKvbdKVuGEEfi -EObkKvbdVvhwvEEg -EPDLKvbdhaoDEvqR -EPDKjvbdpfEFTvBI -EPCkKvbdyzeNrIJI -DoDLKvbdGckViaij -EObjjvbdnHExNNfy -EObkKvbdZLqdUOLm -DoDLKvbdDxXktTsl -EObkKvbdFVxpPmKF -DoDKjvbdNdctJJLE -DnbkKvbdTXkMNzjx -DncKjvbdbrbkUEKB -DoCkKvbdGKeSbhNV -EPDKjvbdYSkaMtOx -EPCjjvbdiGicYujV -EObjjvbdnHFXmOGy -DoDKjvbdZyDjNblS -EOcLKvbdGYtuBEXb -DnbjjvbdqGDeUWAh -DnbkKvbdTppnuVHm -EOcLKvbdPyNAGsRj -EPCkKvbdIrxaSlxM -DncKjvbdCfkfHAzc -DnbkKvbdIHHZxxXg -EPCjjvbdjKFhKMxS -EOcKjvbdehKvRnRH -EObjjvbdxVMdpyMO -DnbjjvbdSLYetgKs -EObkKvbdRjyGUfkT -DoCjjvbdwyhFeweS -DncLKvbdrJAKElne -EPCjjvbdiGjCxvKV -EPCjjvbdCIjajiFj -DoDLKvbdunszqLPU -DnbjjvbdySmhlrCH -DnbkKvbdnBjWxPNu -DoDKjvbdlhdTqUrB -DoCjjvbdGdKvJajK -EObjjvbdkySqryHU -EPCjjvbdYkqdTmkm -EObkKvbdDnbjkXDE -EPDKjvbdKDKCqKDY -EOcLKvbdeYZstSFz -EPDKjvbdZyDjNbkr -DncLKvbdPyNAGrrK -DoCkKvbdTlVoAuni -DncKjvbdEPCkKvbd -EPCkKvbdcTCkTcjB -DnbkKvbdcJNKLGXY -DnbjjvbdRkYfVHKs -DoDLKvbdaaWEfQQX -EPDKjvbdmbJvwnmu -EOcLKvbdZyDimcMS -DoDLKvbdYkrEUNkm -DoDKjvbdmaivwnmu -DoDLKvbdqYoIHQcx -EPDKjvbdLrWlyuQz -DncLKvbdkCkkQgVH -EObjjvbdrXPlChyR -DoCjjvbdJTYaTMwl -EPCkKvbdNsTvHFVQ -DnbjjvbdeEnqavcK -EPCjjvbdVvhwuceH -EPCkKvbdbLMFoODA -EPDLKvbdCIkCLIfK -DoDLKvbdbLLennDA -DncLKvbdyNrhYTIc -EPDLKvbdNHCpNQUk -DnbkKvbddndsLUTr -DncKjvbdaogHDkzd -EPDLKvbdZjSgpGbG -DnbjjvbdaSGDIUGL -EPCkKvbdjhGlFfNk -EPDLKvbdbKkenmcA -EOcKjvbdIHHZyXxH -DoCjjvbdiUydwRtb -EPDLKvbdauBgYKtI -EPDLKvbdZMSDsmlN -DoDKjvbddneSjtTr -EPCjjvbdJbibqJbx -DnbjjvbdGYtuAcwb -DoDLKvbdsQVoJbvG -DoCkKvbdxmrhXsIc -DoCjjvbdyNsHwsJD -DoCkKvbdKWVFceGi -DoDLKvbdsBfNMGkZ -DnbkKvbdJzoewdAN -EPDKjvbdwzHefYFS -DnbjjvbdBiKbKhej -EOcKjvbdjuvmdCXw -EOcKjvbdbhmKKevx -DoCjjvbdehLWRmpg -EPCjjvbdACrYJzJQ -EOcKjvbdhuZeXSUb -DoCkKvbdJcJbqJcY -EPDKjvbdYqMeJNEq -DncLKvbdmJDtRUqa -EPDKjvbdnBjWxOnV -DoDLKvbdOEctJIkE -DoCjjvbdDxYLtTtM -EOcLKvbdZnnJFFZj -EOcKjvbdKRZeOfNe -DoCjjvbdTukpJtAq -DoDKjvbdhyuGLpnG -DoDKjvbdhtzFWrUb -DnbkKvbdQccBQRDr -EPCjjvbdTukojUBR -EPDKjvbdeKKRvUzn -EOcLKvbdeXzTtSFz -DncKjvbdyTOJNSCH -EObkKvbdjmBkydfo -EPCjjvbdelevflik -DoDKjvbdZtJIxcrn -DoDKjvbdqiAJeNOe -DoCjjvbdddnqavbj -DoCjjvbdZLrDtOMN -EPDKjvbdZyEKNcLr -EObkKvbdMgDPmQVL -EPCjjvbdxrmiMrBg -EObjjvbdZGvdAPSi -EPCkKvbdvvkaWBWV -DncKjvbdfMewHNJk -DoCjjvbdlrYtyrdJ -DncLKvbdiLeDnVCy -DnbjjvbdvwLaWBWV -EOcLKvbdVBCRSprZ -DoDLKvbdYzbfSKVy -DnbkKvbdXrlBNUPY -EObjjvbdKfFhCAqV -DoCkKvbdVTmTekvK -EPDLKvbdaSGChTfL -DncLKvbdauCGwjsh -EObjjvbdBcpBWJlf -DnbjjvbdZjTIQHCG -DoCkKvbdDjHiuxKA -EObkKvbdZxdKNblS -DoDLKvbdptTfrRjt -DoDLKvbdJbjCqKDY -EOcKjvbdEJhKWYKA -DnbkKvbdssSSyZeD -EOcLKvbdZshhyESn -EPDKjvbdRjxfUgKs -DncKjvbdwygefYEr -EPCkKvbdiLeEOVCy -DnbkKvbdTvLojTaR -DoCkKvbdzdzOzdyp -EPDKjvbdVUNUGMWK -EObjjvbdqdEhonVa -EPDKjvbdKefHbAqV -DncKjvbdtSqsYzFD -DoDLKvbdZjTIPgBf -EPCkKvbdRjyFuHLT -EOcKjvbdUtMsfLvK -DoCjjvbdnHEwlnGy -DnbjjvbdURQnttgm -DoCkKvbdFfJrOIsq -DoDLKvbdjKGIKMwr -EOcKjvbdTAEiIBnd -EPDLKvbdFxttaEXb -DoDKjvbdJTZAsNYM -EPCkKvbdFejSNhtR -EPDKjvbdwkXEHzyf -DnbjjvbdbUafxLTh -DoCkKvbdZQleJNEq -EPCjjvbdmpZyVkZC -DnbjjvbdmJEUQuRa -EObkKvbdrEFIpNua -EOcLKvbdJpzEnfNe -DnbjjvbdyTNiMqag -EObjjvbdNQYQvOHT -EPDKjvbdGKdrbgmV -EOcLKvbdCJKakIej -DncLKvbdlhcsptrB -DnbjjvbdZirhPfaf -DncKjvbdZoNiFFZj -EOcLKvbdjuwNcaww -EOcKjvbdUyITzLPO -DnbjjvbdxVMdpyLn -EObjjvbdnCJwXnnV -EPCjjvbdIMBznWqL -EObkKvbdJpzFOenF -EObjjvbdlhdTpuRa -DncLKvbdSCDdkiZL -EObjjvbdZxcimcMS -EOcKjvbdxVMdqZLn -DoCkKvbdrJAKFMne -EObjjvbdXsMAmUPY -EObjjvbdeFOqbWbj -DncKjvbdCTBCsfWr -DoCjjvbdRyjHsCvA -EPDKjvbdziuQQDrt -EOcLKvbdziuPocrt -EPCkKvbdWWhwvEEg -EPCkKvbdeEoRavcK -EPCjjvbdSKyFuGkT -EPCjjvbdrEFIonWB -EObjjvbdrEFIpOVa -DncKjvbdzGyMANEw -EPDKjvbdrRtjmjaN -DoCkKvbdJbjDRKDY -EObkKvbdfNFvgNKL -DnbkKvbdZHWdAPTJ -EPCjjvbdCDoaWKMf -DncLKvbdJKEAKPgE -DnbjjvbdssSTYydc -EOcKjvbdIsYaTNYM -EPCkKvbdgPazvcxI -DoCjjvbdmozYvLYb -DnbkKvbdeATqNYKG -EObjjvbdIwsbIMQp -EPDLKvbdpssfrSKt -EPCkKvbdhzUfLpmf -EOcKjvbdNGcPlpUk -DncLKvbdhkeEOVDZ -EPDKjvbdLFfIBaRV -EPCkKvbdJuuGEFGi -EOcKjvbdRacdlJYk -EPCjjvbdmbKWxOmu -EPDLKvbdwtmFQxkn -DnbjjvbdgvyAzzAJ -EPDKjvbdNrsugFVQ -DncKjvbdmttzLKRf -DnbkKvbdZyEKNcLr -EObkKvbdxrmiNRag -DoDLKvbdiMFDnVCy -EObjjvbdWSNxBdlD -DnbkKvbdCTBDUFwS -DoDKjvbdYTLaMtPY -EOcLKvbdZtIiZDrn -EObjjvbdYzcGSJvZ -EObkKvbdCSaDUFvr -DoCjjvbdTppnuUgm -DoCkKvbdOTUVfduQ -EOcLKvbdfpBzwDwh -DncKjvbdGBPQyJzm -EPCjjvbdVZITyjnn -EObkKvbdVhXuxGxz -EObjjvbdiifHimXr -EPDKjvbdvwMAvAvV -EOcKjvbdkWXODbYX -DoDKjvbdmbKXXnnV -DoDLKvbdZsiJZDrn -DoCkKvbdlrZUzTDi -DoDKjvbdSQTfjGEX -EOcKjvbdqcdiPnWB -EOcLKvbdpssgSSKt -EPDLKvbdhkeENuCy -EPDKjvbdZQmEhmEq -DoDKjvbdZtJIxcrn -DncLKvbdhgJbxujV -DoCkKvbdDoDKkXCd -EObkKvbdZGvdAOsJ -EObkKvbdwjvdHzyf -EPCjjvbdUQpoUuHm -EPDKjvbdUGznMXVe -DnbjjvbduaEYroFI -DoDLKvbdehLWRnRH -DoDLKvbdgQBzwEYI -EObkKvbdbUagYKsh -EObjjvbdyqPMhiwA -EPDKjvbdvvkaWBWV -DnbkKvbdJTYaTNYM -DoDKjvbdZtIhxdSn -EOcLKvbduaEZTOdh -EObjjvbdkNCMZeGo -EPCjjvbdZLqdTnLm -DoCkKvbdUsltFkuj -DncKjvbdnPyyVkZC -DoDLKvbdwjvdHzzG -EPCkKvbdGKdsCgmV -DnbjjvbdiMFDmtby -EObjjvbddneSjtUS -DncLKvbdezvZFJUX -EPCjjvbdhbOcFWqR -DoCkKvbdaMjbTVMg -DoDLKvbdHDjvKCJj -EOcLKvbdpxoIHRDx -DoDKjvbdZshhxcrn -EOcLKvbdcJNKKewY -EObjjvbdTppntuHm -EPCjjvbdemGWfmJk -DoCkKvbdjcLkQftg -EObkKvbdQwODbkgc -EPDLKvbdCTAcUFwS -DnbjjvbdvOszpkPU -EOcKjvbdkClLRHUg -EOcLKvbdNHCpMpVL -EObjjvbdZMRcsnMN -DoCjjvbdpxnggQcx -EOcKjvbdyTOJNRbH -EPDKjvbdeKKRutzn -DncKjvbdrzLosAgn -EPDKjvbdYzcGRjWZ -EPDKjvbdQcbaPpdS -DnbkKvbdtkxXAsaX -DncKjvbdCDpAvKMf -EPDKjvbdHEKvKBjK -EOcKjvbdfpBzvdYI -DncLKvbdiifIJmYS -EPDLKvbddeOqbWbj -DnbkKvbdZyDinDMS -DoDLKvbdkNCLydgP -EOcLKvbddePSCWbj -DnbkKvbdZxcjNcMS -DoCjjvbdQwNccMID -EPDLKvbdiiehKMwr -EOcLKvbdCTBDUFwS -EPDLKvbdbLMGOnDA -EOcLKvbdUMWOaVni -DnbjjvbdyqPMhjXA -DncKjvbdCTAbsewS -DncKjvbdMpYQvOHT -EPDKjvbdTqRPVVIN -DoCjjvbdZxdJnClS -DoCjjvbdWSNwbElD -DnbkKvbdrWokcIxq -EObkKvbdWIYWXgYz -EPDKjvbdzitopDsU -EObjjvbdUVkojUBR -EPDLKvbdEObkLXCd -EOcKjvbdrbFmMHKy -DnbjjvbdehKuqmpg -EOcLKvbdZshiYcrn -DoCjjvbdZnnIdeZj -EOcLKvbdmttzLKRf -EObjjvbdGZUuBDwb -DoCjjvbdHDjvJaij -DnbjjvbdKQzFPGNe -DncKjvbdRbDeMJYk -DoCjjvbdezuyEhsw -DoDKjvbdwkWdHzzG -DncKjvbdEASJMyvw -DncLKvbdyfyMANEw -EPCjjvbdCSaDTfXS -EOcKjvbdCJKajiGK -EObjjvbdrJAKFNOe -DnbjjvbdFWZPoljF -DnbjjvbdmpZyVjyC -EPDKjvbdiifIKNYS -DncKjvbdGAnqYizm -EOcKjvbdiMFEOVDZ -DnbjjvbdJXtBglRQ -DoCkKvbdijGHilwr -DoCjjvbdDwxMUUUM -DoDLKvbdUMWPBVni -EPCjjvbdDwwksssl -DnbkKvbdNeDshhkE -EObkKvbdbAudfQQX -DnbkKvbdwuMdqZLn -DnbjjvbdijGHjNXr -EPCjjvbdOFETiIkE -DoCjjvbdxsOImSCH -DoCkKvbdLiBkqYAS -DncKjvbdFkFTDHmV -DoCjjvbddoErjstS -EObjjvbdyOTIXsIc -DncKjvbdeXzTtSFz -DoCjjvbdqdFIonWB -EPDLKvbdMpYRWNgT -DoDLKvbdfNGXHNJk -EPCjjvbdePErkTsr -DoCjjvbdNHCpNQVL -EObjjvbdsQVnjCuf -DnbjjvbdtcDUwWPP -DoCjjvbduaDySndh -EPDKjvbdqZPIGqDx -EObjjvbdijFgimYS -DncKjvbdZyEJmblS -DoDKjvbdirziSkJz -DncLKvbdeOeTKtTr -EOcKjvbdfpBzwEYI -DnbkKvbdezvZFItX -EPCjjvbdrRuLOKaN -DncLKvbdbrbjscjB -EObkKvbddBrlrAUN -EPDKjvbdZoOIdeZj -EOcKjvbdGYuUaEYC -EPCkKvbdNxPVzdNt -EOcLKvbdhlFDmuDZ -DncKjvbdKVtecdgJ -EPDLKvbdqlzJxkhJ -EOcKjvbdySmhlqbH -EPCkKvbdxsNiNRag -EPDKjvbdTYKkmzjx -EObkKvbdIryBTMxM -EPDLKvbdxnShXsIc -EPCjjvbdaSFbhUGL -EObjjvbdRDbaQQdS -EObkKvbdrbFmMGkZ -EPCkKvbdWXJXudEg -EOcLKvbdcJNKKfXY -DncKjvbdEuxpPljF -DncKjvbddCTNSATm -EOcLKvbdFVyQPmKF -EPCkKvbdpeceUWBI -DoDLKvbdVTmUGMWK -DoCjjvbdFyVVBEXb -EOcLKvbdTukpKTaR -DncLKvbdDHLegAzc -EPCjjvbddxZtTrFz -DncKjvbdssRsZZeD -DoDKjvbdeOeSjstS -DoDKjvbdQdDApQcr -DncLKvbdURQoUuIN -DnbkKvbdezuxdiUX -EPCjjvbdbPgHDkzd -EOcKjvbdFWZQQMjF -DoDKjvbdMfcQMotk -EPCjjvbdrWokbiYq -DoDKjvbdnGdwmOGy -EOcKjvbdnBjXYOmu -EOcLKvbdDoCjjvbd -DoDLKvbdsQVoJbuf -EObkKvbdZirhQHBf -EPCkKvbdIGgZxwwg -DncLKvbdrMzKZMIJ -DnbkKvbdkHflFemk -EObkKvbdfHkWSORH -DnbkKvbdwygfGYEr -EOcKjvbdxmrgxTJD -DnbjjvbdGdLViaij -DoDKjvbdmSYtysEJ -EObkKvbdfILVqmpg -DncLKvbdADSXizIp -DoCjjvbdznpQdbkx -DncLKvbdmbKWxOnV -EPCkKvbdJvUfEEfi -EOcLKvbdcScLTdJa -DnbjjvbdQcbaPpdS -EPDKjvbdDoDKjvcE -DncKjvbdhzUfMROG -DncKjvbdbrcKtDia -EOcLKvbdJpydoFme -DnbjjvbdxLWdHzyf -EPCjjvbdwuMeQyMO -EOcLKvbdiifHimXr -EOcLKvbdySmiNSCH -EPCjjvbdznopeCkx -EPDLKvbdZshhyESn -DoDLKvbdrDeJQNvB -DoDLKvbdILaznXQk -DoCjjvbdnUtzKiqf -DnbkKvbdjJehKMwr -EOcLKvbdDxXlUUUM -DoCkKvbdtSqsYyeD -DoDKjvbdxVMeQxlO -EPDLKvbdZjTHofaf -EObkKvbdZisHogBf -DnbkKvbdnBiwXoOV -DoCkKvbdYSkaMtPY -DncLKvbdHELVibKK -EPCkKvbdhlEcnVCy -EPCkKvbdZLqdTnMN -DoDKjvbdbsCkUEKB -EPCkKvbdMpYRVnHT -EOcLKvbdFWZQPljF -DoDLKvbdznoqEcLx -DnbkKvbdcImJjewY -EPCkKvbdvvlBVaWV -DoCkKvbdmIdTqUrB -DncKjvbdxZgeexFS -EOcLKvbdrouoJbvG -DoCkKvbdWRnYBdlD -DoCkKvbdBhjbLJFj -DnbjjvbdrouoKDWG -DoDKjvbdUxgsyjnn -DoDLKvbdakMFnnDA -EOcLKvbdZtJJYcsO -DncLKvbdrbFllHKy -EPCjjvbdmajXXnmu -DncLKvbdpyPHgQdY -EObjjvbdyNrgwsJD -EPCjjvbdaMjaruMg -DncLKvbdYfwEAPTJ -DoDKjvbdbiNKLFvx -DoCjjvbdajkfOnDA -EObjjvbdZoOJEeZj -EOcKjvbdqZOhGqEY -EOcKjvbdziuPodTU -DoDKjvbduLxWaUBX -EObkKvbdyXhjBoyk -DoDKjvbdTkunaWPJ -EObkKvbdBraCsfXS -DoDLKvbdTAEiICPE -DnbkKvbdDjHjVwjA -EOcKjvbdqlzKZLhJ -EObkKvbddneTLTsr -EObkKvbdWRmwaeMD -DoDLKvbdLBLHNBwq -DoDLKvbdUxhUZkPO -DncKjvbdYlSDsmkm -DoCkKvbdxZhGFwdr -EObjjvbdbsDKsdJa -EPCkKvbdGYuVAdYC -EObkKvbdRXNccLhD -DnbjjvbdFVxpQMjF -DoDLKvbdMgDQNPtk -EObkKvbdQvmccMHc -DncKjvbdMpXqVnHT -DoCjjvbddZxoxYqC -DncKjvbdnVUzKjRf -DoCjjvbdEuyQPmKF -DoDKjvbdLYqKSzuG -EPDLKvbdTAFJICOd -DoCjjvbdCJLCKiFj -EOcLKvbdFyVVAcwb -DoCjjvbdbQHHDkzd -DoCkKvbdNrsvGduQ -DnbjjvbdRWmcblID -DnbkKvbdQvnEDLgc -DnbjjvbdVZITzKnn -EPDLKvbdxxJJaoyk -EObkKvbddoEsLUTr -DncLKvbdZQldhldq -DoDLKvbddCSmSAUN -DoDLKvbdYpldhldq -DoDLKvbdDxXlUTsl -EPCkKvbdnGdxMmfy -DncKjvbdwWlBWAuu -EOcLKvbdkDMKpgUg -DoDLKvbdZshiYdSn -EPDLKvbdhfjCyWKV -EObjjvbdKRZeOeme -DoCkKvbdznopdcLx -EPCkKvbdZMSDsnMN -DnbkKvbdkWWmcbXw -EObjjvbdpxoHfqEY -DnbkKvbdtlYXAsaX -EPDLKvbdjvXNcaww -EPDLKvbduDDVXVoP -DoDKjvbdLGFgbBQu -EObjjvbdmuUzLKRf -EObjjvbdRaceMIyL -EPDLKvbdiHKCyVjV -DoCkKvbdxnTHwriD -EOcLKvbdZjTIPgCG -DncLKvbdBcpBVjNG -EPDLKvbdVwIxVceH -DoCkKvbdkIGkeemk -DnbkKvbdozmdKxPA -DoDKjvbdjuwNdCXw -DoCkKvbdeEoSCXCj -EPCkKvbdcScKtEJa -EPDLKvbdySnIlrBg -EPCjjvbdnQZyVkYb -DoDLKvbdqYnggREY -EObkKvbdBsBDUGXS -DnbkKvbdUWLoitAq -DoCkKvbdIGgZxxYH -DoDLKvbdvwLaWBVu -EObjjvbdmfeXlnHZ -EPDLKvbdRXNdDMID -EPCjjvbdZLrDsmkm -EOcKjvbdUQpoUuHm -DnbkKvbdEzsqFMDJ -EOcLKvbdQlwayOUz -EPDKjvbdyzdnRhJI -DoDLKvbdwzHfGXeS -EOcKjvbdTvMPitBR -EOcKjvbdJbicRJcY -DoDLKvbdFVxpQNJe -DoDLKvbduLxXBTaX -DoCjjvbdLYpirzuG -DnbjjvbdvwMAvBWV -EPCkKvbdBiKbKiFj -DncLKvbdIryArmYM -DncKjvbdySmiNRag -DncKjvbdeEoRbWbj -DoDLKvbdjuwOECXw -EPDLKvbdFWZPomJe -EObkKvbdjcMLRGtg -DncLKvbdQwNccMHc -EPDLKvbdzQoMiJwA -DoDKjvbdmSYtzSdJ -EOcLKvbdelfWgMjL -EOcLKvbdiMFENuCy -EPCkKvbdezvZEhsw -EPDLKvbdUVlPisaR -EPDKjvbdbKlGOmcA -EObkKvbdzGyMANEw -DoDKjvbdXFxzUAPT -EPDLKvbdqrUkNkAm -EOcKjvbdPxmAGsSK -EOcLKvbdyfyMAMeX -EObjjvbduDDUwVoP -DncLKvbdyYJJbQZk -DoDLKvbdxVNEqYkn -EPCjjvbdNPxRWOHT -EObkKvbdYqNEiNEq -EPDKjvbdXrlAlsoY -EPDLKvbdbrcKtEJa -EObjjvbdGdKvJbJj -DoCjjvbdrDeJPnVa -DoDKjvbdZLrETnMN -DoDKjvbdKVuGDeGi -DoCkKvbdZtJIyETO -EObjjvbdYSlAlsoY -DoDLKvbdCSaDUGWr -EObjjvbdmfeYNNgZ -DoDKjvbdtumwiqTA -DncKjvbdqFdEtWAh -EPCkKvbdauCHXjtI -DnbjjvbdvOszqKoU -EOcKjvbdxrnImSBg -DoCkKvbdjvWmdBww -EPCjjvbdmuUzKiqf -EObjjvbdNdcsiIjd -EOcLKvbdNPxRVnGs -EObkKvbdSPsgKFdX -EPDLKvbdVAbQsQqy -EPDKjvbdVZHsyjoO -DncKjvbdJzofXdAN -EObkKvbdFjeTChNV -DnbjjvbdjJegjNXr -DnbkKvbdZLrDsnLm -DnbjjvbdbAueGQQX -DncLKvbdQcbaQQdS -DnbjjvbdFjdrbglu -DncLKvbdAMgxsWyx -DnbjjvbdRpUHKGDw -DncLKvbdMfcPlpVL -EObjjvbdIwtBhMRQ -EPCkKvbdelfXGmKL -DoDLKvbdFkErbhMu -EPCjjvbdHffyyYXg -DoDKjvbdOEctJIkE -DoCkKvbdKkAgvAKZ -EObjjvbdzitopDsU -EPCjjvbdRpUHJfEX -DoCkKvbdZLrDtNkm -EPCkKvbdijGIKNXr -DoCjjvbdxUmEpxlO -DnbjjvbdIxTbIMRQ -EPCkKvbdMfbpMotk -DncLKvbdjlbLzFGo -EObkKvbdrRtkNjaN -DnbkKvbdRosgKFcw -EPDLKvbdpfDeUWAh -DnbkKvbdkxsRryHU -EPCkKvbdkVvmcbXw -EOcKjvbdhficZWJu -EPDKjvbdCEQBWKMf -DoCjjvbdUyITzKoO -DnbjjvbdaNKbStmH -EPDLKvbdFWYpQMie -EObjjvbdhytekqNf -EObjjvbdeXyssqez -DnbkKvbdLAjgNCYR -DncKjvbdSBdFLiZL -EPDKjvbdBhkBjiGK -DoDKjvbdmajWxOmu -DoCjjvbdrMzJyMHi -DoDKjvbdZLqctOMN -EOcKjvbdnPzYujxb -DncKjvbddoFTKstS -DncLKvbdjcMLRGuH -DoCkKvbdbUagYKtI -DncLKvbdVAaqTRSZ -EPCjjvbdOEdTiJLE -EPCjjvbdJvUfEFHJ -DnbjjvbdIryBTNYM -EPDKjvbdYpleJNEq -DncKjvbdZGwEAOri -DncLKvbdBdQAvJmG -DoCkKvbdmIdTqUqa -EPCkKvbdtcCuWuno -EPCjjvbdmuUyjjSG -DncLKvbdjAQHApHK -EPCjjvbdGdKujBjK -EPDKjvbdYkrETmlN -DncKjvbdYORAYUut -DnbkKvbdiHKCxvJu -EPCjjvbdkHgLfGOL -DoCjjvbdpssfqqkU -EPDKjvbdZnmheEzK -EPDLKvbdySmhlrCH -EPCkKvbdjJegilxS -DoCkKvbdqcdhpNua -EPDKjvbdIHHZyXxH -DnbjjvbdjmBkydgP -DoCjjvbdYkqcsnLm -EPCkKvbdZnmhdeZj -EPDLKvbdDjIJuwjA -EOcLKvbdnQZxvKyC -EPCkKvbdBhkCKiGK -DnbjjvbdYkrDsnMN -DncLKvbdyzeNqghh -DncLKvbdrRuKmjaN -EPCjjvbdssRsYzEc -DoDLKvbdZQleJNFR -EObjjvbdZQleJMeR -EPDKjvbdtvNxJqTA -EObjjvbdbBWFGPpX -EPDLKvbdajkeoODA -EPDLKvbdSZihTCvA -EObkKvbdZMRdTnMN -EPCkKvbdsCFmLgKy -EObjjvbdVvhxVceH -EPCkKvbdaaVeFpQX -DoCjjvbdZQmEhleR -EOcKjvbdhzUfLpmf -EPCkKvbdREDBQRDr -DncLKvbdemFwHNJk -EOcKjvbdGAnqYizm -DncLKvbdtTRsZZdc -DoDLKvbdGGKRmhtR -DoDLKvbdIidAJogE -DoCkKvbdxZhGFxEr -DncLKvbdpxoHgREY -DnbjjvbdQcbaQRES -EPDKjvbdjAPfaPgK -EPCkKvbdvwMAuaWV -EOcKjvbdZLrDsnMN -DncKjvbdyqOlhiwA -EObkKvbdRacdkiYk -DoDKjvbdUWMQJsaR -EPDKjvbdUGzmkvvF -DoCjjvbdhbPDFXRR -EObjjvbdXGZZtAPT -EPCjjvbdMoxRWNgT -EOcKjvbdGFiqmhtR -DoCkKvbdNPxRWNgT -EObkKvbdyNrgxTJD -EPDKjvbdrXPkcJYq -EOcLKvbdFjeTChMu -DncKjvbdjvXNcaww -DncKjvbdkMbMZdgP -EOcKjvbdDnbkLXDE -EObjjvbdbBWFGPow -DoCjjvbdAMhZSwZx -EPDLKvbdZRNEiMeR -DoDKjvbdqdEiQNvB -DoCkKvbddePRavbj -EPDKjvbdaMjbStlg -EObkKvbdHgGyxxYH -EOcKjvbdtkxXBUAw -DnbjjvbdmSZUysEJ -EObkKvbdrXQLbhxq -EObkKvbdVTlsfMWK -DoDKjvbdSLZGUfjs -DoCkKvbdFVyPpMjF -DoCjjvbdhgKCyViu -EPCkKvbdZMSDtOLm -EPCjjvbdySmhlqag -EPDKjvbdWRmwadlD -EPCjjvbdqZPHfpdY -DoDLKvbdXsMBMsoY -DncLKvbdelewHMjL -EObjjvbdYpleImEq -DoDKjvbdZirgogBf -EOcLKvbdrXPlChxq -EPCkKvbdFVxpQMie -DoCkKvbdrNZjZMHi -EOcKjvbdDjIJuxKA -DncLKvbdeOeSkTsr -DoCjjvbdZoNhddyj -DoDKjvbdkWXNcaxX -DoDLKvbdTpqOtthN -DnbjjvbdehKuqnQg -EPCjjvbdmgFXlmfy -DncLKvbdShyiqAAl -EOcKjvbdKaKgNBwq -EPDKjvbdEztREkbi -EOcKjvbdVviXvEFH -EPDKjvbdcIlikGWx -EPCkKvbdUWLojUAq -EPDLKvbdOStWHEtp -DoCjjvbdHlBzmwRL -DnbjjvbdWIYVxHYz -EPDLKvbdADSXjZhp -EPDKjvbdRzJgrcWA -EObkKvbdxrnIlqag -EObjjvbdRosgKFcw -DoDKjvbdkySrTYgU -DncKjvbdsrqrxydc -EPDLKvbdZyEKODLr -EPCjjvbdEXxMUUTl -EOcKjvbdtcCtwWOo -DncLKvbddndrkTtS -EPDKjvbdrafMkfjy -EPCjjvbdJcJbpibx -EObkKvbdFfJqnIsq -EPCkKvbdyNsHwriD -DoCjjvbdaRebgsfL -DnbjjvbduoTzpjnt -EPCjjvbdZGvdAOsJ -DoDKjvbdmozYujyC -EPDKjvbdZGvdAPSi -DnbjjvbdmSYtzTDi -DoCjjvbdRotGjFdX -EObkKvbdSBceLhxk -DoCjjvbddijRvUzn -EObkKvbdMgDQNPtk -DoCkKvbdFVxoomKF -DncKjvbdGcjujBjK -EPDKjvbdBcpAvJlf -DncLKvbdLBLHNCYR -EObkKvbdmIctQtrB -DoDLKvbdFpATXGey -EPCkKvbdbrbkUDjB -DncLKvbdcTCjtEJa -DncLKvbdBsAbsfXS -EPDKjvbdFpATXGfZ -DoDKjvbdwuMeQxlO -EObkKvbdqUUGqrKt -DncKjvbdZyEKODLr -EPDKjvbdjhHLefNk -EPCkKvbdrbFmMGjy -DoCkKvbdsQWOjCvG -DoCjjvbdLBLHMbXq -EObjjvbdrpVnicVf -EPCjjvbdVqmwaeMD -DncLKvbdRNYCYnUz -EObjjvbdRXNdCkhD -DncKjvbdIHHZyYXg -DnbjjvbdyTOJMrCH -DoDLKvbdUsmUFkuj -DncKjvbdQcbaPqES -DnbkKvbdmgFYNNgZ -EOcKjvbdkySrTYgU -DoCjjvbdHlBzmwQk -DnbjjvbdaSFcITek -EObjjvbdQdCaPqDr -DncKjvbdxVMdpyLn -EOcKjvbdiMEdOVCy -DoCjjvbdRosgJecw -DncLKvbdkDMLQftg -EPCkKvbdKDKCqKDY -DoCjjvbdjvWnDaww -EOcLKvbduVnYJpsA -DoDLKvbdWRnYBdlD -DoDKjvbdssSSxzFD -EPDLKvbdJYTaglRQ -EOcLKvbdhzUfLpmf -DoDLKvbdJutfDdgJ -EOcKjvbdxmrgwrhc -EObkKvbdwWkaVaVu -EOcKjvbdxrmiMrBg -DoDKjvbdRDcApRES -DoCjjvbddjJrVtzn -EOcKjvbdxVNEqYlO -DoCjjvbdJJdAJofd -DoDLKvbdemGWfmJk -EOcKjvbdnPyyWKyC -DoCjjvbdbrcLTcia -DoDKjvbdjuvmdCXw -DncLKvbdtkwvaUAw -EOcKjvbdHDkViaij -EObkKvbdRDbaPpcr -EOcLKvbdtSqryZeD -EOcKjvbdrRuLOKaN -EOcKjvbdczYowyRC -DnbkKvbdjcMLQfuH -DncKjvbdmbJwYOnV -EPDLKvbdZnmiFEzK -EPDKjvbdjbkkQgVH -EObkKvbdJTZArmYM -DncKjvbdSPsgJfEX -DncLKvbduMYXBUBX -EObkKvbdkIHMFfOL -EOcKjvbdYORAYVWU -DoCjjvbdyzdmqghh -DncLKvbdtumwiqTA -EPDKjvbdQmYCZOUz -DoCjjvbdtcCtvvPP -EObjjvbdVTmUGMVj -EObkKvbdBsAcUGXS -DoCjjvbdqYngfqDx -EPCkKvbdtkxXBTaX -DoDLKvbdACqwiyhp -DncKjvbdraelkgKy -EPDKjvbduLwvaUBX -DncKjvbdpssgSSLU -EPCjjvbdIxTbHlRQ -EPDKjvbdPyNAGrqj -DoDLKvbdnCJvxOnV -EObkKvbdZRNFJNEq -DoCjjvbdFxuVBEYC -EOcKjvbdVAbRSpqy -DnbjjvbdJbibqKDY -DoDLKvbdKCicQjCx -EPCjjvbdNrtVgFUp -EOcLKvbdZQleJNEq -DoDLKvbdaRebgsfL -DoCkKvbdCIjakIej -EOcLKvbdBraDUGWr -EPDLKvbdADRxKZiQ -DoCjjvbdHkazmvpk -EPDKjvbdUsltGLvK -EOcKjvbdTkvOaVoJ -DncLKvbdZnmiEdyj -DoDKjvbdZtJJYdSn -DoDLKvbdbiNJjfWx -DnbjjvbdIsZBTNYM -EPCkKvbdhbPDEvpq -DncKjvbdqlyjYlIJ -DoCkKvbdbsDLTcia -DoDKjvbdKCjCqKCx -DoDLKvbdnBiwYOmu -DnbkKvbdjKGIKMwr -EPCjjvbdHgGyxxYH -EOcLKvbdcyxpXxqC -DncLKvbdlZSrSyGt -EPCjjvbdTAFIhCPE -EObkKvbdZdwfzgiC -DoDLKvbdSLYfUgLT -DoCjjvbdRMwayNtz -DnbjjvbdCflGHAzc -DoCjjvbdrJAKFNOe -EPCjjvbdjblKpgUg -EPDLKvbdQccAoqDr -DnbjjvbdCJKbKhfK -EPDLKvbdiGibyWJu -EOcLKvbdyNsHxShc -EPDLKvbdmIcspuSB -DnbjjvbdnGdxNOHZ -DoCkKvbdhzVGMRNf -DoDLKvbdeFPRawDK -EObjjvbdsQWOjCvG -EObkKvbdhzUelQmf -EObkKvbdeJirWUzn -DncLKvbdxxIibPzL -EObkKvbdSBceMIxk -DoCkKvbdehKvRmqH -EObjjvbdRbDeLiZL -EObjjvbdGYtuAdYC -DnbjjvbdHDkVibKK -DoCjjvbdKQyeOfNe -DoCkKvbdmbJvxOmu -DoCkKvbdULvOaWPJ -DncLKvbdrWpMCiZR -EObjjvbdhytfLqNf -DoCjjvbdgPazvdXh -DoCjjvbdiHKDYuiu -EPDKjvbdRWnDbkhD -DncLKvbdrMzKZLhJ -EObkKvbdyXhiaoyk -EPCkKvbdjmCLydfo -DnbkKvbdDxYMUTsl -EPDKjvbdxmrgxSiD -DnbkKvbdmSYtyrci -EPCjjvbdqvokcIxq -DoDLKvbdXsMAmUPY -DncKjvbdDoDKkWcE -EPCkKvbdMgDPmQUk -DoDLKvbdKyQirztf -EPCjjvbdmajWwnmu -EOcLKvbddCSlrATm -EPDLKvbdrJAKElne -DoCkKvbdIsZBTMxM -DnbkKvbdffMZnGgA -EOcKjvbdJcKDQjDY -EObjjvbdxsOJMrCH -EObkKvbdEKHiuwjA -DncKjvbdunszpjnt -DoDLKvbdZjTIQHCG -DnbjjvbdsQVnibvG -DnbkKvbdGQATXHGZ -DnbkKvbdBsBDTfXS -DoCkKvbdBsAbsevr -DoCkKvbdRXNdDLhD -EPCjjvbdRadElJZL -DnbkKvbdxwhibPzL -EOcKjvbdCJLBjiFj -DncLKvbdZMSDsmkm -DoDKjvbduaEZSoFI -EPCjjvbdhgJbxujV -EOcLKvbdCJLBjhfK -DoCkKvbdZisHpHBf -DoCkKvbdqFdFUWBI -EPCkKvbdDGlFgAzc -DncKjvbdZxcjNblS -EPDLKvbdLqvmZuQz -DoDKjvbdxZhGFxFS -EObkKvbdZdxGzhIb -DoDLKvbdqwQMChyR -DoCkKvbdjlalZeGo -DncKjvbdZRNEhldq -EPCkKvbdZHXEAPSi -DoDKjvbdDoDLKwCd -DnbkKvbdmbJwYPNu -DncKjvbdMfcPlouL -DoCkKvbdQwODblHc -DoCjjvbdNQYQunGs -DnbjjvbdlqxtzSci -EOcLKvbdrDdhpNua -DncLKvbdKefICApu -EPDKjvbdatagXkUI -DoCjjvbdaofgDkzd -EObkKvbdIrxaTMwl -DncLKvbdSLYfVGkT -EPCkKvbdelevfmKL -DncKjvbdFfKSOIsq -EObjjvbdfILVqnQg -DncLKvbdZjShPgCG -DoCjjvbdrNZixlHi -DnbkKvbddoFTKstS -EOcKjvbdWSNwbFMD -EPDLKvbdpxngfqDx -EOcKjvbdIHGyxxYH -EOcLKvbdvwMAuaVu -EOcKjvbdkxrqryGt -DncLKvbdZjShQHBf -DnbjjvbdiUzEvquC -EObkKvbdpxoHfpcx -DoCkKvbdGAoRZJzm -EOcKjvbdehLVrOQg -EPDKjvbdkDMLRGuH -DnbkKvbdKCjDRKDY -EPCjjvbdLGFhBaRV -EPDLKvbdaMjbSuNH -DncKjvbdWfYzUAOs -DoCjjvbdsBelkfjy -DncLKvbdZnmheFZj -EOcLKvbdatagYLUI -EObkKvbdWXJXvEEg -DoDKjvbdZMRdTmlN -EPCjjvbdWXIwvEEg -DoCjjvbdkCkjqHUg -EPCjjvbdijFhJlxS -EPDKjvbdmSZUysEJ -DoDKjvbdMgDQMouL -EPCkKvbdrDdhomvB -EPCjjvbdRNXbYmtz -EPCkKvbdUtMtFlWK -DnbjjvbdGcjvJajK -EPDKjvbduaDyTOeI -DncLKvbdziuPocrt -DoCjjvbdcScKscjB -DncKjvbdmgExMmfy -EObjjvbdJcJcQibx -EPDKjvbdMpXpvNfs -EObkKvbdyqPNIjXA -EPCjjvbdCSaDUGWr -EOcKjvbdZnnJFEyj -EObkKvbdyOSgwriD -EPCjjvbdtkwwAtBX -DnbkKvbdDncLLXDE -EOcKjvbdZshhxcsO -DoCjjvbdxVMdpxlO -DncKjvbdLGGHaaQu -DoCkKvbdxUmFQyMO -EPDKjvbdpfEEsvAh -DoCkKvbdZRMdhldq -EPDLKvbdYzberJuy -EObjjvbdfHkWSOQg -EPDLKvbdRMxByNtz -DncLKvbdmoyyWLZC -EObkKvbdhtydvrVC -DoCkKvbdVhYWYGxz -EPDKjvbdbVCHXjsh -EPCkKvbdTlWPBVni -DncLKvbdFkEsCgmV -DnbkKvbdIsYaSlxM -DncKjvbdzaAOffbM -DncLKvbdaSFcHtGL -DoDLKvbdiGjDYuiu -EObjjvbdDigjVwjA -DncKjvbdqmZixlIJ -DnbkKvbdRjxfUgLT -EObkKvbdeAURNYKG -EPCjjvbdjvWnECXw -EPCjjvbdNQXqVmgT -DoDLKvbdxmsHxShc -EPCkKvbdqwPlChxq -DnbjjvbduLwwAsaX -DncKjvbduCbuWuno -DnbkKvbdJpydnenF -EPDLKvbdRXOEClID -DncKjvbdSKyFuGkT -DncKjvbdczZQYZRC -EPCkKvbdGZUtaDxC -EPCjjvbdOAJTUKSA -DnbkKvbdsZlQSaHn -DncKjvbduWNwiqTA -DoDLKvbdRNYCZOUz -DoCkKvbdVTmTfMVj -EOcLKvbdeATpmYJf -DncKjvbdbUbGxKsh -DnbkKvbdLZRKSztf -DncKjvbdcJMjLFwY -DnbkKvbdRadEkhyL -EPCkKvbdauBgXkTh -EObkKvbdrJAKFNOe -EOcKjvbdDnbjkXDE -DoDKjvbdrafMlGjy -EOcLKvbdliDtRVRa -EObjjvbdZjShQHCG -DnbjjvbdZnmiFEyj -EPDKjvbdbAueFpQX -EPCjjvbdVwJYVcdg -EObkKvbdijGIJmYS -DoCjjvbdJpyeOenF -DoDKjvbdYlSDsnMN -DncLKvbdehLVqmqH -DnbjjvbdTppnuVHm -EOcKjvbdSLYetgLT -EPCkKvbdZyEKOClS -DoDKjvbdHDjujBij -EPCkKvbdHkazmvpk -EObkKvbdkxrrTYft -EPCjjvbdOTUVfeVQ -DoCjjvbdYzbfSKWZ -DncKjvbdkxrrSxgU -EObjjvbdEOcKkXCd -EPDKjvbdcTCkTcia -DoDKjvbdatagXkTh -DoDLKvbdNHCpMpUk -DoDKjvbdhtzEvquC -EPCjjvbddePSBvbj -DoDLKvbddneTLUUS -DncLKvbdijFhKMwr -EPDLKvbdpxoIHRDx -DncLKvbdqquLOKaN -EPCkKvbdSCEEkiZL -DoDLKvbdvAdYroEh -DncLKvbdDwwksstM -EOcKjvbdKWVFcdgJ -EPDKjvbdZnmhdeZj -DoCjjvbdJSyBTMxM -DoDLKvbdtcDVXVoP -EOcLKvbdbAudfPow -EPCjjvbdpfDdtWAh -DncKjvbduCcUwWOo -DnbjjvbdGFirOItR -DnbjjvbdLBKgNBxR -DnbjjvbduVnYJpsA -DnbjjvbdjuvnDbXw -DoDKjvbdFkFTDINV -EOcKjvbdEvZQQMie -DoCkKvbdMfbolpUk -EPCjjvbdhbPCdwQq -DoDKjvbdZyEKNblS -EPCjjvbduCbtwWPP -DnbjjvbdgLGzbfAE -EObjjvbdqGDdsvAh -EPDLKvbdNGbolotk -DoCkKvbdSPsfifEX -DncLKvbdbVCGwjsh -EObkKvbdijGHjMwr -DnbjjvbdRosfifDw -DoCjjvbdQccApRDr -DoDKjvbdqTtHSSKt -EOcLKvbdsQWPJcVf -EObkKvbdeOdsLTsr -DncLKvbdcTDLUDjB -DoDKjvbdVgwvXfxz -EOcKjvbduoTzqKnt -EPCjjvbdYNqAYVWU -EObjjvbdemGXGmJk -DoCkKvbdVgxWXfxz -DoCjjvbdqlzKZLgi -EPDLKvbdLFfHaaQu -DnbkKvbdcSbkTcjB -EObjjvbdgGLzNgHA -EObjjvbdZjSgpGbG -DnbjjvbdGckVjBij -EOcLKvbdUMVnaWOi -EObkKvbdrylQSaHn -EPDLKvbdZHWdAOri -DoDKjvbdyfxlAMdw -DnbjjvbdZMSDsnLm -DoDKjvbdOTUVgEtp -DnbkKvbdJSxaSlwl -DncKjvbdkNCLzFGo -DoDKjvbdfMevgMik -DnbjjvbdMgDPlpVL -DncKjvbdqquLOLAm -DoCkKvbdfNFwGlik -DncLKvbdpxnhHRDx -DoDLKvbdZMRdTmlN -EPCkKvbdURRPVVHm -EPCkKvbdmgEwmOHZ -EOcLKvbdVAapsRSZ -DoCjjvbdczZPwxpb -EPDLKvbdWXIxWDdg -EPCkKvbdUVlQJtBR -EOcKjvbdelfWgNJk -EPDKjvbdUtMtFkuj -DnbjjvbdRkZFtfjs -EObkKvbdCJLCLJGK -DoDLKvbdKVuGEEgJ -DncKjvbdIxTbHkqQ -DncLKvbdMSWlzUpz -EPCkKvbdKefICAqV -EOcKjvbdtunXjRTA -DoDLKvbdZMSETmlN -EObkKvbdapHHELzd -EObkKvbdmRxtyrdJ -DoCjjvbdtTSSxzEc -EObjjvbddeOrBvbj -DncLKvbdJYUBgkpp -EPCjjvbduLxXBUAw -DnbjjvbdSLYetfjs -DncKjvbdzQnmIiwA -EPCjjvbdRpUGjFdX -EOcLKvbdddnqbWcK -EOcKjvbdWWhwucdg -EOcLKvbdCWzdJEov -EPDKjvbdTkuoAuni -DncLKvbdqUTgSSLU -DoDLKvbdNHDQMotk -DncLKvbdWXJXvEEg -EPCjjvbdaNKaruNH -EPDLKvbdraelkfjy -DncLKvbdLqvmZtpz -DnbjjvbdNddThhkE -DoDKjvbdzoQQdcLx -EPDKjvbdYpldiNFR -EObjjvbdZtJIyDsO -DoCkKvbdWWiYWDeH -DoCkKvbdeEoSBwDK -DoCjjvbdBsAcTevr -EObjjvbdqvpMChyR -EPCjjvbdsCGMlHKy -DnbkKvbduLwwAtAw -EObkKvbdMRwMyuQz -DncLKvbdwWlAuaWV -DncLKvbdHgHZxwxH -DncKjvbdBsAcTewS -DoDLKvbdJpyePFme -DncKjvbdVUNUFlWK -DncKjvbdEYXktTtM -DncLKvbdwMvANDeN -DnbkKvbdtSrTZZeD -EOcLKvbdJYUBhMRQ -DncKjvbdlYrrTZGt -DoDLKvbdliDsqUrB -EObjjvbdegjuqnQg -EObjjvbdlZSrTZHU -DncLKvbdfNGWfljL -DoDLKvbdLFegbBQu -DncLKvbdemGXGmKL -EPDKjvbdDwwksssl -DnbjjvbdxmsIYTJD -DoDLKvbdBsBCtGWr -DoCjjvbdIsYaTNYM -DncKjvbdJuuGEEgJ -EObkKvbdkySqsYgU -DnbkKvbdNPwqWNfs -EPDLKvbdmIdTptrB -DoDLKvbdyqOmIjXA -EPCjjvbdhkeEOUcZ -DoDKjvbdJqZePFme -EPDLKvbdfSAvzlCo -EObjjvbdbhljLFvx -EOcLKvbdaMkBsUmH -DoCjjvbdKyRKSzuG -EObjjvbdcSbjtEJa -EOcLKvbdkHflGFmk -DoDLKvbdemFwHMjL -EObjjvbdSLZGVHLT -DoCjjvbdJXtCILpp -EOcLKvbdaaVdfPow -EOcLKvbdFpATWgGZ -DoCjjvbdxZgeewdr -EObkKvbdeEnqawCj -EObjjvbdhytfMQmf -DnbjjvbdoznEKxPA -DnbjjvbdoAKzsgdO -DoCkKvbdYzbfRivZ -DoDLKvbdqqtkOKaN -DncLKvbdqvokcJYq -EPDKjvbdOStVfeUp -DoDKjvbdZxcinDLr -DoCkKvbdcyyQYYqC -EObkKvbdcIlikGWx -EOcLKvbdffLzNgHA -EPCjjvbdMtsRkNAX -EOcKjvbdpeceTvBI -EOcKjvbdZsiIxcsO -DncLKvbdJvVGDdgJ -DnbkKvbdZMRdTmlN -EPDLKvbdnCJwXnnV -EObkKvbdxUldqZLn -EPCjjvbdNddUJIkE -DoCjjvbdyYJJapZk -DnbjjvbdpxoHgQcx -EObjjvbdHDjvKBij -DncKjvbdUtNUFlWK -EPCkKvbdkVvmdBww -DnbjjvbdgGMZmgHA -DoDLKvbdmIdTqVSB -EOcLKvbdzitpPdTU -DncLKvbdkxrqrxgU -DoCjjvbdVBBpsRSZ -EOcLKvbdGFiqmiTq -EOcKjvbdxsOJMqag -DoCkKvbdHDkVjCJj -EPDKjvbdjSziTKiz -EOcKjvbdCTAbsewS -EPCkKvbdkWWnDbYX -DoDLKvbdJSxaTMxM -DoDLKvbdMoxRWNgT -DoDLKvbdmuVZkJrG -EPDKjvbdbUbHXjtI -DnbjjvbdkWWnEBxX -EOcLKvbdnPyxukZC -DnbjjvbdXrlBMtOx -DoDLKvbdJuuGEFGi -EPDKjvbdUaBprprZ -EObjjvbdsrqrxydc -EObjjvbduCbtwWOo -DoCkKvbdSLYeuHLT -DoDKjvbdKQyePFme -EOcKjvbdeYZssrFz -DoDKjvbdpxoHfpdY -EPCkKvbdcIljKfXY -EPDKjvbdDwwksstM -DnbkKvbdsQWOicVf -EPDLKvbdIidAKQHE -DoDLKvbdrDeJPnWB -EOcLKvbdZoNiEeZj -EObjjvbdptTgRrLU -EPDKjvbdmRyUzTEJ -DoDLKvbdFxtuBEYC -DnbkKvbdehLVqmqH -EPCjjvbdUtNUGLuj -DoDLKvbdxVNEqZLn -DncKjvbdySnImRbH -DoCjjvbdbLMGPNcA -EPCkKvbdzQoMiKXA -DnbkKvbdbiMijevx -EOcKjvbdSQTfiedX -DnbjjvbdZisIQHBf -EObkKvbdYpleIldq -DncLKvbdjmBlZeHP -DncKjvbdSCDdkhxk -DnbkKvbdrykpTAgn -EObkKvbdZQldiMeR -DnbjjvbdeYZssqez -EPDLKvbdlYrrSyHU -EOcLKvbdTpqOttgm -EOcKjvbdCJLCLIej -EPDKjvbdUQqOttgm -EObkKvbdGBOqZJzm -DncKjvbdqwQMDIyR -EPDKjvbdbBWFFoow -EOcLKvbdZMRctOLm -EPCkKvbdHEKuibKK -DnbjjvbdNddThiKd -DncKjvbdJuuFdEgJ -DncLKvbdRzJgsDWA -DncLKvbdRWmdCkhD -EPCjjvbdZRNFImEq -EOcLKvbdUaBqTRSZ -EObkKvbdWIXvYGxz -DoDKjvbdrRuKnKaN -DoCjjvbdYgXEAPTJ -DoCkKvbdwuMeQyMO -EPDLKvbdkHfkfFmk -DoDKjvbdTqQnuUhN -DoCkKvbdbKlFoODA -EObkKvbdrzLoraIO -DncLKvbdFxuVAdYC -DoCjjvbdZQldiMeR -EOcKjvbdJTZBTNXl -EPDKjvbdsQWPKCvG -EOcLKvbdeEoRawDK -EPDLKvbdtTSSxzEc -DncLKvbdliDsqUqa -DnbjjvbdZQleImEq -EPCjjvbdaSGDITek -DoDLKvbdRWnDbkhD -EPDLKvbdpedEsvAh -EPCkKvbdYpldhldq -DoCjjvbdZoOJEdyj -EOcLKvbdmoyxvKyC -EObjjvbdmSZVZsEJ -DoDLKvbdqUUGrSLU -EPDLKvbdmpZxujyC -EPCjjvbdCDpBVilf -EPCjjvbdFfJrNhsq -DoDKjvbdsZkosBIO -DnbjjvbdiBnbdvpq -DncKjvbdkDMKpftg -EPCkKvbdatbGxLTh -DoCjjvbdJTYaTNXl -DnbjjvbdhkdcnVCy -DncLKvbdyNrgxTIc -EPDLKvbdyNsHwriD -EPDLKvbdBdQBVilf -DoDLKvbdIsYaTNXl -DnbkKvbdkxsSTZHU -EPCjjvbdBsBDUGWr -EOcLKvbdgQBzwDxI -DnbjjvbdjblLQfuH -DnbkKvbdbVBgYKsh -DncLKvbdMgComPuL -EPDLKvbdqceIpOVa -DnbjjvbdqFceTvAh -EPCjjvbdFWYpQNJe -DoDLKvbdHDjujBjK -DncLKvbdIHGyyXxH -DnbjjvbdeFOqawCj -DoDKjvbdGQASwGfZ -DncLKvbdrWokbhyR -DncKjvbdSKyFtfkT -DoCkKvbdemFvfmKL -EPDKjvbdxsNhmRbH -EOcKjvbdsPunicVf -EObjjvbdrbGNMGjy -EPDLKvbdOXoVzcnU -EOcLKvbddZxpYYpb -DoDKjvbdVBBpsRRy -EPDKjvbdHDkWKCKK -DoCkKvbdSiZjRAAl -EPDKjvbdURQoVVHm -DoCkKvbdpyPHgQdY -EOcKjvbdGAoQxizm -DnbjjvbdMpXpvNfs -DncKjvbddndrjtUS -DnbkKvbdlhcsptqa -DoCkKvbdfNFvfmKL -EPCkKvbdHffyxxXg -DoCkKvbdYpleImFR -DoCkKvbdbBVdfPpX -DncLKvbdWSNxBdlD -EPDKjvbdSQTfjFcw -EPCjjvbdkxrqsYgU -EPDKjvbdrovOjCvG -DoCjjvbdaSGCgsek -DncLKvbdZGwEAOri -DoDLKvbdJmADzHUa -DoCjjvbdNdcshiKd -DoCkKvbddneTLTtS -EObkKvbdMoxQumfs -DncKjvbdVgxVwfxz -DoDKjvbdGcjuibKK -EObkKvbdTqQnuUhN -DncKjvbdURRPUuIN -EObkKvbdbrbjtEJa -DnbkKvbdKQyeOenF -EObjjvbdbKkfOnDA -EPDLKvbdlhdTptrB -EObjjvbdxnTHxTJD -EObjjvbdKCjCpjDY -DoDLKvbdMSWmZtpz -DoCkKvbdBsBCsfXS -DnbkKvbdfRaWzkcP -EPDKjvbdbAvFGQQX -DoCjjvbddoFSjtUS -DnbjjvbdypoNJJwA -EPDKjvbdzdzOzdyp -EObjjvbdJpzEoFme -DoCkKvbduCbuXWPP -EPCkKvbdFfJrOItR -DoDLKvbdkIGlFfOL -DnbjjvbdbAudfPpX -DoDLKvbdtAHRIABS -EOcLKvbduDCuWuno -DoDKjvbdkHgLfGNk -EOcLKvbdxZhFeweS -EObkKvbdUxgszKoO -EOcKjvbdiBoCeXRR -DnbkKvbdZeXfzhJC -EObkKvbdtcDUvvPP -EOcKjvbdMtrrLNAX -DnbkKvbdWXJYVceH -DnbkKvbdJbjCpibx -EPCkKvbdajlFnnDA -DnbjjvbduaEZTPEh -EOcKjvbdGcjuibJj -DncLKvbdKefHbAqV -DoDKjvbdUxgtZjnn -EPCjjvbdVZITzKnn -EPDKjvbdHkaznXRL -DnbkKvbdOEdTiIkE -DnbjjvbdiGjDYvJu -DoDKjvbdnUtykJrG -EPCkKvbdBdQBWKNG -EPDKjvbdsBemLfkZ -EPCjjvbdtumwiqTA -EOcKjvbdnCKXYPOV -DncLKvbdVwIxVdFH -DnbjjvbdWIYWYGxz -EObkKvbdFpATXHFy -DoCjjvbdauBgXjtI -DnbkKvbdTqROuVHm -DnbjjvbdlhcsqUqa -EPDLKvbdxZhGGXeS -DoDLKvbdZjTHogCG -EOcKjvbdbKlGOnDA -EObjjvbdLiBlRYAS -DncKjvbdxrnJMrCH -EOcLKvbdMJBlRYAS -EOcKjvbdUsmTekuj -DnbjjvbdEYYMTssl -EObkKvbdZMSEUNkm -DncLKvbdGGKSNhsq -DoDKjvbdGZVVAdXb -EPDKjvbdKRZdoFnF -EOcLKvbdEXwlUTtM -DoDKjvbdEztQeLcJ -DoCkKvbdJYUBglQp -DoCkKvbdJTZAsNXl -EObjjvbdvmWAMdEm -EPCjjvbdxZgefYFS -DncKjvbdtTRrxzEc -EOcLKvbdiGjDZWJu -DoCkKvbdYlRctOLm -DncKjvbdDxXlTtUM -EPCjjvbdcyxpYYqC -EOcLKvbdqGDeUWBI -DnbjjvbdnPyxvLZC -DoDLKvbdKefHbApu -DoCkKvbdjblKqHVH -EObkKvbdTfzmkvue -EOcKjvbdZnmiEdzK -EOcKjvbdDxXkstTl -EPDLKvbdBdQAujMf -DoDKjvbdGZVVBDwb -DoDLKvbdEvZPpMie -EPCjjvbdVwJXuceH -DoDLKvbdRjyFtgLT -DoCkKvbdXsLaNTnx -DnbjjvbdDHLfHAzc -DoCkKvbdVBCQrprZ -DoCkKvbdyNsIYShc -EPDKjvbdyXiJbPzL -DoCjjvbdUsltFlWK -EPCkKvbdcyyQYZRC -DnbkKvbdddnqbWbj -EPCkKvbdmuUyjjSG -EObkKvbdZyDinDLr -DnbjjvbdZtIiZESn -EPCjjvbdVBCRTRRy -EOcLKvbdCWzciFPv -EObkKvbdrEFJPnWB -DnbkKvbdqUUHSRkU -EPDLKvbdlqyUyrci -DoCjjvbdIMBznXQk -DoCjjvbdUxgsykOn -EPCjjvbdXsMBMsnx -DncKjvbdjuvmdBxX -EOcLKvbdkIGkeemk -DoCjjvbdjKGIKNYS -EPDLKvbdSLZGVGjs -EOcKjvbdMfcPmQUk -DoCjjvbdrNZjYlIJ -EOcLKvbdkyTSTZHU -EObjjvbdjAQGaQHK -EPDKjvbdMoxRVnHT -EObkKvbdeATpmXif -EObkKvbdFjdsDHmV -DncLKvbdbLLfOmcA -EPCkKvbdunszqLOt -DnbkKvbdnQZxvLZC -DncLKvbdZyDjNblS -DnbkKvbdptTfrSKt -DoDLKvbdzaAOgHCM -EPCjjvbdhbPCeXRR -DnbkKvbdmuVZkKSG -DoCkKvbdziuQQESt -DnbkKvbdhgKDZWKV -DnbjjvbdULuoBWPJ -DncLKvbdWXJXucdg -DoCjjvbdRacdlJYk -DoDLKvbdegjvSNqH -EOcLKvbdnUtzLKRf -EOcKjvbdFxtuBEXb -DoCkKvbdmIcsqUrB -EObjjvbdULvPAvPJ -EOcLKvbdSwkLmzkY -EPCkKvbdSZjITCvA -EPCkKvbdeOdrjtUS -EPCjjvbdIxUBhLpp -EObkKvbdqiAJeMoF -DnbkKvbdhlEcmtcZ -EOcLKvbdFejRnJTq -EOcKjvbdwXMAvBWV -DoDKjvbdmpZyWLZC -DoCjjvbdGLErbhNV -DoDLKvbdmaivwnmu -EOcLKvbdOXoVzcnU -DncLKvbdBhjbLJGK -EPDKjvbdZjTIQGaf -DoCkKvbdgPazwEYI -DncLKvbdGGKRmiUR -EObjjvbdfHkWRmpg -DnbkKvbdXrkaNUPY -EPCkKvbdzQoMhiwA -EOcKjvbdrpWOjDVf -DncKjvbdZtJJZDrn -EPDKjvbdqZOggRDx -DnbjjvbdhgJbyWKV -DoDKjvbdiVZdwRuC -DoDKjvbdIwtCHkpp -DoDKjvbdVAapsRRy -EPDLKvbdwjvcgzzG -DoDLKvbdRyihScWA -DoDLKvbdrRuKmkAm -DnbkKvbdqGDdsuaI -EPCkKvbdAMhYrwZx -DncKjvbdSPsfjGEX -DncKjvbdczYpXxpb -DoDLKvbdkIHMGFmk -EPCjjvbdkClKqHUg -EObkKvbdxVMdqZMO -DoDKjvbdBdQBVjMf -EObkKvbdZjTHpGbG -EPDKjvbdTfzmkvue -EPCkKvbdLAjfmCXq -DoCjjvbdLGGHbApu -EPDKjvbdEzsqEkcJ -DoDKjvbdwygfGYFS -DoDLKvbdhgJbyWKV -EPDLKvbdZshiZETO -EPDLKvbdKWUfDdfi -DnbkKvbdqYoHgQcx -DncKjvbdnGeYMmgZ -EPDKjvbdKCjDRKDY -DoCkKvbdJcKDQibx -EObkKvbdZoNiFFZj -EPCkKvbdUyHsykPO -EOcKjvbdtvNxKQsA -EObjjvbdatafwjtI -DoDLKvbdhzVFkpmf -EObkKvbdMgComQVL -EPCkKvbdSCEEkhxk -DoDLKvbdgFlZnGgA -EObjjvbdZMSETnLm -EObkKvbdtumxKQsA -EObjjvbdZoOIddyj -EOcLKvbdqZOggQcx -EOcLKvbdKfFhBaQu -DncLKvbdzGxlANEw -EObjjvbdehLWRnQg -EObkKvbdEPCjkWbd -EObkKvbdqYnhHRDx -EObkKvbdjvXODaww -DnbjjvbdqTsgSRkU -EOcKjvbdTqQoVVHm -DnbjjvbdQmYBxnUz -DnbjjvbdpyOhGqEY -EOcLKvbdLGGHbAqV -EObkKvbdZirgpHCG -EObkKvbdqYnhGpcx -DncLKvbdrbGNLgKy -EObkKvbdkySrSxgU -EOcLKvbdeAUQlwjG -DncKjvbdkVwNdCYX -DoCjjvbdJvVGDeHJ -EPCkKvbdEuyPpNKF -EOcKjvbdDjHivXjA -DnbjjvbdkNCLydfo -EPCjjvbdZjTHogBf -DoDKjvbdGKeTDINV -DnbkKvbdJXtBglQp -DnbjjvbdFejSOIsq -EOcKjvbdhytelRNf -DnbjjvbdbBVdeopX -DoCkKvbdFjdsDINV -DoDLKvbdjvXNcbXw -DnbkKvbdZdxGzhJC -EPDLKvbdjAPgBQGj -EObjjvbdJXsbHkqQ -EPDKjvbdiVZdwRtb -EObjjvbdGFjSNiTq -EPDKjvbdznpQdbkx -EPCjjvbdemFvgNKL -EPDKjvbdWXIxWEEg -DncLKvbdEObkKvcE -DnbjjvbdLAjfmCYR -EPDLKvbdEXwkstTl -EObjjvbdFfKSNhsq -DncKjvbdygZMANFX -EPCkKvbdYqNFIleR -DoCkKvbdSKyGUgLT -DncKjvbdBdQBVjNG -DnbkKvbdbUagYLTh -EOcKjvbdsPunjDWG -DncLKvbdrEFIonVa -DncKjvbdaSGChTfL -DoCkKvbdcJNKKfXY -EObkKvbdULuoBWOi -DncLKvbdKWVGEEgJ -EPCkKvbdqFdEsuaI -EPDKjvbdAMgySvyx -DncLKvbdiUzEwRuC -EObjjvbdZoNheEzK -DnbkKvbdZLrETnMN -EObjjvbdKWVFcdfi -DoDLKvbdcScLUEJa -EPCkKvbdIwsbIMRQ -EOcKjvbdsBemMHKy -EOcLKvbdzitoodSt -EPDKjvbdrMyjZLhJ -DnbjjvbdaRfCgsfL -DoCkKvbdKQzEnenF -EOcLKvbdUGznLvue -DncLKvbdZxcinCkr -DnbjjvbdEuyPpNKF -DncKjvbdGFirOIsq -EOcLKvbdVqmxBeMD -EOcLKvbdwuMeRZLn -DnbkKvbdBhkBkIej -EOcKjvbdNQXpumfs -EObkKvbdVBCRTRSZ -DoDLKvbdZeYGzhJC -DncLKvbdREDBPqES -DnbjjvbdvBEZSoFI -EPCjjvbdakLeoNcA -EPDLKvbdeFOqbWbj -EPDLKvbdiGicZWJu -EPCkKvbdEKHiuwjA -EPCjjvbdwkWcgzyf -DoDKjvbdmpZyVkZC -EPCkKvbdSZihSbvA -EPDKjvbdelevfmKL -DnbjjvbdeATplwif -DoCjjvbdGAnpxizm -EPDKjvbdTlWPBWOi -EOcKjvbdmSYtzTEJ -DncLKvbdnGeXmNfy -DoDKjvbdTIzJqAAl -EOcKjvbdqdEiPnVa -EOcKjvbdcTCkUEKB -DoCjjvbdEvYopMjF -DoDLKvbdwuMdpyMO -EPDKjvbdEuyQPlie -EOcLKvbdVUMsfMVj -EObjjvbdijFgilxS -DoDKjvbdnPyxujyC -EOcKjvbdTAFIgbPE -DnbkKvbdZxdJnDLr -DncLKvbdqdEiPmua -EOcKjvbdhgJcZVjV -DnbkKvbdRbEFLhxk -DoDKjvbdmaivwoNu -DoCkKvbdZQmFJMdq -DncLKvbdeYZtTqez -EObkKvbdqYoIGpdY -DnbjjvbdEASJMyvw -DoDKjvbdwzHfGYFS -DncKjvbdjvXOECYX -DncLKvbdbBVdepQX -DoDLKvbdrEFIomua -DnbjjvbdYgWdAOsJ -EOcKjvbdkMakydfo -EPCjjvbdegkWSNqH -EPDLKvbdYlSEUNkm -EPDLKvbdzRPMhjXA -DnbjjvbdmSZUyrci -EPDKjvbdiiehKNXr -EPDLKvbdwzIGGXdr -DncKjvbdSLYetfkT -EOcLKvbdURROtuHm -EPDLKvbdEYYLtUUM -EOcLKvbdaSGDIUFk -DnbkKvbdhfibyViu -DncKjvbdeFOqavcK -EPDLKvbdZtIhyETO -EOcKjvbdsPuoKDVf -DoDLKvbdBhkBjiGK -EPDLKvbdnQZyVkYb -DncLKvbdNsTugEtp -EPCjjvbdCDpBWJmG -DoCkKvbdmIdTqVRa -EOcKjvbdptUHRqjt -DnbjjvbdRpTfifDw -DncKjvbdaRebgtFk -EPDLKvbdEARiMyvw -EOcKjvbdyNsHxShc -DoCkKvbdxKwDgzyf -DncKjvbdwuNFQyLn -DncLKvbdegjvSORH -DncLKvbdOStWGdtp -EOcLKvbdcTCkTdKB -DncKjvbdRECaQRES -DoDLKvbdkIHMFemk -EPCkKvbdfjfzcGAE -DncKjvbdZLqdTnLm -EOcKjvbdIMBzmwRL -EOcKjvbdwzHeexFS -EPCjjvbdKVuFdFHJ -EPCjjvbdRXODcLgc -DoDLKvbdlrZVZrdJ -EPDKjvbdjKGIJmYS -EObkKvbdHEKujCJj -DncKjvbdNddTiIjd -DoDKjvbdZjSgpGaf -DoCjjvbdmfeXlnHZ -EPCjjvbdRosfifDw -DoCjjvbdZxcinDLr -DoCjjvbdNeDsiIjd -EPDKjvbdVgxVwgYz -DnbkKvbdqTtGrRjt -DnbkKvbdTqQntuIN -DncKjvbdBvzdJEpW -EPCjjvbdqUUHRrLU -DnbjjvbdqcdhonWB -DncKjvbdHDkWKBjK -DnbkKvbdxVMeQxlO -EObjjvbdkClKpgVH -EOcLKvbdCSaDUGXS -DncLKvbdUQqOttgm -DoCkKvbdZxcjOClS -EPDKjvbdVqmxCFMD -DnbjjvbdqmZixlHi -DnbjjvbdiUydvquC -DoCkKvbdOTTugFVQ -EOcKjvbdUQpoVVIN -DoCkKvbdNHDPlpVL -EOcLKvbdDncLKwCd -EOcLKvbddeOrCXCj -EObjjvbdqvolChyR -EOcLKvbdaofgELzd -DoDLKvbdrpVoKDWG -DncKjvbdaMjasUmH -EObjjvbdliETqUrB -DncLKvbdXsLaMtOx -EObkKvbdrykpTAhO -EPDKjvbdehKvRmpg -EObjjvbdUxhTzKnn -DncLKvbdTfznMXVe -EPDLKvbdqUTfqqkU -DoCjjvbdHELWKCKK -DoDLKvbdwuNFQyMO -DoCjjvbdffLynGgA -EOcLKvbdSLYetfkT -EPDKjvbdtTRryZeD -EPDKjvbdddoRbXDK -DoDKjvbdFVxooljF -DoDLKvbdxsNiNSCH -DoDLKvbdsCGNMGkZ -EOcLKvbdkHfkfFnL -EPCkKvbdqrUjnLAm -DnbkKvbdHELViajK -EOcKjvbdNHDQMouL -EPCkKvbdWWhxVdFH -DnbkKvbdUWMPitBR -DncLKvbdZoOJFFZj -DncKjvbdcIljKewY -DoDLKvbdVUNUGLvK -EObkKvbdNsTufdtp -DnbjjvbdGKdsCgmV -EObkKvbduDCtwWPP -EObjjvbdkMbMZeGo -EPCkKvbdJSyAsNXl -DnbjjvbdmbJwXnmu -EPCkKvbdRjxeuGkT -EObkKvbdaSFcITek -EPDLKvbdGYtuAdYC -DoDKjvbdFeirNiUR -EPCjjvbdhyuGMQmf -EObjjvbdDxYLstUM -EObkKvbdFfKRmhtR -DnbkKvbdyTNhmSCH -EPCjjvbdJSyAsNYM -EPCkKvbdEuxpQMie -DoDLKvbdkClLQgUg -DnbkKvbdssRrxzEc -EPDLKvbdRMwbZNtz -EPCkKvbdssSTYyeD -DoCkKvbdYqMeImEq -EOcLKvbdjuwOECXw -EOcKjvbdOTUWHFUp -EPCjjvbdliDtQtrB -EPDKjvbdZxdJmblS -DoDKjvbdbVCHXkTh -DoDKjvbdpstHSRjt -EOcLKvbdNPwpunGs -DoCkKvbdLAjgNCXq -DoCjjvbdDoDKjvbd -DoCkKvbdZirgpHBf -EPDLKvbdezuxdiTw -DoCkKvbdLrXMyuQz -DncLKvbdqlyjYkgi -DnbkKvbdLrWlzUpz -DoCjjvbdhytfLpnG -EObjjvbdxrmiNSBg -EPDLKvbdqquLNjaN -EObjjvbdiHKCyVjV -DncKjvbdjSziTKiz -EPCjjvbdCflGHAzc -EPCjjvbdZtJJZDrn -EPCjjvbdJKEAKQHE -EPDKjvbdIxTbHlRQ -EOcKjvbdZRMdhmEq -EOcLKvbdmttykJqf -DncLKvbdEzsqFMDJ -EPDKjvbdJuteceGi -EOcKjvbdemFvfmJk -DoCkKvbdkySqsZGt -EOcLKvbdlrZVZsDi -EOcLKvbdEXxLstTl -DnbkKvbdkNBlZeHP -DncLKvbdauCHYKsh -EPCkKvbdhuZeXSVC -EPCjjvbdOTTufdtp -DoDKjvbdDoCkKwCd -DoDLKvbdOAIrsirA -EPCjjvbdlAmPNALA -EOcLKvbdiBoCdwQq -DoCkKvbdnCJwYOnV -EOcLKvbdqwQLbhxq -DncLKvbdGYuVBEYC -EPCjjvbdcyyQXxqC -EPDKjvbdrEEiPmvB -DnbkKvbdJbibqJbx -DncLKvbdiGjCxuiu -EObjjvbdjKGIJmXr -EPCjjvbdFkEsDIMu -EPDKjvbdCWzchePv -EObjjvbdEObjjwDE -EPCkKvbdQdDApRDr -DoDLKvbdbAvEfQPw -DoDLKvbddtAUATNW -DnbjjvbdUxhUZkOn -DnbjjvbdwNWANEEm -EPCjjvbduDCuWuoP -DnbjjvbdjAQHApHK -DncLKvbdJzpFxEAN -DncKjvbdwtldpxlO -EObjjvbdBraCtGWr -EPDKjvbdJmADzGuB -DoDLKvbdRadEkiZL -DoCkKvbdAMhZTXZx -DoCjjvbdqGDeUVaI -DoCjjvbdVvhxWDdg -EOcKjvbdSBceMIyL -DnbkKvbdRkYfUfjs -EOcLKvbdFWYpQMjF -DoDLKvbdhlFENuCy -EObkKvbdiCObeWpq -DnbkKvbdHELWJaij -EObkKvbdCTAcTfWr -EPDKjvbdbrcLTdJa -DoDLKvbdDncKkXDE -DoCkKvbdmSYtzSdJ -EOcLKvbdVZHszLPO -DnbjjvbdhkdcmuCy -DnbkKvbdLrXNZuQz -EPDKjvbdZnmiFEzK -EPCkKvbdlrZVZsEJ -DnbjjvbdqmZixkhJ -DoDLKvbdcTCjsdKB -DoCkKvbdcyyPxYqC -DoDKjvbdssRrxydc -DoDKjvbdvPTzpjnt -EObjjvbdZLqctOMN -DoDLKvbdRNXbYnUz -DncKjvbdJYUBglRQ -EObkKvbdkIGlGFnL -DoDLKvbdiUzEwSUb -EPDKjvbdeEnrCWbj -DoDLKvbdRbDdkhxk -EObjjvbdYzcFqjWZ -EOcLKvbdjggLfFnL -DncLKvbdgQBzwEXh -DoCjjvbdQlxByNtz -DnbkKvbdoznDjwoA -DnbkKvbdVgwuxHYz -DoDLKvbdaaVdepQX -DoDKjvbdLZRKSztf -EPDKjvbdbUbHXkUI -EOcLKvbdjhGkfFmk -EObkKvbdeEoSBvcK -DncKjvbdUtMtGMVj -EPDLKvbdJTZAsMxM -DnbkKvbdOEdUJJKd -DoDKjvbdZHXEAPSi -EObkKvbduaDyTPFI -DnbjjvbdqAiFAWhE -EObjjvbdelevgNKL -DnbjjvbdTAEhgbPE -DoDKjvbdnPzZVkZC -DoDKjvbdQwNdDLhD -DnbjjvbdnBjWwoNu -EObkKvbdfMewGljL -DncKjvbdrpVnjCuf -EPDLKvbdLGFgbBRV -EObkKvbdkCkkRHUg -EObkKvbdTlVoAuoJ -EPDLKvbdrMyjZMHi -EOcLKvbdWHwuxHYz -EOcKjvbdLrXNZtpz -EObjjvbdbQHHDkzd -EOcLKvbdfILWRnRH -EPCjjvbdyfyMAMeX -DncLKvbdNHCpNQVL -EPCjjvbdFkEsDHlu -DncKjvbdGGJqmhtR -DnbkKvbdvAcxrndh -DoCjjvbdqGDeTvBI -DoCjjvbdJvUfDdgJ -DoCjjvbdUVlPisaR -DoCkKvbdqTsgSRkU -EObjjvbdjblKpftg -EObkKvbdtcDVXWPP -DnbkKvbdfHkVqnRH -DncLKvbdmoyxvLZC -EObjjvbdkHfkfFnL -EPDKjvbdwNWAMcdm -EPCjjvbdJpzFOfNe -DncKjvbdmbJvxOnV -DncKjvbdTqQnuUgm -EOcLKvbdTpqOuVHm -DoCjjvbdYlSETmkm -DoDKjvbdjEkGuPAO -DoCkKvbdwygefXdr -EObkKvbdrXPkcJYq -DoCjjvbdxUleQyMO -EOcLKvbdBsAcTfXS -EPDLKvbdLBLGlbXq -EObjjvbdmbJvwnnV -DnbjjvbdbVCGwjsh -DnbkKvbdxUmEpyMO -EPCkKvbdYSlBNTnx -DoDKjvbdeOeSkUTr -DncLKvbdqmZixlHi -EPCkKvbdNHCpNQVL -DoCkKvbdDigjWXjA -EObjjvbdrDeJQNvB -EOcLKvbdJuuGDeHJ -DoCkKvbdddnrCXCj -DoDKjvbdqTtGqrKt -DoDKjvbdeOeTKstS -EObjjvbdySmiNRbH -DnbjjvbdZshiYdTO -EObjjvbdnCKXXnmu -EPDKjvbdqiAKFMne -DoDKjvbdNeEUIiKd -DnbjjvbdzitpPdTU -EPCkKvbdzaAOffal -EOcKjvbdZtIiZDrn -DoCjjvbdtSrTYyeD -DoDLKvbdFVxopNJe -DoDLKvbdJJdAJpHE -DoDLKvbdHDjuiaij -EObkKvbdUWMQKUAq -EPDKjvbdTpqOuVIN -EOcLKvbdqvpMChyR -DoCkKvbdVviXudEg -DoCkKvbdGLErbgmV -EPCkKvbdZirhPfbG -DoCkKvbdWXJYVceH -DnbjjvbdhkeEOUcZ -DncKjvbdSPtHJedX -DncKjvbdFfKRnIsq -DncKjvbdWWhxVdEg -DoCkKvbdOStWHEuQ -DoDLKvbdEuyQPmKF -DncKjvbdrpVoKDWG -DoCjjvbdKVtfEEfi -DoCjjvbdWXIwudEg -EPDKjvbdSCDeMIyL -EPDKjvbdDoDKkXCd -DoCkKvbdJpzEnenF -EPDKjvbdaaWEfPow -DoCjjvbdVwJXucdg -EPCjjvbdauCHYKtI -EOcLKvbdNeDshhkE -DncLKvbdNGcQMpVL -EOcLKvbdIryBSmXl -DnbkKvbdTAFJICPE -EOcLKvbdrMzKYlHi -EOcKjvbdznopeDMY -EOcLKvbdMRvmZuQz -DncKjvbdeFOqbXCj -DncLKvbdbhlijfWx -EOcKjvbdqdEhpOWB -DoDLKvbdUWMQJsaR -DoDLKvbdptUGqrLU -EObjjvbdaSGChUFk -EPCjjvbdYTMAltOx -DncKjvbdEPCkLWbd -EOcKjvbdKCjDRKCx -EPDKjvbdZyDjNcMS -DncLKvbdFfKRnJUR -EPDKjvbdrNZiyLhJ -EOcKjvbdZeXfzgiC -EOcKjvbdbUbGwkTh -EPDLKvbdHfgZxwxH -DncLKvbdrovOjCuf -DnbjjvbdfNGWflik -DnbkKvbdZoNiFEyj -EPCjjvbddneTKtUS -EObjjvbdRbDdlIxk -EOcKjvbdKfFgbBRV -EPDKjvbdFyUuBDxC -EPCkKvbdiUzFXRtb -EPCjjvbdrJAJeNPF -DncLKvbdVAbRSqSZ -EObjjvbdaNKbTVMg -DoCkKvbdlhctQtqa -DoDKjvbdZshiZDrn -EPDLKvbdFkFSbglu -EPCjjvbdHffyxwxH -DncKjvbdTvLojTaR -DnbkKvbdauCHXkUI -DoDKjvbdGdKuiajK -EOcKjvbdkClKqHVH -EPDLKvbdnUtykKSG -DnbkKvbdBiKbKhej -DoDLKvbdHffzZXwg -EPCjjvbdbrbkTcjB -DoCkKvbdVwJYWDdg -DncLKvbdJJdAJogE -EPCkKvbdJvUfDdfi -DoDKjvbdZeYGzgiC -EObjjvbdZyEJnDMS -EOcLKvbdmSZVZsEJ -EPCkKvbdDnbjjvbd -EPCkKvbdJvVGDeGi -DoCjjvbdTXkLmzkY -DnbkKvbdLqwNZuQz -DncKjvbdZtIiYcsO -DoDKjvbdLYqKSztf -DnbkKvbdULuoBVni -EObkKvbdiBnbeWqR -EObjjvbdfILWRmqH -DncKjvbdezvYdhsw -DnbjjvbdJvUfEEfi -EPCkKvbdRpUHKGDw -EObkKvbdZGwEAPTJ -EOcLKvbdcTCkUEKB -EObjjvbdGAoQxizm -DnbjjvbdNwoVzcmt -DncLKvbdJbicRKDY -DnbkKvbdGZVVAcxC -EPCkKvbdRadFMJYk -DnbjjvbdxsNiNRag -DnbjjvbdiBncFXRR -EPCjjvbdySmiNRbH -DoDKjvbdeATqMxKG -DnbjjvbdtSrSyZdc -EOcKjvbdwtldpyLn -EPDKjvbdqwPkbiYq -EPDLKvbdzitpPcsU -DoDKjvbdDjHiuwjA -EPCkKvbdfMewGmKL -DncKjvbdlrYtyrci -EPCjjvbdZQldiMdq -EPDKjvbdJbjDQjCx -DncKjvbdqTsgRrKt -EPCkKvbdEvZQPljF -DoCkKvbdUsltGMWK -EOcLKvbdEJgivXjA -DnbkKvbdePFTLTtS -EPDKjvbdEYYLstTl -EPDKjvbdMfcPmPuL -DoDKjvbdBsAcTevr -EPDLKvbdwtleRZMO -EObjjvbdRotHJfDw -EOcKjvbdJuuFdFHJ -DnbjjvbdZoOIeFZj -DoDLKvbdsZlQSaHn -EPCjjvbddoFTLTtS -DncKjvbdbVBgXjsh -EPCkKvbdaMkBrtlg -EPDKjvbddiiqutzn -EObkKvbdiZuFkpnG -EPCkKvbdIxTaglRQ -EOcKjvbduaEYrndh -DnbjjvbdzQoMiJwA -DoCkKvbdsCGNMHKy -EObjjvbdMoxQunHT -DnbkKvbdxwiJbPzL -EOcLKvbdJbibpjCx -DncKjvbdIxTbHkpp -DoCkKvbdwuMeQxlO -EOcKjvbdKeehCBRV -EPCkKvbdZxdKNblS -EPCjjvbdLFegbBQu -DoCkKvbduLwwBUBX -DoDKjvbdjlbMZeHP -DoDLKvbdjAPfaPfj -EObjjvbdqGEFTvBI -EObjjvbdeAURNXif -EObjjvbdxmrgxTJD -EPCkKvbdqGDeUWAh -DncKjvbdqTsfqrKt -EObjjvbdjEjftoAO -EOcKjvbdNrtWHFUp -EObkKvbduCcUvvOo -EPCkKvbdvwMAvBWV -DncLKvbdtkwwBUBX -DoCjjvbdVZHsyjnn -EPDKjvbdQccBQQdS -DnbkKvbdjgfkeemk -EPDLKvbdFyVVBDxC -DncLKvbdrNZiyMIJ -EObjjvbdHfgZxwwg -DoDKjvbdqceIomvB -EPCkKvbdNGcPlouL -DoCkKvbdCIkBkIej -DoCjjvbdjKFhJmYS -EObkKvbdBsBDUGWr -EObkKvbdnQZxvKyC -DnbjjvbdhzVFkqOG -EPCjjvbdGLFScHlu -DoCjjvbdtlXwAtBX -DoDLKvbdUtMtFkvK -DoCkKvbdBvzchdov -DncLKvbdlZSrTZHU -EOcKjvbdZnnJEdyj -DncKjvbdYpleJMdq -EPDKjvbdiMEcmtcZ -EPCjjvbdfelZmgHA -DnbkKvbdLhalRYAS -DncKjvbdehLWRnRH -DnbjjvbdeKJqvUzn -EPCjjvbdqqtkOLBN -EOcLKvbdfRaWzlDP -DncLKvbdhtzFWquC -EObkKvbdJvVFdFGi -EObkKvbdMfcPlotk -DoCjjvbdtcCuWvPP -DnbjjvbdwtmFRZMO -DoDKjvbdsPvPKCvG -EPCjjvbdmfdwmOHZ -EPDLKvbdMgDPlouL -DoDKjvbdnGdwlnHZ -DoCkKvbdVwJXudFH -EObjjvbdQdCaQQcr -DnbkKvbdYSkaNUPY -DoCjjvbdULvPAuni -EPCjjvbdSZihScWA -DoCkKvbdBiLCKhej -DnbkKvbdhXZAzzAJ -EOcLKvbdQYmAGsRj -EOcLKvbdZtJIyDrn -DnbkKvbdNsTufduQ -EOcKjvbdEXxMUTsl -DoDLKvbdKyRJrzuG -DoDKjvbdrWpLbhxq -DnbjjvbdrDeIonWB -EPDKjvbdHELViaij -DoDLKvbdBdQBWJmG -DncLKvbdRjyGUfkT -EPDLKvbdYNqAYUut -EPDKjvbdRXNdClID -EPCkKvbdNwnuzdOU -EOcLKvbdjmBkydfo -DoCjjvbdrpWPKDVf -EPCkKvbdZyEKNbkr -EOcKjvbdQZNAHTRj -EOcKjvbdwtmEpxkn -DncLKvbdLhbMRYAS -DoCjjvbdsrrTZZdc -DncKjvbdxmrgxShc -EPCkKvbdmozZVkZC -EPCjjvbdbsDLTcia -DoDKjvbdGKeScIMu -EPCjjvbdrEFIpOWB -EOcKjvbdmpZxukZC -DoCkKvbdTkunaVni -DoCjjvbddneSkUUS -EPCjjvbdTlVoBWPJ -DoDKjvbdxsNhmSCH -EPCkKvbdVviXvDdg -DnbjjvbdwzHfFwdr -EPDKjvbdfMewHMjL -DoCjjvbdbsDKtDjB -EPDLKvbdUQpoVVIN -EObkKvbdrEFJPmua -EObkKvbdhlEcnUcZ -DoDKjvbdZRMeIleR -DnbjjvbdmajXYOnV -DoDKjvbdaRfDHtGL -DoCjjvbdbhljKewY -DoDLKvbdDwwksssl -DncLKvbdUMWOaVoJ -DncKjvbdWWiYWDdg -DoCjjvbdyXiJbQZk -DnbkKvbdHDkVibKK -EPCjjvbdtSrSxzEc -EOcLKvbdaSGChUFk -DnbkKvbdYSlBNUOx -EPDLKvbdJTZBSmYM -DoCjjvbdTkvOaWOi -DncKjvbdMowpvNfs -EPDKjvbdeEnqavcK -EOcLKvbdiifIJlxS -DnbkKvbdqceIpNua -EPDKjvbdrNZixkhJ -DncKjvbdiHKDZViu -DnbkKvbdrDdiPnWB -DncLKvbdLGFhCAqV -DoCjjvbdwuMdqYlO -EPCjjvbdePFTKssr -EObjjvbdVBCQrpqy -EObjjvbdbrcKsdKB -DnbkKvbdBvzciEpW -DoCjjvbdIHGyyXxH -EObjjvbdrzLpTAhO -EOcKjvbdemGWgNJk -EObkKvbdVZHtZjnn -EOcKjvbdiCObeXRR -EPCkKvbduoTzpkPU -DoCkKvbdrNZjYkgi -DnbkKvbdTAEhgand -EOcKjvbdhuZdwRuC -DoDLKvbdWWiXuceH -EPDKjvbdZoOIddzK -DncLKvbdVAbRSprZ -DnbjjvbdhgKDZWJu -DoCkKvbdVZITykOn -DoCkKvbdiGibyWKV -EPDLKvbdwyhGGYFS -DoDKjvbdiHKCxvJu -EPDLKvbdhyuGLpnG -EPDKjvbdOAJStKSA -EOcKjvbdzitpPdSt -DoCkKvbdzROlhjXA -DoDLKvbdtTSSxzEc -DoDKjvbdzoQRFCkx -DnbkKvbdxnSgxShc -DnbjjvbdiBoDFWqR -DoCjjvbdnBjWwoNu -DncLKvbdVYhTzKnn -DncLKvbdkIGkefNk -DnbkKvbdlqxuZsEJ -EOcLKvbdACrYJzIp -EPDKjvbdmaiwYOnV -EOcKjvbdYkrEUNlN -DoCjjvbdVUNTfLuj -DoDLKvbdfHkWSOQg -DnbkKvbdBraCsfXS -EOcKjvbdMJBkpxAS -DoDKjvbdcyyQXyQb -EObkKvbdeEnrCXDK -EObkKvbdFejSNiTq -DoCjjvbdEYXkstTl -EPDKjvbdyYIjBpZk -DncKjvbdiHJcZWKV -DncKjvbdQdDAoqDr -EObkKvbduDDUvvOo -EPCkKvbdzGyMANEw -DoDKjvbdQvnECkgc -DncKjvbdVviXudEg -DoDLKvbdQZNAHTSK -EPDKjvbdkCkjqHUg -EObjjvbdwyhFeweS -DoCjjvbdxwiJbQZk -EOcLKvbdEPDLLXDE -DncLKvbdVrNwbFLc -DoCkKvbdjAPgBPgK -EOcKjvbdpstGqqjt -EPDLKvbdHDkVjCKK -DncKjvbdirzhrjiz -DnbjjvbdxrnJNSBg -EPCkKvbdraelkgLZ -DncLKvbdptTgRqjt -DoCkKvbdIsYaTMxM -DoCjjvbdMpXqVnGs -DoDLKvbdUVkoitBR -DoCkKvbdjmCLyeHP -DoCjjvbdiVZeWquC -DoCjjvbdVUMtFlWK -EPDLKvbdxKvdHzzG -DoDKjvbdiMEdNuCy -EPDKjvbdwzIFfYEr -EObjjvbdJXsagkpp -EPCkKvbdxrmhmSBg -DoDKjvbdlqxuZsDi -EPDKjvbdsQVoJcVf -DnbjjvbdEYYLstUM -DncLKvbdkHgLfGNk -EPCjjvbdbsDKtDjB -DnbjjvbdJcKDQibx -DoCjjvbdyzdnSIIh -DnbkKvbdrpWOjCuf -EObjjvbdbAudeopX -DnbkKvbdYkqctNlN -EPDLKvbdfHkWRnRH -EPDLKvbdXmqAYUut -DncKjvbdFyVVBEXb -DnbkKvbdrDdhpNua -DncKjvbdeAURNXjG -DoCkKvbdOTUVgEuQ -EPCjjvbddwyssrFz -DoCjjvbdMpYRWNfs -DoCkKvbdjuvnDaww -DnbkKvbdVhXvXgYz -EObjjvbdTulQKTaR -EObjjvbdOAJTUJrA -EPDLKvbdsZkosBIO -DoCkKvbdhgJbxvKV -EPCjjvbdnBivxOnV -DncKjvbdxrnIlrCH -DncLKvbdzaAPHGbM -EPCkKvbduMXvaUBX -DnbkKvbdSBceMJZL -EObjjvbdJpzEoGOF -DnbkKvbdWexytAPT -DnbkKvbdkVwNcaxX -EOcLKvbdEYYLsstM -DoCkKvbdRosfiedX -EOcKjvbdwuMdpyMO -EObjjvbdUsmUFlWK -EObjjvbdjuwOECXw -DncKjvbdqlzJxkgi -DoCkKvbdiHJbxujV -EPDLKvbdakMFoNcA -EOcLKvbdmIcsqUqa -EPCkKvbdeKKSVtzn -EPCkKvbdvBEZTOeI -DncKjvbdpstHSRjt -EOcKjvbdKVuGEEfi -DoDLKvbdZQldiNFR -EPCjjvbdxnTIYShc -EOcKjvbdtunXjQsA -EPDKjvbdjcLkRHVH -DncKjvbdDoDLLXCd -DnbjjvbdZyEJnDMS -DoDLKvbdFkFTCgmV -EOcKjvbdhkddOUby -EPDLKvbdNeEUJIkE -DnbkKvbdyzeNqghh -EPDKjvbdFVxopMjF -EOcKjvbdGdLVibKK -DncKjvbdBdQAvJlf -DoDKjvbdbiNKLFwY -EPCkKvbdnGeYNNgZ -EPDLKvbdEYXlUTsl -DncLKvbdOEcsiIjd -DncKjvbdKaLHMbYR -DncKjvbdyTOIlrCH -EPCkKvbdMpXpumgT -EPCjjvbdtbbtwVno -DoDKjvbdrRtkOLAm -EObjjvbdbLLfPNcA -DncKjvbdjmCLydgP -DnbkKvbdTkuoBVoJ -DnbkKvbdSCDdlJYk -EObkKvbdCEPaVjNG -DoDLKvbdFaOpxizm -EPCjjvbdfMevgMjL -DoCkKvbdYzcGRjVy -DnbjjvbdKRZdoGNe -EPDLKvbdZisIQHCG -EOcLKvbdZMSEUOMN -DoCjjvbdiGibxuiu -EPDLKvbdZQmFJMeR -DoCkKvbdsBemLfjy -DncLKvbdzoPqEcMY -DncLKvbdMoxRWOGs -EOcLKvbdFeirOJUR -DoDLKvbdpyOgfpdY -DncLKvbdyzeOSIJI -DoDLKvbdRkZFuHKs -DnbkKvbdxVNEqZLn -DoCjjvbdMgDPmPuL -EPDKjvbdZQmEhmFR -DncKjvbdBraDUFwS -DoCkKvbdqqtjmkAm -EPDLKvbdLZQirzuG -DoDLKvbdlYsRryGt -EOcKjvbdKaLHNBxR -EOcKjvbdTqQoUthN -EObkKvbdhbObeXRR -EPDKjvbdJutfDeGi -DoDLKvbdRkZFuGkT -EOcKjvbdrbGNLgKy -DnbjjvbdmpZyWKyC -EPDKjvbdHELVjBij -EPCjjvbduDDUvuoP -EOcKjvbdrDeIonWB -DoCjjvbdnPyyWLZC -EPDKjvbddndrjtUS -EObjjvbdjuvnDbYX -EPDLKvbdCIkBjhfK -EObkKvbdZjTHogCG -EOcKjvbdjJehKNYS -DnbkKvbdSxLMNzkY -DoDLKvbdKDKDRJcY -EPCkKvbdmpZxvKxb -DnbjjvbdssSTYyeD -EObjjvbdHDkVibJj -DnbkKvbdSLZFtgLT -DoCjjvbdxnTIXriD -DnbkKvbdcSbjsdJa -DoCkKvbduoTzpjoU -DoCjjvbdXsLaNUOx -DoDLKvbdcScKtEJa -DnbkKvbdfpBzwDwh -EPDKjvbdjlakyeGo -DnbjjvbdYzcFqivZ -DncLKvbdCIkBjiGK -EPDLKvbdxZhFfYFS -EObjjvbdrEFJQNvB -DoDLKvbdjAPgBQHK -EOcLKvbdkDLjqHUg -DoCkKvbdiUzFWqtb -DoCkKvbdKVtfDdfi -DoDLKvbdwkXEHzyf -EObjjvbdqcdhpOWB -EPCkKvbdeEnrBvbj -DoCkKvbdCTAbsewS -DnbjjvbdNHCpMouL -DoDKjvbdSQUGiecw -DoDLKvbdelevfmKL -DoCkKvbdySnImSCH -DncKjvbdANIZSvzY -DncKjvbdrJAJeNPF -EPCjjvbdqTtGqqjt -EObjjvbdaRfDHsfL -EPCkKvbdrJAJeMne -EPDKjvbdiGjDYvJu -DoDKjvbdMgCpMpVL -DncKjvbdZjTIQHCG -EOcLKvbdJYTbILqQ -DoCkKvbdzoPqEbkx -EPDLKvbdvlvANDeN -DncLKvbdatafwjsh -DncLKvbdJuuFcdgJ -DncLKvbdwXMAvBWV -DoDLKvbdaMjbStmH -DoCkKvbdeOdsLTtS -DoDKjvbdbLLeoNcA -EPDKjvbdJKEAJpGd -DnbjjvbdZnnIeEyj -EOcLKvbdunszpjnt -EObkKvbdmoyyWKxb -EObkKvbdILazmvpk -EPDKjvbdQlwbYmtz -EPCjjvbderAvzkcP -EObkKvbdegjvSORH -EOcKjvbdsrqsYydc -EOcKjvbdfIKvSORH -DnbkKvbdFjdsDIMu -EPDKjvbdpstHRqjt -EOcLKvbdWRmxCElD -EOcLKvbdkHflGFnL -DoCjjvbdZjTHofbG -EObjjvbdeEoSBwCj -EPCkKvbdJSyBTNXl -DnbkKvbdUaCRTQqy -EPDKjvbdSLZFtfkT -DncKjvbdyNrgwsJD -DoDKjvbdezuxdiUX -DoDLKvbdACrXiyhp -DoDLKvbdxwiJaoyk -EOcKjvbdUxhTzLOn -DnbjjvbdnHFYNNfy -EOcLKvbdhanbeWqR -DoDKjvbdzHYlAMdw -DoCjjvbdKyRJrzuG -DncLKvbdliETpuRa -EObkKvbdczYpXyRC -DoDKjvbdFfKRnIsq -EPDKjvbdVAbQsRSZ -DncKjvbdezvZEiUX -DoCkKvbdZisHofbG -EPDKjvbdjKFgilxS -EOcLKvbduVmxKQsA -DnbjjvbdhuZeWrUb -EObkKvbdGYuUaDxC -DoDLKvbdaaWFGPpX -DnbkKvbdUQpoVUhN -EPCjjvbdZxdJmcMS -DncKjvbdhbPCdwRR -EObkKvbdZRMeJNFR -DnbjjvbdTlVoBWOi -DoCkKvbdatbHYKtI -EObkKvbdiHJbxvJu -DncKjvbdsQWOjCvG -DncLKvbdRosfjGEX -EObkKvbdREDBQRDr -EOcLKvbdeEnqawCj -EPDLKvbdGZVUaEXb -EPDLKvbdIryArmXl -EObjjvbdiiehJlwr -DoCkKvbdMJCMRYAS -DnbkKvbdlrYtzTDi -DoDLKvbdnGeXlmfy -DoCkKvbdSCDeMJZL -EObkKvbdLFegaaRV -DoDKjvbdGGKRmhsq -EObkKvbdiLdcnVDZ -DnbjjvbdGBOqZJzm -DnbjjvbdhfjCxvKV -EPCjjvbdlBNPNALA -EOcKjvbdtbbuXWPP -DncLKvbdEPCjjwDE -DoDLKvbdLqwNZtpz -EPDLKvbdbVCGwkUI -DncLKvbdZyDimcLr -DncLKvbdfILWSNpg -DoDKjvbdFVyPpNJe -DncKjvbdqiAJeMoF -EOcKjvbdqrVLOLAm -DoCjjvbdehKuqnQg -DoDLKvbdGLFTCglu -DoCjjvbdXrlBMtPY -DncKjvbdlYrrTYgU -EPCkKvbdWSNxCFMD -DncKjvbdUVkoitAq -DncLKvbdfHjvSORH -DoCkKvbdCEPaWKMf -EObkKvbdmbJvxPOV -EPDKjvbdwzHefXeS -EOcKjvbdvvlAvAuu -DncLKvbdpxngfqDx -DnbjjvbdIwtCIMQp -DncKjvbdHDjvKBjK -EOcKjvbdjmCLzFGo -DnbkKvbdZMRdTnMN -EObjjvbdEOcLLWbd -DoDLKvbdkNBlZdfo -EPCjjvbdemGXHNKL -EOcLKvbdkxrqryGt -EOcKjvbdsPvPKDWG -EOcKjvbdXsMAlsoY -DnbkKvbdmIcspuSB -DoCjjvbdUaBpsRRy -EOcLKvbdSPsfiedX -EOcKjvbdSCEEkiYk -DncKjvbdWXJXudEg -DncLKvbdRyigrbvA -DoDLKvbdUMVoAvOi -DnbjjvbdZtIhxcsO -EOcLKvbdJXsbHkpp -DnbkKvbdZtIhyETO -DncLKvbdHlBzmvpk -EObkKvbdzHZMAMeX -EPDKjvbdKCjCpjDY -EOcKjvbdjblKqHUg -DoDKjvbdGGJrNiUR -DoDLKvbdrEFIomvB -EPCkKvbdrovPKDVf -DoDKjvbdpxnhGpdY -EPDKjvbdemGWgNKL -EPDLKvbdTlWPAuoJ -EOcLKvbdhuZeWqtb -DnbkKvbdhyuGLpnG -EObjjvbdSBcdlJZL -DnbkKvbdeEnqbWcK -DnbjjvbdJKEAJofd -EObjjvbdbQGfckzd -EPCjjvbdRkYeuHLT -DoDLKvbdXrlBMtOx -EObkKvbdznoqFCkx -EPDLKvbdjggLfFnL -EPDKjvbdhuZdwSVC -EPCkKvbdeEoRbXDK -EPCkKvbdKaKgNCYR -DoDLKvbdWWhxWDdg -EPCjjvbdqUTfqqjt -EOcKjvbdcSbkTdJa -DncKjvbdauCHXjtI -DoCkKvbdQlwbZNtz -DnbjjvbdqvolCiYq -EOcLKvbdePFSjstS -EOcKjvbdhgKDZWKV -EObkKvbdCgLfHAzc -DncKjvbdnUuZkKSG -DnbjjvbdlhctRUrB -DoDKjvbdpyPHgREY -DoCkKvbdjJegimXr -EPDKjvbdfHkVrORH -EPDKjvbdyTOIlqbH -EPDKjvbdjKFhKNYS -EPDKjvbdFWZPpMie -EPCjjvbdIwsahLpp -EObkKvbdKfGIBaQu -DncKjvbdGFirOJTq -DnbjjvbdpedFUWBI -EPCkKvbdNeDshiKd -EObjjvbdBiLBjhej -EObjjvbdCJKbLJFj -DncKjvbdvwMAuaWV -DnbjjvbdZRMdhleR -DncKjvbdhgKCyViu -DoCkKvbdhficZWKV -DnbjjvbdwkWdHzyf -DncLKvbdVBBqSprZ -EOcLKvbdUsmTelVj -EOcLKvbdFxuVBEYC -DoDKjvbdKaLHMbYR -EPCkKvbdGdKuiaij -EPDKjvbdfIKvRnQg -DncKjvbdfekzNfgA -DoCkKvbdJbicRJbx -EOcKjvbdIwsagkpp -DncKjvbdOEctIiKd -DncKjvbdOTUVfduQ -EPCkKvbdFWZPomKF -EObjjvbdezvZFJUX -DoCjjvbdtSrTYzFD -DoCkKvbdbVCHYLTh -EPDLKvbdZMRdUOLm -DoDLKvbdNwoVzdNt -EPDLKvbdFaPRZJzm -DoCjjvbdxZhGFweS -EPCjjvbdZQmFImFR -DnbjjvbdsQWOibvG -DoCjjvbdSBdFMIxk -EPCkKvbdEObkKvcE -DoDKjvbdqFcdsvAh -EOcKjvbdezuyEhsw -DnbkKvbdVqnXaeMD -EObjjvbdnGeXlmgZ -DncLKvbdCIkBkIfK -EPDLKvbdpecdtWAh -EPDKjvbdsQVnjCvG -DoDKjvbdkDMLQfuH -EObjjvbdAMhZTWzY -EPCjjvbdiCObdvqR -DoDKjvbdUWLoisaR -DncLKvbdSPtHKGDw -EObjjvbdaNLBrtmH -EPDKjvbdUyHszKoO -DoDKjvbdQwNccLhD -EPDLKvbdnVUzKjRf -DoCkKvbdRyigrcWA -EOcLKvbdbiNKLGXY -DncKjvbdlhctRVSB -DoCkKvbdNPxRWNfs -EObjjvbdANHxsXZx -DnbjjvbdNrsvHEuQ -EPCjjvbdmbJvxPNu -EOcKjvbdJvVGEFGi -EPDKjvbdUWLoitAq -DoCkKvbdkDMKpfuH -EOcLKvbdfjfzbfAE -EOcLKvbdczZQYZRC -DoDLKvbdQwNcblHc -EObkKvbdOTTugEtp -DncKjvbdbUagYLTh -EPCjjvbdfNGWfmKL -EObjjvbdiVZdvrUb -DncLKvbdZyDinDMS -EPCkKvbdmaiwYOmu -EOcLKvbdqUUHSRkU -DncLKvbdDncKjvbd -DoCkKvbdVqmxCElD -EPCkKvbdaRfDIUFk -EOcKjvbdjKGIJlxS -DncLKvbdkxrrTZHU -DncKjvbdypnmIjXA -DoDLKvbdJpyeOfOF -DoDLKvbdwXMBVaVu -DoDKjvbdKfFhCAqV -DoCjjvbdIxTahLqQ -EOcLKvbdADSYKZiQ -DoCkKvbdMowpunHT -EOcKjvbdgKfzbfAE -EPDKjvbdhkddOVDZ -EPDLKvbdemFwHMik -EPCjjvbdUVlQKTaR -DncLKvbdRWnECkhD -DnbjjvbdkWXODbYX -DoCjjvbdZeYGzghb -DoCkKvbdSKyFtfkT -DoDLKvbdBhkCLJFj -DncKjvbdlhdTqVRa -EPDKjvbdqqtjmjaN -DoDLKvbdZjTHofbG -EPDLKvbdJmADzHVB -DoDLKvbdSBceLhyL -EObjjvbdqwPlCiYq -DncLKvbdYORAXtvU -EPDLKvbdZnnJEdyj -DoCjjvbduWNxKQsA -EPDKjvbdWSNxCElD -DoCkKvbdRjyFtgLT -DoCkKvbdeOeSkUUS -EOcKjvbdDihKVxKA -EObjjvbdffLymgHA -DoDLKvbdcScKsdKB -EPDLKvbdlYsSSyGt -DnbjjvbdGKeTDINV -DoDLKvbdCTBCtGXS -EObjjvbdEASIlyvw -EPDLKvbdfMfWfmKL -DoCkKvbdpstGqrLU -DncLKvbdtlXwAsaX -DoDKjvbdNrsvHEuQ -EObjjvbdCTBDTfXS -DoDKjvbdkMalZeHP -DoDLKvbdQccBPqDr -DnbkKvbdYqNEiNEq -DnbkKvbdvBDyTOeI -DnbjjvbdLAkGmBxR -EObkKvbdLiBlRYAS -EPCjjvbdTukpKUBR -EObkKvbdhuZeWqtb -DoDLKvbdZyEJmbkr -DnbjjvbdxrmiNSCH -EPCjjvbdKWVFdFHJ -EPCjjvbdRWmcblID -EPCkKvbdsQVoJcVf -EPCkKvbdGcjuibJj -DoCjjvbdJuteceHJ -DnbjjvbdLLAhWAJy -DncKjvbdULunaWOi -EOcLKvbdHlBznXQk -DoDKjvbdvBDxroEh -DoDKjvbdzaAPHGbM -DoDLKvbdUyITyjoO -DnbkKvbduaDxroFI -EObkKvbdAMhZSvzY -EObjjvbdDoDKkWbd -EObkKvbdGKdrbhNV -EPCkKvbdmgFXlnGy -EOcKjvbdzdzOzdzQ -EPCkKvbdKkBHvAJy -EOcKjvbdqAiFAWhE -DoCjjvbdQvmdClID -DncKjvbdMtsSKmAX -EObjjvbdziuPpETU -DoDKjvbddZyQYZQb -EPDLKvbdauBgXkTh -DnbkKvbdnCJvwnmu -DoCjjvbdxUmFQyMO -DncKjvbdXGYzUAPT -EPDLKvbdOAJTUKSA -DncKjvbddZyPwxqC -EOcKjvbdqlzKYlIJ -DnbjjvbdkVvnDaww -DnbjjvbdZdxGzhIb -DnbkKvbdDwxLtTsl -EObkKvbdGKdrcHmV -DncKjvbdTAFJHbOd -DoDKjvbdEObkKvcE -DnbkKvbdaNLCSuNH -DoDLKvbdDxYLtTtM -EObjjvbdVZIUZjnn -DoCkKvbdNsUVfduQ -EOcLKvbdGGKRmhtR -EPDKjvbdbKlFnmcA -DncKjvbdvvlAvBWV -DoCjjvbdliEUQtrB -DnbjjvbdjgfkfGNk -EPDKjvbdlYsSTYft -DoDLKvbdbKlGOnDA -EPDKjvbdjAPfaPfj -DnbkKvbdzGyMAMeX -DoCjjvbdZnmhddzK -EPCkKvbdIMBzmwQk -EObkKvbdjEkHVPAO -EPCkKvbdQccBPpdS -EPCjjvbdhgKCxvJu -DncLKvbdVgxVxHYz -EOcKjvbdxVNFQxkn -DoDKjvbdbLMGPNcA -DncLKvbdGckWJajK -DnbkKvbdrMyiyLgi -EOcLKvbdKefICApu -DoCjjvbdqFdEtWBI -EPCkKvbdYSlBNUPY -DoCjjvbdIwsbILpp -EPCjjvbdmgFYMnHZ -EObjjvbdQvmccMID -DncLKvbdURQntthN -EOcLKvbddxZtUSFz -EPCkKvbdhtzFWqtb -EOcKjvbdVBCRSpqy -DncKjvbdtbbtvvOo -EPCkKvbdczZQYZQb -DnbjjvbdQwODcLgc -EPDLKvbdtunXipsA -DncLKvbdBhjajhej -DoDKjvbdNrtVfduQ -EOcLKvbdKWUfDdfi -EObjjvbdpstHRrLU -DnbjjvbdznpRFClY -EPCjjvbdfNFvgMik -DoCjjvbdUsltGLvK -DnbjjvbdlqyVZsDi -DoCkKvbdNPwqWOHT -EOcLKvbdakLeoNcA -DoDKjvbdsCGNMGkZ -EPDKjvbdaRfDHsfL -DoDKjvbdZtIhyDrn -EPDLKvbdOStVgFUp -EPCkKvbdeATplxKG -DncLKvbdySmhlrBg -DoDKjvbdnCKWwoOV -DnbjjvbdDncKjvcE -EOcLKvbdwzIGGXdr -EObjjvbdmIdTqVSB -DnbjjvbdUGznLwVe -DncLKvbdTkvOaWPJ -DncKjvbdyOSgwsIc -DncKjvbdjmCLzFGo -DoDLKvbdpssfqqkU -EPDKjvbdmtuZjirG -EOcKjvbdOFEThhkE -DoDKjvbdIMBznWqL -EPCkKvbdJvVFcdfi -EPDKjvbdnBivxOmu -EObkKvbdTvLojTaR -DoCkKvbdMRwNZtpz -EObjjvbdEARhlzXX -DnbjjvbdcScLTcjB -DncKjvbdxmrhXrhc -DoDKjvbdEvZQQNKF -DncLKvbdGLErcHmV -DoDLKvbdFkFTChMu -DoCkKvbdOFETiIkE -EPDKjvbdnVUzLKRf -EPDKjvbdmuUzKjSG -EPCjjvbdwuNFQxkn -DncLKvbdeATpmXjG -EObjjvbdxUmEpxkn -EPDKjvbdcSbkTcjB -EPCjjvbdmbKXXoNu -EPDKjvbdSQUHKFdX -DoDKjvbdCTAbsewS -EOcLKvbdVwJYVdFH -DoDKjvbdZtIiYcsO -EPDKjvbdhkeENtcZ -EObkKvbdGBOpyJzm -EPCkKvbdRMxCYmtz -DoCjjvbdzjVPocsU -DoDLKvbdrDdiPnWB -EPCjjvbdFjdsDIMu -DoDLKvbdSLZGUgLT -EPDLKvbdKefHaaQu -DoDKjvbdKCibpicY -EOcLKvbdijGIJmYS -EObjjvbdelfWgNKL -DnbkKvbdbhmKKfWx -DoDKjvbdSQUHKGEX -EPCkKvbdnGdxMmgZ -DncLKvbdJJdAKPgE -EPDLKvbdmRyUyrdJ -EOcLKvbdhzUfLqOG -DoDKjvbdLAjgMaxR -DoDKjvbdRosfjGEX -EObkKvbdpssfqqjt -DnbkKvbdjAQHAofj -DncLKvbdidkHUoAO -DoCkKvbdCIjbLIej -DncLKvbdelfWfmKL -DoDLKvbdxUleQxkn -EPDLKvbdEvZQPljF -DncLKvbdJbjDQjCx -DncLKvbdyOTIXriD -DoDKjvbdTulPjUAq -DnbjjvbdJSyAsNYM -EOcLKvbdbBVeGQQX -EPCjjvbdbKkenmcA -EPCjjvbdiGjDZWJu -DncLKvbdcSbjsdJa -EObkKvbdZtJIyDsO -DoDLKvbdrafMkgLZ -DoCjjvbdiMFDmuDZ -DnbkKvbdnUtyjirG -EPDKjvbdfNFvflik -DoDLKvbdrWokcJZR -DncKjvbdWWhxWDdg -EPDLKvbdNeDtJJKd -EOcLKvbdqlzKYkhJ -DncKjvbdSQUHKGDw -DoCkKvbdkHflFfOL -EPCkKvbdRXNdDMID -DncLKvbdSLZFtfkT -EOcLKvbdZQldiMeR -DnbjjvbdSBdElJYk -DncLKvbdwWlBVaWV -DoCjjvbdhzUfLqOG -DoDLKvbdmJEUQuSB -DnbjjvbdULvPBVoJ -EPDLKvbdYkrDtOMN -EPDKjvbdHEKujBij -EObjjvbdJuuGDdfi -EObjjvbdzaAOgGbM -DncLKvbdkClLRHUg -EObkKvbdYTMAmToY -EObjjvbdxVMeQyLn -DoDKjvbdrEFJQNua -DncKjvbdYSlBNTnx -DnbjjvbdrSUkOLAm -EOcLKvbdrylQTBIO -DnbjjvbdrouoKDVf -DoDLKvbdwWkaVaVu -DoCkKvbdZQmFIleR -EPCjjvbdiLeENtby -DoCjjvbdrDeJQNua -EObjjvbdIGfzYxXg -DoCkKvbdySmiMqag -EOcKjvbdbVBgYLTh -DoDKjvbdLFehCApu -EPCkKvbdCDpAvJmG -EObkKvbdZLrDtOLm -EPCkKvbdZnnJEdyj -EPCjjvbdZjSgpGbG -EOcKjvbdWSOYBdkc -EPDKjvbdwtleQyLn -DnbkKvbdmJDtQuSB -EObkKvbdkWXODbXw -DncKjvbdezuyEiTw -EObjjvbdnBjWwnmu -EPDKjvbdZxdJmcMS -EPDKjvbdrbGNMHLZ -EObkKvbdEYXlTssl -DnbjjvbdyTOJNRag -DnbkKvbdGZVVAdYC -EPCjjvbdTYLMNzkY -DncLKvbdJcJcRKDY -EOcLKvbdYpmEhldq -DoCkKvbdjKFgjNYS -EPDLKvbdJbibqKCx -EPCjjvbdyTNiNSCH -DoDLKvbdGGKRmhsq -EPDLKvbdLAkGmCYR -EPDLKvbdCEPaWKMf -DoCkKvbdZsiIyDsO -EPCjjvbdjbkkRGuH -DnbkKvbdqYoHgREY -DoDLKvbdZMRctNkm -EObjjvbdDjIJvYKA -DncKjvbdVqnXbEkc -EPCkKvbdiHKCyViu -EOcKjvbdkHflGFmk -DoDKjvbdOFDsiIjd -EOcLKvbdVrOYCEkc -EPCjjvbdhtydvrUb -DoDLKvbdrNZjYlHi -EPDKjvbdVwIxWDeH -EObkKvbdhyuFlRNf -EPDLKvbdSKyFuHKs -DoCkKvbdBhjajiFj -DoDKjvbdhanbeWpq -DncKjvbdGGJqnJTq -EPDKjvbdZtJIyETO -EOcLKvbdANIZSvzY -DnbkKvbdptUHSSLU -DoDLKvbdRDcBPpdS -DoDKjvbdBcpAujNG -DnbjjvbdaaVdeopX -DnbjjvbdhtydvrUb -DoCkKvbdkWXNcaxX -DncLKvbdrNZjYkgi -EPCjjvbdBiKajiGK -EObkKvbdwkWcgzzG -EPCkKvbdRDcApQcr -DncLKvbdfekzNgHA -DoDKjvbdiBoCdwRR -EOcLKvbdIBlZdzAD -DnbkKvbdZLqcsnMN -DoDKjvbdatbGwkUI -EObjjvbdmgFXlmfy -EPDLKvbdxUmEqYkn -EPDLKvbdauBfxKsh -EObjjvbdsPvOjDVf -DnbkKvbdkVwNdBww -EPCkKvbdzaAPGfbM -EOcLKvbdRotGjGDw -EPCkKvbdqceJPmua -EPDLKvbdZyDinCkr -EObkKvbdCDoaWKMf -EOcKjvbdjmCLzEgP -EPDKjvbdHlBznXRL -DncKjvbdeOeTLTtS -EPCjjvbdGZUuBEXb -DnbkKvbdqTtHRqjt -EOcLKvbdFyUuAdXb -EPDLKvbdEARiMzWw -EOcKjvbdFeirNiUR -DoCkKvbdzjUoocsU -EOcLKvbdEztQdlCi -DncLKvbdKCjCpibx -EPCjjvbdxZhGFxFS -EObjjvbdwWkaWAvV -DnbkKvbdaaWFFoow -EOcKjvbdBsBDUGXS -EPDLKvbdmIdUQuRa -DncKjvbdVAbRTRRy -DoCkKvbdHffyxxYH -EObjjvbdDGkfHAzc -DoCkKvbdiCPDFXRR -EPCkKvbdVrNwbEkc -EPCkKvbdiGjDYvKV -DnbkKvbdIMBzmvpk -EPCkKvbdKxqJrztf -DncLKvbdmIctQuSB -EOcKjvbdaSFbhUGL -DoCjjvbdmbKWwnmu -DoCkKvbdiUyeWrVC -DncKjvbdGGKRmhsq -DoCjjvbdehLVqnQg -DncLKvbdTkunaVoJ -DnbjjvbdGZUtaDxC -EPCjjvbdtSrSyZeD -DoDLKvbdjbkkQfuH -EOcLKvbdOFDtJJLE -DnbjjvbdBdQAvJlf -DoCkKvbduDDVWvPP -EOcKjvbdZtJIyDsO -DncLKvbdQccBPpdS -DncLKvbdiUzEvquC -EPCjjvbdvvkaWAuu -DoDLKvbdZoOIeEzK -DnbkKvbdkCkkRGuH -EOcKjvbdRkZGVHLT -EObkKvbdtcCuXVno -EPCjjvbdMpYRVnGs -DoDKjvbdFfJrNiTq -DnbkKvbdZnmiFFZj -EPDLKvbdbhmKKfWx -DoDLKvbdDjHivXjA -DoDLKvbdiLeDnVDZ -EOcLKvbdUQqOtthN -EPDKjvbdZHXEAOri -EObkKvbdvAdYrndh -EObkKvbdQlwaxnUz -DoCjjvbdQwOEDLhD -EPDLKvbdqrVKnLBN -EObjjvbdwtmFQxkn -EPDLKvbdTfznMWvF -DnbkKvbdaMjasVNH -EPCjjvbdcyyQXxpb -DncKjvbdMfcQMpUk -DnbjjvbdZnmheEzK -DncLKvbdbrbkUDia -DncLKvbdiCOcFXRR -DoCjjvbdZxcimblS -EPDLKvbdRkYfVHKs -DncKjvbdDoDKjvbd -EOcKjvbdGAnpxizm -EOcKjvbdYpldhldq -DnbkKvbdQwOEDMID -DnbjjvbdcyxoxYpb -DoCjjvbdakMGOnDA -EPCjjvbdLAkGlawq -DncKjvbdJJdAKPfd -EOcLKvbdxrnImSBg -DoDLKvbdNddUJIjd -DncLKvbdfIKvRmpg -DoCjjvbdiZuGLqOG -EOcLKvbdeAURMwif -DncLKvbdiCPCeWpq -DoCjjvbdGcjvKBij -EPDKjvbdRDcBQQdS -EPCjjvbdUtMtGLvK -EPDKjvbdyXhjBoyk -DoDKjvbdqZOgfpcx -EObjjvbdYTMAmUPY -DoDLKvbdiCObeXQq -DncKjvbdmJDtRUqa -EObkKvbdSCEElIyL -EObkKvbdNGbpMouL -DoCkKvbdEzsqElCi -EObjjvbdOStWHFVQ -EPCjjvbdjmBlZdfo -EPDKjvbdiUyeWqtb -DnbjjvbdYSkaNUPY -DoCkKvbdTAEhhCPE -DoCjjvbdmttyjjSG -EOcKjvbdrMyjZMIJ -EPDKjvbdUsmTelVj -EPCkKvbdNsTugFUp -DnbkKvbdWRnYBeMD -DncLKvbdHgGzZXxH -EPDLKvbdZLrDsmlN -DncLKvbdcSbkUDjB -EObkKvbdziuPpDrt -DoCjjvbdZyEJmblS -EObkKvbdjggMFenL -DnbkKvbdmfeXmNfy -EObkKvbdiBncFXRR -EPDKjvbdADSXiyiQ -EObjjvbdLFfHbApu -EOcLKvbdRMwbZOUz -EPCkKvbdFVxoomJe -EOcLKvbdZnmiEdyj -DncLKvbdULunaVoJ -DncLKvbddndsKtTr -EPDKjvbdEztQeMDJ -EObkKvbdcScKscjB -EOcKjvbdFkErbglu -DoCkKvbdsBfMlGkZ -EPDLKvbdCSaCsfWr -EPCjjvbdVAapsRSZ -EOcLKvbdgFkzNfgA -EPDLKvbdjhHLefNk -EObjjvbdyNsIXsIc -DoCjjvbdqcdiPmvB -EOcKjvbdeXyssrFz -DnbjjvbdEOcKjwCd -DoDLKvbdGKdrbgmV -DncLKvbdKQzEoFnF -DoCkKvbdqvpMDJZR -EObkKvbdZyEKODMS -DncKjvbdBhjbKiFj -DncKjvbdfHkVrNqH -DncLKvbdeXyssrFz -EObjjvbdxmsHwriD -EPDKjvbdRyigsCvA -DoCkKvbdZoNiEeZj -EPCkKvbdhzUfLpnG -DncKjvbdVUNUFkuj -EPDKjvbdRXNdDMID -EObkKvbdlBMnmALA -EPDKjvbdffMZnHHA -EPCjjvbdEARhlyvw -EOcKjvbdVTltGLvK -EOcKjvbdJqZdoFme -EObkKvbdyOTHwsIc -DoDLKvbdCfkegAzc -DnbkKvbdZMRdTmkm -DnbkKvbdhkeEOUcZ -DoDKjvbdZnnIeEyj -DnbjjvbdrafNMGkZ -DoDLKvbdZtJIyESn -EOcLKvbdaRecITek -EPCjjvbdZoOJEdyj -DoDLKvbdxsNhlrBg -EPCjjvbdZxdKNcMS -DoCjjvbdCWzdJEov -EObkKvbdTppnttgm -DnbkKvbdjmCLydfo -EObkKvbdBsAbsewS -EObjjvbdjgflFemk -DnbjjvbdpstGrSKt -EOcLKvbdOTTvHFUp -DoCkKvbdczYowyRC -EObkKvbdTvMPjUAq -EOcKjvbdezvYeJUX -EPCkKvbdzHYlANEw -EPCkKvbdqcdiQOVa -DoCkKvbdsrrSxyeD -EObkKvbdOTUWGeUp -DoDKjvbdbUbHYLTh -DoCkKvbdHakydzAD -DoDKjvbddjJrWUzn -EPDKjvbdmaiwYPOV -DoCjjvbdtbcUwVno -EPDLKvbdrMyjYkgi -DoCjjvbdUQpoUtgm -DncKjvbdddoSBwDK -EPCkKvbdatbGwkTh -DncKjvbdmbJvxPNu -DnbjjvbdwzHeewdr -DncLKvbdzitpPcrt -EOcLKvbdrMyjYkgi -EOcLKvbdrEFIomvB -DoDLKvbdiifIJlxS -EOcLKvbdtvOYKQsA -DoCkKvbdxsNhlqag -DnbjjvbdyTOIlqag -DncLKvbdIGgZyYXg -EOcKjvbdUsmUGMWK -EObkKvbdhzUfMQnG -EPDLKvbdZxdJnCkr -DncKjvbdKWUeceGi -EOcLKvbdmbJvwnnV -DoDLKvbdDncKjvbd -EPCkKvbdZoNheEyj -DncLKvbdVqnXadlD -DncLKvbdtunXipsA -DncLKvbdjAPgBPfj -DoCkKvbdyqPNJKXA -DncKjvbdrpWPJbuf -EOcKjvbdqvpMDJYq -DnbjjvbdcTDLUDia -DnbkKvbdiGjCxvKV -EPDKjvbdauBfxKtI -DoCkKvbdLFfHbApu -DoDLKvbdHffyyXwg -EOcKjvbdIxUCHkqQ -DoDKjvbdzQoMiJwA -DoDKjvbdyYIjBoyk -EObkKvbdxnSgwriD -EObkKvbdIMBznWpk -EPDKjvbdYlSDtOMN -DoDKjvbdijGHjMxS -EOcKjvbdYkqcsnMN -DoCjjvbdmaiwYOmu -EPDKjvbdHELWKBjK -DoCjjvbdwtmFRYlO -EOcLKvbdFeiqnJTq -EPDKjvbdiBncEvqR -DoCkKvbdJXsbILpp -EObjjvbdULunaVni -DncKjvbdDwxLstUM -DoDKjvbdrWpMChyR -EObkKvbdYzcFqivZ -DncKjvbdEzspdlDJ -EPDKjvbdfMfXGmKL -DoCkKvbdCTAbtGWr -DoDLKvbdRkZGUgKs -EPCkKvbdFWZQQMie -DnbjjvbdxVNEqYkn -DoCjjvbdeFPRbWbj -EPCkKvbdZshhyESn -EObjjvbdqrVKnLAm -EPCjjvbdptUGqqjt -EOcLKvbdrEEhpOVa -DncKjvbdzQoNIjXA -DncLKvbdmgFXlnGy -DoDKjvbdZjShQHBf -DnbjjvbdjKGHjNXr -DoDLKvbdqFcdsvAh -EPCkKvbdOEdUIiLE -EPDLKvbdNeEUJJKd -EPCjjvbdzHZMANEw -DnbkKvbdqlzJyMIJ -DnbjjvbdelfXHMjL -EPCkKvbdANHyTWzY -DnbjjvbdREDBPpcr -DncLKvbdQmYCZOUz -EOcKjvbduoTzpjoU -DoCjjvbdqrUjmkBN -DnbjjvbdyfxlANFX -EOcLKvbdJmADygUa -EPDLKvbdyNrhYTIc -DoCjjvbdCTAbtFwS -DncLKvbdSwkLmzkY -DnbjjvbdjhHMFfNk -DoCkKvbdZeXfzhIb -DnbjjvbdbrbjtEJa -DoCkKvbdxrmhmRbH -DoDLKvbdrXQLbhxq -EObjjvbdTulQKUBR -EPCkKvbdMpYQumgT -DncKjvbderBWzlDP -DoCjjvbdiGjCxvJu -DoCjjvbdlZSqsZGt -EOcLKvbdZisIPfaf -DnbkKvbdHEKvKBij -DncLKvbdjSziSjiz -EPDKjvbdCEQBWJmG -EObkKvbdGGKRmiUR -EPDKjvbdMuTRkNAX -DnbjjvbdrXQLbiYq -EPCjjvbdOTUWGduQ -EPCjjvbdnBjXXoNu -DoDLKvbdcarmSAUN -DoCjjvbdNPwqWOGs -EObkKvbdUslsekvK -DnbjjvbdzaAPGfbM -DoCkKvbdGdLVjCJj -DoDLKvbdRjyFtfkT -DoDLKvbdGLFTDHlu -DnbkKvbdGFirOJUR -EPDLKvbddoFTLUUS -EObkKvbdkxrrTZGt -DncKjvbdxrnJMqag -EOcLKvbdCDpBWJmG -DoCjjvbdlqyUysDi -EPDKjvbdTfzmlXVe -DncKjvbdEuxpQMie -EOcKjvbdbLLfPNcA -DncKjvbdVgxWXgYz -DoDKjvbdrbFmLgKy -DoCjjvbdzaAPGfbM -DncLKvbdYSlAlsoY -DoDLKvbdZyEJnClS -EPDLKvbdEvYopMjF -DncKjvbdmtuZjiqf -DoCjjvbdCJKbLIfK -EOcLKvbdcIljLFvx -EObkKvbdrJAKFNPF -DoDKjvbdBiKbKhfK -EPDKjvbdWIYWYGxz -DoCkKvbdjAQGaQHK -DnbjjvbdjblLQftg -DncLKvbdbhlikGXY -EPDKjvbdZLrDsmkm -DoDLKvbdVTlsfMWK -DoCjjvbdliDsptqa -DnbkKvbdjuvmcbXw -DoCjjvbdbVCHXjtI -DoCkKvbdQvmdClID -DnbjjvbdLAkHNCXq -EPDKjvbdZtIhyETO -DnbkKvbdYkqdTmlN -DoDKjvbdMtrrKmAX -DncLKvbdJXtCIMQp -EPCkKvbdlhdTqUqa -EObjjvbdnHFYNNfy -EPDKjvbdxrmhlrBg -DncLKvbdiLeDmtcZ -DncKjvbdNrsufdtp -EObkKvbdlhcsptqa -EObjjvbdNeETiIkE -DnbkKvbdxsNhmRbH -DnbkKvbdADRxKZhp -DnbjjvbdTqROuUgm -EOcKjvbdpxoIGqDx -EOcLKvbdqBIeAWhE -DnbjjvbdCIkBjiFj -DncLKvbdTlWPBWPJ -DoCjjvbdEKHjVxKA -DnbkKvbdZRNFImEq -EObkKvbdJbicQjCx -DoDKjvbdNsTufeVQ -EObjjvbdDxYMUTsl -DoDLKvbdaSFcITfL -EPDKjvbdcTDLTcia -DoCkKvbdlhdTpuRa -EObjjvbdCJKbKiFj -DncKjvbdqAiFAWhE -EPDKjvbdUslsfLuj -EObjjvbdWWiXuceH -EPCjjvbdOEcshiLE -EPDLKvbdEJhJuxKA -DoCkKvbdKyRKSzuG -DncKjvbdHffzZXxH -EOcLKvbdSLZGUfkT -EObkKvbdHgHZxwxH -DnbkKvbdcSbjtEJa -EPDKjvbdZGwEAPTJ -DoDLKvbdeAURNXif -EPDLKvbdMpYQunGs -EObkKvbdNeDshiKd -DoDLKvbdzoQQdbkx -EPDKjvbdWHxWXfxz -EPCjjvbdCEPaVjNG -DoCjjvbdbhlikFvx -EOcLKvbdBvzdIdpW -DoCkKvbdNPwqWNfs -EPCjjvbdbhlijfWx -DncKjvbdqwQLbiZR -EObjjvbdkClLRGuH -DncKjvbdNHDQNQVL -DncKjvbdhkdcmuDZ -EOcKjvbdKWVFdFHJ -EPDLKvbdYTMBMtOx -EObkKvbdSKxfVGjs -DncKjvbdZoOJEdzK -EObjjvbdMpXqVmgT -EPDKjvbdhaoDFXRR -EPCjjvbdrpWPJcVf -EOcKjvbdczYpYZRC -DoDLKvbdLLAhWAJy -DoDKjvbdEObkLXDE -EPDKjvbdnVUykKRf -DnbkKvbdBvzdIdov -EOcKjvbdGFirOJUR -DoCjjvbdGGJrNiTq -EPDKjvbdqAheAWgd -DncKjvbdxmsIXriD -EObkKvbdVAbQsRRy -EPDKjvbdRXODbkhD -EObjjvbdVZHtZjoO -EOcKjvbdffMZmfgA -EOcLKvbdbiMjLGXY -DoDKjvbdUQpoVUhN -EPCkKvbdhfjCxuiu -DoCkKvbdziuPocsU -EObjjvbdBhkBkJFj -DnbjjvbdeAURNXif -DncKjvbdQlxByOUz -EPDLKvbdRbEEkhxk -EPCjjvbdrbFlkgKy -DoCjjvbdaSFbhUGL -EOcKjvbdsCGMkfkZ -DoCkKvbdJbicRJcY -DnbkKvbdqlzKYlHi -DoCjjvbdZyDimblS -EOcLKvbdsrqsZZdc -DoDKjvbdjggMGGNk -DnbkKvbdADSXiyiQ -DoCkKvbdehKurORH -EOcLKvbdrylPsAgn -EPCjjvbdRWmdClID -EPCjjvbdbsCjsdKB -EObjjvbdUQpoVVHm -DnbkKvbdiCObeXQq -DncLKvbdUQpoVUhN -DoCkKvbdKCicRKDY -DncKjvbdjlakzFGo -DnbkKvbdMgDQMpVL -DoDLKvbdWSNxBeMD -DnbkKvbdvBEZTOdh -EPCjjvbdsQWPKCuf -EObjjvbdZeYGzghb -DnbkKvbdxsNhmSCH -EPDLKvbdkySrTZGt -EObkKvbdrDdiQNvB -DncLKvbdHDjuiajK -DoCjjvbdURROtuIN -DncKjvbdKyRJrztf -EObjjvbdIGfyyYXg -DncLKvbdXsMBMtPY -EPCkKvbdaaVdfPpX -DncKjvbdiHJbyWJu -EOcKjvbdSKxfVGjs -DoDKjvbdxZgfFwdr -DnbkKvbdRNYCZNtz -EPCkKvbdCDoaWKNG -DoDKjvbdDjHjWYKA -EPDKjvbdyNsHwsIc -DoDKjvbdUtNTfLuj -DoDLKvbdGGKRnJTq -EPCkKvbdsBemMGjy -EPDKjvbdSQUHKFcw -DnbjjvbdkClKpfuH -EObjjvbdRyjHrcWA -EOcLKvbdSPsfjGEX -DoCjjvbdGckWKBij -EPCkKvbdGdKujBij -DnbjjvbdcJMijewY -EPDKjvbdkIGkefOL -EPCkKvbdrSVLNkBN -DnbkKvbdrpWPJbvG -DoDLKvbdZirgpHBf -EPCkKvbdHDjujBij -EPCkKvbdvBDySoEh -DoDLKvbdePEsKssr -DoDLKvbdZRMdhldq -EObjjvbdUQqPUtgm -DoDLKvbdMSXNZtpz -EObjjvbdVYhTzKnn -EOcKjvbdrNZixlIJ -DoDLKvbdTpqPVVIN -DnbkKvbdkCkjqHVH -DnbkKvbdkWWmcaxX -EOcLKvbdJSyBSlwl -EObkKvbdmRxtzTEJ -DncKjvbdptTgRqjt -EOcLKvbdqYoHfqEY -DoDKjvbdGZUtaDxC -EOcKjvbdKQydoGNe -EPDLKvbdssSTZZeD -EObjjvbdhkddOUcZ -DoDKjvbdGdKvJbKK -EOcKjvbdULvPAuoJ -DoCkKvbdrEFJPnWB -DnbjjvbdfNGWfmJk -EPCkKvbdkWXODaww -EOcKjvbdMtrrKmAX -DnbjjvbdEuyPpMie -EObjjvbdrSVKmkAm -EPDLKvbdhanbdvqR -DoCkKvbdkWWmdBww -DnbjjvbdxUleQyLn -EOcLKvbdpyPHfpdY -DncKjvbdpfDeTvBI -DoCkKvbdnVVZjirG -DnbkKvbdzjVPocsU -EPDLKvbdmfdwlmfy -DnbkKvbdSKyFuGjs -EObkKvbdVAaprpqy -EPCjjvbdUaBqTRRy -EObkKvbdZoNhddzK -DncKjvbdrNZiyLhJ -DncKjvbdaMkBruNH -DoDKjvbdZyDjNcMS -EPCjjvbdZjTIQHCG -EObkKvbdjJegilwr -EPDKjvbdHffzYxYH -EPDKjvbdaSGChTfL -DoDLKvbdcJMjLGWx -EOcLKvbdtlXvaTaX -DoCjjvbdGYuVAcxC -EOcLKvbdUsltGLvK -EPDLKvbdRNXayOUz -DoDLKvbdRadFLiYk -EOcKjvbdCTAbsfXS -EPCjjvbdGZVVAdYC -EPDLKvbdypnliJwA -EPCjjvbdSBdFLhxk -EOcLKvbdGLFSbhNV -DncKjvbdTppnuUhN -EObkKvbdezvYdiTw -DoCkKvbdIsZBSlxM -DncLKvbdRNYBxmtz -EPCkKvbdeFOqawCj -DnbjjvbdtSrTYzEc -DncKjvbdkDLkQgUg -DnbjjvbdEARhlzXX -EOcKjvbdWRmxBeMD -DoDLKvbdzQnliKXA -EPDKjvbdpfDdtWAh -DncLKvbdMgCpMpVL -DnbkKvbdiZtfLpmf -EPDLKvbdzQoNJJwA -EPCkKvbdaNKasUmH -EPDLKvbdRbDeLhyL -DoDLKvbdKRZeOeme -EOcKjvbdZxdJmcMS -DncLKvbdeKKSVtzn -EPDLKvbdRjxeuHLT -EObkKvbdNGcPmPtk -DoCkKvbdtcDVWvPP -EPCjjvbdcTDKscjB -DoDLKvbdbrcLTcia -EObjjvbdvlvAMcdm -EObjjvbdFxuVBDwb -EPCjjvbdhkdcmtby -EOcKjvbdRotHKFcw -DncLKvbdelfWgNKL -EObkKvbduCbuXVno -EPDKjvbdEYXlUUUM -EOcKjvbdbUbHXjsh -EOcLKvbdmgEwmOHZ -DoCjjvbdEXxLsssl -EPDLKvbdZLqdTmlN -EOcLKvbdbsCkUEJa -EOcKjvbdqvpLbhxq -EOcKjvbdfIKvRmpg -DncLKvbdGBOpxizm -DoDLKvbdnBiwXnmu -DoCjjvbdKWVFceGi -EOcLKvbdRbEEkiZL -EObjjvbdffMZmgHA -DoCjjvbdUMWPBWPJ -EObkKvbdkClKpftg -DoDLKvbdBhkBkIej -DoDKjvbdhgJbyWJu -DoCjjvbdEASIlzXX -EPDKjvbdGZUtaDxC -DnbjjvbdlYsRryHU -EOcKjvbdhgKCyWJu -EPCkKvbdsQWOibuf -DoCjjvbdRMwbYmtz -DoDKjvbdZxdJnClS -EPCjjvbdJTZBTNYM -DnbjjvbdiLeEOUby -EOcLKvbdjEjgUoAO -EPCkKvbdzitopDrt -EPCjjvbdtcCuWvPP -DncKjvbdZMRdUNlN -DoDLKvbddZxoxZRC -DoDKjvbdFVxoomKF -DoCkKvbdSLYeuGkT -DncLKvbdYSlBNTnx -EObkKvbdeuzwoizs -EPDKjvbdUQpoUuIN -DoDKjvbdmpZxujyC -EPCjjvbdDGlFgAzc -EPCjjvbdkCkkRGuH -DnbkKvbdvlvAMdFN -DoDLKvbdatbHXkUI -EPCjjvbdFWYoolie -DnbjjvbdrEFJPnWB -EObkKvbdpyOggQcx -EOcKjvbdqwQMChxq -EOcKjvbdqrVLNkAm -EOcKjvbderBWzlCo -DoDLKvbdRWmdDMHc -EOcLKvbdZoNhdeZj -DnbkKvbdunszpkPU -EPDKjvbdGAnpxizm -DoCkKvbdKCjCqKCx -EOcKjvbdZshhyDrn -DoDKjvbdddoSBvcK -DncKjvbdcScKtEJa -EOcLKvbdZjShQGbG -DncLKvbdDncKkXDE -EPDLKvbdrzMQTBHn -EPDLKvbdIxUBglRQ -EPDKjvbdcyxpXxpb -EObkKvbdMSXMytpz -EObkKvbdijGIKMwr -EObkKvbdzdzOzdyp -DnbjjvbdeATplwjG -DnbkKvbdcIlikFwY -DoDLKvbdsPunicVf -EPDKjvbdmozYvLZC -DoCkKvbdkyTSSxgU -DncLKvbdRWnDcLhD -DncKjvbdHELWJaij -DncKjvbdZQmFIleR -EOcKjvbdiCOcEvpq -EOcKjvbdbrbkUEKB -EOcLKvbdOFEThhjd -EObkKvbdbBVdepPw -EObkKvbdUxhTzKnn -EObkKvbdzoPpdblY -EOcLKvbdrbFllHLZ -DoDKjvbdjggMGGOL -DncLKvbdqceJQNua -DoDKjvbdiHJbxvJu -DoDLKvbdySnImSBg -EPCkKvbdtTRrxzFD -EOcLKvbdkVvnEBxX -DnbjjvbdtcCtvvOo -EPCkKvbdyzdmrHiI -DoDKjvbdFjdrbhMu -DoDLKvbdZyEKODLr -DoDKjvbdURQnuVHm -EPCkKvbdZyDimcMS -EOcLKvbdNQXpunHT -DnbjjvbdQlxCYmtz -DnbjjvbdCDoaVimG -EObjjvbdsPvOibvG -DnbjjvbdgGLynGgA -DncLKvbdCDoaWJmG -EObkKvbdnCKXXnnV -EOcLKvbdUxgtZkPO -DnbkKvbdiMFDmuDZ -DncKjvbdiGicZWKV -DoDKjvbdcScKtEJa -DoDKjvbdpssgRqkU -DncKjvbdsBfNLgKy -DoDLKvbdGYttaDwb -DncKjvbdjvWnDaxX -EPCjjvbdhgJcYuiu -DnbjjvbdxUldpxlO -DoDKjvbdUaCRSqSZ -DnbkKvbdNwoVzdNt -DoCkKvbdZnnIeEzK -EPDKjvbdNeEUJIkE -DnbjjvbdJbjDQjDY -EPDLKvbdKVuFceGi -EPCkKvbdKkBIWAJy -EObjjvbdrafMlHLZ -EOcLKvbdZLqctNkm -EObjjvbdMgComPtk -DncKjvbdjhHMGGOL -DnbkKvbdJYUCIMQp -DoCjjvbdhlEcnVCy -DoDLKvbdxsOJNSBg -EOcLKvbdRMxBxmtz -EOcLKvbdHDjujCJj -EObjjvbdZRMdhmFR -EPDLKvbdUQpoUthN -EPCkKvbdvlvANEFN -EObkKvbdSCEEkhxk -EPCjjvbdLBKfmCXq -EPDKjvbdOStVfduQ -EPCjjvbdGcjvJbKK -DnbjjvbdVBBprpqy -DoCjjvbdirziTLJz -DncLKvbdFWYpQNKF -DoDLKvbdjKGHjNYS -DncKjvbdZnmiEdzK -DoDKjvbdySmiMrBg -DncLKvbdeAURNYKG -EPDLKvbdemGWflik -DoDKjvbdaMkBrtmH -DoDKjvbdIxUBglRQ -DoDKjvbdOEcshhjd -EPCjjvbdpxnhGqDx -DncKjvbdYSlBNToY -DnbjjvbdGGKSOJUR -EOcLKvbdZjTHpGbG -EPCjjvbdIHGzZYXg -DncKjvbddndsLTsr -DnbjjvbdqAheAXIE -EOcKjvbdVhXvXfxz -DncKjvbdFyVVAdYC -DnbjjvbdJvVFceGi -EPCkKvbdoznDjwoA -EPDKjvbdvPTzqLPU -EObjjvbdiifIKMwr -EOcLKvbdlZTSSxgU -EObjjvbdQvnECkgc -DncLKvbdjgfkfGNk -DnbkKvbdCDoaWJmG -DnbkKvbdxnTHwriD -DncKjvbdoAKzshDn -DoDKjvbdvAdZSndh -DnbjjvbdRpTgKFcw -EOcLKvbdiiegilwr -EOcKjvbdGdLVjBjK -EObkKvbdGFjRmhtR -EPCjjvbdZsiJYdTO -EPCjjvbdJJdAKPfd -EPDLKvbdKfGHbBRV -DncLKvbdjhHMFenL -EObkKvbdbLMFnnDA -DoCjjvbdUWMPisaR -DnbkKvbdZjTHpHCG -EObkKvbdbsCkTcjB -EPCkKvbdSLYfUfkT -DoDKjvbdZeYGzhIb -DncKjvbdrovPJcVf -EPCjjvbdePFSjtTr -DncKjvbdJbibqJbx -EPDLKvbdDxYMUUTl -DnbkKvbdZHXEAPSi -DncKjvbdVTmUFlVj -EPDKjvbdzoQREcLx -EPDKjvbdKfFhCAqV -DoDKjvbduDDUwVoP -DoDKjvbdgFlZmfgA -EObjjvbdTAEiHbOd -DoCkKvbdMowqVmgT -DncKjvbduMXwBTaX -DncKjvbdeYZssrFz -DncLKvbdmfdxNNgZ -DncLKvbdxLXDgzzG -DoCjjvbdNsTvGduQ -EPDLKvbdTpqOtuHm -EObkKvbdZMRctOMN -EPCjjvbdHEKuibJj -EPCjjvbdBiKbLJGK -DoCjjvbdUtNUFkvK -EOcKjvbdVTltFkuj -DnbjjvbdczYpXxqC -EPDLKvbduWNxKQsA -EOcKjvbddZyQYYqC -DnbkKvbdyfyMAMdw -DncLKvbdDihKWXjA -EPCjjvbdoAKztIDn -DoCjjvbdcTDLUDjB -EPDKjvbdJcJcRKCx -DncKjvbdIxTahLqQ -DoDLKvbdTqROttgm -DoDKjvbdjblLQgUg -EOcLKvbdTppnuUhN -EPCjjvbdrMyjZLgi -EObjjvbdypnmIjXA -DoCkKvbdczYoxZRC -EObkKvbdFjeTDHmV -EPCjjvbdZxcimbkr -DoDKjvbdatbHXkUI -EPDKjvbdvmWAMdEm -DoCjjvbdqwQMCiYq -DoDKjvbduWNwjQsA -DncKjvbdACqwjZiQ -DoCjjvbdOTTvGduQ -EObkKvbdirzhsKiz -EObjjvbdOTTugFUp -EOcLKvbdKDJbqJcY -DoCjjvbdiUyeXRtb -EObjjvbdfMfXHNKL -EOcKjvbdjhHMFfNk -DncKjvbdRpUGjFcw -EPCjjvbdfILVqnRH -EOcKjvbdiHKCyWJu -DoDLKvbdnPzYvLYb -DnbkKvbdnGeYNOHZ -DoDKjvbdtvOXjQsA -EPCjjvbdmIctRVRa -EOcKjvbdpyOhGpcx -DnbkKvbdKQydoFnF -DoDKjvbdkVvnDaww -EObjjvbdbUbHXjsh -EOcKjvbdCJLCLIfK -EPDKjvbdZeYGzhJC -DncKjvbdcScLUDia -DoCkKvbdQmXbZOUz -EOcLKvbdRadFMIxk -DnbkKvbdziuPodSt -EOcKjvbdEXxMUUTl -DnbjjvbdegjvSOQg -EObkKvbdZtJJYdTO -EPDKjvbdVAbQsQrZ -DnbkKvbdkHflFfOL -EObkKvbdtcCuXWOo -DnbjjvbdcTDLUEJa -EPCjjvbdZjTIQHBf -EObjjvbdTAEhhCPE -EOcLKvbdbhlikFwY -DoDLKvbdEPDKkWbd -EOcKjvbdZtJJZESn -EPDKjvbdZMRdUNlN -EPCkKvbdhgJcZWJu -DncKjvbdUaBqSprZ -EOcLKvbdEJgiuxKA -EObjjvbdSPtHKFcw -DoCjjvbdFfKSOJUR -EObjjvbdVrOXaeMD -DoCjjvbdrXPkcIxq -DoDKjvbdZjTHofaf -EOcLKvbdVYgszLOn -DncKjvbdIwsagkpp -DncLKvbdTkvPBVni -EOcLKvbdUtNUFkuj -EObjjvbdZnmheEyj -EPDKjvbdyYIjBoyk -EPCkKvbdqlyiyMIJ -EPCjjvbdYzbeqjVy -EOcLKvbdUQqOuVIN -EObkKvbdZMSDtOMN -DncKjvbdVvhxWDdg -EOcLKvbdiZuFlRNf -EObjjvbdZtJJYcrn -EPCjjvbdmuUzKirG -DoDLKvbdVUMtGMVj -EPDLKvbdhWyAzzAJ -DoDLKvbdfIKvRmqH -DnbjjvbdqdFIpOVa -DnbkKvbdIwtCHkpp -EOcKjvbdeEnrBvcK -DnbkKvbdJuuFdFGi -DoDKjvbdeOeTKtUS -EObjjvbdKWUfDeGi -EPCjjvbdiHJbyViu -EOcKjvbdBraCsfWr -DoCjjvbdGYuVBEYC -DoCkKvbdnHEwmOHZ -EPDKjvbdZisIQGaf -EPCkKvbdmpZxvKyC -DoDLKvbdmSYuZrdJ -EObkKvbdKDJbqKCx -EOcLKvbdZsiJZETO -EPDKjvbdnCJvxOmu -DoCkKvbdjgflGGOL -DnbkKvbdRosfjFdX -EPCjjvbdRECaQQcr -DnbkKvbdNHComQVL -EPCjjvbdrJAKEmOe -DoDLKvbdqBJFAXIE -DncLKvbdGLFTDINV -EOcLKvbdhgJbxujV -DnbkKvbdjSzhsKiz -EOcKjvbdKWVGDdfi -DoDKjvbdZnnIeFZj -DnbjjvbdxxIiaoyk -EObkKvbdczYpYZQb -EPCjjvbdZxcjODMS -EObkKvbdiHJbxvKV -DoCjjvbdJzoexEAN -DoCjjvbdaRfChTek -DoDLKvbdxwhjCPyk -DoDLKvbdVqnYBeLc -DnbkKvbdRDcBPpdS -EObkKvbdYqNFImFR -EPDKjvbdsrrTYzFD -EOcKjvbdqcdhpOWB -EOcKjvbdaNLCTUmH -DoDKjvbdnPzYukZC -DncLKvbdKCjDRKCx -EObjjvbdFkEsDINV -EPDKjvbdMgDQMouL -DncLKvbdOXnuzdNt -EPCjjvbdpstGqrLU -EPCkKvbdRbDdkhyL -DnbkKvbdaogGdLzd -DncKjvbdjlbLydgP -DnbjjvbdUMVoAvPJ -EPCjjvbdJqZeOfOF -DoDLKvbdUsmTekvK -DoCjjvbdpyOgfpcx -DnbkKvbdJYUCIMRQ -DncLKvbdjJfHjMwr -DoCjjvbdRosgKGDw -DoCkKvbddZxpYYqC -DncKjvbdddnrBwCj -EPDKjvbdijGIJlxS -DoCjjvbdkWWnECYX -EObkKvbdqlzJxlIJ -EOcLKvbdzaAPHHBl -DoDKjvbdlZTSSyGt -DnbjjvbdatbHXkUI -EOcLKvbdNdcshiKd -DncKjvbdGdKujBjK -DnbjjvbdRWnDcMID -DoCjjvbdSxKlNzkY -EPDKjvbdHDkWJbJj -EPDLKvbdZxcjNcLr -EOcKjvbdLYqKSzuG -EPDLKvbdjuvmcaww -EPDKjvbdxmrhYTJD -EOcKjvbdZirhPfaf -DnbjjvbdfIKurNqH -EPCkKvbdYTLaNTnx -DoDLKvbddtAUASlv -EPCkKvbdZLrDtOLm -DnbjjvbdnGdxMnHZ -DoCjjvbdeFPSCXCj -DncLKvbdYORAYUvU -EPCjjvbdrXQMDJZR -EPCkKvbdRpTfjGDw -DoCjjvbdpssfrSKt -EPCkKvbdKWUedFHJ -DnbjjvbdVvhwvDdg -DncKjvbdLrWlzUpz -DncKjvbdwtmFQxkn -EObkKvbdmIdTqUqa -DnbkKvbdJutedFHJ -EOcKjvbdVZITykPO -DoDLKvbdhbPDFXQq -DnbjjvbdmuVZjirG -DncLKvbdieKgVPAO -DncKjvbdEuyPpNJe -DoDKjvbdiHJcYuiu -EPDKjvbdmgFYNNfy -DnbkKvbdOTUWGeUp -DoCjjvbdZRNFJNFR -EPDLKvbdYpmFJNEq -EObkKvbdRMxBxnUz -DncKjvbdNQYQvOHT -EOcLKvbdMoxRVnHT -DoDKjvbdpyOhGpcx -EObjjvbdRyjITDWA -EObjjvbdrykosAhO -EOcLKvbdhaoDFXRR -DoDLKvbdIryBSmYM -DnbjjvbdlZSrTYft -DncLKvbdegjurORH -EOcKjvbdJYUCHlRQ -EOcLKvbdREDApRES -EObjjvbdmgFYMnHZ -EPCkKvbdZyDimblS -DoCkKvbdiCPCdwQq -EObkKvbdbVBgYKtI -DoDLKvbdNddUJJLE -DoCjjvbdrpVnibuf -EPDLKvbdKaLGlbYR -DnbjjvbdTpqPVUhN -DoCjjvbdcyxoxYpb -EPDKjvbdhfibxvJu -EPCjjvbdJpydnfNe -DncLKvbduWOXipsA -DoDKjvbdrRtkNkAm -EObkKvbdNQXqVmgT -EObkKvbdCIkBkJFj -EPDLKvbdqUUHSRjt -EOcLKvbdeYZtTqez -EPCjjvbdqUUHRqkU -DncKjvbdkWXODaxX -EPCkKvbdaNKbTVNH -EPCjjvbdvAcxroEh -EOcKjvbdlZTSTZGt -EOcLKvbdLAkHNCYR -DoDLKvbdUtMselWK -EPCjjvbdnVUzKjRf -DoDLKvbdypoMiJwA -EObjjvbdKDKCqKDY -DoCjjvbdrWolDIxq -DoDKjvbdwyhFfXeS -EOcKjvbdnGeYMmgZ -DoDLKvbdREDAopcr -EPCjjvbdiUzFXRuC -DoDLKvbdZQldhmEq -EPCjjvbdtvNwipsA -EPDKjvbdbrcLUDia -DoDLKvbdegkVqnQg -DoCjjvbdznopdcMY -DoCjjvbdmfeXlmgZ -DncLKvbdXrlBMsnx -DoCjjvbdmgEwmOGy -DoCkKvbdjmCLydgP -DncLKvbdmJEUQuSB -DnbjjvbdRbDeLiYk -DnbkKvbdQdDBPqDr -EObkKvbdjKGHjMxS -DoCkKvbdyOTHxSiD -EPCjjvbdQwNdCkhD -EObjjvbdfNFwGljL -EObjjvbdVqmxCElD -EOcKjvbdeOeTKtTr -DoDKjvbdUaBqSpqy -DnbjjvbdmIdURUqa -DoCkKvbdUWMQJtBR -DnbjjvbdxnSgxSiD -DncKjvbdwXMBVaVu -DnbjjvbdvvkaVaWV -EObkKvbdmaiwXnmu -DoCjjvbdgQBzwEYI -EOcKjvbdFVxpPmJe -EObjjvbdKDJcQjCx -DoCkKvbdYlRdUOMN -EOcLKvbdZoOIddzK -DoCjjvbdffMZnHHA -DncKjvbdnQZxujxb -EPDLKvbdwXMBWBVu -DoCjjvbdLFfIBaQu -DncKjvbdGQASwHFy -DnbkKvbdauBfxKsh -EOcLKvbdraelkgKy -EObkKvbdnVUzLKSG -DoDKjvbdANHxrwZx -DncLKvbdqZPHfqEY -EObjjvbdvPTzpjoU -EObjjvbdrWpMDIyR -DnbkKvbdCDpBWKNG -DnbkKvbdyOSgwrhc -DnbkKvbdeKKSVtzn -DncKjvbdMowpumgT -EOcLKvbdOFDtIhjd -EPDKjvbdkDMLRGtg -EPDKjvbdiiehJlwr -EPDLKvbdBdQAvJlf -DoDLKvbdZyEKODMS -EObjjvbdJqZePFme -DnbkKvbdKxqKSztf -EObkKvbdmJEUQuSB -DnbkKvbdREDAopdS -EPDKjvbdwzHefYEr -EPDKjvbdnHExMnGy -EOcKjvbdmozZVjyC -EPDKjvbdZHWdAPTJ -DoDKjvbdjgfkfFnL -DncKjvbdczZPxYqC -DoDKjvbdEXwlUUTl -DncKjvbdhuZdvrVC -DnbkKvbdxKwDgzzG -EPCkKvbdsZlQSaIO -EOcKjvbdzRPMiKXA -DoDKjvbdqvolDIxq -DoDKjvbdQdCaPpcr -EPCjjvbdJmADyfuB -DnbjjvbdsCGNLgLZ -DoDKjvbdKfGICAqV -DoCkKvbdbiNJkGXY -DncKjvbdiGicYvKV -EPCjjvbdSxLLmzjx -DncKjvbdLAjflaxR -EPCkKvbdUyHsyjoO -DnbjjvbdcyxoxYqC -EObkKvbdxZgfGYFS -EPDLKvbdZoNiEeZj -DncLKvbdZtIhxcrn -EPDLKvbdIwtCILqQ -DncLKvbdQmXbYmtz -EOcLKvbdmuUzKiqf -EPDKjvbdsQVnibuf -EObjjvbdOSsugEtp -EOcLKvbdYlSETnLm -EObkKvbdUtNUGMWK -DoDLKvbdzeZnzeZp -DoDKjvbdqTtHRqkU -EObjjvbdmbJvxPNu -DoDLKvbdliDsqUqa -EPCjjvbdhanbdvpq -DoDKjvbdiifHilxS -DoDKjvbdmJDsptqa -DnbkKvbdDncKkWcE -EPCkKvbdaofgELzd -DncKjvbdijGIJmXr -EPCkKvbdRkYfUgLT -EObkKvbdHEKuibKK -DnbjjvbdVhXuwfxz -DoDLKvbdiMEcmuCy -DnbkKvbdJcJcQibx -DnbkKvbdmfeYNOGy -DoDKjvbdqUTgSSKt -EPDLKvbdePErjtUS -EObkKvbdaNKasUmH -EObkKvbdiifIJmYS -EOcKjvbdsPunjCvG -EObkKvbdbrcKtDjB -EPDKjvbdbhlikFwY -EPCjjvbdrpVnjDWG -EPCjjvbdaMkCStlg -DncKjvbdMpXqVnGs -EPDLKvbdZjShPfbG -EPDLKvbdfHkVrOQg -DoCkKvbdDnbjjvbd -DoCkKvbdkySqsYft -DoDLKvbdZRMeImEq -DoDLKvbdYpleIleR -DncKjvbdiHJbyViu -EObkKvbdrMyixkgi -EPDKjvbdqvokbiYq -EOcKjvbdzitoodTU -DnbjjvbdVYhTyjnn -EPDLKvbdyYJJbPzL -EObkKvbdeFPSCWcK -EPDKjvbdIsZArlxM -DnbjjvbdkIHLfGNk -DoDLKvbdehLVqmqH -EOcLKvbdvBEZTPFI -DncKjvbdnUuZjirG -EPCjjvbdakLfOnDA -DnbkKvbdEzsqEkcJ -DnbjjvbdVhXvXgYz -DoCjjvbdIryBTNYM -DncKjvbdZirgpHBf -DoDKjvbdEYYLsstM -DnbjjvbdZshhyETO -DoCjjvbdOTUVgFVQ -EObjjvbdZisHpGbG -DoDLKvbdkDLkRGtg -EObkKvbdegjvSNpg -DncLKvbdfIKvRnQg -DncLKvbdJKEAJpGd -DncKjvbdrRtkNkBN -EPCkKvbdjvWnDaxX -DoCjjvbdmfdwmNgZ -DnbjjvbdbrcLUEJa -DncLKvbdnQZxujxb -DoDKjvbdNsTugEuQ -EOcKjvbdUVlPisaR -EObkKvbdHDjujBij -EPDLKvbdSBdFMJYk -EPCkKvbdVvhxVdFH -DncKjvbdIsYaTNXl -EPDLKvbdIrxaSlxM -EPDKjvbdfoazwDwh -EPCkKvbddeOqbXDK -DoCjjvbdJpzEnfNe -DncKjvbdqiAKFNOe -EPDLKvbduDCtwWOo -DnbjjvbdZjShQGbG -EObjjvbdVAbQsRSZ -DncLKvbdtcCuWuoP -DoDKjvbdTvLoitAq -EOcLKvbdZQleIleR -DoCkKvbduLxXAtAw -DnbjjvbdqYoHfqDx -DoDKjvbdJYTbHkqQ -DncLKvbdGZUtaDxC -EObjjvbdqFdEtWAh -EPCkKvbdILaznWqL -EObkKvbdQwNdCkhD -EPCkKvbdmJDsqUqa -EOcKjvbdvBEYrneI -DoDKjvbdapGgELzd -DoCjjvbdwWlAvAvV -DoDLKvbdJbicQicY -EPDKjvbdaaVdepPw -DoCkKvbdsZkosAhO -DoCkKvbdNeETiJKd -EObkKvbdEObkLXCd -EPCjjvbduCbuXVno -DoCkKvbdrykpTBHn -DnbkKvbdrEFIpNua -DoCjjvbdlYrrSxft -DoDLKvbdqdFIpOVa -EObjjvbdrbFmMGjy -DnbkKvbdRpUHKGDw -EOcLKvbdzoPpdcMY -DoDLKvbdfILVqnQg -DoCkKvbdlZSqsZHU -DncKjvbdrzMQSaIO -DoCkKvbdhuZeWrUb -EObjjvbdfSAvzkbo -DoCkKvbdVZIUZjnn -EOcLKvbdhlEdOUcZ -DoDKjvbdbUagXkUI -DoCjjvbdqUTgRqjt -DoDLKvbdqTsfrRjt -DnbkKvbdrouoKCuf -EPDKjvbdmbKXXoNu -DoDLKvbdhbPDEwRR -DncLKvbduVnYKRTA -DoCjjvbdcJNKKfXY -EPCjjvbdeFOrCXDK -EPCkKvbdczYoxYpb -DnbkKvbdKfGHaaRV -DoCjjvbdMuTRjmAX -DoDKjvbdkMalZeGo -DnbkKvbdbhmKLFvx -EPDLKvbdjuwODbXw -DoDLKvbdUMVoBVoJ -DoCkKvbdRpTgJfDw -EOcLKvbdajlFoNcA -EPCjjvbdRMwaxnUz -EOcLKvbdJcJbpjDY -DoCjjvbdjhHLefNk -EOcLKvbdcasNSATm -DoDKjvbdyOTHwriD -EObjjvbdKQydnenF -EObjjvbdZirhPgBf -EPCjjvbdBiKbLIfK -EOcKjvbdNeDtIiKd -EOcKjvbdkDLjqGtg -DoDKjvbduDDVWuoP -DncLKvbdePErjtTr -EOcKjvbdJbicQjDY -EPDKjvbdrylQTBHn -DnbjjvbdkMbMZeGo -DncLKvbdtlYWaUAw -DoCjjvbdDwxMUTtM -EObkKvbdjblKqGtg -DoDKjvbdRMxCZNtz -EObkKvbdqYoIGqDx -EPDKjvbdmfeYNNgZ -EObjjvbdTAFIhCPE -DoCjjvbdjKGIKMxS -EOcLKvbdMpYRWOHT -EOcLKvbdMoxRVnGs -DncKjvbdhaoDEwQq -DnbkKvbdEXxMTtTl -EPCkKvbdMgCpMpVL -EObjjvbdRzKITDWA -EOcLKvbdrzLosBHn -EPCkKvbdBraCsfWr -DoCkKvbdaaVeGPow -EOcLKvbdIGgZyXxH -EPDKjvbdliETptqa -EOcLKvbdbKlGPODA -DnbjjvbdRadElJZL -EPDLKvbdjFLHVPAO -DnbkKvbdiBnbdwRR -EObkKvbdvBDyTOeI -DnbjjvbdUyHtZjnn -DnbkKvbdmgFYNOGy -DnbkKvbdGKdsDHlu -EPDLKvbdZRNEiMeR -DoCkKvbdbLLeoODA -EObkKvbdANIZSvzY -DoCkKvbdziuPpDrt -DnbjjvbdWHwvXgYz -EPDKjvbdsBfNLgLZ -DoCkKvbdWWiXudFH -EPDLKvbdwzIGGYEr -EOcLKvbdVTmUGMWK -EObjjvbdMSXMytpz -DncKjvbdZirhQGaf -EObjjvbdCJLBjiGK -EPCjjvbdZLrETnLm -EObjjvbdelevfljL -DncKjvbdGYuVBEYC -EPCkKvbdkCkjpgUg -DoCkKvbdbhljLFwY -DnbjjvbdeEoSBvbj -DncLKvbdvAcyTPFI -DnbkKvbdjblLQgVH -EPCjjvbdeEoSBvbj -DnbkKvbdaMjbStlg -EObjjvbdrDdhpOWB -EOcKjvbdbKlFoODA -EPDLKvbdZjTIQGaf -EObjjvbdEzsqEkcJ -DnbjjvbdZRNEiNEq -EObjjvbdqlzJxlIJ -DnbkKvbdkIHLfFmk -EObkKvbdMtrrKmAX -EPCkKvbdNQXpvNgT -EPCkKvbdbrcKtEKB -EObjjvbdSPtGjGEX -DoDKjvbdxwiJaoyk -DnbjjvbdVYhUZkPO -DoDLKvbdXrlBNUPY -DoDKjvbdZnmiEdzK -DoCjjvbdWWiXvDeH -DoDLKvbdyNsHwsIc -DoDKjvbdwyhFfYEr -EPDLKvbdNeDshhkE -EPDKjvbdBiLBkJFj -EOcKjvbdJqZdoGNe -EOcKjvbdbAvEepQX -DoCjjvbdaNLBsUlg -EPDLKvbdvBDxsOdh -DncKjvbdGFirNiTq -EPDLKvbdZnmiEeZj -DncLKvbdePFSjtTr -EOcKjvbdnGdwlnHZ -EOcLKvbduDDUvuno -EObjjvbdZQmFIldq -DoCkKvbdcyxpYYqC -EOcLKvbdMRvlzVQz -DoCjjvbdtcDUwVoP -EPCkKvbdrXQLbhxq -DoDKjvbdkVwODbXw -DnbjjvbdnCJwYOmu -DnbkKvbdqvpLbhxq -DoDKjvbdKDJcQjDY -DnbkKvbdvwMAvAuu -EPDKjvbdtvNxKRTA -DoDKjvbdYkqctOMN -DoDKjvbdtcCuWvOo -DoCjjvbdEObkLXDE -DoCkKvbdbrbjtDia -EObkKvbdDncKkXDE -DnbjjvbdxxJKBozL -EPCjjvbdbhlikGWx -DncKjvbdJXtCIMRQ -EOcLKvbdkVvmcaxX -DoCjjvbdqwPkbhyR -EObjjvbdySnImRbH -EObjjvbdZQleImFR -EObkKvbdmpZxujyC -EPCjjvbdhbPDEvpq -EObkKvbdpyPHgREY -DoDLKvbdwzIGGXeS -EObjjvbdaSGChUGL -DoDKjvbdrbFmMGkZ -EPCkKvbdxKwEHzyf -DnbkKvbdJXtBgkpp -EPCkKvbdlZTRrxft -EOcKjvbdFVyPpNKF -DoCkKvbdaRecHsek -DoDKjvbdFfKRnJUR -DoCjjvbdyOTIXrhc -DoDLKvbdyOSgxShc -DoDKjvbdEOcKjwCd -DoCjjvbdzoPpeClY -DoCkKvbdURRPVUhN -DoDLKvbdVqmxCFMD -EOcKjvbdNVSrKmAX -EOcKjvbdTvLpKTaR -EPDLKvbdCTAbtFwS -EPDLKvbdZyEKNblS -EOcLKvbdsCFllHLZ -EObkKvbdjlbMZeHP -EPDKjvbdMpXpunGs -EObjjvbdaNLCSuNH -DoDLKvbdkCkjqHUg -EPCjjvbdTYKlNzjx -DnbjjvbdNxOuzdOU -DoCkKvbdegjvRmpg -DoCjjvbdhfjCyWKV -DncLKvbdjggMFfNk -EOcKjvbduVmwjRTA -DnbkKvbdDjHiuxKA -EOcLKvbddePRavcK -DnbkKvbdwkWcgzyf -DnbkKvbdHlBznXQk -EPCkKvbdatafxKsh -EPCjjvbdcJMjKfXY -DoDKjvbdrDdiQOWB -DoDLKvbdVvhwvEEg -EObjjvbdwjvdHzzG -DncLKvbduMYXAtAw -DoDLKvbdZQmFJNEq -EPCjjvbdyOTIXriD -DoCkKvbdbiNKLGWx -DncKjvbdHEKvKBij -EPDLKvbdYlSDtNkm -DoDKjvbdTqROuVIN -EPCkKvbddeOqbXCj -EOcLKvbdCTBCsewS -EPCjjvbdnUtykJrG -DnbjjvbdlZTSSyGt -EPCjjvbdjmBkyeGo -DnbkKvbdVhXuwfxz -DncLKvbdePFTLTsr -EOcKjvbdemGWgMik -EObkKvbdhuZeWquC -EPCjjvbdEvYpQNKF -EOcKjvbdpaJFAXHd -DoDKjvbdJSyBSmYM -EOcLKvbdSCDdlIxk -DncKjvbdSLZGVGkT -DnbkKvbdrbFlkgKy -EObjjvbdJSyAsMwl -EOcKjvbdEOcKkXDE -EPCjjvbdMoxQumfs -EPDKjvbdUQpnuUgm -DncKjvbdaaWFFoow -DnbkKvbdakMGPODA -EObkKvbdrEEhomua -EOcKjvbdmozZWLYb -EObjjvbdVgwuxGxz -EOcLKvbdCJLCKhej -EPDLKvbdVUNUGLvK -EOcLKvbdLGGHbBRV -DoCkKvbdlqxtysEJ -EOcLKvbdcScLTdKB -DncKjvbdhtydwRtb -DoCjjvbdcTCjscia -DncLKvbdUslsekuj -DoDKjvbdwuNFRYkn -EOcLKvbdijGHjNYS -DoCjjvbdJSyBSmYM -DoDKjvbdEYXlUTtM -EPDKjvbdUyITzKoO -DnbkKvbdvBDyTPFI -DoDKjvbdYlRcsmkm -DoDKjvbddePRbXCj -EPCkKvbdVZHtZjoO -EPDLKvbdWXIxVceH -EPCjjvbduDDUwVoP -DncKjvbdQlxBxnUz -DoDLKvbdfpBzvdYI -DoCjjvbdMJBlRYAS -EPCkKvbdZisHofaf -DnbkKvbdkWXNdCXw -EOcKjvbdEYXkstTl -EOcKjvbdfekymgHA -EPDKjvbdelfWflik -EPCjjvbddCTNSAUN -EPDKjvbdpfDeUVaI -DncLKvbdiBnbeWqR -EObjjvbdEuyPoljF -EPCkKvbdRDcBQRES -DncKjvbdhfibxujV -EObkKvbdVqnYBeMD -EPDKjvbdJKEAKQGd -EOcLKvbdsQVoJbuf -EOcKjvbdqcdhonVa -EObjjvbdJcKCqJcY -EOcKjvbdpfEEsuaI -EPDLKvbdxnTIYShc -EOcLKvbdxVMdqYlO -EObjjvbdZyDimcMS -DncKjvbdiGjCxvKV -DoCkKvbdRbEEkiYk -DoCjjvbdWIYVxHYz -EPDLKvbdYzcFqjVy -DncLKvbdTYLLmzjx -DoDLKvbdwXLaVaWV -DoDLKvbdMRvlyuQz -DoCjjvbdajkeoNcA -EPCjjvbdjEkHUoAO -DoCjjvbdZoNiFFZj -DncLKvbdlZTRryHU -DoCjjvbdcTDLTdJa -EOcLKvbdlhctRVSB -EObjjvbduaEYroFI -DncKjvbdzjUpQDsU -DoDLKvbdyqPNIiwA -DnbjjvbdhkdcnUby -EObjjvbdVYgtZjoO -DnbjjvbdCJLCLJFj -EPCjjvbdzeZnzdyp -DnbjjvbdqlyjZMIJ -EOcLKvbdGAnpyJzm -DoDLKvbdNGcQMpVL -DncKjvbdADSXiyiQ -DoCjjvbdLBLHNCYR -DoCkKvbduVnXjRTA -DncKjvbdtSqsZZeD -EPDKjvbdpyOhGqEY -EObjjvbdEuyPomKF -EPDKjvbdyOSgxTIc -EPDKjvbdGFiqnJTq -EOcKjvbdyYJJbPzL -DncLKvbdADRwjZiQ -DncLKvbdCSaDUFwS -DoDLKvbdEzsqEkbi -EOcLKvbdssSTYyeD -DnbkKvbdSBdEkiZL -EObjjvbdFWZQPlie -EObkKvbdbBVeFpPw -DoDLKvbdBdQBVjMf -EPDLKvbdptUHRqjt -EPCkKvbdQwODcMID -DoDLKvbdelevgMik -DnbjjvbdVTmUFkuj -DnbkKvbdLYqJrzuG -DoCkKvbdCTAbsevr -DoCjjvbdJpyeOfOF -EPCkKvbdOStWHEtp -EOcLKvbdKVtfEEfi -DoCkKvbdmuUykJqf -DnbjjvbdQZNAHSrK -DnbjjvbdMgDPlpUk -DnbkKvbdCIkBjhfK -EObjjvbdBsBCsewS -EOcLKvbdYzbfRivZ -EOcLKvbdrzMQSaHn -EOcKjvbdRosfjFcw -EPDKjvbdANHyTXZx -EPCkKvbdliDsptqa -EOcLKvbdACrXizIp -EPCjjvbdLFfICApu -DoCjjvbdbAvEepPw -EOcKjvbdTpqPVVHm -DoCjjvbdsBemMGjy -EPCkKvbduaEZTPEh -DoCkKvbdOStWHEtp -EPCjjvbdbBVeGQPw -EObjjvbdOSsufeUp -DoCkKvbdjAQHBPgK -EPCjjvbdbBWEfPow -EPDKjvbdtSqsZZdc -EPCkKvbdegjuqmpg -DoDLKvbdRotGifDw -DoDKjvbdmJEUQtrB -DoCjjvbdcIljKewY -EObkKvbdbiMjKewY -EObjjvbdcScKsdJa -EPDKjvbdtSqsYyeD -DnbkKvbdrpWOjCvG -EPDLKvbdBiKbLIej -EPCkKvbdBdPaWJmG -EObjjvbdZRNEhmEq -EOcLKvbdiUzFWrUb -EPCkKvbdmIdUQtrB -EPCkKvbdbUafxLTh -EOcKjvbdnCKWxOmu -DoCkKvbdsZkosBIO -DnbkKvbdHDjujCJj -DoCjjvbdWSOYCFLc -EPDKjvbdmJETqVSB -DnbjjvbdrXPkcJYq -EObkKvbdMgDPlpVL -DnbjjvbdZisHpGaf -DoCjjvbdGGJqmiTq -EObkKvbdIHGyyYXg -EObkKvbdqTsgRrKt -EObjjvbdmJDtRVSB -DnbjjvbdddoSBvbj -EPDKjvbddePSBvbj -DnbjjvbdBcpAvJlf -DncKjvbdezvYeItX -DoDKjvbdmgEwmNfy -EObjjvbdDigivXjA -EOcLKvbdmJEURUrB -EOcLKvbdePFTLTtS -EPDKjvbdVTmUGMVj -EPDKjvbdnBivwnnV -EPCjjvbdZnmhddzK -DncKjvbdZeXfzgiC -DoDLKvbdEuyPpNJe -DoDLKvbdqdEhpNua -DoDKjvbdFWYpQMie -DoCkKvbdMfcQMpVL -EOcKjvbdmttykKSG -DnbjjvbdlhcspuSB -EPCjjvbdWSNwbFMD -EPDKjvbdRbEElIyL -EOcKjvbdyNsHwsIc -EPCjjvbdrylQTAgn -DncLKvbdADSYJyiQ -EOcKjvbdZjTIPgBf -EObjjvbdKDKDQibx -EObkKvbdKDJcRJcY -DoCkKvbdmSZUzSdJ -EPCjjvbdaNKartlg -DoDKjvbdIGgZyXwg -EObjjvbdauCHXjsh -EObkKvbdxUmEpyLn -EPCjjvbdNsTugEtp -EPDLKvbdZyDimblS -DoDKjvbdbUagYKtI -DncKjvbdliETpuSB -EOcKjvbdDihKWXjA -DncKjvbdZtIiZETO -EObjjvbdygZMAMeX -DoDKjvbdfNGWgMik -DoCjjvbdZMSEUNkm -EOcKjvbdsrqsZZdc -EPCkKvbdACqxJzJQ -EPDLKvbdNdcshiKd -DoDKjvbdyqOmIiwA -EOcKjvbdRMwbYmtz -EOcKjvbdYpmEhleR -DoDKjvbdjJfHimYS -DoCjjvbdrbFmMHLZ -DoCkKvbdBcpBWKNG -DoDKjvbdIxTbHkqQ -DoDKjvbdhuZdwSUb -EPDLKvbdJYUBglQp -EPCkKvbduCcUwVno -DnbkKvbdwuNEpyMO -DncKjvbdssSSxzEc -DoDLKvbdGdLWJbKK -EObjjvbdFjdsDIMu -DncLKvbdfkGzbfAE -EOcLKvbdrRtkOLBN -EPDLKvbdajkfOmcA -EPCjjvbdrMzJxkhJ -DncLKvbdqZOhHREY -DoDKjvbdmJEUQuSB -DnbkKvbdRDbaQRES -EPCjjvbdpyPHgREY -DnbjjvbdMIalQxAS -DncLKvbdiZuGMROG -DoDKjvbdgFkymfgA -DncLKvbdsCGMkgLZ -EObkKvbdRotHJecw -EPDKjvbdkClKpftg -EPCkKvbdRjyGUgLT -EOcKjvbdhuZdvqtb -EOcLKvbdmttzKjSG -EObjjvbdhlEdOVDZ -DoDLKvbdZisHpGaf -DnbkKvbdTqQntuHm -EPDLKvbdNdctIiLE -EObkKvbdWRnXbFLc -EPDLKvbdKVtfDdgJ -EPCkKvbdJSyBTMwl -DnbkKvbduWNxKQsA -DoCkKvbdqGEFUVaI -EPDKjvbdhkdcnVDZ -EPCjjvbdySnIlrBg -EOcLKvbdYlRctNlN -EObkKvbdvBDxroFI -DoDLKvbdxwiJbPzL -EPCjjvbdyNsHxTJD -DoCjjvbdhfjDYujV -DoDLKvbdcImKLFwY -DnbjjvbdqwQMChxq -DncLKvbdaaWEfQPw -DnbkKvbdUQqOuUhN -EOcLKvbdUaCRSqSZ -DnbjjvbdRMxByOUz -EPDKjvbdKCjCpjCx -DncLKvbdrMzJyMIJ -EPCjjvbdOEdThhjd -EPDKjvbdrSUkOKaN -EObkKvbdMowpunGs -DoCjjvbdhzVGLpmf -EOcLKvbdaMkBsVMg -DoCjjvbdkIGkfFnL -DnbkKvbdYpldiNFR -EPDLKvbdZxcjNcMS -EPDKjvbdGGKRnJUR -EPCjjvbdbiNKKfWx -EObjjvbdmRyUyrci -DncKjvbdLrXNZtpz -DncKjvbdZjTIPgCG -DnbkKvbdypoNIiwA -EPCjjvbdDihKVxKA -DncKjvbdyfxlANFX -DoDKjvbdiMFEOVCy -EPCkKvbdtcDUvvPP -DoCkKvbdEvYpQMie -DnbjjvbdZLrDtOLm -EPCjjvbdKQzFPGNe -EPDKjvbdGdLVjCJj -DoDKjvbdqYoHfqDx -DoDLKvbdFVxoomJe -DnbkKvbdKRZePFnF -DoCjjvbdFVyQQMjF -DnbkKvbdTulQJsaR -EObkKvbdkHgMFenL -DoDKjvbdVUMselVj -EPDLKvbdrDdhonVa -DncKjvbdkVvmcaxX -DoDLKvbdrRuKnLAm -EOcKjvbdJbibpjDY -EPDKjvbdXrlAmToY -DnbkKvbdZirhQGbG -DnbjjvbdjgfkfFnL -EOcKjvbdGFjSOJTq -DoDKjvbdSCDeMJYk -DoCkKvbdpecdtWAh -EObjjvbdzeZnzdyp -DoCjjvbdMJBlQxAS -EPDKjvbdnBivwnmu -DoDKjvbdRadElIyL -DoDLKvbdsZlPsBHn -EObjjvbdznopeDLx -EOcLKvbdCJKbKiFj -DncLKvbdmgExNNfy -DnbkKvbdnPzYvKxb -DncKjvbdrDdiPnVa -DoCjjvbdAMgxrwZx -DncLKvbdTfzmkwWF -DncKjvbdqiAJdloF -EPCkKvbdwuMeRZLn -DoCjjvbdVUNUFkuj -DoDLKvbdKQyePGNe -DncKjvbdLqvlzVQz -DoDKjvbdmgFYNNgZ -DnbjjvbddxZtTrFz -EObkKvbdqTsgSSKt -DnbkKvbdZxcimcMS -DoCjjvbdANHySvyx -DoDLKvbdZQmFJMdq -DoCkKvbdHDjujBij -EPDLKvbdsPuoJbuf -EPCjjvbdYpmEhmFR -DncLKvbdZjTHpGaf -EPDKjvbdEuyQQNKF -DoCkKvbdmbKWxPNu -DoCkKvbdRjyFtfjs -DoCkKvbdiifHjNYS -EPDKjvbdpyOhGpdY -DoDKjvbdUVlPitBR -DoCjjvbdEKIJuwjA -EPCjjvbdFkFTDHmV -EOcLKvbdySnJNSCH -DncLKvbdRpUHJedX -EPDKjvbdtvOYJpsA -DoDKjvbdKDKDQjCx -DoDLKvbdaMkCTUmH -EOcKjvbdMpYRVnGs -EOcKjvbdtSqsYzFD -DncLKvbdKaKgNCXq -DoCkKvbdsCFllGkZ -EObkKvbdNrsvGeUp -DoDKjvbdmaivxOnV -EOcLKvbdOEctIhjd -DoCkKvbdemGXGljL -DoDLKvbdjvWmdBxX -EPCkKvbdCIjbLIej -EPCjjvbdkHfkfFmk -DoDLKvbdwzIGFwdr -EOcKjvbddBrlrAUN -EPCkKvbdJutecdgJ -DoCjjvbdWRmwaeLc -DnbkKvbdiVZdwRuC -DnbjjvbdGLEsDHmV -EPCkKvbdxsOJNSCH -EPCjjvbdIwtBgkqQ -DncKjvbdbrbjtDjB -EPCkKvbdjhGkeemk -DncKjvbdWWiXvDeH -EPCjjvbdnUtzKiqf -DncKjvbdTukoitAq -DncLKvbdCIkBjhfK -DoCkKvbdhgKDZWJu -EPDKjvbdBhkBjiFj -DnbjjvbdMfbpNPtk -DoDKjvbdnBjWxPOV -DoCjjvbdEJhKWYKA -EOcKjvbdTpqOtuHm -DoCjjvbdwzIFfXdr -EOcKjvbdrpVoKDVf -EOcLKvbdEYYLtTsl -DoCkKvbdLFfICBQu -EOcKjvbdeXzTsrFz -EOcLKvbdSQUHKFdX -EOcLKvbdraemMHLZ -EPDKjvbdkIGlFemk -DncKjvbdOYOuzcnU -DoCkKvbdIwtCILpp -DncLKvbdZoNiEdzK -DoDKjvbdsrqsZZeD -EPDLKvbdzGyMANEw -DncLKvbdBraCsewS -EObkKvbdpyOgfpcx -DnbjjvbdxmrgxTIc -EOcLKvbdZjSgpHCG -EPCjjvbdrWpMDIxq -DncKjvbdZtJIyESn -EPCjjvbdJSxaSmXl -DoCjjvbdiMFEOVCy -DoCjjvbdDwwlTstM -DncLKvbdJYUCHkpp -EPDLKvbdsrrSxzFD -EObjjvbdkHgMFfNk -EPDKjvbdOStVgFUp -DnbjjvbdjhHMGGOL -DnbjjvbdZyEJmcLr -EPDKjvbdDihKWYKA -DncLKvbdRosfiecw -DoCjjvbdyTNhmSCH -DnbkKvbdFeirNhsq -DoDKjvbdrDeIpNvB -EObkKvbdVAaqTRSZ -EPDLKvbdLAkGlbXq -EOcKjvbdVAaprqRy -EPDLKvbdfIKvRnQg -EPCjjvbdUQpoVUgm -EObjjvbdxVNEpyMO -EOcKjvbdsCFllGkZ -DncKjvbdsBelkgLZ -DoDLKvbdvlvANDeN -DoCjjvbdnBivwoNu -EObjjvbdsCGMkgLZ -EObjjvbdsPvPJbvG -EPDLKvbdxrnImRbH -EPDLKvbdNPxRVnHT -DoDLKvbdMtrqkNAX -DoDKjvbdiGicZWJu -EPDKjvbdOFEUJJLE -EPDLKvbdoAKzshDn -DoDKjvbdehKvRnQg -EObjjvbdLLBIWAKZ -EPDKjvbdeOdsLUUS -DncKjvbdjvWmdBxX -DncLKvbdezuyFJTw -EPCkKvbdNPwpumgT -EPCjjvbdkxsRrxgU -EPDLKvbdptUHSSLU -EPDKjvbdeATqNXif -EPCkKvbdjlakzEgP -EObjjvbdyXiKCPzL -DoCjjvbdhlFDmuDZ -DncKjvbdauCGxLUI -EObjjvbdySmiNSBg -EOcLKvbdfNGWfljL -DncLKvbdVviYWDdg -EPCkKvbdkIHLefOL -EPDLKvbdRNYCZNtz -DoDLKvbdmfdxNOGy -DoDLKvbdcScKtDjB -EOcLKvbdEPDLKvcE -EPCjjvbdUaBprqSZ -EObkKvbdddnqbXDK -EPCkKvbdaaVeGQQX -DoDLKvbduoTzqKnt -DnbjjvbdqwPkbhxq -EObkKvbduaEZTOdh -EOcLKvbdKfFhBaRV -EOcKjvbdVYgtZjoO -EOcLKvbdrSVKnKaN -DnbkKvbdsCFmMGjy -DnbkKvbdSLYeuGkT -DoCkKvbdwWlAvAuu -EPCjjvbdRXOEClID -EPCkKvbdCIkCKiFj -EOcKjvbdGckViajK -DoCkKvbdznpRFCkx -DnbjjvbdxKwDgzyf -DncKjvbdVAaprprZ -DoDKjvbdOEctIhjd -EObjjvbdmIdTptqa -DnbjjvbdvwMAuaWV -EObkKvbdEYXksssl -EPCkKvbdiZtelQnG -EOcKjvbdqdEhpOVa -DnbjjvbdidjfuPAO -DnbkKvbdnBivxPNu -EObkKvbdrSVKmkBN -DnbkKvbdiCPDFWqR -DncKjvbdZisHofaf -DoCjjvbdJvVFcdfi -DoDLKvbdcyxpYYpb -DoCjjvbdrykpTBHn -EPDLKvbdqrUkOKaN -DoCkKvbdGQATWgFy -DncKjvbduaDxsPFI -EPCkKvbdYkqdTnLm -EObjjvbdQYmAGsRj -DnbkKvbdZyEKOCkr -DnbkKvbdOEdThhjd -EPDKjvbdiCOcFWpq -EOcKjvbdMfcQNPtk -EPDLKvbdLGFhBaRV -EPDLKvbdssSSyZeD -EPCkKvbdTAFJIBoE -EObkKvbdeFPRavbj -DnbkKvbdjKFhKNYS -DncLKvbdCJLBjiGK -DncLKvbdqlzJyLhJ -EOcLKvbdRyigsCvA -DoDKjvbdYqMdhldq -DnbjjvbdehKvSOQg -EObjjvbdMgColouL -DoCkKvbdehKuqnRH -DoDKjvbdQvmdCkhD -DoDKjvbdMSWlzVQz -EObkKvbdbhlikGXY -DoCjjvbdeAUQmYJf -EPCjjvbdZyEJmcMS -DoDKjvbdIGfzYxYH -DoDLKvbdHDjvJbJj -EOcKjvbdQwNdCkgc -EPCkKvbdRWnDcMHc -DnbjjvbdrMzJyMIJ -DncKjvbdlhctQuSB -DoDKjvbdbPgGdLzd -EObkKvbdijFhJmXr -DoCjjvbdbQGgDkzd -EPDLKvbdDihJvXjA -EObjjvbdaNKasUmH -DncKjvbdZyEKOClS -DnbjjvbdSLYfVHLT -DoDLKvbdwzHfFweS -EPCjjvbdfNFwHNJk -DoDLKvbdelewHNJk -EPCjjvbduaDxroEh -DoDKjvbddwytURez -DncKjvbdwtmEpyLn -EOcLKvbdCIkBkIej -EOcLKvbdiLddOUcZ -EPDKjvbdiUydwSVC -DncKjvbdrEEiQOVa -DnbkKvbdYzbeqivZ -DoCjjvbdkVwOECYX -DoDLKvbdZLqcsmkm -EObjjvbdVYgtZkPO -EOcLKvbdHffyxwwg -EPDKjvbdcIljLGWx -DnbkKvbdMpXpvNfs -EOcLKvbdFeirOJTq -DncLKvbdWWhxWEFH -DoCjjvbdZRMdhmEq -DnbkKvbdULvPBWPJ -EPDLKvbdZRMdiMdq -DnbjjvbdTYLMNzkY -DoCkKvbdZxcjNblS -DoCkKvbdKCibpicY -EPDLKvbddoFTKtUS -DncLKvbdcImKLGXY -EOcKjvbdKaLGmBwq -EPCkKvbdnHFYMnGy -EPDKjvbdUQqPUuIN -EPDKjvbdeAURNYJf -DoCkKvbdxwiKCQZk -DnbkKvbdKVuGDeGi -EPDKjvbdrovOicVf -DoDLKvbdrylQSaHn -EOcLKvbdySmhlrBg -EOcLKvbdNrsufeVQ -EOcKjvbdzoQREblY -EPCkKvbdzaAOgHCM -DoCjjvbdZLqdTmkm -EObkKvbdNGbpNQUk -EOcKjvbdZshiYdSn -EPDLKvbdDncLKvbd -EOcKjvbdqlzJyMHi -DoCkKvbdBhkCKiFj -EOcLKvbdRaceLhyL -EPDLKvbdxsNiNRbH -DoDKjvbdtcCtwWOo -DnbjjvbdmfdwlnGy -DncKjvbdREDBQQdS -DncLKvbdnPzYvKxb -EPCjjvbdjgfkefNk -DnbkKvbdnUtykJrG -EPDKjvbdSCEFLiYk -EOcLKvbdGcjuiajK -EPCjjvbdJYUCHlRQ -EPDLKvbdYpleIldq -EObkKvbdfMfWflik -DncLKvbdwuMdpyLn -DoDLKvbdEPDLLWcE -DoDLKvbdZLrDtOLm -DoCkKvbddZxoxYqC -DncLKvbdTulQKUAq -DncKjvbdqrUjnKaN -DoCkKvbdGFjRmiTq -EPCjjvbdpssfrRkU -EPDKjvbdrXQLbiYq -DoCkKvbdNQYQunHT -DoCkKvbdNrtWHEuQ -DncLKvbdjgflGGNk -DncKjvbdBsBCsewS -DoCkKvbdMpYRVmfs -DnbkKvbdKfFhBaQu -EObkKvbdGcjuiaij -EObkKvbdakMGOnDA -DnbkKvbdFyUuAcxC -DnbkKvbdtSrTZZdc -EPCjjvbdatafxLTh -EPCkKvbdUGzmlXVe -EObkKvbdZyDinClS -DncKjvbdyzdnSIJI -DnbkKvbdnPyxukZC -DoDKjvbdkDMLQgVH -EObjjvbdbVBfwjtI -EPDLKvbdzRPMhiwA -EObkKvbdhkeDmuCy -DnbkKvbdZQleImEq -EObjjvbdrDeJPnVa -EPDLKvbdaNLBsVMg -DnbkKvbdOEctIhjd -EOcKjvbdatagXkUI -DncKjvbdMowpunGs -EObkKvbdtvNwiqTA -DnbjjvbdyzdnSHiI -EObkKvbdbhlikFvx -EOcKjvbdaNKaruNH -DnbkKvbdiVZdvqtb -EObkKvbdVYgszKoO -DoCkKvbdjJfIKMwr -DncLKvbdezvZFJTw -EObkKvbdcyxoxYqC -EPDLKvbdFejSNiTq -DncKjvbdIwsbIMQp -DnbjjvbdTukpJsaR -EPDLKvbdIsZArlxM -EPDKjvbdTAEhgand -EOcLKvbdfNGXHMik -DoDKjvbdjcMLQgUg -DncKjvbdSLYfVHKs -DoCjjvbdnBjWwoOV -EPCjjvbdnBjWwnnV -EObkKvbdQvmccLgc -EPDKjvbdwuMeRYlO -DoDKjvbdNddUJIjd -DoCkKvbdqUTgSRkU -DoDLKvbdehLVqmpg -DoDLKvbdrovOjCvG -EObjjvbdzoPpdcMY -EPDLKvbdZRNFIleR -DnbkKvbdSLZGVGjs -DoCkKvbdySmiMrBg -DnbkKvbdwyhFfXeS -DoDLKvbdWHwvYHYz -DoCjjvbdIHHZyYYH -EObjjvbdJSyArmXl -DncKjvbdACqxJyiQ -DncLKvbdmpZxujyC -DoCjjvbdFkFScINV -EPDLKvbdCDpAujNG -DnbkKvbdhkeDnUby -DncLKvbdFWYopNJe -DoCjjvbdLAjfmCYR -EPCjjvbdxrmiMrCH -EObjjvbdcImJkGWx -DoCjjvbdFejRnJTq -EObkKvbdYTMAlsnx -EPCjjvbdsPvOibuf -EObjjvbdNeDshhjd -EOcLKvbdBiKbLIej -EObkKvbdauCGxLTh -EPDKjvbdbBWEepQX -EPCkKvbdVrNxBdlD -EObjjvbdMIalRYAS -EOcKjvbdJcKCpjCx -EOcLKvbdLqwNZtpz -DoCkKvbdZisHogBf -DnbjjvbdEPDKjvbd -DoDLKvbdFWZQQNJe -EObkKvbdHgGzYwxH -EOcKjvbdjbkkQfuH -DnbjjvbdtkxXAtBX -EPDLKvbdLAkHNCXq -EOcLKvbdWWhxVdFH -DncLKvbdCWzdIeQW -DoDLKvbdVvhwvDdg -EObjjvbdpfDeUWAh -EOcLKvbdqmZixkhJ -DncKjvbdyzdmrIJI -DncLKvbdRpTgJecw -DoDLKvbdGFjSOIsq -EOcKjvbdwuNFQyLn -DnbjjvbdIsZAsMwl -DncKjvbdptTgRqkU -DncKjvbdZQmEiNEq -DnbkKvbdauCHYLTh -EPDLKvbdyzdmrHhh -EPCjjvbdZoOJFEyj -EOcLKvbdUQqOttgm -DoCjjvbdRNYCZNtz -EPDKjvbdrRtkOLBN -DncLKvbdmajWxOmu -EPDLKvbdLBLHMbXq -DoDLKvbdCIjajhfK -EObjjvbdYkrDtOMN -EOcLKvbdUtNUGMVj -EObjjvbdaSFcHsek -DnbkKvbdXrkaMtPY -DoCkKvbdZQmFImFR -EOcLKvbdcJMijewY -EPDLKvbdGLErbhNV -DnbkKvbdiUydwSVC -EPDLKvbddndsKssr -DoDLKvbdxwhjCPzL -DoCkKvbdxVMeQxkn -DncKjvbdiBoCdwRR -EPDLKvbdnPyyVkZC -EPCjjvbdmuUzLKRf -DoDLKvbdSQUGiecw -DoDKjvbdRbDdlJZL -DncKjvbdqrVKnLAm -DoDKjvbdVBCQsQrZ -DoDKjvbdmbKWxPNu -EObjjvbdFVyQPmKF -DnbjjvbdiiehJlxS -EOcKjvbdIrxaSmYM -EOcKjvbdsZkosAgn -EOcLKvbdnCKWxPOV -EPDLKvbdKWUecdfi -DncLKvbdhgKDZWKV -EPDLKvbdySnImSCH -EObkKvbdJKEAKQGd -EOcLKvbdZMSETmkm -DoCjjvbdhgJcYujV -EOcLKvbdehLVqmpg -DoCkKvbdezuyFItX -DncLKvbdvBDxsOeI -EObkKvbdTulPisaR -DnbkKvbdajkfPODA -DoDKjvbdYkrEUOLm -EPCkKvbdfIKvSNpg -EPCkKvbdiBncEwQq -EOcKjvbdKWUecdgJ -EObkKvbdYlRcsmkm -EPCjjvbddwzUTqez -DnbjjvbdeYZstRez -EPDLKvbdxVNEqZLn -DncLKvbdFjeScINV -EObjjvbdxUleQxkn -DncKjvbdKWUfDdfi -DoDLKvbdssRrxzEc -EObjjvbdRpUGiedX -EOcLKvbdZQleJMdq -DnbkKvbdqdFIpNua -EPCjjvbdYzberKWZ -DoDKjvbdxxIjBoyk -EOcLKvbdEObkKwDE -DoDLKvbdqquLNjaN -DncKjvbdwuNFRZLn -DoCjjvbdqUTgRrKt -EObkKvbdVwIwvDeH -DnbkKvbdVwJYWEEg -DnbjjvbdYlSETnMN -DnbkKvbdqTsgRqjt -DoDKjvbdiGicZVjV -DnbjjvbdxnTHxTJD -EObkKvbdqUTfrSKt -DoCkKvbdFyVVBEXb -EOcKjvbdqGDdsvAh -EPCkKvbdTkunaVni -EObkKvbdMRvlzVQz -EPDKjvbdDncKkWbd -EObjjvbdqqtkNkBN -DncLKvbdfHkWRnRH -DnbjjvbdiLdcnUby -EOcKjvbdVYgsyjnn -EPCjjvbdUtNTfMWK -EPDKjvbdqYoHgREY -DncKjvbdGZUuAdYC -DnbjjvbdDnbjjwDE -EOcKjvbdTqQntthN -EOcLKvbdUyITzLPO -EOcLKvbdjblLRHVH -DoCkKvbdLGFhCBQu -DncLKvbdliEUQuSB -EObkKvbdRacdkiZL -EOcLKvbdaSFcHtFk -DoDKjvbdJYTahLpp -EPDLKvbdUQqOuVIN -EPCjjvbdqmZjYkhJ -DoCkKvbdRjyGUgKs -EObjjvbdyNrhYSiD -EPCkKvbdBhkCKiFj -EObjjvbdYlSDtOLm -DoCjjvbdTAFIhBoE -DncKjvbdNdctJIjd -DoDLKvbdGdKvJaij -EObjjvbdJpydnfNe -EPDLKvbdCDpAvKNG -DoDLKvbdeEoRavbj -DoCkKvbddoFSjssr -EPCjjvbdqYoHfqEY -EPCkKvbdFkFScHmV -EObjjvbdcyyQYZRC -DoDKjvbdyzdmrHhh -DoDKjvbdUWLojUAq -EObkKvbdiCPCdwRR -DoCkKvbdCTBDTevr -EOcKjvbdLAkGlbXq -EPDKjvbdcyyQXyRC -EPDLKvbdyNsHxSiD -EPDKjvbdqUTgRrKt -DoDKjvbdJuuFdEfi -DoDLKvbdEXwktTtM -EObkKvbdeJirVtzn -EObjjvbdYTMBMsnx -DnbkKvbdNQXpumfs -EPDLKvbdzitopDrt -DncLKvbdDxXlUUUM -EOcKjvbdADSXiyhp -DoCjjvbdqTsgSSKt -DoCkKvbdZtIhxdTO -EOcKjvbdUyHtZjnn -EPDLKvbdcSbkTdKB -DncLKvbdxZgfGYEr -DncKjvbdeATplxJf -DoDLKvbdnCJwXnmu -DnbkKvbdbKlFnnDA -DoCkKvbdrDeIpNua -EPCjjvbdmttzKirG -DoDKjvbdbrbkUDjB -DnbkKvbddZxoxZRC -EObkKvbdhgKDZWKV -DnbjjvbdGFiqmhtR -EPDKjvbdULvOaWPJ -EOcLKvbdygYlANFX -DnbjjvbdIHGzZYYH -EOcKjvbdhkeENuCy -EOcLKvbdNddTiJLE -EObjjvbdGFiqnJUR -EOcLKvbdjvWnEBxX -EPCjjvbdVBCRTRSZ -DncKjvbdVBCRTRSZ -EObkKvbdBdQAvJlf -EObkKvbdJYUCHkpp -EOcKjvbdGckVjCJj -EObkKvbdBsAcUGWr -DoDLKvbdIxUBhMQp -DoDKjvbdMgDQNPtk -EOcLKvbdHEKujCKK -DoCjjvbdLhalQxAS -EObkKvbdULuoBVoJ -EPDKjvbdhfjDZVjV -DoCkKvbdKDJbqJbx -DoCkKvbdbKlGPNcA -DncKjvbdrpVnicWG -EPDKjvbdvAdZSneI -DnbkKvbdFyVUaEYC -EOcKjvbdHDjuibJj -DnbjjvbdbiMjLFvx -EPCjjvbdUsltGLvK -DoCjjvbdkNBkzEgP -DncLKvbdFxtuBEYC -EOcKjvbdnBjWxPNu -DnbkKvbdqUTfrRjt -EPCjjvbdZHXEAPSi -DoCjjvbdxxJJapZk -DncKjvbdZyDimcLr -DnbjjvbdiBnbeWpq -EObjjvbdjbkkQftg -EObjjvbdqvokbhyR -EOcLKvbdeYZtTrFz -EPCkKvbdLqvmZtpz -DoDKjvbdNeDsiIjd -EPCkKvbdeXystRez -EOcKjvbdAMhZSvzY -EPCjjvbdSwkMNzkY -DoDKjvbdtlYXAtBX -EPCjjvbdBvzdIdov -DoDLKvbdVBBqSqRy -EOcLKvbdTvMQKUAq -EOcLKvbdxVMeQyMO -EPDLKvbdBsAbtGWr -DoCkKvbdKefHaaRV -DncLKvbdCTBDTewS -EPCjjvbdTIyjRAAl -DoDKjvbdkxsSSxft -EObjjvbdjvXOECXw -EPDKjvbdVTlsfLvK -EOcKjvbdjJfHjNXr -EObjjvbdfMfWflik -DnbkKvbdYqNFImEq -DoDLKvbdcJMikFvx -DoCkKvbdrXPlDIyR -EObjjvbdeOdsLTtS -DncLKvbdJSyArmXl -EObjjvbdkNBlZeHP -EObkKvbdfHkVqnRH -DncLKvbdKCjCqKDY -DoDLKvbdUyHsykOn -DncKjvbdWWiYWEEg -EPCkKvbdKWVFdEfi -EObkKvbdFpATWgFy -EOcKjvbdrzLpTAgn -EPCjjvbdhuZeWrVC -EPCkKvbdraellGjy -DncLKvbdGKeTCgmV -DoDLKvbdCEQAvJlf -DoDLKvbdJvUfEFGi -EOcKjvbdHDkVjCJj -EPCjjvbdZxdJnClS -DoCjjvbdcImJjewY -DoDLKvbdkDMLRHUg -DoDLKvbdqZOggREY -DoCkKvbdkMakyeHP -DoCkKvbdEvYpPmJe -DncLKvbdJJdAJpHE -DoDKjvbdEPCjkXCd -DnbjjvbdlAmOmALA -DoDLKvbdsBfNLgLZ -DncLKvbdKyQjSzuG -EPDLKvbdeAURMxJf -EPCjjvbdkHflGGOL -EOcKjvbdEuxpPlie -DncKjvbdcyyPxYqC -DoCkKvbdRDbaPqES -DncLKvbdaaVeFpQX -EOcLKvbdMuTSLNAX -EPCkKvbdbiMjKfWx -EOcKjvbdSCEEkiZL -DncKjvbdbhmJkGWx -DncKjvbdWXJYVcdg -EOcLKvbdvBDxrndh -DoCkKvbdCEQBVjNG -EPDLKvbdxUmFQyMO -DnbkKvbdznpRFCkx -DoCjjvbdKDJbpjDY -EOcLKvbdREDBQRDr -DoDLKvbdZtIhyETO -EObjjvbdKfGHbBQu -DnbjjvbdnUtzKirG -EPDLKvbdyNsHwsIc -DoCjjvbdIrxaSlxM -DoCkKvbdRjyFuHLT -EPCkKvbdJvUfDdgJ -DnbkKvbdgQBzvcwh -DnbkKvbdpyOgfqEY -DnbkKvbdmRxuZsEJ -EObkKvbdmRyUysDi -DnbjjvbdrzMPraIO -EPDLKvbdDxXksssl -EPDLKvbdqUUGrSKt -EPCjjvbdZisIPfbG -EPDLKvbdiGicZVjV -DnbjjvbdqcdiPnVa -DoDLKvbdGKdsCglu -EPCkKvbdYSlBNUOx -DoCkKvbdjmBkyeHP -EObjjvbdKDJcRKDY -EPDKjvbdiLdcmuCy -DoCjjvbdbAvEfQQX -EPDKjvbdegjvRmqH -EOcLKvbdrounibvG -DoCkKvbdliEUQtrB -DoCkKvbdrXPlChyR -DnbkKvbdcyxoxZRC -DoCkKvbdWIYWYHYz -DnbkKvbdmJETptrB -EObjjvbdbBVeGPpX -DoCkKvbdypnliKXA -EOcLKvbdatagXkTh -EPDKjvbdrounjDWG -EPDKjvbdUyHsyjnn -EPDKjvbddZxoxZRC -DnbjjvbdKCjCpjDY -DoCjjvbdKkBHvAJy -DnbjjvbdjbkkRGuH -DoCjjvbdrafNMGjy -DncKjvbdxnTHwsJD -DncKjvbdemFvfmJk -DnbjjvbdIwsbILqQ -EObjjvbdUMWPAvOi -EOcLKvbdGKdsChMu -DoCjjvbdWXIxWEEg -DoCjjvbdvPTzqKnt -DoDKjvbdILazmwRL -EPCkKvbdjlakzFHP -EPDLKvbdKDJbqKCx -EOcLKvbdHELWKBjK -DoCkKvbdOFDshhkE -EPDKjvbdBhkCKhej -DoDKjvbdNddTiJKd -EPCkKvbdVqmwadkc -EPCkKvbdFfKSOItR -EPCjjvbdZshiYcrn -DncLKvbdvAcxsOeI -EObkKvbdKVtfEFHJ -DncLKvbdXsMBNUPY -DoDLKvbdCTAbtGXS -DoDKjvbdRyjHsDWA -DoCjjvbdJcKDRJcY -EOcKjvbdEuxpPljF -DncLKvbduWNxKQsA -EOcLKvbdhuZeXSUb -EObjjvbdjvWnDaxX -EObjjvbdwWlAvAuu -EObkKvbdqquKnLBN -DoDLKvbddCSmSATm -DoCjjvbdwtmEpxlO -DnbjjvbdDoCkLWcE -DncLKvbdwyhGFxEr -EOcKjvbdrykosAgn -DnbjjvbdNeEUJJLE -DoDKjvbdjuwNdCYX -EPDKjvbdiGibyVjV -DnbjjvbdYqNEhmEq -EPDLKvbdxVNEpyLn -DoCjjvbdZeYGzgiC -DoCjjvbdZjTIQGbG -DnbkKvbdSPsfjGEX -EObjjvbdBsBDUGXS -DoCkKvbdsBfNMGkZ -EOcLKvbdLBLGmCXq -EPDKjvbdJTZBTNYM -DnbjjvbdJTZBSmYM -DoDLKvbdjKFgjNYS -DoDKjvbdqlzKYkhJ -EPCkKvbdkWXOECYX -EObkKvbdFkEsDINV -EObjjvbddndsKstS -DoCjjvbdauBfwjsh -DnbjjvbdFjeTCglu -EOcLKvbdfMfWflik -EObjjvbdlYsRryGt -EPCjjvbdtbcVWuoP -DnbjjvbdMgDPmQVL -DoDLKvbdjhHLefNk -EOcLKvbdUsmTfMWK -DoCkKvbdptTfqqjt -EObkKvbdrRuKmjaN -EPCjjvbdzoQQdcMY -DoDKjvbdrpVoKDVf -DoCkKvbdlZSrTYft -DoCjjvbdBhjajiFj -EOcLKvbdzoQQdbkx -EObkKvbdOhAYZAYa -EOcKjvbdjvXNdBww -DnbjjvbdEXwlTtTl -DoCkKvbdzjVPocsU -DoDLKvbdZQldiMeR -DncKjvbdYNqAYVVt -DnbjjvbdtvNxKRTA -EPCjjvbdqceIonWB -EOcKjvbdyXiKCPzL -DoCkKvbdfIKurNpg -DoDKjvbdFxuVAdYC -EOcLKvbdeOdrjssr -DncLKvbdxnShYTIc -EPDLKvbdoznEKwoA -DoDLKvbdptTfrRkU -DncLKvbdkWWnDaxX -EPCjjvbdKWVGDeHJ -EPCjjvbdtumwipsA -DoCkKvbdZxcinDMS -EObjjvbdCWzdIeQW -EPDKjvbdHgGzYwwg -EOcKjvbduDCtvvOo -DnbjjvbdqvokbiZR -DnbjjvbdmIcsptqa -DncLKvbdrJAJdmPF -EPCkKvbdKjaHvAJy -DoCkKvbdhuZdwSUb -EOcKjvbdnPzZVjyC -DoDKjvbdYSlAmUPY -EOcKjvbdffLzNgHA -DncLKvbdptUHRqjt -EPCjjvbdyTNiMqag -DoCjjvbdauBgXkTh -EPCjjvbdbiMikGXY -EOcLKvbdIHGzZXwg -DncKjvbdrXPkcIxq -DnbjjvbdOTTugEuQ -DnbkKvbdjcMKqHUg -DoDKjvbdffMZnHHA -DoCjjvbddijSWUzn -DncKjvbdBhkCKiGK -DncKjvbdJYTbHkqQ -DnbkKvbdqwPlCiZR -DoCkKvbdxUmFRYkn -DoDKjvbdmSZUzTDi -EPDLKvbdkyTSSxft -DoCjjvbdmajXYPOV -EPCkKvbdMowqVnHT -DncLKvbdTppoUuHm -EPDLKvbdgFkymfgA -EObjjvbdhgJcYujV -DncKjvbdtAGqIABS -DoDLKvbdqZOhGpdY -EObkKvbdjbkkRGuH -DoCjjvbdGLEsChNV -DnbjjvbdZoOIeEyj -DncLKvbdbrbjsdJa -EPCjjvbdGGJqmiTq -EPCkKvbdNPxRWNgT -EPCjjvbdJpydnfOF -EOcKjvbdcyxoxYpb -EPDKjvbdmozZWLYb -EObjjvbdVTmUFlVj -DoCjjvbdNrtWGduQ -DncKjvbdqUTfqqkU -DoDKjvbdTfznMWue -EOcLKvbdNsTugEuQ -DoDLKvbdjhHLfGOL -EObjjvbdZtJJYdSn -DoDKjvbdZjTHofbG -DncKjvbduCbtwVno -EPCkKvbdZtIhxcsO -EOcLKvbdnUuZkJqf -EObkKvbdiCPCeXQq -EOcKjvbdZtJIxcsO -EOcLKvbdZRNEhmFR -DnbkKvbdFjdsDINV -DncKjvbdsZlQSaIO -EObjjvbduLxXAtAw -DncKjvbddoFSjtTr -DoCkKvbdmbKXXoOV -DoDKjvbdOAIsTirA -DncLKvbdMfcQMpVL -EPDKjvbdsrqrxzFD -EOcLKvbdZRMdiMdq -EObkKvbdCTAbsfXS -EPDLKvbdtunYJpsA -EObkKvbdYSkaNToY -DoCkKvbdZMRdUOMN -EPCkKvbdIsYaSmYM -DncLKvbdVYgtZkPO -EObjjvbdaNLBsUmH -EOcLKvbdZyEKOCkr -DoDLKvbdOSsufdtp -DoDKjvbdhbPCdvqR -DnbkKvbdiZuFkpnG -DoDKjvbdHDjujCJj -EPDKjvbdCDpBVjMf -EObkKvbdeFOrBwDK -DoDLKvbdhgJbxvJu -EObjjvbdiZuFlQmf -EPDKjvbdeuzwpJzs -EPDKjvbdezuyEhsw -EPCkKvbdJYTbIMQp -DnbkKvbdkIHLeenL -DoCkKvbdAMgyTXZx -DnbkKvbdfIKvRnQg -EPDLKvbdJqZePFnF -DoCjjvbdRjxfVGkT -EOcLKvbdySmhlqbH -DnbjjvbdEYYMUTtM -DoDLKvbdhtydvquC -EObjjvbdZRMdiMdq -EPCjjvbdVZITzLOn -DoCkKvbdmuVZjjRf -DoCjjvbdzoQREbkx -DnbkKvbdkyTSSxgU -DoCjjvbdzRPNIjXA -EPDKjvbdnPyxvLZC -EOcKjvbdSZjHrbvA -EPCkKvbdShyjRABM -EObjjvbdYpmEiMeR -DoCjjvbdFaOqYizm -DncLKvbdEvZQQMjF -DncKjvbdNrtWGeVQ -DoDKjvbdqdFJPmvB -DnbjjvbdRXODblID -DoDLKvbdyzdnRhIh -EPCkKvbdcTCjsdKB -DncLKvbdJcKCqKCx -EObjjvbdmfdwmNgZ -EPDLKvbdqUTgSSLU -EObjjvbdZyEKODLr -EPDKjvbdTppoVVIN -DnbjjvbdFVyPpNJe -EPDKjvbdJYUBhLqQ -EPDLKvbdqceIpOWB -EPDLKvbdiBnbeXQq -DnbkKvbdGZVVBEYC -DncKjvbdGLFTDINV -EObjjvbdUGzmlXWF -EOcLKvbdxrmiMqbH -DoDLKvbdJpzEnenF -EObjjvbdEvYoomJe -DoDKjvbdJqZdoFme -EObjjvbdEuyPpMie -EOcKjvbdmtuZjjRf -EPDKjvbdjKGHilwr -EPCkKvbdpaIeAWgd -DoDKjvbdGZVUaDxC -DoCjjvbdFkErcHlu -EOcKjvbdrbFllGjy -DnbkKvbdMRwMzUpz -DoCkKvbdDxYLtTsl -EOcLKvbdLBKfmBxR -DoCjjvbdVwJYWDeH -DoCkKvbdZoOIdeZj -EPDLKvbdpfEFUWAh -EOcLKvbdKWVGDdfi -EObkKvbdtvNwipsA -DoCjjvbdwuNEqZMO -EObkKvbdfSBWzkbo -EPDLKvbdFxuVAdXb -DnbkKvbdRWnEClHc -EOcKjvbdkCkjqHUg -DoCjjvbdbsDKscia -EPDLKvbdzQoMiKXA -DnbkKvbdRDcApQcr -DoDKjvbdZtIiYcrn -DoDLKvbdqZPHgQdY -EObjjvbdyfxlAMeX -EObjjvbddjJrWUzn -EPDKjvbdjcMLQgVH -EOcLKvbdozmckXoA -EPDKjvbdcJMjLGWx -EPCkKvbdbhlijewY -EObjjvbdrEFJPnWB -EOcKjvbdmuVZjirG -DncKjvbdnBjXYOmu -DncLKvbdjcLjqHUg -EPDLKvbdlhdUQuRa -DoDKjvbdVwIwvEFH -EObkKvbdZMSDsnLm -DoDLKvbdzHZMAMdw -EOcKjvbdZMSDsnLm -DncKjvbdZshhyDsO -DncKjvbdCEPaWJlf -EOcKjvbdxxJKCQZk -EPCkKvbdezvZEiTw -EPDLKvbdypoMiKXA -EPCkKvbdnUuZjjRf -DnbkKvbdFfJqnJUR -DoCjjvbdTpqPUthN -DncKjvbdcyxoxYpb -EObkKvbdCSaCsfXS -DnbkKvbdRacdlIyL -DoCjjvbdTIzKRABM -EPCkKvbdatbGwjsh -EObjjvbdUsltGMWK -DoDLKvbdtvOXjQsA -DnbjjvbdYSlAmUPY -EOcKjvbdwuNEpxkn -EObkKvbdYqMdiMdq -EOcKjvbdnGeXlmgZ -DnbkKvbdqwQLcJYq -EObkKvbduVmxJqTA -EObjjvbdmoyyVkYb -DoDKjvbdBdPaWKMf -DncKjvbdVvhwvEFH -EObkKvbdauBfxLUI -EOcLKvbdMgDQNQUk -EOcKjvbdsQVnjCuf -EObkKvbdjuvnEBww -DoCkKvbdkWXODbXw -EPCkKvbdZyDjNblS -DoDKjvbdZLqdUNlN -DoDKjvbdbLMFoNcA -DoCkKvbdFVyQPmJe -EOcKjvbdhkdcmuCy -EPCkKvbdmtuZjiqf -DnbjjvbdRbEFLiYk -EPCkKvbdySnJMqag -EPDLKvbdhlFDnVCy -DoCjjvbdzoQREblY -EPCjjvbdvBEYroFI -EPCjjvbdJbjCqJcY -DnbkKvbdliEURUrB -DoDKjvbdOTUWGdtp -EOcLKvbdZnmhddzK -EPDKjvbdSBcdkiZL -DoCjjvbdZMRctOLm -DoDLKvbduCcUwVno -DoDLKvbdEzspeMDJ -EPCjjvbdULunaWOi -DoDLKvbdIwsaglQp -EObkKvbdJuuFdFGi -EPCkKvbdQccBQRDr -EPDKjvbdNrsugEtp -EPDLKvbdEXxLtUUM -DoDKjvbdVBCQsRRy -DncKjvbdeFPSCWcK -DoDLKvbdhficYvJu -DncKjvbdkClLRHVH -EOcLKvbduWNxKRTA -EObjjvbdNPwpumgT -DoCjjvbdjmCLzFGo -DncKjvbdZtIhxdSn -EObkKvbdKQyePFme -EPCjjvbdEuxpPljF -DoCkKvbdZtIhyDrn -EPDLKvbdJpzFOfNe -EPDKjvbduaEZTPFI -EPDLKvbdSQTgKFcw -EOcLKvbdBcpAujMf -EPCjjvbdfHkVrOQg -EPCjjvbdKaKflaxR -EObkKvbdZjTIQGaf -EOcLKvbdijGIKMwr -EPDLKvbdvBEZTOdh -DnbkKvbdZRNEhleR -DnbkKvbdijFgimXr -EObjjvbdEASIlywX -DoCjjvbdKaKgNCXq -EPDLKvbdTppoUuHm -EPCkKvbdwzHefYEr -EPCkKvbdhtyeWrUb -DnbkKvbdPyNAGsRj -EPDKjvbdmttzKiqf -DnbjjvbdRacdkhyL -EOcLKvbdeJjRvUzn -EObjjvbdNHCpNQVL -EPCjjvbdgLGzcGAE -DoCkKvbdidkGtoAO -DnbkKvbdKDJcRKCx -DnbjjvbdSQTgKGEX -EPDLKvbdyqPMiJwA -DnbkKvbdLrWlytpz -DnbjjvbdmgExNNgZ -EPCkKvbdlYsRrxgU -DnbjjvbdTkuoAvPJ -EOcKjvbdgFkymgHA -EPDLKvbdmaivxOnV -DnbjjvbdEztQeMDJ -EObjjvbdWfYzUAPT -DnbkKvbdiMEdNuDZ -DoDKjvbdgQBzwEXh -EOcLKvbdSBcdlIyL -DnbjjvbdrMzJxkhJ -DnbjjvbdddnrCXDK -DncLKvbdmbKXXnnV -DnbjjvbdYzbfSKWZ -EPCjjvbdUMWPBVoJ -EPDKjvbdBraDUGWr -DoCkKvbdFkFTDINV -DncKjvbdYkqdTmkm -DncKjvbdmpZyVjyC -DoCjjvbdZisIQHCG -DncLKvbdYqMeJMeR -EPDKjvbdZjTHpHBf -EOcLKvbdcJMikFwY -DoCkKvbdFpATXHGZ -DnbjjvbdVBBqSpqy -DoCkKvbddZyQXxpb -EOcLKvbdqlyiyMHi -EPDLKvbdfMfWgNJk -DoCjjvbdrNZjZLgi -EPCkKvbdeOdsKtTr -EPDKjvbdLrXMytpz -DncLKvbdQvnDcMHc -DoDLKvbdyYJJbPyk -DnbjjvbdrylPsBIO -DnbkKvbdTqROuUgm -DoCjjvbdcyyQYZRC -EObjjvbdbLMFnmcA -EObjjvbdbVCGxKsh -EObjjvbdelfWgMjL -EPDLKvbdnGdwmOGy -EPCkKvbdcTDLTdKB -DncLKvbdUxhTyjoO -EPCjjvbdwzHfFxEr -EPCjjvbdkxrqryHU -DncLKvbdDihJvYKA -EPCkKvbdRzJhScWA -EObjjvbdZHWdAOri -DoDLKvbdjbkkRGuH -DncKjvbdNVSrLNAX -DncKjvbdVqnYCElD -DnbjjvbdFWZPpMjF -DoCjjvbdZMRctNkm -EPCjjvbdRNXaxmtz -EOcLKvbdLZQjSztf -EObjjvbdePFSjssr -EOcKjvbdjbkkRHUg -EPDKjvbdcSbjtEJa -EObkKvbdKQzFPFme -DoCkKvbdnUtzKjRf -DncLKvbdeOeTKtUS -DoCjjvbdpstGqqjt -EOcKjvbdrpWPJcWG -EPCkKvbdwkXDgzyf -DncKjvbdnPyxvLYb -DoCkKvbdpxoIHRDx -DnbjjvbdLFegaaRV -EPCjjvbdrXQLcJYq -DncKjvbdWXJXvDdg -DnbjjvbdQdCaQRDr -EOcLKvbdWWiXuceH -DoCjjvbdbiNJkGXY -EPDKjvbdijGHjMxS -DoDLKvbdTfzmkwVe -EObkKvbdmSZUzTEJ -DnbjjvbdKefHaaRV -DncLKvbddoFSjstS -DncLKvbdSLYfUgKs -EPCkKvbdCIjbLJGK -DncKjvbdKNADzGuB -DoDKjvbdBcpBVjMf -DnbjjvbdpxoHfqEY -DoCjjvbdANHyTWyx -DoDKjvbdFjeSbgmV -DnbkKvbdxwiKCPzL -DncKjvbdqceIpNvB -DnbjjvbdLFfHbAqV -EPDLKvbdtTSTYydc -EPCjjvbdezvYdiTw -EObjjvbdWWiYVdFH -EOcLKvbdZyDjNbkr -EObkKvbdwzIFeweS -EPCjjvbdjmBkzFGo -EObjjvbdGAoRYizm -EObjjvbdjcMLQgVH -DoCjjvbddePRavbj -EOcKjvbdlhcspuSB -EPCjjvbdSCEFMJZL -EObkKvbdEYYLsssl -EObkKvbdpstGrSLU -DoDLKvbdIGgZxwwg -EObkKvbdWIYWYGxz -EPCjjvbdfILWSNqH -DnbkKvbdFWYpPljF -DoCjjvbdVAbRSqRy -EOcKjvbdeEoSCWcK -EOcKjvbdSBceMIxk -DoCjjvbdgFkzOGgA -EObkKvbdbPfgELzd -DnbjjvbdmtuZkJqf -EPCkKvbdYgWdAPSi -EObkKvbdmaiwXoOV -EOcKjvbdjuvnDbXw -DncLKvbdiBoCdvpq -DnbkKvbdZxcjNbkr -EPDKjvbdKfFgaaRV -DoDKjvbdNGcPlouL -EOcKjvbdHlBznXQk -EPCjjvbdKQydoFme -EPCjjvbdDxYLsssl -DoCjjvbdHbLydzAD -DnbkKvbdZisHofbG -DnbkKvbdvvkaWBWV -DncLKvbddxZtUSFz -EPCjjvbdBcpBWJlf -EObkKvbdVBBprpqy -DoCkKvbdaSFcITfL -DoCkKvbdZLqctOMN -EPDKjvbdFWYpQMie -DncKjvbdOEctJIjd -DoCkKvbdEuyQPmJe -DncLKvbdZGwEAOsJ -DncKjvbdlqyUzSci -EOcKjvbdKCibqKCx -DnbjjvbdEOcLKvbd -DncKjvbddneTLUUS -EPCjjvbdhbPDFWpq -DoCjjvbdeAUQmXjG -EPDKjvbdVwJYWDeH -DncKjvbdePFTKstS -DoCjjvbdjggMFemk -EPCjjvbdcScLUDjB -DoDKjvbdZjTIQGbG -EObjjvbdehKurNpg -DncLKvbdbsDLUEJa -EOcLKvbdEJgjWXjA -EPCkKvbdqquKnKaN -DnbjjvbdZjShQHCG -DoCjjvbdCEPaVilf -EObjjvbdzjUpQDrt -EOcLKvbdUVlPjUBR -DnbjjvbdeFPSCWbj -DoCkKvbdKxpirzuG -DncLKvbdrykpTAgn -DoDKjvbdemGXGljL -DncLKvbdTYKlNzkY -DncKjvbduaDyTOeI -EObkKvbdnBjWwoOV -EPCkKvbdGdLWKCJj -EPDKjvbdKeegaaQu -EObkKvbdxnShXrhc -DoCkKvbdsBemLgKy -EPCjjvbdrzLoraHn -EPDLKvbdrRuKmjaN -DncLKvbdmajWxPOV -DncKjvbdKVuGDeGi -EObjjvbdziuQPdTU -DnbkKvbdZxcinCkr -EPCkKvbdlqxtzTDi -EPCkKvbdyzeOSHiI -DnbkKvbdqmZiyMIJ -EOcLKvbdIwtBgkqQ -DncLKvbdfekzOHHA -EPCkKvbdKNADzGuB -EOcLKvbdUaBqSqRy -EPDKjvbdddnrBvbj -DncLKvbdmuVZjirG -EOcKjvbdbBWEepPw -DncLKvbdwjvdHzyf -EPDKjvbdmgFXlmgZ -EPCkKvbdtSqryZeD -EObkKvbdOFEUIhkE -EOcKjvbdiBncFXRR -DncLKvbdxZgeeweS -EPDLKvbdxwiKCPyk -EPDKjvbdHEKvJajK -DncKjvbdrafMlGjy -EOcLKvbdwWlBWBWV -DncLKvbdegjvRmqH -EObkKvbdehKvRmqH -DoDLKvbdUaBpsQrZ -EPDKjvbdRaceMJYk -DnbkKvbdZRNEhldq -DnbjjvbdKCibpjDY -DoDLKvbdKaLGmCXq -DncLKvbdKaKflbYR -DoCjjvbdZQleJNFR -EPCjjvbdZHWdAOsJ -EObkKvbdpxnggRDx -EPDKjvbdiUzFXSVC -DncKjvbdhfjDZWJu -DoCjjvbdYkrDtNlN -EOcLKvbdkVvmdBxX -DnbjjvbdFkFScHlu -DoCjjvbdlrYuZrci -EOcKjvbdrDdiPnWB -DoCjjvbdfoazvcwh -EPCkKvbdtkxWaUAw -EObjjvbdVYgsyjoO -EPCjjvbdssSTZZeD -DoCjjvbdbVBfwjsh -EPCjjvbdVgwuxGxz -EOcKjvbdZoNhdeZj -EPCkKvbdGYttaDwb -DncLKvbdvAcySoEh -DoDKjvbdIGfzZYYH -DoDKjvbdtcCtvvPP -EObjjvbdkxsRryHU -DnbkKvbdJSyBTMwl -DoCjjvbdsPuoJbuf -DnbjjvbdZxcimcMS -DoDKjvbdNGbpMouL -DnbjjvbdSZjHrbvA -DoCkKvbdmRxtysDi -EOcLKvbdZQmEiMeR -EPCjjvbdpfEEtVaI -EPCjjvbdtTRrxzEc -DoCkKvbdZdxGzghb -DncKjvbdrykpTBIO -EPCkKvbdxxIjCPyk -DncLKvbdCEQAujNG -EOcLKvbdrWokbhyR -EPDKjvbdjJehKMwr -DncLKvbdSxLMNzjx -DnbjjvbdZyDinDMS -EObjjvbdZirhQGaf -DncLKvbdkClKqHVH -EObkKvbdfIKvRmqH -DoDLKvbdQvmcblID -EPDKjvbdNsTufdtp -EObkKvbdZRMeIleR -DnbkKvbddwytTrFz -EObjjvbdZxdKODMS -EPCkKvbdSLZFtgKs -EPDKjvbdrovPJbuf -EPCjjvbdHgHZxxYH -EPCjjvbdddoSBvbj -DoDKjvbdegkVqmpg -DoDKjvbdCfkfHAzc -EObjjvbdtvNxJqTA -EPDKjvbdhtyeXSVC -EPDLKvbdUtMtGLvK -EPCjjvbdFaPRYizm -EPCkKvbdVZIUZkOn -EPDKjvbdFeiqnIsq -EObkKvbdddoRbWcK -EOcLKvbdaNLCSuMg -EObjjvbdFpATXGfZ -DncLKvbdrXPkcJYq -EPCjjvbdFjdrcHlu -EObkKvbdUQqPVUhN -DoDLKvbdpxoHfqDx -DncLKvbdypoNIjXA -EPCjjvbdmRxuZrdJ -EPDKjvbdqZPHgREY -EOcLKvbdZGwEAPTJ -DncLKvbdjuwNcbXw -DoCkKvbdTlWPBVoJ -DoCjjvbdRzKIScWA -EPDLKvbdZnnJFEzK -EPDLKvbdqvokbhyR -DnbkKvbdAMhZTWyx -EPCkKvbdqYoHgRDx -EPDKjvbdZtJJZETO -EObkKvbdWRmxBdlD -DnbkKvbdwWkaWBWV -DncKjvbdgKfzcGAE -DncLKvbdtbcUwVno -EOcLKvbdcImJjfWx -DncLKvbdSwjlNzjx -EObkKvbdjblLQftg -DncLKvbdQmYByNtz -DnbjjvbdhlFDmtby -DnbjjvbdcTDKsdJa -EPCkKvbdqUTgSRkU -EOcKjvbdZQleImEq -EOcLKvbdtTRrxzFD -EPCkKvbdUVkpKUAq -DncLKvbdmbJvwoNu -EPDKjvbdrJAKFMne -DncKjvbdpyOhGqEY -EOcLKvbdLrWlzVQz -DnbjjvbdvAdYsPFI -EPCkKvbdDoDKjvbd -DoDLKvbdelfWgMjL -EObkKvbdaMjbTUlg -EObjjvbduVmwjRTA -EPCjjvbdHffyxwwg -DnbkKvbdXrkaNToY -DoCjjvbdZshhyDrn -DoDKjvbdunszqKoU -EPCkKvbdmJDtRVSB -DnbkKvbdcImKLFwY -DoCjjvbdpedEtVaI -DnbjjvbduMXwAtBX -EPDLKvbdhbPDFWpq -EPCjjvbdrDdiQNua -DnbkKvbdKxpirzuG -EObkKvbdcTCjtEJa -DncLKvbdZQmFIldq -DoCkKvbdqUUGrRkU -DnbkKvbddZyQXyRC -DncLKvbdIryBTNXl -EPDKjvbduaDxrneI -DoCkKvbdZMSDsmlN -DoDKjvbdrovOjCvG -EOcLKvbdhyuFkpmf -DoDLKvbdddnrBwDK -DncKjvbdDwxLstTl -EPDLKvbddZxpXxpb -DoDKjvbdCSaDTewS -EPCkKvbdVqmxBeLc -DoCkKvbdZMSEUNkm -DnbkKvbdznopdcMY -EPCjjvbdqYoHgQcx -EPCkKvbdlhdUQuRa -EObjjvbdauBgYLUI -EObjjvbdySnJMrCH -EObjjvbdkIGlGGOL -DoCkKvbdwXMAvBWV -DnbjjvbdiCOcFXRR -EPCkKvbdIHGzZYXg -EPDKjvbdiMFDmuCy -EOcKjvbdtlXvaUBX -DoDLKvbdhfibxuiu -EPCkKvbdqwQMChxq -EObkKvbdRkYeuGjs -DoDKjvbdYkrEUNlN -EPDKjvbdZshiYcsO -DnbkKvbdQlxBxnUz -DncKjvbdSPtGifEX -DoDLKvbdmajXXoNu -EObjjvbdHbMZdzAD -EPCkKvbdZyEKNblS -EObkKvbdKfFgbBRV -EOcLKvbdOTUVgFVQ -DoCkKvbdfMevgMik -EPDKjvbdptTfrSKt -DnbkKvbdxZhFexFS -DncLKvbdUaBqTQrZ -DoCjjvbduDDUwWPP -DoDKjvbdNsUVfduQ -EObkKvbdvOszpjoU -EObkKvbdNsTvGdtp -EPDKjvbdxwhiapZk -DoDKjvbdiGjCxvJu -DoDLKvbdxxIibPyk -DncKjvbdvAdYroFI -EOcLKvbdLAkGmBwq -DncLKvbdIsYaTMxM -EPDLKvbdFejRmiUR -DoCkKvbdbrbjscia -DoDLKvbdiHJbyWJu -EOcKjvbdIwtBhMQp -EObkKvbdpfDdtVaI -EObjjvbdfMevfmJk -EObjjvbdptUHRrLU -EPDLKvbdYgXEAOri -EObkKvbdZoOJEeZj -DoDKjvbdqUUGqqjt -DnbjjvbdxnTHwriD -EPDKjvbdfHkWRmpg -EPDLKvbdePEsLUUS -EPCjjvbdEPCkLXDE -DoCjjvbdgQBzvdYI -DoCkKvbdZjSgogBf -EObkKvbdtunYKQsA -EPDKjvbdezvYdiTw -EPDLKvbdLBLGmCYR -EObkKvbdSLYfVHKs -EPDKjvbdfILWSNqH -EObjjvbdqlyixkhJ -DoCkKvbdjKFgjNXr -DoDLKvbdyzdmrHhh -DoDLKvbdYpleImEq -DoDKjvbdUxgtZkPO -EPDLKvbdJKEAKPgE -DoDKjvbdRXODblHc -DoCkKvbdmozYujxb -EOcKjvbdMgCpMouL -DncKjvbdZsiJZESn -EPCkKvbdzROmIiwA -DnbkKvbdEOcLKvbd -EPCjjvbdpxoIHRDx -DnbkKvbdEJgivXjA -DoDKjvbdfHjurOQg -EObjjvbdyYIjCPzL -DoCjjvbdvlvANEEm -DncLKvbdOXoVzdOU -EObkKvbdatagYKtI -DnbkKvbdGYtuAcwb -EObkKvbdegjuqnRH -DnbkKvbdtumxKQsA -DnbkKvbdIxTbILqQ -DncKjvbdIsZBTMxM -EPCjjvbdRjyFuHLT -EOcKjvbdJXtCIMQp -DoDKjvbdYkqdUOLm -EObjjvbdZsiIyESn -DnbkKvbdhtyeWrUb -EPCjjvbdEuyQPmKF -EOcLKvbdeFOrCWcK -DoDLKvbdEvYpPlie -DoCjjvbdZtJIyETO -EPCjjvbdrWokcJYq -DoDLKvbduaDySneI -DncLKvbdsPunjCuf -EObkKvbdpyOhGpcx -EObkKvbdliDsqUqa -DoDLKvbdhaoCeXQq -DncLKvbdaRfChUFk -EOcKjvbdYTMAlsoY -EPCkKvbdfkGzbfAE -EOcKjvbdURQnttgm -DoDLKvbdDoCjjvcE -DncLKvbdCJKbLJGK -EPDKjvbdhlFEOVDZ -DnbkKvbduCcVWvOo -EPCjjvbdQdDBPpcr -EObkKvbdbBVdeopX -DnbkKvbdWHwuwfxz -DoDLKvbdsrqrxzFD -DoDKjvbdCSaCsfXS -DoCkKvbdNPxQunGs -EPDLKvbdyzeNrHhh -EObjjvbdWXIwudFH -EPCjjvbdKWVFceHJ -EOcLKvbdqwPlCiZR -DncLKvbdyOTHwsJD -DncLKvbdxUleRZMO -DnbjjvbdZHWdAPTJ -DoDLKvbdePEsKstS -EPDKjvbdHDkVjBij -EObjjvbdSPtHJecw -EObjjvbdyTOJNRag -EOcKjvbdhfibxuiu -EOcKjvbdRDbaPqES -DnbjjvbdemGWflik -DoDKjvbdwjwEHzzG -EObjjvbdsCGNMGjy -DnbjjvbdssRsYyeD -DoDKjvbdJvVFceGi -EPCkKvbdLZQjSzuG -DoDLKvbdqUUHSSLU -EPCjjvbdaaWEeoow -EPCjjvbdDjHiuxKA -EPDKjvbdZQmFIleR -DoDKjvbdRDbaPpdS -EPCjjvbdZoOJFFZj -EObjjvbdQmYBxnUz -EPDKjvbdKCibqKDY -DoDLKvbdsCFmMGjy -DncKjvbdKaKgMaxR -DoCjjvbdrMzJxkhJ -EObkKvbdeKKRutzn -EPCkKvbdcTCjscjB -EPCkKvbdZsiIyDrn -EObjjvbdnBjXXoOV -DoDKjvbdBiKakIfK -EOcKjvbdRpTfjGEX -DoCkKvbdtSqrxydc -EObkKvbdHDkVjBij -DncLKvbdqTsgSSLU -DncLKvbdzdzOzdzQ -DoDLKvbdVrNwadlD -DncLKvbdSQUGifEX -DncLKvbdxxJKBoyk -EPCjjvbdrzLpSaIO -DnbkKvbdhtyeXRuC -DoDKjvbdyTOImSBg -EPDLKvbddZxpXxqC -DoCkKvbdZMSDsnLm -DncLKvbdEARhlzXX -EPDKjvbdkWXOECYX -EObkKvbdSLYetgLT -EPDKjvbdTfznLvvF -DoCjjvbdSZjHrcWA -DncKjvbdmJDsptqa -EOcLKvbdZxdJmblS -DnbjjvbdKWUfDeHJ -EPCkKvbdLiBkpxAS -EObkKvbdePFSkTtS -DoDKjvbdYzbfSKWZ -EPCjjvbdvAdYsPFI -EObkKvbdTAFJIBnd -DnbkKvbdsZkpSaHn -DoDLKvbdczZQYZRC -EPDKjvbdTvMQKTaR -DnbkKvbdyYJKCQZk -EPCkKvbdVAaqTQqy -EOcLKvbdbPfgDkzd -EObkKvbdePErjssr -EPDLKvbdyTOJNRag -EPDLKvbdyTNiNSBg -DoCjjvbdqvpMCiYq -DoDKjvbdRpUHKGEX -DoCjjvbdDoCkLWbd -DncLKvbddCTNSATm -DoCkKvbdcSbkUEJa -EPDLKvbdzjVPocrt -DnbkKvbdxVNFQyLn -DnbkKvbdSKyFtfkT -DoCkKvbdmpZxukZC -DncLKvbdGFjSOJTq -EOcKjvbdhkdcmtcZ -DoCjjvbdyzeORghh -EPCkKvbdRbDeMJZL -DoDLKvbdZMRctOMN -EObjjvbdAMgySvyx -EOcLKvbdTYLMNzkY -DnbjjvbdmuVZjjSG -DnbkKvbdZsiIyDrn -EPDLKvbdjEjfuPAO -DoCjjvbdkxrrSxgU -DncKjvbdSLYfUfkT -DnbjjvbdBcpAvJmG -DoDLKvbdSPsgKFcw -DoCkKvbdrXQMDIyR -EObkKvbdKVuFdEfi -DnbkKvbdrSVLOLBN -DoDKjvbdZnmhdeZj -DoDKjvbdNHDQNPuL -DoDKjvbdpyOggREY -DoCkKvbdQvmcblID -EPCkKvbdMfbomQVL -EPCjjvbdNVTRjmAX -EOcKjvbdbhlijevx -EObkKvbdWWiXvEFH -DncKjvbdlqyVZrdJ -DnbjjvbdrSUkNjaN -DncLKvbdmSZUzTDi -EObjjvbdZQmEhmEq -EOcKjvbdiLdcnVDZ -EObkKvbdySmhlqag -DnbjjvbdbUagYLTh -DncKjvbdBdQAvKNG -DncLKvbdyzdnRghh -EObkKvbdLZRKSztf -DoDLKvbdRXOEDMHc -DncKjvbdFkFSbgmV -EPCjjvbdZQldiMeR -EPDLKvbdFfJqmiTq -EOcLKvbdpssgRrKt -DnbjjvbdKRZeOeme -DnbkKvbdnPzYvLZC -DoDLKvbdUVlQJsaR -EPCjjvbdqFceTvAh -EPDKjvbdEARhlyvw -EPCjjvbdNGbolotk -DoCjjvbdVhYWXgYz -DoCjjvbdUtMtFkvK -DncKjvbdZQldhleR -DnbjjvbdCEPaWKMf -EObjjvbduWOXjQsA -EOcKjvbdIjEAKPfd -DoCjjvbdURRPUuIN -EObkKvbdbhmKKfWx -DoDKjvbdxrnJMrCH -EObjjvbdGFirNiTq -DoDLKvbdtSqsZZeD -EPDLKvbdKkAhWAJy -EPCkKvbdbVBgYKsh -DoCjjvbdKWVFdFGi -EPDKjvbdwXMAuaWV -DoCkKvbdRXNdCkhD -EPCjjvbdZRMdhmEq -DncLKvbdcJMijfWx -DnbkKvbdZRNEiNFR -EObjjvbdAMhYrvyx -EPDLKvbdijGIJmXr -DoCkKvbdbhmJjfXY -EOcLKvbdrzMQTBHn -DnbkKvbdKVtfEEfi -EPCkKvbdxVNFRZMO -EPDLKvbdjcMLQgUg -EObjjvbdjuwODbXw -EObkKvbdZeXfzhJC -EPCkKvbdUyITyjoO -EPCkKvbdGFjRnIsq -DnbjjvbdIwsbHlRQ -DncKjvbdtTSTYzEc -EPDKjvbdhfjCyWKV -DoCjjvbdhytelQnG -DoDKjvbdxnTHxTIc -EOcKjvbdUQqPUtgm -EPDLKvbdkNCMZdgP -DnbkKvbdGKeTDINV -EOcLKvbdZMRcsmlN -DnbjjvbdRXNdCkgc -DoCjjvbdRXNccMHc -EObkKvbdRjyFuGjs -EPDLKvbdmJDtRUrB -DoDLKvbdpyPIGpdY -EPCjjvbdkNCLzEgP -DoDLKvbdZoNiFEzK -DoDKjvbdKVuFcdfi -DoDKjvbdqZOggQdY -EPCkKvbdSQTgJecw -EOcKjvbdrRuKnLAm -EObkKvbdbUbHYLUI -EOcLKvbdyNrgwsJD -DoDKjvbdegkVqnQg -DnbkKvbdGBOpxizm -EObkKvbdJbjDQicY -DncLKvbdSLZFuGjs -DoCkKvbdGckVibJj -DoCkKvbdzeZnzdyp -EObjjvbdxxJKCQZk -EObjjvbdJpzFPGNe -EPCkKvbdUsltGLvK -DoDLKvbdziuQQDsU -DncLKvbdRzKIScWA -DoCkKvbdSLYfVGjs -EPCjjvbdhgKDYujV -DoDKjvbdtunXjQsA -EPDKjvbdqceJPnWB -DncKjvbdUQqOuUhN -EOcKjvbdJvVFceHJ -EPCkKvbdMfcPmQVL -EObkKvbdNrsufdtp -DncLKvbdUQpnuUhN -DncKjvbdYkqdUOMN -EObkKvbdqceJQNvB -EPDLKvbdCWzdJFPv -DncKjvbdauBfxLTh -DncKjvbdZnnJEdyj -DncLKvbdEvYpPlie -DoDLKvbdhaoCdvpq -EObkKvbdCEQBVimG -EOcKjvbdBiKbKhfK -DnbkKvbdeuzwpJzs -DncLKvbdhlEcnVDZ -EObkKvbdkCkjpftg -DncKjvbdZQldhmEq -DoDKjvbdFyVVBEXb -DncKjvbdZirgogCG -EPCkKvbdWXJXvEFH -DnbkKvbdOStVfduQ -DnbkKvbdNGbpMouL -EObkKvbdcIljKfXY -DoDLKvbdXrlBMsnx -EOcLKvbdfNFwGmJk -EObjjvbdUQqPUuHm -DnbjjvbdEXxLtUTl -EPDKjvbdLGFhCBQu -DncKjvbdTYLLmzkY -DoCkKvbdkaNPNALA -DoCjjvbdFxtuBDwb -EPDLKvbdGGJrNhsq -DoCkKvbdZyEJnDLr -EObkKvbdDxXlTssl -EPCkKvbdGKdrbglu -EOcLKvbdmoyyVjxb -DnbkKvbdRNYByNtz -EObjjvbdGFirOItR -DoCjjvbdxUmFRZLn -EPCkKvbdsQWPJcWG -EPCjjvbdegkWSORH -DncLKvbdYzcGRjVy -DoCkKvbdRXNcblHc -EObkKvbdwtldqYkn -DnbkKvbdZisHpGaf -EPCkKvbdGQASvfey -DnbjjvbdeFPRavbj -EOcLKvbdGZVVBEYC -EPCkKvbdKDKDQicY -EPCkKvbdUsmUFkuj -DoCkKvbdatbHXjtI -EObkKvbdlrYtyrdJ -DnbjjvbdjKGHilwr -EOcKjvbdjlakyeGo -DoDLKvbdnPzZVkZC -DnbjjvbdCIjbLJFj -DoCkKvbdegkWSORH -DoDLKvbdjvXODbYX -EPDKjvbdaaVeFoow -DncKjvbdwtmFRZLn -EObkKvbdkNCLzEfo -DncLKvbdrbGMlGkZ -EObjjvbdczZQXxqC -DoCkKvbduaEZTOdh -EObjjvbdZxcjNbkr -EOcKjvbdCJKbKiFj -DnbjjvbdjEkGuPAO -DnbjjvbdZshhyDsO -DoDLKvbdbsCkUDjB -DoCkKvbdNddUIhkE -EPDLKvbduVnYJpsA -DnbjjvbdQvmccMHc -DoDKjvbdDjIKWXjA -DoDLKvbdxZhGGYEr -EObkKvbdqquKmkBN -EObjjvbdLBLHMawq -DoDLKvbdrbFmLgLZ -EPDLKvbdddnrBwCj -DoCkKvbdbrcLUEKB -DoDKjvbdqlyjYlHi -DncKjvbdQwNdDMID -EObkKvbdBiLCKhej -EPCkKvbdSZigsDWA -DnbkKvbdwuNFRYlO -EPDLKvbduCbtvvOo -DnbjjvbdaaWFFpPw -EObkKvbdRECaQQdS -DncKjvbdyOShXsJD -EPCkKvbdFVyPomJe -DoDLKvbdcJMijevx -EObkKvbdSZigsCvA -EObjjvbdrNZjYlHi -DnbkKvbdKfFhBaRV -EPDLKvbdSLZFtgKs -EPDLKvbdrbGNMGjy -EPCjjvbddwzTtSFz -DoDLKvbdnGdxNNgZ -DncLKvbdTfzmlWue -EOcKjvbdbLLfOmcA -DoDLKvbdNGcQNPuL -DncLKvbdUaCQsQqy -EPCjjvbdCfkfHAzc -EPDKjvbdlrYuZsDi -EPDLKvbdmajXYPOV -EObjjvbduCcUvvOo -DoDLKvbdJXsahLqQ -EPCkKvbdOSsugEuQ -DnbkKvbduaDyTOeI -DncLKvbdYqNEhldq -EOcLKvbdeOdsKtUS -EOcKjvbdkHgLefOL -EPCkKvbdrpVoKCuf -EObjjvbdShzJqAAl -DnbjjvbdgPazwDxI -EPDLKvbdEztQdlDJ -DoDKjvbdYpmFImFR -DncLKvbdsBellHLZ -DoCjjvbdatbHYKsh -DoCjjvbdptTgRrLU -EOcLKvbdznpRFCkx -EPCjjvbdWWiYWEFH -EPCjjvbdRosgJedX -DnbjjvbdkIGkefOL -DnbjjvbdiZuGLqNf -EPCkKvbdANIZTWyx -EObjjvbdZQmFJMdq -EObkKvbdjvWmcbYX -DncLKvbdRbEFMJYk -EOcKjvbdpfDdtVaI -EPDKjvbdJqZePFnF -DnbjjvbdeFOqavcK -DoCjjvbdnHFXlnHZ -EPCjjvbdTvLpKTaR -EPDLKvbdVgxVxHYz -EObkKvbdZRNFJMdq -EPDLKvbdbUafwkUI -EObjjvbdKCjDQibx -EPDLKvbdrXPlChyR -DoCjjvbdxsNhlqbH -DoDKjvbdNGbomPtk -EPDLKvbdLBLGmBwq -DncLKvbdIsZBTNYM -EPDLKvbdOXnuzcmt -EPDKjvbdKDJcRJcY -EObkKvbdiBncFWqR -DncLKvbdlhcsqUrB -DncKjvbdrylQTAgn -DoDLKvbdTlWOaWOi -EPCkKvbdegjurNpg -EObjjvbdyTNhmSBg -EPCjjvbdQccBPpcr -EPDKjvbdeOeSkTtS -DoCjjvbdGYuVAdXb -EObjjvbdrzMPsAhO -DncLKvbdrEFJQOVa -EPCjjvbdbhmKKfWx -EPCkKvbdeYZssqez -DnbkKvbdURQntuHm -EPDLKvbdkDLkRHVH -EOcKjvbdlZSrSxft -EObkKvbdijGHimXr -EOcLKvbdpxnggQdY -DncKjvbdJKEAJpGd -EPCjjvbdMowpumfs -DoCkKvbdmSYtysDi -DoDLKvbdBsBDTfWr -EPDLKvbdrMzKZMHi -DnbkKvbdBraDUGWr -DnbjjvbdDxYMTtTl -DncKjvbdFyUuBEYC -EPCkKvbdVZITzKnn -DnbkKvbdTkvPBWPJ -EObkKvbdSQTfjFdX -DoCjjvbdZisIPgBf -EPCkKvbdLGFhCAqV -DoCjjvbdNGcQNPuL -DoCkKvbdqlzJyMIJ -EObjjvbdZtIiZDrn -DnbjjvbdeEoRawCj -DoDKjvbdUaBqSqRy -EOcLKvbdmfdwmOGy -DoDKjvbdptTfqrKt -DoDLKvbdvAcxsPEh -DoCkKvbdySmhmRbH -EOcLKvbdhfjDZWKV -EOcKjvbdHffzZXxH -DoDKjvbdLFfHaaQu -EPCjjvbdgFlZmfgA -EOcKjvbdtcCuXVno -DoDLKvbdZirgpGbG -EObjjvbdNsUWHEuQ -DoDLKvbdsBfNLgKy -DoDKjvbdGGKRnJUR -DoDLKvbdKkAhWAKZ -DnbjjvbdOFDtJJKd -EPCjjvbdMuSrKmAX -DnbjjvbdyXiKBpZk -DncLKvbdOFDtIhjd -DoDKjvbdNPxQumgT -DnbjjvbdrSVLOKaN -EPCjjvbdmJDtRVRa -EPCkKvbdZeXfzgiC -DoDKjvbdhaoCdwRR -DncKjvbdiBncFXRR -EPDLKvbdvBEYrndh -DnbjjvbdBiLBkIfK -EPDLKvbdhgJbyVjV -DncKjvbdzRPNIiwA -DnbjjvbdegjvRmpg -DncLKvbdyYIibQZk -EPCkKvbdxnTIXrhc -EPCkKvbdhkeEOUby -DnbkKvbdjJehKMxS -DoDKjvbdkVwODbYX -EPCkKvbdFWYpQNKF -EPCjjvbdXrkaMsnx -EPDKjvbdRjxetgLT -DoDKjvbdEztRFLbi -DnbkKvbdqdFJQNua -EPDLKvbdTqQntthN -DoDLKvbdYORAXtvU -DnbjjvbdEYXksstM -EPDKjvbdkMbMZdfo -DncLKvbdJKEAKQGd -EOcKjvbdFejSOJUR -DoCjjvbdYlRdTmkm -DoDKjvbdlYrqrxgU -EPDKjvbdKVuFdFGi -EOcLKvbdJqZeOfNe -DnbkKvbdzoPpdcLx -DoDKjvbddePSCXCj -DoDKjvbdEASIlywX -DoCjjvbdrEEiPmua -EPCkKvbdidkGuPAO -EObjjvbdKRZdnfNe -DncKjvbdhgJcZWJu -EPDLKvbdZxcimbkr -EPDKjvbdNeEUIiKd -EOcKjvbdvAdZSndh -DncLKvbdjggMGGNk -EObkKvbdOStVgFUp -EPCkKvbdRaceMIxk -DncKjvbdDwxMUUUM -DncKjvbdWeyZtAPT -EPCjjvbdEYXkstTl -EOcKjvbdxsOJNSBg -EPCkKvbdKQzFPFnF -EOcLKvbdJXtCHkpp -DoCjjvbdtlYXBUBX -EPCjjvbdwuNFRYkn -DoDLKvbdkDLjpfuH -EPDKjvbdxrmhlqbH -EOcLKvbdjmCLzEgP -DoCjjvbduaEYsPFI -EPCkKvbdCEPaWJmG -DncKjvbdwtmEpxlO -EPCkKvbdJbjCpjCx -DnbjjvbdhzVGMRNf -EPCkKvbdZxcinDMS -DoCkKvbdrNZiyLgi -EOcLKvbdIHGyyYYH -EObkKvbdYNqAXuWU -EPDKjvbdtvNwjRTA -EPCkKvbdcJMjLFvx -EPCjjvbdNrsvHEuQ -DoCjjvbdnGeYMmgZ -DoDLKvbdSLZGUfjs -EPDKjvbdtvOYKRTA -DoDKjvbdziuPpESt -DoCkKvbdMgDPlotk -DoCkKvbdeFOrCXDK -DnbkKvbdMgColpUk -EPCkKvbdKVuFdFGi -DoDLKvbduCcUvuoP -DoCkKvbdRDcAopdS -EPDLKvbdehKvSNpg -EOcKjvbdDoCjjvbd -DoCjjvbdOSsufdtp -EObjjvbdGQASwGfZ -DncLKvbdiHJcYujV -DncKjvbdRadFMJZL -EPDLKvbdZxcinDLr -EPDLKvbdhaoDFXQq -DoDKjvbdcJNJkGXY -DoDLKvbduaDySoEh -EOcKjvbdUxhUZkPO -DncLKvbdVYhTzKoO -DnbjjvbdehKvRnQg -DnbkKvbdOhAXyAYa -DncLKvbdxsNiNRag -DoDLKvbdTppoVUgm -EObkKvbdURROuVIN -EOcLKvbdNsTugFVQ -DoCkKvbdrXPlChxq -EPDKjvbdHDkWJajK -DoCkKvbdxnTHxTIc -EPDKjvbdEvZPoljF -EPDKjvbdrzMQTBIO -EPCjjvbdqZPHgQcx -DoCkKvbdVqmxCFMD -DncLKvbdSPsgKGEX -DoCkKvbdzjVPodSt -DoDKjvbdnUtyjiqf -DnbjjvbdIBkydzAD -DoDKjvbdcTDKscjB -EOcKjvbdiHKDYuiu -DncKjvbdBraDUFvr -DoCjjvbdQmYCZOUz -EPCkKvbdySnIlqbH -DnbkKvbdkDLjqGuH -DnbjjvbdVqnYCFMD -DncLKvbdGKeTCglu -DncKjvbdlZSqrxft -DncLKvbdrEEhpNvB -EOcLKvbdrDeJQNvB -EPCkKvbdQmXbYmtz -DoCkKvbdQlxCYnUz -EPCjjvbdEObkLWbd -EPDLKvbdehKuqmqH -EPCkKvbdkCkjpfuH -DncKjvbdRXNcblHc -EPCjjvbdsrqrxydc -EPDKjvbdddoSBvcK -EPCjjvbdADRxJzIp -EPDLKvbdvAcxsPEh -EPDKjvbdSLYfUgLT -DoCkKvbdsrrTYyeD -DoCkKvbdLFegbApu -EPCjjvbdyqOliJwA -EPDKjvbdqTtGrRjt -EPCkKvbdhbObdvqR -EPCjjvbdcScLUEJa -DoDLKvbdRWnDblID -EObkKvbdZLrETnLm -DoDKjvbdiBoDEvpq -DoDKjvbdMpXqVmfs -EPCjjvbdpxngfpcx -DncKjvbdsCGNLfjy -DncKjvbdRjyGVHLT -EPDKjvbdkHflGFmk -DoDKjvbdlhdUQuSB -EPCjjvbdKaLGlbXq -EPCkKvbdVhXvXgYz -EOcLKvbdKyQirztf -EOcLKvbdliDsqVRa -DncKjvbdJutfDdfi -DoDKjvbdEXwksssl -DncLKvbdxxIjCPyk -EObkKvbdKaKgMaxR -EPDKjvbdkCkjpgUg -EOcLKvbdZLqctNlN -EPDKjvbdNddThhjd -EOcKjvbdYlSDsmlN -EPDLKvbdmgExNOGy -DoDKjvbdePErjstS -DnbkKvbdZQleIldq -DncKjvbdpssfrRkU -EOcKjvbdDxYMTtTl -EPCjjvbdySmhmSBg -EPDKjvbdiiehJlxS -EOcLKvbdFkFTDINV -EPCjjvbdVqmxCFMD -DncLKvbdIsZAsMwl -DncKjvbdBraDTfXS -EPDKjvbdmuUykJqf -DnbkKvbdFyVUaEXb -EObjjvbdzROmJJwA -DncKjvbdEYXlUUTl -EPDKjvbdBhjbKhfK -DoCjjvbdJpzEneme -DncLKvbdVwIwuceH -EPDKjvbdhfjDYuiu -EOcLKvbdFpASwHGZ -EPDKjvbdZoOJEdyj -DoDKjvbdqdEiPnWB -DoDKjvbdnBjXYPNu -DoCjjvbdiHKCxuiu -EOcKjvbdGLFTChMu -EOcKjvbdiMEdNtby -DnbkKvbdGdKujBij -DncKjvbdKQydneme -DnbkKvbdziuPocsU -DoDKjvbdmfdxNNgZ -EObjjvbdDxXlUTtM -EObjjvbddePSBwCj -EOcKjvbdNPxQvOHT -DnbkKvbdZHWdAOsJ -EPDLKvbdyqPNIiwA -DoCkKvbdpyPHfqDx -EPDLKvbdUslsekuj -EPCjjvbdiZtfLpnG -DoCkKvbdmSZVZsDi -EPCjjvbdpyOhGpcx -EPDLKvbdzitoodSt -DoDKjvbdVYhUZkOn -EObkKvbdBsAbtGWr -EPDKjvbdvBEYsOdh -EObkKvbdGcjuibKK -DncKjvbdeATqNYKG -DoCjjvbdKNAEZgVB -DncLKvbdqUUHSRjt -EOcLKvbdGcjuibJj -DoDLKvbdnBivxPOV -DnbkKvbdKCjDRKCx -DnbkKvbdrykosAgn -EOcKjvbdUaBqTRRy -EPCjjvbdcSbkTcjB -DoDLKvbdIxTbILpp -DoCjjvbdHDjuibJj -DncKjvbduaDxroFI -DoDKjvbdpedEtWBI -EOcKjvbdXsLaNTnx -EPCjjvbdYORAYVWU -DoCjjvbdYpleIleR -DoDKjvbdCDpAujMf -EPCkKvbdpxoHfpcx -DoCkKvbdUWMPisaR -EPCjjvbdmuUzKjSG -EPDKjvbdkxsRsYgU -EPCkKvbdZxcjNblS -DnbkKvbdbPffckzd -EPDKjvbdUVkpJtBR -DoCkKvbdvlvANEFN -EObkKvbdShyjRAAl -EPDKjvbdxrmhmSCH -DoDKjvbdjvXNcaww -EPDKjvbdkDLjqGuH -EObkKvbdhfibxuiu -EPCjjvbdlqyUyrci -EPDLKvbdFVxopMjF -EOcKjvbdqdEiPnWB -DncKjvbdrXPlChxq -DoCkKvbdxVMeRYkn -EPCjjvbdlhdUQtqa -EObjjvbdRotHKFcw -EObkKvbdwjvcgzzG -EPDLKvbdBhkBjiFj -EObjjvbdlZTSTZGt -DoCkKvbdkIHMFemk -EObjjvbddndrkTsr -DoDLKvbdFVxpQNKF -EPCjjvbdZsiJZETO -EObjjvbdiMFEOUby -DoCkKvbdhlFEOUby -EPCkKvbdrWolDIyR -EObjjvbdmajWwoOV -DoCkKvbdypoMiJwA -DoDKjvbdCDpAvKMf -EPDLKvbdzjVQQDrt -EObjjvbdjlakydfo -EObkKvbdJpyeOeme -DoDLKvbdiHJcYvJu -EOcLKvbdbsDKtEKB -EOcLKvbdrpWOjDVf -EObjjvbdelfWfmKL -EObjjvbdxnSgwriD -DnbkKvbdqlyjZLhJ -EPCkKvbdQdDBPqDr -EPCkKvbdRkYfUfjs -EObjjvbdhtydwSVC -DnbjjvbdWWhwvDdg -DoDLKvbdypnliKXA -DncLKvbdhfibxvKV -DncLKvbdxrmiNSCH -DncKjvbdUaBqSqRy -DoDKjvbdZMSDsmkm -DncLKvbdFjeScHmV -EPDLKvbdQYmAHSrK -DoCkKvbdUVlQJsaR -DoDKjvbdGKdsDHmV -EPCkKvbdkHgLfGNk -EPDKjvbdCIkCLJFj -DoCkKvbdrpWOicVf -DncLKvbdqmZiyMIJ -EObkKvbdNGcQMpUk -EOcLKvbdhfibxuiu -DoCjjvbdjcLjqHVH -EPDLKvbdZxdJnDMS -DncLKvbdHDkViajK -EPDKjvbdhytelRNf -EPDKjvbdZRNFIleR -EObjjvbdNQYRWNgT -EPCjjvbdNdcsiIkE -DoCkKvbdajkfOnDA -EPCjjvbdRNYCZOUz -EPCkKvbdBcpAvKNG -DncKjvbdqTsfqrLU -EPCjjvbdsZlQSaHn -EOcKjvbdqdFIpNvB -DoCjjvbdtbcUwWPP -EObjjvbdEYYMTtTl -EOcLKvbdgGLzNfgA -DoDLKvbdzdynzeZp -DnbjjvbdajlGPNcA -EPCjjvbdEJhJuxKA -EPCjjvbdLLBIWAJy -DnbkKvbdwzIFewdr -DoCkKvbdBvzciEpW -DoDKjvbdaNKasVNH -EPDLKvbdVviXudEg -EPDKjvbdcbSmSAUN -EPDKjvbdqcdiQNua -EPCkKvbdbBVdfPpX -EOcLKvbdrEFIpOVa -DoDKjvbdDigivXjA -DoDKjvbdYSlBMtPY -DoDKjvbdrRtjnLAm -DoDKjvbdKeegbApu -DnbkKvbdHgHZyXxH -EPCkKvbddwzUTrFz -DnbjjvbduDCtwWPP -EOcLKvbdaRfDHsfL -EPCjjvbddeOqbWbj -DncLKvbdOFDsiJLE -EObkKvbdSBceMIyL -EOcLKvbdrylQSaIO -DncLKvbdJcJcQjCx -EPCkKvbdaRfCgsek -EOcKjvbdzitoocsU -DoDKjvbdyzdnSIJI -EObkKvbddndsLTsr -DoDLKvbdcTDKtEKB -EPCkKvbddZyQYYpb -EPDLKvbdCIjakJFj -DncLKvbdLrWlzVQz -EOcKjvbdxrnIlqag -DncLKvbddeOrCWcK -DoCkKvbdRaceLiZL -EPCkKvbddePSCXCj -DoDKjvbdJpzFOeme -DoCkKvbdiMFEOUby -DncKjvbdUQqPVVHm -EOcLKvbdcSbjscjB -DnbjjvbdvPTzpjoU -EPDKjvbdEPDLKvbd -DncKjvbdvBEYsPEh -DnbjjvbdIxTbIMQp -DoDLKvbdZLrETnMN -EPCkKvbdZxdJmbkr -EPCjjvbdIidAKQHE -DncKjvbdrSUjmjaN -DnbkKvbdkaNOmALA -DnbkKvbdiGjCyViu -EPCjjvbdYkrDsmlN -EOcKjvbdypoMhjXA -DoCkKvbdiGjDZViu -DoDLKvbdZxcinClS -DoCjjvbdqUUGrSLU -DnbkKvbdYTLaNUPY -EObkKvbdehKurNpg -EOcKjvbdmRyVZrdJ -EObkKvbdZirhPgBf -EOcKjvbdpyOggQcx -DnbkKvbdfoazwEXh -DnbkKvbdmuUzLJqf -EPDLKvbdYlRdUOLm -DncKjvbdRjyFuGjs -DoDLKvbdQdDAopdS -DoCkKvbdmSYtysEJ -EObjjvbdQdDApRDr -DoDKjvbdyOTHxShc -EPDKjvbdptUHSRkU -EOcKjvbdLGGHaaRV -EOcLKvbdaaWFFopX -DoCjjvbdlBMnmALA -DnbjjvbdZnnIdeZj -DoCjjvbdZMRdUNkm -DoDLKvbdRMxByNtz -EPCkKvbdJYTahMRQ -DncLKvbdpyPIHQdY -DoCkKvbdVBCRTRRy -EOcLKvbdZyEKODLr -EObkKvbdRadEkiYk -EOcKjvbdcyyQXyRC -DnbkKvbdVqnXadkc -EPCkKvbdGKeTDIMu -DnbkKvbdrRtjnKaN -EObkKvbdFVxooljF -DoDKjvbdDoCjjvcE -DnbkKvbddneTLTsr -EPDKjvbdGcjvKCKK -EObjjvbdgPazvdYI -DoDKjvbdSLYfVHKs -DoCkKvbdEPCjkWbd -DnbjjvbdmaivxPOV -EObjjvbdJJdAJogE -DoDKjvbdhkddNtby -DoCkKvbdiCPDEwQq -EOcKjvbdmajXYOmu -DnbkKvbdqYngfqEY -EOcKjvbdTppoUuIN -EPDKjvbdNddThhkE -DncKjvbdDnbkKvbd -DnbjjvbdZRNEiNFR -EPCjjvbdaaWFFopX -EPDLKvbdBhjbKhej -DoCkKvbdfpBzvcwh -DoDKjvbdmSZVZrdJ -EObkKvbdbAueGQQX -EOcKjvbdNQXqWOGs -EPCjjvbdvAcySndh -EOcLKvbdySnImRag -EObkKvbdSxLLmzkY -DnbjjvbdcJMjLGXY -EObkKvbdBsBDUFwS -DoCjjvbdqlyjZLhJ -EPCjjvbdliEURVRa -DoDKjvbdptTgRrLU -DncKjvbdiBoCdwQq -EOcKjvbdEOcLLXDE -EObjjvbdEYYLtTsl -EPDKjvbdVTmTekuj -DncLKvbdLFegbBQu -EPCjjvbdmttzLKRf -EPDLKvbdpfEFTuaI -DncKjvbdiiegjMwr -EObkKvbdxVNEqYlO -DoCjjvbdRWnDblHc -EPCjjvbdaSFbgtGL -DnbkKvbdozmcjwoA -DoDKjvbdPyNAHSrK -DncLKvbdVqnXbEkc -EPCkKvbdFWYpQNJe -EOcLKvbdlYsRsZHU -EOcLKvbdQvmcblID -EObjjvbdRkYetfkT -DoCjjvbdFjdsDINV -EPCjjvbdrafNMGkZ -EPDKjvbdczZQXxqC -EPDLKvbdDwxLtTsl -DoCjjvbdFpASvffZ -DoCjjvbdiMEdOVCy -DoCkKvbdelevfljL -DnbjjvbdaSFcHtFk -DncKjvbdBhkBkIfK -EObjjvbdGKdsDHmV -DncLKvbdhzUekqOG -EOcLKvbdZshiZDrn -DncLKvbdDjIJuwjA -EPCjjvbdpxoHfqEY -EPCjjvbdOAIrsjSA -EPDLKvbdEuyPolie -EPDKjvbdssRrxydc -EPDKjvbdjlakzEgP -DncKjvbdiUydwRuC -DoCkKvbdZMSDtNkm -EPDLKvbdbBVeGQPw -EObkKvbdNHDPlpVL -DoDLKvbdDjHiuxKA -EPDKjvbdatbGwkUI -DnbjjvbdeqaWzkbo -DoDKjvbdvvlBWAuu -EObjjvbdZirhQHBf -EPCkKvbdDncLKvcE -DnbjjvbdehKvSNpg -DncKjvbdVwIwudFH -DoCjjvbdNQYRVmgT -EOcKjvbdNrtWGeUp -DncKjvbdvvlAvAuu -DnbkKvbdjKGHimXr -EObjjvbdhkddNuDZ -EPCkKvbdNddThhkE -EPCjjvbdsPunjDVf -EPDKjvbdxZgfFwdr -DncKjvbdZyDjNblS -EPDKjvbdjcMLQfuH -DncKjvbdwtmFRZMO -DncKjvbdVhXuwgYz -DoCkKvbdVZITyjnn -EPCkKvbdNrtWHEtp -EPCjjvbdMfbomQUk -EObkKvbddwyssqez -EPCkKvbdhfjCyVjV -DoDKjvbdtvOYJpsA -DoDKjvbdiLdcnVCy -EObkKvbdLrWlzUpz -DoCkKvbdSPsgKFdX -EPCjjvbdkNCLyeGo -DncKjvbdCSaCtGWr -DnbjjvbdRkZFtgLT -DoCkKvbdVAaprprZ -DnbjjvbdyXhibQZk -DoCkKvbdsQVnibvG -EPCjjvbduaDyTPFI -DncLKvbdUaCRSpqy -DoDLKvbdnPzYukZC -DoDKjvbdRWnDcMHc -EOcKjvbdxVNFRZLn -EOcKjvbdRkZGUfkT -DnbkKvbdvmWAMdEm -EOcKjvbdmbKXYOmu -EPCkKvbdyXiKCPyk -DnbkKvbdkHgMFfOL -DncKjvbdVYgtZkPO -EPCkKvbdDnbkKwCd -EObkKvbdKfGHaaRV -EPCkKvbdqZOggQdY -EOcLKvbdTlVnaVoJ -DoCkKvbdhanbeWqR -DnbkKvbdypoMiJwA -DnbkKvbduMXvaUBX -DoDKjvbddiirWUzn -EObkKvbdqYoHgQcx -DnbjjvbdFyUuBDwb -DoCkKvbdKCicQjDY -EPDLKvbdezvYeJTw -EPCjjvbdSxKlNzkY -DoDKjvbdQmYByOUz -DnbjjvbdIGgZxxXg -EPDKjvbdqmZjZLgi -DncKjvbdmfeYMmgZ -DncLKvbdGdLVibKK -DoCkKvbdZGvdAOsJ -EObkKvbdjSzhrkJz -EPDLKvbddePRbWcK -EObjjvbdDxXkstUM -DoCjjvbdvlvANDeN -EOcKjvbdrDdiQOWB -DoCkKvbdmajXXoOV -DncKjvbdUtMsekvK -EOcLKvbdxxJKBoyk -EPDKjvbdqYnhGpcx -EObjjvbdatafwkTh -DncLKvbdajkenmcA -DnbjjvbdZQleImEq -EPCjjvbdDncLKwCd -EObjjvbdHELWKBij -EPDLKvbdxrmhmRag -DoCjjvbdwXMBWBVu -EObjjvbdsPvOjCvG -EOcLKvbdssSTZZdc -EPCkKvbddndrkUUS -EOcLKvbdNGbolotk -EObjjvbdZMSDtNlN -EObkKvbdZshiYcsO -DncKjvbdDwxLsstM -EOcLKvbdqZPIGqEY -EOcKjvbdZRNFImFR -EOcKjvbdrDeIonVa -DnbjjvbdYzberKWZ -EObjjvbdegjvRnQg -DoCkKvbduDDUwWOo -EPDKjvbdRotGjGEX -EOcKjvbdKQyeOeme -EPCjjvbdDwxMTtUM -EObjjvbdpedFTvAh -EPDLKvbdFxtuBDxC -DoCjjvbdlqxtzSdJ -DncKjvbdZLrDtOMN -EPCkKvbdGdKujBjK -DoCkKvbdezvYdiTw -DnbjjvbdrEEiQOVa -DncKjvbdOYPVzdOU -DnbjjvbdxwiKCPzL -EObkKvbdRpTgJecw -DoCkKvbdwtmEpxlO -EPDKjvbdqFceTuaI -DncKjvbdsPuoJcWG -DncLKvbdRyjHsCvA -EPCkKvbdyXiJaoyk -EPDLKvbdJvVFcdgJ -DncLKvbdrXPlChxq -EObjjvbdvBEZTOdh -DoDKjvbdqvokcJYq -EOcKjvbdlqxtzSci -EPDKjvbdFkErbglu -DoDKjvbdEPDLKvcE -EObkKvbdijFhJlxS -DoCjjvbdOFDtJJKd -DnbkKvbdyXhiapZk -DncKjvbdEXwlTtTl -DncLKvbdZyEKOCkr -DnbkKvbdqlyjYlIJ -EObkKvbdIGfyxwxH -DnbjjvbdyNrgxTIc -DnbkKvbdeOeSkTsr -EPCjjvbddZyPxZRC -DncLKvbdkDMKpgUg -EPDKjvbdfIKuqnQg -EPCkKvbdhlFENuDZ -DoDLKvbdiBoCdvqR -EPCkKvbdySnImRag -DnbjjvbdIxTahLqQ -DoDKjvbdZnmhddyj -EOcKjvbdgQBzwEXh -EPDLKvbdfILWSNqH -DncKjvbdjcMKqGtg -EObkKvbdKQzEnfNe -EPDKjvbdUQqPVVHm -EObjjvbdREDBPpcr -EObjjvbdnHExMnGy -DnbkKvbdvBDxrndh -DncKjvbdCEPaVimG -DnbkKvbdGBPQxizm -EPDKjvbdLqwMzVQz -DnbkKvbdEPDLLXDE -EPDKjvbdwWkaWBVu -EObkKvbdxrnImSCH -DncKjvbdsrqrxzEc -DnbkKvbdpfDeUWAh -EPDKjvbdjAQHApGj -DoCkKvbdaSGChTfL -DoDKjvbdiHJbxvKV -EPDLKvbdlhdURUqa -EPCjjvbdIwsahMRQ -EObjjvbdGYtuBEYC -DncLKvbdNeEThhkE -EObkKvbdBvzdIePv -EPCjjvbdbAueFpQX -EOcLKvbdjAQGaQGj -EPCjjvbdNHDQNPuL -DncLKvbddoFSkUUS -DncKjvbdACqxJzIp -DnbkKvbdxLWcgzyf -EPCkKvbdTlVnaWPJ -DoCkKvbdCJKbLIfK -DoCkKvbdDwxMUTtM -EPCkKvbdEPDLKwDE -EOcLKvbdTvMQKTaR -EOcLKvbdeXytTrFz -EPDKjvbdNUrrLNAX -DnbkKvbdZjShPgBf -EObjjvbdjAPfaQGj -EPCkKvbdYlRdUNlN -EPDKjvbdzjUoocsU -DoDLKvbdKDKCqJbx -EPCjjvbdQvnECkhD -DnbkKvbdGckVjBij -EObjjvbdXmqAXuVt -EPCjjvbdeFPRavcK -DoDKjvbdEYXlUTsl -DoCjjvbdXrlBNToY -DoDLKvbdrRuLNkAm -DncLKvbdDxXlUTtM -EOcKjvbdwuNEqZLn -EPDKjvbdEOcLLWbd -DoCkKvbdpfDdtVaI -EOcKjvbdmpZyVjyC -EOcKjvbdtSrSxzFD -EObkKvbdsBemLfjy -DoCjjvbdUGznMWue -DncLKvbdbAvEfPpX -DnbjjvbduCcUwVno -DoDLKvbdTppoUuIN -DncKjvbdYqMeImEq -DoCkKvbdrDdhomvB -EObjjvbdgFkzOGgA -EPDKjvbdSwjkmzjx -DoCjjvbdREDBPpcr -EObjjvbdYkrDtNlN -EObjjvbdZisHogCG -DncKjvbdUtMselWK -DoDKjvbdkHfkeemk -DncLKvbdSLYeuHLT -EOcLKvbdeFOrBwCj -EObjjvbdHDjvKCJj -DnbkKvbdkIGkeemk -DoCkKvbdZQmFJMeR -DoCkKvbdqTtGrSKt -DncLKvbdcIljKfWx -DnbjjvbdRjxfUgKs -DnbkKvbdhyuFlROG -EObkKvbdpxoHfpdY -DoDKjvbdhuZdwRtb -DnbkKvbdBdQAvKMf -DoCkKvbdVTlsekuj -EObkKvbdCJLBkIfK -EOcKjvbdmgFYNNgZ -EPDLKvbdxrnImRag -DoCjjvbdbKlGPODA -DoCjjvbdMoxRVmgT -EPDLKvbdKfGIBaRV -DoDKjvbdSCEElJZL -EPCkKvbdmRxtzSdJ -EPDKjvbdjKGIKNXr -DnbkKvbdlhdTptrB -EPDKjvbdBcoaVilf -EPDKjvbdRzKIScWA -EOcKjvbdnHFXmOGy -EPCjjvbdFfJrNhtR -DnbkKvbdzaAPHHCM -DnbkKvbdwXLaWBWV -DoDKjvbdKeegaaQu -EPCjjvbdRotHKFcw -EOcKjvbdnGeXmOGy -DoCjjvbdmIdTqVRa -DncLKvbdfNGWgMik -EPCkKvbdrovPJbuf -EObkKvbdEvYpPljF -DncLKvbdOYPVzdOU -EObjjvbdrzLosAhO -DnbjjvbdyzdnSIJI -EOcLKvbdIsZArmYM -DoDLKvbdvAdZTPEh -DoCkKvbdQvnDcMHc -EObjjvbduMYWaUBX -DncKjvbdUyHszLOn -EPCkKvbdbrbjscia -EObjjvbdTkunaVni -EObkKvbdeATpmYKG -EOcKjvbdqUTfqrLU -EPDLKvbdGYttaDxC -EPDKjvbdRNYByNtz -DncLKvbdADRwizJQ -DncLKvbdKfFgaaQu -EPDKjvbdxZhGGYFS -DncLKvbdwtmFRYlO -EOcLKvbdehLVrNqH -DnbkKvbdKxpirztf -DoCjjvbdZxdKNcLr -DoDLKvbdrbFmMGjy -DoDLKvbdqYnhHQcx -EPCjjvbdGKeTDIMu -EPCjjvbdZRNEhleR -DnbkKvbdfMfXGmJk -DnbjjvbdRjyGVHKs -EPDKjvbdZHXEAOri -EObjjvbdxnTIYTIc -DnbjjvbdTpqOttgm -EOcLKvbdWXIwuceH -EOcLKvbdzROmJKXA -EPCkKvbduCbtwWOo -DncLKvbdJTZBTMwl -EObkKvbdlqyUysDi -DnbjjvbdrpVoJcWG -DoCjjvbdHDjvKCKK -EObkKvbdVwJXvDeH -EPDKjvbdZsiJZDrn -DoCkKvbdhfjDYvJu -DoDLKvbdZyEJmcLr -DnbjjvbdmajXXoOV -DoCkKvbdelewGmKL -DoDLKvbdUtMsfMVj -EOcKjvbdegjuqmpg -DnbkKvbdZMRctNkm -DncKjvbdhlEdOUcZ -DoDLKvbdqAiFAXIE -EObjjvbddBsMrAUN -EPDKjvbdaSGDHtGL -DnbjjvbdbVCGwjtI -DncLKvbdzdzOzeZp -EPDKjvbdKQyePFnF -EPDLKvbdauBgXjtI -EPDLKvbdCSaCtGWr -DnbkKvbdbsCjtEKB -DoDKjvbdCWzdIeQW -EPCkKvbdRbDeLhxk -EObjjvbdOEctJIkE -DoCkKvbdSPtGiedX -DncKjvbddZyPxZRC -DnbjjvbdTukpKUBR -DoCjjvbdpstHRqkU -DncKjvbdNdctIhjd -EOcKjvbdUWMPjTaR -DoCkKvbdLGGHbApu -EObjjvbdmozZWLZC -EObjjvbdULvPAvOi -EPDLKvbdcJMikFvx -DncLKvbdjJfHjMxS -EPCjjvbdqYoIHREY -DoCjjvbdiifHjNXr -EObkKvbdZLrETnMN -DnbkKvbdtSqsYydc -EPDLKvbdCIkCLJFj -DoCkKvbdliDsqUrB -DnbkKvbdNPxQumgT -EPDKjvbdACrYJyiQ -EOcLKvbdYTMBMtOx -DoDLKvbdNGcQNPtk -DncKjvbdtbbtvuno -DncKjvbdZLrEUNlN -DoCkKvbdaogHELzd -DoCjjvbdgFlZmfgA -EPCjjvbdvPTzpkOt -DoCjjvbdjKGHjMxS -EPDLKvbdauBgXjsh -EOcLKvbdiBoCeWpq -EObkKvbdSPsfjGEX -DnbkKvbdzGxlAMeX -DoDLKvbdqFcdtWAh -EPCkKvbdOYOuzcmt -DoCjjvbdDwxLtUTl -DnbkKvbdOTUVgFUp -DnbkKvbdiGibyWJu -EPCjjvbdUyITzLOn -DoCkKvbdbLMFnnDA -DoCjjvbdDwxLsssl -DncLKvbdBiLBjhfK -EPDKjvbdNPwpvOGs -EObkKvbdzQnliKXA -DoCjjvbdeYZssqez -DoCjjvbdeATplxKG -EOcLKvbdRyjIScWA -EPDKjvbddeOqbWcK -EPDLKvbdACrXjZhp -DnbjjvbdmuVZkKSG -EPDKjvbdVqmwbFLc -EPCkKvbdCSaCtFwS -DnbjjvbdVZHszLPO -DoDKjvbdVrNxCFLc -EOcKjvbdegjuqnQg -EPCjjvbdZMSETmlN -EOcKjvbdHDjvKBjK -EPCkKvbdyOTIXsJD -DoDKjvbdnQZyWKxb -DncLKvbdxwhiaozL -DncLKvbdNdcshhkE -EPCjjvbdXnRAYUut -DoDLKvbdNsUWGeUp -DncKjvbdWHwuwfxz -DnbkKvbdRpUGifEX -DnbjjvbdEOcLKwCd -EPDKjvbduaEYsOeI -DnbkKvbdjhHLfFnL -DncLKvbdZoOJEeZj -EPCkKvbdEPCjjvcE -EObjjvbdxUldqYkn -EObkKvbdOEdThiLE -DnbkKvbdjcMKpgVH -EObjjvbdkIGkeenL -DncKjvbdZsiJZDrn -EPCkKvbdxnShXsIc -DoDKjvbdZnmiEdzK -DoCkKvbdVTmUGLvK -EOcLKvbduCcVXVno -EObjjvbdZQleJNFR -EObjjvbdFejRmhsq -EPDLKvbdaMkBruNH -DoCkKvbdNQXqWNgT -DoDKjvbdjuwNcbXw -EPCjjvbdSBceLiYk -DoCjjvbdMgColpVL -DoDLKvbdVZHtZkPO -DoDKjvbduMYXBUAw -EPDKjvbdNeDshiKd -DoDKjvbdTAFJICPE -EObjjvbdJvVFceGi -EObjjvbdNHCpMpUk -DnbkKvbdijGIKNYS -DoDLKvbdDncKkXCd -DncKjvbdkMakyeGo -EObkKvbdjKFgilwr -DoCkKvbdOhAXyAZB -DoCkKvbdUGznMWvF -EOcKjvbdRosfifEX -EPDLKvbdfNFvgMjL -EObkKvbdxxJJbPzL -EPCjjvbdQlxCYmtz -EOcLKvbdgPazwEXh -DoDLKvbdkySrTYft -DoDLKvbdhgKDYuiu -DoDKjvbdYkrETmkm -EObjjvbdNPwpunHT -EOcLKvbdYlRdUNlN -DnbkKvbdZLrDtOLm -EObjjvbdxrnJMrCH -EObjjvbdZnnIeFZj -DoCjjvbdzRPMhiwA -DncKjvbdssSSxyeD -EOcLKvbdjAPgAofj -DncKjvbdRosfifEX -DoDKjvbdEXwktUTl -DnbjjvbdWRmwadkc -EPDLKvbdeEoRavbj -DoDKjvbdXsMBNToY -DnbkKvbdVqmxCFLc -EOcKjvbdkVwOEBww -DoCjjvbdfNGXGmJk -EOcLKvbdmtuZjiqf -DoCkKvbdnPyyWKyC -EObjjvbdJpydoGNe -DnbkKvbdjJfHimYS -DoCkKvbdyXhjBozL -DoCjjvbdkIHLeenL -EOcLKvbdTAEiIBoE -DnbkKvbdvBDxsPFI -DncKjvbdlhdTpuRa -EObjjvbdFfJqmiUR -EPCjjvbderAvzkbo -DncLKvbdwygeexEr -EObjjvbdSBdElJZL -EOcKjvbdySmiMrBg -EPDKjvbdatbGwkTh -DncKjvbdnBivwnmu -EPDKjvbdFxuVAdYC -EPDLKvbdqlzJyMHi -EPDKjvbdZRMdhldq -DoCjjvbdNeDtIhkE -DoCkKvbdfMewGlik -EOcLKvbdhaoDEwQq -DnbjjvbdIwsagkqQ -DncKjvbdkIHMGFnL -DoDLKvbdGdKuibKK -DnbjjvbdTAEiICOd -DncLKvbdNeEThiKd -EObkKvbdYpmEiNFR -EPDLKvbdFkFTDHlu -DoCkKvbdkDLkRHUg -DnbkKvbdyYIjCPyk -DncLKvbdFVyQPmKF -DnbjjvbdZQldhldq -DoDKjvbdVqnYBdkc -EPDKjvbdSKxeuGkT -EPCjjvbdiZuGLqNf -DnbjjvbdJTZArmXl -DnbkKvbdyNrgwrhc -EOcLKvbdrNZiyLgi -DncKjvbdSBdFMJZL -EPCkKvbdfMfWfmKL -EPDLKvbdfMevfljL -DoCjjvbdmIcsqVRa -DoDLKvbdrEEhpOVa -EPDLKvbdZRMeImEq -DoDLKvbdyTNiMrBg -EPCjjvbdsQVnibvG -EOcKjvbdvBDxsPFI -DoDKjvbdqquKnKaN -DncLKvbdqGDeTuaI -EPCkKvbdZdxGzgiC -DoDKjvbdkDLkQftg -DoDKjvbdePEsKtUS -DoDKjvbdUxgtZjoO -DncLKvbdxUmFRYlO -DnbjjvbdwuMeRYkn -DoCkKvbdRWmdClID -EPDLKvbdCDpBWJlf -DncKjvbduaEYrneI -DnbjjvbdfHkVqmpg -EPDKjvbdKxpirzuG -DoDLKvbdZLqdUNkm -DoDLKvbdDwxMTstM -EOcKjvbdrzLosAhO -DnbjjvbdqZPHgQdY -EObkKvbdjggMFfNk -EPCjjvbdZMRcsmkm -EObjjvbdEJgiuxKA -DncLKvbdZtJJZDsO -EObkKvbdRjxeuGkT -DncKjvbdqdFJPmua -DoCkKvbdGYtuAcxC -DoCjjvbdZnmheEzK -DoCkKvbdKWUfEFGi -DoCkKvbdfMfXGmKL -DnbjjvbdjvWmcbXw -DnbkKvbdyzeORhJI -EPDLKvbdpstHRqjt -DoDKjvbdTukpKUAq -DoDKjvbdSPtGjFcw -DncKjvbdWSNxCFMD -DnbkKvbdjlalZdgP -EOcLKvbdkxsRsYgU -EObjjvbdLFfICApu -DoDKjvbdCEQBWKMf -DoDKjvbdbAvFFpQX -DoCkKvbdhgKCxvKV -DncLKvbdjcMLQgVH -EPCkKvbdzitpQDrt -EOcKjvbdNVTRjmAX -EPDKjvbdkxsRsZHU -DoDKjvbdKDJcRKCx -EPDKjvbdFjeScHmV -EPCkKvbdZjTIQHBf -DnbkKvbdlqyUyrdJ -DoDKjvbdehKurORH -EObjjvbdbKlFoODA -DoCkKvbdwtmFQyMO -DoCjjvbdXnRAYUut -DoDKjvbdxsOIlqbH -DncLKvbdyNsIXrhc -DoDLKvbdCEQAvKNG -DncKjvbdRotHJedX -EPDLKvbdVZHsyjoO -DnbjjvbdkCkkRHVH -DoDKjvbdRWmcblHc -DncLKvbdqvokbiYq -DoDLKvbdRkZGVHLT -EObjjvbduCbuXVno -DoCkKvbdEJgivYKA -DoDKjvbdkWWnDbYX -EPDKjvbdnGdxMmfy -DoDLKvbdIHGzYxYH -DoDKjvbduCbtwVno -EObkKvbdqlyjYkgi -EObjjvbdVwIwudEg -DnbjjvbdfRaWzkcP -EPCkKvbdEARhlzXX -DnbkKvbdfMevfmJk -DncLKvbdZyDjNcLr -EOcKjvbdtAHQhABS -DncKjvbdkClKqGtg -DoCkKvbdEObkLXCd -EObjjvbdFkFTDINV -EOcKjvbdEztQdkcJ -DoCkKvbdKaLHNBxR -EPDLKvbdhaoCdvqR -EObkKvbdrJAJdmOe -EObjjvbdrpVnjCuf -EPCkKvbdFjeTCglu -DoCjjvbdqdEiPnWB -EPDKjvbdGFirOJUR -EPCkKvbdJmADzHUa -EPCjjvbdWWhwucdg -DncLKvbdBhkBjiFj -DoCkKvbdSZihSbvA -DncKjvbdZtIiZETO -EPDLKvbdCTAcUGXS -DoDKjvbdVqmxCFLc -DncLKvbdmajWwoOV -EPDKjvbdVhYVxHYz -DoDLKvbddoFSjtTr -DoDLKvbdrzMQTAgn -DoCjjvbdUVlPjUBR -EPDLKvbdtvOXipsA -DoCjjvbdrouoKCvG -EObkKvbdOSsufdtp -EPDLKvbdIGfzZXxH -EObkKvbdbQGgDkzd -DoCkKvbdOFDtJIkE -EPCjjvbdiHJbyWJu -DnbjjvbdLAkHMaxR -EPCkKvbdJTZBTMwl -DncLKvbdSQTfjGEX -EOcLKvbdlrZVZrci -EObjjvbdkyTSTZHU -EPCjjvbdxUleQxkn -EPDLKvbdEKIKWYKA -DoCkKvbdZHWdAPSi -EPDLKvbdxVNFRZMO -EPDLKvbdcSbkTcjB -DoCkKvbdlYsSTZGt -EPDKjvbduaDxroFI -EObkKvbdNHDQMouL -DoDLKvbdxrnJMqbH -DnbjjvbdmfeXmOGy -DoDKjvbdidkGtoAO -DnbjjvbdGYtuBEXb -DnbjjvbdRECaQQdS -DoCkKvbdmajXXnnV -DncKjvbdZMSEUNlN -EPCkKvbdZtJIxcrn -DncLKvbdJpydneme -DncKjvbdVviYWEEg -DoDLKvbdyXhjBoyk -DoCjjvbdbhlikGXY -DnbkKvbdVviXudFH -EPCkKvbdYTMAlsnx -EPCjjvbdxZhFeweS -DoCjjvbdyNsIXriD -DoDKjvbdznoqEcMY -DnbjjvbdauCHXjtI -DncKjvbdIsZAsMwl -EPCkKvbdZMSDtOLm -DnbkKvbdJqZePFme -EPDKjvbdkHfkeenL -DoDLKvbdaNLCStmH -DncLKvbdIwsbHkqQ -EObkKvbdfHjvRnRH -EPCjjvbdlqyVZsDi -EObkKvbdEuxoolie -DoDKjvbdjAPgAofj -EOcLKvbdjcMLRHVH -DncKjvbdjKFgjNXr -EPCkKvbdmIctQuRa -DncLKvbdJpyePGOF -DncLKvbdNGbpMouL -EObkKvbdpfDdsuaI -EPCjjvbdyzeORhIh -DoDKjvbdrDdhpNua -DoCjjvbdFfKRmhtR -EPDLKvbdpfEEsuaI -EPDLKvbdqcdhpOVa -EPCjjvbdVYgsykPO -DoDLKvbdDncLLXCd -EObkKvbduaEYroEh -EOcLKvbdkNBlZeHP -EObjjvbdGcjvJajK -DncLKvbdrpVoJbuf -EObjjvbdEKIJuxKA -DncKjvbdZxcjODMS -DncLKvbdmgFXmOGy -DoCkKvbdUMVoAuoJ -DoDKjvbdqcdiQNua -DnbkKvbdbrcKtDia -DnbkKvbdKfFgbApu -DncKjvbdezvZEiTw -DnbkKvbdlqxtzSdJ -DoCjjvbdOTUWGeUp -EPCkKvbdJXtBhMQp -EOcLKvbdOAJTTjSA -EOcKjvbdfILVrNpg -EOcLKvbdnQZxvLZC -EPDKjvbdyYJJaoyk -DnbjjvbdkMakzFHP -DnbjjvbdjbkjpfuH -DoCkKvbdgGLymfgA -DoDLKvbdJYUBhLpp -EPCjjvbdJSyBTMxM -DnbjjvbdyTNiMrBg -DnbkKvbdqYoHfpdY -EOcKjvbdZyEKNcLr -DoCkKvbdZtIiYcsO -EPCkKvbdZQmFJNFR -DncKjvbdSPsgKFdX -DoCjjvbdvwMAuaWV -EPDKjvbdHfgZxxYH -EObkKvbdrSUjnKaN -DnbjjvbdKWVGEFGi -DncKjvbdsPvOjDWG -EPDKjvbdhzVFkqOG -DoDKjvbdssSSyZdc -DoDKjvbdYkqcsmlN -EPCjjvbdYpldiNFR -DncLKvbdemFwGlik -DoDLKvbdjuvmdBxX -DoDKjvbdCTBDTewS -DoCkKvbdKeehBaQu -EObkKvbdwyhFexEr -DoDKjvbdQvmccMID -DoDKjvbdVviYVceH -EPCkKvbdmRxtyrdJ -EPDLKvbdYqMeJNFR -EPCkKvbdRbDeMIxk -EPCkKvbdcJMjKfXY -DnbkKvbdVwIwvDdg -DnbjjvbdIwtCHkpp -DncLKvbdczYpYYqC -EPCkKvbdKaLGmBxR -DncKjvbduLwwAsaX -DncLKvbdssRrxzEc -EObjjvbdrXQMCiZR -DnbkKvbdZRNFImFR -EOcKjvbdACqwjZhp -DnbjjvbdbKlGOmcA -EObjjvbdGFirOJUR -EPDLKvbdqvokbiYq -EOcKjvbdJmAEZgUa -DoCkKvbdbhljKevx -EPCjjvbdbKlGPNcA -EOcKjvbdRMxByOUz -EOcKjvbdbsDLUEJa -EPCkKvbdRacdlJZL -EObkKvbdmuUyjjSG -EObkKvbdjKFgjNXr -DoDLKvbdlhctQuRa -DoCkKvbdjKFhKMxS -EObjjvbdpedEtVaI -EOcKjvbdIwtBhLpp -DnbjjvbdZHWdAPSi -EOcLKvbdiLdcmuCy -EOcLKvbdjcMLRGuH -EPCjjvbdRbDdkiZL -EOcKjvbdiHJbxvKV -EOcLKvbdaSGDHsfL -DoCkKvbdjKFhJlwr -DncKjvbdiBoCeWqR -EOcLKvbdegjvSNpg -EOcLKvbdrbGMlHLZ -DnbjjvbdBraDUGXS -DncLKvbdFeirOIsq -EPDLKvbdhytekpmf -EOcKjvbdIsYaTMwl -DnbkKvbdrSVLOKaN -DoCkKvbdTIyjRABM -EOcLKvbdsBfNMGkZ -EPDLKvbdUtNTfMWK -EObkKvbdRjxeuGjs -EObkKvbdTqQnuVIN -EObjjvbdhuZdwRuC -EOcLKvbdqTtHSSKt -DncKjvbdmpZxvLZC -DoDLKvbdlAloNALA -EPDKjvbdiLddOUby -EPDLKvbdwuMdpxlO -DncKjvbdNrsvHEuQ -EPCkKvbdyOSgxTJD -EOcLKvbdIryArlxM -EPDLKvbdZHXEAPSi -EPCjjvbdSCDdlIxk -EOcKjvbdySnJNSCH -DnbjjvbdijGIKNXr -EPDKjvbdVAaqTRSZ -EObjjvbdkxsSSxft -EPCkKvbdnUtzKiqf -EPCkKvbdlqxuZsEJ -EObjjvbdEXxMUUUM -EPCkKvbdLFfIBaQu -DnbjjvbdrRtkNjaN -DoCjjvbdNHCpMpUk -EPDKjvbdZjTIQGaf -EPCkKvbdHELWJbKK -DoDKjvbdJbibpjCx -DnbjjvbdJSyArmYM -EPCjjvbdfNFwGmJk -EOcLKvbdYTMBMsnx -DoDLKvbdyTOJMqbH -EObjjvbdEPDLLXDE -DncLKvbdkyTSTZGt -EObjjvbdGBPRYizm -DoCkKvbdVviXvDeH -DncKjvbdsQWOicVf -DoCkKvbdfHjvSNqH -DncKjvbdlZTSSxft -DncKjvbdFVyPolie -EPCjjvbdRXODblID -DoCjjvbdlhcsqVSB -DncLKvbdqYnhGqDx -EObjjvbdFeiqmiUR -DnbjjvbdKefHaaQu -DoDKjvbdRNXbYmtz -EOcKjvbdNwnuzcmt -DoDLKvbdXFxytAPT -EPDLKvbdOTUVfdtp -DoCjjvbdraelkfkZ -DncKjvbdXsMAltPY -DoDKjvbdVUMsfLuj -EPDLKvbdZisIPfbG -EPDKjvbddZxpYYqC -DnbkKvbdzjUopESt -DnbkKvbdVUMtGMVj -DncLKvbduCbtwWOo -EObkKvbdaaVeFpPw -DncKjvbdKNADzGta -DncKjvbdeEoSCXCj -EObjjvbdhancEvqR -EObkKvbdKCicQibx -DncLKvbdijGHjMwr -DoCkKvbdziuPpETU -DoCjjvbdiBnbeXRR -DoCkKvbdZQmEiMdq -EObkKvbdrMyjZMHi -EOcKjvbddoErkTtS -DoCkKvbdtkwvaUAw -EPDLKvbdTlVnaVoJ -DncKjvbdfHjurOQg -DoDLKvbdWWiXvEEg -EPCkKvbdqdEhpNua -EOcLKvbdYSkaMtPY -EPCkKvbdxmsHxTIc -DnbjjvbdJqZdnenF -EPDKjvbdWexzUAOs -EOcLKvbdrovPKCuf -DoDKjvbdkxsSSyGt -Dnbjjvbdzdynzdyp -EOcLKvbdHEKvJbJj -EObjjvbdOStWHEuQ -DnbjjvbdkyTRsZGt -DoCkKvbdcJNKKevx -DoDKjvbdSPtGifDw -EObkKvbdGdLVibKK -DnbjjvbdbBVdfPow -DncKjvbdhtyeXSVC -EPDLKvbdptTfrSLU -DncKjvbdjvXODaww -DncKjvbdqZOgfqDx -DncLKvbdTJZjRABM -EOcLKvbdTpqPVUhN -EOcKjvbdRWmdClID -DoCjjvbdqquLOLAm -DoCjjvbdFfJqmiUR -EOcKjvbddBsMrATm -EOcKjvbdYzcFrKVy -EPCjjvbdsZlQSaIO -EPCkKvbdkHfkeenL -EOcKjvbdiHJcYuiu -DoDKjvbdCEPaVilf -DoCjjvbddBrmSAUN -EPDLKvbdSPtGifDw -EOcLKvbdAMhYrvyx -DncLKvbdTIyjRAAl -EOcLKvbdZtIhyESn -DnbjjvbdVUNUFlWK -EOcKjvbdyXiJaoyk -EPCkKvbdDncLKvbd -EOcLKvbdKWVFcdgJ -EPDKjvbdnQZxvKyC -DncKjvbdjJehJlxS -DoDKjvbdRkYfVHKs -EPDLKvbdirzhsLJz -EObkKvbdVUMtFkuj -DnbjjvbdqwPkbiYq -EPCjjvbdIGfzZYXg -DoCkKvbdlYsRryGt -EObjjvbdpfDeUWBI -EOcKjvbdwtldpxkn -DoCkKvbdzitopETU -DoDKjvbdJuuGEEfi -DnbkKvbdnPzZVkZC -EOcKjvbdmfeYMnGy -EPDKjvbdkIGlGGNk -DncKjvbdezvZEhtX -EPDKjvbdqqtjmkAm -EPDLKvbdzRPNIiwA -DoCkKvbdGKeSbgmV -EPDLKvbdmJETqVSB -EPDKjvbdbVCGwkTh -DoCjjvbdBhkBkIej -EOcLKvbdbBWFFopX -DncLKvbdjggLfGOL -EPCkKvbdzQnmIiwA -EOcLKvbdhbPDFWpq -EPDLKvbdkClLQgVH -EObkKvbdrWpMChyR -DncKjvbdMfbpNPuL -DnbjjvbdNsUVfeVQ -EOcKjvbdaRfDHtFk -DoDKjvbdRbEFLhyL -EOcKjvbdmIcsqUqa -DncKjvbdFVyPpNJe -DoCjjvbdLAjgMaxR -EOcLKvbdypoNJKXA -DncLKvbdEztRFMCi -DoCkKvbduVmwiqTA -EObkKvbdUyHsykPO -DoCkKvbdhzUfLqNf -EPCjjvbdiUzEvqtb -EPDKjvbdpfDeTuaI -EPCkKvbdSwjkmzjx -DncLKvbdjKFgjMwr -EOcLKvbdRWnECkhD -EOcKjvbdZoOJFEyj -DnbkKvbdvvlAvAvV -DncKjvbdZLqcsmlN -DncKjvbdyqOliJwA -EPCkKvbdKWUedEfi -DoCkKvbdePEsLTtS -DnbkKvbdtcDVXVoP -EPCjjvbdKCjCpicY -EObkKvbdZdwfzhJC -EPDLKvbdBhjajiGK -EOcKjvbdJXsahMRQ -DoCkKvbdZxdKNcLr -EPDKjvbdnBjWwoOV -DncLKvbdapGgDkzd -EPDKjvbdjmCLzEgP -EPCkKvbdWRmwbFMD -DnbjjvbdBdQAujMf -EObkKvbdzjUpPcsU -DoDLKvbdwtmFQyMO -DoCkKvbdiMEcmtby -DncKjvbdSBcdkiYk -EPCkKvbdfSBWzkbo -EOcLKvbdxVMeRZLn -DnbjjvbdCSaDUGXS -DncKjvbdZtJIyETO -EPCkKvbdTkvOaVni -DnbkKvbdkySqsYft -EPCjjvbdxsOJMrCH -EPCjjvbdCWzdJEov -EPCjjvbdEARiMywX -EObkKvbdxsNiNSCH -DncLKvbdhbPDFWqR -EObkKvbdVUNUFlVj -EObjjvbdXrlBNToY -EOcLKvbdfHjvSOQg -EPCjjvbdwWkaWAuu -DncKjvbdbKlFnnDA -EPCkKvbdRkZFuGkT -EPCjjvbdMowpvNfs -DncLKvbdmtuZjjSG -DnbkKvbdiCPDEvqR -DncLKvbdbAudfPow -DnbjjvbdFjeSbhMu -DncKjvbdSQTfjGEX -EPDKjvbdbAueGQQX -DnbkKvbdjKGIJmXr -EOcKjvbdIryBTNYM -EPDLKvbdmgEwlnGy -EObjjvbdSBdEkhxk -DoCjjvbdfMfWgMjL -EPDLKvbdEObjjwCd -EObjjvbdhzUekqOG -EObjjvbdWSNwbElD -DoDKjvbdrNZjYkhJ -DoCkKvbdRkYfUgKs -EObjjvbdczYpYZRC -DoCkKvbdzoQQeDMY -DncKjvbdFxuVBEXb -DoDKjvbdSiZjRABM -DoDLKvbdYzbfRivZ -EPDLKvbdlqyUyrdJ -EOcLKvbdtbbuWvOo -DncKjvbdSKxfVGkT -DoCjjvbdEXxLtUTl -EOcLKvbdEPCjkWbd -EPDLKvbdEObkLXDE -EPCkKvbdxKvdHzzG -EPDKjvbdpfDdtVaI -DoCjjvbdbAueGPpX -DoCjjvbdZMRdUOLm -DoDLKvbdwtmFRYkn -DoCjjvbdNPwpumgT -DoCkKvbddijSWUzn -DoDKjvbdJXsbHkqQ -DnbjjvbdxZhFexEr -DoCjjvbdSQUHJedX -EPDLKvbdjmCMZdgP -DncLKvbdMfbomPtk -EOcLKvbdqTtHRqjt -EPCkKvbdqceIpNvB -DncLKvbdFxtuBDxC -EPCkKvbdxVNEpyLn -EOcKjvbdYzbeqivZ -DoCjjvbdNdcsiJLE -DoDKjvbdzjVQQDsU -EObjjvbdvBDySneI -DoDKjvbdBhjbKhej -EPDLKvbdWSOYBdlD -EOcKjvbdOYOuzcnU -EPCkKvbdkCkkQgVH -DnbkKvbdtlXwBTaX -DnbkKvbdTppoVUgm -DoCjjvbdQmXaxnUz -DncKjvbdkHfkfFmk -EPCjjvbdmgEwlnHZ -EPDLKvbdZdxGzhJC -EPCkKvbdmIdTqUqa -DoDKjvbdzGyMAMeX -DnbkKvbdTppnuUhN -DoCjjvbdSLYfUgLT -DnbkKvbdZsiJZETO -EObkKvbdNUrqjmAX -EObjjvbdZyDimcLr -DoCkKvbdRDbaQRDr -DnbjjvbdbAudfPow -EPDKjvbdZjTHpGaf -DoDKjvbdqwQLcIxq -DnbjjvbdZLqdTmkm -DoDKjvbdyXiKCPzL -EObjjvbdssSTYyeD -DoCjjvbdddoRawCj -DoCjjvbdkMbLydfo -DoCjjvbdVTmUFkvK -DoCjjvbdhyuFkpmf -EObkKvbdlYsSSyGt -EPCjjvbdtvNxKQsA -DoDKjvbdRpTgKFdX -EObjjvbdjbkkQgVH -DnbjjvbdaNLCStlg -EOcKjvbdDxYLsssl -DoCjjvbdfNFvgMjL -DncLKvbdrovPJcWG -DnbkKvbddoFSjssr -DnbjjvbdSQTgKGDw -DoCjjvbdQvnEDLhD -EOcKjvbdUxhUZkOn -EPCjjvbdEzsqFMDJ -DoDKjvbdGdKuiaij -EOcKjvbdxrnJMrCH -DnbjjvbdUWMQJtBR -EObkKvbdEKHivYKA -EPDLKvbdYSlAltOx -DnbjjvbdbVCHXjtI -DnbkKvbdtkwwAtBX -DoCjjvbdZQleJNEq -EPDKjvbdEPCjjvcE -EPCjjvbdCSaDUFwS -EPDKjvbdHELViajK -DoDLKvbdijFgjNXr -DncLKvbdjmCLydfo -EObkKvbddZyQXxqC -DnbkKvbdySnImSCH -EPCjjvbdqmZjYkgi -EPCjjvbdGFirNiTq -DoDKjvbdRXNdDMID -DncLKvbdMfcQNQUk -EOcLKvbdZdwfzghb -EPDLKvbdULuoBWOi -EObjjvbdFyVUaDwb -DoCjjvbdNQXpumfs -DnbkKvbdrWolDIxq -EPCkKvbdBvzdIeQW -DnbkKvbdfIKuqmpg -EOcKjvbdnBiwXoNu -EObjjvbdiHKDZWKV -EPCjjvbdZLqdTnLm -DoCjjvbdlYsSTYgU -EPDLKvbdsBfNMHKy -DnbkKvbdjuvmdCXw -EPDLKvbdRDcBQQdS -EOcKjvbdySmhmRbH -EPDLKvbdbrbjscia -EPDLKvbdkxrrTZGt -DoDKjvbdcJMjLGWx -EPDKjvbdKeegbBQu -DnbjjvbdvPTzqKoU -EOcLKvbdIidAKPgE -DoDLKvbdVrOYBdkc -EObjjvbdeFOqawDK -EOcLKvbdZRNEhmFR -EObjjvbdKfFgbBRV -DoCjjvbdiLeEOVCy -EPCkKvbdqmZjYkgi -EPDKjvbdHffyxxXg -EPDKjvbdZLrDsmlN -DnbjjvbdTkuoBVoJ -EOcKjvbduDDUvvOo -DoDKjvbdZdwfzhJC -EPCkKvbdfMfWgNKL -EPCjjvbdRXOECkgc -EOcKjvbdMowpvNfs -DoDLKvbdiBoCeWpq -EObkKvbdNwoVzdOU -EPDLKvbdDoDKjvbd -EObjjvbdLFehCBRV -EOcLKvbduCcVWuno -EOcKjvbdXsMBMtOx -DnbkKvbdcIljKewY -DoDLKvbdEzspdkcJ -DncKjvbdqcdhomua -EPDKjvbdiifHjNXr -EObkKvbdVqnXbFLc -EPCkKvbddwyssrFz -DncKjvbdrSVKmkAm -EPCjjvbdTlVoBVni -EObjjvbdOhAYZAYa -EPCjjvbdRadEkiZL -DoCkKvbdSCEEkiYk -EObjjvbdGZVVAcxC -DnbjjvbdZyEJnDMS -EOcKjvbdzitoodSt -EPDKjvbdXFxzUAPT -DnbjjvbdziuQQESt -EPCjjvbdEARhmZvw -DncLKvbdatbHXkTh -DncKjvbdbsCjtDjB -EPCjjvbdKWVGDdgJ -EPDKjvbdrafNLfkZ -EObkKvbdFkEsChMu -DnbkKvbdVgxWXfxz -EObjjvbdJbjDRJbx -EObkKvbdwyhFfYFS -EPCjjvbdMfbpNPtk -EObkKvbdbsDKtDia -EPCkKvbdkxsRsZHU -DnbkKvbdvAdZTOdh -DncKjvbdptUHRrLU -DncKjvbdvPTzqKnt -DncLKvbdTppoUthN -DnbkKvbdrbFlkgLZ -EPCjjvbdGdKvJajK -EPDLKvbdACqxKZiQ -DoCkKvbdbPffckzd -DoCkKvbdhbOcEvqR -DnbjjvbduCcVWvOo -DoCkKvbdmuUzLKRf -EPCjjvbdbUbHYLUI -DoDKjvbdbKkeoNcA -DoCjjvbdcScKtEJa -DoCjjvbdyzdnRgiI -EPCjjvbdkIGlFfOL -EOcLKvbdzjUpPcsU -DoDLKvbdJuuGEEgJ -DncLKvbdTqROtthN -EOcLKvbdpstGqqkU -EPCkKvbdtSrTYzEc -EPDKjvbdezvYdiUX -DoDKjvbdtTRrxzFD -DoCjjvbdrovOjDWG -DoDKjvbdUQpoUthN -EOcKjvbdKDJbpicY -DnbjjvbdaSGCgtFk -DoDKjvbdGZVVAcwb -DnbjjvbdEvYopNJe -EObjjvbdSQTgKFdX -EPDLKvbdrXPkbhyR -DoDLKvbdhyuGMROG -DoDKjvbdzoQRFClY -EPCkKvbdKWUeceHJ -EObkKvbdZnmiFFZj -DnbjjvbdtcDUwVoP -DoCkKvbdjlakyeHP -EPCkKvbdBvzdIdpW -EPCjjvbddePRawCj -DoDKjvbdmfeYNNfy -DnbkKvbdSLYetgKs -DncKjvbdFejRnJTq -EPDLKvbdIGfzZXwg -DncKjvbdJvVFdFHJ -EOcLKvbdIHHZyYYH -EPDLKvbdyXhiaoyk -DoCjjvbdADSYJzIp -EObjjvbdNPxQunHT -EPCkKvbdxnTHwrhc -DncKjvbdTppnuVHm -EObkKvbdjlbLydfo -DoDLKvbdVBBpsRRy -DnbjjvbdACqwiyhp -DoCkKvbdZRNFJNEq -EOcLKvbdaRfDHtFk -DoCkKvbdKfFgbBQu -DnbjjvbddCTNSAUN -EPDLKvbdTfznMXVe -EOcKjvbdeOeSkUTr -DnbkKvbdqdEiPnVa -EOcLKvbdsBemMHLZ -DoCkKvbdNPxQvOGs -EPDLKvbdOTTufeUp -DncKjvbdraelkfjy -DoDLKvbdZoOIeFZj -DnbkKvbdptTgRrLU -DncKjvbdACrXiyhp -EPDLKvbdIGgZxwxH -DnbjjvbdZnmiEeZj -DnbkKvbdWRmxCFLc -DoDLKvbdyYIiaozL -EPCjjvbdOTTvGeUp -EPCkKvbdNUsSKmAX -EPCjjvbdDigiuwjA -DoDKjvbdIrxaTMxM -DoDKjvbdZyDimcLr -EPCjjvbdjbkkRHVH -DoCjjvbdWXJYVceH -EOcLKvbdlZTSSyHU -DncLKvbdwuNEqYlO -EPCkKvbdrpWPJbuf -DncKjvbdtbcUwWPP -EOcKjvbdGKeScINV -DncKjvbdZeXfzhJC -DncKjvbdUQqPVVIN -DoDKjvbdxsNhmSBg -DoDKjvbdURROuVHm -DncKjvbdRMwbYmtz -DoDKjvbdZRMeImEq -EOcLKvbdWHwvXgYz -EPDLKvbdIwsahMQp -EOcKjvbdfHkVrNqH -EObjjvbddjKSWUzn -DncKjvbdxwiJbQZk -EPCkKvbdMSWlzVQz -DoDLKvbdUQpnuUhN -DncLKvbdiCPCdvqR -DoCjjvbdapHHELzd -DncKjvbdyOSgwrhc -DoCkKvbdDxYLtUTl -EObjjvbdyfyMAMdw -EObjjvbdHffzYxYH -DoDKjvbdYzcFrKWZ -EPDLKvbddZyPwyRC -EPCkKvbdLhalRYAS -DoCkKvbdGYtuBEXb -DoCjjvbdrylQTAgn -DoCjjvbdbBVeGPpX -EPDLKvbdYpmFImFR -DnbkKvbdJcKCpjDY -DncLKvbdYTLaNUPY -DnbkKvbdeOeSjtTr -DoCkKvbdEYYLtTtM -EPCkKvbdrzLoraIO -DoCjjvbdKWVGDdfi -DoDKjvbdBhjbLIfK -EPCkKvbdNQYQvOGs -EOcLKvbduLxXBTaX -EPDKjvbdANHySwZx -DnbkKvbdeOdsLTtS -DnbkKvbdUsmTfMWK -DoDLKvbdcImJkGXY -DncKjvbdsPunibuf -DnbjjvbdIGfyxxYH -DoDLKvbdvBDyTOeI -EPDLKvbdGKeScHmV -EOcLKvbdqFceUVaI -DncLKvbdqdEhpOWB -DoDLKvbdTulPitAq -DnbjjvbdWXIwudEg -EPDLKvbdcTDKtDjB -DoCjjvbdgFlZnHHA -DnbkKvbdwuNEqZLn -EObkKvbdmRxtzSci -EObjjvbdjvXNdCYX -DnbkKvbdqGDdsvBI -DncKjvbdqdEhomvB -DoCjjvbdrpVoKCvG -EObkKvbdWHwvYHYz -EOcKjvbdrykoraHn -EPCkKvbdsPuoKCuf -DncKjvbdZjSgofaf -DncKjvbdNeETiIjd -DoDLKvbddoFSkTsr -EPCkKvbdkWWnECXw -DnbkKvbdZRNFIldq -EObjjvbdzjVQPdTU -DnbjjvbdhytelRNf -EOcKjvbdNPxQunHT -DoCkKvbdmuVZkJrG -EPCjjvbdUVlQJtBR -DoDKjvbdzitpQESt -DoCjjvbdraemLfkZ -DoDLKvbdkNBlZeHP -EObkKvbdrbGNMHLZ -EPDLKvbdkIHLeemk -DoDKjvbdbAvEeopX -DoDKjvbdiGjCxujV -EPCkKvbdqlzJxkgi -DncLKvbdVZITzLPO -EOcLKvbdVZITykOn -EPCjjvbdjuvnDaww -DoDKjvbdkVwOECYX -EObjjvbdcyxpXyRC -DnbjjvbdULvPAuni -DnbkKvbdOTUWGdtp -EOcLKvbdKDJcRKCx -EPCkKvbdBsBDUFwS -DncLKvbdQdDAopcr -EObjjvbdcSbjtEKB -DnbjjvbdlAloNALA -DoCjjvbdADSXizJQ -EOcKjvbdrpWOibvG -EObjjvbdIGfzZXwg -EPDKjvbdptUHRrKt -DncLKvbdZdwfzhIb -DoCkKvbdQZNAGrrK -DoDKjvbduCbtvuoP -EPCjjvbdJuuFceGi -EPCkKvbdgGLymgHA -DnbjjvbdcyyPxYpb -EPCkKvbdhuZeWquC -EObkKvbdyTNiNRbH -DoCjjvbdVAaqSprZ -DncLKvbdoznDkYPA -EPCkKvbdiUydvquC -DncLKvbdhytfMROG -DoCkKvbdmbKXYPNu -DnbkKvbdMpYQunHT -EOcLKvbdHkaznXQk -DoDLKvbdTvMPisaR -DoCkKvbdIryBTNXl -DoDLKvbdZLrDsmkm -DncLKvbdlhctRVRa -EPCjjvbdYkqcsmkm -EPCjjvbdEXwlUTtM -EObkKvbdEvZPoljF -EPDLKvbdZRNEiNFR -DoCkKvbdANIZTXZx -DncKjvbdZoOIeFZj -DoDLKvbdeJirWUzn -DoCjjvbdRWmdDLgc -DoDKjvbdACrYKZhp -EPDKjvbdMowpunHT -EOcKjvbdYTLaNTnx -DnbjjvbdQvnEClHc -DnbkKvbdSBceLhyL -DoDKjvbdjgflGGOL -EOcKjvbdYpldiMdq -DoCjjvbdrovPKDWG -DoDKjvbdZisHofbG -DoDKjvbdEOcLKwDE -EPCjjvbdhfjDZWJu -DncKjvbdhfjCyWJu -EOcLKvbdtSqsYzEc -DoDLKvbdbQHHELzd -DoDKjvbdySnImRbH -EOcLKvbdVqmxCElD -DnbjjvbdNdcsiJKd -EPCkKvbdkNBkzEfo -DnbkKvbdJKEAKPfd -DncLKvbdiifIJlwr -DnbjjvbdhtzEvqtb -EObjjvbdwWlAvBWV -EPDLKvbdlhctQuSB -EOcLKvbdNddUIiKd -EPDKjvbdJSxaTMxM -EPDLKvbdVrOXaeMD -DoDLKvbdGcjvKBjK -DncLKvbdqvpLbiZR -EPCkKvbdjKFgilxS -DncLKvbdDoCjjvbd -DoCjjvbdqqtjnKaN -EOcKjvbdBvzdJEpW -DoCkKvbdcarlrATm -DoDLKvbdQdCaQQdS -DncKjvbdVqnXadkc -DoCjjvbdJvUecdgJ -DnbkKvbdVYhUZkPO -EPDKjvbdxZgfFxEr -EPCjjvbdsPunicWG -DnbkKvbdmSYtyrdJ -DnbjjvbdTulQJsaR -DncKjvbdsrrSxyeD -DnbkKvbdzQnmJJwA -DncKjvbdatafxLTh -EOcLKvbdmfeYNNgZ -EObkKvbdNxOuzcnU -EPDLKvbdDwwksstM -EPDLKvbdxnTIYTIc -EPDKjvbdHgGyyXxH -EOcKjvbdGAnpyJzm -DoCkKvbdUQqPVUhN -DncLKvbdYgWdAOri -DoDLKvbdygZMANFX -EPCkKvbdrJAJdlne -EPDLKvbdZnmheEyj -DnbjjvbdIxUCHkpp -DnbkKvbdjJehJlwr -DoDKjvbdhlEdNuDZ -EOcKjvbdeOeSkTsr -EOcLKvbdVqnYBdlD -DoDKjvbdeATqMwif -EPCjjvbdrXQLbhyR -DnbjjvbdFkErbhMu -DoCjjvbdpxnhHQcx -EOcLKvbdrWpMDIxq -EPDKjvbdVhYWYGxz -DoCkKvbdwzIGFxFS -DoCjjvbdEztQeLbi -DnbjjvbdlZTRrxgU -DncLKvbdSZihSbvA -DnbjjvbdrzLpTAgn -EPCjjvbdNrsugFVQ -DnbjjvbdxUleQxlO -DncKjvbdtkwwBUAw -DoCjjvbdbBVdeoow -EPDKjvbdEObjkXDE -DnbjjvbdhgJbxvKV -EPCkKvbdIwtCHlQp -DoCkKvbdxmsIXrhc -EObkKvbddePSCXDK -EOcKjvbdVrOXbEkc -EOcLKvbdFVyPomJe -DoDLKvbdREDBPqDr -DncLKvbdaNLCStmH -DncLKvbdbAudfQPw -DoDKjvbdRaceLiZL -DoCkKvbdJYUCIMRQ -DnbkKvbdYkrDtOMN -DnbjjvbdFkFTChNV -EOcLKvbdZRMeImFR -EObkKvbdUxgszLOn -EOcKjvbdFjdsChMu -EObkKvbdrafNLgLZ -EPDKjvbdelewGmJk -EOcKjvbdZMRctNlN -DoDLKvbdliEUQtqa -DncKjvbdqUUHSRjt -EPDKjvbduCbtwVno -DoCkKvbdaaVeFoow -EPDLKvbdkClKqGuH -DoDLKvbdCflFgAzc -DoDLKvbdTAEhgbPE -EObkKvbdmtuZjjRf -EObjjvbdKDKCqJbx -DncKjvbdrovOjDVf -DoCkKvbdhtzFWqtb -DncLKvbdEvYpQNKF -EOcLKvbdeFPRavcK -DoDLKvbdhlEcnUby -DoCkKvbdegjvSOQg -DncKjvbdhbPCeWpq -DnbjjvbdsrrTYyeD -DncLKvbdTlWPAvOi -EPCjjvbdwzHeexEr -DncLKvbdmJEUQuRa -DnbkKvbdkIHLeemk -EObkKvbdhtyeXSUb -EOcLKvbdHDkWKCJj -EOcLKvbdRbDdkhyL -EObkKvbdRosfifDw -EPCjjvbdOStVfduQ -DnbkKvbdiHJbxujV -DoCjjvbdsPuoJcWG -EPCkKvbdDxXktTtM -DoCjjvbdHDjujCJj -EObjjvbdUWLoisaR -EPDKjvbdqiAKEmOe -DoDLKvbdxmsIYShc -EPCkKvbdCJKbKiGK -DoDLKvbdRECaQRDr -EPDLKvbdYqNEiNEq -DnbkKvbdiMEcnVCy -DoCkKvbduCbtwVno -DoDKjvbdHbMZdzAD -DnbkKvbdemGXGmKL -DoDLKvbdgQBzwDwh -DoDKjvbdKQzEoGOF -DoDKjvbdWSNwaeMD -EPDKjvbdySmhlqbH -EObkKvbdDxYLtTtM -DnbjjvbdFxuVBEXb -EObjjvbdiBoCdwRR -EPCjjvbdGQATWgGZ -EPCkKvbdYpleJNEq -EOcLKvbdvPTzqKoU -DnbkKvbdZQmEhldq -DncKjvbdLBKgMawq -EPCkKvbdqFceTvAh -EPCjjvbdkIHMFenL -DoDKjvbdehLVqnRH -DoDKjvbdxwhibPyk -DnbkKvbdkMbMZeHP -EOcKjvbdsrrSyZeD -EOcLKvbdMowpunHT -EObjjvbdJqZdnfOF -DoCkKvbdezuxdhtX -DnbjjvbdaaWFFopX -DoCjjvbdqdFJQOVa -EPCjjvbdWWhwudFH -EPDKjvbdhtzFWrUb -EPCkKvbdWSNwaeMD -EObkKvbdcIlikFvx -EPCkKvbdauCGwkTh -EPCkKvbdbhmJkGWx -EPDKjvbdRosgJfEX -DnbkKvbdTvMQJtAq -DnbkKvbdsBfMlGkZ -DnbkKvbdVrNxCElD -DoDLKvbdmpZxukZC -EObkKvbdhlEcnVCy -EOcLKvbdwzIFfYFS -DnbkKvbdZtIhxdSn -DoDLKvbdjgfkfFmk -DoDLKvbdqTtHSRkU -EObjjvbdSCDeLiZL -DoDKjvbdeATplxJf -DnbkKvbdIBkzEzAD -EOcKjvbdFWZQPljF -DoCjjvbdRbDeMJYk -EPDLKvbdDoCkKvcE -DoCkKvbdZjShPfbG -DnbjjvbdNPxQvOGs -EPDLKvbdKyQirztf -DoDLKvbdJutecdfi -DoCjjvbdTppoUuHm -EPDLKvbdjEkGuPAO -DnbkKvbdVTmTekuj -DnbkKvbdZyEJmcMS -EOcKjvbdNddThhjd -DncLKvbdrDdhpNua -EOcKjvbdBiLBkJGK -DoCkKvbdrXPkbhxq -DnbjjvbdZQmEiMdq -DncLKvbdhzUfMROG -EPDKjvbduaEYroEh -DoCjjvbdJYUCHkqQ -DoCjjvbdwzHfFxEr -EPCjjvbdLiBkqYAS -DoDLKvbdxZgfFxEr -DoCkKvbdraemLgLZ -DoDLKvbdxxJJaozL -EPDLKvbdKeehBaRV -DoCkKvbdPIAYZAZB -EObjjvbdBvzdIdov -DoDKjvbdjblKqGuH -DoDKjvbdlhdURVSB -EPDKjvbdqvpMDJZR -DncKjvbdajkeoODA -EOcKjvbdkySqsZHU -DnbjjvbdJqZdnfOF -DncKjvbdZHWdAOsJ -DoCkKvbdaNLCStlg -DoDLKvbdVZHszKnn -DoCjjvbdtvOYJpsA -DoCjjvbdNPxQvNfs -DoDLKvbdZLqctOMN -EObjjvbdvwMAvAvV -DnbkKvbdEuxpPlie -DnbkKvbdAMhYsWyx -DoCkKvbdtumwjQsA -EPCjjvbdVAaprqRy -EObkKvbdlZSqsYgU -EObkKvbdBvzdIdov -DnbjjvbdyOShYTJD -EOcLKvbdZshhxdSn -EPDKjvbdUtMselWK -DoDLKvbdYqNEiMeR -DncLKvbddePSBwDK -DncLKvbdqYnggQcx -DnbkKvbdqceJQOVa -DoDLKvbdtSrTZZeD -EPCjjvbdANHyTWzY -DoDLKvbdcIlikFvx -DoDKjvbdxmsHwsIc -EObkKvbdYzbfRiuy -EPDKjvbdWHwuwfxz -EOcLKvbddndsLTsr -EObkKvbdwXMAuaVu -EPDLKvbdbVBfwjtI -EObjjvbdfMfXHMik -DoCkKvbdOXoVzdOU -DnbkKvbdnGeXlnHZ -EPCjjvbdGGJrOJTq -EPCkKvbdhanbeWqR -EOcLKvbdLhbLpxAS -EPDLKvbdbBVdepPw -EOcKjvbdWSNwadlD -DoCkKvbdaRfChTek -EPCkKvbdmbJvxOmu -DoCkKvbdCSaCsfXS -EObkKvbdbhljKewY -DncLKvbddZxowxpb -DnbjjvbdRDcBQQdS -DnbjjvbdKDJbqKDY -EObkKvbdWRmxCFLc -EPDLKvbdYlSETmkm -EOcLKvbdMIalRYAS -DoDKjvbdCEQAuimG -EPDKjvbdCTAcTewS -EPCjjvbdrRtkOKaN -DnbkKvbdtTRryZeD -DnbjjvbdMgColpVL -EOcKjvbdrDdhomua -EPDKjvbdRbDeMJZL -DnbkKvbdxnSgwrhc -DoDKjvbdVvhxVdFH -DncKjvbdLYqJrzuG -DncLKvbdZsiIyETO -EPDLKvbdieLHUoAO -EPDLKvbdNsUVgEuQ -EPDLKvbdoAKztHcn -DncKjvbdfNFvgNJk -DoCkKvbdqYoHgQcx -DncLKvbddwzUUSFz -DoCkKvbdIHGzZYXg -DncLKvbddZxpXxpb -DnbjjvbdhlFDnUcZ -EPCjjvbdSKxfUfjs -DoCkKvbdbAvFGPpX -EOcLKvbdVhXuwfxz -EPCkKvbddoEsKtTr -DncKjvbdhkeEOVDZ -EObjjvbdNUrqjmAX -EPDLKvbdUWLojTaR -DoDLKvbdWIYVwfxz -DnbkKvbdUtMsekvK -EOcKjvbdRpUHJecw -DoDKjvbdCJKbKiFj -EObjjvbdEuxoomJe -EPCjjvbdLrWlytpz -EObjjvbdMgDPlotk -DncLKvbdNrtWHFVQ -DoCjjvbdZeYGzgiC -EPCkKvbdKaKfmCYR -DoCjjvbdjlakzEfo -EPDKjvbdpeceTvBI -DnbkKvbdKDKCqJcY -DoDKjvbdMowqWNgT -EPDKjvbdRMxCYmtz -EObjjvbdrXQLbiYq -DncLKvbdZnmheFZj -EOcLKvbdiLeENtcZ -DncKjvbdzaAPGfal -EPCkKvbdeATqNYKG -EObjjvbdSCDdlIyL -DoCkKvbdVZHtZjnn -EPCjjvbdZtIhxdTO -EPDKjvbdTlVoAuoJ -EObjjvbdZRNFIleR -DoDLKvbdEPDLKwCd -DnbjjvbdfRaWzkbo -EPDLKvbddneSjstS -EObkKvbduCbtwWOo -EPCkKvbdmoyyWKyC -EPCjjvbdehLVrORH -DoDLKvbduCcUvuno -EObkKvbddZxowxqC -EObkKvbdKQydoFme -EPCkKvbdqqtkOKaN -DoDKjvbduaEYsOeI -EObkKvbdePEsLUTr -DoDLKvbdbsDLTcia -DncLKvbdDwwlTtUM -EOcKjvbdOEdUIhkE -DoDLKvbdtvOXjRTA -EObkKvbdeFPSCXCj -EPCkKvbdqlzJxlIJ -EOcKjvbdUMVoBVni -EPCkKvbdqqtkNkBN -DoDLKvbdiVZeWquC -DncKjvbdZLrDsmlN -EPCkKvbdzitopESt -EOcKjvbdnBjXYPOV -EObkKvbdehKurOQg -DoCjjvbdmJDsptrB -DnbkKvbdaNKbTVNH -DncLKvbdGQASvfey -EOcLKvbdtbcUwVno -EOcKjvbdqUUHSSLU -EOcLKvbdvwLaWBWV -EPCkKvbdRacdlIxk -DnbkKvbdxZgfGXeS -EOcLKvbdVAapsQqy -EOcLKvbdQvnECkhD -EPDKjvbdCWzchdpW -DoCjjvbdpedFUWBI -EPDKjvbdqvpMCiYq -EPDLKvbdEPDKjwCd -DncLKvbdGckWJaij -EObjjvbdgPazwEXh -DoCkKvbdUVlPitBR -DoCjjvbdMSXMzVQz -DnbkKvbdliEUQuRa -DoCkKvbdOStVgFUp -EPCjjvbdUtMtGMVj -DoCkKvbdKWVFdFHJ -EPCkKvbdUxhUZkOn -DnbkKvbdLBKflbYR -EPCkKvbdFkEsCglu -DnbkKvbdKCibpjCx -DnbkKvbdGLEsChNV -DoCjjvbdLGFhCApu -DncLKvbdeXzTsqez -DoCkKvbdxrmhlqbH -EPDLKvbdYlRdTmlN -EPCjjvbdqYnhHRDx -EPDKjvbdWfYzUAOs -EPCkKvbdMJCLpxAS -EObkKvbduCbtwVoP -DoCkKvbdmfdwlmfy -EPCjjvbdVBBprpqy -DoDLKvbdEKHivXjA -DoDLKvbdkWWnECYX -EOcKjvbdqUUHSRkU -DncKjvbdYlRcsnLm -EOcKjvbdelfWfmJk -EPDLKvbdZtIhxcsO -EOcLKvbdGKdrcINV -EPDLKvbdOAIsUKSA -DoCjjvbdXFxytAOs -EPCjjvbdUQpntuIN -EPDLKvbdTvLpJtBR -EPDKjvbdRyihSbvA -DnbjjvbdhyuFlROG -EObkKvbdZxcinClS -EOcKjvbdptTfqrKt -DoDLKvbdURRPUtgm -EObkKvbdaNKbTVNH -EOcLKvbdiZuFlQmf -EPDKjvbdePEsLUTr -EPCjjvbdFxuUaEYC -EPDLKvbdliETpuRa -EObjjvbdjKFhKNYS -DoCkKvbdwzHefXeS -DoDLKvbdFfJqmiUR -EObjjvbdcJMjKewY -EObjjvbdqdFIomua -DnbkKvbdFejRnJTq -DnbjjvbdEzsqFMCi -EPDLKvbdhzUelROG -EPDKjvbdLKaIWAKZ -DoCkKvbdGGJrOIsq -EOcKjvbdVUMtGMWK -EObkKvbdmpZyVkZC -DoDLKvbdJTYaSmXl -EObjjvbdmSZUyrci -EObkKvbdxnSgwsIc -EOcLKvbdhgJcYujV -DoDKjvbdUQpoVVHm -EPDKjvbdKWVFdEgJ -DoCkKvbdWXJXudEg -EObkKvbddxZtURez -DnbkKvbdZRMeJNEq -EOcKjvbdpxoIHRDx -EObkKvbdGGKSOJTq -EOcKjvbdkIHMFenL -EPDLKvbdTqQoUtgm -DnbjjvbdtvNxJpsA -DnbkKvbdFyUtaDxC -DnbkKvbdSLYeuHKs -DncLKvbdxrmhlrBg -DncLKvbdGdLWJajK -EPCkKvbdSPtHJfEX -EPCkKvbdeKJrVtzn -DoCjjvbdWRnXadlD -DncKjvbdhkdcmtby -DoDLKvbdVviYWEFH -EOcKjvbdTAFJICPE -EPCjjvbdCJKbLIej -DoDLKvbdyYJJaoyk -EPDKjvbdNsUVgFUp -EPCjjvbdrDdhomua -DoDKjvbdySnJNRag -EPCjjvbdyNrgxShc -DnbjjvbdADRxKZhp -DnbkKvbdaMkCStmH -EPDKjvbdfIKvRnRH -DnbkKvbdoAKztIEO -DnbjjvbdDjHjVwjA -EObkKvbdjuwODbYX -DoDLKvbdbhmKKfWx -EPDLKvbdKaLGlaxR -DoDLKvbdwzIGFxFS -EPCkKvbdGBOpxizm -EPDKjvbdRXODcMHc -EOcLKvbdYqNFJMdq -EOcKjvbdxUleQxkn -EPDKjvbdZirgpHCG -DncLKvbderAvzkbo -EPCkKvbdTvMPisaR -EPCkKvbdZtJIxdTO -EOcKjvbddePRavcK -DncLKvbdCDpAuimG -EPDLKvbdQdCaPqES -EObjjvbdZyEJmbkr -DoDLKvbdOEcsiIkE -EOcKjvbdrbFlkgLZ -EOcKjvbdRacdlJZL -EPCkKvbdKDKCqKCx -EPDKjvbdrDeIonVa -DncKjvbdOFEThhjd -DncLKvbdLAkHMbXq -EObkKvbdhytekpnG -DncLKvbdrSUkOLAm -DncLKvbdiCOcFWpq -DoCjjvbdrylPsAhO -EOcKjvbdxVNEpyLn -DnbkKvbdmbJvwnnV -DnbkKvbdVAbQsQrZ -EPCkKvbdCTBCtGXS -DncKjvbdTAEiHbPE -EObjjvbdFeiqnJTq -EPDLKvbdDxYMTtTl -DncLKvbdHDkVibKK -DnbkKvbddePSBvcK -DoCjjvbdauCGwkTh -EPDLKvbdWIYWYGxz -DoDLKvbdjcLjqHVH -DoDLKvbdTfznMXWF -DnbkKvbdkVwNcaww -EObjjvbdlYrrSxgU -DncKjvbdaNLCTUmH -EOcKjvbdznoqEblY -DncLKvbdjuwOEBww -DncKjvbdGQATXHGZ -EOcKjvbdiZuFkpmf -EPCjjvbdajlGOnDA -EPDKjvbdJcJbpjCx -DncKjvbdauBgXjtI -EPCkKvbdsZkpTAhO -EPCkKvbdOEdUIhjd -EOcKjvbdNsUWGduQ -DnbkKvbdVTltFlVj -EObjjvbdaNKasVNH -DnbjjvbdhancEvpq -EPDLKvbdZtIiZETO -DoDKjvbdFxuUaEYC -DoDLKvbdLGGHbAqV -DoDKjvbdqceIpOWB -DoDKjvbdvBEZTPEh -DoDKjvbdKefHbBQu -EPDLKvbdlZTSSyHU -DncKjvbdnPyyWKyC -EObjjvbdsZkpTBHn -DoCjjvbdaaVdepPw -EPDKjvbdtkwvaUAw -EObjjvbdEPCkKvbd -EPCjjvbdtkwvaUBX -DncKjvbdRbDeMIyL -EOcKjvbdxwhjBoyk -DoDLKvbdFxuVAcxC -DnbkKvbdxZgfFxFS -EOcKjvbdjhGkefNk -EOcKjvbdEPDKkWcE -EPDLKvbdQvnEDMID -EOcLKvbdqquKmjaN -DoCkKvbdZtJJZESn -EPDLKvbdTkvOaWPJ -DnbjjvbdcSbkUEJa -EObjjvbdQlxBxmtz -EOcLKvbdehKuqmpg -EObjjvbdpyOggQcx -DncLKvbdnVVZjjSG -EPCjjvbdyqOmIiwA -EPDLKvbddZxpXyRC -EObkKvbdRXODcMID -EOcKjvbdnHFXlmfy -EPDKjvbdznpQdcLx -EOcLKvbdqGDdtWBI -EPCjjvbdZoNhddzK -EOcKjvbdqTsgSSLU -EOcLKvbdRzJhTCvA -EOcKjvbdCIjbLIfK -DncKjvbdKQzEoGNe -EOcKjvbdACrXizJQ -EObjjvbdEzspdkcJ -EObkKvbdsZlQTAhO -EPDKjvbdfoazwEYI -DoDLKvbdjAQGaQGj -DoDLKvbdEzsqFMCi -EPDKjvbdyYJJapZk -DnbkKvbdIxUBglRQ -DoCjjvbdtTRsYyeD -EPDKjvbdGKdsDIMu -EOcLKvbdFyVVAcxC -DnbkKvbdZLrDtNkm -EPDLKvbdsrqrxydc -EPDKjvbdrpVnjCvG -DoDLKvbdmSYtzTEJ -EPDKjvbdajkfOmcA -EPDLKvbdssSSxzEc -EObjjvbdDxYMTssl -DnbkKvbdiMFEOVDZ -EOcLKvbdULvOaVni -EPDLKvbdlqyUzSdJ -EObjjvbdZoNheFZj -DncKjvbdcScLTdKB -EObkKvbdGLFTDINV -DncKjvbdcyyQYZRC -EOcKjvbdYqMeIldq -DoCkKvbdOEcshhkE -EObkKvbdirzhrjiz -EOcLKvbdxUmFRYlO -DoDKjvbdkyTRsZGt -DncKjvbdIryAsNYM -EObkKvbduWNxJpsA -DncKjvbdYkqcsnLm -DoDLKvbddZxpXyQb -DncKjvbdRotGiedX -DnbkKvbdKVtedEgJ -EOcKjvbdjvWnEBww -EObkKvbdFyVVAdXb -DoCkKvbdYlSEUNkm -EOcKjvbdcTDLTcia -EPCkKvbdzjUpQESt -DnbkKvbdqUTfqrLU -EPDKjvbdSQUHJfEX -DnbjjvbdiGjDYvKV -EObkKvbdhkdcnVCy -EPCjjvbdJuuFdFHJ -EObjjvbdYkqdTnMN -DoCkKvbdpssgSRkU -EObkKvbdUWLpKUBR -DoDKjvbdZsiJZESn -DnbkKvbdYqMdhmEq -DoCkKvbdjcLkRHVH -DnbkKvbdSPsgKGDw -DoDLKvbdKVtfEEfi -EPCjjvbdiGibyWKV -EPCjjvbdEYYLtUTl -EPCjjvbdFejSOIsq -DncLKvbdRECaQRES -EPCkKvbdEuyQQNKF -EObkKvbdxwhjCPzL -DncLKvbdiLeDnUby -EOcKjvbdEuxpQMie -EOcKjvbdIidAJogE -DoDKjvbdxsNhlqag -EOcKjvbdEzsqFLcJ -EObjjvbdYTMAmToY -DoDLKvbdwuNFQyLn -DoCkKvbdzitpQDrt -EOcLKvbdZtJIxdSn -DncLKvbdqZPHgRDx -EPDLKvbdMoxQvNfs -DncKjvbdmIctQuSB -DoCkKvbdFfKSNiUR -EPDLKvbdhtydvqtb -EObjjvbdxrnJNRag -DnbjjvbddoFTKssr -EPDKjvbdqlyjZLgi -DnbkKvbdyNsHwsJD -EOcLKvbdxnTHwsJD -EObjjvbdUQqOtuIN -DnbkKvbdwtleQyMO -DoDLKvbdrovPKDVf -EOcLKvbdFaPQxizm -EObjjvbdVAapsQqy -EOcKjvbdJvVFdFGi -DnbkKvbduDDVXVno -EObkKvbdZjTHpGbG -EObjjvbdZirgofaf -DncKjvbdAMgySvzY -DoDKjvbdGdLVibKK -DoDKjvbdWRmwbEkc -DncKjvbdXsMAlsnx -DoDLKvbdtcCuXVoP -DoDLKvbdqlyjYlIJ -EPCjjvbdHELVjCKK -DncLKvbdBdQAuilf -DoCjjvbdeFOrCXDK -DoCjjvbdRpTgJfDw -DoCkKvbdLAkHMbXq -EOcLKvbdaRebhUGL -DncLKvbdnQZyWLYb -EObjjvbdXsMBNUOx -DncKjvbdrSVKnKaN -EPCjjvbdAMhZSwZx -EOcLKvbdcScKtEKB -DncKjvbdKaLGlaxR -EOcKjvbdZRMeJNFR -EPCkKvbdwygeewdr -DnbkKvbdhancFXRR -EOcKjvbdOTUVfdtp -EPDLKvbdmbKXYOnV -DoDKjvbdGLFSbhNV -EPDLKvbdMfbomPtk -DnbkKvbdmIcsqVRa -DoDKjvbdwtmFRZLn -DoCkKvbddtAUATMv -DncKjvbdiBoDEvqR -EObkKvbdiHJcYujV -DnbjjvbdiCPDFWqR -EOcKjvbdyTNhlrCH -DoDKjvbdNQYRVmfs -EOcLKvbdFjdrbhMu -DoCjjvbdsrrSyZeD -EPCkKvbdXsMBMsoY -DoDKjvbdjhHLfFmk -EPCkKvbdyOTIYTIc -EOcLKvbdbhmKLGWx -DnbjjvbdxnTHwsIc -EOcLKvbdZoOJEeZj -EOcKjvbdjmBkzEfo -EPDKjvbdYORAXuWU -EPDKjvbdtkxXAsaX -DoDLKvbduaEYsPFI -EPCjjvbdypoNIiwA -DoDKjvbdVBCRTQrZ -DnbjjvbdlrYtyrdJ -DoCjjvbdhzUekpnG -EOcKjvbdcTCjsdJa -EObkKvbdbhlijfWx -EOcLKvbdYTLaMsoY -DnbjjvbdKVtedFGi -EOcLKvbdsPvPJbuf -DncLKvbdNrsvHEuQ -EObkKvbdmfeYMmfy -EPCjjvbdZjTHpHCG -DoDLKvbdpyOhGqDx -DoDKjvbdRkZGVGjs -DnbjjvbdRWnEDMHc -EPCkKvbdjlbMZdfo -DoCkKvbdyqOmIiwA -DoCkKvbddxZstSFz -DnbjjvbdKCibqJbx -DoCjjvbdqqtjnLBN -DnbjjvbdBhjbLJGK -DoDLKvbdrWokbhxq -EOcLKvbdJzpGXdAN -EPDKjvbdRMxCZNtz -DncKjvbdkClLRGuH -DncLKvbdIHHZxxXg -EPDKjvbdZshiYdSn -EPCkKvbdqcdhomvB -DoDKjvbdVTmUFkvK -EObkKvbdZisHogBf -DoCjjvbdRbDdkiYk -DnbkKvbdGGJrOJTq -DncLKvbdeFPRavcK -DnbjjvbdSPtHKGDw -DoDLKvbdJmADyfuB -EPCjjvbdKCibpicY -DoDLKvbdiGicZVjV -DoCkKvbdZLqdUNkm -EPDKjvbdVUNUFkvK -EPCjjvbdemFvflik -EPCkKvbdkxrqrxft -DnbkKvbdRbEElIxk -EPCjjvbdaaVdfQQX -DoDLKvbdySmhlqag -EPCjjvbdrRuKnKaN -DncLKvbdezuyEhtX -DnbkKvbdtbbuWuoP -DnbkKvbdZtIhxcrn -EObkKvbdcyxoxZQb -EOcKjvbdDxYLtTtM -EObjjvbdjggMFfOL -EPCkKvbdGckWJbKK -DnbjjvbdddnqavcK -EPDKjvbdYgWdAPTJ -DnbjjvbdbhlikGXY -DncKjvbdNPxRVmgT -EObkKvbdRpUHKGDw -EObkKvbdmfdwlmgZ -DoDLKvbdBvzdJFPv -DnbjjvbdZHXEAPSi -EPDKjvbdbQHGdLzd -EOcKjvbdCIjbLIej -DnbjjvbdOXnuzdNt -EObkKvbdrSUkNkBN -DoDLKvbdNeDsiJLE -EPCkKvbdiUyeXRtb -EObkKvbdbsDKsdJa -DncLKvbdbrcLTdJa -DncLKvbdSPsgJecw -EObjjvbdKNADzGta -EPDLKvbdFWZPomKF -EPCjjvbdRzKISbvA -EOcKjvbdvmWAMcdm -DncKjvbdwyhGGYEr -EPDLKvbdfHjuqnRH -EPCjjvbdRXOEDLhD -EPCkKvbdyOSgwsJD -DoDLKvbdnCKXYOmu -DnbjjvbdjmCLyeGo -DnbjjvbdTYKlNzjx -DoCjjvbdZisHpGbG -EObjjvbdUWMPisaR -EObjjvbdqFcdtWAh -EOcLKvbdYqNEhleR -DnbjjvbdlZSrSyGt -EPDLKvbdePEsLTsr -DncKjvbdSBcdlJYk -EPDKjvbdePEsLTsr -EPDKjvbdypnmIjXA -DnbjjvbdsQWPKCuf -EOcKjvbdZRNEhldq -EPCjjvbdYpmFImEq -EPCkKvbdKfFhBaRV -DncLKvbdezvZEhtX -DncKjvbdiCObdvpq -DnbjjvbdmJETqUrB -EOcLKvbdfpBzvcxI -DncKjvbdRbDdkhxk -EPCkKvbdmpZyVkZC -EPDLKvbdyNsIXrhc -DnbkKvbdyYJJaoyk -DncKjvbdwWlBVaWV -DoDKjvbdqwPlCiYq -DncLKvbdvvkaVaWV -DncKjvbdcJMjKewY -EObkKvbdbBWFFpPw -EPCjjvbdpyOhGqEY -EPDKjvbdCDpAujNG -EPDLKvbdCSaCtFvr -DoCjjvbdwygfFxEr -EOcLKvbdLFehBaQu -EPCjjvbdssSSxydc -EPCjjvbdHfgZyYYH -DnbkKvbdnBjWxOmu -DnbkKvbdcJNJjewY -EObjjvbdrzLoraIO -EOcKjvbdADRwjZiQ -EPCkKvbdOAJStJrA -DncLKvbdajkennDA -DoCjjvbdmbKWxPNu -EObkKvbdmbKXYPOV -DoCkKvbdKCjCpjDY -EPCkKvbdIjEAJogE -DoCkKvbdkHgLfGOL -DoCkKvbdJcJbqKCx -EPCkKvbdVUMtGMWK -DoDKjvbdNxOuzcmt -EPDLKvbdNQYRVnGs -DnbkKvbdzjUoocrt -DoDKjvbdDnbjjvcE -DoCkKvbdGBPRZJzm -DoCjjvbdtvNwjRTA -EPDLKvbdZQldhleR -DoDLKvbdUtMsfMWK -DnbkKvbdDxYLtTsl -DoCjjvbdmbJwYPOV -DoCjjvbdaNLCTVMg -DoCjjvbdWXIwvEFH -DoDKjvbddZxoxYpb -DncLKvbdijGHimXr -EPDKjvbdZQmEiMdq -DncKjvbdTulPisaR -DncLKvbdnGdxMnGy -EPCkKvbdlYsSSyHU -DoDKjvbdKRZePFme -DoCkKvbdZRNFJNEq -DncLKvbdkMbMZeGo -DoCkKvbdBiLBkIej -EObjjvbdWXIwvEFH -EOcLKvbdGGJqnJTq -DoDLKvbdRWmcblID -EObjjvbdxUleQxlO -DnbkKvbdREDBPpdS -DnbjjvbdiifHjMwr -EObjjvbdZLqctOMN -EPCjjvbdmRxtyrci -DoDLKvbdDxXlTtUM -DoDKjvbdxrmiNSBg -DoDKjvbdTppntthN -EObjjvbdnUtykKRf -DoCkKvbdRNYBxmtz -EOcLKvbdQYmAHTSK -EPCjjvbdZtIhxcsO -DoCjjvbdbsCjsdJa -EPDKjvbdsZkoraIO -DoDKjvbdEJhJvYKA -EOcLKvbdJSxaTMwl -DoDLKvbdANHxrvzY -EObkKvbdcTDKtDia -EPDKjvbdrWolDJZR -DoDKjvbdsQVnicVf -EPCjjvbdYSlAlsoY -EPCkKvbdJYUBhMRQ -DncLKvbdtlXwBUBX -EObjjvbdVrOYBeMD -EPCjjvbdcJNJkGWx -DncLKvbdjKGHjNXr -DncKjvbdRMwayOUz -EObjjvbdzdzOzdyp -DnbjjvbdNHColpVL -DoDLKvbdNddThiLE -EPDKjvbdFjdsCgmV -DnbjjvbdTJZjRABM -DncKjvbdOTTugFVQ -DncLKvbdVYgszLPO -DncKjvbdEARhlzWw -EPDLKvbdUGzmkvvF -DoDLKvbdmRyVZsEJ -EObjjvbdptUHRqjt -EOcKjvbdJpzFOeme -DnbkKvbdMgDPmPtk -EOcKjvbdhzUfMRNf -DoDLKvbdpyPHgQdY -DoCjjvbdZjShQHCG -EOcKjvbdOTTvGeVQ -EPCjjvbdRacdkiZL -DnbjjvbdzitoodTU -EOcKjvbdxxIjCPyk -EObjjvbdunszqLPU -EObjjvbdwjwDgzzG -DnbkKvbdUyHtZkOn -DnbjjvbdqvpMChyR -DnbjjvbdmIctRUrB -EObkKvbdNHCpMpUk -DoDKjvbdeFPSCXCj -EOcKjvbdtvOXjRTA -DncLKvbdZGvdAPSi -DoCjjvbdQcbaPpcr -DoDLKvbdVUMselVj -DnbjjvbdVgxWXgYz -DoDLKvbdjAQHBQHK -EOcKjvbdxxJKCPyk -DnbkKvbdQdDApQcr -DnbjjvbdqrUjmjaN -EOcKjvbdJzofYEAN -DoDLKvbdJvVGEFHJ -EObkKvbdJcJbpjDY -EPDLKvbdhanbdwRR -EObkKvbdiZtfLqOG -DoCjjvbdeOdsLTsr -DoCjjvbdSLZFuGjs -DoCjjvbdqTsfrRjt -EObjjvbdACqxKZhp -EPCjjvbdxZhFexEr -EPDKjvbdiBoCeXRR -DoDKjvbdqFcdtVaI -DnbkKvbdkClLQgVH -DnbkKvbdZQmEhldq -DnbjjvbdQYmAGrqj -DnbjjvbdiLddNuDZ -DoDLKvbdsQWOjDWG -EPDKjvbdVqnXaeLc -DnbjjvbdwNWANEFN -EPCkKvbdsBfNMHKy -EOcLKvbdKQzFOfOF -DoDKjvbdHELVibJj -EPDKjvbdcImJkFwY -DncKjvbdIwtBgkqQ -EObkKvbdANHySvyx -DoDLKvbdpxnhGqEY -EPCjjvbdrafNMHKy -DoDLKvbdSQTfiecw -DnbkKvbdiMEdOUcZ -EObjjvbdQmYCYnUz -EPDLKvbdWIYWXfxz -EPCjjvbdNeEThiLE -EObjjvbdHDkWJaij -DncKjvbdMgDQNPuL -DncKjvbdKWUedFGi -EPDLKvbdJYUCIMRQ -EOcLKvbdRacdkhyL -EPCkKvbdSBdEkhyL -EPCkKvbdMRwMzUpz -EPDLKvbdkxrqsYft -EObkKvbdRkYetgLT -EPCkKvbdNrsvHFVQ -DoCjjvbdqiAKFNOe -DoDKjvbddwystRez -EOcKjvbdrylQTBHn -EPDKjvbdDjHjWXjA -EObjjvbdCIkCLJGK -DnbjjvbdqwPlDJYq -EPCjjvbdnVUzLKRf -EOcLKvbdUxhUZjnn -DnbjjvbdRpUHJecw -DnbjjvbdjhGlFfNk -EObkKvbdJKEAKPgE -DoDLKvbdIidAKPgE -DncKjvbdCSaCtGXS -DoCjjvbdIidAKQHE -DnbkKvbdFjdsCgmV -DoCkKvbdGKeTCglu -EOcKjvbdEzspeMDJ -EOcLKvbdqUTgSSKt -DoCkKvbdnBivwnmu -DncLKvbdJcJcRKCx -EPCjjvbdVwJXucdg -DnbjjvbdKVuGEFHJ -DncLKvbdnVUzKjSG -DoCkKvbdqGDeTuaI -DnbkKvbdLFfICBQu -DnbkKvbdZjTIQGbG -DoDLKvbddBrlrATm -DncKjvbdYNqAXtut -DnbjjvbdURROtuHm -EObjjvbdxmrgxSiD -DoCkKvbdjJfHjMwr -DncLKvbdNwoVzdOU -EPDLKvbdyTNhlqbH -EObkKvbdiMEcnUby -DoDKjvbdJcKCqJbx -EPDLKvbdNrtVgEtp -DncKjvbdjEkGtoAO -DoDKjvbdNVSrKmAX -EOcLKvbdxmsIYTIc -EObkKvbdcTDKtDjB -EPDLKvbdxsOIlrCH -DnbkKvbdbrbjsdKB -DoCjjvbdpfEEtWAh -DoCkKvbdMowqVmfs -EPCkKvbdeATqMxJf -EObkKvbdjJehJmYS -EPDKjvbdxmrhYSiD -EObjjvbdjbkkQgUg -DoCjjvbdYlRdUNlN -DoDLKvbdiHKDZWJu -DoDKjvbdpedEsvAh -DoCkKvbdEuyPomJe -EPCkKvbdhtyeWrVC -DncLKvbdbAvEfQQX -DnbjjvbdTkvPBWPJ -DncKjvbdYlRdUOLm -DncLKvbdCIjajiGK -EPDKjvbdUtNTfLuj -DnbkKvbdKVuFdEgJ -DoDKjvbdfVzwoizs -EPCjjvbdySmiMrBg -EPCkKvbdrpWPJcVf -DoDKjvbdcImJjewY -DoCkKvbdkVvnECYX -DncKjvbdWRnYCEkc -DoDKjvbdCIkBjhfK -EObkKvbdmIdURVSB -DoCkKvbdTppoUuHm -EPDLKvbdUQqOtuHm -DnbkKvbdhgKDYvJu -DnbkKvbdkHgLfFmk -EPDLKvbdCDoaVjMf -EPCkKvbdehKvSNqH -DncKjvbdNeEUJJLE -DncKjvbdlhdTqVSB -EOcKjvbdEuxpPmJe -DncLKvbdqceIpNua -DnbjjvbdnVVZjjRf -DnbkKvbdKDJcRJbx -EObkKvbdnHEwlmgZ -EOcLKvbdFWZQQMjF -DoDKjvbdKWUedEgJ -DoDLKvbdmozZVkZC -DoCkKvbdZdxGzhJC -EObkKvbdGQATWffZ -EPCkKvbdJuuGDeHJ -DoCkKvbdiGibxvJu -DnbkKvbdBraDUGXS -EPDLKvbdiHKDYvKV -DnbjjvbdZxcjODMS -DnbkKvbdnGdwlmgZ -DoDKjvbdkxsRrxgU -EOcKjvbdrzMQTAgn -DncLKvbdjhHLfGOL -DnbjjvbdQvnEClID -DoDKjvbdqdEhomvB -DoDLKvbdGdKvKCJj -DnbjjvbdqvpLbiYq -EObjjvbdsPvOjCuf -DoDLKvbdVqnXbElD -EPDLKvbdeEoRbXCj -DoCkKvbdyYJKBoyk -DoDLKvbdlhdURUqa -EPDLKvbdYkqdTnMN -DoCkKvbdnGdwmNgZ -EObkKvbdGGKSOIsq -EObjjvbdLLAgvAJy -DnbjjvbdajlFnmcA -DoDLKvbdiifHimYS -EPCjjvbdnPzYukYb -EPDLKvbdVYhTyjnn -EOcLKvbdfNFwHNJk -DoCjjvbdbrbkTcia -DncLKvbdRkZGVHLT -EObkKvbdSQUHKFdX -EOcKjvbdSKxeuHKs -DncKjvbdFxuUaDwb -DoCkKvbdaSGDHtFk -EPDKjvbdZyDimcLr -EObjjvbdiGibxvJu -EPCkKvbdDwwktTsl -EPDKjvbdRadEkiZL -EPDKjvbdmgEwlmfy -DncLKvbdaogHDkzd -EOcLKvbdjuvmdCXw -EPDKjvbdqwPlCiYq -DoDKjvbdLBLHNBxR -EObjjvbdeFOrBvbj -EPDKjvbdFyVVAdYC -EPDLKvbdKNADygUa -DncKjvbdbVCGxLUI -DoCkKvbdJSyArmXl -EObkKvbdQvnDbkgc -EObjjvbdrEEiQOWB -EOcKjvbdZMSDtOLm -DoDKjvbdQvmccLhD -EPCkKvbdrzMQTBHn -EPDKjvbdMgCpNQUk -DoDKjvbdmbJwYPOV -EOcKjvbdgGLymgHA -EObjjvbdsrqsYzFD -EPDLKvbdrNZiyLgi -DnbkKvbdiiegimYS -DoDKjvbdqwQLcJYq -EObkKvbdaNLCSuNH -EPCkKvbdnUuZkJqf -EPCjjvbdSCEEkiZL -DncLKvbdVZHszKnn -DnbjjvbdUtMsfLuj -DoDKjvbdxmrgwriD -DoCkKvbdxxJKBpZk -EObkKvbdZMRdUNlN -EObkKvbdbPgHDkzd -EObkKvbdqqtjnLAm -EPDKjvbdURROuUhN -DoDKjvbdCWzdJFPv -DoDLKvbdMSXMytpz -DnbjjvbdqlyjZMHi -DoDKjvbdbsDLUDia -EOcLKvbduVnXiqTA -DoCjjvbdDxYLsssl -DoDLKvbdyqPMiJwA -EObkKvbdeOdsLUUS -EOcKjvbdEuyQQMjF -DoDKjvbdEztQeMDJ -EPCkKvbdGZVVBDxC -DnbkKvbdnGdxNNgZ -DoCkKvbdcIljLFvx -DoCjjvbdYqMdhmEq -EPDLKvbdgKfzbfAE -EPCjjvbdJcKDRJcY -EOcKjvbdOFDtJJLE -DncKjvbdiLdcmuDZ -EObkKvbdrWpLcJZR -DnbkKvbdVAaqTQrZ -DnbjjvbdFkFTChMu -DncKjvbdaaWEepQX -EPCkKvbdpedEsvAh -DncKjvbdjAQGaPfj -DoDKjvbdbUbHXkTh -DoDKjvbdRjyFtfkT -EOcLKvbdOTTvHEtp -DoCjjvbdRkYfVGjs -DncLKvbdzoQRFCkx -DncKjvbdrMzJyMHi -EOcKjvbdULvPBWOi -EOcLKvbdzdynzdzQ -EPCjjvbdtumxJpsA -DoDLKvbdwMvAMcdm -EOcLKvbdqceIonVa -EObjjvbdOEdUIiKd -EObjjvbdHELVjBij -EObjjvbdqcdiPmvB -DoCjjvbdJvVFdFGi -EPDKjvbdWRmwaeLc -EPDKjvbdZxdJnDMS -DoDKjvbdZxdJnDMS -EObjjvbdxUldpxkn -DnbkKvbdSLYetfjs -EPDLKvbdYqMeIldq -DoCjjvbdrMyjYlIJ -EObkKvbddxZtTqez -EPCkKvbdWSNxCElD -DoDKjvbdWWiYVcdg -DoDLKvbdqGDdsvAh -EOcLKvbdhzVFlRNf -EOcKjvbdaNLCSuNH -DnbkKvbdkHgMFfNk -DnbkKvbddePRbXDK -DncKjvbdNVTSKmAX -EObkKvbdhzUfLpmf -EOcKjvbdZMSDtNkm -EPDKjvbdTqROtuHm -DoCkKvbdddnqbXCj -DoDKjvbdliEURVSB -DncKjvbdtvNxKQsA -DnbjjvbdqceJQOVa -EPDKjvbdpyOggQcx -EOcKjvbdtcDUvuoP -EObjjvbdrWpMChxq -EPDKjvbdGYttaEYC -EObjjvbdiifIKNYS -DoCjjvbdZyEJmcMS -EPDLKvbdKQzFOfNe -DoCkKvbdqYoIGpdY -EPDLKvbdxwhibPzL -EPDKjvbdRadElJYk -DoDLKvbdtkwwAtAw -EPCjjvbdDjHjVxKA -EPDKjvbdrzLosBIO -EPCkKvbdBdPaVimG -DoCjjvbdrafMkfjy -EPDKjvbdNGcPmQVL -DoDLKvbdVviYVdFH -EPCjjvbdkVwODaxX -DncKjvbdkMbMZeGo -EOcLKvbdfkGzbfAE -DnbkKvbdpyOhHQdY -DoDKjvbdQdCaPqES -EObjjvbdEKHiuxKA -DnbjjvbdpxnhGpcx -DnbkKvbdkxsSSxgU -DnbjjvbdURQnuUgm -DoDLKvbdTukpJtBR -EPCkKvbdqAiFAWgd -DnbjjvbdgGLymfgA -EOcLKvbdyYIibQZk -DoDLKvbdWHxVxGxz -EPDLKvbdFyVVAdXb -DnbkKvbdrRuKnKaN -DoDLKvbdTpqOttgm -EPDKjvbdLhbLqYAS -DoCjjvbdHELVjCKK -DncLKvbdfSBWzlDP -DoCkKvbdRDcBPpdS -DoDLKvbdsQWPJcVf -EPCkKvbdySmiMrCH -EPCkKvbdbUbHXjtI -DoDLKvbdUtMsfLuj -EPCjjvbdEvZQPmKF -EObjjvbddeOqbXDK -EPDKjvbdkClKqGtg -DncKjvbdqiAJdmPF -EOcLKvbdlrZUyrci -EOcKjvbdbBVeFpPw -EOcLKvbdULvPBWOi -EPCkKvbdcJMjLFwY -DnbjjvbdZtIhxcsO -EPDLKvbdSPtHJfDw -EObkKvbdaNLBsUlg -DoDLKvbdqvpLcIxq -DoCkKvbdpxoIHQcx -EPCkKvbdlZTRsZGt -DoCjjvbderBWzkcP -EPDLKvbdZtJIxdSn -EOcLKvbdmoyyWKxb -DoDLKvbduaDxroEh -EPDLKvbddoErkTtS -DncKjvbdnPzYvKxb -EObjjvbdsZlPsAhO -EPDLKvbdjJfHjMxS -EOcLKvbdbsDLUDia -DncLKvbdMuTSLNAX -EPDLKvbdemGWfmKL -EObkKvbdKefHbBQu -EOcLKvbduVnXjRTA -DnbjjvbdGZVUaEYC -EOcKjvbdkNCMZeGo -EPCkKvbdGKeSbgmV -DoDKjvbdqrVLNjaN -DnbjjvbdEASIlzWw -DnbjjvbdeOdrkUUS -DncKjvbdDjIJvXjA -DoCjjvbdqGEFUWAh -EPCjjvbdQcbaQRES -DnbkKvbdhtydwSUb -DoCkKvbdMuTRjmAX -DnbjjvbdJutfEEfi -EPCjjvbdzGxlAMeX -DncLKvbdIHGyyYYH -DoDLKvbdxUmEqZLn -DnbkKvbdNHCpMotk -DnbjjvbdFyVVAcwb -EPCjjvbdShzJqABM -DnbjjvbdcyxoxZRC -EPCjjvbdqquKnLBN -DncLKvbdcIlikFwY -DoCkKvbdeOeSkTsr -EOcLKvbdYpldhldq -EPDLKvbdQYmAGsRj -DoCkKvbdzGyMAMeX -EPCkKvbdqrVKnLBN -EObkKvbdxUldpxlO -EPCjjvbdfIKuqnRH -EPDKjvbdFWYpQMjF -EPDLKvbdOFEUJJKd -EOcLKvbdHEKvKBij -DoDKjvbdjcMLRHUg -EPCkKvbdWXIwudEg -DncLKvbdgPazvcwh -DnbjjvbdnVUykJrG -EPCjjvbdxxJJbPyk -DncLKvbdjJehKMxS -DncKjvbdEzspdkbi -EPDKjvbdrpVnjDWG -DnbjjvbdVrOYCFLc -DoDLKvbdMfbpMotk -DncKjvbdbhljLGWx -DncKjvbdxrmhlrBg -EOcKjvbdbKlGPODA -DoDKjvbdJvUfEFHJ -EPCkKvbdySnIlqag -EPDKjvbdVAbQrpqy -DnbjjvbdrykosAhO -DnbkKvbdKfFhCBQu -DnbjjvbdEXwktTsl -DoDKjvbdDoDLLXCd -EObkKvbdvwMAvAvV -EObkKvbdXsLaNUOx -DnbkKvbdRDcBQRES -EOcLKvbdZisIPgCG -DoDKjvbdpfEEtWBI -DoDKjvbdfoazwDwh -EPCkKvbdFpASvffZ -EObjjvbdRWnDblHc -DoCkKvbdNxOuzdOU -DncLKvbdYlSDtOLm -EPCjjvbdjbkjqHVH -EPCkKvbdrMzJxkgi -EPDKjvbdCIkBjhfK -EPCkKvbdUslsekvK -EOcKjvbdFejRnJUR -EPDLKvbdNHColotk -EPCjjvbdUxgtZjnn -DoDKjvbdEOcLLXCd -EPCkKvbdkHflGFnL -EPCjjvbdwygfFxEr -DncKjvbdeOdrjtTr -DoDLKvbdqTtHRqjt -EPDLKvbdQwNdCkgc -EPCkKvbdhzVGLpnG -DoDKjvbdxwiKCPzL -EPCkKvbdZirhQGbG -DoCjjvbdqrUkOKaN -DoDLKvbdlrZUysEJ -DoCjjvbdqFdFUWAh -DnbjjvbdyYJKCPzL -DncKjvbdxUldpyMO -EPCjjvbdvAcyTOeI -EObjjvbdLFegaaRV -DncKjvbdemFvgNKL -EOcLKvbdjcLjqHVH -DoDKjvbdRMxCYnUz -EPDLKvbdRjxfUfkT -DoDLKvbdiMEdNuDZ -DoDLKvbdZRMdhmEq -DoDLKvbdqlyiyLgi -EObjjvbdiiehJmYS -DoCjjvbdwuMeRYlO -EPDKjvbdqquKmkAm -EOcKjvbdlrYtysDi -EPDLKvbdliETqUrB -EObjjvbdePErkTsr -DoDLKvbdfHjvRnQg -EObjjvbdRXOECkgc -EObkKvbdMpXqWOGs -DncKjvbdEJhJvYKA -DoCkKvbdVrOYBeMD -EPDKjvbdTkvPBWOi -EOcLKvbdjuvmcbYX -DncKjvbdMfcQMouL -EOcLKvbdMpXpvOHT -DoCjjvbdiLdcmtcZ -DnbkKvbdiHJcZWJu -EPDLKvbdTqQnuUgm -DncKjvbdLGFgbBQu -EPDKjvbdNdctIiLE -EPDKjvbdZxdKODLr -DoDKjvbdSZjITCvA -EPCjjvbdDwxMUTsl -EPCkKvbdySmhmRag -EOcLKvbdSPtHKGDw -DoDKjvbdmIctRUqa -DoDKjvbdaRfChTek -DncLKvbdyNrhXsIc -DncLKvbdJTZBSlxM -DoDKjvbdFeirOIsq -DnbjjvbdJutedFHJ -DnbkKvbdUsltGMWK -DnbkKvbdbhljLGWx -EPCjjvbdirziTLJz -EOcKjvbdnPzYvKyC -DoDKjvbdkDMLRGtg -DncLKvbdyzeNqhIh -EPCjjvbdYTMAmUPY -DoCkKvbdgGMZnHHA -DncLKvbdlZSqsYft -EOcLKvbdZjShQHCG -DnbjjvbdjhGlGGNk -DoDLKvbdkxsRryGt -DoCjjvbdZyDjNbkr -DnbkKvbdNeEUJIjd -EOcKjvbdxxJJbPyk -DoDLKvbdRbDeMIxk -EObjjvbdrDeJPnWB -EPCkKvbdrXPkbiYq -EPCjjvbdeFPRbWbj -DncLKvbdHffyxxYH -EPDKjvbdcyyQYZQb -DoCkKvbdNsTvGeUp -EPCkKvbdfpBzwDxI -EPCjjvbdqTtHRrLU -EPCkKvbdhgJbxvJu -EOcKjvbdkxsRryGt -EPCkKvbdZshhyETO -DnbkKvbdrWpLbiZR -EObkKvbdnHExMmfy -DnbkKvbdbUbGwkTh -DnbkKvbdnHExMnHZ -EObjjvbdZnmiFEyj -EObkKvbdSQUGjGDw -EPCkKvbdqTtGrRkU -EObjjvbdcImKLGXY -EObkKvbdShzJqAAl -DncLKvbdGGJqnIsq -DnbkKvbdehKuqmpg -DncLKvbddeOrCXDK -EOcLKvbdRMwbYmtz -DnbjjvbdgFlZmgHA -DnbkKvbdyOSgxTJD -EOcLKvbdQZNAGsSK -DoCkKvbdRMwayNtz -DncLKvbdezvYeItX -EOcLKvbdVAapsQrZ -DoCjjvbdcImKLFwY -DoDKjvbdTqQnttgm -DnbjjvbdOEdUJIkE -DoDKjvbdeYZssqez -DnbjjvbdZjSgpHCG -DoCkKvbdTvMPisaR -EOcKjvbdZjSgofaf -EPDLKvbdfVzwoizs -DnbjjvbdCSaCsewS -EPDLKvbdFVyPpMjF -EObkKvbddjJrVtzn -DnbjjvbdyOSgxTIc -EOcLKvbdrovPKDVf -DnbjjvbdxZhGGXeS -DncLKvbdbLLeoNcA -EOcKjvbdMfbomQUk -EPDLKvbdaRebhTfL -DoDLKvbdoAKztHcn -EOcLKvbdGckWJbJj -DncLKvbdqmZjYlHi -DncKjvbdZyDinDLr -DoCkKvbdxwhibPzL -DnbkKvbdZoOJFFZj -EPDLKvbdYpmEiMdq -DoCkKvbdiUzFWquC -DnbjjvbdsPvPJcVf -DncKjvbdDwxMTssl -EObkKvbdZQleJNEq -DoDLKvbdWSNxBdkc -DoCjjvbdcSbkTcia -EOcKjvbdqvolChyR -DnbjjvbdqlzJxlHi -DoCjjvbdlrZUzTEJ -EPCkKvbdGdLWJbJj -EObkKvbdzoPqFDLx -DncLKvbdANIYrwZx -EObjjvbdSPsgJfEX -DoCjjvbdbiNJjfWx -DnbkKvbdMfbpNQVL -EObkKvbddePRbXCj -EPDKjvbdShzKRAAl -DoDKjvbdnPyxukYb -EObjjvbdVZITzKoO -EPDLKvbdZyDinDMS -EPCjjvbdYpldhmFR -DoCkKvbdZjTIPfaf -EObjjvbdqdEiPmua -DnbkKvbdRadEkhxk -EPDLKvbdzjVPpDrt -DnbkKvbdaMkBsUlg -DncLKvbdMpXpunGs -DoDKjvbdUxgszLPO -EPCkKvbdiiegilxS -DoCjjvbdEOcKkWbd -EOcLKvbdcTDLUEJa -EPDLKvbdZtIiYcrn -DoDLKvbdmttyjirG -EPDLKvbdGdLVjBjK -DncLKvbdDigjVxKA -EPCkKvbdelfWflik -DoDKjvbdOTUVfdtp -DncKjvbdTlWOaVni -EPDKjvbdrpWOibvG -EPDKjvbdfRaWzlCo -DncKjvbdlrYuZrdJ -DoDKjvbdIsZBSlwl -EPDLKvbdqquLOKaN -DnbjjvbdJmAEZgUa -EPCkKvbdcImJkFvx -DncLKvbdkxrqsYft -EPCkKvbdUWLojTaR -DoDKjvbdnGeXlmfy -DoCkKvbdiMFDmuCy -EPDKjvbdauCHXjtI -DoCjjvbdBsAcUGXS -DoDKjvbdACrYJyhp -DoDKjvbdsZlPsBHn -DoDLKvbdjJegimXr -DoDKjvbdWXIwvDdg -DncKjvbdelewHNJk -EObkKvbdyTOJMrCH -DoCkKvbdNddUIiKd -DoCkKvbdRyjHrbvA -DoCjjvbdiGjCyWKV -DoDLKvbdhlFEOVDZ -EPCkKvbdQdDAoqDr -DoDKjvbdBiLBjhej -EOcKjvbdqlyjZLgi -DncLKvbdtSrTYzFD -DoCkKvbdrMyjYlHi -EObjjvbdhficYuiu -DoDKjvbdfekymgHA -EOcLKvbdiifHjNXr -EObjjvbdIwsaglQp -DoCjjvbdCIkBkIfK -EPDKjvbdaSFcHsfL -DoDLKvbdMgDPlpUk -EPDKjvbdqYnggQdY -DoDKjvbdaSFbgsek -DoCjjvbdiZtekqNf -EPDLKvbdkClKpftg -DoCkKvbduMYWaUAw -EObkKvbdtTSTYydc -DnbjjvbdptUGqrKt -EObjjvbdYlRctNlN -DncKjvbdMgDQNPtk -DncLKvbdILaznXQk -DoDLKvbdiCPDFWpq -DoCkKvbdiGicZWKV -DncKjvbdFjdrbglu -DncLKvbdKWUfDeGi -DoCjjvbdVhXuwgYz -DoDKjvbdhtzFWquC -EPCjjvbdRpTfiedX -DoCkKvbdKVuFdEfi -DoDLKvbdbBWEfPow -DoCkKvbdZyDjODLr -DncLKvbdeAUQmXif -DoCkKvbdIidAKQHE -EPCkKvbdTqROuVIN -DncKjvbdRXODcMID -DoDKjvbdkyTRsZHU -EPCjjvbdxnTIXrhc -EObjjvbdJzofXdAN -EOcKjvbdiBncFWpq -EObkKvbdYORAXuVt -DnbjjvbdiMEdNtby -EPDKjvbdVrOXbFMD -EPCkKvbdAMgxrwZx -DoCkKvbdtbbuXVoP -EPCjjvbdDoCkKwCd -DncLKvbdVBBpsRRy -DoDKjvbdemGWgMik -EObkKvbdeEnqbXDK -EPCjjvbdhanbdvqR -DnbkKvbdmaiwYOnV -DoCjjvbdcJMjLGXY -DnbkKvbdIryArlxM -EPCjjvbdtkwvaUAw -DnbkKvbdxZgefYFS -EPCkKvbderBWzlDP -EPCjjvbdNxPVzdOU -EPDKjvbdaSGDHsek -EOcKjvbdqcdhpOVa -EPCkKvbdxmsHxShc -DoDKjvbdDncKjwDE -DoCjjvbdYpmEhmFR -DncKjvbdaRfCgsfL -EObjjvbdegjurNpg -DnbkKvbdjhHMFenL -EPCjjvbdMfcPmQUk -EOcLKvbdACrYKZhp -DoDKjvbdffMZmgHA -DoCjjvbdaaVeGQQX -EOcKjvbdSCDdkiZL -EOcKjvbdqwPlCiYq -DoDKjvbdajlGPODA -DncLKvbdJYTbHkpp -DncLKvbdtcDVXWOo -EPCjjvbdEXxLtTsl -EPCjjvbdJuteceGi -DnbjjvbdDoCkLWbd -DoCkKvbduCbtwWOo -EPDLKvbdauBgYLTh -EPCjjvbdOXoVzcmt -DoCkKvbdRMxByOUz -DoCjjvbdqYoIGqDx -EPCjjvbdNGbpMpVL -DoCjjvbdJpzFOfNe -EOcKjvbdVAapsQrZ -DncKjvbdpxoIHQcx -EOcKjvbdRaceLiZL -DncLKvbdtcCuWvOo -EObjjvbdbBVeGPow -DnbjjvbdKyRKSzuG -EOcLKvbdFyVUaEYC -EPDKjvbdkCkkRHUg -EObkKvbdKaKfmBxR -DoDLKvbdbUbGwjsh -DnbjjvbdrovOjDVf -EPCjjvbdZsiIyDsO -EObjjvbdRDbaPqDr -EOcKjvbdnBivwnmu -EPCjjvbdYTMBMsoY -DoDLKvbdxKwEHzzG -EPCkKvbdqTsgRqkU -EPDKjvbdfMfWgNKL -DnbkKvbdznpREbkx -DncKjvbdJXtCHlRQ -EPDLKvbdGYuVBEXb -EPDKjvbdZLrEUOMN -EPDKjvbdtcCtvuoP -EObjjvbdXsLaNUPY -EPDLKvbdyOTIYSiD -EObjjvbdsrrTYyeD -EObjjvbdZisHpGaf -DoDLKvbdvOszqLOt -DncLKvbdaMjbSuNH -DncLKvbdYTMBMsoY -EPDKjvbdwzIGFxFS -EPDLKvbdmRyUyrci -DncLKvbdTkvPBWOi -EPCjjvbdNdcsiIjd -EPCkKvbdEzspdkbi -EObkKvbdrovOicVf -DoDKjvbdhbObeXQq -DncKjvbdZnnIeFZj -EObkKvbdRECaPpdS -EOcKjvbdnGeXlnHZ -EPCjjvbdauCGwjsh -EPCjjvbdczYpXyRC -EOcLKvbdDihJuxKA -EOcKjvbdkVwNcbXw -EObjjvbdbsCkTcia -DoCkKvbdfMewHNKL -DoCjjvbdxZgeexEr -EOcLKvbdiBoDEwQq -DnbkKvbdpstHSSKt -EOcKjvbdQvmdClHc -EPDKjvbdIxUBhLqQ -EObkKvbdZtJIyESn -EPCjjvbdtumwjQsA -DoCjjvbdNPxQunHT -EOcLKvbddndrkUTr -EObjjvbdCTBCsevr -EOcKjvbdiUzEwRuC -EPDKjvbdRyigrbvA -DoCjjvbdezvYeJTw -EOcLKvbdVgxVxGxz -DnbjjvbdZeXfzhIb -DncKjvbdxZgfFweS -DoCkKvbdKxqKSztf -DncLKvbdpyOggREY -EPDLKvbdXrlBNUOx -EPCkKvbdqwPkbiZR -EPDLKvbdbsCjscia -DoDKjvbdnGeYMmgZ -EOcLKvbdUsmTfLvK -DnbkKvbdjuwOEBxX -DnbjjvbdTAFJICPE -DncKjvbdEuxoomKF -EPDKjvbdeOdsLTsr -EObkKvbdZshiYdSn -DncKjvbdcTDKscjB -DncLKvbdvwMBWAvV -EOcKjvbdVwIwudFH -EPDLKvbdlZTSSxgU -EOcKjvbdMgColotk -EOcLKvbdZdxGzgiC -DnbjjvbdULuoBWOi -EObjjvbdiCObeXQq -EPDKjvbdNUsRkNAX -DoCjjvbdZxcjOClS -DncLKvbdiUzEwSVC -DoDLKvbdvlvAMceN -DoDLKvbdqcdhpOWB -EObkKvbdCSaDUGWr -DoCkKvbdssSTYydc -DoCkKvbdnGdxMmgZ -DoCkKvbdHELWJbKK -DoDKjvbdKefHbApu -EObkKvbdVqmwbFLc -DoCkKvbdUtNTekuj -EPDLKvbdTlWOaVni -DoCjjvbdDxXkstUM -EPCkKvbdpxoHfqEY -EPDKjvbdmSYtzTEJ -DoCjjvbdddnrCXDK -EPCkKvbdZjTHpGbG -DncLKvbdhzVGLqOG -EPCjjvbdZjSgogBf -EPDLKvbdkDLjqGuH -DncLKvbdxUmFRZLn -EPDLKvbdjhHMFfNk -EPCkKvbdZjTHpHBf -EObkKvbdegkVqnQg -EPDLKvbdGYttaEXb -EObjjvbdZdwfzhJC -DoCkKvbdGQASwHFy -EPDKjvbdkVvnDbXw -EObkKvbdJYTagkqQ -DoCjjvbdMSWlzVQz -DoCjjvbdnGeYMmfy -DoDLKvbdADRxKZiQ -EObkKvbdZLqdTmkm -EPCkKvbdFeirOItR -EPCkKvbdRjyGVGjs -DncLKvbdiMFDnUcZ -EObkKvbdVAaqSpqy -EPCkKvbdULunaVni -DnbkKvbdcImKKevx -DoCjjvbduaDyTPFI -EPDKjvbdKQydoFnF -EPCjjvbdozmcjwoA -DoDLKvbdZLqdUNlN -DoDKjvbdJXsbHkpp -DoCkKvbdelfXHNJk -EObjjvbdeFOqavcK -EPDLKvbdqlyjZMIJ -DoCjjvbdUtMsekvK -DoCkKvbdIxUBhMQp -EOcKjvbdemGWgMjL -DoCkKvbdwuMeQyLn -DncKjvbdkClKpgVH -DoDKjvbdfNFvflik -DncKjvbdhkdcmuCy -DoDLKvbdCJKakIfK -DnbkKvbdSQTgJfEX -DnbkKvbdkIGlGFmk -DoDKjvbdySmhlqbH -DoCjjvbdGdLVibJj -EPCjjvbdSLZGUfkT -EPDLKvbdSKxfVHKs -DoDKjvbdGLFSbhMu -DoCkKvbdqFcdtWAh -EOcLKvbdbVBfxLUI -DoDKjvbdcScKsdKB -DnbkKvbdVwJYWEFH -EPCjjvbdGQASwHFy -DnbjjvbdqUTfrRjt -EPDLKvbdEYYMTtUM -DoDLKvbdfNFwHNKL -EObkKvbdsQWPJbvG -EOcKjvbdIsYaSmYM -EPDKjvbdBdQAuilf -DnbkKvbdrounibvG -EObkKvbdiCPCdvqR -EOcLKvbdBsAbsfXS -DoCjjvbduDDVWuoP -EPCkKvbdbsCjtEJa -EOcKjvbdcTDLTdKB -DoCjjvbdXGYytAPT -DnbjjvbdePFTLTsr -EObkKvbddoErjssr -EPCkKvbdcTDKsdJa -EPDKjvbdjgflGFnL -EObjjvbddeOqbWcK -EObkKvbdACqwizJQ -EObjjvbdHgGyyXxH -DoCjjvbdqlzKZMHi -DnbjjvbdhfibxvJu -DoDKjvbdSCEFLiZL -EPCjjvbdSCEFLiYk -EObkKvbdiLdcmuDZ -EObkKvbdzGyMAMeX -EPDKjvbdVYhTzKoO -EPCkKvbdxrmiNRag -DoDLKvbdjKGHilxS -EOcKjvbdhWyAzzAJ -EPDLKvbdMfcQNQVL -DncKjvbdYkqdTmlN -DoDLKvbdjJfIJlwr -EOcLKvbdZeYGzghb -DncLKvbdJuuFceGi -EPCkKvbdhzUelRNf -DnbkKvbdBhkCKhej -DoDLKvbdhbObeXRR -DnbkKvbdzHZMAMdw -DoDKjvbdZxcjNblS -DoCjjvbdDwwksstM -DoCkKvbdUVkpJtAq -DoDLKvbdaaWEepPw -DncLKvbdGdKvJbKK -DoDLKvbdTulQJtBR -DoDKjvbdqceJPnVa -DnbkKvbdvAdZTOeI -EOcKjvbdVAbRSqRy -EPCkKvbdTqQnuVHm -DoCjjvbdwNWANDeN -DnbkKvbdZtIiYdSn -EPCjjvbdPIAXyAZB -EPCjjvbdZoOIeEzK -DoDLKvbdmJETqUrB -DoCjjvbdOFDtIiKd -DnbkKvbdqvolDIxq -DnbjjvbdmgFYNNfy -DncLKvbdieLHUoAO -EPCkKvbdDnbkLWcE -DoCjjvbdmJETpuSB -DncLKvbdiiegjNXr -EPDKjvbdZQldiMeR -EOcKjvbdZHXEAPTJ -EObkKvbdWHwvXfxz -DnbkKvbdxUleRZLn -DnbkKvbdtvNxKQsA -DoDKjvbdOStWHEuQ -DnbkKvbdsBellHLZ -DoDKjvbdsCFllGkZ -EPDKjvbdjhGlGGOL -DncKjvbdxxJKBoyk -DncKjvbdrXPkcJYq -DoCkKvbduVnXipsA -DoDKjvbdjKGHjMwr -DoDKjvbdbBWEfPpX -EOcKjvbdznoqEcMY -DoCkKvbdySnJMqbH -DoCjjvbdlrZVZsDi -EPDLKvbdKfFgbApu -DoDLKvbdZRMdiNFR -EObjjvbdpeceUWAh -EObkKvbdRotHKFcw -DncKjvbdiZuFkpmf -DoDKjvbdnGdwmNgZ -DoDKjvbdMoxRVnGs -DoDLKvbdiVZeXRtb -EOcKjvbdGAoRYizm -DoDKjvbdJJdAJpGd -DoDKjvbdwMvANEFN -DnbjjvbdaaWFFpQX -DnbjjvbdqlzKZMIJ -EPDLKvbdxnShXsJD -DncLKvbdMfcPlotk -DncLKvbdURRPVUhN -DnbkKvbdHgGzZXxH -EOcLKvbdYlRctOMN -DncKjvbdnHEwlnGy -DoDKjvbdlYsSTZGt -EOcKjvbdZxcjNcLr -EObjjvbdmttyjjSG -EObkKvbdffLynHHA -DnbkKvbdmpZxvLZC -DncLKvbdBhjakJGK -DoCkKvbdpstHSRkU -EPDLKvbdiLddOVCy -EOcKjvbdxUleQyLn -EPCkKvbdTukpKTaR -EOcLKvbdjvXOECYX -EObjjvbdRWnEDLgc -EObkKvbdbhljLGWx -EPCkKvbdZoOJEdyj -DnbkKvbdqrVKnLAm -DoDKjvbdVAbRTRRy -DnbkKvbdhfjDZWKV -EOcLKvbdkWXOECYX -DnbkKvbdYTLaMsnx -EObjjvbdZRNFImFR -DncLKvbdCWzdIdpW -EOcLKvbdpyPIGqDx -DoDLKvbdiCOcFWpq -EPCjjvbdhtzFXSUb -Dnbjjvbdlqxtyrci -DoCkKvbdiZtelROG -EPCkKvbdVUNUFkvK -DnbkKvbdNddUJJLE -DoCkKvbdNdctIhjd -DnbkKvbdcyyQYZQb -EObkKvbdQmYByNtz -DoDLKvbdVrNxBeMD -EPCjjvbdCTBCsevr -DncLKvbdtSrTYyeD -DnbjjvbdRyigsDWA -DncLKvbdJYUBglQp -DoDKjvbdSPsfiedX -DoCkKvbdADRxKZiQ -EPDLKvbdrEFJPmvB -DnbjjvbdvAcyTOdh -EOcKjvbdaMjasUmH -DoDKjvbdZjSgogBf -DnbkKvbdnGeXmOGy -DnbjjvbdMgComPuL -EPCkKvbdxKvcgzzG -DncKjvbdwtldpyMO -DoDKjvbdbhlikGXY -EPCkKvbdpyPIHREY -DoDLKvbdkClLRHUg -EPDKjvbdqFdFUWBI -EOcLKvbdkxrqrxgU -DoDLKvbdTvLoitAq -DoCjjvbdJuuFcdfi -EPCjjvbdrykpTAhO -EPCjjvbdiZuFkqNf -EObjjvbdEuxpQNKF -EPCjjvbdGGKSOJUR -EPCkKvbdcyxowxqC -DnbjjvbdjhGkeemk -EPDKjvbdijGIJmYS -DnbkKvbdypnliKXA -EOcKjvbdRadFLhyL -EPCjjvbdxwiKCPyk -DoCkKvbdfILVqnQg -DoDLKvbdkNCLzEgP -DoCkKvbdGKdrbglu -DnbkKvbdJcJcRJcY -DoDLKvbdIwsahMRQ -DnbkKvbdNddUIhjd -EPCkKvbdJuuGDdgJ -EPDLKvbdjKGHjMwr -EObkKvbdGdKvKCJj -DncKjvbdNUrqkNAX -DoDLKvbdTqQoVVHm -DoDKjvbdNddTiIkE -EPCkKvbduaEZTPFI -DnbjjvbdFWYopMie -EObjjvbdyXhiaozL -EPCjjvbdhaoDFWpq -DncKjvbdJJdAKQHE -DoDKjvbdegkVrOQg -DnbjjvbdwuMdqYlO -EPCkKvbdLKaHvAJy -DoDKjvbdRbEFLiYk -DoDKjvbdSxLMNzjx -DnbkKvbdGKdsChMu -DncKjvbdACrYJzJQ -DoCjjvbdbUafwkUI -DncKjvbdzjVPpDrt -DnbjjvbdFfKSOJTq -EPDKjvbdHffyyXxH -EOcLKvbdRkZFtgLT -EOcKjvbdXsMAmToY -EOcLKvbdNPwqWNfs -DoCjjvbdEuxpPljF -DncLKvbdjJfIJlxS -DoCjjvbdhgJbxuiu -EPCkKvbdrDdhpOWB -DnbkKvbdwWlBWAuu -EObjjvbdySmiMrCH -EPCjjvbduWOXjRTA -DncLKvbdRDbaPqES -EPCkKvbdjEkHVPAO -EPDLKvbddiiqvUzn -EPDKjvbdyYJKCPyk -DncKjvbdNeEThiKd -DncKjvbdrbGMlGkZ -EOcKjvbdOTTvHEuQ -EObjjvbdFyVUaEYC -EPCkKvbdbiMikFwY -EPDKjvbduaDxsPFI -DncLKvbdozmckYPA -DoDLKvbdVYgsykPO -DoCjjvbdQvnDbkgc -DncKjvbdZLrDtNkm -DoDKjvbdHfgZyYXg -DoDKjvbdauCGwkUI -DoDKjvbdmJDsqVSB -EOcKjvbdhgJbyWKV -EPCjjvbdrouoKDWG -DoDKjvbdQmYCYnUz -DoDLKvbdfHkVqmpg -DoCjjvbdZjShPfaf -DoCkKvbdIGfzYxYH -EPDKjvbdZRMeJNFR -EPCjjvbdRpTgKFdX -EPCkKvbdEYYMUUUM -DncLKvbdwuMdqZLn -EOcKjvbdmuVZkJqf -DncKjvbdhgJbyWJu -DnbjjvbdKVuFcdfi -EPCkKvbdRadElIxk -EPCkKvbdYlSDsmkm -DoDKjvbdhlFEOVDZ -DoCjjvbdIsZBSlwl -DoDKjvbdLAkGmCXq -DoDLKvbdqwQMCiYq -EPDKjvbdURROtuIN -DoCjjvbdpxoHgREY -DncKjvbdwXLaWAuu -EObjjvbdrpWPJcWG -EPDLKvbdmozYvLYb -EPCkKvbdMowpunGs -DnbkKvbdANHySvzY -DncLKvbdZyDinDLr -DoCjjvbdziuPpESt -EPDKjvbdiVZeXRuC -EPDLKvbdDncKkWbd -EOcLKvbdFVxopNJe -DncLKvbdACqxJzIp -DncKjvbdaMkCTUlg -DoCkKvbdhyuGMQnG -EObjjvbdbBWFFpPw -EObkKvbdTAEiICPE -DoDKjvbdbUagXjtI -DoDLKvbdGZUuAcwb -DoDKjvbdnGdwlmgZ -DoDLKvbdVBCRSpqy -DnbjjvbdfIKvRnRH -EObkKvbdaRebgsek -DnbjjvbdNVSrLNAX -EPDKjvbdrJAKEmPF -DnbkKvbdBdQBWKNG -DoCjjvbdePFTLUUS -EPCkKvbdRDcAoqDr -DncLKvbdrNZiyLhJ -DoCkKvbdLqwNZtpz -EPDLKvbdlqxtzTEJ -DnbkKvbdrRtjmkBN -EPCkKvbdZRMeJNEq -DnbkKvbdZsiJYdTO -EObjjvbdUtMtGLvK -EOcLKvbdnCJwYOnV -DncLKvbdUMWPAuni -EOcKjvbdJcJbpjDY -DoCkKvbdcImKLGXY -EObkKvbdYSlAmTnx -DncLKvbdCTBCtFvr -EObjjvbdqlyjYlIJ -DoCkKvbdmSZUzSci -DoDKjvbdjEjfuPAO -EPCjjvbdWfYzUAPT -DnbjjvbdzROmJJwA -EObjjvbdnQZyVjyC -DncKjvbdjAQGaPgK -EObkKvbdtTSTZZeD -DoDLKvbdZLrETnLm -DncKjvbdCDpAujNG -DncKjvbdUyHsykOn -EPDLKvbdeXystRez -EPCjjvbdlrZUyrci -EPDKjvbdwjvcgzzG -EPDKjvbdnHExNOGy -EOcKjvbdZLqdTmlN -EPCkKvbdEuxopMjF -EObjjvbdJYTaglRQ -EPCjjvbdrWpLbiZR -EPCjjvbdNxOuzcnU -DoDLKvbdijFhKNXr -DnbkKvbdKWVGEFHJ -DnbkKvbdKCicQjCx -DoCkKvbdcScLTdKB -EOcKjvbdKWUecdfi -DoCjjvbdiLeDmuDZ -DncKjvbdySnJNSCH -EPDLKvbdZshhyDrn -DnbkKvbdssSSxydc -EOcLKvbdqrUjnLBN -EPDKjvbdGdLWKCKK -EObjjvbdsQWPJbuf -DoDLKvbdJcKDRJcY -DoCjjvbdZoNiEeZj -DnbkKvbdGFjSOJTq -EPDLKvbdxxJKBozL -DoDKjvbdBraDUGXS -EPDKjvbdJbjCpicY -DoCjjvbdVqmwbEkc -EPDKjvbdijFhKMwr -EPDLKvbdrSVLNkBN -DoCkKvbdiUzEvquC -EPCjjvbdWIYVxGxz -DnbkKvbdZoOIdeZj -DncLKvbdZRMeJNEq -EObjjvbdZMSDtOMN -DnbjjvbdRWnDcLgc -DoDLKvbdmRxtzTDi -EOcKjvbdJmADygUa -EOcKjvbdxUmFQyMO -EOcLKvbdOTUWHEtp -DoDLKvbdZRNFJMeR -EOcLKvbdxmsHxShc -EPCkKvbdUxhTykPO -DoCkKvbdelfWfljL -EPDLKvbdFejSOJTq -EPCkKvbdKefIBaRV -DncKjvbddeOqbXDK -EOcKjvbdhlEcnUcZ -DoCkKvbdZtJJZETO -DnbjjvbdSPtHJfDw -DncLKvbdOFDtIhkE -EPDLKvbdFyVVAcwb -DoCjjvbdqTtGqqjt -EOcLKvbdyTOIlrCH -DnbjjvbdACrYKZiQ -DoDLKvbdvmWAMceN -DoDKjvbdLBLHNCYR -EPCkKvbdIxUCHlQp -EPDLKvbdQmXayNtz -DoCjjvbdKRZdoFme -DncLKvbdZoNiEdyj -DoDKjvbdqqtkOLBN -EPCkKvbdiZuFkpmf -DncKjvbdEPCjkXCd -DoDKjvbdbVBgXjsh -DoCjjvbdmRyUzSdJ -EObjjvbdMJCLpxAS -DoCjjvbdwWlBWAvV -EPDKjvbdNHCpMouL -DncKjvbdEOcLKwDE -DoCjjvbdwjvcgzzG -DnbkKvbdNGbpNPtk -DoDLKvbdZGwEAOri -EObjjvbdaRfDITfL -DoDKjvbdVvhwudEg -EPCjjvbdHgGyxwwg -DncKjvbdcJMikFwY -EObjjvbdwMvAMdEm -EOcKjvbduMYXBUAw -EPDLKvbdpfDeTuaI -DoDKjvbdssSSxzEc -DnbjjvbdjblLRHUg -EOcLKvbdVwIxWDeH -EPCkKvbdLGFgaaQu -EPDKjvbdBiKakIfK -DoDLKvbdEOcKjwDE -EOcKjvbddijRvUzn -DoCjjvbdmaivxPOV -DnbkKvbdMfcQNPuL -DncLKvbdZtIiZDsO -DoDLKvbdhlEcmuDZ -EOcKjvbdIGfzYxYH -DncLKvbdICLydzAD -EPDLKvbdMfcPmPuL -DnbjjvbdrRuKmjaN -DnbkKvbdbsDKscjB -DoCkKvbdhkddNtcZ -EOcLKvbdNQXqVnGs -DoDLKvbdrEFIonVa -DoCjjvbdQvnDcMID -EPCjjvbdjlalZeGo -EPCkKvbdjJfIKNYS -EObjjvbdREDBPqES -EPCjjvbdiZtfMRNf -DoDKjvbdADRxJyiQ -DncLKvbdYkqcsnMN -DncLKvbdZshiZDsO -DoDLKvbdRNXayNtz -DncLKvbdqcdiPmvB -EPCkKvbdrNZixlHi -EPCjjvbdwtmFRYlO -EObkKvbdJTZBTNXl -EOcLKvbdWRnXadkc -DoDLKvbdvwMBVaVu -DoDKjvbdlZSrTYgU -EPDLKvbdQcbaQRDr -DoCjjvbdhuZdvrUb -DnbkKvbdZxdKOClS -DncKjvbdJzoexEAN -EOcLKvbdQvmdDLhD -DncLKvbdunszpkPU -EOcKjvbdiZuGMQnG -DncKjvbdVZIUZkOn -DoDLKvbdkxsRsYgU -EPCjjvbdGQASwGey -DncKjvbdnBivwoNu -EPDLKvbdsBelkfjy -DoDLKvbdddoRbWbj -EPCjjvbdhancFXQq -EObkKvbdJvUfEEfi -EPDLKvbdIidAKPfd -DoDLKvbdxVMdpxkn -DoCjjvbdaNLCTVNH -DnbkKvbdZyDinDMS -DoDLKvbdrMzJyLhJ -EPDLKvbdyXhiaozL -DoCjjvbdGKeTDHlu -DncKjvbdwzIGFxFS -EObjjvbdJvUedEfi -DncLKvbdIjEAJpGd -DncKjvbdyTNiNRbH -EOcKjvbdidkGuPAO -DoDLKvbdkVvmcbXw -DoCjjvbdJYTbHkpp -DoDLKvbdFyVVBEYC -EPDLKvbdmoyyVjyC -EOcKjvbdcTDKtDjB -EPCjjvbdEvYpPmJe -DoCjjvbdCJLCKhej -DoCjjvbdSKxfUgLT -DoDLKvbdFjeTDINV -DncLKvbdEXxMUTtM -EOcKjvbdWRnXaeMD -DoCjjvbdrMzJyLgi -DoCkKvbdcSbkUEKB -DnbkKvbdyzeOSIIh -DncLKvbdpstGqrKt -EPDKjvbdCJLBkJGK -EOcLKvbdJcJcQjDY -EPDLKvbdbLLfPNcA -DnbjjvbdEASImZwX -DnbjjvbdtumwiqTA -DnbkKvbdxKvdHzyf -DoCjjvbdVwIxWDeH -DncLKvbdYzcFqjVy -EPDKjvbdqiAJeMoF -DoDLKvbdNQXqVmfs -EPDLKvbdFjdsChNV -DoCkKvbdOTUWGdtp -EOcKjvbdOEdUIiKd -EOcLKvbduaEZSoFI -EOcLKvbdxsNhlrBg -EObkKvbdcIlijfXY -DoDLKvbdLqvlytpz -DoDKjvbdIryBTNXl -EObjjvbdQwOECkhD -DoCjjvbdLFegaaQu -EObkKvbdFkFTChNV -DnbjjvbdyzeOSHiI -EObjjvbdLAkHNCYR -DnbkKvbdZyDimcMS -DncKjvbdkMbLzEgP -DnbjjvbdRbEEkhyL -EOcKjvbdLrXMzVQz -EOcKjvbdVBBqTRRy -EObjjvbdyNsHxTIc -EPCjjvbdMuTRkNAX -DoCkKvbdUaCQrprZ -EPCjjvbdjmCLydfo -DoCjjvbdFyVVAcxC -EPCjjvbdQvnDblID -DnbjjvbdLhbLqYAS -DncLKvbdFxuVBEYC -DncKjvbdGLFScIMu -DncKjvbdBvzcheQW -EPDLKvbdSPsfjFcw -DnbkKvbdsQWOibvG -DnbkKvbdaSGChTfL -EPDLKvbdjmBkzFGo -DoDLKvbdqAiFAWhE -EPDLKvbdkVwNcaww -DoCkKvbdKRZePGOF -EOcLKvbdJXtCIMRQ -EPCkKvbdaNLCTUmH -EPDLKvbdliDtRUrB -EOcLKvbdKfGHbApu -EObkKvbdDwwlTstM -DoDLKvbdmgExMmfy -EOcLKvbdKWUfEFHJ -EPCjjvbdkxrqrxft -DncLKvbdkClKqHUg -DoDKjvbdVqnXadlD -DoDLKvbdULvPBWPJ -DoDKjvbdUslsfMWK -EOcLKvbdJvVFdFGi -DncKjvbdiifHilxS -EPCkKvbdRaceMJYk -DoCkKvbddwytTrFz -EPDLKvbdYkrETnLm -DoCjjvbdiMEdOUby -DoCkKvbdxVMeQyLn -EPCkKvbdwuMdpxlO -EPDLKvbdNPxQumfs -DncKjvbdYpleJNEq -DncKjvbdTAEhhCPE -EOcLKvbdUGznLwVe -EOcKjvbdNPwpunHT -EPDLKvbdKaLHNBwq -EOcLKvbdFfKRmhtR -EObkKvbdYlRcsmlN -DoDLKvbdWSOXadlD -EOcLKvbdWWiXucdg -DoCkKvbdZsiIxcsO -DoDLKvbdbhlikFvx -EOcKjvbdtlYXAsaX -EOcLKvbdUtNTelVj -DoDKjvbdhaoDFXRR -DoDLKvbdEuxoomJe -DoDLKvbdEYYLtTsl -DncLKvbdbhmJkGWx -EPDLKvbdqwPkbhxq -DnbjjvbdlrYuZsEJ -DncLKvbdeKKSWUzn -DnbkKvbdyTNiNSCH -DncKjvbddwzTsqez -DncLKvbdTXkMNzjx -DoDKjvbdJmAEZgUa -DncKjvbdeEnqavbj -EPDLKvbdcJNJjfWx -DncLKvbdPyNAGsRj -DoCjjvbdLGGHbAqV -DncKjvbdddoRbWcK -DoDLKvbdZjTHogBf -EPDLKvbdRkZFuHKs -EOcLKvbdEuyPoljF -EPDKjvbdEYYMTtUM -DncKjvbdDxXlTssl -DnbkKvbdQvmcblID -EObkKvbdjmBkydgP -DoCkKvbdOAJTUKSA -DncKjvbdhgJbxvJu -DoDKjvbdVvhxVceH -DoCkKvbdjvXODaww -EPDKjvbdemFvflik -DoDKjvbdkCkkRGtg -DoCjjvbdDigjVxKA -DncLKvbdLAjgNCYR -EPDKjvbdbUbGwkTh -EObjjvbdmuUzLJrG -DnbjjvbdmgFXlnGy -DoCkKvbdFxttaDwb -EPCjjvbdJcKDRKCx -DoCkKvbdpfDeUWAh -EPDLKvbdADSYJyhp -DoCjjvbdHkazmvqL -DnbkKvbduLxWaUBX -EPCkKvbdQdCaPpdS -EOcLKvbdZdwfzhIb -EPDKjvbdKWUeceGi -EPDKjvbdSCDeMJZL -DoDKjvbdyOShYShc -EObjjvbdliEURVSB -DncLKvbdmgEwlnGy -DnbkKvbdsBemMHKy -DoDKjvbdYzcGSJvZ -EObkKvbdGcjvKBjK -EOcLKvbdJuuGDdgJ -EPCjjvbdOStWGeUp -EOcLKvbdGLEsChMu -EOcLKvbdeATqNYJf -DncLKvbdxxIjCQZk -EObkKvbddZyQXyQb -DoDKjvbdVBCRTRRy -EPCjjvbduDDVWuoP -EOcKjvbdVZHtZkOn -EPCjjvbdZQmEhmFR -DnbkKvbdZyDimcLr -EPDLKvbdjblKqHVH -EOcLKvbdZtIiZDsO -DnbkKvbdRWmcbkhD -EPCjjvbddneSjtTr -DoCkKvbdZQmFJMdq -DoDLKvbdLFegbBRV -EOcKjvbdSwkMNzjx -DoCjjvbdFjeTDHlu -EPCjjvbdtSqrxydc -DncLKvbdSPtHKFcw -DncLKvbdyYJJapZk -EOcKjvbddxZssrFz -EObjjvbdfekzOGgA -EPDKjvbdrylQSaHn -DnbjjvbdZisHofbG -EObjjvbdrbGNMHKy -DnbkKvbdLBKfmBxR -DncKjvbdACqxJyhp -DncLKvbddijRutzn -EPDLKvbdMpYRVmfs -DncLKvbdmttzKiqf -DnbkKvbdZnmhdeZj -EPCkKvbdjKFgjNYS -DnbjjvbdxnTHxShc -EPCjjvbdlZTSTYgU -DoCjjvbdqlyjYkgi -EObkKvbdxVMeQyMO -EPDLKvbdSPtHJecw -EPDLKvbdrpWOibvG -EObkKvbdRbEFLhyL -DoCkKvbdYNqAYUvU -DoCkKvbdnCKXXnnV -EObkKvbdddoSBvbj -DncKjvbdNGcPlpUk -DnbkKvbdmajXXnmu -DoCjjvbdJXsbHlQp -DncLKvbdNGcPlouL -DoCkKvbdTAFJHaoE -EPCjjvbdnPyxvKyC -EPCkKvbdRyihTDWA -DncLKvbdQlxCZNtz -EObkKvbdJSyAsMwl -DoCjjvbdmttykJrG -EPCkKvbdfpBzwEXh -DoCjjvbdrzMQTBIO -EPDKjvbddZxowyRC -DncKjvbdaNKaruNH -DnbjjvbdaNKasVMg -DncKjvbdcbTNSATm -EPCkKvbdiLdcnVDZ -EObjjvbdYTLaMtOx -EOcKjvbdEASIlzWw -DnbjjvbdziuPodTU -EOcLKvbdqUUHRqkU -DnbkKvbdyNsHxSiD -EObjjvbdhkeDnUcZ -EOcKjvbdNHCpNQUk -EPDLKvbdIryBSmYM -DnbkKvbdfekynGgA -EOcLKvbdiHKCyWJu -EObkKvbdrMzKYlIJ -DoCjjvbdsZkoraIO -EOcKjvbdQccAoqES -DoCjjvbdtTRrxzFD -EPCjjvbdJXtBhMRQ -DnbjjvbdsBfNMHKy -DnbkKvbdeEnrBwCj -DoDLKvbdTfzmkvvF -DoCjjvbdCJLCLIej -DnbjjvbdNUrrLNAX -DoCkKvbdxsNiNRag -EPCjjvbdtbcUwVoP -DoDKjvbdaogHDkzd -DncKjvbdpedFTuaI -DnbjjvbdqYngfpdY -DncKjvbdbiNJkGWx -DoCjjvbdGckVjBij -EObkKvbdqceIomvB -EPDLKvbdFWZQQNJe -EObkKvbdrRtkOLAm -DncKjvbdDwwktUTl -EObkKvbdwNWAMceN -DncKjvbdZMSDtOLm -EObjjvbdTkvPAuni -DoDLKvbdUxhTykPO -EOcLKvbdVBCQsQqy -EPDKjvbdZshhxcrn -DnbjjvbdqdEiQOWB -DoDKjvbdkWWmdBww -DoDLKvbdzQoMhiwA -DnbjjvbdUGzmlXWF -DncKjvbdJTYaTMwl -DoDKjvbdGLFScHmV -DoDKjvbdrWpLcJZR -EOcKjvbdwNWAMcdm -EObkKvbdmfeYNOGy -EObkKvbdtcDUwVoP -DnbjjvbdiZuGMQmf -EObjjvbdfMewGmJk -DnbjjvbdANIZTWyx -DncKjvbdtTSSxydc -DnbkKvbdsBfMkfjy -DoDKjvbdSLYfUgKs -DoDLKvbdZisHogCG -EObkKvbdVTlsfMVj -DncKjvbddZyPwxpb -DncLKvbdAMhYsXZx -DncLKvbdxwhjCPzL -EOcKjvbdKRZeOeme -DoCkKvbdunszqLOt -EPDKjvbdZRMdiMdq -DnbjjvbdEuxpPljF -EPDLKvbdGGJrOJUR -EPDKjvbdVviXudEg -DnbjjvbdpfDeTvBI -DncLKvbdRadElJYk -EPDKjvbdaMjbSuMg -EPDLKvbdTAEhhCOd -DncLKvbdTIyiqABM -EPCkKvbdBsBDUFvr -DoCjjvbdcSbkUEJa -EObjjvbdCIjbKhfK -DoDKjvbdauCHXjsh -DoCkKvbdpyPHfqEY -EOcLKvbdDwxMUUUM -DnbjjvbdGFjRmiUR -DoDLKvbdbQGgELzd -EOcKjvbdGGJqnItR -EPCjjvbdxrnJNRag -DoDLKvbdbhmJkFwY -EPDKjvbddoFSkTtS -DncKjvbdNUsSKmAX -EPCjjvbdfelZmfgA -DoCkKvbdjKGIJlwr -EPDLKvbdJYTaglQp -EPCkKvbdVrOXbFMD -EPDKjvbdTpqPUuIN -EPCjjvbdGckViaij -DnbjjvbdczZQYYqC -DoDKjvbdMtrqkNAX -EObkKvbdaNKartmH -EPDKjvbdmSZUysDi -EOcLKvbdlhdURVSB -DncKjvbdWRnXbEkc -DncLKvbdLBKfmBwq -EPDKjvbdZdwfzhIb -EPCkKvbdhancFXRR -EObkKvbdaSFbgtGL -DncLKvbdJXsaglQp -DncLKvbdUsltFlVj -DoDKjvbdLBKfmBwq -EPCkKvbdnVVZjirG -EObjjvbdiZuFlROG -EObkKvbdwygeeweS -EPCkKvbdwjvcgzyf -DnbkKvbdssRsYzFD -DnbjjvbdxwiJaoyk -EPCjjvbdVhYWYHYz -DncKjvbdhzVFkpnG -DncLKvbdeJjSVtzn -DncLKvbdyYIjCPyk -EPDLKvbdJpzEoGNe -DncKjvbdnBiwXoNu -EOcKjvbdVrOYCElD -EObkKvbdLBKgNCXq -EPDKjvbdTlWPBVni -EPDKjvbdFxuVBDxC -DncKjvbdnHFXlnGy -EPCjjvbdYkrDtOMN -DoCkKvbdUWMPjTaR -DoCjjvbdjSziSjiz -DnbjjvbdeOdsKtUS -EPCkKvbdmfdwmOHZ -EObjjvbdtSrTYydc -DnbkKvbdRjxeuGkT -EObkKvbdKeehCApu -EOcLKvbdpxoIGqEY -DncKjvbdbLMGOnDA -EPCkKvbdEXwktUUM -EObkKvbdiUzFWqtb -DoCjjvbdiHKCyViu -EObkKvbdvwLaWAuu -DoDLKvbdiCPDEvqR -EOcKjvbdWXJXvEEg -DoCkKvbdqTtGrSLU -DnbkKvbdtbbuXWOo -EObjjvbdgGLzOGgA -DncKjvbdTlVoBWPJ -DoCkKvbdeEoRbWcK -DoCkKvbdkWWmdCXw -DncKjvbdehLWRmpg -EPCkKvbdjFLGtoAO -DoDKjvbdGLFScIMu -EObjjvbdrRtkOKaN -EPCkKvbdczZQYYqC -DnbjjvbdfHkVqnRH -EOcLKvbdtvNxKRTA -EPCkKvbdADSYJyiQ -EOcKjvbdmJETptrB -EOcLKvbdURQoUtgm -DoDLKvbdZMSDtOMN -EPCjjvbdFfJqnIsq -EOcKjvbdcJNKKfWx -DnbjjvbdkySqrxft -DncLKvbdJpyePFme -DncKjvbduCcVXWPP -EOcLKvbdxKvcgzzG -DoDLKvbdpfEEsvAh -EObkKvbdZyDjNblS -EPCjjvbdhbPDEwRR -EPDLKvbdTqQoUthN -DoDKjvbdxnSgxShc -DoCkKvbdcTCjscjB -DoCkKvbdOTUVfeVQ -DncKjvbdkMbMZeHP -DncLKvbdEvYpPmKF -DncLKvbdJTZBTNYM -EObjjvbdIHGyxxYH -EOcKjvbdraemLfkZ -EOcKjvbdMpYRVmgT -DncKjvbdxZgfFxEr -DnbkKvbdpxoIGpcx -EPCkKvbdkIGlGFnL -DoDKjvbdUslselVj -DnbjjvbdZnnJEdzK -DncLKvbdehLVrORH -DoCjjvbdySmhlqbH -DoDLKvbdADSXiyhp -DoDKjvbdZtJJZDrn -DoCjjvbdezvZEiUX -EOcLKvbdqTtHSRkU -EPDKjvbdVgxWXgYz -DoCjjvbdGZUuBDwb -DncLKvbdhzUekpnG -EPCjjvbdZxcinDMS -EPCkKvbdOFEThiLE -DoDLKvbdhzVGLqOG -EObjjvbdkySqryGt -DoDKjvbdmpZyVkYb -DoCjjvbdnHFYMnGy -EObkKvbdRotGjFcw -EPDKjvbdjblKpgUg -EOcLKvbdWWiYVdFH -DoDLKvbdtbcVXVoP -EPDLKvbdqqtkOLAm -EPDLKvbdmRyUysEJ -DnbkKvbdxnShYTJD -DoDLKvbdGKeSbhMu -DoCkKvbdjuwODbXw -DncLKvbdaMkCSuMg -DncKjvbdtbcUvuno -DnbjjvbdiVZeWqtb -DoCjjvbdLBKgNBxR -EObkKvbdlZSqrxgU -EPCkKvbdULunaWOi -DoCkKvbdwzIGGYEr -EPCkKvbdnHExNOHZ -EObjjvbdpyOgfqEY -DnbjjvbdpedFUWAh -DoCkKvbdhaoDFXQq -DnbkKvbdYqMdhleR -DnbjjvbdsZkpSaIO -EPDKjvbdJcJbqJbx -EObjjvbdehKvRmqH -EOcLKvbdmIdURVSB -EPDLKvbdvOszqKoU -EOcLKvbdZisIQGbG -DnbjjvbdFyVUaDwb -EPCjjvbdTAEiIBoE -DncLKvbdRkZFtgKs -EOcLKvbdzdynzdyp -EOcLKvbdnUtykKSG -DoDKjvbdZQmEhldq -EOcKjvbdnBjWxOnV -EPCkKvbdqvpLbiZR -DoDKjvbdrykosBIO -EOcLKvbdBiKbLJGK -EPDLKvbdBvzciFPv -DoCjjvbdemFwGlik -EPDLKvbdqTsfqqjt -DncLKvbdptUHRrLU -EObkKvbdbUbGwjsh -DoCkKvbdHffyyXwg -EPCjjvbdgGMZnHHA -EPDKjvbdFejRmhsq -DoCkKvbdQvmdCkgc -DncLKvbdyNsHxShc -DoCkKvbdrDeIpOWB -EObkKvbdYzcGRiuy -DncKjvbdMowqWNfs -DoDLKvbdbsDLTcjB -EPCkKvbdZQmEiNEq -EObjjvbdNPwqWNfs -DoDLKvbddeOrBwDK -EObkKvbdrNZixkgi -DoDKjvbdtlXvaUBX -DncKjvbdtunYKRTA -EOcLKvbdfSBWzkcP -EObjjvbdVAbRTQrZ -DnbjjvbdcJNKLFvx -DncKjvbdssRsYyeD -DoDLKvbdqTsgSSLU -EPCkKvbdMowqVmgT -DoCjjvbdDnbjjvbd -EPCkKvbdlhdURUqa -DncKjvbdqrVLOLAm -DoDKjvbdNHDQNQUk -EPCkKvbdXsLaMtOx -EPCkKvbdRosgJfDw -DncLKvbdKVuFcdgJ -DoCjjvbdGGKRnItR -DnbkKvbdeEnrCWcK -EPDLKvbdlZSrTYgU -EPCjjvbdtSrTYyeD -DoCkKvbdZisHpHCG -DnbjjvbdbrbkUDia -DnbkKvbdhficYvKV -EOcKjvbdsBfMlHLZ -DoDKjvbdBdQBVjNG -DnbkKvbdTvLpKUAq -DoCjjvbdzaAPGgCM -EObjjvbdiVZeWrVC -EPCjjvbdZshiYcrn -EObjjvbdRNXbYnUz -EObkKvbdBcpBWJlf -DncKjvbdtbcUvuoP -DoCkKvbdmfeXmNgZ -DncLKvbdbPfgELzd -DncKjvbdZshiYdSn -EObkKvbdDjHiuwjA -DoDLKvbdfIKvRnRH -DnbjjvbdiLeDmtcZ -DoDLKvbdQwNcblID -EObkKvbdmRyUzSdJ -DnbkKvbdnHFYMnHZ -EOcLKvbdfHjvSORH -DncLKvbdlZSrSyHU -EObkKvbdtSrSxzFD -EObjjvbdZyEKNcLr -EObkKvbdRkYeuHLT -EOcKjvbdTkuoAuoJ -DnbjjvbdEPDKkXCd -EPCkKvbdnCJwXoOV -EObjjvbdxrmiMqbH -DoDLKvbdRaceMIyL -EPDKjvbdRosgKFdX -DoCjjvbdzoQQeDMY -DncKjvbdZyEJmcMS -DoDLKvbdOFDshiLE -EPDKjvbdSQUGiedX -EPCkKvbdTIyjRAAl -EObjjvbdxUmFRYkn -DncKjvbdmpZyWLYb -DoCkKvbdygZMANEw -DoDLKvbdhuZeWquC -EObkKvbdFyUuAcxC -DoCkKvbdiCPCeXQq -DncKjvbdsCFlkfkZ -EPCjjvbdNPwpvOHT -DoCjjvbdSPtGjGDw -DncLKvbdAMhZSvyx -EPCkKvbdWXJYWDdg -EPDKjvbdaogHDkzd -DoDLKvbdRosgKFcw -EPDLKvbdrRtjnKaN -DncKjvbdvBEZSoEh -DoDLKvbdmajXYOmu -DnbjjvbdfNFwHMjL -EPCkKvbdezuyEhtX -DoCkKvbdHffzZYYH -EPCkKvbdvAdYsOdh -EPCjjvbdhlFDnVDZ -DncKjvbdbiNKLFvx -DoDLKvbdMIalQxAS -EPDLKvbdGckWKBjK -EOcKjvbdvOszqKnt -DoCkKvbdraelkgKy -EOcKjvbdMgComPtk -DoDKjvbdOSsugFVQ -DoCkKvbdyNrhYTJD -EPCjjvbduDDVXWOo -DncLKvbdiCPDFXRR -DncLKvbdiGibyWKV -EOcLKvbdfNGXHNJk -EObkKvbdBhjakIej -EPCjjvbdxmrhXriD -DnbkKvbdJbibqKDY -DnbkKvbdSCDdkhyL -EPCjjvbdGFirOIsq -DnbkKvbdKVtfDeHJ -DoDKjvbdGKdrbhMu -DncLKvbdZLrETmlN -EObjjvbdjuvmcbXw -DncKjvbdQdDApRDr -EObkKvbdeATplwjG -DoCjjvbdZMRdUNkm -DoDKjvbdTqQoVVIN -EPCkKvbdOTTufeVQ -EPDKjvbdWRnXadlD -DncKjvbdZsiJYdSn -DoCkKvbdZLrDsnMN -DoDKjvbdEKHiuwjA -EPDLKvbdnBivxPOV -EPCjjvbdddnrCWbj -EOcLKvbdpssgSRkU -EPCjjvbdzdzOzdyp -EPCjjvbdZxcinClS -DoDKjvbdvAcySoEh -DnbjjvbdWHxWXfxz -DoDLKvbdCWzdJEpW -DoCjjvbdehLVqnRH -EObjjvbdEXxLstTl -EObjjvbdkMakzEfo -EPCkKvbdKaKflbXq -EPDLKvbdijFgjNYS -DoCjjvbdZsiIxdSn -DncKjvbdeATqNXif -DncLKvbdzoPqEblY -EObkKvbdLAjgNBwq -DncKjvbdUxgsykPO -DoDKjvbdaogGckzd -DncKjvbdFVxpPmJe -EOcLKvbdZLrDtNlN -EObjjvbdYNqAXuWU -DoCkKvbdEYYLstUM -EObjjvbdeFPSBwDK -DncKjvbdePEsKssr -DncKjvbdZjTHogCG -EPCkKvbdjKGHjNXr -DoCkKvbdNrtVgFVQ -DncLKvbdaMjaruNH -DoDLKvbdwjwEHzzG -EOcLKvbdTIzJqABM -DoDLKvbdliETqVSB -DoDLKvbdNrtVfdtp -DnbjjvbdZxdKNcMS -EPDLKvbdbUafxKsh -DoCkKvbdVrNxCFMD -DoCkKvbdxZgefYEr -DoDKjvbdYTLaMsoY -DncKjvbdeAURMwif -EOcLKvbdNGcPmQVL -EPDKjvbdqceJQOVa -DncKjvbdRotHKGEX -DoCjjvbdwNWAMdFN -EPCkKvbdFyVVAcwb -DoDKjvbdmozYvKyC -DncKjvbdSPsgJecw -EPDKjvbdZtJJYcrn -EOcLKvbdGckWKCJj -DoDKjvbdkxrrSxft -DnbjjvbdRbDdlIxk -DncKjvbdyYJJbPyk -DnbjjvbdhgJcYvKV -EObkKvbdjcLjqHUg -EObkKvbdhgJbyWKV -EObjjvbdrovPKCvG -DoCkKvbdbBVdepQX -DnbjjvbdUVkojTaR -EPCkKvbdbUagYLUI -DoDLKvbdptUGqqkU -DoCjjvbdyTNhlqag -DncKjvbdEYXlTssl -EPCkKvbdXFxytAOs -EOcLKvbdNdctIhkE -EPDLKvbdkDMLRGuH -EPDLKvbdDihJuxKA -EOcLKvbdrafNMHLZ -EPDLKvbdbKlFoODA -DncLKvbdZLqcsnMN -DnbjjvbdznpRFDLx -DncLKvbdziuQPdSt -EPCkKvbdbrcKsdKB -DncLKvbdaMkCTUmH -EPDLKvbdYkqdUOLm -DoDKjvbdjhHLfGNk -DoDLKvbdZMSDtNlN -DnbjjvbdZjTHpHCG -DoCkKvbdemFvgNKL -DncKjvbdrRtkOLAm -EPCjjvbdyNrhXsIc -EObjjvbdgPazwDwh -DoDKjvbdRDcAoqDr -DoDKjvbdvvkaWBWV -EOcKjvbdZRMdiNFR -EPCkKvbddePRawCj -DoCkKvbdHDjvKBij -DnbkKvbdZirgpGbG -EOcKjvbdhbPCeWqR -DnbkKvbdNPwpvNfs -EPCjjvbdZirhPfbG -EOcLKvbdIGgZxwxH -EPCkKvbdrykosBHn -DoDKjvbdxnTIYShc -DnbjjvbdNsTvGduQ -DncLKvbdBcpAvJlf -DnbjjvbdlqxtysDi -DoCkKvbdOEdTiIjd -DncKjvbdfHkVrOQg -DoCkKvbdiHKDYvKV -DoDKjvbdOTUVgFUp -EObkKvbdaaVdfPow -DncLKvbdZHXEAPTJ -DnbkKvbdkIHLefNk -DnbkKvbdjEjfuPAO -EObjjvbdhtzFWqtb -DoDLKvbdSQTfjFdX -DncLKvbdHEKvKBjK -DncLKvbdHDkVjBij -EPDKjvbdRpTfiecw -DnbkKvbdiBncEwQq -EObkKvbdRadEkhyL -EPCkKvbdezvYdiTw -EOcKjvbdaMjasUlg -EObkKvbdczZPwyQb -EPCjjvbdTvMQJtAq -EPCjjvbdJXtCIMRQ -DoDLKvbdkDMKpftg -EPCjjvbdiVZdvqtb -DnbkKvbdtunXipsA -DoCjjvbdjJehKNYS -DnbjjvbdJvUeceHJ -DoDKjvbdKRZdoFme -DncLKvbdJcKCpjCx -EPDKjvbdmbKXYPNu -DnbjjvbdkIHLeenL -EPDLKvbdNPxQunHT -DnbjjvbdUtMtFkvK -EPDLKvbdsPvPJcWG -EObjjvbdMRvlzVQz -DoCkKvbdsQWOjDWG -DnbjjvbdXGZZtAPT -DnbjjvbdunszpkOt -DncKjvbdxZhFfXdr -DnbjjvbdRzJgsCvA -EPCkKvbdSCDdlIxk -EPDKjvbdREDBPqES -DnbjjvbdBvzdIdov -DoDLKvbdSLYetfkT -EObjjvbdKWVGDeHJ -DoCjjvbduDDUvuoP -EOcLKvbdWIYWXgYz -DoCjjvbdbhmJjfWx -EPDKjvbdIxUCILpp -EOcLKvbdeXzTsrFz -EPDLKvbdsBemLgKy -EPCkKvbdzjVPpDrt -DncLKvbdZyDimbkr -DnbjjvbdRNYBxmtz -EPCkKvbdvOszpkPU -EObkKvbdSQTfiedX -DncKjvbdZRNFIldq -DoDKjvbdbhlijfXY -EObkKvbdEzspeLcJ -EPCjjvbdKCicRJbx -EOcLKvbdOYOuzcnU -DoCkKvbdhkddOVDZ -DncKjvbdIxTahMQp -EOcLKvbdwygeexFS -EPCjjvbdKRZeOeme -EPDLKvbdgPazvcxI -DncKjvbdfNFwHMik -EOcLKvbdtkwvaTaX -EObjjvbdURQnuVIN -DnbkKvbdiBncFWqR -DncLKvbdaMkCStmH -EPCjjvbdZjSgogBf -DoDKjvbdMowpvOGs -EPCkKvbdsrqsZZdc -DnbkKvbdRpTfjFdX -EOcKjvbdaMjbTVMg -EOcLKvbdmgExMmfy -DncKjvbdCJLCLJGK -DoCkKvbdNeDshiKd -DnbkKvbdGLFSbgmV -EObjjvbdMtrrLNAX -EOcKjvbdpedEsvAh -DoDKjvbdcyxpXyQb -EObkKvbdxZhGGXdr -DoCkKvbdEztQdlCi -EObkKvbdijFgilxS -EPDLKvbdkHgMFenL -EOcLKvbdlrYtysDi -DncLKvbdjcLjpgVH -DoCjjvbdnVVZkKRf -EPDKjvbdFeirNhsq -DnbkKvbdjblLRGuH -EPDLKvbdtTSTZZeD -DoDKjvbdVBCRTRSZ -DncKjvbdTYLMNzjx -DoCkKvbdEztQdkcJ -EObjjvbdpfEFTuaI -DncLKvbdYSlAmUPY -DncKjvbdYpldiNFR -DncLKvbdWXIwvDdg -DoDLKvbdeXyssrFz -DncLKvbdqdEhonVa -EOcLKvbdNQYRVnGs -EObjjvbdRpTgKGDw -DoDKjvbdauCHXkUI -DoDLKvbdhficZViu -DnbjjvbdzoPpeCkx -DoCkKvbdJYTaglQp -DoDKjvbdnBiwYPNu -EOcLKvbdMJCLqYAS -EPCjjvbdYkrDsnMN -EPCkKvbdehKvRmqH -EObkKvbdVqmxCFMD -DncKjvbdrDeJPmvB -EPDLKvbdzaAOgHCM -EOcLKvbdNPxQvNfs -DncLKvbdFVxopMie -EPDKjvbdgQBzwDwh -EObjjvbdTfzmkvvF -EPDLKvbdUaBprpqy -DoCkKvbdnGdxNOGy -DncLKvbdfIKurOQg -EPCkKvbdKDJcRKCx -EPCjjvbdmJEUQuSB -DncLKvbdrafNMGjy -EOcKjvbdZxdKNbkr -DnbkKvbdJmADzGuB -EPCjjvbdQvmdDMID -DnbkKvbdemGWgNJk -DncKjvbdyfxlAMdw -EPCkKvbddtAUATNW -DncKjvbdcasMrATm -DoDKjvbdVhYVxHYz -EPCjjvbdhyuFkpmf -DoDLKvbdcbTMrATm -EPCkKvbdILaznXRL -DoDKjvbdRDbaQQcr -DncKjvbdijFgjNYS -EObkKvbdIMBznXRL -EPCjjvbdxVNEpyLn -DncLKvbdYkqctOMN -EOcKjvbdxrmiNSBg -EPDLKvbdtTRsYzFD -EOcKjvbdzjVQQDsU -EPCjjvbdZMRctNlN -DncKjvbdXrlAmTnx -EOcLKvbdbPgGdLzd -EPDLKvbdFfJqmhsq -EOcLKvbdyzdmqgiI -DoCjjvbduCbtvuoP -DncLKvbdNGcPlpVL -EPCjjvbdGBOpyJzm -EPCkKvbdRDcBPpcr -EOcLKvbdRbEFLhyL -EOcLKvbdePFTLTsr -EObkKvbdcTCkUDjB -DnbkKvbdrWokbhxq -DncLKvbdqUTfrRjt -EOcLKvbdRyihTDWA -EObkKvbdpxnhHQdY -DnbkKvbdrSUkOKaN -DoCjjvbdIGgZyYXg -DoDLKvbdMowqWNfs -DoDKjvbdUxgtZkOn -EObjjvbdUtNTelVj -EObjjvbdlqxtyrdJ -DncKjvbdkVvnDbYX -EObjjvbdePFTKssr -DoCkKvbdMuSrLNAX -EOcLKvbdnQZyWLZC -DoDKjvbdhgJcYujV -DoDLKvbdaMjasVMg -EPCjjvbdcScLUDia -DnbjjvbdbKkeoNcA -DnbkKvbdfpBzwEYI -DoCkKvbdBhkBjhej -DnbjjvbdkDMLRGtg -EObkKvbdeATqNXjG -EOcKjvbdFkFSbglu -DnbjjvbdznpQdcMY -DncLKvbdIidAJpHE -DoCjjvbdLZQirzuG -DnbjjvbdzjUopDrt -EOcLKvbdnUuZjiqf -DoDLKvbdwyhFeweS -DoCkKvbdaoffckzd -EObkKvbdzaAPGgCM -EObkKvbdEzspdkcJ -DnbjjvbdDjHiuxKA -DnbkKvbdVqmxBdlD -EOcLKvbdrJAKFMne -EOcKjvbdZjSgofbG -EPCjjvbdfMfWgNJk -DoCkKvbdTukpJsaR -DoCjjvbdySmiNSBg -DnbkKvbdzGyMANFX -EObkKvbduWNxKQsA -DoDKjvbdRkZFuHLT -DncLKvbdbKlGOmcA -DncLKvbdyNsIXsJD -DnbkKvbdMpXqWNfs -DoCkKvbdHEKujBjK -DncLKvbdDxXktTsl -EPCkKvbdACrYJyiQ -EOcKjvbdqUUHSRjt -DoDLKvbdOFDsiJLE -EObkKvbdrbGMlGjy -DoCjjvbdjblKpgUg -EPCkKvbdiHJcYujV -EPDKjvbdrDeJQNvB -EPDLKvbdbrbkTdJa -DnbkKvbdNeDtIhkE -DnbkKvbdcJNKKevx -EPCjjvbdxVNFQxkn -EObjjvbdhyuGLqOG -EOcKjvbdrafMkfkZ -EObkKvbdRkYetgKs -DnbjjvbdUWLoitBR -DoCjjvbdQvmcblID -EOcLKvbdDoDLLXCd -DncLKvbdzRPMiJwA -DoCkKvbdsZkoraHn -DoDKjvbdkHgMGFnL -EObkKvbdrbFmMGjy -DnbkKvbdRWnDbkhD -EPDKjvbdJbicRJbx -DncKjvbdGZUuAcwb -DoCjjvbdmfdwmNfy -DoDKjvbdBdQAujNG -EPDLKvbdwWlAuaVu -DncLKvbdxmrgxSiD -DoCkKvbdUsmUFkuj -EOcKjvbdcTDKsdKB -DnbjjvbdjcLkRHVH -DoDKjvbdbiMijewY -EPCjjvbdPyNAHSrK -DnbjjvbdFkErcINV -EPDKjvbdZQldhmFR -EPDKjvbdTJZjRABM -EOcKjvbdKaKgMaxR -DoCjjvbdwzHefYEr -DoDLKvbdDwxLtUUM -DoCkKvbdfILWRmpg -DoCkKvbdRyihTCvA -DoDKjvbdSQUGjFcw -DoCjjvbdEYXktUTl -EPCjjvbdoznEKxPA -EPDLKvbdSiZiqABM -EObkKvbdVUNUFkuj -DncKjvbdMfbpNQUk -DncLKvbdEvYopMie -DnbjjvbdMowpvNgT -DncLKvbdKjaHvAKZ -DoDKjvbdqmZjZMIJ -EObjjvbdGcjuibJj -DoDLKvbduLwvaTaX -DoCkKvbdHgHZyYYH -EObjjvbdEOcKjwCd -EPCjjvbdGckWKCKK -EObkKvbdEuyQQMie -DnbjjvbdHgGzZYYH -EObjjvbdVUMsekuj -EObkKvbdWWiXucdg -EPDKjvbdRWnECkgc -EPDKjvbdxZgefYFS -DnbkKvbdEuyPomKF -EPCjjvbddePSCXCj -DoDKjvbdUsltFlWK -DnbkKvbdbsDKtEJa -EObkKvbdmoyyWLZC -DoDKjvbdSCDeMJZL -DnbkKvbdwtleRYkn -EPDLKvbdJpzEnfNe -DncKjvbdZisIQGbG -DoCjjvbdiUzEwRtb -DncKjvbdrounicVf -DncLKvbdmIdURVRa -DoDKjvbdYSlBNUPY -DnbjjvbdKDKDQibx -DoDLKvbdnCJvwoOV -EPDKjvbdgFlZmfgA -DoDKjvbdTukojTaR -DnbjjvbdVAbQsQqy -EOcLKvbdtAHRIABS -DnbjjvbdmbJvwnnV -EOcKjvbdvBDxrneI -DnbjjvbdeJirWUzn -DnbjjvbdKeegaaQu -DnbjjvbdzQoMiKXA -DnbjjvbdxwiJbPyk -EPDLKvbdKNADzHUa -DoCkKvbdANHyTXZx -EObkKvbdxLXDgzyf -EOcKjvbdpxoHgQcx -DncKjvbdLBKflawq -EPDKjvbdhanbdwQq -DnbkKvbdEASIlyvw -EPCkKvbdwzHfGYEr -EOcLKvbdqZPHgQdY -EPDKjvbdqTtGqqjt -DoCjjvbdDxXksssl -DoDKjvbdQlwayNtz -EOcKjvbdTvLoitAq -DnbkKvbdirzhsKiz -EPDKjvbdyzeORghh -DncLKvbdmJDsqVRa -DncLKvbdKefICAqV -EOcLKvbdZnmheFZj -DoDKjvbdIxUCILpp -DncLKvbdxsOIlrBg -DoCkKvbdiVZdvqtb -EPDLKvbdbBWEfQPw -EObkKvbdsCFllGkZ -EObkKvbdNdctIiKd -EObjjvbdozmcjwoA -EPDLKvbdlhdTqUqa -EOcKjvbdbUagYKsh -DnbkKvbdJpydoGOF -DnbkKvbdnGeYMmfy -DncKjvbdtlXwBUAw -DncKjvbdqiAJdlne -EPCkKvbdMIakqYAS -DnbkKvbdCWzchdov -EObkKvbdelewHNJk -EPCjjvbdFpASvgFy -DoDLKvbdVrNxCFMD -DnbkKvbdMpYQvNfs -EPCkKvbdEObkKwDE -EPDLKvbdHDjuibJj -EPCjjvbdKaLHMaxR -DoDKjvbdakLfOmcA -EPDLKvbdMgDQNQVL -DoCjjvbdEvYpQNKF -EPDKjvbdrEEhpOVa -EOcLKvbdOFDsiIjd -DncKjvbdtTSTYyeD -EObjjvbdQvnDblHc -DoDKjvbdVrNwbElD -EPCjjvbdZMRdUNkm -DoCjjvbdhfibxujV -DnbjjvbdYpmFJMeR -DncLKvbdDihKVxKA -DoCjjvbdrNZjYkgi -EOcLKvbdYqNFImEq -DoDLKvbdJbjDQjCx -DoDKjvbdwygefXeS -DncLKvbdUyHsykPO -DncLKvbdJSyBTMxM -EPDKjvbdcImKKfXY -EPCjjvbddndsLTtS -DoDLKvbdEASIlzWw -EObjjvbdrylQTAgn -DoDKjvbdFkFTChMu -DncLKvbdUaCQrprZ -DnbjjvbdOFEThhjd -EObjjvbdlYsRrxgU -EPCkKvbdnGeYNOGy -DoDKjvbdwygefYEr -DoCjjvbdGckViajK -DoDKjvbdSZjITDWA -EObjjvbdkWXNdCXw -EPCkKvbdKjaIWAJy -EObkKvbdKkBIWAKZ -DoDLKvbdptTfqrLU -DoDKjvbdPxmAGsRj -EObkKvbdTvMPitBR -EPCkKvbdegjvSOQg -DoDKjvbdwNWANEEm -EOcLKvbdRNXbYmtz -DoDKjvbdEOcKjwDE -EPDLKvbdfMfXHMik -DoCkKvbdWHwvXfxz -EPCjjvbdelfWgNKL -EPCjjvbdqcdiQOVa -DncKjvbdkyTSTZGt -DoCkKvbdbAueFpPw -EOcKjvbdQwNdClHc -DnbjjvbdxmsIYSiD -EPDKjvbdCTAbtFwS -DncLKvbdJpzFOeme -EOcKjvbdiZuGLqOG -DncKjvbdKaLHMaxR -EPDLKvbdbiMjLFvx -EPCkKvbdjvXODaxX -EOcLKvbdOAJSsirA -EPDKjvbdqYnhHQdY -DoCkKvbdDwwlTtUM -DnbkKvbdRjxfVHKs -EObjjvbdzjUpPcrt -EOcLKvbdeUAUATNW -EObkKvbdQlwaxmtz -EObkKvbdEXxLtUUM -EObkKvbdYkrETmkm -DoCkKvbdxmsHwsIc -DoDKjvbdzjUoocrt -EPDKjvbdqGEFTuaI -EPCjjvbdbiMjLGXY -EPDKjvbdfpBzwEXh -DncKjvbdZeYGzhJC -DoCjjvbdFkEsCglu -DncKjvbdOFDshhjd -DncKjvbdZMRcsnMN -EPCkKvbdrEFJPnVa -DoCkKvbdcyyPxYpb -EPDLKvbdijGIKMwr -DoCjjvbdbAudepQX -DncLKvbdFejSOItR -EOcKjvbdSLZGVHLT -EPDKjvbdMJBkpxAS -DncKjvbdJXsaglQp -DnbkKvbdjcMLRHVH -DoCkKvbdFjeTCgmV -DnbjjvbdqUTfrRkU -DnbjjvbdznoqFCkx -EObkKvbdVqnYBeLc -DoDLKvbdaMjbTVMg -DoCkKvbdSQUHKFdX -DoCjjvbdrDdhomua -DncLKvbdcTCjsdJa -DoCkKvbdsCFlkgKy -EPCkKvbdmbKWwnmu -DoCjjvbdZQmFImEq -EPCkKvbdyXiKCPzL -EOcLKvbdKQzEnenF -EPCjjvbdrbGNMGjy -EPDKjvbdgGMZnHHA -EOcLKvbdfHjuqnRH -EOcLKvbdFeirNiUR -DoCjjvbduaEZSoFI -DncKjvbdbAudfPow -DoCkKvbdbiMikFwY -DoDLKvbdcyxpYYqC -DnbjjvbdpxoHfpdY -DncKjvbdqUTgRqjt -DoDKjvbdcImKKfWx -DnbjjvbdmfeYNNfy -EPCjjvbdIjEAJofd -EObjjvbdLBKgNCXq -EObjjvbduLxWaUAw -DnbjjvbdJTZBTNXl -DoCkKvbduaDyTOeI -EOcLKvbdUyIUZkPO -EOcLKvbddePRawCj -EPDKjvbdhbObeWqR -EOcKjvbdBdQAvJmG -EOcKjvbdkVwODaww -DnbkKvbdUVkoisaR -DnbkKvbdMoxQvNfs -EObjjvbdCJKbLIfK -DncKjvbdYpmFJNEq -DoCjjvbdjKFhKMxS -DnbjjvbdZLrEUNlN -EPDKjvbdwuNFRZMO -EObjjvbdjuvnECXw -EPCkKvbdlZTSTZGt -DoCjjvbdsQVoJcWG -DncLKvbdmJETqVSB -DnbjjvbdjggLfGOL -EObjjvbdxwiKBpZk -DoDLKvbdKDKCpjDY -EPCjjvbdzRPNIjXA -DoCkKvbdkaMoNALA -EPCkKvbdjvWnDaww -EPCkKvbdSBcdkiZL -DnbkKvbdbUbHXkUI -EOcKjvbdURROtuHm -DncLKvbdJmAEZgVB -DoDLKvbdDxYLsssl -DncKjvbdWRnXadlD -EPCjjvbdADSXiyhp -DnbkKvbdNGcPlouL -DnbjjvbdBsAcTevr -EObjjvbdWWhwvDeH -EOcLKvbdbUafxKsh -DoCkKvbdtcCuXWOo -EOcKjvbdbKkennDA -EPDLKvbdGcjujBjK -DoDKjvbdRWmdDMHc -EPCkKvbdmSZUyrdJ -DoCkKvbdLZRKSztf -DncKjvbdZQmFJNFR -EPDLKvbdjhGkefNk -DncKjvbdeATpmYJf -EPCkKvbdDjHivXjA -EObjjvbdFyVVBEXb -DncKjvbdIHHZxxXg -DnbjjvbdMoxQvNfs -EObjjvbdlYsRsZGt -EOcLKvbdZHWdAPTJ -DoCkKvbdoznDjwoA -EOcLKvbdYpmEiNEq -EOcLKvbdfMfWgNJk -DnbjjvbdjlalZeGo -EPDLKvbdVgxVxGxz -DoDKjvbdZRMdiMeR -DnbkKvbdNsUVgFUp -EObjjvbdNGcPmPuL -EPDLKvbdrSUjnKaN -DncKjvbdMgDPmQUk -DoDLKvbdRkZGUfkT -EOcLKvbdpxoIGqDx -DoCkKvbdVwIxVcdg -DoDKjvbdZQmFIleR -EPDKjvbdZshiZDrn -EPCkKvbdFWZPpNJe -DnbkKvbdcImKKfXY -DoCkKvbdiVZeWqtb -EPCkKvbdkxsSSyHU -EObkKvbdcSbkTdKB -EOcKjvbdFxttaEYC -EPCkKvbdhtzEwSVC -EOcKjvbdLAjgNBwq -DoCkKvbdZisHofbG -DoDLKvbdIsYaTNYM -EPDLKvbdADRxJzIp -DoDKjvbdTkuoAvOi -EOcLKvbdZRMeJMdq -EPDLKvbdWWiXvDdg -DnbjjvbdbsDKscjB -DnbkKvbdtlXwBUBX -EPCjjvbdmgFXlmgZ -EObkKvbdjmBlZeGo -EObkKvbdmgEwmOGy -DoCjjvbdtlXwBTaX -EPDKjvbdSiZiqABM -EPDLKvbdEXxMTssl -EPCkKvbdRWmccLhD -DncLKvbdrWpMDJZR -EPDLKvbdelfXGlik -EOcLKvbdFjdsChNV -EPCkKvbdVUMtFkuj -DoDLKvbdtkxXBUBX -DncLKvbdMgDQNPtk -DnbkKvbdMJCMQxAS -EOcLKvbduWOYJpsA -EPCjjvbdZxcimcMS -DoDKjvbdqrUjmkAm -EObjjvbdRzJgsCvA -EOcLKvbdiBoDFXRR -EPCjjvbdSPtHKFcw -DncKjvbdbBVeGPpX -DnbjjvbdRotGiedX -DoDKjvbdIHGzZYXg -DnbjjvbdiGjCyViu -EPCjjvbdSxKkmzjx -EPCjjvbdmajWwoOV -DnbjjvbdmbKWxPNu -EObkKvbdCTBCsfXS -DoCjjvbdKQzEnfOF -EPCkKvbddijRutzn -EObkKvbdFjeTCgmV -DnbjjvbdURQnuUhN -DnbkKvbdiCOcFXRR -EObkKvbdJutfEEfi -DncLKvbdhtydwRuC -DoCjjvbdcTCjsdJa -DnbjjvbdzoPqEcMY -DoDLKvbdSCDdlJZL -EOcKjvbdlhctQuSB -EPDKjvbdOFETiJKd -EObkKvbddZyQYZQb -EOcLKvbdrMyjYlHi -DoDLKvbdqrVLOLBN -DncKjvbdyNsHwriD -EObkKvbdQvnECkgc -DnbkKvbdznopeClY -DoCkKvbdCJLBjiGK -EOcLKvbdauCGxKtI -EPCjjvbdeFOrCWcK -DncLKvbdcSbjtDia -DnbkKvbdKWVGDdgJ -EPDKjvbdrDdiQNua -DncLKvbdqTtGqrKt -DoDKjvbdjJfIKMwr -DoCkKvbdkxsSTZHU -EObkKvbdFejSNhtR -DoDKjvbdnCKWxOmu -DoDLKvbdvBDySneI -DncKjvbddZxpXyRC -EPDKjvbddwzTsqez -DoDLKvbdLFfIBaQu -DncLKvbdwzHeewdr -DncLKvbdOFEUJJKd -DoDLKvbdEvZQQMie -EPDLKvbdWHxVwgYz -DoCjjvbdiGjCxujV -EPDKjvbdrovPJcWG -DoDLKvbdZxcjOCkr -DnbjjvbdRzJgsDWA -DoDLKvbdiZuGLpnG -DncLKvbdTukoitBR -DnbkKvbdnBiwXnnV -DoDKjvbdBvzdIdov -EObkKvbdRWnECkhD -DoCkKvbdRbDeMJZL -DncKjvbdiGjDYujV -EPCkKvbdNdctIiLE -EPCjjvbdKWUfDdfi -EOcKjvbdkIGlGGNk -EPDKjvbdGZVVBDxC -EObkKvbdXsMBNUOx -EObjjvbdANHxrvyx -EPDKjvbdZtIhyDrn -DoCkKvbdRWmdCkgc -EObkKvbdffLynGgA -DoDKjvbdIxTahMQp -DncKjvbdKQzFPGOF -DoDKjvbduDCtwWOo -EOcKjvbdnCJvxOmu -DoCjjvbdEJgivXjA -DncKjvbdemGWgMjL -DncKjvbdCDpBVjMf -DncLKvbdmoyxukZC -EOcLKvbdtkwwBTaX -DoCkKvbdLqwMzUpz -DncLKvbdqFdFUWBI -EPDLKvbdZyEJmblS -EOcKjvbdEzsqFMCi -DoCkKvbdcarmSATm -DncLKvbdFfJqmiTq -DncLKvbdKQzEoGNe -DoCjjvbdUaCRTRSZ -EOcLKvbdqZOhGqEY -DoCkKvbdZisIQGaf -DoCkKvbdeFOrBwCj -DoDLKvbdmIctQtqa -EObkKvbdxVMdqYkn -DncKjvbdwygfFxFS -DoCkKvbdRWnEDLhD -EOcKjvbdmRyUyrci -DoCkKvbdWXIwvDeH -EPDLKvbdRXODcLgc -DoDLKvbdBsBDUGWr -EOcKjvbdEvYopNJe -DoCjjvbdBvzdIdov -DoCkKvbdyzeNrIJI -EObkKvbdCJKbKhej -EObjjvbdQccBQQcr -DnbkKvbdxZgeewdr -DoDKjvbdqcdhpNua -DoCjjvbdeJjSVtzn -DncKjvbddneTKssr -DnbjjvbdZxcjNbkr -EPCjjvbdZisIPfaf -EPCkKvbdkyTRrxft -DncKjvbdVwIxVcdg -DncLKvbdIxTagkpp -EPCjjvbdbrbjtEJa -DncKjvbdkCkjqHUg -DoCkKvbdUxgsyjnn -EObjjvbdUaCRSprZ -DnbjjvbdMJCLpxAS -DncLKvbdliEUQuRa -EPCkKvbdANHxrvzY -EPCjjvbdeAURMwjG -EPDKjvbdZoOIeEzK -DoDKjvbdmuVZkJqf -DncLKvbdaNLCTUlg -DoCkKvbdnQZxvLYb -DncLKvbdhficZWJu -DncKjvbdatbHYLUI -DoCjjvbddndrjtUS -EOcLKvbdsBfMkgKy -DnbjjvbdBiKakIfK -DnbjjvbdSQTfjFcw -DoCjjvbdmoyxvKyC -DoCkKvbdGcjuibKK -DnbkKvbdZQldiMeR -EObkKvbdqquKnKaN -DoCjjvbdZRNEhldq -EPCjjvbdBiKbLJFj -EPCjjvbdyXhjCPyk -DncLKvbdtTSSxzEc -EPCjjvbdnCJwXnmu -DoDLKvbdbBWEfQPw -EOcLKvbdemGXHNKL -DoDLKvbdmfdxMnGy -EOcLKvbdTqQntthN -EOcLKvbdrMyixlIJ -EOcLKvbdVUMselWK -EOcLKvbdBvzchePv -DoCjjvbdbVCHXjsh -EPCjjvbdZRMdhleR -EOcLKvbdhbObeXRR -EPCkKvbdFWZPpMie -DncLKvbdXFyZtAOs -DnbkKvbdTqQoUuHm -EPCjjvbdCSaDUFvr -DoDKjvbdQZNAHTSK -EOcLKvbdmoyyVkZC -DoCkKvbdGLErbhMu -EOcLKvbdtvNwjRTA -EObkKvbdFjdsDINV -EOcKjvbdeOdsLUUS -DncKjvbdMtrrKmAX -EObkKvbdBsBCtGWr -EOcLKvbdVBCRTRSZ -DoDKjvbdKQydoFme -DncLKvbdnHFXmOGy -DnbkKvbdGAnqYizm -EOcLKvbdjlakzEfo -EOcKjvbdegkWSOQg -DoCjjvbdtkwwAsaX -EPCkKvbdeKKSWUzn -EObjjvbdrRtjnLBN -EPCkKvbdeATqMxKG -DnbkKvbdZMRdTmlN -DoDKjvbdNsUWGeVQ -EObjjvbdyXiKBpZk -EOcLKvbdJKEAJpHE -DoDKjvbdzQoNJJwA -DoCkKvbdwygeewdr -EObkKvbdsCGNMHKy -EOcLKvbdlhdUQuRa -EObjjvbdyNsHwsIc -DoDLKvbdWRnXbFLc -EObjjvbduCcUvvPP -EOcLKvbdrEEhonWB -EPCjjvbdRjyFtgKs -EPCjjvbdkNCLzFGo -DoCkKvbdRDbaPpcr -DoDKjvbdQdCaQQdS -DncKjvbdwyhFexFS -EPDLKvbdBhjakJGK -EPDKjvbdaNKaruMg -EObkKvbdzQnliJwA -DnbjjvbdptTfrSLU -DoDKjvbdFWZPpNJe -EObkKvbdZxcjOCkr -DoDKjvbdehLWRnQg -EOcLKvbdcSbkUEKB -EObjjvbdbUafxLTh -EObkKvbdBcpAvKNG -DoDLKvbdySmiNSBg -DncLKvbdmIdUQuRa -EPCkKvbduDDUvuoP -DoDLKvbdMtrqjmAX -DoDLKvbdVZHtZkOn -EOcLKvbdiZuGLpnG -EOcKjvbdxmrgxShc -DoCjjvbdMpYQvNfs -EOcKjvbdCIkCKiFj -EPDLKvbdaaVdepPw -EObkKvbdXFyZtAOs -EPDLKvbdbKlFnnDA -DncLKvbdqGEFTuaI -EOcKjvbdqFcdsvAh -EPCkKvbdcSbkUDjB -DncKjvbdrJAJeMoF -EObjjvbdZMRdUNkm -DncKjvbdCEPaVjNG -DnbjjvbdptUHSSLU -EPCkKvbdUtNTekuj -DoCkKvbdVqmwadlD -EObjjvbdCIkBjiFj -EOcLKvbdbVCGwkUI -EObjjvbdFfKSNiTq -EPDKjvbdJXtCHlRQ -EPDKjvbdTvMQJtBR -EPCjjvbdZMRdTnLm -EPCjjvbdemGXGljL -EPDKjvbdxmsHxTJD -EOcKjvbdiVZdvrVC -DnbkKvbdmSZUzSdJ -EPCkKvbdUaCRTRSZ -DncLKvbdoAKztIDn -EObjjvbdHffyyXxH -EPCkKvbdaMjbStmH -EObjjvbdZyDinDMS -DoDKjvbdjlbMZdgP -DncKjvbdQwOEDMHc -DncLKvbdGLFSbgmV -EPCkKvbdjvXOECXw -DoCkKvbdSBceLhyL -DoDLKvbdEvYpPmKF -EOcKjvbdrbFlkfkZ -EPDKjvbdTvMQJsaR -DncLKvbdjvXNcaxX -DnbkKvbdijGIKNXr -EOcLKvbdiHJcZViu -DoCjjvbdlqxuZsDi -DnbkKvbdhuZeXRtb -DncLKvbdACqxJzJQ -EObjjvbdjlbLydgP -EPDKjvbdxZgefXdr -EOcKjvbdSCEFLiYk -EObjjvbdKefICApu -EPDKjvbdjlbLyeGo -DncLKvbdbAvEepQX -EPCkKvbdrSVKnLAm -DncLKvbdZjTHpHBf -DnbkKvbdCWzdIdov -DoDLKvbdxUmFQyLn -DnbkKvbdxVNFRYkn -DoCkKvbdZisHpHCG -DoDKjvbdwkXEHzzG -DoCjjvbdSPtHJedX -EOcLKvbdBiLBkIej -DoCkKvbdiLdcnVCy -DnbkKvbdlhcsqUqa -EPCjjvbdwzIGFxEr -EPCkKvbdySmiNRag -DncLKvbdHEKujCKK -EPDLKvbddeOrCXDK -DoDLKvbdNGbolpUk -EOcLKvbdtlYXBTaX -EOcLKvbdqwQLcIyR -EObjjvbdIrxaSlxM -EObjjvbdbrcKtEKB -EOcKjvbdpxngfqDx -DoDLKvbdKfFhCApu -DoDLKvbdJvUfEEfi -DncKjvbdsQWOibuf -DoCjjvbdHgGyxxXg -DoCkKvbdZHWdAPTJ -DncKjvbdauBgYLTh -DoDLKvbdJYUCIMRQ -DncKjvbdbrbjtEJa -DnbjjvbdemFwHNJk -DnbkKvbdBvzcheQW -EPCkKvbdJqZePGNe -EPCkKvbdSKxeuGkT -EPDLKvbdIryBTMxM -EPCjjvbdwWlAuaVu -EOcLKvbdyTOJNRbH -EPCjjvbdQvmdClID -DnbjjvbdyTOJMqag -DncKjvbdrXQMDJYq -EPCkKvbdGdLVjBij -EOcLKvbdjJehJmXr -DnbkKvbdCJKakJGK -DoCjjvbdLrWlzUpz -EPCkKvbdhzVFlRNf -DoCjjvbdRDcApRES -EObkKvbdzROmJKXA -DncKjvbdxUmFRYlO -EPCkKvbdURQoVVIN -EPDLKvbdVZHtZkPO -DnbkKvbdatafwjsh -EObjjvbdNrtWGdtp -DoDLKvbdBiLCLJFj -EOcKjvbdmgFXmOHZ -EObjjvbdZRMeImEq -DoCjjvbdiMEdNtcZ -DnbjjvbdgFkzNfgA -DnbjjvbdGKdsDHmV -DncLKvbdIxUBhMRQ -DoDLKvbdjSzhrjiz -DoDLKvbdpyPHgRDx -DoDLKvbdqYoIGpdY -DoCkKvbdUQqPUuHm -EPCkKvbdBraDTfXS -DncKjvbdNrtWGeUp -DncKjvbdJqZdnenF -EPCjjvbdCWzdIePv -DoDKjvbdrXPlDIxq -EPDKjvbdauBgYLUI -EPCjjvbdQmXbYnUz -DoCjjvbdGGJqnJUR -EPDLKvbdkVvnEBww -EPCjjvbdTukoitBR -DoCjjvbdRkZFtgLT -DoDKjvbdEuyPpMie -EPCkKvbdSLYfUgLT -DnbjjvbdIwtBglQp -DnbkKvbdznpQeDMY -EOcKjvbdznpRFCkx -EPDLKvbdtumwjQsA -DoDLKvbdBhjajiGK -DoDKjvbdhlFDmuDZ -DnbkKvbdqquKnKaN -DncLKvbdMowqVmfs -EOcKjvbdqrUjnLAm -EObjjvbdqwQMDIyR -EPDKjvbdnCKXYPOV -DnbkKvbdHffyyXxH -DoCjjvbdlZSrTZGt -DoDLKvbdznpRFDMY -EPDKjvbdWWiXvDdg -DoDKjvbdRWnEClID -DnbjjvbdJcKCqKDY -EPDKjvbdJbjDQicY -DncLKvbdhaoDEwRR -DncLKvbdvAdZSoEh -DncLKvbdeEnrCWbj -DoDKjvbdVvhwvDeH -EOcKjvbdVAapsQqy -EPCkKvbdxnTIYSiD -EPCkKvbdrouoJbuf -EObjjvbdePEsKtUS -EPDLKvbdirziSkJz -DnbjjvbdhaoCdvqR -EPCkKvbdGZVVAdYC -DncKjvbdtbbuWuoP -DoCkKvbdLFehCBRV -DoDKjvbdLZRJrztf -EObkKvbdkHflGFmk -EOcKjvbdJYUCIMQp -EPDLKvbduCcVXWOo -EPCkKvbdptTfqqkU -DoDKjvbdGQATWgGZ -DncKjvbdEztQeMCi -EObkKvbdZtJJZETO -DoCjjvbdZsiIyETO -EObkKvbddndrjstS -EOcLKvbddeOqbXDK -DnbkKvbdCTBDUGXS -EPDKjvbdQlwayOUz -EPCjjvbdlqyUzTEJ -DoDLKvbdhtydvrUb -EOcKjvbdlZTSSyGt -EOcKjvbdmJDtQuSB -DnbjjvbdtSqsZZeD -DoDLKvbdUaBpsRSZ -EPDKjvbdLGFhBaRV -DnbkKvbdSBcdkhxk -DoCjjvbdDoDKkXDE -DoDKjvbdwyhFfYFS -EPDKjvbdOEctJIjd -EPCjjvbdEObjkWcE -EPDLKvbdhtzEvquC -EObkKvbdZjShQHCG -EPCjjvbdmIctQuRa -EPCkKvbdVwIwucdg -EOcLKvbdADRxJzJQ -EOcLKvbdWWiXvEEg -EPCjjvbdTAFIhBoE -EPDLKvbdZLqdTnMN -EPDLKvbdZQldhmEq -EOcKjvbdLLBIWAJy -DncLKvbdrMzKYlIJ -EPCjjvbdzitoodSt -EPDLKvbdLFehCAqV -DoCkKvbdrMyiyMHi -EPDKjvbdkVvmcaxX -EOcKjvbdmpZxvKxb -EPCkKvbdliDtRUrB -DncLKvbdkxsRsYft -EPDKjvbdTqROuVHm -EPCjjvbdSQTgJedX -EPDLKvbdHlBznXRL -DncKjvbdQdDBQRDr -EPDLKvbdliDsqVRa -DoDKjvbdjgflFfOL -EPDKjvbdeEoSCWbj -DnbkKvbdfSBWzkcP -EObkKvbdmIcspuSB -EPCjjvbdvAdZTPEh -DoCkKvbdIGfyxwxH -DnbjjvbdWWiYWDeH -EObkKvbdZQleImFR -DncLKvbdQwNdCkgc -EOcLKvbdQdDBPqES -DnbjjvbdrpWPJbuf -DoCkKvbdTulQKTaR -DoDLKvbdeUAUASlv -EPCjjvbdZQmFJNEq -DncLKvbdVBBqSqSZ -EOcKjvbdqceJPmvB -DncLKvbdZtIiYcrn -EOcLKvbdJSxaSmYM -DoCkKvbdqqtkOLBN -EObkKvbdgFkymfgA -DnbjjvbdVqmwadlD -DncLKvbdsBfNMGkZ -EPDKjvbdEPDKjwCd -EObjjvbdHDjvKBjK -DncLKvbdCTAbsevr -EObkKvbdFxuUaEXb -DoCjjvbdcyyQYZQb -EObjjvbdZsiIxdSn -EPDLKvbdZQmEhmEq -DnbkKvbdxnTIXriD -DncKjvbdfHkVrORH -EOcKjvbdddoSCXDK -EPCkKvbdhanbdvpq -EOcKjvbdRyihTDWA -DnbjjvbdajkeoODA -EOcLKvbdlhdTpuSB -EPDLKvbdhgJbxuiu -EPCjjvbdnHFXmNgZ -EPCkKvbdpecdsvAh -DnbkKvbdVZIUZjnn -DncKjvbdbAvFGPpX -DnbjjvbdkMalZeHP -EOcLKvbdYSlAmUOx -DoCjjvbdHDkWKCKK -EPDLKvbdaRecHsek -EPCjjvbdJXsagkqQ -EObjjvbdRMwbZNtz -EPCkKvbdrbGMlHKy -DncLKvbdKfGICApu -EPDLKvbdUtNTfLvK -EPCkKvbdMJCMRYAS -EOcLKvbdCJKbLJFj -DoDKjvbdfpBzvcxI -EObkKvbdYpldhmFR -EOcLKvbdSPsfiecw -DoCjjvbdHEKvKCKK -DnbjjvbdUGzmkwVe -DnbjjvbdfMfXGmJk -DnbkKvbdZoOIeEyj -EObkKvbdZnmhdeZj -EOcKjvbdTkuoBVoJ -EPCjjvbdGKdsChMu -DoDLKvbdJYTahLpp -EPCjjvbdbhmJkFwY -DoDLKvbdkIHMGGOL -EPDKjvbdZsiIxdSn -EPCjjvbdMgCpNQUk -DncLKvbdjblKqGtg -DncLKvbdOYOuzdNt -DncKjvbdTvMPjTaR -EPDLKvbdiiehKNXr -DoCjjvbdZdxGzghb -DoDLKvbdeOdsKssr -DoDLKvbddBsMrAUN -DoCkKvbdxxIjBozL -DoDKjvbddoErkUTr -EOcLKvbdwzIFeweS -DoDLKvbdREDBQRES -EObkKvbdhlEdOUby -DoCjjvbdNPxRWNgT -DoDLKvbdZLqctNlN -EObjjvbdbUbHXkUI -DnbkKvbdhtydwSVC -EPDKjvbdeUAUASmW -EObjjvbdhgKDYvJu -EOcLKvbdZnmhddyj -DoDLKvbdUVlQKUAq -DoDKjvbdDihJvXjA -DnbkKvbdZLrETmlN -EPCjjvbdxxJJbQZk -EPCkKvbdrounjDVf -DoCjjvbddiirVtzn -DoDLKvbdmttyjiqf -DncKjvbdfHjvSNpg -DoCjjvbdmRxuZsEJ -DoCkKvbdjAQGaQGj -DncLKvbdnVUzLJrG -EPCjjvbdLAjgNCXq -DoDLKvbdqmZixlHi -EPDLKvbdVUMsekvK -EPDKjvbdrMzKZMIJ -EPCkKvbdKDKCpicY -EOcLKvbdwtmEqZMO -EPDLKvbdmgFXlnGy -DncKjvbdyTNhlqbH -DncKjvbdnHFXlnHZ -DoDLKvbdTqROuUgm -DoDKjvbdRMwbZOUz -EPDKjvbdRMwbYmtz -DoDKjvbdZnmheEyj -EPCkKvbdbBWEfPow -DoDKjvbdQwNccLgc -DoCjjvbdhtzFWqtb -DoDKjvbdRotHKGEX -DncKjvbdZsiJZETO -EObjjvbdaNKbStlg -DoCkKvbdsZlQTAhO -EObjjvbdjhGlGGNk -EObkKvbdQdDBQQcr -DoDKjvbdMtrrLNAX -EPCjjvbdRotHKGDw -EPCjjvbdqZPIGqDx -EOcLKvbdiGicZViu -DnbjjvbdJvVGEFGi -DoCkKvbdKNAEZfuB -EPDLKvbdLZRJrzuG -DnbkKvbdhytfLpnG -EPDKjvbdRbEEkiYk -EOcLKvbdcJMjLFvx -DncKjvbdFfKRnItR -DoDLKvbdegjurORH -DnbjjvbdEPDKjvcE -EPCjjvbdkHgLeenL -DncLKvbdZnmheEzK -DncKjvbdZjSgpHCG -DoCkKvbdbBVdeoow -DoDLKvbdZQmEhleR -EPDLKvbdpxoHfpcx -EPCkKvbdSPtGjGEX -DncKjvbdRbDeLhxk -EObkKvbdrpWOibvG -DnbjjvbdfIKurNpg -EPDLKvbdZyEKNbkr -DoDLKvbdwXMAvBWV -EOcLKvbdWWiXvDdg -EOcKjvbdelfWfljL -DncLKvbdjuvnEBxX -DncLKvbdliDspuRa -EObjjvbdVTlsekuj -DoCjjvbderAvzlDP -EPDKjvbdNeDtIhkE -Dnbjjvbddwyssqez -EObkKvbdGGKRnItR -DoCkKvbdHbLzEzAD -EPCkKvbdTvMPjUBR -EObjjvbdTAEiIBoE -DoCjjvbdRjxfUgLT -DnbkKvbdnUuZkKRf -EPDLKvbdjmBkydgP -EObkKvbdNeDsiIjd -DncKjvbdrounjDWG -DnbjjvbdrWokbhxq -DoDLKvbdsPvPKDWG -DncKjvbdZdwfzgiC -EOcLKvbdZLqdUNlN -DoCjjvbdkDMLRHVH -EPDKjvbdirziSjiz -EObkKvbduDDUvuno -DoDLKvbdkHgMGGOL -DncLKvbdhkdcmuCy -EObkKvbdCJLCLIej -DnbkKvbdeFPRawCj -DncKjvbdsQVoKDVf -EPDLKvbdRXNccLhD -EObkKvbdFxttaDxC -EObkKvbdqrVKnKaN -EPCjjvbddoEsKtUS -EObjjvbdzaAOffbM -DoCjjvbdWSNxBdlD -EPCjjvbdqlzKYlIJ -EOcLKvbdQdDApRDr -DncKjvbdczZPwyRC -EOcLKvbdtlXwBUBX -EOcKjvbdmgFYNOGy -DoCjjvbdKVtfEFGi -EObkKvbdrNZjZLgi -EOcKjvbdliETqVSB -EOcKjvbdbVBgXkUI -DncLKvbdNHDPmPtk -DnbjjvbdjlakzEfo -EOcKjvbdVUNTfLvK -EPDKjvbdTXjkmzjx -DncLKvbdrylQTBIO -EPCkKvbdJpzEoGOF -DncKjvbdFeiqmhtR -DncLKvbdZnnJFFZj -EPDLKvbdlrZUzTEJ -EPDKjvbdLFfICBRV -EPCjjvbdcyxpXyRC -DoDLKvbdQdCaQQcr -DncLKvbdZsiJZDsO -EObjjvbdzQoNIjXA -DncLKvbdVqmxBdlD -DoDKjvbdRjxfUgLT -EObjjvbdWIYVxHYz -DoCkKvbdIGfzZXxH -DncKjvbdxsNhlqag -DoDKjvbdFWYopNJe -EPDKjvbdVBCRTRSZ -EPDKjvbdwyhFfXeS -DoCjjvbdziuPocsU -EPDKjvbdYSkaNUPY -EObjjvbdznopdcLx -EOcLKvbduMYWaUBX -EPDKjvbdnPzZWKyC -EObkKvbdZxcimbkr -EObkKvbdBhjbKiFj -EOcLKvbdjuwNdBww -EPDKjvbdmbKWxOnV -DoCkKvbdnHFYNNgZ -DoDLKvbdrMzKYkhJ -EOcLKvbdqdFIpNvB -EPDKjvbdcScKtDjB -EOcLKvbdygZMAMdw -EOcLKvbdsCGNLgLZ -DoDLKvbdaMkBsUlg -DncKjvbdlZSqsYft -DnbkKvbdnVUzLKRf -DoCkKvbdnHFXlmgZ -EPDKjvbdxZgfGYFS -DoCkKvbdxwiKCPzL -DnbkKvbdBcpAvKMf -DoCjjvbddZyQXxpb -DncLKvbdzQnmIjXA -EPDKjvbdFWZQQMjF -DnbjjvbdMgDQMpUk -DncLKvbdOFDtIiKd -DoDKjvbdKNAEZfta -EOcKjvbdhyuGMQmf -DnbjjvbdZnmhdeZj -DncLKvbdhbOcFXRR -EOcLKvbdvBEZSoEh -EOcKjvbdYkrEUOLm -EPCkKvbdNrtWGduQ -EPDKjvbdZjSgpHCG -EObkKvbdyzdmrHhh -DoDLKvbdznpQdblY -DncLKvbdZshhyDrn -DnbkKvbdjvWmdCYX -EOcLKvbdAMgxsWzY -DnbjjvbdwzIGGXdr -EPDKjvbdrNZixlIJ -DoDKjvbdsQWOicVf -DoDKjvbdjuvmdBxX -EObkKvbdzHZMANFX -DoDLKvbddjJqutzn -EOcKjvbdwNWAMdFN -DnbkKvbdTqRPUtgm -EOcKjvbdVYgtZkOn -EPDKjvbdNGcPlotk -DnbjjvbdJbjDRJcY -EPDLKvbdZtJIyESn -DoDKjvbdtcCuXVoP -DoCjjvbdZMSETmlN -DoCjjvbdgGLzNfgA -EPDKjvbdxKvcgzyf -EObjjvbdrMzKZMIJ -DncLKvbdMoxQumfs -EPCjjvbdbhlikFvx -DoDLKvbdRadFMJYk -DnbjjvbdHgGzYxYH -EObjjvbdVZHtZkOn -DnbkKvbdakLfPNcA -DoCjjvbdmfeXmOGy -DoDLKvbdrRtjmjaN -DnbjjvbdUxgsyjoO -DnbjjvbdbhlikFvx -EPDLKvbdRbEFMJYk -EOcKjvbdRXNcblHc -DnbkKvbdqmZixlHi -DoCjjvbdrzLpTBIO -DoCjjvbdILaznXRL -EPDLKvbdRjyGVGkT -EOcLKvbdehKurOQg -DncLKvbdYkrDsnLm -DoDKjvbdZisHpGaf -DncLKvbdpyPIGpcx -EOcLKvbdijFhKNYS -EOcKjvbdMuSqkNAX -EObjjvbdajlFnnDA -EOcKjvbduLxXAsaX -DnbjjvbdiiegjMwr -EPCkKvbdiMEdNuCy -EPCkKvbdqTtHSRkU -EPCkKvbdIryBTNXl -DncLKvbdFjdrcHlu -EPDKjvbdZoOIeFZj -DncLKvbdcbTNSATm -DoDKjvbddePSCWcK -DoDKjvbdZsiJYcsO -DoDKjvbdpeceTuaI -EOcKjvbdjhHMGFnL -EOcLKvbdjcLkRGtg -DnbjjvbdCJLCKiFj -EPDLKvbdZsiIxdSn -EObkKvbdVTlsekvK -EObkKvbdCTAcTewS -DoDLKvbdOYOuzcnU -EPCkKvbdiUydwRuC -DncLKvbdGQATXGey -EPDLKvbdDjIJvXjA -DncKjvbdpxoIHQdY -EObkKvbdZMSDsmkm -EOcLKvbdBvzchdov -EOcLKvbdKRZeOenF -DnbkKvbdwzIFfYEr -DnbkKvbdSKyFuHKs -EPDKjvbddCSlrATm -EObkKvbdSCDeMIyL -EPCjjvbdsCFllGjy -DnbjjvbdHgGyyYYH -DncKjvbdjKFgilwr -DncLKvbdEvYoomJe -EObkKvbdlhdTpuSB -DoDKjvbdWWiYVceH -DnbjjvbdLGGHbBQu -EObkKvbdOXoVzcnU -DnbjjvbdbsCjtDjB -DnbjjvbdQwOECkhD -DnbjjvbdMgComQVL -DoCjjvbdRotGjFcw -DnbjjvbdmajWxOmu -EPCkKvbdbPfgDkzd -Dnbjjvbdpxngfpcx -DoCkKvbdBraCtGWr -DncKjvbduDCtwWPP -EPDLKvbdYzcFrKVy -EObjjvbdbVBgXkTh -DnbkKvbdyYIibPyk -DncLKvbdUVlPitAq -EObkKvbdbKlGOnDA -DnbjjvbdrJAKFNPF -EPDLKvbdLAjgMbYR -DoCjjvbdSxLLmzjx -DncKjvbdeEnqawCj -EObkKvbdFWZQPmKF -EOcKjvbdGdKvJbJj -DnbkKvbdjcLjqHUg -EPCjjvbdQvnDcLgc -EPCkKvbddoFTLTtS -DnbkKvbdZtIhyDrn -EPDKjvbdBvzdIdpW -EObjjvbdEYYLstUM -EPCkKvbdyzdnSHiI -EObjjvbdZLqdTmlN -EPDLKvbdIHHZyXwg -DoCkKvbdbVBfxKtI -DnbkKvbdMpYRWOGs -EOcKjvbdczYoxYqC -EPCjjvbddwytTqez -EPCjjvbduaDySoEh -EObkKvbdTJZiqAAl -EObjjvbdmoyyWLYb -EPDKjvbdnPyxukZC -EObjjvbdrWolDJZR -DoCkKvbduCbtvvPP -EPDLKvbdJbicQibx -DncLKvbdHELVibJj -DnbjjvbdKefHbAqV -DncLKvbdsZkpTBHn -DoDKjvbduCcVXWOo -DnbkKvbdidkGtoAO -DnbjjvbdrEFIonWB -EPCkKvbdfpBzwEYI -DncLKvbdwuNFRZMO -EPDLKvbdrounjCvG -DncLKvbdxxJJaoyk -EPCjjvbdJmADzHUa -EPDLKvbdqGEFTvBI -EPDLKvbdyOShYTJD -EPCjjvbdJutecdfi -EPDLKvbdIMBznXQk -DncKjvbdmoyxvKyC -EPDLKvbdrXQMChyR -DoCkKvbddwytUSFz -DncKjvbdZjTHofbG -EPDKjvbdGcjujCJj -EPCkKvbdvBEYsOeI -DncKjvbdCTAcUGWr -EPCkKvbdmbKWwnnV -DnbjjvbdpxnhHREY -EObjjvbdlZTRsYft -DoCjjvbdhkdcmtcZ -EObjjvbdMfcPmPtk -EPCkKvbdJXtCHkpp -DnbjjvbdrSUjmkBN -EOcLKvbdYSlBMtOx -EObjjvbdznopdbkx -DncLKvbdddoSCXDK -DoCjjvbdOXnuzcnU -EPCkKvbdZGwEAOsJ -EOcKjvbdauCGwjtI -EPDLKvbdNHDPmPuL -EOcLKvbdNHCpMpUk -DoCjjvbdmSYtysDi -DncKjvbdFjeTDINV -DncKjvbdNrtWHFUp -EPCjjvbdmJETqUqa -DncKjvbdEzsqEkcJ -EOcLKvbdmoyyVjyC -EOcLKvbdZMSETnMN -EOcLKvbdBsAbtFvr -EPCjjvbdJutfEFHJ -DoCkKvbdiBoDEwRR -EPDLKvbdZQmFImFR -EPDLKvbdpfDdsuaI -DnbkKvbdmbKXYPNu -EObjjvbdjKGHjNXr -EOcLKvbdpssgSRjt -DoDLKvbdKRZePGOF -DnbkKvbdfekymgHA -DoDLKvbdiCOcFWqR -DnbjjvbdiHJbyWKV -DoDKjvbdsCGNMHKy -DoCjjvbdGKeSbgmV -DoDLKvbdkIGkfFnL -DncKjvbdfILWRnRH -DoDKjvbdGLEsChNV -EPCjjvbdVrNxBeMD -EPDKjvbdSLZGVHKs -EPDLKvbdQlxByOUz -EOcLKvbdMgDQNQVL -DoDLKvbdrRtjnLAm -EObjjvbdCIkBjhfK -DncKjvbdDwwlTssl -DoDLKvbdANIYsWzY -DnbjjvbdxVMdqYkn -DoCkKvbdzdynzdzQ -DnbjjvbdxsNhmRag -EObjjvbdzjVQPcrt -DoCkKvbdbBWFFopX -EPDKjvbdhfibxvKV -DnbkKvbdegjvRmqH -EPCjjvbdkNCMZdgP -EOcLKvbdmtuZkJqf -EObjjvbdemFvfljL -DncLKvbdyYIibPyk -EObjjvbdieKftoAO -DncKjvbdvOszqKoU -DncLKvbdVUNTelWK -EOcKjvbdCDoaWKMf -EPCkKvbdbsDKtDjB -EPDLKvbdmSYuZsDi -DncLKvbdwWlBWBWV -EObjjvbdkVwOEBww -EObkKvbdWSNwbFLc -DnbjjvbdZRNFImEq -DoDKjvbdrounjDVf -EPDKjvbdCJKbKhej -DncKjvbdsrrTYyeD -DoCjjvbdQvnEDMHc -DoCkKvbdGQASwGfZ -EOcLKvbdfSBWzkbo -DoDLKvbdRkZGVGkT -EOcKjvbdyXhjCPzL -EPCkKvbdbrbkTdJa -EPDLKvbdsQVnibvG -DnbjjvbdpyOgfpdY -DoDLKvbdtunXiqTA -EPDKjvbdqGDdsvAh -DncKjvbdjEkHUoAO -EPCjjvbdGQATXGfZ -EOcKjvbdKDJcRKCx -DncKjvbdhyuGMQnG -DoCkKvbdYkrDsnMN -DoCjjvbdaNKbSuMg -EOcLKvbdrykpTAhO -DnbkKvbdrSUkNkAm -EPCjjvbdwzHeeweS -DoDLKvbdSBdFMJYk -DnbjjvbdqUUGrRjt -DoDKjvbdzitoocrt -EPDKjvbdxnShXriD -DoCkKvbdVviXvEEg -EObkKvbdFxuUaDxC -EObkKvbdygZMAMeX -DnbjjvbdiifHilxS -EPDKjvbdZxcjODMS -DoDLKvbdWWhxWEFH -EPCjjvbdzoQQeClY -EOcLKvbdptUHRqjt -DoDKjvbdVviXudEg -EPDLKvbdUQpnuVHm -EPCjjvbdwzHfFweS -EOcLKvbdZxcjNbkr -EObkKvbdZnmhddyj -DoDLKvbdvlvANDdm -EOcKjvbdMfbolpVL -EObjjvbdbAvFFpQX -EOcKjvbdBdPaWJlf -DncKjvbdqceIonWB -DoCkKvbdtcDVWvOo -DoCkKvbddoFTKssr -DoDKjvbdaMkBruMg -EPCjjvbdEuyPolie -DnbkKvbdOEcsiJLE -DncKjvbdHlBznWqL -EPDKjvbdbhlijewY -EObjjvbdfoazwDwh -EOcLKvbdaNKbStlg -DoCkKvbdqdEiQOWB -DoCkKvbdTvLpKUBR -DncKjvbdkNBkzFHP -EObkKvbdFkErcHlu -DoCkKvbdZshiYcrn -EObjjvbdEJhJvYKA -DnbkKvbdOTUWHFUp -DoDLKvbdVhXvXfxz -EPDLKvbdBdPaWKMf -EObjjvbdFejRnJTq -EPDLKvbdULvPBVoJ -EPDKjvbdJzpFwdAN -EPDKjvbdqwPkbiZR -EPDLKvbdrEFIomua -EOcLKvbdijFhJlxS -DnbkKvbdYkrEUOLm -DnbkKvbdIMBznXQk -DncKjvbdZisHpHCG -EPDLKvbdzjUopESt -DnbjjvbdzjUpPcrt -EPDKjvbdqZOgfpdY -DoDKjvbduLxXAsaX -EObkKvbdrMyiyMHi -EPCkKvbdqTsfqrKt -DoDKjvbdTfznMXVe -EObkKvbddoErkUTr -EOcLKvbdHELWKCJj -DncLKvbdUVkpJtAq -EPCjjvbdRMxBxmtz -EPDKjvbdjEjftoAO -EOcLKvbdYkrDsmkm -DoDLKvbdajlFoNcA -DoCjjvbdmJDtRUqa -EPDKjvbdTqQoUuIN -DnbkKvbdtcDUvvPP -DncLKvbdrbGMlHLZ -DnbkKvbdKfGHbApu -DncLKvbdGFjRnIsq -EPDLKvbdJzpGYEAN -DoCjjvbdkySrSyHU -EObjjvbdKVtfDdfi -EPDKjvbdNrsugFUp -DoCkKvbdNxOuzcmt -DoDLKvbdDihJuxKA -DnbkKvbdzdzOzdzQ -DncKjvbdmSYuZrci -EOcLKvbdptTfqqkU -EPCkKvbdVUNTfLvK -DoCkKvbdGdKujBjK -DoCjjvbdzitopETU -DoDKjvbdqvokbiYq -EPDLKvbdGFjSOJTq -DoDKjvbdliETqUrB -DoDKjvbdZisIQGbG -DoCjjvbdnQZyWLZC -EOcLKvbdGdKujCJj -EPCkKvbdaRfDIUGL -EOcKjvbdauCHXjtI -DnbkKvbdbQHHDkzd -DoCjjvbddZxpYYpb -EObkKvbdbBWEepPw -DncKjvbdSLYfVGkT -EObkKvbdVgxVxHYz -DoCjjvbdfpBzwEYI -DoDKjvbdmfdxMmfy -DncKjvbdhancEwRR -DnbkKvbdEASJMzXX -EObjjvbdmfdwmNfy -DnbjjvbdhbOcFXQq -DoCjjvbdVgxVxGxz -EPCkKvbdQcbaQQdS -EPCjjvbdhbObeXRR -EPDKjvbdePFSkUTr -EPDLKvbdMoxQumgT -DoCkKvbdIBkydzAD -EOcLKvbdcasMrAUN -DoCkKvbdUQqOttgm -DnbkKvbdelevfljL -EObjjvbdZeXfzgiC -EPCjjvbdQYmAGrrK -EObjjvbdxZhGFxFS -EObjjvbdJuuGEEgJ -DoDLKvbdEARhlyvw -EPDKjvbdZdxGzhJC -DoCkKvbdzRPMhiwA -DoCkKvbdZxcinClS -EOcKjvbdFyVVBEYC -EOcLKvbdtbcUwVoP -DncLKvbdlZSrTYft -EObkKvbdaaVeGPow -DncLKvbdEKIJvXjA -DncLKvbdbhljKfWx -EObkKvbdVhYVxGxz -EPDKjvbdmpZxukZC -DoDLKvbdnBivxOnV -EObjjvbdRbEEkiZL -EPCkKvbdZRNFIleR -DoDLKvbdZyEJmblS -DncKjvbdkIGkefNk -EPDKjvbdRkZGVGjs -DnbkKvbdiHJbyVjV -EPDLKvbdFjeSbglu -DncLKvbdqFcdtVaI -EOcKjvbdGYuVAdYC -DoCjjvbduaEZSneI -DnbjjvbdKWVFdFHJ -EObjjvbdGdLVjCJj -DnbkKvbdpssgSSKt -DoCjjvbdssRryZdc -EPDKjvbdZisIQHCG -EOcKjvbdCIjajhfK -DoDKjvbdrafNMGjy -EObkKvbdgQBzwEXh -DnbjjvbdgQBzwDwh -DncKjvbdCEQAvKMf -EPCkKvbdiCOcFWpq -EPDLKvbdLFfHbBQu -EPCjjvbdJTYaSmXl -EPCjjvbdRjyFuGkT -DoCkKvbdjFKftoAO -DncKjvbdmaiwXoNu -DoCjjvbdVZITyjnn -DoDLKvbdDxYLtUTl -DnbjjvbdqvpLcJYq -EOcLKvbdlqxuZsDi -DoDKjvbdZshhyDsO -DoCjjvbdGFjSOIsq -DnbkKvbdcScKtEKB -EPCjjvbdMpXqVmfs -EPCjjvbduoTzpjoU -DoDLKvbdYkqctNkm -EObkKvbddoErjstS -DnbjjvbduLxWaUAw -DoCkKvbdRXODbkgc -DoCjjvbdwzIGFweS -DoCkKvbdZyEKOClS -EObjjvbdiGjCxvJu -EObkKvbdbiMijewY -DoDKjvbdqrVKmkBN -DoCkKvbdFyUuBEYC -DoDLKvbdNsTufduQ -DoDLKvbdEPCkKvcE -DoDLKvbdNQYRWNgT -DnbjjvbdNrtWGeUp -DoCjjvbdPxmAGrqj -EPDKjvbdKNAEZgVB -EPDKjvbdmttzKjSG -EPDKjvbdssSSxydc -DoCjjvbdTlWPAuni -EObjjvbdDHLegAzc -EObjjvbdXnRAXtvU -EObkKvbdKfFgaaQu -EOcKjvbdhtzFXSUb -EPCkKvbdJTZAsMwl -EOcKjvbdQYmAGsSK -DoCkKvbdjhHLeemk -EOcLKvbdiifIJmYS -EPDKjvbdLrWlzVQz -DoCjjvbdxsOIlrBg -EPDLKvbdNPxQvNfs -DnbkKvbdIGfyxwxH -DoCjjvbdjKFhKMwr -DnbjjvbddjKSVtzn -DoCjjvbdZoNiFEzK -EPCjjvbdeFOqavcK -DoDLKvbdEuxpQMie -EObjjvbdZjShQHCG -DoDLKvbdZMSDsmkm -DoDLKvbdGYtuBEYC -EPCjjvbdUaBprqRy -EOcLKvbdmozZWLZC -DncLKvbdUWLpKUBR -EPCjjvbdqYnhHQcx -DoDLKvbdUaBprpqy -EPDKjvbdrzMQSaHn -DnbjjvbdGdLWKCJj -EObkKvbdfILVrNqH -EPCjjvbdehKvRmqH -EPDKjvbdOSsvGeVQ -DncLKvbdxxJJaozL -EPCjjvbdZLqctNkm -EOcLKvbdZxcinCkr -DncLKvbdkWWmcbXw -DoDLKvbduCcVXWPP -DncLKvbdyTNhlqbH -DncKjvbdYTMAlsoY -DoCkKvbdRosfjFcw -EPDLKvbdDwxLsstM -EOcKjvbdlZTRryHU -DoCjjvbdNGbpMpVL -EOcLKvbdYgWdAOri -DoCjjvbdDxYLstTl -EObjjvbdIwtBglRQ -EOcKjvbdvPTzpkPU -DoCjjvbduLxXAtBX -DoCjjvbdiLeENuCy -DnbjjvbdUaCRSqRy -DnbjjvbdYpmEhleR -EObjjvbdsPvOjDWG -DoCkKvbdLFfICApu -DncKjvbddxZstRez -EPCkKvbdFyVVAdXb -DoCjjvbdFyVVBDxC -DoDLKvbdFeirNiTq -EPCjjvbdxnSgxTIc -EOcKjvbdAMgySwZx -EObkKvbdkyTRryHU -DoCkKvbdMRwMzUpz -DnbjjvbdCWzdJEov -DoCkKvbdUyITzLPO -EPCkKvbdcSbjsdKB -DoCkKvbdqceIonVa -DoCkKvbdjmCMZeGo -DncKjvbdfMewGljL -EObkKvbdpfEEtVaI -DoDLKvbdczZQYYqC -DoDLKvbdRNXbYmtz -EObjjvbdTvLojUBR -EPCkKvbdtbcVXWPP -DncLKvbdmSYuZrdJ -DoDLKvbdTukpKUBR -EPDLKvbdsQVoKCvG -EPDLKvbdBraCtFvr -EPDLKvbdZQmEiNEq -EPCjjvbdrzLosAgn -EPCjjvbdssRsZZdc -DncKjvbdbAudepQX -DncKjvbdcTDKscia -DncLKvbdlqyVZsEJ -EOcLKvbdbVCHXkTh -EObkKvbdYTMBMsnx -DnbjjvbdULvPAuoJ -DoCjjvbddtAUASlv -DoDKjvbdxUmEpxkn -DncKjvbdQwOEDLgc -DoCkKvbdSPsgKGDw -DncKjvbdiCOcFXQq -EPDKjvbdRkYfUfkT -EObkKvbdKCjDRJcY -DoCjjvbdZLqctOMN -EPCjjvbdUWLpKTaR -EPCjjvbdLqwMzVQz -DnbjjvbdnBivxPNu -EObkKvbdRpUHKFdX -EPCjjvbdeATqNXif -DoCjjvbdfILVrOQg -DoDKjvbdNrtVfeUp -EOcLKvbdNUrrKmAX -EPCjjvbdrbFllHLZ -DncKjvbdkDMLQgUg -DoCkKvbdVvhwvDeH -DnbjjvbdKeegaaRV -DoDKjvbdcJMjKfXY -DnbjjvbdZtJJYcrn -DoDLKvbdyqOliJwA -DoDLKvbdMgDPmPuL -DoCkKvbdHffzZXxH -DoCjjvbdZxdKNblS -EPDKjvbdkDLjqGtg -EPDKjvbdYzbeqjVy -DncLKvbdTppnttgm -EObkKvbdVYgtZjnn -EPCjjvbdzaAOgHCM -EOcKjvbdcyxoxZRC -EPDLKvbdxnSgxTJD -EObkKvbdfMfXHNJk -EPDKjvbdunszpjoU -EObkKvbdFfKRmhsq -EOcLKvbdhtydwRtb -DoDLKvbdYkrDsnLm -EPDLKvbdGGKSOItR -EPCkKvbduDCuXVno -EPDLKvbdrEFJQOVa -EPDLKvbdIjEAKQGd -EObjjvbdIryArmYM -DoDLKvbdYkqctOMN -EPCkKvbdiZtekqOG -DncKjvbdzdzOzeZp -DoDLKvbdbiNKLFwY -DnbkKvbdlhcsqUrB -DnbkKvbdKyRJrzuG -DoDKjvbdOFDtIiKd -DnbjjvbdvvlBWBVu -DnbkKvbdlrZUyrdJ -EObkKvbdxZgeewdr -DncKjvbdegkVrNpg -DoCjjvbdrJAJeNPF -EObjjvbdmfeXmOHZ -DoCjjvbdNPwqVmfs -DnbjjvbdnPzYvLZC -EPDKjvbdZshiYcrn -EOcLKvbdhgJcYvJu -DoDLKvbdXrlAmToY -DnbkKvbdwWlAvBVu -DnbkKvbdjvWnEBww -DoDLKvbdTYLLmzjx -EOcKjvbdDihJuxKA -DncLKvbdTfznLvue -DoCjjvbdVgwvXgYz -EObjjvbdsBfMkgKy -EPCjjvbdUaBqTQrZ -DnbjjvbdbhmJkGWx -EPCjjvbdLBLGmCYR -DoDKjvbdwjwEHzyf -EPDLKvbdegkVrNpg -DoCkKvbdJpzEnfOF -EPCkKvbdFejSOItR -DnbjjvbdTqQnuUhN -EOcLKvbdUMVoAvOi -EPCkKvbdSCEFLiZL -EPCkKvbdnCKXYPNu -EPDLKvbdZyEKNbkr -DncLKvbdZisIQGaf -EObjjvbdGLEsDHmV -DoCjjvbdBcpAujNG -EObjjvbdZRNFIleR -DnbjjvbdVrOXaeLc -EPCjjvbdHELViaij -EOcLKvbdqcdhpNvB -EPCkKvbdiZuFkqOG -DoCkKvbdOSsufeVQ -DoDLKvbduoTzpjnt -EOcLKvbdTqRPUuHm -DoDLKvbdCDpAuilf -EOcKjvbdZMSDsnMN -DoDLKvbdYqNFJMeR -DnbkKvbdbAvFFpPw -EOcKjvbdVqmwaeMD -EPCkKvbdUyHsyjnn -EPCjjvbdKeehBaQu -DoCjjvbdZshiYdTO -EObkKvbdTvMQJsaR -EPCjjvbdjblKqHUg -DnbkKvbdYlSDtOMN -EObkKvbdrWpMCiZR -EOcKjvbdUGzmlWue -DncKjvbdFyUuAcwb -EPCkKvbdLZQjSztf -EPCjjvbdfjfzbfAE -DncKjvbdFWZQQMie -DoCjjvbdVgxVxHYz -EOcKjvbdWWhxWEFH -DoDLKvbdUWLoitAq -DoDLKvbdzaAOffbM -EOcLKvbdrXPkbiYq -DoCkKvbdYzberKVy -DncLKvbdIMBznWpk -EPCkKvbdEPCkKwDE -DnbkKvbdWWiYVcdg -DoCkKvbdCWzchdpW -EOcLKvbdjvXNcbYX -EPDLKvbdSxLMNzjx -DnbjjvbdhficYuiu -DncLKvbdvmWAMdEm -EObjjvbduaDyTOdh -DncKjvbdwWlAvBWV -DoDKjvbdVviYWDeH -EOcKjvbdNsUWGdtp -DoCjjvbdzjVPodTU -EPCkKvbdmIcsptqa -EPDLKvbdIHHZxxYH -EPDLKvbdUyIUZkPO -EObkKvbdCDpBWJlf -EPDKjvbdWSNwaeMD -DoCjjvbdACrXjZhp -EPDLKvbdwuMdqYlO -DnbjjvbdHlBznWpk -DnbjjvbduaDyTPEh -DnbjjvbdwuNFRZLn -EObjjvbdajkfOnDA -DnbkKvbdWWiYWEEg -EPDLKvbdffLymgHA -EOcLKvbdkDMKpfuH -EPDLKvbdMoxQvOHT -DnbkKvbdbKkenmcA -DoCjjvbdhytfMRNf -DoCjjvbdIsZAsNXl -DoDKjvbdLiBkqYAS -DncLKvbdyzdmrHiI -DnbjjvbdemFvfmJk -EOcLKvbdSCEEkiYk -DoDKjvbdbiNKKevx -DoDLKvbdaaVdeoow -DnbjjvbdNGcQNPuL -DncLKvbdQYmAGrrK -EPDKjvbdrbGMkfjy -EPCjjvbdZjShPfbG -DnbjjvbdJmADyfuB -DnbjjvbdhtzFWquC -DnbjjvbdQvmdDMID -DncLKvbdjvWnEBww -EPCjjvbdxZgfGXdr -EObkKvbdDihKWXjA -EPCkKvbdZMSETnLm -EPDKjvbdZLqcsnMN -EObkKvbdqwPlDJZR -DoDKjvbdZisIQGaf -EObjjvbdjlalZeGo -DncKjvbdxsOJMqag -DoDKjvbdOFEUIhkE -DoCkKvbdzitoodSt -DncLKvbdVrNwaeMD -DoCjjvbdezuyEiTw -EPDKjvbdiCOcEvpq -DoCjjvbdvvlAvAvV -DnbjjvbdJuuFceHJ -DoCjjvbdlYrrSyGt -EPCkKvbdfILVrNqH -DoDLKvbdxsOJNRbH -DncKjvbdIwtBgkpp -DnbkKvbdOTUWHEtp -EPDKjvbdFejRnIsq -DnbjjvbdVBCRTQrZ -EPCjjvbdiMEcnUcZ -EObkKvbdiZuGMRNf -EOcKjvbdatbHYLTh -DoCkKvbdmSZVZrdJ -DoDKjvbdqTsgRqjt -DoDLKvbdCEQBWKNG -DnbjjvbdZtJJZESn -DncLKvbdIHGzZXwg -EPDLKvbdwtmFRZMO -DoCjjvbdKDJbqJcY -EObkKvbdatbHXkUI -DnbkKvbdYqNEhleR -EObjjvbdNHColotk -EPDKjvbdegkWSNpg -DoDLKvbdRjyFtfjs -DoCjjvbddoEsKtUS -EOcLKvbdsQWOjCvG -DoCkKvbdvAcxsOeI -EObjjvbdbAueGQQX -EOcLKvbdxKwEHzzG -DoDKjvbdqTtHSRkU -EOcKjvbdOAIsUKSA -EPCjjvbdWSNxCElD -EPDLKvbdnCKWwoNu -DncLKvbdEARiMzXX -DoCkKvbdbAvEeoow -EOcKjvbdhgJcYvJu -DnbjjvbdTulPisaR -DnbjjvbdIidAKQGd -EPDKjvbdyOTIXrhc -EPCkKvbdrbFmLgLZ -EPCjjvbddeOqbXDK -DncKjvbdRacdlJZL -EOcLKvbdbsDKtDjB -EPCjjvbdUyHtZkOn -EObkKvbdyTOImSBg -DncKjvbdtbbtwWPP -EPDKjvbdKDKDRJcY -EObjjvbdhanbeXQq -EOcLKvbdvvlAuaWV -EPDLKvbdVYgsyjoO -EPDLKvbdKaKflawq -EOcLKvbdCIjajiFj -EObkKvbdUsmUGMWK -EPDLKvbdIjEAJofd -EOcLKvbdqBJFAWhE -EPCkKvbdEJgivXjA -DnbkKvbdYkqdTmkm -EPCkKvbdliDsqUrB -EObjjvbdKVtfEEfi -EObkKvbdmgFYMmgZ -EObjjvbdEARhlyvw -DncKjvbdaRecHtGL -DnbjjvbdNQYRVmfs -EOcLKvbdFfKRnJTq -DncLKvbdMgDQNQUk -EObkKvbdHgGyyXwg -EPCkKvbdCJKbKiFj -EPCkKvbdBraDUGXS -EPDLKvbdiMEcnVCy -DoDLKvbdkCkkQfuH -EOcLKvbdwtmFRZLn -EPDKjvbdKefHbApu -DnbkKvbdkxrqsZGt -EPCkKvbdfIKvRmqH -EOcKjvbdDnbkLWbd -EPDLKvbdaRebhTek -DoDLKvbdjuwODaxX -DnbjjvbdREDBPpdS -DncLKvbdjuwNcaww -EOcKjvbdbiMjKevx -EPDKjvbdqvpLcIyR -EPCjjvbdijGIKMxS -EPDLKvbdQmYCZNtz -EObjjvbdCDpAvKMf -EOcLKvbdJJdAKPgE -DoDKjvbdUxgszLOn -DnbjjvbdOEcshhjd -DoCjjvbdUaCRSprZ -EPCkKvbdxmrhYTJD -EPDKjvbdICLydzAD -EPCjjvbdKRZdoFme -EObkKvbdNdctJIjd -EPCjjvbdKVuFdEgJ -EObjjvbdrXPlDIyR -DoCkKvbdfMewGmKL -DnbkKvbdIwsahMQp -EOcLKvbdRaceMIxk -EPCkKvbdcyxoxZQb -EObjjvbdRkYeuGkT -DncLKvbdbVBfwkTh -EObjjvbdTppoVUhN -EPCjjvbdhytfMROG -EOcKjvbdUxgszKoO -DoCjjvbdGLEsDHlu -EObkKvbdegkVqmqH -DncKjvbdkMbLyeGo -DncKjvbdyzdmqghh -EPCkKvbdGFiqnIsq -EPDKjvbdpstGqqjt -EPDKjvbdYkrDsmkm -EPCkKvbdKaLGlbXq -DoCkKvbdxwiJbPyk -EPCkKvbdJcKDQibx -EPCkKvbduDCuXWPP -DnbjjvbdiGicZWKV -DoCkKvbdsPunicWG -DnbjjvbdKNAEZgVB -EPDLKvbdnPyxujyC -EObkKvbdJXsagkpp -EObkKvbdNddUIiKd -DnbjjvbdQwOEClID -DnbkKvbdFVxpQMie -EPCkKvbdVrNxBeLc -EPCjjvbdUsmUGLuj -EPDLKvbdGZVVBDwb -DoCjjvbdmRyUyrdJ -DncKjvbddZxoxZQb -DnbjjvbdGKdsDINV -EObjjvbdrafNLgKy -DoCjjvbdJbjCqJbx -DnbjjvbdlYsSTYgU -DoCkKvbdQvnDblID -DoDKjvbdssSTYzFD -DncKjvbdmozZVkZC -EPDKjvbdjbkkRGuH -DoDLKvbdxmrgwriD -DoDKjvbdfHkVrORH -EPCkKvbdJuuFceHJ -DoDKjvbdcbSlrATm -EPCkKvbdeATpmXif -DncLKvbdBiKajhej -EPCkKvbdrNZixlIJ -EPDLKvbdKVteceGi -EObkKvbdzjVPodTU -DoDLKvbdWSNxCEkc -EOcKjvbdZxcimcLr -EOcKjvbdZnnIeEyj -DnbkKvbdmbKWxPOV -EPCkKvbdZLrETmkm -EPDKjvbdnUtyjiqf -DoCkKvbdrWpLcJZR -DoCkKvbdaMkCStmH -DncLKvbdFVxpQMie -EPCjjvbdrpWOicWG -EOcKjvbdyOTIYShc -EObkKvbdqrVLNkBN -EOcLKvbdQvnDbkhD -EOcLKvbdDigiuxKA -DncLKvbddoErkTtS -DoDKjvbdRWmdDLgc -EPCjjvbdiHKDZVjV -DnbkKvbdADSYKZiQ -DnbkKvbdsPunibuf -DoCjjvbdSPsfiedX -EPDKjvbdJmAEZfta -EOcKjvbdZMRcsnLm -DoCkKvbdiLddOUcZ -EObkKvbdqqtkOLAm -DoDLKvbdYpmFImFR -EObjjvbdVhYWXfxz -DnbjjvbdMowqWNfs -EObkKvbdVgwuwgYz -DoDKjvbdDxYLsssl -DnbjjvbdZtIiYcsO -DnbkKvbdxwiKBpZk -DoDKjvbdEuxpPmKF -EOcKjvbdJcKDRKCx -EObkKvbdUtNUFlWK -EOcKjvbdjhHLfFnL -DoCkKvbdSQTgKGDw -DncLKvbdQccBQRDr -DncLKvbdILazmwRL -DoDKjvbdYTMBNUPY -DoDLKvbdKaKfmCXq -EPCjjvbdkIHMGGOL -DnbjjvbdCIjbKhfK -DnbkKvbdVgwuwfxz -EPCjjvbdwtmFQxkn -EPDLKvbdcyyQYZRC -DoDKjvbdPyNAGsRj -EObjjvbdSLYetgLT -DoDLKvbdMRwNZuQz -DncKjvbdFjdrcHlu -DoCjjvbdZyDimbkr -DnbkKvbdRXNdClID -EObjjvbdEYYLtUTl -EObkKvbdVqmxBdlD -DoDLKvbdptTgRqkU -EOcLKvbdBdPaWKMf -EPCjjvbdiBncEvpq -DoDLKvbdzQoNJKXA -DoDKjvbdUQpoUtgm -DnbkKvbdrzLpTBHn -DoCjjvbdunszpkPU -EPDLKvbdSZjHsCvA -DncKjvbdRotHJfDw -DnbkKvbdFejSOItR -EOcKjvbdeFOrBwCj -DoDLKvbdkVwNdCXw -EPCkKvbdeOdrjtTr -EPCjjvbdhuZdwRuC -DnbkKvbdfILVqmqH -DncKjvbdnPzYvLYb -DncKjvbdHgGzZYXg -DncKjvbdkVwNcaxX -DoDLKvbdOAJSsjSA -DncKjvbdOFDtJIjd -EOcLKvbdVgwvYGxz -EObkKvbdsQVnjDWG -DoCjjvbdZjShQHCG -DncKjvbdzoPpeCkx -DoDLKvbdSLZFtfjs -DnbkKvbdBsBCtFvr -EOcLKvbdFyUuAcwb -DnbjjvbdqUTfqrKt -DoCjjvbdZxdJmcLr -DncLKvbdmbJwYPOV -EObjjvbdEObjkXDE -EOcKjvbdaSFcIUGL -EPCkKvbdqYoIHQcx -EOcKjvbdfNGWgMjL -DoCjjvbdbrcKtEKB -EPCkKvbdvBDxsOdh -DnbjjvbdtcCuXVoP -DnbjjvbdrpWPKDVf -EOcKjvbdwyhFfYFS -EPCjjvbdnPyyWLZC -EPDLKvbduMYXBUAw -DoDKjvbduaDySoFI -DoCjjvbdyXiKCPzL -DncLKvbdGFjSOIsq -DoDLKvbdeEoRbXDK -DncLKvbdcTCjtDia -DnbjjvbdnUuZjiqf -DnbjjvbdjlakzFHP -EOcLKvbdwWlBWAvV -DnbkKvbdWWiXuceH -EObkKvbdemGWfmKL -EObkKvbdmuUykJrG -DoCkKvbdmozYvKxb -DncKjvbdQZNAGsSK -EObjjvbdjblKpgUg -DncKjvbdSZigsDWA -EOcLKvbdZyEJmblS -DoCjjvbdnCJwYOmu -EPDKjvbdtkxWaTaX -EPDKjvbdGZUuAcwb -DoCkKvbdyfxlANEw -EPCkKvbdTAFJIBnd -DncKjvbdZLqctOMN -DncKjvbdUMWPBWPJ -EPCkKvbdDwwksstM -EPDKjvbdEObjjvbd -EObjjvbdWXJYWEEg -DnbjjvbdpaIeAXIE -DoCjjvbdqYoIHREY -DnbjjvbdvmWAMceN -EObkKvbdLFfHaaQu -EOcLKvbdpaIeAWgd -EPDLKvbdkCkkQgUg -DnbjjvbdePErkTtS -DnbkKvbdNGbomQVL -DoDLKvbdEPCjkWcE -DoCkKvbdehLWRnRH -EOcKjvbdyXhibQZk -EOcLKvbdZyEKOCkr -DoCjjvbdkDLkRGtg -DoDLKvbdkaNPNALA -EObkKvbdrWpLbiYq -DoDLKvbdfHkVqmqH -DoDLKvbdEOcLKwCd -DoDKjvbdrykpTBHn -DncKjvbdxZgefYFS -DnbkKvbdJpzFPFnF -DoCkKvbdNGcPmPtk -EPCjjvbdhzUelRNf -EObkKvbdVTltFlWK -DoCkKvbduaDxrneI -EObkKvbdSQTgJfEX -EOcKjvbdVhYVxHYz -EOcKjvbdkCkkQgUg -EObkKvbdqUUHSSLU -EOcLKvbduLwwAtAw -EPDKjvbdZLrETnMN -EObkKvbdmttyjjRf -DoDKjvbdYqMdiMdq -DoCkKvbdkNBkzEfo -DncKjvbdiLeDnUcZ -DoDKjvbdZLrDsnLm -EPCkKvbduVnYKRTA -EPCjjvbdCIkCLJFj -EPDKjvbdssRrxyeD -DncKjvbdQwOEClHc -EPCkKvbdwXLaWAuu -EPCkKvbdUyHszKoO -EPCkKvbdJYTagkqQ -DoCkKvbdwuNFRYlO -EPCjjvbdfHkWRmqH -EOcKjvbddeOqbXCj -EObkKvbdhficYujV -EPCkKvbdmSYtzTEJ -EPCjjvbdtkxWaTaX -EPDLKvbdwygfGYEr -EPDKjvbdmpZxvKyC -DoCjjvbdpstGrSLU -EPDKjvbdUtMtGLuj -EOcKjvbdjlbLzFGo -EObkKvbdkyTSTZGt -EOcLKvbdLYpjSzuG -EPDLKvbdyXhibQZk -DncKjvbdptUHSRkU -DnbjjvbdFfKRmhtR -DoCjjvbdtbcUwVoP -EPDKjvbdhyuFkpnG -EPDLKvbdFpASwHFy -EPCjjvbdRbDeLiYk -DncLKvbdXmqAYUut -EObjjvbdqlyjZLgi -DoCjjvbdssSTYydc -DnbkKvbdTIzJqABM -EPCkKvbdxsOJNRag -EPCjjvbdlhcspuSB -EObkKvbdqUTgSRjt -EOcKjvbdOEcshhkE -EObjjvbdzjUpPdTU -DnbkKvbdvwLaVaWV -EPCjjvbdmoyyVkYb -DoCkKvbdOFETiJKd -EPCjjvbdeEnqawCj -EObjjvbdmuUzKjRf -EPDLKvbdVvhxVdFH -EPCkKvbdaSGDHsek -EPCjjvbdkySrTZHU -EObjjvbdtAGqIABS -EObkKvbdZyEJmblS -DncKjvbdyTOJMrCH -DncLKvbdFWYoolie -DoDLKvbdTvMPjUAq -EObjjvbdZLqctOLm -DnbkKvbdmIctQuSB -DoCkKvbdZGvdAPTJ -DoCjjvbdkDMLRGuH -DoDLKvbdnVUykKSG -DoDKjvbdLGFhBaRV -DncLKvbdxwiKBozL -DncLKvbdWIYWXgYz -DncLKvbdFkFSbglu -DoDKjvbdIGgZxxXg -DnbjjvbdEztRFMDJ -DoDLKvbdZQldiNEq -EOcLKvbdwWkaWAvV -DoDKjvbdLBLHMawq -DoDLKvbdkMbLzFGo -EPDKjvbdREDAopcr -DoCkKvbdZoNiEdyj -EPDLKvbddneSkUUS -DnbkKvbdSQUHJecw -DoCjjvbdZshhxcrn -DnbjjvbdRkZFuHLT -EPDKjvbdwuNEqYkn -DoDLKvbdemGXGmJk -EOcLKvbdKWVGDeGi -DoCkKvbdWSOXadkc -EObjjvbdVTmTelWK -DncKjvbdhkeDmuDZ -EPCkKvbdRWnEDMID -DnbjjvbdNQYRVnGs -DnbkKvbdTfzmlWvF -DoCkKvbdFpASvgGZ -DoCjjvbdqTsfqqkU -EObkKvbdUVkpKUAq -DoDLKvbdrRtkNjaN -EPCkKvbdrJAKEmOe -DncKjvbdIGfyyYXg -DnbjjvbdZLrDtNkm -EObjjvbdiMEcmuCy -DncKjvbdkyTSTZHU -DncLKvbdBsAbtFvr -DnbkKvbdrpWPKDWG -DncKjvbdbBWFFoow -DoDLKvbdxmsIXsJD -DnbkKvbdehLWRnRH -EObkKvbdiVZeXRuC -DnbkKvbdOTUVfduQ -DncLKvbdZjTIQHCG -DoDLKvbdOSsugFVQ -DoCjjvbdrafNLgKy -EPDLKvbdNPxRVmgT -EPDKjvbdHlBznXQk -EPCkKvbdCEQBWKMf -EObjjvbdtcDUwWOo -DoCjjvbdZMSDtNlN -DoDLKvbdvAcxrneI -EObjjvbdIxUCILpp -EOcKjvbdfSBWzkbo -EObkKvbdShzKRAAl -DnbjjvbdGZUuBDxC -EObkKvbdqlzKYkhJ -EPDKjvbdZyEKNbkr -DoDLKvbdsrrTYzFD -DoCkKvbdfSAvzkcP -DnbjjvbdqlzKYlHi -EPDKjvbdYTLaNToY -EPCjjvbdjEjgUoAO -EOcKjvbdTJZjRABM -EObkKvbdYORAXtvU -DoDLKvbdGKdrcHmV -DoDLKvbdbrcLUEJa -DncLKvbdqvpLcJZR -DnbkKvbdFeiqnIsq -EPDKjvbdZnnIeEzK -EPCjjvbdnUtzLKRf -DoDLKvbdDxXlUUTl -DoDKjvbdiMEcnUby -EObkKvbdYzbeqjWZ -DncKjvbdTvLojUAq -EOcLKvbdjuvmdBxX -DnbjjvbdzoPpdcMY -DoDKjvbdrovOibuf -DoDKjvbdFWZPomJe -DoDKjvbdqGDeUWBI -DoCkKvbdWWiYVdEg -EObkKvbdtvOXiqTA -DnbjjvbdqZPIGpdY -EObkKvbdLBKgNCYR -DoCjjvbdLBKgNCYR -EObjjvbdZsiJZESn -DoCkKvbdTqROtuIN -EPCjjvbdyfyMAMdw -EOcLKvbdptTgSSLU -DncLKvbdPxmAHTSK -DnbjjvbdRkZFtfkT -EPDLKvbdtlXvaUAw -EPCkKvbdqBJFAWhE -EPCkKvbdIidAJogE -EPDLKvbdKQydoGOF -EObkKvbdauCGwkTh -EPCjjvbdNddUIiKd -DoDLKvbdFfKRmhsq -EPCkKvbdeEnqbXCj -EObkKvbdJvVGDdfi -DoDKjvbdWRmwaeLc -EObkKvbdSCDeLiZL -EPDKjvbdDoDLLWcE -EPDLKvbdiMEcnUby -DnbjjvbdLBLGmBxR -EPCjjvbdZnmiEdyj -EObjjvbdVhXuwgYz -DncLKvbdUtNTfMVj -EPDLKvbdKaKgMaxR -DncKjvbdJcJbpicY -DnbkKvbdSKyGVHLT -DoDKjvbdzROlhjXA -DnbkKvbdlrZUysEJ -DoCkKvbdnQZyWLYb -DoCjjvbdeFOqbWbj -EOcLKvbdjgfkfGOL -EObkKvbdiHJbyWKV -DnbkKvbdGdLVibJj -DoDKjvbdGLErcINV -EPCjjvbdNGcPlpUk -EOcKjvbdjFLGtoAO -EOcKjvbdsBfMlGkZ -EObjjvbdhtydvquC -DoCjjvbdznpRFCkx -DncLKvbdYSkaNUOx -DoCjjvbdVvhxVdFH -EPDLKvbdNeETiJLE -DoDKjvbdcScLTdJa -EOcLKvbdQwNdDLgc -DoDLKvbdUMWPBWPJ -DncKjvbdqFdEtVaI -EObjjvbdhbPCeXRR -DoCjjvbdKeehCApu -DncKjvbdYNqAXuVt -DoDLKvbdjmCLzFGo -DoCkKvbdtlXwBUAw -EObkKvbdwtmEqYlO -EObjjvbdrovOjCvG -EObkKvbdqrVLOLBN -DoCjjvbdSBcdkhxk -DncLKvbdrEEhomua -EObkKvbdtbbtvuno -EPDLKvbdZjShQGaf -EPCjjvbdTAFJHbPE -DnbjjvbdcScLTcia -EObkKvbdbsDLUDia -DnbkKvbdkyTSTYgU -DncKjvbdySmhmSCH -DoCjjvbdnBivxPNu -DncKjvbdEXxLtTtM -EObjjvbdZshhyESn -DoDKjvbdkMbLzEfo -EObjjvbdssRrxyeD -DoDKjvbdcSbkTdKB -EPDLKvbdHDjvJbKK -DncLKvbdsQVnjCvG -DnbjjvbdJSyBTMwl -EOcLKvbddZxpYYqC -EPCjjvbdrXQLcJZR -DoCkKvbdnHEwlmfy -EOcKjvbdGZUuBDwb -EObjjvbdvOszqKnt -EOcLKvbdRosgKFdX -EPCjjvbdMpXqWNfs -EPCkKvbdJbibqJcY -DncKjvbdJvVFdEgJ -EObkKvbdqwPkcIyR -DnbkKvbdDwxMUTtM -DncKjvbdtcDVXVno -EPDLKvbdlZSrSxft -DoCkKvbdKeehCApu -EPDLKvbdQlxCYmtz -EOcLKvbdYqNFJNFR -DoCkKvbdnCKWwoOV -EObjjvbdwzIFfYEr -EOcKjvbdkDMLQfuH -EPCjjvbdrSUjnLBN -EPCkKvbdTfznMXVe -EPCkKvbdZxdKNcMS -DoCjjvbdJXsaglRQ -DoCjjvbdNPwqWNgT -DoCjjvbdLqwMzUpz -EOcKjvbdCDoaWJlf -DnbjjvbdlYsRsZGt -DncKjvbdeOdsLUUS -EOcKjvbdEvZQPmJe -DoCkKvbdqBJFAXHd -DnbjjvbdtkwwBUBX -EObjjvbdLFfHaaQu -DoDLKvbdbLMFoNcA -EPDLKvbdiLdcnUby -DnbkKvbdUQqPVUgm -EOcLKvbdEOcLLXDE -DoDKjvbdrEEhpOWB -DncKjvbdkCkkQftg -DncLKvbdMfbpNQUk -DnbjjvbdTulQKUAq -DoDLKvbdUtNUFkvK -DncKjvbddndsKtTr -EPDKjvbdliDsqVSB -EPCkKvbdhbOcEvqR -DoCkKvbdqceJQNua -DoCkKvbdrWpLcIyR -DncKjvbdrSVLNkAm -DoDLKvbdyOShYTJD -DncKjvbdyYJKBoyk -DnbjjvbdZQldiNFR -EPDLKvbdePEsKstS -EPCjjvbdcScKtDia -DncLKvbdxsOJNRbH -EObjjvbdEYXlUUTl -DoCkKvbdxUldqZMO -EOcKjvbdRjxeuGkT -EOcLKvbdqrVLNjaN -DoCkKvbdDwwktUUM -EOcLKvbdZQmEiNFR -EPCkKvbdMSXMytpz -DnbkKvbdnUtzKiqf -DoCjjvbdREDAoqDr -EPCjjvbdZyDinDMS -EPCjjvbdiCPDEwRR -EPCkKvbdmSZUzSci -DoDKjvbdkWWmdCXw -DnbkKvbdmJDsqVRa -EPDKjvbdhzVGLpnG -DoCkKvbdsPuoKDWG -DoDLKvbdrylPsAgn -EPCjjvbdsPuoJbuf -EOcKjvbdrEFJQOVa -EPCjjvbdEPDLLXCd -DncKjvbdkVwOEBxX -EPCkKvbdqGEFUWAh -DncLKvbdtbcUvuno -EOcKjvbdWIYWYGxz -EPDLKvbdZLqcsmkm -DoDKjvbdmaivwnnV -DoCkKvbdOYPVzcmt -DoCjjvbdVwIwvDeH -DoCjjvbdYkrETmkm -DoDKjvbdLFfHbAqV -EObjjvbdkIHLefOL -EPDKjvbdZjShPfaf -DoCjjvbdehLWSORH -DncLKvbdKfFgbBQu -EObkKvbdsPunjDVf -DncKjvbdiMEdNuCy -DncKjvbdFfKSNhtR -EOcKjvbdFVxpQNKF -DncLKvbdfHkVrORH -EObjjvbdKefIBaQu -EPDKjvbduCbtvuoP -EPCkKvbdGdLWKCKK -DncLKvbdLAkGmBwq -DncLKvbdZshiZESn -DnbjjvbdySmhmSCH -DoDKjvbdACqxJyiQ -DncLKvbdmajXYOmu -DnbjjvbdxVNFRZMO -DnbjjvbdVqmxBdlD -DnbkKvbdIGgZyYXg -DncKjvbdddnrBvcK -EPCjjvbdUGzmkwVe -DncLKvbdaNLCTVNH -DoCkKvbdWWhwucdg -DncKjvbdkWWmcaxX -DoDKjvbdaRfChUGL -EPDLKvbdOEcsiJKd -DoDLKvbdGLFTChMu -EObjjvbdjmBkzFHP -DncLKvbdrWokcJYq -EObjjvbdDHMGHAzc -EObkKvbdRyjITCvA -DnbjjvbdWRnXbElD -DoCjjvbdEARiNZvw -DnbkKvbdRjyFtfjs -DoCkKvbdMgDQNQVL -DoDKjvbdCEPaWJmG -DoCkKvbdUtNTfLuj -DoDKjvbdNGcQMpVL -DoDKjvbdZQmFImEq -EObjjvbdyYIibPyk -DoDLKvbdcSbjtDjB -EPCjjvbdPxmAGsSK -EPCjjvbdnUuZjirG -EPCkKvbddijSVtzn -EOcKjvbdxUmEqYlO -EOcKjvbdxrmiNRag -EPCkKvbdjmBlZeHP -EOcKjvbdvBDySndh -EObjjvbdliDsqVSB -EOcKjvbdTvMQKUBR -DncLKvbdRNXbYnUz -DnbjjvbdyYIiaozL -DoCkKvbdhbPDEwRR -EPDKjvbdptUGrSLU -DoDKjvbdFjeTChMu -DnbkKvbdFVxoomJe -EObkKvbdlYrrSyGt -EPDLKvbdVZHszKnn -DncLKvbdDwwktUUM -DncLKvbdDnbkKvcE -EPCkKvbdjJfHjMwr -EPDKjvbdUtNTfMWK -EObjjvbdbhlikGWx -DncLKvbdKfFhCBQu -DoDKjvbdVgwvXgYz -EPDLKvbdiBoCdwRR -EPDLKvbdzdzOzeZp -EObkKvbdMoxRWNgT -EPDKjvbdjvXNdBww -EObkKvbdUtMsfLuj -EOcLKvbdnUuZjjRf -DnbkKvbduCbtwVoP -EPDLKvbdGGKRmhsq -EObkKvbdePEsLTtS -DoCjjvbdSKyGUgLT -EOcLKvbdRbDdlIyL -DoDLKvbdNxPVzcnU -EObjjvbdkCkkRGtg -DncKjvbdVTmUFkvK -DncKjvbdUsltFkuj -EPDKjvbdSCEElJZL -EOcKjvbdZxcjNcMS -DoCjjvbdEJgjWYKA -DncLKvbdREDBQRDr -DncKjvbddoErjtUS -EPDLKvbdADSYJyiQ -EPDKjvbdatafxKsh -EPDLKvbdkIGkeemk -DoDLKvbdmRxtzSci -DnbkKvbdTlWPAvPJ -DncKjvbdjJegjMwr -DoCkKvbdqTtHSSKt -EOcKjvbdkMakzFHP -DncLKvbddZyPwxpb -DnbkKvbdTppnuUgm -EObkKvbdnPyxukZC -DoDKjvbdbiNJjewY -EPDKjvbdJSyArlwl -EPDLKvbdvvlBVaVu -EOcLKvbdjJfIKMxS -EPDLKvbdliETqVRa -DoCkKvbdWXJXvEFH -DncLKvbdiHKDZWKV -EObkKvbdEXwktUUM -EOcKjvbdRWnDcMID -EPDLKvbdbhljKfWx -DnbkKvbdVTlsfMVj -DnbjjvbdZoOIdeZj -DoDKjvbdDxYLtUTl -EObjjvbdmIdTqUqa -EPCjjvbdiZtekqNf -DoDLKvbdMfcPmPtk -EPDLKvbdKxpirztf -DnbkKvbdEARhlzWw -EOcKjvbdqiAJeMne -DnbjjvbdUsltGMWK -DnbkKvbdMoxRWNfs -EPCjjvbdTqQntuIN -EPDKjvbdLFfHbApu -EOcLKvbdANIZSwZx -DoCjjvbdSLZGUfjs -DoDLKvbdJSyArlxM -EOcLKvbddZxoxZRC -DoDLKvbdRpTfjFcw -EObjjvbdKefHbBRV -EPCkKvbdjlakyeGo -DoDLKvbdiBncFXRR -EObkKvbdkHfkefOL -DnbjjvbdfILVrORH -DnbjjvbdbsDKtDia -DoCjjvbdqiAKElne -EObkKvbdEXxMTtUM -DncKjvbdHfgZxxXg -EPDKjvbdQvnDcMID -DoDKjvbdCSaCsewS -DncLKvbdSZigsDWA -DnbkKvbdiUyeXSUb -DnbkKvbdZRNFJMeR -EPDKjvbdDxXlTstM -EPCjjvbdkNBlZdfo -DnbkKvbdhuZdvqtb -DncLKvbdHDkWJajK -EOcKjvbdhficZWKV -DoDLKvbdxwiKCPyk -EPDLKvbdZQleJMeR -DoDLKvbdLrXMytpz -DncKjvbdcTCjtEJa -DnbkKvbdUMVnaWPJ -DoCjjvbdnBjXYPOV -EObjjvbduWNwjQsA -DoCjjvbdRpUHJecw -DnbkKvbdJYUBglQp -EOcLKvbduoTzqKoU -EObjjvbdZMRctNlN -EObkKvbdziuPpESt -DoDLKvbduLxWaTaX -EOcLKvbdhgKDZWKV -DnbkKvbdZQldhmFR -EOcLKvbdcyyPxZQb -EOcKjvbdRWnDcLgc -DncLKvbdxZgfFweS -EPCkKvbdyqOliJwA -DnbjjvbdsPvPKCuf -DoCjjvbdMgCpNQVL -DncLKvbdOEdTiJKd -EPDKjvbdEARiMyvw -EOcLKvbdJbibqKDY -DoCkKvbdeEnrCWbj -DoCkKvbdGKdrcIMu -DnbkKvbdUMWOaVoJ -DoCkKvbdKaKgNCXq -DnbkKvbdoAKztHdO -EPDKjvbdDxXlUUTl -EOcLKvbdFVxoomJe -EOcKjvbdpyPHfpdY -EPCjjvbdxwiJaoyk -DoCkKvbdlqxtyrci -EOcKjvbdfHkWRmpg -DoCjjvbdkMalZdfo -EPCjjvbdJpyePGOF -DncLKvbdqUUHRqjt -DoDLKvbdziuQPdSt -DoDKjvbdBhjajiGK -EPDKjvbdjcLjpftg -EPDKjvbdVwJYWEFH -DnbjjvbdNdcsiJLE -DoCjjvbdQwODcLgc -EOcLKvbdtkxXAtAw -EPDKjvbdwMvANEEm -DoCjjvbdqFdEsuaI -EObjjvbdrSUjmjaN -DoDLKvbdnGeYMnGy -EOcLKvbdPyNAHTSK -DnbkKvbdMowpvNgT -DoCjjvbdGdLVibKK -DoDLKvbdtcDVXVno -EObkKvbdtlXwBUAw -DoCjjvbdSPsgKGEX -EPCjjvbdURQntuHm -DncLKvbdrMyjZLgi -EPDKjvbdwXMAvBVu -EOcLKvbdRjxfUfkT -DnbkKvbdGFjRnJTq -DoCkKvbdbUbHYLTh -EPDKjvbdoznEKxPA -EPCjjvbdLiBlQxAS -DncKjvbdfVzxPizs -DnbjjvbdSKyFtgLT -EPDKjvbdrXPlCiZR -DncLKvbdhzVGLpnG -EObjjvbdVwJYVdFH -EPDKjvbdwXLaWBVu -EPCjjvbdjhHMGFmk -EObkKvbdKyQjSzuG -DoCjjvbdmfeYNOHZ -DoDLKvbdZirgofaf -EOcLKvbdZoOIdeZj -EPCkKvbdLFfHbApu -EPCkKvbdjvWnEBww -DoDKjvbdcScLUEKB -DoCkKvbdkCkjqHUg -DoDKjvbdyTNhmSBg -DoCkKvbdkHgLfFnL -EPCjjvbdzoQQdcLx -DoCjjvbdOTTvHEtp -EPCkKvbdznopeDLx -EPCkKvbdGFjRmhtR -EPCkKvbdUaCQrpqy -EOcKjvbdnGeXmOHZ -DoDKjvbdiCPDEwRR -DoCjjvbdRbEFLiYk -DncKjvbdRXOECkgc -EPCjjvbdKWUedEgJ -DncKjvbdDjIJvYKA -DoDKjvbdyTOJNRbH -DoCjjvbdePFTKtTr -DoDKjvbdhtyeWrVC -EPCkKvbdqvolCiZR -DoDLKvbdapHHELzd -EObjjvbdlhdUQtrB -EOcKjvbdptUGrRkU -EPCjjvbdqUTfqrLU -EPCkKvbdcJMikGWx -DoDKjvbdlhctRVRa -EOcLKvbdANHyTXZx -EPDKjvbdpssfqrKt -EPCkKvbdFeiqnJTq -DoCkKvbdxZgfGXdr -EOcLKvbdRWmcblHc -DncLKvbdjggMFemk -DoDKjvbdKeegbBQu diff -r 540a11e15fbb -r 1c3fdd0c4268 hotspot/test/runtime/7158804/Test7158804.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hotspot/test/runtime/7158804/Test7158804.sh Wed Jul 05 18:27:34 2017 +0200 @@ -0,0 +1,30 @@ +#!/bin/sh +# +# Copyright (c) 2012 Oracle and/or its affiliates. All rights reserved. +# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +# + +## +## @test Test7158804.sh +## @bug 7158804 +## @summary Improve config file parsing +## @run shell Test7158804.sh +## + +if [ "${TESTJAVA}" = "" ] +then + echo "TESTJAVA not set. Test cannot execute. Failed." + exit 1 +fi +echo "TESTJAVA=${TESTJAVA}" + +rm -f .hotspotrc +echo -XX:+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa >.hotspotrc +${TESTJAVA}/bin/java ${TESTVMOPTS} -XX:+IgnoreUnrecognizedVMOptions -XX:Flags=.hotspotrc -version +if [ $? -ne 0 ] +then + echo "Test Failed" + exit 1 +fi +rm -f .hotspotrc +exit 0 diff -r 540a11e15fbb -r 1c3fdd0c4268 make/jprt.properties --- a/make/jprt.properties Wed Oct 31 18:35:56 2012 -0700 +++ b/make/jprt.properties Wed Jul 05 18:27:34 2017 +0200 @@ -79,20 +79,18 @@ ${jprt.my.test.target.set:TESTNAME=jdk_util}, \ ${jprt.my.test.target.set:TESTNAME=jdk_io}, \ ${jprt.my.test.target.set:TESTNAME=jdk_net}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_nio1}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_nio2}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_nio3}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_nio}, \ ${jprt.my.test.target.set:TESTNAME=jdk_security1}, \ ${jprt.my.test.target.set:TESTNAME=jdk_security2}, \ ${jprt.my.test.target.set:TESTNAME=jdk_security3}, \ ${jprt.my.test.target.set:TESTNAME=jdk_rmi}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_management1}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_management2}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_management}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_jmx}, \ ${jprt.my.test.target.set:TESTNAME=jdk_text}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_tools1}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_tools2}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_tools}, \ + ${jprt.my.test.target.set:TESTNAME=jdk_jdi}, \ ${jprt.my.test.target.set:TESTNAME=jdk_jfr}, \ - ${jprt.my.test.target.set:TESTNAME=jdk_misc} + ${jprt.my.test.target.set:TESTNAME=jdk_other} # All vm test targets (testset=all) jprt.vm.all.test.targets= \ diff -r 540a11e15fbb -r 1c3fdd0c4268 test/Makefile --- a/test/Makefile Wed Oct 31 18:35:56 2012 -0700 +++ b/test/Makefile Wed Jul 05 18:27:34 2017 +0200 @@ -58,9 +58,9 @@ jdk_io \ jdk_lang \ jdk_math \ - jdk_misc \ + jdk_other \ jdk_net \ - jdk_nio1 jdk_nio2 jdk_nio3 \ + jdk_nio \ jdk_security1 \ jdk_text \ jdk_util @@ -69,12 +69,14 @@ JDK_NONDEFAULT_TEST_LIST = \ jdk_awt \ jdk_beans2 jdk_beans3 \ - jdk_management1 jdk_management2 \ + jdk_management \ + jdk_jmx \ jdk_security2 jdk_security3 \ jdk_rmi \ jdk_sound \ jdk_swing \ - jdk_tools1 jdk_tools2 \ + jdk_tools \ + jdk_jdi \ jdk_jfr # All jdk tests